@xyo-network/react-error 2.38.14 → 2.39.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/cjs/components/XyoErrorBoundary/ThrownErrorBoundary.d.ts +21 -0
  2. package/dist/cjs/components/XyoErrorBoundary/ThrownErrorBoundary.d.ts.map +1 -0
  3. package/dist/cjs/components/XyoErrorBoundary/ThrownErrorBoundary.js +37 -0
  4. package/dist/cjs/components/XyoErrorBoundary/ThrownErrorBoundary.js.map +1 -0
  5. package/dist/cjs/components/XyoErrorBoundary/index.d.ts +2 -0
  6. package/dist/cjs/components/XyoErrorBoundary/index.d.ts.map +1 -0
  7. package/dist/cjs/components/XyoErrorBoundary/index.js +5 -0
  8. package/dist/cjs/components/XyoErrorBoundary/index.js.map +1 -0
  9. package/dist/cjs/components/index.d.ts +1 -0
  10. package/dist/cjs/components/index.d.ts.map +1 -1
  11. package/dist/cjs/components/index.js +1 -0
  12. package/dist/cjs/components/index.js.map +1 -1
  13. package/dist/cjs/contexts/ErrorReporter/Context.d.ts +4 -0
  14. package/dist/cjs/contexts/ErrorReporter/Context.d.ts.map +1 -0
  15. package/dist/cjs/contexts/ErrorReporter/Context.js +6 -0
  16. package/dist/cjs/contexts/ErrorReporter/Context.js.map +1 -0
  17. package/dist/cjs/contexts/ErrorReporter/Provider.d.ts +9 -0
  18. package/dist/cjs/contexts/ErrorReporter/Provider.d.ts.map +1 -0
  19. package/dist/cjs/contexts/ErrorReporter/Provider.js +17 -0
  20. package/dist/cjs/contexts/ErrorReporter/Provider.js.map +1 -0
  21. package/dist/cjs/contexts/ErrorReporter/State.d.ts +5 -0
  22. package/dist/cjs/contexts/ErrorReporter/State.d.ts.map +1 -0
  23. package/dist/cjs/contexts/ErrorReporter/State.js +3 -0
  24. package/dist/cjs/contexts/ErrorReporter/State.js.map +1 -0
  25. package/dist/cjs/contexts/ErrorReporter/index.d.ts +4 -0
  26. package/dist/cjs/contexts/ErrorReporter/index.d.ts.map +1 -0
  27. package/dist/cjs/contexts/ErrorReporter/index.js +7 -0
  28. package/dist/cjs/contexts/ErrorReporter/index.js.map +1 -0
  29. package/dist/cjs/contexts/ErrorReporter/useRollbar.d.ts +3 -0
  30. package/dist/cjs/contexts/ErrorReporter/useRollbar.d.ts.map +1 -0
  31. package/dist/cjs/contexts/ErrorReporter/useRollbar.js +14 -0
  32. package/dist/cjs/contexts/ErrorReporter/useRollbar.js.map +1 -0
  33. package/dist/cjs/contexts/index.d.ts +2 -0
  34. package/dist/cjs/contexts/index.d.ts.map +1 -0
  35. package/dist/cjs/contexts/index.js +5 -0
  36. package/dist/cjs/contexts/index.js.map +1 -0
  37. package/dist/cjs/index.d.ts +1 -0
  38. package/dist/cjs/index.d.ts.map +1 -1
  39. package/dist/cjs/index.js +1 -0
  40. package/dist/cjs/index.js.map +1 -1
  41. package/dist/docs.json +1471 -512
  42. package/dist/esm/components/XyoErrorBoundary/ThrownErrorBoundary.d.ts +21 -0
  43. package/dist/esm/components/XyoErrorBoundary/ThrownErrorBoundary.d.ts.map +1 -0
  44. package/dist/esm/components/XyoErrorBoundary/ThrownErrorBoundary.js +30 -0
  45. package/dist/esm/components/XyoErrorBoundary/ThrownErrorBoundary.js.map +1 -0
  46. package/dist/esm/components/XyoErrorBoundary/index.d.ts +2 -0
  47. package/dist/esm/components/XyoErrorBoundary/index.d.ts.map +1 -0
  48. package/dist/esm/components/XyoErrorBoundary/index.js +2 -0
  49. package/dist/esm/components/XyoErrorBoundary/index.js.map +1 -0
  50. package/dist/esm/components/index.d.ts +1 -0
  51. package/dist/esm/components/index.d.ts.map +1 -1
  52. package/dist/esm/components/index.js +1 -0
  53. package/dist/esm/components/index.js.map +1 -1
  54. package/dist/esm/contexts/ErrorReporter/Context.d.ts +4 -0
  55. package/dist/esm/contexts/ErrorReporter/Context.d.ts.map +1 -0
  56. package/dist/esm/contexts/ErrorReporter/Context.js +3 -0
  57. package/dist/esm/contexts/ErrorReporter/Context.js.map +1 -0
  58. package/dist/esm/contexts/ErrorReporter/Provider.d.ts +9 -0
  59. package/dist/esm/contexts/ErrorReporter/Provider.d.ts.map +1 -0
  60. package/dist/esm/contexts/ErrorReporter/Provider.js +14 -0
  61. package/dist/esm/contexts/ErrorReporter/Provider.js.map +1 -0
  62. package/dist/esm/contexts/ErrorReporter/State.d.ts +5 -0
  63. package/dist/esm/contexts/ErrorReporter/State.d.ts.map +1 -0
  64. package/dist/esm/contexts/ErrorReporter/State.js +2 -0
  65. package/dist/esm/contexts/ErrorReporter/State.js.map +1 -0
  66. package/dist/esm/contexts/ErrorReporter/index.d.ts +4 -0
  67. package/dist/esm/contexts/ErrorReporter/index.d.ts.map +1 -0
  68. package/dist/esm/contexts/ErrorReporter/index.js +4 -0
  69. package/dist/esm/contexts/ErrorReporter/index.js.map +1 -0
  70. package/dist/esm/contexts/ErrorReporter/useRollbar.d.ts +3 -0
  71. package/dist/esm/contexts/ErrorReporter/useRollbar.d.ts.map +1 -0
  72. package/dist/esm/contexts/ErrorReporter/useRollbar.js +11 -0
  73. package/dist/esm/contexts/ErrorReporter/useRollbar.js.map +1 -0
  74. package/dist/esm/contexts/index.d.ts +2 -0
  75. package/dist/esm/contexts/index.d.ts.map +1 -0
  76. package/dist/esm/contexts/index.js +2 -0
  77. package/dist/esm/contexts/index.js.map +1 -0
  78. package/dist/esm/index.d.ts +1 -0
  79. package/dist/esm/index.d.ts.map +1 -1
  80. package/dist/esm/index.js +1 -0
  81. package/dist/esm/index.js.map +1 -1
  82. package/package.json +13 -7
  83. package/src/components/XyoErrorBoundary/ThrownErrorBoundary.stories.tsx +83 -0
  84. package/src/components/XyoErrorBoundary/ThrownErrorBoundary.tsx +50 -0
  85. package/src/components/XyoErrorBoundary/index.ts +1 -0
  86. package/src/components/index.ts +1 -0
  87. package/src/contexts/ErrorReporter/Context.ts +5 -0
  88. package/src/contexts/ErrorReporter/Provider.stories.tsx +40 -0
  89. package/src/contexts/ErrorReporter/Provider.tsx +23 -0
  90. package/src/contexts/ErrorReporter/State.ts +5 -0
  91. package/src/contexts/ErrorReporter/index.ts +3 -0
  92. package/src/contexts/ErrorReporter/useRollbar.tsx +14 -0
  93. package/src/contexts/index.ts +1 -0
  94. package/src/index.ts +1 -0
  95. package/src/components/XyoErrorRender/Render.stories.tsx +0 -152
