@itsmatteomanf/astro-robots-txt
Version:
Generate a robots.txt file for your Astro site
15 lines • 2.05 kB
JavaScript
import{writeFileSync as x}from"node:fs";import{ZodError as h}from"zod";var d="@itsmatteomanf/astro-robots-txt";import{z as o}from"zod";var i={sitemap:!0,policy:[{allow:"/",userAgent:"*"}],sitemapBaseFileName:"sitemap-index"},c=o.string().min(1),u=o.string().max(500),p=o.string().or(o.string().array()).optional(),y=o.object({host:o.string().or(o.boolean()).optional(),sitemap:c.or(c.array()).or(o.boolean()).optional().default(i.sitemap),policy:o.object({userAgent:p.default("*"),allow:p,disallow:p,cleanParam:u.or(u.array()).optional(),crawlDelay:o.number().nonnegative().optional().refine(r=>typeof r>"u"||Number.isFinite(r),{message:"Must be finite number"})}).array().nonempty().optional().default(i.policy),sitemapBaseFileName:o.string().min(1).optional().default(i.sitemapBaseFileName),transform:o.function().args(o.string()).returns(o.any()).optional()}).default(i),g=r=>y.parse(r);var w=r=>{let m,f=!0,a;return{name:d,hooks:{"astro:config:done":async({config:l,logger:s})=>{try{a=g(r)}catch(t){if(t instanceof h)f=!1,s.error("Invalid options. `robots.txt` will not be generated.");else throw t}m=l},"astro:build:done":async({dir:l,logger:s})=>{if(!f)return;let t="";a.sitemap&&(typeof a.sitemap=="boolean"?m.site?t+=`sitemap: ${new URL(`${a.sitemapBaseFileName}.xml`,m.site)}
`:s.warn("No `site` provided. `robots.txt` has no sitemap."):a.sitemap instanceof Array?a.sitemap.map(e=>{t+=`sitemap: ${e}
`}):t+=`sitemap: ${a.sitemap}
`),t+=`
`,a.policy.map(e=>{t+=`user-agent: ${e.userAgent}
`,e.allow&&(e.allow instanceof Array?e.allow.map(n=>{t+=`allow: ${n}
`}):t+=`allow: ${e.allow}
`),e.disallow&&(e.disallow instanceof Array?e.disallow.map(n=>{t+=`disallow: ${n}
`}):t+=`disallow: ${e.disallow}
`),e.cleanParam&&(e.cleanParam instanceof Array?e.cleanParam.map(n=>{t+=`clean-param: ${n}
`}):t+=`clean-param: ${e.cleanParam}
`),e.crawlDelay&&(t+=`crawl-delay: ${e.crawlDelay}
`)}),a.host&&(t+=`host: ${a.host}
`),x(new URL("robots.txt",l),t),s.info("`robots.txt` created.")}}}};var I=w;export{I as default};
//# sourceMappingURL=index.js.map