UNPKG

@lomray/react-route-manager

Version:
3 lines (2 loc) 1.22 kB
import{generatePath as t}from"react-router";class s{routes;domain;prefix;constructor({routes:t,domain:s,prefix:e}){this.domain=s,this.routes=t,this.prefix=e}setPrefix(t){this.prefix=t}getRouteUrl(t,{isFullPath:s=!1,hasLeadingSlash:e=!0}={}){const{urls:r}=t.split(".").reduce(((t,s)=>{if(!t?.routes||!s)return t;const{url:e,children:r}=t.routes[s]??{};return{urls:[...t.urls,e],routes:r}}),{routes:this.routes,urls:[]}),i=(s?r:r.slice(-1)).join("");return!e&&i.startsWith("/")?i.substring(1):e&&!i.startsWith("/")?`/${i}`:i}getRoutes(t){let{routes:s}=this;return t&&(s=t.split(".").reduce(((t,s)=>t?.[s]?.children??{}),s)),s}makeURL=(s,e,{hasDomain:r=!1}={})=>{const i=this.getRouteUrl(s,{isFullPath:!0});let u=t(i,e);return this.prefix&&(u=`/${this.prefix}${"/"===u?"":u}`),r&&this.domain?`${this.domain}${u}`:u};path=(t,{isFullPath:s=!1,hasLeadingSlash:e=!1}={})=>this.getRouteUrl(t,{isFullPath:s,hasLeadingSlash:e});getAllStaticURLs(t){const s=[],e=this.getRoutes(t);return Object.entries(e).forEach((([e,r])=>{const i=[t,e].filter(Boolean).join(".");r.url&&!r.params&&s.push(this.makeURL(i)),r.children&&!r.params&&s.push(...this.getAllStaticURLs(i))})),s}}export{s as default}; //# sourceMappingURL=manager.js.map