@@ -0,0 +1,21 @@
1
+ import { BasePageProps } from '@xylabs/react-common';
2
+ import { XyoError } from '@xyo-network/module';
3
+ import { Component, ErrorInfo, ReactNode } from 'react';
4
+ import Rollbar from 'rollbar';
5
+ export interface XyoErrorBoundaryProps {
6
+ rethrow?: boolean;
7
+ children: ReactNode;
8
+ rollbar?: Rollbar;
9
+ basePageProps?: BasePageProps;
10
+ errorComponent?: (e: Error) => ReactNode;
11
+ }
12
+ export interface XyoErrorBoundaryState {
13
+ xyoError?: XyoError;
14
+ }
15
+ export declare class XyoThrownErrorBoundary extends Component<XyoErrorBoundaryProps, XyoErrorBoundaryState> {
16
+ state: XyoErrorBoundaryState;
17
+ static normalizeError(error: Error | XyoError): XyoError;
18
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
19
+ render(): string | number | boolean | import("react").ReactFragment | JSX.Element | null | undefined;
20
+ }
21
+ //# sourceMappingURL=ThrownErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThrownErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/components/XyoErrorBoundary/ThrownErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,SAAS,CAAA;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,qBAAa,sBAAuB,SAAQ,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC1F,KAAK,EAAE,qBAAqB,CAElC;WAEa,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ;IAIxD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAYpD,MAAM;CASd"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { XyoErrorSchema } from '@xyo-network/module';
3
+ import { Component } from 'react';
4
+ import { XyoErrorRender } from '../XyoErrorRender';
5
+ export class XyoThrownErrorBoundary extends Component {
6
+ state = {
7
+ xyoError: undefined,
8
+ };
9
+ static normalizeError(error) {
10
+ return (error.schema === XyoErrorSchema ? error : { message: error.message, schema: XyoErrorSchema, sources: [] });
11
+ }
12
+ componentDidCatch(error, errorInfo) {
13
+ const { rethrow, rollbar } = this.props;
14
+ const xyoError = XyoThrownErrorBoundary.normalizeError(error);
15
+ rollbar?.error(error);
16
+ console.error('XyoError:', xyoError, errorInfo);
17
+ if (rethrow) {
18
+ throw error;
19
+ }
20
+ }
21
+ render() {
22
+ const { xyoError } = this.state;
23
+ const { children } = this.props;
24
+ if (xyoError) {
25
+ return _jsx(XyoErrorRender, { xyoError: xyoError });
26
+ }
27
+ return children;
28
+ }
29
+ }
30
+ //# sourceMappingURL=ThrownErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThrownErrorBoundary.js","sourceRoot":"","sources":["../../../../src/components/XyoErrorBoundary/ThrownErrorBoundary.tsx"],"names":[],"mappings":";AACA,OAAO,EAAY,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAA;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAclD,MAAM,OAAO,sBAAuB,SAAQ,SAAuD;IAC1F,KAAK,GAA0B;QACpC,QAAQ,EAAE,SAAS;KACpB,CAAA;IAEM,MAAM,CAAC,cAAc,CAAC,KAAuB;QAClD,OAAO,CAAE,KAAkB,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,CAAa,CAAA;IAC9I,CAAC;IAEM,iBAAiB,CAAC,KAAY,EAAE,SAAoB;QACzD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QACvC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAE7D,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAErB,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC/C,IAAI,OAAO,EAAE;YACX,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;IAEM,MAAM;QACX,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC/B,IAAI,QAAQ,EAAE;YACZ,OAAO,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAA;SAC9C;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from './ThrownErrorBoundary';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/XyoErrorBoundary/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './ThrownErrorBoundary';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/XyoErrorBoundary/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
@@ -1,2 +1,3 @@
1
+ export * from './XyoErrorBoundary';
1
2
  export * from './XyoErrorRender';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
