@contember/react-devbar 2.1.0-alpha.37 → 2.1.0-alpha.39
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.
- package/dist/development/index.cjs +17 -0
- package/dist/development/index.cjs.map +1 -0
- package/dist/development/index.js +17 -0
- package/dist/development/index.js.map +1 -0
- package/dist/development/src/DevErrorManager.cjs +110 -0
- package/dist/development/src/DevErrorManager.cjs.map +1 -0
- package/dist/development/src/DevErrorManager.js +110 -0
- package/dist/development/src/DevErrorManager.js.map +1 -0
- package/dist/development/src/errorHandling.cjs +55 -0
- package/dist/development/src/errorHandling.cjs.map +1 -0
- package/dist/development/src/errorHandling.js +55 -0
- package/dist/development/src/errorHandling.js.map +1 -0
- package/dist/development/src/hooks/useCopyErrorMarkdown.cjs +101 -0
- package/dist/development/src/hooks/useCopyErrorMarkdown.cjs.map +1 -0
- package/dist/development/src/hooks/useCopyErrorMarkdown.js +101 -0
- package/dist/development/src/hooks/useCopyErrorMarkdown.js.map +1 -0
- package/dist/development/src/hooks/useParsedStacktrace.cjs +67 -0
- package/dist/development/src/hooks/useParsedStacktrace.cjs.map +1 -0
- package/dist/development/src/hooks/useParsedStacktrace.js +45 -0
- package/dist/development/src/hooks/useParsedStacktrace.js.map +1 -0
- package/dist/development/src/ui/DevBar/DevBar.cjs +193 -0
- package/dist/development/src/ui/DevBar/DevBar.cjs.map +1 -0
- package/dist/development/src/ui/DevBar/DevBar.js +193 -0
- package/dist/development/src/ui/DevBar/DevBar.js.map +1 -0
- package/dist/development/src/ui/DevError/DevError.cjs +33 -0
- package/dist/development/src/ui/DevError/DevError.cjs.map +1 -0
- package/dist/development/src/ui/DevError/DevError.js +33 -0
- package/dist/development/src/ui/DevError/DevError.js.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorBadge.cjs +21 -0
- package/dist/development/src/ui/DevError/DevErrorBadge.cjs.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorBadge.js +21 -0
- package/dist/development/src/ui/DevError/DevErrorBadge.js.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorCopy.cjs +36 -0
- package/dist/development/src/ui/DevError/DevErrorCopy.cjs.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorCopy.js +36 -0
- package/dist/development/src/ui/DevError/DevErrorCopy.js.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorInner.cjs +79 -0
- package/dist/development/src/ui/DevError/DevErrorInner.cjs.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorInner.js +79 -0
- package/dist/development/src/ui/DevError/DevErrorInner.js.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorList.cjs +119 -0
- package/dist/development/src/ui/DevError/DevErrorList.cjs.map +1 -0
- package/dist/development/src/ui/DevError/DevErrorList.js +119 -0
- package/dist/development/src/ui/DevError/DevErrorList.js.map +1 -0
- package/dist/development/src/ui/DevError/StackTrace.cjs +82 -0
- package/dist/development/src/ui/DevError/StackTrace.cjs.map +1 -0
- package/dist/development/src/ui/DevError/StackTrace.js +82 -0
- package/dist/development/src/ui/DevError/StackTrace.js.map +1 -0
- package/dist/production/index.cjs +17 -0
- package/dist/production/index.cjs.map +1 -0
- package/dist/production/index.js +17 -0
- package/dist/production/index.js.map +1 -0
- package/dist/production/src/errorHandling.cjs +39 -0
- package/dist/production/src/errorHandling.cjs.map +1 -0
- package/dist/production/src/errorHandling.js +39 -0
- package/dist/production/src/errorHandling.js.map +1 -0
- package/dist/production/src/hooks/useCopyErrorMarkdown.cjs +101 -0
- package/dist/production/src/hooks/useCopyErrorMarkdown.cjs.map +1 -0
- package/dist/production/src/hooks/useCopyErrorMarkdown.js +101 -0
- package/dist/production/src/hooks/useCopyErrorMarkdown.js.map +1 -0
- package/dist/production/src/hooks/useParsedStacktrace.cjs +67 -0
- package/dist/production/src/hooks/useParsedStacktrace.cjs.map +1 -0
- package/dist/production/src/hooks/useParsedStacktrace.js +45 -0
- package/dist/production/src/hooks/useParsedStacktrace.js.map +1 -0
- package/dist/production/src/ui/DevBar/DevBar.cjs +125 -0
- package/dist/production/src/ui/DevBar/DevBar.cjs.map +1 -0
- package/dist/production/src/ui/DevBar/DevBar.js +125 -0
- package/dist/production/src/ui/DevBar/DevBar.js.map +1 -0
- package/dist/production/src/ui/DevError/DevError.cjs +13 -0
- package/dist/production/src/ui/DevError/DevError.cjs.map +1 -0
- package/dist/production/src/ui/DevError/DevError.js +13 -0
- package/dist/production/src/ui/DevError/DevError.js.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorBadge.cjs +13 -0
- package/dist/production/src/ui/DevError/DevErrorBadge.cjs.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorBadge.js +13 -0
- package/dist/production/src/ui/DevError/DevErrorBadge.js.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorCopy.cjs +28 -0
- package/dist/production/src/ui/DevError/DevErrorCopy.cjs.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorCopy.js +28 -0
- package/dist/production/src/ui/DevError/DevErrorCopy.js.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorInner.cjs +23 -0
- package/dist/production/src/ui/DevError/DevErrorInner.cjs.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorInner.js +23 -0
- package/dist/production/src/ui/DevError/DevErrorInner.js.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorList.cjs +51 -0
- package/dist/production/src/ui/DevError/DevErrorList.cjs.map +1 -0
- package/dist/production/src/ui/DevError/DevErrorList.js +51 -0
- package/dist/production/src/ui/DevError/DevErrorList.js.map +1 -0
- package/dist/production/src/ui/DevError/StackTrace.cjs +39 -0
- package/dist/production/src/ui/DevError/StackTrace.cjs.map +1 -0
- package/dist/production/src/ui/DevError/StackTrace.js +39 -0
- package/dist/production/src/ui/DevError/StackTrace.js.map +1 -0
- package/dist/types/DevErrorManager.d.ts +15 -0
- package/dist/types/DevErrorManager.d.ts.map +1 -0
- package/dist/types/errorHandling.d.ts +6 -0
- package/dist/types/errorHandling.d.ts.map +1 -0
- package/dist/types/hooks/useCopyErrorMarkdown.d.ts +12 -0
- package/dist/types/hooks/useCopyErrorMarkdown.d.ts.map +1 -0
- package/dist/types/hooks/useParsedStacktrace.d.ts +10 -0
- package/dist/types/hooks/useParsedStacktrace.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/dist/types/ui/DevBar/DevBar.d.ts +13 -0
- package/dist/types/ui/DevBar/DevBar.d.ts.map +1 -0
- package/dist/types/ui/DevBar/index.d.ts +2 -0
- package/dist/types/ui/DevBar/index.d.ts.map +1 -0
- package/dist/types/ui/DevError/DevError.d.ts +6 -0
- package/dist/types/ui/DevError/DevError.d.ts.map +1 -0
- package/dist/types/ui/DevError/DevErrorBadge.d.ts +7 -0
- package/dist/types/ui/DevError/DevErrorBadge.d.ts.map +1 -0
- package/dist/types/ui/DevError/DevErrorCopy.d.ts +6 -0
- package/dist/types/ui/DevError/DevErrorCopy.d.ts.map +1 -0
- package/dist/types/ui/DevError/DevErrorInner.d.ts +7 -0
- package/dist/types/ui/DevError/DevErrorInner.d.ts.map +1 -0
- package/dist/types/ui/DevError/DevErrorList.d.ts +13 -0
- package/dist/types/ui/DevError/DevErrorList.d.ts.map +1 -0
- package/dist/types/ui/DevError/StackTrace.d.ts +5 -0
- package/dist/types/ui/DevError/StackTrace.d.ts.map +1 -0
- package/dist/types/ui/DevError/index.d.ts +5 -0
- package/dist/types/ui/DevError/index.d.ts.map +1 -0
- package/dist/types/ui/DevError/types.d.ts +15 -0
- package/dist/types/ui/DevError/types.d.ts.map +1 -0
- package/package.json +10 -10
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxDevRuntime = require("react/jsx-dev-runtime");
|
|
4
|
+
const className = (cls) => cls ? `cui-devError-${cls}` : "cui-devError";
|
|
5
|
+
const StackTrace = ({ stackTrace }) => {
|
|
6
|
+
return /* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stack"), children: stackTrace.map((it, index) => /* @__PURE__ */ jsxDevRuntime.jsxDEV(StackFrame, { stackFrame: it }, index, false, {
|
|
7
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
8
|
+
lineNumber: 7,
|
|
9
|
+
columnNumber: 35
|
|
10
|
+
}, void 0)) }, void 0, false, {
|
|
11
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
12
|
+
lineNumber: 6,
|
|
13
|
+
columnNumber: 3
|
|
14
|
+
}, void 0);
|
|
15
|
+
};
|
|
16
|
+
const StackFrame = ({ stackFrame }) => {
|
|
17
|
+
const line = stackFrame.line;
|
|
18
|
+
return /* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrame"), children: [
|
|
19
|
+
/* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrameHeader"), children: [
|
|
20
|
+
/* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrameSource"), children: [
|
|
21
|
+
stackFrame.filename,
|
|
22
|
+
":",
|
|
23
|
+
line
|
|
24
|
+
] }, void 0, true, {
|
|
25
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
26
|
+
lineNumber: 18,
|
|
27
|
+
columnNumber: 5
|
|
28
|
+
}, void 0),
|
|
29
|
+
stackFrame.callee && /* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrameCallee"), children: stackFrame.callee }, void 0, false, {
|
|
30
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
31
|
+
lineNumber: 21,
|
|
32
|
+
columnNumber: 27
|
|
33
|
+
}, void 0)
|
|
34
|
+
] }, void 0, true, {
|
|
35
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
36
|
+
lineNumber: 17,
|
|
37
|
+
columnNumber: 4
|
|
38
|
+
}, void 0),
|
|
39
|
+
line !== void 0 && stackFrame.sourceCodeLines && /* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrameCode"), children: stackFrame.sourceCodeLines.map((it, index) => {
|
|
40
|
+
const lineNumber = index + 1;
|
|
41
|
+
if (lineNumber + 5 < line || lineNumber - 3 > line) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ jsxDevRuntime.jsxDEV(
|
|
45
|
+
"div",
|
|
46
|
+
{
|
|
47
|
+
className: `${className("stackFrameLine")} ${lineNumber === line && "is-active"}`,
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrameLineNumber"), children: lineNumber }, void 0, false, {
|
|
50
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
51
|
+
lineNumber: 35,
|
|
52
|
+
columnNumber: 9
|
|
53
|
+
}, void 0),
|
|
54
|
+
/* @__PURE__ */ jsxDevRuntime.jsxDEV("div", { className: className("stackFrameLineCode"), children: it }, void 0, false, {
|
|
55
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
56
|
+
lineNumber: 36,
|
|
57
|
+
columnNumber: 9
|
|
58
|
+
}, void 0)
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
lineNumber,
|
|
62
|
+
true,
|
|
63
|
+
{
|
|
64
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
65
|
+
lineNumber: 31,
|
|
66
|
+
columnNumber: 8
|
|
67
|
+
},
|
|
68
|
+
void 0
|
|
69
|
+
);
|
|
70
|
+
}) }, void 0, false, {
|
|
71
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
72
|
+
lineNumber: 24,
|
|
73
|
+
columnNumber: 5
|
|
74
|
+
}, void 0)
|
|
75
|
+
] }, void 0, true, {
|
|
76
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
77
|
+
lineNumber: 16,
|
|
78
|
+
columnNumber: 3
|
|
79
|
+
}, void 0);
|
|
80
|
+
};
|
|
81
|
+
exports.StackTrace = StackTrace;
|
|
82
|
+
//# sourceMappingURL=StackTrace.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackTrace.cjs","sources":["../../../../../../packages/react-devbar/src/ui/DevError/StackTrace.tsx"],"sourcesContent":["import { ParsedStackFrame, ParsedStackTrace } from './types'\n\nconst className = (cls?: string | null) => cls ? `cui-devError-${cls}` : 'cui-devError'\nexport const StackTrace = ({ stackTrace }: { stackTrace: ParsedStackTrace }) => {\n\treturn (\n\t\t<div className={className('stack')}>\n\t\t\t{stackTrace.map((it, index) => <StackFrame stackFrame={it} key={index} />)}\n\t\t</div>\n\t)\n}\n\nconst StackFrame = ({ stackFrame }: { stackFrame: ParsedStackFrame }) => {\n\tconst line = stackFrame.line\n\n\treturn (\n\t\t<div className={className('stackFrame')}>\n\t\t\t<div className={className('stackFrameHeader')}>\n\t\t\t\t<div className={className('stackFrameSource')}>\n\t\t\t\t\t{stackFrame.filename}:{line}\n\t\t\t\t</div>\n\t\t\t\t{stackFrame.callee && <div className={className('stackFrameCallee')}>{stackFrame.callee}</div>}\n\t\t\t</div>\n\t\t\t{line !== undefined && stackFrame.sourceCodeLines && (\n\t\t\t\t<div className={className('stackFrameCode')}>\n\t\t\t\t\t{stackFrame.sourceCodeLines.map((it, index) => {\n\t\t\t\t\t\tconst lineNumber = index + 1\n\t\t\t\t\t\tif (lineNumber + 5 < line || lineNumber - 3 > line) {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={`${className('stackFrameLine')} ${lineNumber === line && 'is-active'}`}\n\t\t\t\t\t\t\t\tkey={lineNumber}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className={className('stackFrameLineNumber')}>{lineNumber}</div>\n\t\t\t\t\t\t\t\t<div className={className('stackFrameLineCode')}>{it}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["jsxDEV","this"],"mappings":";;;AAEA,MAAM,YAAY,CAAC,QAAwB,MAAM,gBAAgB,GAAG,KAAK;AAClE,MAAM,aAAa,CAAC,EAAE,iBAAmD;AAC/E,SACCA,8BAAAA,OAAC,OAAA,EAAI,WAAW,UAAU,OAAO,GAC/B,UAAA,WAAW,IAAI,CAAC,IAAI,UAAUA,8BAAAA,OAAC,YAAA,EAAW,YAAY,MAAS,OAAjC,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAC,MAAwC,CAAE,KAD1E,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAEA;AAEF;AAEA,MAAM,aAAa,CAAC,EAAE,iBAAmD;AACxE,QAAM,OAAO,WAAW;AAExB,SACCD,8BAAAA,OAAC,OAAA,EAAI,WAAW,UAAU,YAAY,GACrC,UAAA;AAAA,IAAAA,8BAAAA,OAAC,OAAA,EAAI,WAAW,UAAU,kBAAkB,GAC3C,UAAA;AAAA,MAAAA,8BAAAA,OAAC,OAAA,EAAI,WAAW,UAAU,kBAAkB,GAC1C,UAAA;AAAA,QAAA,WAAW;AAAA,QAAS;AAAA,QAAE;AAAA,MAAA,EAAA,GADxB,QAAA,MAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAC,MAEA;AAAA,MACC,WAAW,UAAUD,8BAAAA,OAAC,OAAA,EAAI,WAAW,UAAU,kBAAkB,GAAI,UAAA,WAAW,OAAA,GAA3D,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAC,MAAkE;AAAA,IAAA,EAAA,GAJzF,QAAA,MAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAKA;AAAA,IACC,SAAS,UAAa,WAAW,wDAChC,OAAA,EAAI,WAAW,UAAU,gBAAgB,GACxC,UAAA,WAAW,gBAAgB,IAAI,CAAC,IAAI,UAAU;AAC9C,YAAM,aAAa,QAAQ;AAC3B,UAAI,aAAa,IAAI,QAAQ,aAAa,IAAI,MAAM;AACnD,eAAO;AAAA,MACR;AACA,aACCD,8BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACA,WAAW,GAAG,UAAU,gBAAgB,CAAC,IAAI,eAAe,QAAQ,WAAW;AAAA,UAG/E,UAAA;AAAA,YAAAA,8BAAAA,OAAC,OAAA,EAAI,WAAW,UAAU,sBAAsB,GAAI,UAAA,WAAA,GAApD,QAAA,OAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAC,MAA+D;AAAA,iDAC9D,OAAA,EAAI,WAAW,UAAU,oBAAoB,GAAI,UAAA,GAAA,GAAlD,QAAA,OAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAA,MAAqD;AAAA,UAAA;AAAA,QAAA;AAAA,QAHhD;AAAA,QAFN;AAAA,QAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA;AAAA,QAAAA;AAAAA,MAAA;AAAA,IAQF,CAAC,EAAA,GAfF,QAAA,OAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAgBA;AAAA,EAAA,EAAA,GAxBF,QAAA,MAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MA0BA;AAEF;;"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
2
|
+
const className = (cls) => cls ? `cui-devError-${cls}` : "cui-devError";
|
|
3
|
+
const StackTrace = ({ stackTrace }) => {
|
|
4
|
+
return /* @__PURE__ */ jsxDEV("div", { className: className("stack"), children: stackTrace.map((it, index) => /* @__PURE__ */ jsxDEV(StackFrame, { stackFrame: it }, index, false, {
|
|
5
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
6
|
+
lineNumber: 7,
|
|
7
|
+
columnNumber: 35
|
|
8
|
+
}, void 0)) }, void 0, false, {
|
|
9
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
10
|
+
lineNumber: 6,
|
|
11
|
+
columnNumber: 3
|
|
12
|
+
}, void 0);
|
|
13
|
+
};
|
|
14
|
+
const StackFrame = ({ stackFrame }) => {
|
|
15
|
+
const line = stackFrame.line;
|
|
16
|
+
return /* @__PURE__ */ jsxDEV("div", { className: className("stackFrame"), children: [
|
|
17
|
+
/* @__PURE__ */ jsxDEV("div", { className: className("stackFrameHeader"), children: [
|
|
18
|
+
/* @__PURE__ */ jsxDEV("div", { className: className("stackFrameSource"), children: [
|
|
19
|
+
stackFrame.filename,
|
|
20
|
+
":",
|
|
21
|
+
line
|
|
22
|
+
] }, void 0, true, {
|
|
23
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
24
|
+
lineNumber: 18,
|
|
25
|
+
columnNumber: 5
|
|
26
|
+
}, void 0),
|
|
27
|
+
stackFrame.callee && /* @__PURE__ */ jsxDEV("div", { className: className("stackFrameCallee"), children: stackFrame.callee }, void 0, false, {
|
|
28
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
29
|
+
lineNumber: 21,
|
|
30
|
+
columnNumber: 27
|
|
31
|
+
}, void 0)
|
|
32
|
+
] }, void 0, true, {
|
|
33
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
34
|
+
lineNumber: 17,
|
|
35
|
+
columnNumber: 4
|
|
36
|
+
}, void 0),
|
|
37
|
+
line !== void 0 && stackFrame.sourceCodeLines && /* @__PURE__ */ jsxDEV("div", { className: className("stackFrameCode"), children: stackFrame.sourceCodeLines.map((it, index) => {
|
|
38
|
+
const lineNumber = index + 1;
|
|
39
|
+
if (lineNumber + 5 < line || lineNumber - 3 > line) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return /* @__PURE__ */ jsxDEV(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
className: `${className("stackFrameLine")} ${lineNumber === line && "is-active"}`,
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ jsxDEV("div", { className: className("stackFrameLineNumber"), children: lineNumber }, void 0, false, {
|
|
48
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
49
|
+
lineNumber: 35,
|
|
50
|
+
columnNumber: 9
|
|
51
|
+
}, void 0),
|
|
52
|
+
/* @__PURE__ */ jsxDEV("div", { className: className("stackFrameLineCode"), children: it }, void 0, false, {
|
|
53
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
54
|
+
lineNumber: 36,
|
|
55
|
+
columnNumber: 9
|
|
56
|
+
}, void 0)
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
lineNumber,
|
|
60
|
+
true,
|
|
61
|
+
{
|
|
62
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
63
|
+
lineNumber: 31,
|
|
64
|
+
columnNumber: 8
|
|
65
|
+
},
|
|
66
|
+
void 0
|
|
67
|
+
);
|
|
68
|
+
}) }, void 0, false, {
|
|
69
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
70
|
+
lineNumber: 24,
|
|
71
|
+
columnNumber: 5
|
|
72
|
+
}, void 0)
|
|
73
|
+
] }, void 0, true, {
|
|
74
|
+
fileName: "/home/runner/work/contember/contember/packages/react-devbar/src/ui/DevError/StackTrace.tsx",
|
|
75
|
+
lineNumber: 16,
|
|
76
|
+
columnNumber: 3
|
|
77
|
+
}, void 0);
|
|
78
|
+
};
|
|
79
|
+
export {
|
|
80
|
+
StackTrace
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=StackTrace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackTrace.js","sources":["../../../../../../packages/react-devbar/src/ui/DevError/StackTrace.tsx"],"sourcesContent":["import { ParsedStackFrame, ParsedStackTrace } from './types'\n\nconst className = (cls?: string | null) => cls ? `cui-devError-${cls}` : 'cui-devError'\nexport const StackTrace = ({ stackTrace }: { stackTrace: ParsedStackTrace }) => {\n\treturn (\n\t\t<div className={className('stack')}>\n\t\t\t{stackTrace.map((it, index) => <StackFrame stackFrame={it} key={index} />)}\n\t\t</div>\n\t)\n}\n\nconst StackFrame = ({ stackFrame }: { stackFrame: ParsedStackFrame }) => {\n\tconst line = stackFrame.line\n\n\treturn (\n\t\t<div className={className('stackFrame')}>\n\t\t\t<div className={className('stackFrameHeader')}>\n\t\t\t\t<div className={className('stackFrameSource')}>\n\t\t\t\t\t{stackFrame.filename}:{line}\n\t\t\t\t</div>\n\t\t\t\t{stackFrame.callee && <div className={className('stackFrameCallee')}>{stackFrame.callee}</div>}\n\t\t\t</div>\n\t\t\t{line !== undefined && stackFrame.sourceCodeLines && (\n\t\t\t\t<div className={className('stackFrameCode')}>\n\t\t\t\t\t{stackFrame.sourceCodeLines.map((it, index) => {\n\t\t\t\t\t\tconst lineNumber = index + 1\n\t\t\t\t\t\tif (lineNumber + 5 < line || lineNumber - 3 > line) {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={`${className('stackFrameLine')} ${lineNumber === line && 'is-active'}`}\n\t\t\t\t\t\t\t\tkey={lineNumber}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className={className('stackFrameLineNumber')}>{lineNumber}</div>\n\t\t\t\t\t\t\t\t<div className={className('stackFrameLineCode')}>{it}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["this"],"mappings":";AAEA,MAAM,YAAY,CAAC,QAAwB,MAAM,gBAAgB,GAAG,KAAK;AAClE,MAAM,aAAa,CAAC,EAAE,iBAAmD;AAC/E,SACC,uBAAC,OAAA,EAAI,WAAW,UAAU,OAAO,GAC/B,UAAA,WAAW,IAAI,CAAC,IAAI,UAAU,uBAAC,YAAA,EAAW,YAAY,MAAS,OAAjC,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAAwC,CAAE,KAD1E,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAEA;AAEF;AAEA,MAAM,aAAa,CAAC,EAAE,iBAAmD;AACxE,QAAM,OAAO,WAAW;AAExB,SACC,uBAAC,OAAA,EAAI,WAAW,UAAU,YAAY,GACrC,UAAA;AAAA,IAAA,uBAAC,OAAA,EAAI,WAAW,UAAU,kBAAkB,GAC3C,UAAA;AAAA,MAAA,uBAAC,OAAA,EAAI,WAAW,UAAU,kBAAkB,GAC1C,UAAA;AAAA,QAAA,WAAW;AAAA,QAAS;AAAA,QAAE;AAAA,MAAA,EAAA,GADxB,QAAA,MAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAEA;AAAA,MACC,WAAW,UAAU,uBAAC,OAAA,EAAI,WAAW,UAAU,kBAAkB,GAAI,UAAA,WAAW,OAAA,GAA3D,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAAkE;AAAA,IAAA,EAAA,GAJzF,QAAA,MAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAKA;AAAA,IACC,SAAS,UAAa,WAAW,0CAChC,OAAA,EAAI,WAAW,UAAU,gBAAgB,GACxC,UAAA,WAAW,gBAAgB,IAAI,CAAC,IAAI,UAAU;AAC9C,YAAM,aAAa,QAAQ;AAC3B,UAAI,aAAa,IAAI,QAAQ,aAAa,IAAI,MAAM;AACnD,eAAO;AAAA,MACR;AACA,aACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,WAAW,GAAG,UAAU,gBAAgB,CAAC,IAAI,eAAe,QAAQ,WAAW;AAAA,UAG/E,UAAA;AAAA,YAAA,uBAAC,OAAA,EAAI,WAAW,UAAU,sBAAsB,GAAI,UAAA,WAAA,GAApD,QAAA,OAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAA,MAA+D;AAAA,mCAC9D,OAAA,EAAI,WAAW,UAAU,oBAAoB,GAAI,UAAA,GAAA,GAAlD,QAAA,OAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAA,MAAqD;AAAA,UAAA;AAAA,QAAA;AAAA,QAHhD;AAAA,QAFN;AAAA,QAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA;AAAA,QAAAA;AAAAA,MAAA;AAAA,IAQF,CAAC,EAAA,GAfF,QAAA,OAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAgBA;AAAA,EAAA,EAAA,GAxBF,QAAA,MAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MA0BA;AAEF;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const errorHandling = require("./src/errorHandling.cjs");
|
|
4
|
+
const useParsedStacktrace = require("./src/hooks/useParsedStacktrace.cjs");
|
|
5
|
+
const DevBar = require("./src/ui/DevBar/DevBar.cjs");
|
|
6
|
+
const DevError = require("./src/ui/DevError/DevError.cjs");
|
|
7
|
+
const DevErrorBadge = require("./src/ui/DevError/DevErrorBadge.cjs");
|
|
8
|
+
const DevErrorList = require("./src/ui/DevError/DevErrorList.cjs");
|
|
9
|
+
exports.createErrorHandler = errorHandling.createErrorHandler;
|
|
10
|
+
exports.parseStacktrace = useParsedStacktrace.parseStacktrace;
|
|
11
|
+
exports.useProcessedError = useParsedStacktrace.useProcessedError;
|
|
12
|
+
exports.DevBar = DevBar.DevBar;
|
|
13
|
+
exports.DevPanel = DevBar.DevPanel;
|
|
14
|
+
exports.DevError = DevError.DevError;
|
|
15
|
+
exports.DevErrorBadge = DevErrorBadge.DevErrorBadge;
|
|
16
|
+
exports.DevErrorList = DevErrorList.DevErrorList;
|
|
17
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createErrorHandler } from "./src/errorHandling.js";
|
|
2
|
+
import { parseStacktrace, useProcessedError } from "./src/hooks/useParsedStacktrace.js";
|
|
3
|
+
import { DevBar, DevPanel } from "./src/ui/DevBar/DevBar.js";
|
|
4
|
+
import { DevError } from "./src/ui/DevError/DevError.js";
|
|
5
|
+
import { DevErrorBadge } from "./src/ui/DevError/DevErrorBadge.js";
|
|
6
|
+
import { DevErrorList } from "./src/ui/DevError/DevErrorList.js";
|
|
7
|
+
export {
|
|
8
|
+
DevBar,
|
|
9
|
+
DevError,
|
|
10
|
+
DevErrorBadge,
|
|
11
|
+
DevErrorList,
|
|
12
|
+
DevPanel,
|
|
13
|
+
createErrorHandler,
|
|
14
|
+
parseStacktrace,
|
|
15
|
+
useProcessedError
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
require("buffer");
|
|
5
|
+
const getErrorContainer = () => {
|
|
6
|
+
const errorElementId = "__contember__dev__error__container__element";
|
|
7
|
+
let errorContainer = document.getElementById(errorElementId);
|
|
8
|
+
if (!errorContainer) {
|
|
9
|
+
errorContainer = document.createElement("div");
|
|
10
|
+
errorContainer.id = errorElementId;
|
|
11
|
+
document.body.appendChild(errorContainer);
|
|
12
|
+
}
|
|
13
|
+
return errorContainer;
|
|
14
|
+
};
|
|
15
|
+
const prodErrorHandler = (renderer) => {
|
|
16
|
+
const renderError = () => {
|
|
17
|
+
renderer(getErrorContainer(), /* @__PURE__ */ jsxRuntime.jsx("h1", { children: "Fatal error" }), () => {
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
window.addEventListener("error", renderError);
|
|
21
|
+
window.addEventListener("unhandledrejection", renderError);
|
|
22
|
+
return async (cb) => {
|
|
23
|
+
try {
|
|
24
|
+
await cb((e) => {
|
|
25
|
+
console.warn(e);
|
|
26
|
+
});
|
|
27
|
+
} catch (e) {
|
|
28
|
+
console.error(e);
|
|
29
|
+
renderError();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const createErrorHandler = (renderer) => {
|
|
34
|
+
{
|
|
35
|
+
return prodErrorHandler(renderer);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.createErrorHandler = createErrorHandler;
|
|
39
|
+
//# sourceMappingURL=errorHandling.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandling.cjs","sources":["../../../../packages/react-devbar/src/errorHandling.tsx"],"sourcesContent":["import { Buffer } from 'buffer'\nimport { DevErrorManager, ErrorBus } from './DevErrorManager'\nimport { ReactElement } from 'react'\n\nexport type ErrorReactRenderer = (domElement: Element, reactElement: ReactElement, onRecoverableError: (e: any) => void) => void\n\nconst getErrorContainer = () => {\n\tconst errorElementId = '__contember__dev__error__container__element'\n\tlet errorContainer = document.getElementById(errorElementId)\n\n\tif (!errorContainer) {\n\t\terrorContainer = document.createElement('div')\n\t\terrorContainer.id = errorElementId\n\t\tdocument.body.appendChild(errorContainer)\n\t}\n\n\treturn errorContainer\n}\n\nconst devErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst errorBus = new ErrorBus()\n\t;(window as any).Buffer = Buffer\n\twindow.addEventListener('error', e => {\n\t\tif (e.message.startsWith('ResizeObserver')) {\n\t\t\t// Apparently, this can be ignored: https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n\t\t\treturn\n\t\t}\n\t\terrorBus.handleError('Unhandled error', e.error)\n\t})\n\n\twindow.addEventListener('unhandledrejection', e => errorBus.handleError('Unhandled promise rejection', e.reason))\n\n\tconst origOnError = console.error\n\tconsole.error = (...args) => {\n\t\torigOnError(...args)\n\t\tfor (const arg of args) {\n\t\t\tif (arg instanceof Error) {\n\t\t\t\terrorBus.handleError('Logged error', arg)\n\t\t\t}\n\t\t}\n\t}\n\trenderer(getErrorContainer(), <DevErrorManager bus={errorBus} />, () => {})\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => errorBus.handleError('Recoverable React error', e))\n\t\t} catch (e) {\n\t\t\terrorBus.handleError('Entrypoint crash', e)\n\t\t}\n\t}\n}\n\ntype TryRun = <T>(cb: (onRecoverableError: (e: any) => void) => T | Promise<T>) => void\nconst prodErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst renderError = () => {\n\t\trenderer(getErrorContainer(), <h1>Fatal error</h1>, () => {})\n\t}\n\n\twindow.addEventListener('error', renderError)\n\twindow.addEventListener('unhandledrejection', renderError)\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => {\n\t\t\t\tconsole.warn(e)\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\trenderError()\n\t\t}\n\t}\n}\n\nexport const createErrorHandler = (renderer: ErrorReactRenderer) => {\n\tif (import.meta.env.DEV) {\n\t\treturn devErrorHandler(renderer)\n\t} else {\n\t\treturn prodErrorHandler(renderer)\n\t}\n}\n"],"names":["jsx"],"mappings":";;;;AAMA,MAAM,oBAAoB,MAAM;AAC/B,QAAM,iBAAiB;AACvB,MAAI,iBAAiB,SAAS,eAAe,cAAc;AAE3D,MAAI,CAAC,gBAAgB;AACpB,qBAAiB,SAAS,cAAc,KAAK;AAC7C,mBAAe,KAAK;AACpB,aAAS,KAAK,YAAY,cAAc;AAAA,EACzC;AAEA,SAAO;AACR;AAoCA,MAAM,mBAAmB,CAAC,aAAyC;AAClE,QAAM,cAAc,MAAM;AACzB,aAAS,kBAAA,GAAqBA,+BAAC,MAAA,EAAG,UAAA,cAAA,CAAW,GAAO,MAAM;AAAA,IAAC,CAAC;AAAA,EAC7D;AAEA,SAAO,iBAAiB,SAAS,WAAW;AAC5C,SAAO,iBAAiB,sBAAsB,WAAW;AAEzD,SAAO,OAAM,OAAM;AAClB,QAAI;AACH,YAAM,GAAG,CAAA,MAAK;AACb,gBAAQ,KAAK,CAAC;AAAA,MACf,CAAC;AAAA,IACF,SAAS,GAAG;AACX,cAAQ,MAAM,CAAC;AACf,kBAAA;AAAA,IACD;AAAA,EACD;AACD;AAEO,MAAM,qBAAqB,CAAC,aAAiC;AAG5D;AACN,WAAO,iBAAiB,QAAQ;AAAA,EACjC;AACD;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "buffer";
|
|
3
|
+
const getErrorContainer = () => {
|
|
4
|
+
const errorElementId = "__contember__dev__error__container__element";
|
|
5
|
+
let errorContainer = document.getElementById(errorElementId);
|
|
6
|
+
if (!errorContainer) {
|
|
7
|
+
errorContainer = document.createElement("div");
|
|
8
|
+
errorContainer.id = errorElementId;
|
|
9
|
+
document.body.appendChild(errorContainer);
|
|
10
|
+
}
|
|
11
|
+
return errorContainer;
|
|
12
|
+
};
|
|
13
|
+
const prodErrorHandler = (renderer) => {
|
|
14
|
+
const renderError = () => {
|
|
15
|
+
renderer(getErrorContainer(), /* @__PURE__ */ jsx("h1", { children: "Fatal error" }), () => {
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
window.addEventListener("error", renderError);
|
|
19
|
+
window.addEventListener("unhandledrejection", renderError);
|
|
20
|
+
return async (cb) => {
|
|
21
|
+
try {
|
|
22
|
+
await cb((e) => {
|
|
23
|
+
console.warn(e);
|
|
24
|
+
});
|
|
25
|
+
} catch (e) {
|
|
26
|
+
console.error(e);
|
|
27
|
+
renderError();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
const createErrorHandler = (renderer) => {
|
|
32
|
+
{
|
|
33
|
+
return prodErrorHandler(renderer);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export {
|
|
37
|
+
createErrorHandler
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=errorHandling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandling.js","sources":["../../../../packages/react-devbar/src/errorHandling.tsx"],"sourcesContent":["import { Buffer } from 'buffer'\nimport { DevErrorManager, ErrorBus } from './DevErrorManager'\nimport { ReactElement } from 'react'\n\nexport type ErrorReactRenderer = (domElement: Element, reactElement: ReactElement, onRecoverableError: (e: any) => void) => void\n\nconst getErrorContainer = () => {\n\tconst errorElementId = '__contember__dev__error__container__element'\n\tlet errorContainer = document.getElementById(errorElementId)\n\n\tif (!errorContainer) {\n\t\terrorContainer = document.createElement('div')\n\t\terrorContainer.id = errorElementId\n\t\tdocument.body.appendChild(errorContainer)\n\t}\n\n\treturn errorContainer\n}\n\nconst devErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst errorBus = new ErrorBus()\n\t;(window as any).Buffer = Buffer\n\twindow.addEventListener('error', e => {\n\t\tif (e.message.startsWith('ResizeObserver')) {\n\t\t\t// Apparently, this can be ignored: https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n\t\t\treturn\n\t\t}\n\t\terrorBus.handleError('Unhandled error', e.error)\n\t})\n\n\twindow.addEventListener('unhandledrejection', e => errorBus.handleError('Unhandled promise rejection', e.reason))\n\n\tconst origOnError = console.error\n\tconsole.error = (...args) => {\n\t\torigOnError(...args)\n\t\tfor (const arg of args) {\n\t\t\tif (arg instanceof Error) {\n\t\t\t\terrorBus.handleError('Logged error', arg)\n\t\t\t}\n\t\t}\n\t}\n\trenderer(getErrorContainer(), <DevErrorManager bus={errorBus} />, () => {})\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => errorBus.handleError('Recoverable React error', e))\n\t\t} catch (e) {\n\t\t\terrorBus.handleError('Entrypoint crash', e)\n\t\t}\n\t}\n}\n\ntype TryRun = <T>(cb: (onRecoverableError: (e: any) => void) => T | Promise<T>) => void\nconst prodErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst renderError = () => {\n\t\trenderer(getErrorContainer(), <h1>Fatal error</h1>, () => {})\n\t}\n\n\twindow.addEventListener('error', renderError)\n\twindow.addEventListener('unhandledrejection', renderError)\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => {\n\t\t\t\tconsole.warn(e)\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\trenderError()\n\t\t}\n\t}\n}\n\nexport const createErrorHandler = (renderer: ErrorReactRenderer) => {\n\tif (import.meta.env.DEV) {\n\t\treturn devErrorHandler(renderer)\n\t} else {\n\t\treturn prodErrorHandler(renderer)\n\t}\n}\n"],"names":[],"mappings":";;AAMA,MAAM,oBAAoB,MAAM;AAC/B,QAAM,iBAAiB;AACvB,MAAI,iBAAiB,SAAS,eAAe,cAAc;AAE3D,MAAI,CAAC,gBAAgB;AACpB,qBAAiB,SAAS,cAAc,KAAK;AAC7C,mBAAe,KAAK;AACpB,aAAS,KAAK,YAAY,cAAc;AAAA,EACzC;AAEA,SAAO;AACR;AAoCA,MAAM,mBAAmB,CAAC,aAAyC;AAClE,QAAM,cAAc,MAAM;AACzB,aAAS,kBAAA,GAAqB,oBAAC,MAAA,EAAG,UAAA,cAAA,CAAW,GAAO,MAAM;AAAA,IAAC,CAAC;AAAA,EAC7D;AAEA,SAAO,iBAAiB,SAAS,WAAW;AAC5C,SAAO,iBAAiB,sBAAsB,WAAW;AAEzD,SAAO,OAAM,OAAM;AAClB,QAAI;AACH,YAAM,GAAG,CAAA,MAAK;AACb,gBAAQ,KAAK,CAAC;AAAA,MACf,CAAC;AAAA,IACF,SAAS,GAAG;AACX,cAAQ,MAAM,CAAC;AACf,kBAAA;AAAA,IACD;AAAA,EACD;AACD;AAEO,MAAM,qBAAqB,CAAC,aAAiC;AAG5D;AACN,WAAO,iBAAiB,QAAQ;AAAA,EACjC;AACD;"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const convertStackTraceToMarkdown = (stackTrace, lines) => {
|
|
5
|
+
stackTrace.forEach((frame, index) => {
|
|
6
|
+
lines.push(`**Frame ${index + 1}:**`);
|
|
7
|
+
lines.push("");
|
|
8
|
+
lines.push(`- **File:** ${frame.filename}${frame.line ? `:${frame.line}` : ""}`);
|
|
9
|
+
if (frame.callee) {
|
|
10
|
+
lines.push(`- **Function:** ${frame.callee}`);
|
|
11
|
+
}
|
|
12
|
+
lines.push("");
|
|
13
|
+
if (frame.line !== void 0 && frame.sourceCodeLines) {
|
|
14
|
+
lines.push("**Source Code:**");
|
|
15
|
+
lines.push("");
|
|
16
|
+
lines.push("```typescript");
|
|
17
|
+
frame.sourceCodeLines.forEach((codeLine, lineIndex) => {
|
|
18
|
+
const lineNumber = lineIndex + 1;
|
|
19
|
+
if (frame.line && lineNumber + 5 >= frame.line && lineNumber - 3 <= frame.line) {
|
|
20
|
+
const isErrorLine = lineNumber === frame.line;
|
|
21
|
+
const marker = isErrorLine ? ">>> " : " ";
|
|
22
|
+
lines.push(`${marker}${lineNumber.toString().padStart(3)}: ${codeLine}`);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
lines.push("```");
|
|
26
|
+
lines.push("");
|
|
27
|
+
}
|
|
28
|
+
lines.push("---");
|
|
29
|
+
lines.push("");
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
const convertErrorToMarkdownRecursive = (error, lines, level) => {
|
|
33
|
+
const errorObject = error.error instanceof Error ? error.error : void 0;
|
|
34
|
+
const prefix = "#".repeat(level + 1);
|
|
35
|
+
if (errorObject) {
|
|
36
|
+
lines.push(`${prefix} ${errorObject.name}`);
|
|
37
|
+
lines.push("");
|
|
38
|
+
if (errorObject.message) {
|
|
39
|
+
lines.push(`**Message:** ${errorObject.message}`);
|
|
40
|
+
lines.push("");
|
|
41
|
+
}
|
|
42
|
+
if ("details" in errorObject && errorObject.details) {
|
|
43
|
+
lines.push(`**Details:** ${errorObject.details}`);
|
|
44
|
+
lines.push("");
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
lines.push(`${prefix} Unknown Error`);
|
|
48
|
+
lines.push("");
|
|
49
|
+
}
|
|
50
|
+
if (error.parsedStackStrace) {
|
|
51
|
+
lines.push(`${"#".repeat(level + 2)} Stack Trace`);
|
|
52
|
+
lines.push("");
|
|
53
|
+
convertStackTraceToMarkdown(error.parsedStackStrace, lines);
|
|
54
|
+
} else if (errorObject?.stack) {
|
|
55
|
+
lines.push(`${"#".repeat(level + 2)} Stack Trace`);
|
|
56
|
+
lines.push("");
|
|
57
|
+
lines.push("```");
|
|
58
|
+
lines.push(errorObject.stack);
|
|
59
|
+
lines.push("```");
|
|
60
|
+
lines.push("");
|
|
61
|
+
}
|
|
62
|
+
if (error.cause) {
|
|
63
|
+
lines.push(`${"#".repeat(level + 2)} Caused By`);
|
|
64
|
+
lines.push("");
|
|
65
|
+
convertErrorToMarkdownRecursive(error.cause, lines, level + 1);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const convertErrorToMarkdown = (error, source) => {
|
|
69
|
+
const lines = [];
|
|
70
|
+
lines.push("# Contember Error Report");
|
|
71
|
+
lines.push("");
|
|
72
|
+
lines.push(`**Source:** ${source}`);
|
|
73
|
+
lines.push("");
|
|
74
|
+
convertErrorToMarkdownRecursive(error, lines, 1);
|
|
75
|
+
return lines.join("\n");
|
|
76
|
+
};
|
|
77
|
+
const useCopyErrorMarkdown = ({ currentError, currentErrorSource }) => {
|
|
78
|
+
const [copyStatus, setCopyStatus] = React.useState("idle");
|
|
79
|
+
React.useEffect(() => {
|
|
80
|
+
setCopyStatus("idle");
|
|
81
|
+
}, [currentError]);
|
|
82
|
+
const handleCopyMarkdown = async () => {
|
|
83
|
+
setCopyStatus("copying");
|
|
84
|
+
try {
|
|
85
|
+
const markdown = convertErrorToMarkdown(currentError, currentErrorSource);
|
|
86
|
+
await navigator.clipboard.writeText(markdown);
|
|
87
|
+
setCopyStatus("success");
|
|
88
|
+
} catch (err) {
|
|
89
|
+
console.error("Failed to copy markdown:", err);
|
|
90
|
+
setCopyStatus("error");
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const isClipboardSupported = !!navigator?.clipboard;
|
|
94
|
+
return {
|
|
95
|
+
copyStatus,
|
|
96
|
+
handleCopyMarkdown,
|
|
97
|
+
isClipboardSupported
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
exports.useCopyErrorMarkdown = useCopyErrorMarkdown;
|
|
101
|
+
//# sourceMappingURL=useCopyErrorMarkdown.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCopyErrorMarkdown.cjs","sources":["../../../../../packages/react-devbar/src/hooks/useCopyErrorMarkdown.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport type { ParsedStackTrace, ProcessedError } from '../ui/DevError/types'\n\nconst convertStackTraceToMarkdown = (stackTrace: ParsedStackTrace, lines: string[]) => {\n\tstackTrace.forEach((frame, index) => {\n\t\tlines.push(`**Frame ${index + 1}:**`)\n\t\tlines.push('')\n\t\tlines.push(`- **File:** ${frame.filename}${frame.line ? `:${frame.line}` : ''}`)\n\n\t\tif (frame.callee) {\n\t\t\tlines.push(`- **Function:** ${frame.callee}`)\n\t\t}\n\n\t\tlines.push('')\n\n\t\tif (frame.line !== undefined && frame.sourceCodeLines) {\n\t\t\tlines.push('**Source Code:**')\n\t\t\tlines.push('')\n\t\t\tlines.push('```typescript')\n\n\t\t\tframe.sourceCodeLines.forEach((codeLine, lineIndex) => {\n\t\t\t\tconst lineNumber = lineIndex + 1\n\t\t\t\t// Show context around the error line (similar to the UI logic)\n\t\t\t\tif (frame.line && lineNumber + 5 >= frame.line && lineNumber - 3 <= frame.line) {\n\t\t\t\t\tconst isErrorLine = lineNumber === frame.line\n\t\t\t\t\tconst marker = isErrorLine ? '>>> ' : ' '\n\t\t\t\t\tlines.push(`${marker}${lineNumber.toString().padStart(3)}: ${codeLine}`)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tlines.push('```')\n\t\t\tlines.push('')\n\t\t}\n\n\t\tlines.push('---')\n\t\tlines.push('')\n\t})\n}\n\nconst convertErrorToMarkdownRecursive = (error: ProcessedError, lines: string[], level: number) => {\n\tconst errorObject = error.error instanceof Error ? error.error : undefined\n\tconst prefix = '#'.repeat(level + 1)\n\n\tif (errorObject) {\n\t\tlines.push(`${prefix} ${errorObject.name}`)\n\t\tlines.push('')\n\n\t\tif (errorObject.message) {\n\t\t\tlines.push(`**Message:** ${errorObject.message}`)\n\t\t\tlines.push('')\n\t\t}\n\n\t\tif ('details' in errorObject && (errorObject as Error & { details?: unknown }).details) {\n\t\t\tlines.push(`**Details:** ${(errorObject as Error & { details: string }).details}`)\n\t\t\tlines.push('')\n\t\t}\n\t} else {\n\t\tlines.push(`${prefix} Unknown Error`)\n\t\tlines.push('')\n\t}\n\n\tif (error.parsedStackStrace) {\n\t\tlines.push(`${'#'.repeat(level + 2)} Stack Trace`)\n\t\tlines.push('')\n\t\tconvertStackTraceToMarkdown(error.parsedStackStrace, lines)\n\t} else if (errorObject?.stack) {\n\t\tlines.push(`${'#'.repeat(level + 2)} Stack Trace`)\n\t\tlines.push('')\n\t\tlines.push('```')\n\t\tlines.push(errorObject.stack)\n\t\tlines.push('```')\n\t\tlines.push('')\n\t}\n\n\tif (error.cause) {\n\t\tlines.push(`${'#'.repeat(level + 2)} Caused By`)\n\t\tlines.push('')\n\t\tconvertErrorToMarkdownRecursive(error.cause, lines, level + 1)\n\t}\n}\n\nconst convertErrorToMarkdown = (error: ProcessedError, source: string): string => {\n\tconst lines: string[] = []\n\n\tlines.push('# Contember Error Report')\n\tlines.push('')\n\tlines.push(`**Source:** ${source}`)\n\tlines.push('')\n\n\tconvertErrorToMarkdownRecursive(error, lines, 1)\n\n\treturn lines.join('\\n')\n}\n\ntype CopyMarkdownProps = {\n\tcurrentError: ProcessedError\n\tcurrentErrorSource: string\n}\n\nexport const useCopyErrorMarkdown = ({ currentError, currentErrorSource }: CopyMarkdownProps) => {\n\tconst [copyStatus, setCopyStatus] = useState<'idle' | 'copying' | 'success' | 'error'>('idle')\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: intentional\n\tuseEffect(() => {\n\t\tsetCopyStatus('idle')\n\t}, [currentError])\n\n\tconst handleCopyMarkdown = async () => {\n\t\tsetCopyStatus('copying')\n\t\ttry {\n\t\t\tconst markdown = convertErrorToMarkdown(currentError, currentErrorSource)\n\t\t\tawait navigator.clipboard.writeText(markdown)\n\t\t\tsetCopyStatus('success')\n\t\t} catch (err) {\n\t\t\tconsole.error('Failed to copy markdown:', err)\n\t\t\tsetCopyStatus('error')\n\t\t}\n\t}\n\n\tconst isClipboardSupported = !!navigator?.clipboard\n\n\treturn {\n\t\tcopyStatus,\n\t\thandleCopyMarkdown,\n\t\tisClipboardSupported,\n\t}\n}\n"],"names":["useState","useEffect"],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
const convertStackTraceToMarkdown = (stackTrace, lines) => {
|
|
3
|
+
stackTrace.forEach((frame, index) => {
|
|
4
|
+
lines.push(`**Frame ${index + 1}:**`);
|
|
5
|
+
lines.push("");
|
|
6
|
+
lines.push(`- **File:** ${frame.filename}${frame.line ? `:${frame.line}` : ""}`);
|
|
7
|
+
if (frame.callee) {
|
|
8
|
+
lines.push(`- **Function:** ${frame.callee}`);
|
|
9
|
+
}
|
|
10
|
+
lines.push("");
|
|
11
|
+
if (frame.line !== void 0 && frame.sourceCodeLines) {
|
|
12
|
+
lines.push("**Source Code:**");
|
|
13
|
+
lines.push("");
|
|
14
|
+
lines.push("```typescript");
|
|
15
|
+
frame.sourceCodeLines.forEach((codeLine, lineIndex) => {
|
|
16
|
+
const lineNumber = lineIndex + 1;
|
|
17
|
+
if (frame.line && lineNumber + 5 >= frame.line && lineNumber - 3 <= frame.line) {
|
|
18
|
+
const isErrorLine = lineNumber === frame.line;
|
|
19
|
+
const marker = isErrorLine ? ">>> " : " ";
|
|
20
|
+
lines.push(`${marker}${lineNumber.toString().padStart(3)}: ${codeLine}`);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
lines.push("```");
|
|
24
|
+
lines.push("");
|
|
25
|
+
}
|
|
26
|
+
lines.push("---");
|
|
27
|
+
lines.push("");
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const convertErrorToMarkdownRecursive = (error, lines, level) => {
|
|
31
|
+
const errorObject = error.error instanceof Error ? error.error : void 0;
|
|
32
|
+
const prefix = "#".repeat(level + 1);
|
|
33
|
+
if (errorObject) {
|
|
34
|
+
lines.push(`${prefix} ${errorObject.name}`);
|
|
35
|
+
lines.push("");
|
|
36
|
+
if (errorObject.message) {
|
|
37
|
+
lines.push(`**Message:** ${errorObject.message}`);
|
|
38
|
+
lines.push("");
|
|
39
|
+
}
|
|
40
|
+
if ("details" in errorObject && errorObject.details) {
|
|
41
|
+
lines.push(`**Details:** ${errorObject.details}`);
|
|
42
|
+
lines.push("");
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
lines.push(`${prefix} Unknown Error`);
|
|
46
|
+
lines.push("");
|
|
47
|
+
}
|
|
48
|
+
if (error.parsedStackStrace) {
|
|
49
|
+
lines.push(`${"#".repeat(level + 2)} Stack Trace`);
|
|
50
|
+
lines.push("");
|
|
51
|
+
convertStackTraceToMarkdown(error.parsedStackStrace, lines);
|
|
52
|
+
} else if (errorObject?.stack) {
|
|
53
|
+
lines.push(`${"#".repeat(level + 2)} Stack Trace`);
|
|
54
|
+
lines.push("");
|
|
55
|
+
lines.push("```");
|
|
56
|
+
lines.push(errorObject.stack);
|
|
57
|
+
lines.push("```");
|
|
58
|
+
lines.push("");
|
|
59
|
+
}
|
|
60
|
+
if (error.cause) {
|
|
61
|
+
lines.push(`${"#".repeat(level + 2)} Caused By`);
|
|
62
|
+
lines.push("");
|
|
63
|
+
convertErrorToMarkdownRecursive(error.cause, lines, level + 1);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const convertErrorToMarkdown = (error, source) => {
|
|
67
|
+
const lines = [];
|
|
68
|
+
lines.push("# Contember Error Report");
|
|
69
|
+
lines.push("");
|
|
70
|
+
lines.push(`**Source:** ${source}`);
|
|
71
|
+
lines.push("");
|
|
72
|
+
convertErrorToMarkdownRecursive(error, lines, 1);
|
|
73
|
+
return lines.join("\n");
|
|
74
|
+
};
|
|
75
|
+
const useCopyErrorMarkdown = ({ currentError, currentErrorSource }) => {
|
|
76
|
+
const [copyStatus, setCopyStatus] = useState("idle");
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
setCopyStatus("idle");
|
|
79
|
+
}, [currentError]);
|
|
80
|
+
const handleCopyMarkdown = async () => {
|
|
81
|
+
setCopyStatus("copying");
|
|
82
|
+
try {
|
|
83
|
+
const markdown = convertErrorToMarkdown(currentError, currentErrorSource);
|
|
84
|
+
await navigator.clipboard.writeText(markdown);
|
|
85
|
+
setCopyStatus("success");
|
|
86
|
+
} catch (err) {
|
|
87
|
+
console.error("Failed to copy markdown:", err);
|
|
88
|
+
setCopyStatus("error");
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const isClipboardSupported = !!navigator?.clipboard;
|
|
92
|
+
return {
|
|
93
|
+
copyStatus,
|
|
94
|
+
handleCopyMarkdown,
|
|
95
|
+
isClipboardSupported
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
export {
|
|
99
|
+
useCopyErrorMarkdown
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=useCopyErrorMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCopyErrorMarkdown.js","sources":["../../../../../packages/react-devbar/src/hooks/useCopyErrorMarkdown.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport type { ParsedStackTrace, ProcessedError } from '../ui/DevError/types'\n\nconst convertStackTraceToMarkdown = (stackTrace: ParsedStackTrace, lines: string[]) => {\n\tstackTrace.forEach((frame, index) => {\n\t\tlines.push(`**Frame ${index + 1}:**`)\n\t\tlines.push('')\n\t\tlines.push(`- **File:** ${frame.filename}${frame.line ? `:${frame.line}` : ''}`)\n\n\t\tif (frame.callee) {\n\t\t\tlines.push(`- **Function:** ${frame.callee}`)\n\t\t}\n\n\t\tlines.push('')\n\n\t\tif (frame.line !== undefined && frame.sourceCodeLines) {\n\t\t\tlines.push('**Source Code:**')\n\t\t\tlines.push('')\n\t\t\tlines.push('```typescript')\n\n\t\t\tframe.sourceCodeLines.forEach((codeLine, lineIndex) => {\n\t\t\t\tconst lineNumber = lineIndex + 1\n\t\t\t\t// Show context around the error line (similar to the UI logic)\n\t\t\t\tif (frame.line && lineNumber + 5 >= frame.line && lineNumber - 3 <= frame.line) {\n\t\t\t\t\tconst isErrorLine = lineNumber === frame.line\n\t\t\t\t\tconst marker = isErrorLine ? '>>> ' : ' '\n\t\t\t\t\tlines.push(`${marker}${lineNumber.toString().padStart(3)}: ${codeLine}`)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tlines.push('```')\n\t\t\tlines.push('')\n\t\t}\n\n\t\tlines.push('---')\n\t\tlines.push('')\n\t})\n}\n\nconst convertErrorToMarkdownRecursive = (error: ProcessedError, lines: string[], level: number) => {\n\tconst errorObject = error.error instanceof Error ? error.error : undefined\n\tconst prefix = '#'.repeat(level + 1)\n\n\tif (errorObject) {\n\t\tlines.push(`${prefix} ${errorObject.name}`)\n\t\tlines.push('')\n\n\t\tif (errorObject.message) {\n\t\t\tlines.push(`**Message:** ${errorObject.message}`)\n\t\t\tlines.push('')\n\t\t}\n\n\t\tif ('details' in errorObject && (errorObject as Error & { details?: unknown }).details) {\n\t\t\tlines.push(`**Details:** ${(errorObject as Error & { details: string }).details}`)\n\t\t\tlines.push('')\n\t\t}\n\t} else {\n\t\tlines.push(`${prefix} Unknown Error`)\n\t\tlines.push('')\n\t}\n\n\tif (error.parsedStackStrace) {\n\t\tlines.push(`${'#'.repeat(level + 2)} Stack Trace`)\n\t\tlines.push('')\n\t\tconvertStackTraceToMarkdown(error.parsedStackStrace, lines)\n\t} else if (errorObject?.stack) {\n\t\tlines.push(`${'#'.repeat(level + 2)} Stack Trace`)\n\t\tlines.push('')\n\t\tlines.push('```')\n\t\tlines.push(errorObject.stack)\n\t\tlines.push('```')\n\t\tlines.push('')\n\t}\n\n\tif (error.cause) {\n\t\tlines.push(`${'#'.repeat(level + 2)} Caused By`)\n\t\tlines.push('')\n\t\tconvertErrorToMarkdownRecursive(error.cause, lines, level + 1)\n\t}\n}\n\nconst convertErrorToMarkdown = (error: ProcessedError, source: string): string => {\n\tconst lines: string[] = []\n\n\tlines.push('# Contember Error Report')\n\tlines.push('')\n\tlines.push(`**Source:** ${source}`)\n\tlines.push('')\n\n\tconvertErrorToMarkdownRecursive(error, lines, 1)\n\n\treturn lines.join('\\n')\n}\n\ntype CopyMarkdownProps = {\n\tcurrentError: ProcessedError\n\tcurrentErrorSource: string\n}\n\nexport const useCopyErrorMarkdown = ({ currentError, currentErrorSource }: CopyMarkdownProps) => {\n\tconst [copyStatus, setCopyStatus] = useState<'idle' | 'copying' | 'success' | 'error'>('idle')\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: intentional\n\tuseEffect(() => {\n\t\tsetCopyStatus('idle')\n\t}, [currentError])\n\n\tconst handleCopyMarkdown = async () => {\n\t\tsetCopyStatus('copying')\n\t\ttry {\n\t\t\tconst markdown = convertErrorToMarkdown(currentError, currentErrorSource)\n\t\t\tawait navigator.clipboard.writeText(markdown)\n\t\t\tsetCopyStatus('success')\n\t\t} catch (err) {\n\t\t\tconsole.error('Failed to copy markdown:', err)\n\t\t\tsetCopyStatus('error')\n\t\t}\n\t}\n\n\tconst isClipboardSupported = !!navigator?.clipboard\n\n\treturn {\n\t\tcopyStatus,\n\t\thandleCopyMarkdown,\n\t\tisClipboardSupported,\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
+
for (let key of __getOwnPropNames(from))
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
}
|
|
14
|
+
return to;
|
|
15
|
+
};
|
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
25
|
+
const React = require("react");
|
|
26
|
+
const parseStacktrace = async (e) => {
|
|
27
|
+
let StackTracey;
|
|
28
|
+
try {
|
|
29
|
+
StackTracey = (await import("stacktracey")).default;
|
|
30
|
+
} catch {
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
return (await new StackTracey(e).withSourcesAsync()).items.map((it) => ({
|
|
34
|
+
filename: it.fileShort,
|
|
35
|
+
line: it.line,
|
|
36
|
+
callee: it.callee,
|
|
37
|
+
thirdParty: it.thirdParty,
|
|
38
|
+
sourceCodeLines: it.sourceFile?.lines
|
|
39
|
+
}));
|
|
40
|
+
};
|
|
41
|
+
const createInitialError = (e) => ({
|
|
42
|
+
error: e,
|
|
43
|
+
cause: e instanceof Error && "cause" in e && e.cause !== void 0 ? createInitialError(e.cause) : void 0
|
|
44
|
+
});
|
|
45
|
+
const useProcessedError = (e) => {
|
|
46
|
+
const [error, setError] = React.useState(() => createInitialError(e));
|
|
47
|
+
React.useEffect(() => {
|
|
48
|
+
setError(createInitialError(e));
|
|
49
|
+
if (!(e instanceof Error)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const createErrorWithStackTrace = async (e2) => {
|
|
53
|
+
return {
|
|
54
|
+
error: e2,
|
|
55
|
+
parsedStackStrace: e2 instanceof Error ? await parseStacktrace(e2) : void 0,
|
|
56
|
+
cause: e2 instanceof Error && "cause" in e2 && e2.cause !== void 0 ? await createErrorWithStackTrace(e2.cause) : void 0
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
(async () => {
|
|
60
|
+
setError(await createErrorWithStackTrace(e));
|
|
61
|
+
})();
|
|
62
|
+
}, [e]);
|
|
63
|
+
return error;
|
|
64
|
+
};
|
|
65
|
+
exports.parseStacktrace = parseStacktrace;
|
|
66
|
+
exports.useProcessedError = useProcessedError;
|
|
67
|
+
//# sourceMappingURL=useParsedStacktrace.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useParsedStacktrace.cjs","sources":["../../../../../packages/react-devbar/src/hooks/useParsedStacktrace.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { ErrorType, ProcessedError } from '../ui/DevError'\n\nexport const parseStacktrace = async (e: Error) => {\n\tlet StackTracey\n\ttry {\n\t\tStackTracey = (await import('stacktracey')).default\n\t} catch {\n\t\treturn undefined\n\t}\n\treturn (await new StackTracey(e).withSourcesAsync()).items.map(it => ({\n\t\tfilename: it.fileShort,\n\t\tline: it.line,\n\t\tcallee: it.callee,\n\t\tthirdParty: it.thirdParty,\n\t\tsourceCodeLines: it.sourceFile?.lines,\n\t}))\n}\n\nconst createInitialError = (e: ErrorType): ProcessedError => ({\n\terror: e,\n\tcause: e instanceof Error && 'cause' in e && (e as any).cause !== undefined ? createInitialError((e as any).cause) : undefined,\n})\n\nexport const useProcessedError = (e: ErrorType): ProcessedError => {\n\tconst [error, setError] = useState<ProcessedError>(() => createInitialError(e))\n\tuseEffect(() => {\n\t\tsetError(createInitialError(e))\n\t\tif (!(e instanceof Error)) {\n\t\t\treturn\n\t\t}\n\t\tconst createErrorWithStackTrace = async (e: ErrorType): Promise<ProcessedError> => {\n\t\t\treturn {\n\t\t\t\terror: e,\n\t\t\t\tparsedStackStrace: e instanceof Error ? await parseStacktrace(e) : undefined,\n\t\t\t\tcause: e instanceof Error && 'cause' in e && (e as any).cause !== undefined ? await createErrorWithStackTrace((e as any).cause) : undefined,\n\t\t\t}\n\t\t}\n\t\t;(async () => {\n\t\t\tsetError(await createErrorWithStackTrace(e))\n\t\t})()\n\t}, [e])\n\n\treturn error\n}\n"],"names":["useState","useEffect","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAM,kBAAkB,OAAO,MAAa;AAClD,MAAI;AACJ,MAAI;AACH,mBAAe,MAAM,OAAO,aAAa,GAAG;AAAA,EAC7C,QAAQ;AACP,WAAO;AAAA,EACR;AACA,UAAQ,MAAM,IAAI,YAAY,CAAC,EAAE,iBAAA,GAAoB,MAAM,IAAI,CAAA,QAAO;AAAA,IACrE,UAAU,GAAG;AAAA,IACb,MAAM,GAAG;AAAA,IACT,QAAQ,GAAG;AAAA,IACX,YAAY,GAAG;AAAA,IACf,iBAAiB,GAAG,YAAY;AAAA,EAAA,EAC/B;AACH;AAEA,MAAM,qBAAqB,CAAC,OAAkC;AAAA,EAC7D,OAAO;AAAA,EACP,OAAO,aAAa,SAAS,WAAW,KAAM,EAAU,UAAU,SAAY,mBAAoB,EAAU,KAAK,IAAI;AACtH;AAEO,MAAM,oBAAoB,CAAC,MAAiC;AAClE,QAAM,CAAC,OAAO,QAAQ,IAAIA,MAAAA,SAAyB,MAAM,mBAAmB,CAAC,CAAC;AAC9EC,QAAAA,UAAU,MAAM;AACf,aAAS,mBAAmB,CAAC,CAAC;AAC9B,QAAI,EAAE,aAAa,QAAQ;AAC1B;AAAA,IACD;AACA,UAAM,4BAA4B,OAAOC,OAA0C;AAClF,aAAO;AAAA,QACN,OAAOA;AAAAA,QACP,mBAAmBA,cAAa,QAAQ,MAAM,gBAAgBA,EAAC,IAAI;AAAA,QACnE,OAAOA,cAAa,SAAS,WAAWA,MAAMA,GAAU,UAAU,SAAY,MAAM,0BAA2BA,GAAU,KAAK,IAAI;AAAA,MAAA;AAAA,IAEpI;AACC,KAAC,YAAY;AACb,eAAS,MAAM,0BAA0B,CAAC,CAAC;AAAA,IAC5C,GAAA;AAAA,EACD,GAAG,CAAC,CAAC,CAAC;AAEN,SAAO;AACR;;;"}
|