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