@@ -1,2 +1,3 @@
1
+ export * from './XyoErrorBoundary';
1
2
  export * from './XyoErrorRender';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { ErrorReporterContextState } from './State';
3
+ export declare const ErrorReporterContext: import("react").Context<ErrorReporterContextState>;
4
+ //# sourceMappingURL=Context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Context.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAEnD,eAAO,MAAM,oBAAoB,oDAA+C,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { createContext } from 'react';
2
+ export const ErrorReporterContext = createContext({});
3
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAIrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAA4B,EAAE,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { WithChildren } from '@xylabs/react-shared';
3
+ import Rollbar from 'rollbar';
4
+ export interface ErrorReporterProviderProps {
5
+ rollbar: Rollbar;
6
+ }
7
+ declare const ErrorReporterProvider: React.FC<WithChildren<ErrorReporterProviderProps>>;
8
+ export { ErrorReporterProvider };
9
+ //# sourceMappingURL=Provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,QAAA,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAU7E,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { ErrorReporterContext } from './Context';
4
+ const ErrorReporterProvider = ({ children, rollbar }) => {
5
+ const [rollbarInstance, setRollBarInstance] = useState();
6
+ useEffect(() => {
7
+ if (rollbarInstance) {
8
+ setRollBarInstance(rollbarInstance);
9
+ }
10
+ }, [rollbar, rollbarInstance]);
11
+ return _jsx(ErrorReporterContext.Provider, { value: { rollbar }, children: children });
12
+ };
13
+ export { ErrorReporterProvider };
14
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/Provider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMhD,MAAM,qBAAqB,GAAuD,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IAC1G,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,EAAW,CAAA;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,eAAe,EAAE;YACnB,kBAAkB,CAAC,eAAe,CAAC,CAAA;SACpC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAA;IAE9B,OAAO,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,YAAG,QAAQ,GAAiC,CAAA;AACtG,CAAC,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ import Rollbar from 'rollbar';
2
+ export interface ErrorReporterContextState {
3
+ rollbar?: Rollbar;
4
+ }
5
+ //# sourceMappingURL=State.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/State.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=State.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.js","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/State.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './Provider';
2
+ export * from './State';
3
+ export * from './useRollbar';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './Provider';
2
+ export * from './State';
3
+ export * from './useRollbar';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ declare const useRollbar: () => import("./State").ErrorReporterContextState;
2
+ export { useRollbar };
3
+ //# sourceMappingURL=useRollbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRollbar.d.ts","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/useRollbar.tsx"],"names":[],"mappings":"AAIA,QAAA,MAAM,UAAU,mDAOf,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { useContext } from 'react';
2
+ import { ErrorReporterContext } from './Context';
3
+ const useRollbar = () => {
4
+ const context = useContext(ErrorReporterContext);
5
+ if (context === undefined) {
6
+ console.warn('useRollbar must be used within a ErrorReporterContext');
7
+ }
8
+ return context ?? {};
9
+ };
10
+ export { useRollbar };
11
+ //# sourceMappingURL=useRollbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRollbar.js","sourceRoot":"","sources":["../../../../src/contexts/ErrorReporter/useRollbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;IAChD,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;KACtE;IAED,OAAO,OAAO,IAAI,EAAE,CAAA;AACtB,CAAC,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './ErrorReporter';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './ErrorReporter';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
@@ -1,2 +1,3 @@
1
1
  export * from './components';
