@astrolicious/i18n
Version:
Yet another i18n integration for Astro with server and client utilities, type safety and translations built-in.
2 lines • 1.77 kB
JavaScript
import{AstroError as O}from"astro/errors";var j=e=>new O(e,"Please open an issue on GitHub at https://github.com/astrolicious/i18n/issues");var A=e=>e?Array.isArray(e)?e:Object.entries(e).map(([s,l])=>({locale:s,params:l})):[],f=(e,s)=>s.trailingSlash==="never"?e:s.build.format==="directory"&&!e.endsWith("/")?`${e}/`:e;function k(e,s,l,d){let{changefreq:g,priority:y,lastmod:P}=l,h=P?.toISOString(),b=(r,o)=>{if(!r.route)return[];let n=[],i=e.filter(t=>t.route&&t.route.pattern===r.route.pattern&&t.route.locale!==r.route.locale);if(n.push({lang:r.route.locale,url:o}),r.routeData.params.length===0){for(let t of i)n.push({lang:t.route.locale,url:f(`${new URL(o).origin}${t.route.injectedRoute.pattern}`,d)});return[...n].sort((t,a)=>t.lang.localeCompare(a.lang,"en",{numeric:!0}))}let u=r.pages.indexOf(o),c=r.sitemapOptions.filter(t=>t.dynamicParams&&(Array.isArray(t.dynamicParams)?t.dynamicParams:Object.entries(t.dynamicParams)).length>0)[u];if(!c||!c.dynamicParams)return[];for(let t of i){let a=A(c.dynamicParams).find(p=>p.locale===t.route.locale);if(!a)continue;let m=t.route.injectedRoute.pattern;for(let[p,R]of Object.entries(a.params)){if(!R)throw j("This situation should never occur (value is not set)");m=m.replace(`[${p}]`,R)}m=f(`${new URL(o).origin}${m}`,d),n.push({lang:t.route.locale,url:m})}return[...n].sort((t,a)=>t.lang.localeCompare(a.lang,"en",{numeric:!0}))},S=[];for(let r of e)for(let o of r.pages){let n=[];if(r.route){let u=b({...r,route:r.route},o);n.push(...u)}let i={url:o,links:n};g&&Object.assign(i,{changefreq:g}),h&&Object.assign(i,{lastmod:h}),y&&Object.assign(i,{priority:y}),S.push(i)}return[...S].sort((r,o)=>r.url.localeCompare(o.url,"en",{numeric:!0}))}export{k as generateSitemap};
//# sourceMappingURL=generate-sitemap.js.map