@xyo-network/react-error 4.1.7 → 4.1.9
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/browser/components/ErrorBoundary/ThrownErrorBoundary.d.ts +3 -15
- package/dist/browser/components/ErrorBoundary/ThrownErrorBoundary.d.ts.map +1 -1
- package/dist/browser/components/ErrorBoundary/ThrownErrorBoundaryBase.d.ts +21 -0
- package/dist/browser/components/ErrorBoundary/ThrownErrorBoundaryBase.d.ts.map +1 -0
- package/dist/browser/components/ErrorBoundary.d.ts +3 -0
- package/dist/browser/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/browser/components/ErrorRender/ErrorAlert.d.ts +3 -5
- package/dist/browser/components/ErrorRender/ErrorAlert.d.ts.map +1 -1
- package/dist/browser/components/ErrorRender/Props.d.ts +3 -3
- package/dist/browser/components/ErrorRender/Props.d.ts.map +1 -1
- package/dist/browser/components/ErrorRender/Render.d.ts +1 -2
- package/dist/browser/components/ErrorRender/Render.d.ts.map +1 -1
- package/dist/browser/contexts/ErrorReporter/Context.d.ts +1 -0
- package/dist/browser/contexts/ErrorReporter/Context.d.ts.map +1 -1
- package/dist/browser/contexts/ErrorReporter/Provider.d.ts +4 -3
- package/dist/browser/contexts/ErrorReporter/Provider.d.ts.map +1 -1
- package/dist/browser/contexts/ErrorReporter/State.d.ts +1 -0
- package/dist/browser/contexts/ErrorReporter/State.d.ts.map +1 -1
- package/dist/browser/contexts/ErrorReporter/useErrorReporter.d.ts +1 -0
- package/dist/browser/contexts/ErrorReporter/useErrorReporter.d.ts.map +1 -1
- package/dist/browser/index.mjs +41 -97
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +5 -5
- package/src/components/ErrorBoundary/ThrownErrorBoundary.tsx +6 -76
- package/src/components/ErrorBoundary/ThrownErrorBoundaryBase.tsx +77 -0
- package/src/components/ErrorBoundary.tsx +3 -0
- package/src/components/ErrorRender/ErrorAlert.tsx +5 -6
- package/src/components/ErrorRender/Props.ts +4 -3
- package/src/components/ErrorRender/Render.tsx +2 -2
- package/src/contexts/ErrorReporter/Context.ts +1 -0
- package/src/contexts/ErrorReporter/Provider.tsx +4 -5
- package/src/contexts/ErrorReporter/State.ts +1 -0
- package/src/contexts/ErrorReporter/useErrorReporter.tsx +1 -0
@@ -1,17 +1,5 @@
|
|
1
|
+
import type { ThrownErrorBoundaryProps } from '@xylabs/react-error';
|
1
2
|
import type { ModuleError } from '@xyo-network/payload-model';
|
2
|
-
import type { FC
|
3
|
-
|
4
|
-
export interface ThrownErrorBoundaryProps {
|
5
|
-
boundaryName?: string;
|
6
|
-
children: ReactNode;
|
7
|
-
errorComponent?: (e: ModuleError, boundaryName?: string) => ReactNode;
|
8
|
-
rethrow?: boolean;
|
9
|
-
rollbar?: Rollbar;
|
10
|
-
scope?: string;
|
11
|
-
title?: string;
|
12
|
-
}
|
13
|
-
export interface ThrownErrorBoundaryState {
|
14
|
-
xyoError?: ModuleError;
|
15
|
-
}
|
16
|
-
export declare const ThrownErrorBoundary: FC<ThrownErrorBoundaryProps>;
|
3
|
+
import type { FC } from 'react';
|
4
|
+
export declare const ThrownErrorBoundary: FC<ThrownErrorBoundaryProps<ModuleError>>;
|
17
5
|
//# sourceMappingURL=ThrownErrorBoundary.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ThrownErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorBoundary/ThrownErrorBoundary.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"ThrownErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorBoundary/ThrownErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAI/B,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAEzE,CAAA"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import type { ReactNode } from 'react';
|
2
|
+
import type Rollbar from 'rollbar';
|
3
|
+
/** @deprecated use from @xylabs/react-error instead */
|
4
|
+
export type ErrorEx<T = void> = T extends void ? Error : T | Error;
|
5
|
+
/** @deprecated use from @xylabs/react-error instead */
|
6
|
+
export interface ThrownErrorBoundaryProps<T = void> {
|
7
|
+
boundaryName?: string;
|
8
|
+
children: ReactNode;
|
9
|
+
errorComponent?: (e: ErrorEx<T>, boundaryName?: string) => ReactNode;
|
10
|
+
rethrow?: boolean;
|
11
|
+
rollbar?: Rollbar;
|
12
|
+
scope?: string;
|
13
|
+
title?: string;
|
14
|
+
}
|
15
|
+
/** @deprecated use from @xylabs/react-error instead */
|
16
|
+
export interface ThrownErrorBoundaryState<T = void> {
|
17
|
+
errorEx?: ErrorEx<T>;
|
18
|
+
}
|
19
|
+
/** @deprecated use from @xylabs/react-error instead */
|
20
|
+
export declare function ThrownErrorBoundaryBase<T = void>({ rollbar, ...props }: ThrownErrorBoundaryProps<T>): JSX.Element;
|
21
|
+
//# sourceMappingURL=ThrownErrorBoundaryBase.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ThrownErrorBoundaryBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorBoundary/ThrownErrorBoundaryBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAKlC,uDAAuD;AACvD,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAA;AAElE,uDAAuD;AACvD,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,IAAI;IAChD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,SAAS,CAAA;IACnB,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,SAAS,CAAA;IACpE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,uDAAuD;AACvD,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,IAAI;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CACrB;AA0CD,uDAAuD;AACvD,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAQjH"}
|
@@ -1,14 +1,17 @@
|
|
1
1
|
import type { ErrorInfo, ReactNode } from 'react';
|
2
2
|
import { Component } from 'react';
|
3
|
+
/** @deprecated use from @xylabs/react-error instead */
|
3
4
|
export interface ErrorBoundaryProps {
|
4
5
|
children: ReactNode;
|
5
6
|
fallback?: ReactNode;
|
6
7
|
fallbackWithError?: (error: Error) => ReactNode;
|
7
8
|
scope?: string;
|
8
9
|
}
|
10
|
+
/** @deprecated use from @xylabs/react-error instead */
|
9
11
|
export interface ErrorBoundaryState {
|
10
12
|
error?: Error;
|
11
13
|
}
|
14
|
+
/** @deprecated use from @xylabs/react-error instead */
|
12
15
|
export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
13
16
|
constructor(props: ErrorBoundaryProps);
|
14
17
|
static getDerivedStateFromError(error: Error): {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjD,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAExC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAA;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IAEpB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAA;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,qBAAa,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBACtE,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK;;;IAInC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAIpD,MAAM;CA4BhB"}
|
1
|
+
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjD,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAExC,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAA;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IAEpB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAA;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,uDAAuD;AACvD,qBAAa,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBACtE,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK;;;IAInC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAIpD,MAAM;CA4BhB"}
|
@@ -1,12 +1,10 @@
|
|
1
1
|
import type { AlertProps } from '@mui/material';
|
2
|
-
|
3
|
-
|
4
|
-
export interface ErrorAlertProps extends AlertProps {
|
5
|
-
error?: ModuleError | Error | string;
|
2
|
+
export interface ErrorAlertProps<T = void> extends AlertProps {
|
3
|
+
error?: T | Error | string;
|
6
4
|
/** @deprecated use scope instead */
|
7
5
|
errorContext?: string;
|
8
6
|
onCancel?: () => void;
|
9
7
|
scope?: string;
|
10
8
|
}
|
11
|
-
export declare
|
9
|
+
export declare function ErrorAlert<T = void>({ title, onCancel, error, errorContext, scope, ...props }: ErrorAlertProps<T>): JSX.Element;
|
12
10
|
//# sourceMappingURL=ErrorAlert.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ErrorAlert.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorRender/ErrorAlert.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;
|
1
|
+
{"version":3,"file":"ErrorAlert.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorRender/ErrorAlert.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAO/C,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,UAAU;IAC3D,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAA;IAC1B,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,EACnC,KAAsC,EACtC,QAAQ,EACR,KAAmC,EACnC,YAAY,EACZ,KAAK,EACL,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAoClC"}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import type { FlexBoxProps } from '@xylabs/react-flexbox';
|
2
|
-
import type { ModuleError } from '@xyo-network/payload-model';
|
3
2
|
import type { ReactNode } from 'react';
|
4
3
|
import type { Location } from 'react-router-dom';
|
5
|
-
export
|
4
|
+
export type ErrorEx<T = void> = T extends void ? Error : T | Error;
|
5
|
+
export interface ErrorRenderProps<T = void> extends FlexBoxProps {
|
6
6
|
customError?: ReactNode;
|
7
|
-
error?:
|
7
|
+
error?: ErrorEx<T>;
|
8
8
|
errorContext?: string;
|
9
9
|
noErrorDisplay?: boolean;
|
10
10
|
noReAuth?: boolean;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Props.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorRender/Props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"Props.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorRender/Props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAA;AAElE,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,YAAY;IAC9D,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,QAAQ,CAAA;CAC7B"}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import React from 'react';
|
2
1
|
import type { ErrorRenderProps } from './Props.ts';
|
3
|
-
export declare
|
2
|
+
export declare function ErrorRender<T = void>({ onCancel, error, noErrorDisplay, customError, children, errorContext, scope, useLocation, ...props }: ErrorRenderProps<T>): JSX.Element;
|
4
3
|
//# sourceMappingURL=Render.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Render.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorRender/Render.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"Render.d.ts","sourceRoot":"","sources":["../../../../src/components/ErrorRender/Render.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,wBAAgB,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,EACpC,QAAQ,EACR,KAAK,EACL,cAAsB,EACtB,WAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,WAAW,EACX,GAAG,KAAK,EACT,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CA4BnC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAE3D,eAAO,MAAM,oBAAoB,oDAA+C,CAAA"}
|
1
|
+
{"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAE3D,uDAAuD;AACvD,eAAO,MAAM,oBAAoB,oDAA+C,CAAA"}
|
@@ -1,9 +1,10 @@
|
|
1
|
-
import type {
|
1
|
+
import type { PropsWithChildren } from 'react';
|
2
2
|
import React from 'react';
|
3
3
|
import type Rollbar from 'rollbar';
|
4
|
+
/** @deprecated use from @xylabs/react-error instead */
|
4
5
|
export interface ErrorReporterProviderProps {
|
5
6
|
rollbar: Rollbar;
|
6
7
|
}
|
7
|
-
|
8
|
-
export
|
8
|
+
/** @deprecated use from @xylabs/react-error instead */
|
9
|
+
export declare const ErrorReporterProvider: React.FC<PropsWithChildren<ErrorReporterProviderProps>>;
|
9
10
|
//# sourceMappingURL=Provider.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Provider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Provider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAIlC,uDAAuD;AACvD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAA;CACjB;AACD,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAezF,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/State.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
|
1
|
+
{"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/State.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,uDAAuD;AACvD,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useErrorReporter.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/useErrorReporter.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,sDAO5B,CAAA"}
|
1
|
+
{"version":3,"file":"useErrorReporter.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/useErrorReporter.tsx"],"names":[],"mappings":"AAIA,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,sDAO5B,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
@@ -41,52 +41,18 @@ var ErrorBoundary = class extends Component {
|
|
41
41
|
};
|
42
42
|
|
43
43
|
// src/components/ErrorBoundary/ThrownErrorBoundary.tsx
|
44
|
-
import {
|
45
|
-
import { ModuleErrorSchema } from "@xyo-network/payload-model";
|
46
|
-
import React5, { Component as Component2 } from "react";
|
47
|
-
|
48
|
-
// src/contexts/ErrorReporter/Provider.tsx
|
49
|
-
import { useRollbar } from "@rollbar/react";
|
44
|
+
import { ThrownErrorBoundary as ThrownErrorBoundaryBase } from "@xylabs/react-error";
|
50
45
|
import React2 from "react";
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
var ErrorReporterContext = createContext({});
|
55
|
-
|
56
|
-
// src/contexts/ErrorReporter/Provider.tsx
|
57
|
-
var ErrorReporterProvider = /* @__PURE__ */ __name(({ children, rollbar: rollbarProp }) => {
|
58
|
-
let rollbarFromHook;
|
59
|
-
try {
|
60
|
-
rollbarFromHook = useRollbar();
|
61
|
-
} catch {
|
62
|
-
}
|
63
|
-
const rollbar = rollbarProp ?? rollbarFromHook;
|
64
|
-
if (!rollbar) {
|
65
|
-
throw new Error("ErrorReporterProvider unable to find a Rollbar instance either passed as prop or from Provider");
|
66
|
-
}
|
67
|
-
return /* @__PURE__ */ React2.createElement(ErrorReporterContext.Provider, {
|
68
|
-
value: {
|
69
|
-
rollbar
|
70
|
-
}
|
71
|
-
}, children);
|
72
|
-
}, "ErrorReporterProvider");
|
73
|
-
|
74
|
-
// src/contexts/ErrorReporter/useErrorReporter.tsx
|
75
|
-
import { useContext } from "react";
|
76
|
-
var useErrorReporter = /* @__PURE__ */ __name(() => {
|
77
|
-
const context = useContext(ErrorReporterContext);
|
78
|
-
if (context === void 0) {
|
79
|
-
console.warn("useErrorReporter must be used within a ErrorReporterContext");
|
80
|
-
}
|
81
|
-
return context ?? {};
|
82
|
-
}, "useErrorReporter");
|
46
|
+
var ThrownErrorBoundary = /* @__PURE__ */ __name((props) => {
|
47
|
+
return /* @__PURE__ */ React2.createElement(ThrownErrorBoundaryBase, props);
|
48
|
+
}, "ThrownErrorBoundary");
|
83
49
|
|
84
50
|
// src/components/ErrorRender/ErrorAlert.tsx
|
85
51
|
import { ExitToApp as ExitIcon } from "@mui/icons-material";
|
86
52
|
import { Alert, AlertTitle, Typography as Typography2 } from "@mui/material";
|
87
53
|
import { ButtonEx } from "@xylabs/react-button";
|
88
54
|
import React3 from "react";
|
89
|
-
|
55
|
+
function ErrorAlert({ title = "Whoops! Something went wrong", onCancel, error = "An unknown error occurred", errorContext, scope, ...props }) {
|
90
56
|
const finalScope = scope ?? errorContext;
|
91
57
|
return /* @__PURE__ */ React3.createElement(Alert, {
|
92
58
|
severity: "error",
|
@@ -115,12 +81,13 @@ var ErrorAlert = /* @__PURE__ */ __name(({ title = "Whoops! Something went wrong
|
|
115
81
|
}, /* @__PURE__ */ React3.createElement(ExitIcon, {
|
116
82
|
fontSize: "small"
|
117
83
|
})) : null);
|
118
|
-
}
|
84
|
+
}
|
85
|
+
__name(ErrorAlert, "ErrorAlert");
|
119
86
|
|
120
87
|
// src/components/ErrorRender/Render.tsx
|
121
88
|
import { FlexCol as FlexCol2 } from "@xylabs/react-flexbox";
|
122
89
|
import React4, { useEffect } from "react";
|
123
|
-
|
90
|
+
function ErrorRender({ onCancel, error, noErrorDisplay = false, customError = null, children, errorContext, scope, useLocation, ...props }) {
|
124
91
|
const location = useLocation?.();
|
125
92
|
useEffect(() => {
|
126
93
|
if (location) {
|
@@ -152,67 +119,44 @@ var ErrorRender = /* @__PURE__ */ __name(({ onCancel, error, noErrorDisplay = fa
|
|
152
119
|
onCancel,
|
153
120
|
scope
|
154
121
|
}))) : /* @__PURE__ */ React4.createElement(React4.Fragment, null, children);
|
155
|
-
}
|
122
|
+
}
|
123
|
+
__name(ErrorRender, "ErrorRender");
|
156
124
|
|
157
|
-
// src/
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
hasError: true,
|
168
|
-
xyoError: ThrownErrorBoundaryInner2.normalizeError(error)
|
169
|
-
};
|
170
|
-
}
|
171
|
-
static normalizeError(error) {
|
172
|
-
return error.schema === ModuleErrorSchema ? error : {
|
173
|
-
message: error.message,
|
174
|
-
schema: ModuleErrorSchema,
|
175
|
-
sources: []
|
176
|
-
};
|
177
|
-
}
|
178
|
-
componentDidCatch(error, errorInfo) {
|
179
|
-
const { rethrow, rollbar } = this.props;
|
180
|
-
const { xyoError } = this.state;
|
181
|
-
rollbar?.error(error);
|
182
|
-
console.error("Error:", xyoError, errorInfo);
|
183
|
-
if (rethrow) {
|
184
|
-
throw error;
|
185
|
-
}
|
186
|
-
}
|
187
|
-
render() {
|
188
|
-
const { xyoError } = this.state;
|
189
|
-
const { children, boundaryName, errorComponent, scope, title } = this.props;
|
190
|
-
if (xyoError) {
|
191
|
-
if (errorComponent) {
|
192
|
-
return errorComponent(xyoError);
|
193
|
-
}
|
194
|
-
return /* @__PURE__ */ React5.createElement(ErrorRender, {
|
195
|
-
error: xyoError,
|
196
|
-
errorContext: `${boundaryName} Boundary`,
|
197
|
-
scope,
|
198
|
-
title
|
199
|
-
});
|
200
|
-
}
|
201
|
-
return children;
|
202
|
-
}
|
203
|
-
};
|
204
|
-
var ThrownErrorBoundary = /* @__PURE__ */ __name(({ rollbar, ...props }) => {
|
205
|
-
const { rollbar: rollbarErrorReporter } = useErrorReporter();
|
125
|
+
// src/contexts/ErrorReporter/Provider.tsx
|
126
|
+
import { useRollbar } from "@rollbar/react";
|
127
|
+
import React5 from "react";
|
128
|
+
|
129
|
+
// src/contexts/ErrorReporter/Context.ts
|
130
|
+
import { createContext } from "react";
|
131
|
+
var ErrorReporterContext = createContext({});
|
132
|
+
|
133
|
+
// src/contexts/ErrorReporter/Provider.tsx
|
134
|
+
var ErrorReporterProvider = /* @__PURE__ */ __name(({ children, rollbar: rollbarProp }) => {
|
206
135
|
let rollbarFromHook;
|
207
136
|
try {
|
208
|
-
rollbarFromHook =
|
137
|
+
rollbarFromHook = useRollbar();
|
209
138
|
} catch {
|
210
139
|
}
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
}
|
215
|
-
|
140
|
+
const rollbar = rollbarProp ?? rollbarFromHook;
|
141
|
+
if (!rollbar) {
|
142
|
+
throw new Error("ErrorReporterProvider unable to find a Rollbar instance either passed as prop or from Provider");
|
143
|
+
}
|
144
|
+
return /* @__PURE__ */ React5.createElement(ErrorReporterContext.Provider, {
|
145
|
+
value: {
|
146
|
+
rollbar
|
147
|
+
}
|
148
|
+
}, children);
|
149
|
+
}, "ErrorReporterProvider");
|
150
|
+
|
151
|
+
// src/contexts/ErrorReporter/useErrorReporter.tsx
|
152
|
+
import { useContext } from "react";
|
153
|
+
var useErrorReporter = /* @__PURE__ */ __name(() => {
|
154
|
+
const context = useContext(ErrorReporterContext);
|
155
|
+
if (context === void 0) {
|
156
|
+
console.warn("useErrorReporter must be used within a ErrorReporterContext");
|
157
|
+
}
|
158
|
+
return context ?? {};
|
159
|
+
}, "useErrorReporter");
|
216
160
|
export {
|
217
161
|
ErrorAlert,
|
218
162
|
ErrorBoundary,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/components/ErrorBoundary.tsx","../../src/components/ErrorBoundary/ThrownErrorBoundary.tsx","../../src/contexts/ErrorReporter/Provider.tsx","../../src/contexts/ErrorReporter/Context.ts","../../src/contexts/ErrorReporter/useErrorReporter.tsx","../../src/components/ErrorRender/ErrorAlert.tsx","../../src/components/ErrorRender/Render.tsx"],"sourcesContent":["import { Typography } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { ErrorInfo, ReactNode } from 'react'\nimport React, { Component } from 'react'\n\nexport interface ErrorBoundaryProps {\n children: ReactNode\n // fallback as a static ReactNode value\n fallback?: ReactNode\n // fallback element that can receive the error as a prop\n fallbackWithError?: (error: Error) => ReactNode\n scope?: string\n}\n\nexport interface ErrorBoundaryState {\n error?: Error\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { error: undefined }\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error }\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(`${error}: ${errorInfo}`)\n }\n\n override render() {\n if (this.state.error) {\n if (this.props.fallbackWithError) {\n return this.props.fallbackWithError(this.state.error)\n }\n return (\n this.props.fallback ?? (\n <FlexCol>\n <Typography variant=\"h1\">Something went wrong.</Typography>\n {this.props.scope && (\n <Typography variant=\"h2\">\n [\n {this.props.scope}\n ]\n </Typography>\n )}\n <Typography variant=\"body1\">\n [\n {this.state.error?.message}\n ]\n </Typography>\n </FlexCol>\n )\n )\n }\n\n return this.props.children\n }\n}\n","import { useRollbar } from '@rollbar/react'\nimport type { ModuleError } from '@xyo-network/payload-model'\nimport { ModuleErrorSchema } from '@xyo-network/payload-model'\nimport type {\n ErrorInfo, FC, ReactNode,\n} from 'react'\nimport React, { Component } from 'react'\nimport type Rollbar from 'rollbar'\n\nimport { useErrorReporter } from '../../contexts/index.ts'\nimport { ErrorRender } from '../ErrorRender/index.ts'\n\nexport interface ThrownErrorBoundaryProps {\n boundaryName?: string\n children: ReactNode\n errorComponent?: (e: ModuleError, boundaryName?: string) => ReactNode\n rethrow?: boolean\n rollbar?: Rollbar\n scope?: string\n title?: string\n}\n\nexport interface ThrownErrorBoundaryState {\n xyoError?: ModuleError\n}\n\nclass ThrownErrorBoundaryInner extends Component<ThrownErrorBoundaryProps, ThrownErrorBoundaryState> {\n override state: ThrownErrorBoundaryState = { xyoError: undefined }\n\n static getDerivedStateFromError(error: Error) {\n return { hasError: true, xyoError: ThrownErrorBoundaryInner.normalizeError(error) } as ThrownErrorBoundaryState\n }\n\n static normalizeError(error: Error | ModuleError): ModuleError {\n return (\n (error as ModuleError).schema === ModuleErrorSchema\n ? error\n : {\n message: error.message, schema: ModuleErrorSchema, sources: [],\n }) as ModuleError\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n const { rethrow, rollbar } = this.props\n const { xyoError } = this.state\n\n rollbar?.error(error)\n\n console.error('Error:', xyoError, errorInfo)\n if (rethrow) {\n throw error\n }\n }\n\n override render() {\n const { xyoError } = this.state\n const {\n children, boundaryName, errorComponent, scope, title,\n } = this.props\n if (xyoError) {\n if (errorComponent) {\n return errorComponent(xyoError)\n }\n return <ErrorRender error={xyoError} errorContext={`${boundaryName} Boundary`} scope={scope} title={title} />\n }\n\n return children\n }\n}\n\n// calling the hook outside of the component since only can be called in functional component\nexport const ThrownErrorBoundary: FC<ThrownErrorBoundaryProps> = ({ rollbar, ...props }) => {\n const { rollbar: rollbarErrorReporter } = useErrorReporter()\n let rollbarFromHook: Rollbar | undefined\n // safely call the hook\n try {\n rollbarFromHook = useRollbar()\n } catch {}\n return <ThrownErrorBoundaryInner rollbar={rollbar ?? rollbarErrorReporter ?? rollbarFromHook} {...props} />\n}\n","import { useRollbar } from '@rollbar/react'\nimport type { WithChildren } from '@xylabs/react-shared'\nimport React from 'react'\nimport type Rollbar from 'rollbar'\n\nimport { ErrorReporterContext } from './Context.ts'\n\nexport interface ErrorReporterProviderProps {\n rollbar: Rollbar\n}\n\nconst ErrorReporterProvider: React.FC<WithChildren<ErrorReporterProviderProps>> = ({ children, rollbar: rollbarProp }) => {\n let rollbarFromHook: Rollbar | undefined\n // safely call the hook\n try {\n rollbarFromHook = useRollbar()\n } catch {}\n\n const rollbar = rollbarProp ?? rollbarFromHook\n\n if (!rollbar) {\n throw new Error('ErrorReporterProvider unable to find a Rollbar instance either passed as prop or from Provider')\n }\n\n // eslint-disable-next-line @eslint-react/no-unstable-context-value\n return <ErrorReporterContext.Provider value={{ rollbar }}>{children}</ErrorReporterContext.Provider>\n}\n\nexport { ErrorReporterProvider }\n","import { createContext } from 'react'\n\nimport type { ErrorReporterContextState } from './State.ts'\n\nexport const ErrorReporterContext = createContext<ErrorReporterContextState>({})\n","import { useContext } from 'react'\n\nimport { ErrorReporterContext } from './Context.ts'\n\nexport const useErrorReporter = () => {\n const context = useContext(ErrorReporterContext)\n if (context === undefined) {\n console.warn('useErrorReporter must be used within a ErrorReporterContext')\n }\n\n return context ?? {}\n}\n","import { ExitToApp as ExitIcon } from '@mui/icons-material'\nimport type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Typography,\n} from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport type { ModuleError } from '@xyo-network/payload-model'\nimport React from 'react'\n\nexport interface ErrorAlertProps extends AlertProps {\n error?: ModuleError | Error | string\n /** @deprecated use scope instead */\n errorContext?: string\n onCancel?: () => void\n scope?: string\n}\n\nexport const ErrorAlert: React.FC<ErrorAlertProps> = ({\n title = 'Whoops! Something went wrong',\n onCancel,\n error = 'An unknown error occurred',\n errorContext,\n scope,\n ...props\n}) => {\n const finalScope = scope ?? errorContext\n return (\n <Alert severity=\"error\" {...props}>\n <AlertTitle>{title}</AlertTitle>\n {finalScope\n ? (\n <div>\n <Typography variant=\"caption\" mr={0.5} fontWeight=\"bold\">\n Scope:\n </Typography>\n <Typography variant=\"caption\">{finalScope}</Typography>\n </div>\n )\n : null}\n <div>\n <Typography variant=\"caption\" mr={0.5} fontWeight=\"bold\">\n Error:\n </Typography>\n <Typography variant=\"caption\">{typeof error === 'string' ? error : error?.message}</Typography>\n </div>\n {onCancel\n ? (\n <ButtonEx\n variant=\"outlined\"\n size=\"small\"\n onClick={onCancel}\n position=\"absolute\"\n style={{ right: 8, top: 8 }}\n >\n <ExitIcon fontSize=\"small\" />\n </ButtonEx>\n )\n : null}\n </Alert>\n )\n}\n","import { FlexCol } from '@xylabs/react-flexbox'\nimport React, { useEffect } from 'react'\n\nimport { ErrorAlert } from './ErrorAlert.tsx'\nimport type { ErrorRenderProps } from './Props.ts'\n\nexport const ErrorRender: React.FC<ErrorRenderProps> = ({\n onCancel,\n error,\n noErrorDisplay = false,\n customError = null,\n children,\n errorContext,\n scope,\n useLocation,\n ...props\n}) => {\n const location = useLocation?.()\n useEffect(() => {\n if (location) {\n // ensure we end up at the same place we are now after logging in\n location.state = { from: { pathname: globalThis.location.pathname } }\n }\n }, [location])\n\n useEffect(() => {\n if (error) {\n globalThis.rollbar?.error(error)\n }\n }, [error])\n\n return error\n ? (\n <FlexCol alignItems=\"stretch\" {...props}>\n {noErrorDisplay\n ? customError\n : (\n <FlexCol alignItems=\"center\" {...props}>\n <ErrorAlert error={error} errorContext={errorContext} onCancel={onCancel} scope={scope} />\n </FlexCol>\n )}\n </FlexCol>\n )\n : <>{children}</>\n}\n"],"mappings":"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","names":["Typography","FlexCol","React","Component","ErrorBoundary","Component","constructor","props","state","error","undefined","getDerivedStateFromError","componentDidCatch","errorInfo","console","render","fallbackWithError","fallback","FlexCol","Typography","variant","scope","message","children","useRollbar","ModuleErrorSchema","React","Component","useRollbar","React","createContext","ErrorReporterContext","ErrorReporterProvider","children","rollbar","rollbarProp","rollbarFromHook","useRollbar","Error","React","ErrorReporterContext","Provider","value","useContext","useErrorReporter","context","useContext","ErrorReporterContext","undefined","console","warn","ExitToApp","ExitIcon","Alert","AlertTitle","Typography","ButtonEx","React","ErrorAlert","title","onCancel","error","errorContext","scope","props","finalScope","React","Alert","severity","AlertTitle","div","Typography","variant","mr","fontWeight","message","ButtonEx","size","onClick","position","style","right","top","ExitIcon","fontSize","FlexCol","React","useEffect","ErrorRender","onCancel","error","noErrorDisplay","customError","children","errorContext","scope","useLocation","props","location","useEffect","state","from","pathname","globalThis","rollbar","React","FlexCol","alignItems","ErrorAlert","ThrownErrorBoundaryInner","Component","state","xyoError","undefined","getDerivedStateFromError","error","hasError","normalizeError","schema","ModuleErrorSchema","message","sources","componentDidCatch","errorInfo","rethrow","rollbar","props","console","render","children","boundaryName","errorComponent","scope","title","React","ErrorRender","errorContext","ThrownErrorBoundary","rollbarErrorReporter","useErrorReporter","rollbarFromHook","useRollbar"]}
|
1
|
+
{"version":3,"sources":["../../src/components/ErrorBoundary.tsx","../../src/components/ErrorBoundary/ThrownErrorBoundary.tsx","../../src/components/ErrorRender/ErrorAlert.tsx","../../src/components/ErrorRender/Render.tsx","../../src/contexts/ErrorReporter/Provider.tsx","../../src/contexts/ErrorReporter/Context.ts","../../src/contexts/ErrorReporter/useErrorReporter.tsx"],"sourcesContent":["import { Typography } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { ErrorInfo, ReactNode } from 'react'\nimport React, { Component } from 'react'\n\n/** @deprecated use from @xylabs/react-error instead */\nexport interface ErrorBoundaryProps {\n children: ReactNode\n // fallback as a static ReactNode value\n fallback?: ReactNode\n // fallback element that can receive the error as a prop\n fallbackWithError?: (error: Error) => ReactNode\n scope?: string\n}\n\n/** @deprecated use from @xylabs/react-error instead */\nexport interface ErrorBoundaryState {\n error?: Error\n}\n\n/** @deprecated use from @xylabs/react-error instead */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { error: undefined }\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error }\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(`${error}: ${errorInfo}`)\n }\n\n override render() {\n if (this.state.error) {\n if (this.props.fallbackWithError) {\n return this.props.fallbackWithError(this.state.error)\n }\n return (\n this.props.fallback ?? (\n <FlexCol>\n <Typography variant=\"h1\">Something went wrong.</Typography>\n {this.props.scope && (\n <Typography variant=\"h2\">\n [\n {this.props.scope}\n ]\n </Typography>\n )}\n <Typography variant=\"body1\">\n [\n {this.state.error?.message}\n ]\n </Typography>\n </FlexCol>\n )\n )\n }\n\n return this.props.children\n }\n}\n","import type { ThrownErrorBoundaryProps } from '@xylabs/react-error'\nimport { ThrownErrorBoundary as ThrownErrorBoundaryBase } from '@xylabs/react-error'\nimport type { ModuleError } from '@xyo-network/payload-model'\nimport type { FC } from 'react'\nimport React from 'react'\n\n// calling the hook outside of the component since only can be called in functional component\nexport const ThrownErrorBoundary: FC<ThrownErrorBoundaryProps<ModuleError>> = (props) => {\n return <ThrownErrorBoundaryBase<ModuleError> {...props} />\n}\n","import { ExitToApp as ExitIcon } from '@mui/icons-material'\nimport type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Typography,\n} from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport React from 'react'\n\nexport interface ErrorAlertProps<T = void> extends AlertProps {\n error?: T | Error | string\n /** @deprecated use scope instead */\n errorContext?: string\n onCancel?: () => void\n scope?: string\n}\n\nexport function ErrorAlert<T = void>({\n title = 'Whoops! Something went wrong',\n onCancel,\n error = 'An unknown error occurred',\n errorContext,\n scope,\n ...props\n}: ErrorAlertProps<T>): JSX.Element {\n const finalScope = scope ?? errorContext\n return (\n <Alert severity=\"error\" {...props}>\n <AlertTitle>{title}</AlertTitle>\n {finalScope\n ? (\n <div>\n <Typography variant=\"caption\" mr={0.5} fontWeight=\"bold\">\n Scope:\n </Typography>\n <Typography variant=\"caption\">{finalScope}</Typography>\n </div>\n )\n : null}\n <div>\n <Typography variant=\"caption\" mr={0.5} fontWeight=\"bold\">\n Error:\n </Typography>\n <Typography variant=\"caption\">{typeof error === 'string' ? error : (error as Error)?.message}</Typography>\n </div>\n {onCancel\n ? (\n <ButtonEx\n variant=\"outlined\"\n size=\"small\"\n onClick={onCancel}\n position=\"absolute\"\n style={{ right: 8, top: 8 }}\n >\n <ExitIcon fontSize=\"small\" />\n </ButtonEx>\n )\n : null}\n </Alert>\n )\n}\n","import { FlexCol } from '@xylabs/react-flexbox'\nimport React, { useEffect } from 'react'\n\nimport { ErrorAlert } from './ErrorAlert.tsx'\nimport type { ErrorRenderProps } from './Props.ts'\n\nexport function ErrorRender<T = void>({\n onCancel,\n error,\n noErrorDisplay = false,\n customError = null,\n children,\n errorContext,\n scope,\n useLocation,\n ...props\n}: ErrorRenderProps<T>): JSX.Element {\n const location = useLocation?.()\n useEffect(() => {\n if (location) {\n // ensure we end up at the same place we are now after logging in\n location.state = { from: { pathname: globalThis.location.pathname } }\n }\n }, [location])\n\n useEffect(() => {\n if (error) {\n globalThis.rollbar?.error(error)\n }\n }, [error])\n\n return error\n ? (\n <FlexCol alignItems=\"stretch\" {...props}>\n {noErrorDisplay\n ? customError\n : (\n <FlexCol alignItems=\"center\" {...props}>\n <ErrorAlert error={error} errorContext={errorContext} onCancel={onCancel} scope={scope} />\n </FlexCol>\n )}\n </FlexCol>\n )\n : <>{children}</>\n}\n","import { useRollbar } from '@rollbar/react'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\nimport type Rollbar from 'rollbar'\n\nimport { ErrorReporterContext } from './Context.ts'\n\n/** @deprecated use from @xylabs/react-error instead */\nexport interface ErrorReporterProviderProps {\n rollbar: Rollbar\n}\n/** @deprecated use from @xylabs/react-error instead */\nexport const ErrorReporterProvider: React.FC<PropsWithChildren<ErrorReporterProviderProps>> = ({ children, rollbar: rollbarProp }) => {\n let rollbarFromHook: Rollbar | undefined\n // safely call the hook\n try {\n rollbarFromHook = useRollbar()\n } catch {}\n\n const rollbar = rollbarProp ?? rollbarFromHook\n\n if (!rollbar) {\n throw new Error('ErrorReporterProvider unable to find a Rollbar instance either passed as prop or from Provider')\n }\n\n // eslint-disable-next-line @eslint-react/no-unstable-context-value\n return <ErrorReporterContext.Provider value={{ rollbar }}>{children}</ErrorReporterContext.Provider>\n}\n","import { createContext } from 'react'\n\nimport type { ErrorReporterContextState } from './State.ts'\n\n/** @deprecated use from @xylabs/react-error instead */\nexport const ErrorReporterContext = createContext<ErrorReporterContextState>({})\n","import { useContext } from 'react'\n\nimport { ErrorReporterContext } from './Context.ts'\n\n/** @deprecated use from @xylabs/react-error instead */\nexport const useErrorReporter = () => {\n const context = useContext(ErrorReporterContext)\n if (context === undefined) {\n console.warn('useErrorReporter must be used within a ErrorReporterContext')\n }\n\n return context ?? {}\n}\n"],"mappings":"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","names":["Typography","FlexCol","React","Component","ErrorBoundary","Component","constructor","props","state","error","undefined","getDerivedStateFromError","componentDidCatch","errorInfo","console","render","fallbackWithError","fallback","FlexCol","Typography","variant","scope","message","children","ThrownErrorBoundary","ThrownErrorBoundaryBase","React","ThrownErrorBoundary","props","React","ThrownErrorBoundaryBase","ExitToApp","ExitIcon","Alert","AlertTitle","Typography","ButtonEx","React","ErrorAlert","title","onCancel","error","errorContext","scope","props","finalScope","React","Alert","severity","AlertTitle","div","Typography","variant","mr","fontWeight","message","ButtonEx","size","onClick","position","style","right","top","ExitIcon","fontSize","FlexCol","React","useEffect","ErrorRender","onCancel","error","noErrorDisplay","customError","children","errorContext","scope","useLocation","props","location","useEffect","state","from","pathname","globalThis","rollbar","React","FlexCol","alignItems","ErrorAlert","useRollbar","React","createContext","ErrorReporterContext","ErrorReporterProvider","children","rollbar","rollbarProp","rollbarFromHook","useRollbar","Error","React","ErrorReporterContext","Provider","value","useContext","useErrorReporter","context","useContext","ErrorReporterContext","undefined","console","warn"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@xyo-network/react-error",
|
3
|
-
"version": "4.1.
|
3
|
+
"version": "4.1.9",
|
4
4
|
"description": "Common React library for all XYO projects that use React",
|
5
5
|
"keywords": [
|
6
6
|
"xyo",
|
@@ -44,10 +44,10 @@
|
|
44
44
|
},
|
45
45
|
"dependencies": {
|
46
46
|
"@rollbar/react": "^0.12.0-beta",
|
47
|
-
"@xylabs/react-button": "^5.2.
|
48
|
-
"@xylabs/react-
|
49
|
-
"@xylabs/react-
|
50
|
-
"@xyo-network/payload-model": "^3.3.
|
47
|
+
"@xylabs/react-button": "^5.2.7",
|
48
|
+
"@xylabs/react-error": "^5.2.7",
|
49
|
+
"@xylabs/react-flexbox": "^5.2.7",
|
50
|
+
"@xyo-network/payload-model": "^3.3.2",
|
51
51
|
"prop-types": "^15.8.1",
|
52
52
|
"react-router-dom": "^6.27.0"
|
53
53
|
},
|
@@ -1,80 +1,10 @@
|
|
1
|
-
import {
|
1
|
+
import type { ThrownErrorBoundaryProps } from '@xylabs/react-error'
|
2
|
+
import { ThrownErrorBoundary as ThrownErrorBoundaryBase } from '@xylabs/react-error'
|
2
3
|
import type { ModuleError } from '@xyo-network/payload-model'
|
3
|
-
import {
|
4
|
-
import
|
5
|
-
ErrorInfo, FC, ReactNode,
|
6
|
-
} from 'react'
|
7
|
-
import React, { Component } from 'react'
|
8
|
-
import type Rollbar from 'rollbar'
|
9
|
-
|
10
|
-
import { useErrorReporter } from '../../contexts/index.ts'
|
11
|
-
import { ErrorRender } from '../ErrorRender/index.ts'
|
12
|
-
|
13
|
-
export interface ThrownErrorBoundaryProps {
|
14
|
-
boundaryName?: string
|
15
|
-
children: ReactNode
|
16
|
-
errorComponent?: (e: ModuleError, boundaryName?: string) => ReactNode
|
17
|
-
rethrow?: boolean
|
18
|
-
rollbar?: Rollbar
|
19
|
-
scope?: string
|
20
|
-
title?: string
|
21
|
-
}
|
22
|
-
|
23
|
-
export interface ThrownErrorBoundaryState {
|
24
|
-
xyoError?: ModuleError
|
25
|
-
}
|
26
|
-
|
27
|
-
class ThrownErrorBoundaryInner extends Component<ThrownErrorBoundaryProps, ThrownErrorBoundaryState> {
|
28
|
-
override state: ThrownErrorBoundaryState = { xyoError: undefined }
|
29
|
-
|
30
|
-
static getDerivedStateFromError(error: Error) {
|
31
|
-
return { hasError: true, xyoError: ThrownErrorBoundaryInner.normalizeError(error) } as ThrownErrorBoundaryState
|
32
|
-
}
|
33
|
-
|
34
|
-
static normalizeError(error: Error | ModuleError): ModuleError {
|
35
|
-
return (
|
36
|
-
(error as ModuleError).schema === ModuleErrorSchema
|
37
|
-
? error
|
38
|
-
: {
|
39
|
-
message: error.message, schema: ModuleErrorSchema, sources: [],
|
40
|
-
}) as ModuleError
|
41
|
-
}
|
42
|
-
|
43
|
-
override componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
44
|
-
const { rethrow, rollbar } = this.props
|
45
|
-
const { xyoError } = this.state
|
46
|
-
|
47
|
-
rollbar?.error(error)
|
48
|
-
|
49
|
-
console.error('Error:', xyoError, errorInfo)
|
50
|
-
if (rethrow) {
|
51
|
-
throw error
|
52
|
-
}
|
53
|
-
}
|
54
|
-
|
55
|
-
override render() {
|
56
|
-
const { xyoError } = this.state
|
57
|
-
const {
|
58
|
-
children, boundaryName, errorComponent, scope, title,
|
59
|
-
} = this.props
|
60
|
-
if (xyoError) {
|
61
|
-
if (errorComponent) {
|
62
|
-
return errorComponent(xyoError)
|
63
|
-
}
|
64
|
-
return <ErrorRender error={xyoError} errorContext={`${boundaryName} Boundary`} scope={scope} title={title} />
|
65
|
-
}
|
66
|
-
|
67
|
-
return children
|
68
|
-
}
|
69
|
-
}
|
4
|
+
import type { FC } from 'react'
|
5
|
+
import React from 'react'
|
70
6
|
|
71
7
|
// calling the hook outside of the component since only can be called in functional component
|
72
|
-
export const ThrownErrorBoundary: FC<ThrownErrorBoundaryProps
|
73
|
-
|
74
|
-
let rollbarFromHook: Rollbar | undefined
|
75
|
-
// safely call the hook
|
76
|
-
try {
|
77
|
-
rollbarFromHook = useRollbar()
|
78
|
-
} catch {}
|
79
|
-
return <ThrownErrorBoundaryInner rollbar={rollbar ?? rollbarErrorReporter ?? rollbarFromHook} {...props} />
|
8
|
+
export const ThrownErrorBoundary: FC<ThrownErrorBoundaryProps<ModuleError>> = (props) => {
|
9
|
+
return <ThrownErrorBoundaryBase<ModuleError> {...props} />
|
80
10
|
}
|
@@ -0,0 +1,77 @@
|
|
1
|
+
import { useRollbar } from '@rollbar/react'
|
2
|
+
import type { ErrorInfo, ReactNode } from 'react'
|
3
|
+
import React, { Component } from 'react'
|
4
|
+
import type Rollbar from 'rollbar'
|
5
|
+
|
6
|
+
import { useErrorReporter } from '../../contexts/index.ts'
|
7
|
+
import { ErrorRender } from '../ErrorRender/index.ts'
|
8
|
+
|
9
|
+
/** @deprecated use from @xylabs/react-error instead */
|
10
|
+
export type ErrorEx<T = void> = T extends void ? Error : T | Error
|
11
|
+
|
12
|
+
/** @deprecated use from @xylabs/react-error instead */
|
13
|
+
export interface ThrownErrorBoundaryProps<T = void> {
|
14
|
+
boundaryName?: string
|
15
|
+
children: ReactNode
|
16
|
+
errorComponent?: (e: ErrorEx<T>, boundaryName?: string) => ReactNode
|
17
|
+
rethrow?: boolean
|
18
|
+
rollbar?: Rollbar
|
19
|
+
scope?: string
|
20
|
+
title?: string
|
21
|
+
}
|
22
|
+
|
23
|
+
/** @deprecated use from @xylabs/react-error instead */
|
24
|
+
export interface ThrownErrorBoundaryState<T = void> {
|
25
|
+
errorEx?: ErrorEx<T>
|
26
|
+
}
|
27
|
+
|
28
|
+
class ThrownErrorBoundaryInner<T> extends Component<ThrownErrorBoundaryProps<T>, ThrownErrorBoundaryState<T>> {
|
29
|
+
override state: ThrownErrorBoundaryState<T> = { errorEx: undefined }
|
30
|
+
|
31
|
+
static getDerivedStateFromError<T = void>(error: ErrorEx<T>) {
|
32
|
+
return { hasError: true, xyoError: this.normalizeError<T>(error) } as ThrownErrorBoundaryState<T>
|
33
|
+
}
|
34
|
+
|
35
|
+
static normalizeError<T>(_error: ErrorEx<T>): T {
|
36
|
+
throw new Error('Method not implemented.')
|
37
|
+
}
|
38
|
+
|
39
|
+
override componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
40
|
+
const { rethrow, rollbar } = this.props
|
41
|
+
const { errorEx } = this.state
|
42
|
+
|
43
|
+
rollbar?.error(error)
|
44
|
+
|
45
|
+
console.error('Error:', errorEx, errorInfo)
|
46
|
+
if (rethrow) {
|
47
|
+
throw error
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
override render() {
|
52
|
+
const { errorEx } = this.state
|
53
|
+
const {
|
54
|
+
children, boundaryName, errorComponent, scope, title,
|
55
|
+
} = this.props
|
56
|
+
if (errorEx) {
|
57
|
+
if (errorComponent) {
|
58
|
+
return errorComponent(errorEx)
|
59
|
+
}
|
60
|
+
return <ErrorRender<T> error={errorEx} errorContext={`${boundaryName} Boundary`} scope={scope} title={title} />
|
61
|
+
}
|
62
|
+
|
63
|
+
return children
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
// calling the hook outside of the component since only can be called in functional component
|
68
|
+
/** @deprecated use from @xylabs/react-error instead */
|
69
|
+
export function ThrownErrorBoundaryBase<T = void>({ rollbar, ...props }: ThrownErrorBoundaryProps<T>): JSX.Element {
|
70
|
+
const { rollbar: rollbarErrorReporter } = useErrorReporter()
|
71
|
+
let rollbarFromHook: Rollbar | undefined
|
72
|
+
// safely call the hook
|
73
|
+
try {
|
74
|
+
rollbarFromHook = useRollbar()
|
75
|
+
} catch {}
|
76
|
+
return <ThrownErrorBoundaryInner<T> rollbar={rollbar ?? rollbarErrorReporter ?? rollbarFromHook} {...props} />
|
77
|
+
}
|
@@ -3,6 +3,7 @@ import { FlexCol } from '@xylabs/react-flexbox'
|
|
3
3
|
import type { ErrorInfo, ReactNode } from 'react'
|
4
4
|
import React, { Component } from 'react'
|
5
5
|
|
6
|
+
/** @deprecated use from @xylabs/react-error instead */
|
6
7
|
export interface ErrorBoundaryProps {
|
7
8
|
children: ReactNode
|
8
9
|
// fallback as a static ReactNode value
|
@@ -12,10 +13,12 @@ export interface ErrorBoundaryProps {
|
|
12
13
|
scope?: string
|
13
14
|
}
|
14
15
|
|
16
|
+
/** @deprecated use from @xylabs/react-error instead */
|
15
17
|
export interface ErrorBoundaryState {
|
16
18
|
error?: Error
|
17
19
|
}
|
18
20
|
|
21
|
+
/** @deprecated use from @xylabs/react-error instead */
|
19
22
|
export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
20
23
|
constructor(props: ErrorBoundaryProps) {
|
21
24
|
super(props)
|
@@ -4,25 +4,24 @@ import {
|
|
4
4
|
Alert, AlertTitle, Typography,
|
5
5
|
} from '@mui/material'
|
6
6
|
import { ButtonEx } from '@xylabs/react-button'
|
7
|
-
import type { ModuleError } from '@xyo-network/payload-model'
|
8
7
|
import React from 'react'
|
9
8
|
|
10
|
-
export interface ErrorAlertProps extends AlertProps {
|
11
|
-
error?:
|
9
|
+
export interface ErrorAlertProps<T = void> extends AlertProps {
|
10
|
+
error?: T | Error | string
|
12
11
|
/** @deprecated use scope instead */
|
13
12
|
errorContext?: string
|
14
13
|
onCancel?: () => void
|
15
14
|
scope?: string
|
16
15
|
}
|
17
16
|
|
18
|
-
export
|
17
|
+
export function ErrorAlert<T = void>({
|
19
18
|
title = 'Whoops! Something went wrong',
|
20
19
|
onCancel,
|
21
20
|
error = 'An unknown error occurred',
|
22
21
|
errorContext,
|
23
22
|
scope,
|
24
23
|
...props
|
25
|
-
})
|
24
|
+
}: ErrorAlertProps<T>): JSX.Element {
|
26
25
|
const finalScope = scope ?? errorContext
|
27
26
|
return (
|
28
27
|
<Alert severity="error" {...props}>
|
@@ -41,7 +40,7 @@ export const ErrorAlert: React.FC<ErrorAlertProps> = ({
|
|
41
40
|
<Typography variant="caption" mr={0.5} fontWeight="bold">
|
42
41
|
Error:
|
43
42
|
</Typography>
|
44
|
-
<Typography variant="caption">{typeof error === 'string' ? error : error?.message}</Typography>
|
43
|
+
<Typography variant="caption">{typeof error === 'string' ? error : (error as Error)?.message}</Typography>
|
45
44
|
</div>
|
46
45
|
{onCancel
|
47
46
|
? (
|
@@ -1,11 +1,12 @@
|
|
1
1
|
import type { FlexBoxProps } from '@xylabs/react-flexbox'
|
2
|
-
import type { ModuleError } from '@xyo-network/payload-model'
|
3
2
|
import type { ReactNode } from 'react'
|
4
3
|
import type { Location } from 'react-router-dom'
|
5
4
|
|
6
|
-
export
|
5
|
+
export type ErrorEx<T = void> = T extends void ? Error : T | Error
|
6
|
+
|
7
|
+
export interface ErrorRenderProps<T = void> extends FlexBoxProps {
|
7
8
|
customError?: ReactNode
|
8
|
-
error?:
|
9
|
+
error?: ErrorEx<T>
|
9
10
|
errorContext?: string
|
10
11
|
noErrorDisplay?: boolean
|
11
12
|
noReAuth?: boolean
|
@@ -4,7 +4,7 @@ import React, { useEffect } from 'react'
|
|
4
4
|
import { ErrorAlert } from './ErrorAlert.tsx'
|
5
5
|
import type { ErrorRenderProps } from './Props.ts'
|
6
6
|
|
7
|
-
export
|
7
|
+
export function ErrorRender<T = void>({
|
8
8
|
onCancel,
|
9
9
|
error,
|
10
10
|
noErrorDisplay = false,
|
@@ -14,7 +14,7 @@ export const ErrorRender: React.FC<ErrorRenderProps> = ({
|
|
14
14
|
scope,
|
15
15
|
useLocation,
|
16
16
|
...props
|
17
|
-
})
|
17
|
+
}: ErrorRenderProps<T>): JSX.Element {
|
18
18
|
const location = useLocation?.()
|
19
19
|
useEffect(() => {
|
20
20
|
if (location) {
|
@@ -1,15 +1,16 @@
|
|
1
1
|
import { useRollbar } from '@rollbar/react'
|
2
|
-
import type {
|
2
|
+
import type { PropsWithChildren } from 'react'
|
3
3
|
import React from 'react'
|
4
4
|
import type Rollbar from 'rollbar'
|
5
5
|
|
6
6
|
import { ErrorReporterContext } from './Context.ts'
|
7
7
|
|
8
|
+
/** @deprecated use from @xylabs/react-error instead */
|
8
9
|
export interface ErrorReporterProviderProps {
|
9
10
|
rollbar: Rollbar
|
10
11
|
}
|
11
|
-
|
12
|
-
const ErrorReporterProvider: React.FC<
|
12
|
+
/** @deprecated use from @xylabs/react-error instead */
|
13
|
+
export const ErrorReporterProvider: React.FC<PropsWithChildren<ErrorReporterProviderProps>> = ({ children, rollbar: rollbarProp }) => {
|
13
14
|
let rollbarFromHook: Rollbar | undefined
|
14
15
|
// safely call the hook
|
15
16
|
try {
|
@@ -25,5 +26,3 @@ const ErrorReporterProvider: React.FC<WithChildren<ErrorReporterProviderProps>>
|
|
25
26
|
// eslint-disable-next-line @eslint-react/no-unstable-context-value
|
26
27
|
return <ErrorReporterContext.Provider value={{ rollbar }}>{children}</ErrorReporterContext.Provider>
|
27
28
|
}
|
28
|
-
|
29
|
-
export { ErrorReporterProvider }
|
@@ -2,6 +2,7 @@ import { useContext } from 'react'
|
|
2
2
|
|
3
3
|
import { ErrorReporterContext } from './Context.ts'
|
4
4
|
|
5
|
+
/** @deprecated use from @xylabs/react-error instead */
|
5
6
|
export const useErrorReporter = () => {
|
6
7
|
const context = useContext(ErrorReporterContext)
|
7
8
|
if (context === undefined) {
|