2
+ export * from './contexts';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './components';
2
+ export * from './contexts';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
package/package.json CHANGED
@@ -10,21 +10,26 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/react-flexbox": "^2.15.1",
14
13
  "tslib": "^2.4.0"
15
14
  },
16
15
  "peerDependencies": {
17
16
  "@mui/material": "^5.10.3",
18
- "lodash": "^4.17.21",
17
+ "@xylabs/react-common": "^2.15.1",
18
+ "@xylabs/react-flexbox": "^2.15.1",
19
+ "@xylabs/react-shared": "^2.15.1",
20
+ "@xyo-network/module": "*",
19
21
  "pako": "^2.0.4",
20
22
  "react": "^18.2.0",
21
23
  "react-dom": "^18.2.0",
22
- "react-router-dom": "^6.3.0"
24
+ "react-router-dom": "^6.3.0",
25
+ "rollbar": "^2.25.2"
23
26
  },
24
- "description": "Common React library for all XYO projects that use React",
25
- "devDependencies": {
26
- "@xyo-network/module": "^2.38.23"
27
+ "peerDependenciesMeta": {
28
+ "rollbar": {
29
+ "optional": true
30
+ }
27
31
  },
32
+ "description": "Common React library for all XYO projects that use React",
28
33
  "browser": "dist/esm/index.js",
29
34
  "docs": "dist/docs.json",
30
35
  "exports": {
@@ -67,5 +72,6 @@
67
72
  },
68
73
  "sideEffects": false,
69
74
  "types": "dist/esm/index.d.ts",
70
- "version": "2.38.14"
75
+ "version": "2.39.0-rc.1",
76
+ "stableVersion": "2.38.15"
71
77
  }
