UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

1 lines 8.65 kB
{"version":3,"file":"CatchBoundary.cjs","names":["<Solid.Errored\n fallback={(error, reset) => {\n const resolvedError = Solid.untrack(() => error() as Error)\n\n props.onCatch?.(resolvedError)\n resetBoundary = reset\n\n return process.env.NODE_ENV !== 'production' ? (\n renderInNonRouteComponentContext(\n () => (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />\n ),\n 'errorComponent',\n )\n ) : (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />\n )\n }}\n >\n <Solid.Show when={retryKey()} keyed>\n {(_retryKey) => props.render?.() ?? props.children}\n </Solid.Show>\n </Solid.Errored>","Solid.Errored","fallback={(error, reset) => {\n const resolvedError = Solid.untrack(() => error() as Error)\n\n props.onCatch?.(resolvedError)\n resetBoundary = reset\n\n return process.env.NODE_ENV !== 'production' ? (\n renderInNonRouteComponentContext(\n () => (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />\n ),\n 'errorComponent',\n )\n ) : (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />\n )\n }}","<Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />","error={resolvedError}","<Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />","<Solid.Show when={retryKey()} keyed>\n {(_retryKey) => props.render?.() ?? props.children}\n </Solid.Show>","Solid.Show","<strong style={{ 'font-size': '1rem' }}>Something went wrong!</strong>","<div style={{ height: '.25rem' }} />","<div style={{ padding: '.5rem', 'max-width': '100%' }}>\n <div style={{ display: 'flex', 'align-items': 'center', gap: '.5rem' }}>\n <strong style={{ 'font-size': '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n 'font-size': '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n 'font-weight': 'bold',\n 'border-radius': '.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 'font-size': '.7em',\n border: '1px solid red',\n 'border-radius': '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>"],"sources":["../../src/CatchBoundary.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { Dynamic } from '@solidjs/web'\nimport { renderInNonRouteComponentContext } from './nonRouteComponentContext'\nimport type { ErrorRouteComponent } from './route'\nimport type { JSX } from '@solidjs/web'\n\nexport function CatchBoundary(\n props: {\n getResetKey: () => unknown\n children?: JSX.Element\n render?: () => JSX.Element\n errorComponent?: ErrorRouteComponent\n onCatch?: (error: Error) => void\n } & Solid.ParentProps,\n) {\n const [retryKey, setRetryKey] = Solid.createSignal<object>({})\n let resetBoundary: (() => void) | undefined\n let initialized = false\n let previousKey: unknown\n\n Solid.onCleanup(() => {\n resetBoundary = undefined\n })\n\n Solid.createEffect(props.getResetKey, (key) => {\n if (!initialized) {\n initialized = true\n previousKey = key\n return\n }\n\n // The effect re-runs on every recompute of the key function, not only\n // on value changes — gate on the value so an unchanged key can't\n // recreate the retried subtree while it settles.\n if (key === previousKey) {\n return\n }\n previousKey = key\n\n const reset = resetBoundary\n if (reset) {\n queueMicrotask(() => {\n if (resetBoundary !== reset) {\n return\n }\n setRetryKey({})\n reset()\n Solid.flush()\n })\n }\n })\n\n return (\n <Solid.Errored\n fallback={(error, reset) => {\n const resolvedError = Solid.untrack(() => error() as Error)\n\n props.onCatch?.(resolvedError)\n resetBoundary = reset\n\n return process.env.NODE_ENV !== 'production' ? (\n renderInNonRouteComponentContext(\n () => (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />\n ),\n 'errorComponent',\n )\n ) : (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={resolvedError}\n reset={reset}\n />\n )\n }}\n >\n <Solid.Show when={retryKey()} keyed>\n {(_retryKey) => props.render?.() ?? props.children}\n </Solid.Show>\n </Solid.Errored>\n )\n}\n\nexport function ErrorComponent({ error }: { error: any }) {\n const [show, setShow] = Solid.createSignal(\n process.env.NODE_ENV !== 'production',\n )\n\n return (\n <div style={{ padding: '.5rem', 'max-width': '100%' }}>\n <div style={{ display: 'flex', 'align-items': 'center', gap: '.5rem' }}>\n <strong style={{ 'font-size': '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n 'font-size': '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n 'font-weight': 'bold',\n 'border-radius': '.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 'font-size': '.7em',\n border: '1px solid red',\n 'border-radius': '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;AAMA,SAAgB,cACd,OAOA;CACA,MAAM,CAAC,UAAU,eAAe,SAAM,aAAqB,CAAC,CAAC;CAC7D,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI;CAEJ,SAAM,gBAAgB;EACpB,gBAAgB,KAAA;CAClB,CAAC;CAED,SAAM,aAAa,MAAM,cAAc,QAAQ;EAC7C,IAAI,CAAC,aAAa;GAChB,cAAc;GACd,cAAc;GACd;EACF;EAKA,IAAI,QAAQ,aACV;EAEF,cAAc;EAEd,MAAM,QAAQ;EACd,IAAI,OACF,qBAAqB;GACnB,IAAI,kBAAkB,OACpB;GAEF,YAAY,CAAC,CAAC;GACd,MAAM;GACN,SAAM,MAAM;EACd,CAAC;CAEL,CAAC;CAED,QAAA,GAAA,aAAA,iBACEA,SAACC,SAAD;EACEC,WAAW,OAAO,UAAU;GAC1B,MAAM,gBAAgB,SAAM,cAAc,MAAM,CAAU;GAE1D,MAAM,UAAU,aAAa;GAC7B,gBAAgB;GAEhB,OAAA,QAAA,IAAA,aAAgC,eAC9B,iCAAA,wCAAA,GAAA,aAAA,iBAEIC,aAAAA,SAAAA;IACE,IAAA,YAAA;YAAW,MAAM,kBAAkB;IAAc;IACjDC,OAAO;IACA;GACR,CAAA,GAEH,gBACF,KAAA,GAAA,aAAA,iBAEAC,aAAAA,SAAAA;IACE,IAAA,YAAA;YAAW,MAAM,kBAAkB;IAAc;IACjDD,OAAO;IACA;GACR,CAAA;EAEL;EAzBF,IAAA,WAAA;4CA2BEE,SAACC,MAAD;IAAY,IAAA,OAAA;YAAM,SAAS;IAAC;IAAE,OAAA;IAA9BD,WACI,cAAc,MAAM,SAAS,KAAK,MAAM;GAChC,CAAA;EACC;;AAEnB;AAEA,SAAgB,eAAe,EAAE,SAAyB;CACxD,MAAM,CAAC,MAAM,WAAW,SAAM,aAAA,QAAA,IAAA,aACH,YAC3B;CAGE,IAAA,OAAA,OAkCK;CAjCH,IAAA,QAAA,KAAA;CAEE,IAAA,QADAE,MAAAA,WACA;CAcFC,MAAAA;CALI,MAAA,gBAAe,SAAS,MAAM,CAAC,CAAC;CATlC,CAAA,GAAA,aAAA,QAAA,aAWE;SAAC,KAAK,IAAI,eAAe;CAAY,CAC/B;CAfZ,CAAA,GAAA,aAAA,QAAA,aAkBE;;YAAC,KAAK;EAeE,CAAA;EAfR,aAAA;cAeQ,WAdN;wBAaK;IAZH,IAAA,QAAA,MAAA;2CAUE;;eAAC,MAAM;KAA6C,CAAA;KAApD,aAAA;kBAAoD,WAAnC;2BAA2B;OAA3B,CAAA,GAAA,aAAA,QAAA,aAAM;eAAC,MAAM;OAAO,CAAO;OAA3B,OAAA;MAA2B,GAAA,IAAI;KAAI;OAAA,CACjD;IAZP,OAAA;GAaK,GAAA,IACH;EAAI;IAAA,GAjCV,IAkCK;CAnCP,OACEC;AAoCJ"}