siegel
Version:
Web application development ecosystem
1 lines • 1.53 kB
JavaScript
import t from"../../../common/is/exists/index.js";import e from"../get_final_url.js";import r from"../history/parse_basename.js";let i=(t,e)=>"function"==typeof e?e(t):e,n=t=>{let e=typeof t;if("string"==e)return{path:t};{if("function"==e)return{path:t()};let{path:r,state:i}=t;return{path:"function"==typeof r?r():r,state:"function"==typeof i?i():i}}};function s(t,r,i){let{path:s}=n(i?.["*"]?.redirectTo||(i[""]?"/":`/${Object.keys(i)[0]}`));return{newHistoryState:{__isNotFound:!0,prevPath:r},newPathname:e(t,s)}}let o=(l,f,a=null)=>{let u,{Layout:p,children:h,basename:m,transition:y}=l,{isRoot:b,pathArrayBasenameShift:c}=r(m,f),d={},g=f,k="",_=y,j=[];p&&j.push({traversePath:k,historyState:a,El:p});let x=((u=f.indexOf("?"))>=0?f.substring(0,u):f).split("/"),S=1;history.basename&&c&&(S+=c,b&&x.push(""));let w=h;for(;S<x.length;S++){let r=x[S];k+=`/${r}`;let o=w[r]||w["*"];if(o){let{Page:l,fallback:u,Layout:p,children:h,paramName:m,redirectTo:y,permissions:b,transition:c,onEnter:E,onLeave:O}=o;if(t(y)&&(!t(b)||!i(d,b))){let{path:t,state:r}=n(y);g=e(k,t),a=r;break}if(m&&(d[m]=r),l||p||h){let e=S==x.length-1;if((l&&e||p)&&j.push({onEnter:E,onLeave:O,fallback:u,traversePath:k,El:p||l,historyState:a}),h)t(c)&&(_=c?{..._,...c}:c),e&&h[""]&&x.push(""),w=h;else if(!e){({newPathname:g,newHistoryState:a}=s(k,f,w));break}}else break}else{({newPathname:g,newHistoryState:a}=s(k,f,w));break}}return g!=f?o(l,g,a):{newPathname:g,newHistoryState:a,transitionData:_,urlParams:d,traversePath:k,childrenArray:j}};export default o;