@@ -0,0 +1,83 @@
1
+ /* eslint-disable import/no-internal-modules */
2
+ import { Alert, Paper, TextField } from '@mui/material'
3
+ import { ComponentStory, Meta } from '@storybook/react'
4
+ import { BasePageProps } from '@xylabs/react-common'
5
+ import { FlexCol } from '@xylabs/react-flexbox'
6
+ import { ApiProvider, ArchivesProvider } from '@xyo-network/react-api'
7
+ import { ApplicationAppBar, SystemToolbar } from '@xyo-network/react-appbar'
8
+ import { Footer } from '@xyo-network/react-footer'
9
+ import { NetworkMemoryProvider } from '@xyo-network/react-network'
10
+ import { BrowserRouter } from 'react-router-dom'
11
+
12
+ import { XyoThrownErrorBoundary } from './ThrownErrorBoundary'
13
+
14
+ const basePageProps: BasePageProps = {
15
+ appBar: (
16
+ <ApplicationAppBar
17
+ systemToolbar={
18
+ <SystemToolbar
19
+ style={{ paddingLeft: 8, paddingRight: 8 }}
20
+ disableGutters
21
+ archiveSelectProps={{
22
+ sx: { display: 'none' },
23
+ }}
24
+ sx={{ flexWrap: 'wrap-reverse', justifyContent: 'end' }}
25
+ darkModeButton
26
+ authButton
27
+ />
28
+ }
29
+ >
30
+ <TextField fullWidth size="small" />
31
+ </ApplicationAppBar>
32
+ ),
33
+ appFooter: (
34
+ <FlexCol alignItems="stretch">
35
+ <Paper elevation={8}>
36
+ <Footer width="100%" />
37
+ </Paper>
38
+ </FlexCol>
39
+ ),
40
+ title: 'Page Title',
41
+ }
42
+
43
+ const StorybookEntry: Meta = {
44
+ args: {
45
+ basePageProps,
46
+ },
47
+ component: XyoThrownErrorBoundary,
48
+ parameters: {
49
+ docs: {
50
+ page: null,
51
+ },
52
+ },
53
+ title: 'auth-service/XyoApiBoundary/ThrownErrorBoundary',
54
+ }
55
+
56
+ const Template: ComponentStory<typeof XyoThrownErrorBoundary> = ({ basePageProps, errorComponent }) => {
57
+ return (
58
+ <BrowserRouter>
59
+ <NetworkMemoryProvider>
60
+ <ApiProvider apiDomain="http://localhost:8080">
61
+ <ArchivesProvider>
62
+ <XyoThrownErrorBoundary basePageProps={basePageProps} errorComponent={errorComponent}>
63
+ <Alert severity="info">Use React Dev Tools to trigger and error within the boundary</Alert>
64
+ </XyoThrownErrorBoundary>
65
+ </ArchivesProvider>
66
+ </ApiProvider>
67
+ </NetworkMemoryProvider>
68
+ </BrowserRouter>
69
+ )
70
+ }
71
+
72
+ const Default = Template.bind({})
73
+ Default.args = {}
74
+
75
+ const CustomErrorComponent = Template.bind({})
76
+ CustomErrorComponent.args = {
77
+ errorComponent: (e) => <Alert severity="error">Using Custom Error Component with error: {e.message}</Alert>,
78
+ }
79
+
80
+ export { CustomErrorComponent, Default }
81
+
82
+ // eslint-disable-next-line import/no-default-export
83
+ export default StorybookEntry
@@ -0,0 +1,50 @@
1
+ import { BasePageProps } from '@xylabs/react-common'
2
+ import { XyoError, XyoErrorSchema } from '@xyo-network/module'
3
+ import { Component, ErrorInfo, ReactNode } from 'react'
4
+ import Rollbar from 'rollbar'
5
+
6
+ import { XyoErrorRender } from '../XyoErrorRender'
7
+
8
+ export interface XyoErrorBoundaryProps {
9
+ rethrow?: boolean
10
+ children: ReactNode
11
+ rollbar?: Rollbar
12
+ basePageProps?: BasePageProps
13
+ errorComponent?: (e: Error) => ReactNode
14
+ }
15
+
16
+ export interface XyoErrorBoundaryState {
17
+ xyoError?: XyoError
18
+ }
19
+
20
+ export class XyoThrownErrorBoundary extends Component<XyoErrorBoundaryProps, XyoErrorBoundaryState> {
21
+ public state: XyoErrorBoundaryState = {
22
+ xyoError: undefined,
23
+ }
24
+
25
+ public static normalizeError(error: Error | XyoError): XyoError {
26
+ return ((error as XyoError).schema === XyoErrorSchema ? error : { message: error.message, schema: XyoErrorSchema, sources: [] }) as XyoError
27
+ }
28
+
29
+ public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
30
+ const { rethrow, rollbar } = this.props
31
+ const xyoError = XyoThrownErrorBoundary.normalizeError(error)
32
+
33
+ rollbar?.error(error)
34
+
35
+ console.error('XyoError:', xyoError, errorInfo)
36
+ if (rethrow) {
37
+ throw error
38
+ }
39
+ }
40
+
41
+ public render() {
42
+ const { xyoError } = this.state
43
+ const { children } = this.props
44
+ if (xyoError) {
45
+ return <XyoErrorRender xyoError={xyoError} />
46
+ }
47
+
48
+ return children
49
+ }
50
+ }
@@ -0,0 +1 @@
1
+ export * from './ThrownErrorBoundary'
@@ -1 +1,2 @@
1
+ export * from './XyoErrorBoundary'
1
2
  export * from './XyoErrorRender'
