UNPKG

13 kB JavaScript View Raw
1 /**
2 * React Router v6.7.0
3 *
4 * Copyright (c) Remix Software Inc.
5 *
6 * This source code is licensed under the MIT license found in the
7 * LICENSE.md file in the root directory of this source tree.
8 *
9 * @license MIT
10 */
11 import{invariant as e,joinPaths as t,matchPath as r,UNSAFE_getPathContributingMatches as n,resolveTo as a,parsePath as o,matchRoutes as i,Action as l,isRouteErrorResponse as s,createMemoryHistory as u,stripBasename as c,AbortedDeferredError as d,createRouter as p}from"@remix-run/router";export{AbortedDeferredError,Action as NavigationType,createPath,defer,generatePath,isRouteErrorResponse,json,matchPath,matchRoutes,parsePath,redirect,resolvePath}from"@remix-run/router";import*as h from"react";const m="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},{useState:f,useEffect:v,useLayoutEffect:g,useDebugValue:E}=h;function x(e){const t=e.getSnapshot,r=e.value;try{const e=t();return!m(r,e)}catch(n){return!0}}const y=!!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement)?function(e,t,r){return t()}:function(e,t,r){const n=t(),[{inst:a},o]=f({inst:{value:n,getSnapshot:t}});return g((()=>{a.value=n,a.getSnapshot=t,x(a)&&o({inst:a})}),[e,n,t]),v((()=>{x(a)&&o({inst:a});return e((()=>{x(a)&&o({inst:a})}))}),[e]),E(n),n},C="useSyncExternalStore"in h?h.useSyncExternalStore:y,b=h.createContext(null),R=h.createContext(null),S=h.createContext(null),P=h.createContext(null),U=h.createContext(null),D=h.createContext({outlet:null,matches:[]}),_=h.createContext(null);function k(r,{relative:n}={}){w()||e(!1);let{basename:a,navigator:o}=h.useContext(P),{hash:i,pathname:l,search:s}=T(r,{relative:n}),u=l;return"/"!==a&&(u="/"===l?a:t([a,l])),o.createHref({pathname:u,search:s,hash:i})}function w(){return null!=h.useContext(U)}function O(){return w()||e(!1),h.useContext(U).location}function B(){return h.useContext(U).navigationType}function L(t){w()||e(!1);let{pathname:n}=O();return h.useMemo((()=>r(t,n)),[n,t])}function j(){w()||e(!1);let{basename:r,navigator:o}=h.useContext(P),{matches:i}=h.useContext(D),{pathname:l}=O(),s=JSON.stringify(n(i).map((e=>e.pathnameBase))),u=h.useRef(!1);return h.useEffect((()=>{u.current=!0})),h.useCallback(((e,n={})=>{if(!u.current)return;if("number"==typeof e)return void o.go(e);let i=a(e,JSON.parse(s),l,"path"===n.relative);"/"!==r&&(i.pathname="/"===i.pathname?r:t([r,i.pathname])),(n.replace?o.replace:o.push)(i,n.state,n)}),[r,o,s,l])}const N=h.createContext(null);function F(){return h.useContext(N)}function A(e){let t=h.useContext(D).outlet;return t?h.createElement(N.Provider,{value:e},t):t}function M(){let{matches:e}=h.useContext(D),t=e[e.length-1];return t?t.params:{}}function T(e,{relative:t}={}){let{matches:r}=h.useContext(D),{pathname:o}=O(),i=JSON.stringify(n(r).map((e=>e.pathnameBase)));return h.useMemo((()=>a(e,JSON.parse(i),o,"path"===t)),[e,i,o,t])}function I(r,n){w()||e(!1);let{navigator:a}=h.useContext(P),s=h.useContext(R),{matches:u}=h.useContext(D),c=u[u.length-1],d=c?c.params:{};!c||c.pathname;let p=c?c.pathnameBase:"/";c&&c.route;let m,f=O();if(n){let t="string"==typeof n?o(n):n;"/"===p||t.pathname?.startsWith(p)||e(!1),m=t}else m=f;let v=m.pathname||"/",g="/"===p?v:v.slice(p.length)||"/",E=i(r,{pathname:g}),x=z(E&&E.map((e=>Object.assign({},e,{params:Object.assign({},d,e.params),pathname:t([p,a.encodeLocation?a.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?p:t([p,a.encodeLocation?a.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),u,s||void 0);return n&&x?h.createElement(U.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...m},navigationType:l.Pop}},x):x}function J(){let e=re(),t=s(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,n="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:n},o={padding:"2px 4px",backgroundColor:n};return h.createElement(h.Fragment,null,h.createElement("h2",null,"Unhandled Thrown Error!"),h.createElement("h3",{style:{fontStyle:"italic"}},t),r?h.createElement("pre",{style:a},r):null,h.createElement("p",null,"💿 Hey developer 👋"),h.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",h.createElement("code",{style:o},"errorElement")," props on ",h.createElement("code",{style:o},"<Route>")))}class H extends h.Component{constructor(e){super(e),this.state={location:e.location,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location?{error:e.error,location:e.location}:{error:e.error||t.error,location:t.location}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return this.state.error?h.createElement(D.Provider,{value:this.props.routeContext},h.createElement(_.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function $({routeContext:e,match:t,children:r}){let n=h.useContext(b);return n&&n.static&&n.staticContext&&t.route.errorElement&&(n.staticContext._deepestRenderedBoundaryId=t.route.id),h.createElement(D.Provider,{value:e},r)}function z(t,r=[],n){if(null==t){if(!n?.errors)return null;t=n.matches}let a=t,o=n?.errors;if(null!=o){let t=a.findIndex((e=>e.route.id&&o?.[e.route.id]));t>=0||e(!1),a=a.slice(0,Math.min(a.length,t+1))}return a.reduceRight(((e,t,i)=>{let l=t.route.id?o?.[t.route.id]:null,s=n?t.route.errorElement||h.createElement(J,null):null,u=r.concat(a.slice(0,i+1)),c=()=>h.createElement($,{match:t,routeContext:{outlet:e,matches:u}},l?s:void 0!==t.route.element?t.route.element:e);return n&&(t.route.errorElement||0===i)?h.createElement(H,{location:n.location,component:s,error:l,children:c(),routeContext:{outlet:null,matches:u}}):c()}),null)}var V,Y;function W(t){let r=h.useContext(b);return r||e(!1),r}function X(t){let r=h.useContext(R);return r||e(!1),r}function q(t){let r=function(t){let r=h.useContext(D);return r||e(!1),r}(),n=r.matches[r.matches.length-1];return n.route.id||e(!1),n.route.id}function G(){return X(Y.UseNavigation).navigation}function K(){let e=W(V.UseRevalidator),t=X(Y.UseRevalidator);return{revalidate:e.router.revalidate,state:t.revalidation}}function Q(){let{matches:e,loaderData:t}=X(Y.UseMatches);return h.useMemo((()=>e.map((e=>{let{pathname:r,params:n}=e;return{id:e.route.id,pathname:r,params:n,data:t[e.route.id],handle:e.route.handle}}))),[e,t])}function Z(){let e=X(Y.UseLoaderData),t=q(Y.UseLoaderData);if(!e.errors||null==e.errors[t])return e.loaderData[t];console.error(`You cannot \`useLoaderData\` in an errorElement (routeId: ${t})`)}function ee(e){return X(Y.UseRouteLoaderData).loaderData[e]}function te(){let t=X(Y.UseActionData);return h.useContext(D)||e(!1),Object.values(t?.actionData||{})[0]}function re(){let e=h.useContext(_),t=X(Y.UseRouteError),r=q(Y.UseRouteError);return e||t.errors?.[r]}function ne(){return h.useContext(S)?._data}function ae(){return h.useContext(S)?._error}!function(e){e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator"}(V||(V={})),function(e){e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator"}(Y||(Y={}));function oe(e){let{router:t}=W(V.UseBlocker),r=h.useCallback((t=>"function"==typeof e?!!e(t):!!e),[e]),n=t.getBlocker("blocker-singleton",r);return h.useEffect((()=>()=>t.deleteBlocker("blocker-singleton")),[t]),n}function ie({fallbackElement:e,router:t}){let r=C(t.subscribe,(()=>t.state),(()=>t.state)),n=h.useMemo((()=>({createHref:t.createHref,encodeLocation:t.encodeLocation,go:e=>t.navigate(e),push:(e,r,n)=>t.navigate(e,{state:r,preventScrollReset:n?.preventScrollReset}),replace:(e,r,n)=>t.navigate(e,{replace:!0,state:r,preventScrollReset:n?.preventScrollReset})})),[t]),a=t.basename||"/";return h.createElement(h.Fragment,null,h.createElement(b.Provider,{value:{router:t,navigator:n,static:!1,basename:a}},h.createElement(R.Provider,{value:r},h.createElement(de,{basename:t.basename,location:t.state.location,navigationType:t.state.historyAction,navigator:n},t.state.initialized?h.createElement(pe,null):e))),null)}function le({basename:e,children:t,initialEntries:r,initialIndex:n}){let a=h.useRef();null==a.current&&(a.current=u({initialEntries:r,initialIndex:n,v5Compat:!0}));let o=a.current,[i,l]=h.useState({action:o.action,location:o.location});return h.useLayoutEffect((()=>o.listen(l)),[o]),h.createElement(de,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:o})}function se({to:t,replace:r,state:n,relative:a}){w()||e(!1);let o=h.useContext(R),i=j();return h.useEffect((()=>{o&&"idle"!==o.navigation.state||i(t,{replace:r,state:n,relative:a})})),null}function ue(e){return A(e.context)}function ce(t){e(!1)}function de({basename:t="/",children:r=null,location:n,navigationType:a=l.Pop,navigator:i,static:s=!1}){w()&&e(!1);let u=t.replace(/^\/*/,"/"),d=h.useMemo((()=>({basename:u,navigator:i,static:s})),[u,i,s]);"string"==typeof n&&(n=o(n));let{pathname:p="/",search:m="",hash:f="",state:v=null,key:g="default"}=n,E=h.useMemo((()=>{let e=c(p,u);return null==e?null:{pathname:e,search:m,hash:f,state:v,key:g}}),[u,p,m,f,v,g]);return null==E?null:h.createElement(P.Provider,{value:d},h.createElement(U.Provider,{children:r,value:{location:E,navigationType:a}}))}function pe({children:e,location:t}){let r=h.useContext(b);return I(r&&!e?r.router.routes:Ee(e),t)}function he({children:e,errorElement:t,resolve:r}){return h.createElement(ve,{resolve:r,errorElement:t},h.createElement(ge,null,e))}var me;!function(e){e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error"}(me||(me={}));const fe=new Promise((()=>{}));class ve extends h.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error("<Await> caught the following error during render",e,t)}render(){let{children:e,errorElement:t,resolve:r}=this.props,n=null,a=me.pending;if(r instanceof Promise)if(this.state.error){a=me.error;let e=this.state.error;n=Promise.reject().catch((()=>{})),Object.defineProperty(n,"_tracked",{get:()=>!0}),Object.defineProperty(n,"_error",{get:()=>e})}else r._tracked?(n=r,a=void 0!==n._error?me.error:void 0!==n._data?me.success:me.pending):(a=me.pending,Object.defineProperty(r,"_tracked",{get:()=>!0}),n=r.then((e=>Object.defineProperty(r,"_data",{get:()=>e})),(e=>Object.defineProperty(r,"_error",{get:()=>e}))));else a=me.success,n=Promise.resolve(),Object.defineProperty(n,"_tracked",{get:()=>!0}),Object.defineProperty(n,"_data",{get:()=>r});if(a===me.error&&n._error instanceof d)throw fe;if(a===me.error&&!t)throw n._error;if(a===me.error)return h.createElement(S.Provider,{value:n,children:t});if(a===me.success)return h.createElement(S.Provider,{value:n,children:e});throw n}}function ge({children:e}){let t=ne(),r="function"==typeof e?e(t):e;return h.createElement(h.Fragment,null,r)}function Ee(t,r=[]){let n=[];return h.Children.forEach(t,((t,a)=>{if(!h.isValidElement(t))return;if(t.type===h.Fragment)return void n.push.apply(n,Ee(t.props.children,r));t.type!==ce&&e(!1),t.props.index&&t.props.children&&e(!1);let o=[...r,a],i={id:t.props.id||o.join("-"),caseSensitive:t.props.caseSensitive,element:t.props.element,index:t.props.index,path:t.props.path,loader:t.props.loader,action:t.props.action,errorElement:t.props.errorElement,hasErrorBoundary:null!=t.props.errorElement,shouldRevalidate:t.props.shouldRevalidate,handle:t.props.handle};t.props.children&&(i.children=Ee(t.props.children,o)),n.push(i)})),n}function xe(e){return z(e)}function ye(e){return e.map((e=>{let t={...e};return null==t.hasErrorBoundary&&(t.hasErrorBoundary=null!=t.errorElement),t.children&&(t.children=ye(t.children)),t}))}function Ce(e,t){return p({basename:t?.basename,history:u({initialEntries:t?.initialEntries,initialIndex:t?.initialIndex}),hydrationData:t?.hydrationData,routes:ye(e)}).initialize()}export{he as Await,le as MemoryRouter,se as Navigate,ue as Outlet,ce as Route,de as Router,ie as RouterProvider,pe as Routes,b as UNSAFE_DataRouterContext,R as UNSAFE_DataRouterStateContext,U as UNSAFE_LocationContext,P as UNSAFE_NavigationContext,D as UNSAFE_RouteContext,ye as UNSAFE_enhanceManualRouteObjects,Ce as createMemoryRouter,Ee as createRoutesFromChildren,Ee as createRoutesFromElements,xe as renderMatches,oe as unstable_useBlocker,te as useActionData,ae as useAsyncError,ne as useAsyncValue,k as useHref,w as useInRouterContext,Z as useLoaderData,O as useLocation,L as useMatch,Q as useMatches,j as useNavigate,G as useNavigation,B as useNavigationType,A as useOutlet,F as useOutletContext,M as useParams,T as useResolvedPath,K as useRevalidator,re as useRouteError,ee as useRouteLoaderData,I as useRoutes};
12 //# sourceMappingURL=react-router.production.min.js.map