diff --git a/astro.config.mjs b/astro.config.mjs index 85f0261..8d39646 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -17,7 +17,7 @@ export default defineConfig({ integrations: [ react({ - exclude: ["**/page-react-timings/*", "**/page-react-extension/*"], + exclude: ["**/page-react-timings/*", "**/page-react-extension/**"], }), starlight({ diff --git a/src/components/experiments/page-react-extension/npm-18-legacy/App.js b/src/components/experiments/page-react-extension/npm-18-legacy/App.js index b696613..22eff65 100644 --- a/src/components/experiments/page-react-extension/npm-18-legacy/App.js +++ b/src/components/experiments/page-react-extension/npm-18-legacy/App.js @@ -1,6 +1,7 @@ import * as React from "react-18"; // import { getFiberStack, getDisplayName, type Fiber } from "bippy"; import { getFiberData, getFiberFromElement } from "./fiber"; +import { getErrorStackFromInfo } from "./error"; // Can't use JSX as it will collide with Astro rendering @@ -17,16 +18,24 @@ class ErrorBoundary extends React.Component { return { hasError: true }; } - // componentDidCatch(error: Error, info: React.ErrorInfo) { - // // console.log("componentDidCatch", { error, info, this: this }); - // } + componentDidCatch(error, errorInfo) { + console.log("componentDidCatch", { + errorStack: getErrorStackFromInfo(errorInfo), + error, + }); + } render() { if (this.state.hasError) { return this.props.fallback || null; } - return this.props.children; + return React.createElement( + "fieldset", + { style: { display: "inline", border: "1px solid red" } }, + React.createElement("legend", null, "Error Boundary"), + this.props.children, + ); } } @@ -111,16 +120,13 @@ const Bar = () => { null, React.createElement(ErrorThrowerOnClick), React.createElement(ErrorThrowerOnRender), + React.createElement(ErrorThrowerOnEffect), React.createElement( ErrorBoundary, null, - React.createElement( - "fieldset", - { style: { display: "inline", border: "1px solid red" } }, - React.createElement("legend", null, "Error Boundary"), - React.createElement(ErrorThrowerOnRender), - React.createElement(ErrorThrowerOnEffect), - ), + React.createElement(ErrorThrowerOnClick), + React.createElement(ErrorThrowerOnRender), + React.createElement(ErrorThrowerOnEffect), ), ); }; diff --git a/src/components/experiments/page-react-extension/npm/App.tsx b/src/components/experiments/page-react-extension/npm/App.tsx index 9df112e..85b6f71 100644 --- a/src/components/experiments/page-react-extension/npm/App.tsx +++ b/src/components/experiments/page-react-extension/npm/App.tsx @@ -1,6 +1,7 @@ import * as React from "react"; // import { getFiberStack, getDisplayName, type Fiber } from "bippy"; import { getFiberData, getFiberFromElement } from "./fiber"; +import { getErrorStackFromInfo } from "./error"; class ErrorBoundary extends React.Component< React.PropsWithChildren<{ fallback?: React.ReactNode }>, @@ -18,16 +19,24 @@ class ErrorBoundary extends React.Component< return { hasError: true }; } - // override componentDidCatch(error: Error, info: React.ErrorInfo) { - // // console.log("componentDidCatch", { error, info, this: this }); - // } + override componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { + console.log("componentDidCatch", { + errorStack: getErrorStackFromInfo(errorInfo), + error, + }); + } override render() { if (this.state.hasError) { return this.props.fallback || null; } - return this.props.children; + return ( +
+ Error Boundary + {this.props.children} +
+ ); } } @@ -110,15 +119,13 @@ const Bar = () => { return ( - + -
- Error Boundary - - -
+ + +
);