@@ -0,0 +1,5 @@
1
+ import { createContext } from 'react'
2
+
3
+ import { ErrorReporterContextState } from './State'
4
+
5
+ export const ErrorReporterContext = createContext<ErrorReporterContextState>({})
@@ -0,0 +1,40 @@
1
+ import { Typography } from '@mui/material'
2
+ import { ComponentMeta, ComponentStory } from '@storybook/react'
3
+ import Rollbar from 'rollbar'
4
+
5
+ import { ErrorReporterProvider } from './Provider'
6
+ import { useRollbar } from './useRollbar'
7
+
8
+ const StorybookEntry = {
9
+ argTypes: {},
10
+ component: ErrorReporterProvider,
11
+ parameters: {
12
+ docs: {
13
+ page: null,
14
+ },
15
+ },
16
+ title: 'auth-service/ErrorReporterProvider',
17
+ } as ComponentMeta<typeof ErrorReporterProvider>
18
+
19
+ const RollbarComponent = () => {
20
+ const { rollbar } = useRollbar()
21
+ const rollbarFound = typeof rollbar?.error === 'function'
22
+
23
+ return <Typography color={rollbarFound ? 'green' : 'red'}>Rollbar instance {rollbarFound ? '' : 'NOT'} found from context!</Typography>
24
+ }
25
+
26
+ const Template: ComponentStory<typeof ErrorReporterProvider> = () => {
27
+ const rollbar = new Rollbar()
28
+ return (
29
+ <ErrorReporterProvider rollbar={rollbar}>
30
+ <RollbarComponent />
31
+ </ErrorReporterProvider>
32
+ )
33
+ }
34
+
35
+ const Default = Template.bind({})
36
+
37
+ export { Default }
38
+
39
+ // eslint-disable-next-line import/no-default-export
40
+ export default StorybookEntry
@@ -0,0 +1,23 @@
1
+ import { WithChildren } from '@xylabs/react-shared'
2
+ import { useEffect, useState } from 'react'
3
+ import Rollbar from 'rollbar'
4
+
5
+ import { ErrorReporterContext } from './Context'
6
+
7
+ export interface ErrorReporterProviderProps {
8
+ rollbar: Rollbar
9
+ }
10
+
11
+ const ErrorReporterProvider: React.FC<WithChildren<ErrorReporterProviderProps>> = ({ children, rollbar }) => {
12
+ const [rollbarInstance, setRollBarInstance] = useState<Rollbar>()
13
+
14
+ useEffect(() => {
15
+ if (rollbarInstance) {
16
+ setRollBarInstance(rollbarInstance)
17
+ }
18
+ }, [rollbar, rollbarInstance])
19
+
20
+ return <ErrorReporterContext.Provider value={{ rollbar }}>{children}</ErrorReporterContext.Provider>
21
+ }
22
+
23
+ export { ErrorReporterProvider }
@@ -0,0 +1,5 @@
1
+ import Rollbar from 'rollbar'
2
+
3
+ export interface ErrorReporterContextState {
4
+ rollbar?: Rollbar
5
+ }
@@ -0,0 +1,3 @@
1
+ export * from './Provider'
2
+ export * from './State'
3
+ export * from './useRollbar'
@@ -0,0 +1,14 @@
1
+ import { useContext } from 'react'
2
+
3
+ import { ErrorReporterContext } from './Context'
4
+
5
+ const useRollbar = () => {
6
+ const context = useContext(ErrorReporterContext)
7
+ if (context === undefined) {
8
+ console.warn('useRollbar must be used within a ErrorReporterContext')
9
+ }
10
+
11
+ return context ?? {}
12
+ }
13
+
14
+ export { useRollbar }
@@ -0,0 +1 @@
1
+ export * from './ErrorReporter'
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './components'
2
+ export * from './contexts'