@tanstack/react-router
Version:
Modern and scalable routing for React applications
1 lines • 4.66 kB
Source Map (JSON)
{"version":3,"file":"CatchBoundary.cjs","names":["React","wrapInNonRouteComponentContext"],"sources":["../../src/CatchBoundary.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { wrapInNonRouteComponentContext } from './nonRouteComponentContext'\nimport type { ErrorRouteComponent } from './route'\nimport type { ErrorInfo } from 'react'\n\nexport class CatchBoundary extends React.Component<{\n getResetKey: () => unknown\n children: React.ReactNode\n errorComponent?: ErrorRouteComponent\n onCatch?: (error: unknown, errorInfo: ErrorInfo) => void\n}> {\n // Wrapping caught values keeps every possible thrown value truthy.\n state = { error: 0 } as { error: [unknown] | 0; resetKey?: unknown }\n\n static getDerivedStateFromProps(\n props: { getResetKey: () => unknown },\n state: { resetKey?: unknown; error: [unknown] | 0 },\n ) {\n const resetKey = props.getResetKey()\n\n if (state.error && state.resetKey !== resetKey) {\n return { resetKey, error: 0 }\n }\n\n return { resetKey }\n }\n static getDerivedStateFromError(error: unknown) {\n return { error: [error] }\n }\n reset = () => {\n this.setState({ error: 0 })\n }\n componentDidCatch(error: unknown, errorInfo: ErrorInfo) {\n this.props.onCatch?.(error, errorInfo)\n }\n render() {\n const error = this.state.error\n if (error) {\n const element = React.createElement(\n this.props.errorComponent ?? ErrorComponent,\n {\n error: error[0],\n reset: this.reset,\n },\n )\n\n return process.env.NODE_ENV !== 'production'\n ? wrapInNonRouteComponentContext(element, 'errorComponent')\n : element\n }\n\n return this.props.children\n }\n}\n\nexport function ErrorComponent({ error }: { error: unknown }) {\n const [show, setShow] = React.useState(process.env.NODE_ENV !== 'production')\n\n return (\n <div style={{ padding: '.5rem', maxWidth: '100%' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '.5rem' }}>\n <strong style={{ fontSize: '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n fontSize: '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n }}\n onClick={() => setShow((d) => !d)}\n >\n {show ? 'Hide Error' : 'Show Error'}\n </button>\n </div>\n <div style={{ height: '.25rem' }} />\n {show ? (\n <div>\n <pre\n style={{\n fontSize: '.7em',\n border: '1px solid red',\n borderRadius: '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {(error as { message?: string } | null)?.message ? (\n <code>{(error as { message: string }).message}</code>\n ) : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n"],"mappings":";;;;;;;AAOA,IAAa,gBAAb,cAAmCA,MAAM,UAKtC;;;EAEO,KAAA,QAAA,EAAE,OAAO,EAAE;EAiBL,KAAA,cAAA;GACZ,KAAK,SAAS,EAAE,OAAO,EAAE,CAAC;EAC5B;;CAjBA,OAAO,yBACL,OACA,OACA;EACA,MAAM,WAAW,MAAM,YAAY;EAEnC,IAAI,MAAM,SAAS,MAAM,aAAa,UACpC,OAAO;GAAE;GAAU,OAAO;EAAE;EAG9B,OAAO,EAAE,SAAS;CACpB;CACA,OAAO,yBAAyB,OAAgB;EAC9C,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;CAC1B;CAIA,kBAAkB,OAAgB,WAAsB;EACtD,KAAK,MAAM,UAAU,OAAO,SAAS;CACvC;CACA,SAAS;EACP,MAAM,QAAQ,KAAK,MAAM;EACzB,IAAI,OAAO;GACT,MAAM,UAAUA,MAAM,cACpB,KAAK,MAAM,kBAAkB,gBAC7B;IACE,OAAO,MAAM;IACb,OAAO,KAAK;GACd,CACF;GAEA,OAAA,QAAA,IAAA,aAAgC,eAC5BC,iCAAAA,+BAA+B,SAAS,gBAAgB,IACxD;EACN;EAEA,OAAO,KAAK,MAAM;CACpB;AACF;AAEA,SAAgB,eAAe,EAAE,SAA6B;CAC5D,MAAM,CAAC,MAAM,WAAWD,MAAM,SAAA,QAAA,IAAA,aAAkC,YAAY;CAE5E,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAS,UAAU;EAAO;EAAjD,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,OAAO;KAAE,SAAS;KAAQ,YAAY;KAAU,KAAK;IAAQ;IAAlE,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,OAAO,EAAE,UAAU,OAAO;KAAG,UAAA;IAA6B,CAAA,GAClE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KACE,OAAO;MACL,YAAY;MACZ,UAAU;MACV,QAAQ;MACR,SAAS;MACT,YAAY;MACZ,cAAc;KAChB;KACA,eAAe,SAAS,MAAM,CAAC,CAAC;KAE/B,UAAA,OAAO,eAAe;IACjB,CAAA,CACL;;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,QAAQ,SAAS,EAAI,CAAA;GAClC,OACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IACE,OAAO;KACL,UAAU;KACV,QAAQ;KACR,cAAc;KACd,SAAS;KACT,OAAO;KACP,UAAU;IACZ;IAEE,UAAA,OAAuC,UACvC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAQ,MAA8B,QAAc,CAAA,IAClD;GACD,CAAA,EACF,CAAA,IACH;EACD;;AAET"}