@beforesemicolon/builder 1.8.11 → 1.8.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +839 -142
  2. package/dist/cjs/docs/run.js +16 -14
  3. package/dist/cjs/docs/templates/fading-citrus/README.md +772 -0
  4. package/dist/cjs/docs/templates/fading-citrus/assets/logo.dark.svg +8 -0
  5. package/dist/cjs/docs/templates/fading-citrus/assets/logo.light.svg +8 -0
  6. package/dist/cjs/docs/templates/fading-citrus/assets/logo.svg +8 -0
  7. package/dist/cjs/docs/templates/fading-citrus/layouts/_footer.js +13 -6
  8. package/dist/cjs/docs/templates/fading-citrus/layouts/_head-meta.js +3 -2
  9. package/dist/cjs/docs/templates/fading-citrus/layouts/_header.js +9 -4
  10. package/dist/cjs/docs/templates/fading-citrus/layouts/document.js +3 -2
  11. package/dist/cjs/docs/templates/fading-citrus/layouts/landing.js +4 -2
  12. package/dist/cjs/docs/templates/fading-citrus/stylesheets/common.css +135 -50
  13. package/dist/cjs/docs/templates/fading-citrus/stylesheets/documentation.css +32 -24
  14. package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +12 -12
  15. package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +22 -22
  16. package/dist/cjs/docs/templates/fading-citrus/stylesheets/landing.css +74 -87
  17. package/dist/cjs/docs/templates/fading-citrus/template.config.js +106 -15
  18. package/dist/cjs/docs/types.js +1 -1
  19. package/dist/esm/docs/run.js +15 -13
  20. package/dist/esm/docs/templates/fading-citrus/README.md +772 -0
  21. package/dist/esm/docs/templates/fading-citrus/assets/logo.dark.svg +8 -0
  22. package/dist/esm/docs/templates/fading-citrus/assets/logo.light.svg +8 -0
  23. package/dist/esm/docs/templates/fading-citrus/assets/logo.svg +8 -0
  24. package/dist/esm/docs/templates/fading-citrus/layouts/_footer.js +13 -6
  25. package/dist/esm/docs/templates/fading-citrus/layouts/_head-meta.js +3 -2
  26. package/dist/esm/docs/templates/fading-citrus/layouts/_header.js +9 -4
  27. package/dist/esm/docs/templates/fading-citrus/layouts/document.js +3 -2
  28. package/dist/esm/docs/templates/fading-citrus/layouts/landing.js +4 -2
  29. package/dist/esm/docs/templates/fading-citrus/stylesheets/common.css +135 -50
  30. package/dist/esm/docs/templates/fading-citrus/stylesheets/documentation.css +32 -24
  31. package/dist/esm/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +12 -12
  32. package/dist/esm/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +22 -22
  33. package/dist/esm/docs/templates/fading-citrus/stylesheets/landing.css +74 -87
  34. package/dist/esm/docs/templates/fading-citrus/template.config.js +106 -15
  35. package/dist/types/docs/types.d.ts +4 -2
  36. package/package.json +1 -1
  37. package/dist/cjs/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
  38. package/dist/cjs/docs/templates/fading-citrus/layouts/_logo.js +0 -31
  39. package/dist/esm/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
  40. package/dist/esm/docs/templates/fading-citrus/layouts/_logo.js +0 -31
@@ -1,48 +1,50 @@
1
- "use strict";var fe=Object.create;var C=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty;var m=(e,t)=>C(e,"name",{value:t,configurable:!0});var we=(e,t)=>{for(var r in t)C(e,r,{get:t[r],enumerable:!0})},Q=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of he(t))!ye.call(e,i)&&i!==r&&C(e,i,{get:()=>t[i],enumerable:!(n=de(t,i))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?fe(ge(e)):{},Q(t||!e||!e.__esModule?C(r,"default",{value:e,enumerable:!0}):r,e)),ve=e=>Q(C({},"__esModule",{value:!0}),e);var _e={};we(_e,{buildDocs:()=>We});module.exports=ve(_e);const Be={};var ee=require("marked"),c=require("fs/promises"),o=w(require("path"),1),te=w(require("front-matter"),1),se=w(require("isomorphic-dompurify"),1),re=require("marked-highlight"),W=w(require("highlight.js"),1),oe=w(require("./templates/default.template.js"),1),ae=w(require("./renderer/index.js"),1),ne=require("./markdown-layout/index.js"),ie=w(require("clean-css"),1),le=w(require("html-minifier"),1),X=w(require("@putout/minify"),1),$=require("url"),p=w(require("fs"),1);let K;const V=new ie.default({inline:["none"]}),A=new Map;A.set("default",oe.default);let R;const xe=m((e,t)=>{if(!(!e&&!t))return{light:{...e?.light,...t?.light},dark:{...e?.dark,...t?.dark}}},"mergeTheme"),Se=m((e,t)=>({...e,...t,markdownLayouts:{...e.markdownLayouts,...t.markdownLayouts},scripts:{...e.scripts,...t.scripts},theme:xe(e.theme,t.theme)}),"mergeTemplateConfig"),be=m((e,t)=>{if(typeof e=="function")return!0;const{match:r}=e;return r?typeof r=="string"?t.includes(r):Array.isArray(r)?r.some(n=>t.includes(n)):r instanceof RegExp?r.test(t):r(t):!0},"scriptMatches"),De=m((e,t)=>e?Object.values(e).filter(r=>r!==!1).filter(r=>be(r,t)).map(r=>typeof r=="function"?r():r.render()):[],"renderPageScripts"),G=m((e,t)=>{const r=Object.entries(t).filter(([n])=>n.startsWith("--")).map(([n,i])=>` ${n}: ${i};`).join(`
1
+ "use strict";var he=Object.create;var j=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var m=(e,t)=>j(e,"name",{value:t,configurable:!0});var Se=(e,t)=>{for(var r in t)j(e,r,{get:t[r],enumerable:!0})},Q=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ye(t))!ve.call(e,n)&&n!==r&&j(e,n,{get:()=>t[n],enumerable:!(a=ge(t,n))||a.enumerable});return e};var w=(e,t,r)=>(r=e!=null?he(we(e)):{},Q(t||!e||!e.__esModule?j(r,"default",{value:e,enumerable:!0}):r,e)),De=e=>Q(j({},"__esModule",{value:!0}),e);var Ue={};Se(Ue,{buildDocs:()=>Ne});module.exports=De(Ue);const ze={};var se=require("marked"),c=require("fs/promises"),o=w(require("path"),1),re=w(require("front-matter"),1),oe=w(require("isomorphic-dompurify"),1),ae=require("marked-highlight"),_=w(require("highlight.js"),1),ne=w(require("./templates/default.template.js"),1),ie=w(require("./renderer/index.js"),1),le=require("./markdown-layout/index.js"),ce=w(require("clean-css"),1),me=w(require("html-minifier"),1),X=w(require("@putout/minify"),1),$=require("url"),f=w(require("fs"),1);let V,A="";const Y=new ce.default({inline:["none"]}),R=new Map;R.set("default",ne.default);let W;const Z=m((e,t)=>t===!1?!1:t===void 0?e:e===!1||e===void 0?t:{...e,...t},"mergeThemeMode"),be=m((e,t)=>{if(!(!e&&!t))return{light:Z(e?.light,t?.light),dark:Z(e?.dark,t?.dark)}},"mergeTheme"),xe=m((e,t)=>({...e,...t,markdownLayouts:{...e.markdownLayouts,...t.markdownLayouts},scripts:{...e.scripts,...t.scripts},theme:be(e.theme,t.theme)}),"mergeTemplateConfig"),$e=m((e,t)=>{if(typeof e=="function")return!0;const{match:r}=e;return r?typeof r=="string"?t.includes(r):Array.isArray(r)?r.some(a=>t.includes(a)):r instanceof RegExp?r.test(t):r(t):!0},"scriptMatches"),Pe=m((e,t)=>e?Object.values(e).filter(r=>r!==!1).filter(r=>$e(r,t)).map(r=>typeof r=="function"?r():r.render()):[],"renderPageScripts"),G=m((e,t)=>{const r=Object.entries(t).filter(([a])=>a.startsWith("--")).map(([a,n])=>` ${a}: ${n};`).join(`
2
2
  `);return r?`${e} {
3
3
  ${r}
4
- }`:""},"renderThemeBlock"),$e=m(e=>{if(!e)return"";const t=e.light??e.dark,r=e.dark??e.light;return!t&&!r?"":[t?G(":root",t):"",r?`@media (prefers-color-scheme: dark) {
5
- ${G(" :root",r)}
6
- }`:"",t?G('[data-theme="light"]',t):"",r?G('[data-theme="dark"]',r):""].filter(Boolean).join(`
4
+ }`:""},"renderThemeBlock"),ke=m(e=>{if(!e)return"";const t=e.light===!1,r=e.dark===!1,a=e.light===!1?void 0:e.light,n=r?void 0:e.dark,u=a||n;return u?[G(":root",u),n&&!t?`@media (prefers-color-scheme: dark) {
5
+ ${G(" :root",n)}
6
+ }`:"",a?G('[data-theme="light"]',a):"",n?G('[data-theme="dark"]',n):"",t&&n?`.site-logo-light { display: none; }
7
+ .site-logo-dark { display: block; }`:"",r&&a?`.site-logo-light { display: block; }
8
+ .site-logo-dark { display: none; }`:""].filter(Boolean).join(`
7
9
 
8
- `)},"renderThemeStylesheet"),Pe=m((e="")=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;"),"escapeXML"),ke=m((e="")=>e.replace(/```[\s\S]*?```/g," ").replace(/`([^`]+)`/g,"$1").replace(/!\[[^\]]*]\([^)]*\)/g," ").replace(/\[([^\]]+)]\([^)]*\)/g,"$1").replace(/^#{1,6}\s+/gm,"").replace(/^---+$/gm," ").replace(/[>*_~]/g,"").replace(/\s+/g," ").trim(),"stripMarkdown"),je=m(e=>e==="/index.html"?"/":e.replace(/\/index\.html$/,"/").replace(/\.html$/,"").replace(/\/+/g,"/"),"pagePathToUrlPath"),Y=m((e,t)=>e?`${e.replace(/\/$/,"")}${t==="/"?"/":t}`:t,"canonicalUrl"),Te=m(async(e,t)=>p.default.existsSync(e)?(await(0,c.mkdir)(o.default.dirname(t),{recursive:!0}),await(0,c.cp)(e,t),!0):!1,"copyIfExists"),Me=m(e=>{const t={sitemap:!0,robots:!0,llms:!0,llmsFull:!0,netlify:!1};return e===!1?{sitemap:!1,robots:!1,llms:!1,llmsFull:!1,netlify:!1}:e===!0||e===void 0?t:{...t,...e}},"normalizeGeneratedFilesConfig"),Ce=m((e,t)=>{if(!t)return"";const r=new Date().toISOString().slice(0,10);return`<?xml version="1.0" encoding="UTF-8"?>
10
+ `):""},"renderThemeStylesheet"),Te=m((e="")=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;"),"escapeXML"),Me=m((e="")=>e.replace(/```[\s\S]*?```/g," ").replace(/`([^`]+)`/g,"$1").replace(/!\[[^\]]*]\([^)]*\)/g," ").replace(/\[([^\]]+)]\([^)]*\)/g,"$1").replace(/^#{1,6}\s+/gm,"").replace(/^---+$/gm," ").replace(/[>*_~]/g,"").replace(/\s+/g," ").trim(),"stripMarkdown"),Ce=m(e=>e==="/index.html"?"/":e.replace(/\/index\.html$/,"/").replace(/\.html$/,"").replace(/\/+/g,"/"),"pagePathToUrlPath"),ee=m((e,t)=>e?`${e.replace(/\/$/,"")}${t==="/"?"/":t}`:t,"canonicalUrl"),je=m(async(e,t)=>f.default.existsSync(e)?(await(0,c.mkdir)(o.default.dirname(t),{recursive:!0}),await(0,c.cp)(e,t),!0):!1,"copyIfExists"),Fe=m(async e=>{const t=o.default.resolve(e,"logo.svg");f.default.existsSync(t)&&await Promise.all(["logo.light.svg","logo.dark.svg"].map(async r=>{const a=o.default.resolve(e,r);f.default.existsSync(a)||await(0,c.cp)(t,a)}))},"ensureLogoModeAssets"),Ge=m(e=>{const t={sitemap:!0,robots:!0,llms:!0,llmsFull:!0,netlify:!1};return e===!1?{sitemap:!1,robots:!1,llms:!1,llmsFull:!1,netlify:!1}:e===!0||e===void 0?t:{...t,...e}},"normalizeGeneratedFilesConfig"),Le=m((e,t)=>{if(!t)return"";const r=new Date().toISOString().slice(0,10);return`<?xml version="1.0" encoding="UTF-8"?>
9
11
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
10
- ${e.map(i=>{const u=i.urlPath==="/"?"1.0":"0.8";return` <url>
11
- <loc>${Pe(Y(t,i.urlPath))}</loc>
12
+ ${e.map(n=>{const u=n.urlPath==="/"?"1.0":"0.8";return` <url>
13
+ <loc>${Te(ee(t,n.urlPath))}</loc>
12
14
  <lastmod>${r}</lastmod>
13
15
  <changefreq>weekly</changefreq>
14
16
  <priority>${u}</priority>
15
17
  </url>`}).join(`
16
18
  `)}
17
19
  </urlset>
18
- `},"generateSitemap"),Fe=m(e=>`User-agent: *
20
+ `},"generateSitemap"),Ee=m(e=>`User-agent: *
19
21
  Allow: /
20
22
  ${e?`
21
23
  Sitemap: ${e.replace(/\/$/,"")}/sitemap.xml
22
24
  Host: ${e.replace(/\/$/,"")}
23
25
  `:""}
24
- `,"generateRobots"),Ge=m(e=>`# Documentation
26
+ `,"generateRobots"),Oe=m(e=>`# Documentation
25
27
 
26
28
  ## Page index
27
29
 
28
30
  ${e.map(t=>`- ${t.name}: ${t.urlPath} - ${t.description}`).join(`
29
31
  `)}
30
- `,"generateLlms"),Ee=m((e,t)=>`# Documentation for AI agents
32
+ `,"generateLlms"),Ae=m((e,t)=>`# Documentation for AI agents
31
33
 
32
34
  This file is generated at build time from the Markdown documentation. Use it to choose the most relevant page before reading the canonical HTML documentation.
33
35
 
34
36
  ${e.map(r=>`## ${r.title}
35
37
 
36
- URL: ${Y(t,r.urlPath)}
38
+ URL: ${ee(t,r.urlPath)}
37
39
  Source: docs/${r.sourcePath}
38
40
  Description: ${r.description}
39
41
 
40
42
  ${r.summary||r.description}
41
43
  `).join(`
42
44
  `)}
43
- `,"generateLlmsFull"),Le=m((e,t)=>{const r=["# Generated by @beforesemicolon/builder"];return[t.llms?"llms.txt":"",t.llmsFull?"llms-full.txt":"",t.sitemap?"sitemap.xml":"",t.robots?"robots.txt":""].filter(Boolean).forEach(i=>r.push(`/${i} /${i} 200`)),e.forEach(i=>{if(i.urlPath==="/")return;const u=i.urlPath.endsWith("/")?`${i.urlPath}index.html`:`${i.urlPath}.html`;r.push(`${i.urlPath} ${u} 200`),i.urlPath.endsWith("/")&&r.push(`${i.urlPath.replace(/\/$/,"")} ${u} 200`)}),`${[...new Set(r)].join(`
45
+ `,"generateLlmsFull"),Re=m((e,t)=>{const r=["# Generated by @beforesemicolon/builder"];return[t.llms?"llms.txt":"",t.llmsFull?"llms-full.txt":"",t.sitemap?"sitemap.xml":"",t.robots?"robots.txt":""].filter(Boolean).forEach(n=>r.push(`/${n} /${n} 200`)),e.forEach(n=>{if(n.urlPath==="/")return;const u=n.urlPath.endsWith("/")?`${n.urlPath}index.html`:`${n.urlPath}.html`;r.push(`${n.urlPath} ${u} 200`),n.urlPath.endsWith("/")&&r.push(`${n.urlPath.replace(/\/$/,"")} ${u} 200`)}),`${[...new Set(r)].join(`
44
46
  `)}
45
- `},"generateNetlifyRedirects"),Oe=m(e=>`[build]
47
+ `},"generateNetlifyRedirects"),We=m(e=>`[build]
46
48
  command = "node build-docs.js"
47
49
  publish = "${e||"website"}"
48
50
 
@@ -73,4 +75,4 @@ for = "/robots.txt"
73
75
  [headers.values]
74
76
  Content-Type = "text/plain; charset=utf-8"
75
77
  Cache-Control = "public, max-age=0, must-revalidate"
76
- `,"generateNetlifyToml"),D=m(async(e,t,r,n)=>{if(await Te(e,t))return;const i=r();if(!i){n&&console.warn(n);return}await(0,c.mkdir)(o.default.dirname(t),{recursive:!0}),await(0,c.writeFile)(t,i)},"writeGeneratedFile"),Ae=m(async({docsDir:e,docsSiteDir:t,pages:r,siteUrl:n,publicDir:i,generatedFiles:u})=>{u.sitemap&&await D(o.default.resolve(e,"sitemap.xml"),o.default.resolve(t,"sitemap.xml"),()=>Ce(r,n),"Skipping generated sitemap.xml because buildDocs({ siteUrl }) is not set."),u.robots&&await D(o.default.resolve(e,"robots.txt"),o.default.resolve(t,"robots.txt"),()=>Fe(n)),u.llms&&await D(o.default.resolve(e,"llms.txt"),o.default.resolve(t,"llms.txt"),()=>Ge(r)),u.llmsFull&&await D(o.default.resolve(e,"llms-full.txt"),o.default.resolve(t,"llms-full.txt"),()=>Ee(r,n)),u.netlify&&(await D(o.default.resolve(e,"_redirects"),o.default.resolve(t,"_redirects"),()=>Le(r,u)),await D(o.default.resolve(e,"netlify.toml"),o.default.resolve(t,"netlify.toml"),()=>Oe(i&&o.default.basename(i))))},"writeGeneratedDocsFiles"),Z=m((e={},t,r)=>{const n=new ee.Marked((0,re.markedHighlight)({langPrefix:"hljs language-",highlight(i,u){const P=W.default.getLanguage(u)?u:"plaintext";return W.default.highlight(i,{language:P}).value}}));return n.use({renderer:ae.default}),n.use((0,ne.createMarkdownLayoutExtension)({marked:n,handlers:e.markdownLayouts,renderMarkdown:r})),e.markedOptions&&n.use(e.markedOptions),t&&n.use(t),n},"createBaseMarked"),Re=m((e={},t)=>{const r=Z(e,t),n=m(u=>r.parse(u),"renderMarkdown"),i=Z(e,t,n);return i.use({hooks:{postprocess(u){const{layout:P="default",...y}=R.attributes,k=De(e.scripts,u);u=se.default.sanitize(u);const j=[...u.matchAll(/<h([0-6])\sid="[^"]+".*?>.*?<a\s+href="([^"]+)".*?>([^<]+)<\/a>/gm)].map(S=>({path:S[2],label:S[3],level:S[1]}));return A.get(P)?.({...y,content:u,siteMap:R.siteMap,tableOfContent:j,projectMeta:K,renderMarkdown:n,scripts:k,themeStylesheet:e.theme?"/stylesheets/theme.css":void 0})||u}}}),i},"createMarked"),v=m(async e=>{const t=await(0,c.readdir)(e),r=[];for(const n of t){const i=o.default.extname(n);/^[._]/.test(n)||(i?r.push(o.default.join(e,n)):/(stylesheets|assets|scripts)/.test(n)||r.push(...await v(o.default.join(e,n))))}return r},"traverseDirectory"),We=m(async({srcDir:e,publicDir:t,markedOptions:r,template:n,siteUrl:i,generatedFiles:u}={})=>{try{const s=o.default.resolve(process.cwd(),"package.json");p.default.existsSync(s)&&(K=JSON.parse(await(0,c.readFile)(s,"utf-8")))}catch(s){console.warn("Failed to load project package.json metadata",s)}const P=m(()=>{try{return __dirname}catch{return o.default.dirname((0,$.fileURLToPath)(Be.url))}},"getDirname"),y=n?o.default.resolve(P(),"templates",n):null,k=y?o.default.resolve(y,"assets"):null,j=y?o.default.resolve(y,"stylesheets"):null,S=y?o.default.resolve(y,"layouts"):null;let T={};if(y)try{let s=o.default.resolve(y,"template.config.js");if(p.default.existsSync(s)||(s=s.replace(/\.js$/,".ts")),p.default.existsSync(s)){const a=await import((0,$.pathToFileURL)(s).href);T=a.default||a}}catch(s){console.error(`Failed to load template config for ${n}`,s)}const d=e??o.default.resolve(process.cwd(),"docs"),f=t??o.default.resolve(process.cwd(),"website"),ce=Me(u),x=o.default.resolve(d,"_template"),_=o.default.resolve(x,"assets"),B=o.default.resolve(x,"stylesheets"),N=o.default.resolve(x,"scripts"),U=o.default.resolve(x,"layouts"),z=o.default.resolve(d,"_layouts"),F=o.default.resolve(d,"assets"),q=o.default.resolve(d,"stylesheets"),E=o.default.resolve(d,"scripts");try{let s=o.default.resolve(x,"template.config.js");if(p.default.existsSync(s)||(s=s.replace(/\.js$/,".ts")),p.default.existsSync(s)){const a=await import((0,$.pathToFileURL)(s).href),l=a.default||a;T=Se(T,l)}}catch(s){console.error("Failed to load docs _template config",s)}const me=Re(T,r);if(await(0,c.mkdir)(f,{recursive:!0}),k&&p.default.existsSync(k))try{await(0,c.cp)(k,F.replace(d,f),{recursive:!0})}catch(s){console.warn(s)}if(p.default.existsSync(F))try{await(0,c.cp)(F,F.replace(d,f),{recursive:!0})}catch(s){console.warn(s)}if(p.default.existsSync(_))try{await(0,c.cp)(_,o.default.resolve(f,"assets"),{recursive:!0})}catch(s){console.warn(s)}try{const s=new Set;if(j&&p.default.existsSync(j)&&(await v(j)).forEach(l=>s.add(l)),p.default.existsSync(q)&&(await v(q)).forEach(l=>s.add(l)),p.default.existsSync(B)&&(await v(B)).forEach(l=>s.add(l)),s.size){await(0,c.mkdir)(o.default.join(f,"stylesheets"),{recursive:!0});for(const l of s){const h=await(0,c.readFile)(l,"utf-8"),g=V.minify(h);g.errors.length&&g.errors.forEach(console.error);const M=l.startsWith(x)?l.replace(x,f):l.startsWith(d)?l.replace(d,f):o.default.join(f,"stylesheets",o.default.basename(l));await(0,c.writeFile)(M,g.styles??h)}}const a=$e(T.theme);if(a){const l=V.minify(a);l.errors.length&&l.errors.forEach(console.error),await(0,c.mkdir)(o.default.join(f,"stylesheets"),{recursive:!0}),await(0,c.writeFile)(o.default.join(f,"stylesheets","theme.css"),l.styles??a)}}catch(s){console.error(s)}if(p.default.existsSync(E))try{const s=await v(E);s.length&&await(0,c.mkdir)(E.replace(d,f),{recursive:!0});for(const a of s)try{const l=await(0,c.readFile)(a,"utf-8");await(0,c.writeFile)(a.replace(d,f),X.minify(l))}catch(l){console.error(l)}}catch(s){console.warn(s)}if(p.default.existsSync(N))try{const s=await v(N);s.length&&await(0,c.mkdir)(o.default.join(f,"scripts"),{recursive:!0});for(const a of s)try{const l=await(0,c.readFile)(a,"utf-8");await(0,c.writeFile)(a.replace(x,f),X.minify(l))}catch(l){console.error(l)}}catch(s){console.warn(s)}try{const s=new Map;S&&p.default.existsSync(S)&&(await v(S)).forEach(a=>{/\.(j|t)s$/.test(a)&&s.set(o.default.basename(a).replace(/\.(j|t)s$/,""),a)}),p.default.existsSync(z)&&(await v(z)).forEach(a=>{/\.(j|t)s$/.test(a)&&s.set(o.default.basename(a).replace(/\.(j|t)s$/,""),a)}),p.default.existsSync(U)&&(await v(U)).forEach(a=>{/\.(j|t)s$/.test(a)&&s.set(o.default.basename(a).replace(/\.(j|t)s$/,""),a)});for(const[a,l]of s.entries()){const h=await import((0,$.pathToFileURL)(l).href);A.set(a,h.default)}}catch(s){console.error("Template import failed",s)}const ue=await v(d),H=new Map,I=(await Promise.all(ue.filter(s=>s.endsWith(".md")).map(async s=>{const a=await(0,c.readFile)(s,"utf-8");return{filePath:s,...(0,te.default)(a)}}))).sort((s,a)=>(s.attributes.order??0)-(a.attributes.order??0)).map(({attributes:s,body:a,filePath:l})=>{const h=l.replace(d,"").replace(/\.md/,".html"),g=l.replace(d,f).replace(".md",".html"),M=g.replace(o.default.basename(g),""),L=o.default.basename(h)||"/",pe=h.replace(L,"").replace(/\/$/,"");let b=H;pe.split("/").filter(Boolean).forEach(O=>{b.has(O)||b.set(O,new Map),b=b.get(O)});const J={...s,path:h};return b.has(L)||b.set(L,J),{attributes:J,fileWebsitePath:g,fileDirWebsitePath:M,body:a,sourcePath:o.default.relative(d,l),siteMap:H}});for(const{attributes:s,body:a,fileDirWebsitePath:l,fileWebsitePath:h,siteMap:g}of I){R={attributes:s,siteMap:g};const M=await me.parse(a);await(0,c.mkdir)(l,{recursive:!0}),await(0,c.writeFile)(h,le.default.minify(M,{includeAutoGeneratedTags:!0,removeAttributeQuotes:!0,removeComments:!0,removeRedundantAttributes:!0,removeScriptTypeAttributes:!0,removeStyleLinkTypeAttributes:!0,sortClassName:!0,useShortDoctype:!0,collapseWhitespace:!0,minifyJS:!0,minifyCSS:!0}))}await Ae({docsDir:d,docsSiteDir:f,pages:I.map(({attributes:s,body:a,sourcePath:l})=>{const h=je(String(s.path)),g=ke(a);return{sourcePath:l,urlPath:h,title:String(s.title||s.name||"").trim()||"Documentation",name:String(s.name||s.title||"").trim()||"Documentation",description:String(s.description||"").trim()||g.slice(0,156)||"Documentation page.",order:Number(s.order??999),summary:g.slice(0,320)}}),siteUrl:i,publicDir:f,generatedFiles:ce})},"buildDocs");0&&(module.exports={buildDocs});
78
+ `,"generateNetlifyToml"),x=m(async(e,t,r,a)=>{if(await je(e,t))return;const n=r();if(!n){a&&console.warn(a);return}await(0,c.mkdir)(o.default.dirname(t),{recursive:!0}),await(0,c.writeFile)(t,n)},"writeGeneratedFile"),_e=m(async({docsDir:e,docsSiteDir:t,pages:r,siteUrl:a,publicDir:n,generatedFiles:u})=>{u.sitemap&&await x(o.default.resolve(e,"sitemap.xml"),o.default.resolve(t,"sitemap.xml"),()=>Le(r,a),"Skipping generated sitemap.xml because buildDocs({ siteUrl }) is not set."),u.robots&&await x(o.default.resolve(e,"robots.txt"),o.default.resolve(t,"robots.txt"),()=>Ee(a)),u.llms&&await x(o.default.resolve(e,"llms.txt"),o.default.resolve(t,"llms.txt"),()=>Oe(r)),u.llmsFull&&await x(o.default.resolve(e,"llms-full.txt"),o.default.resolve(t,"llms-full.txt"),()=>Ae(r,a)),u.netlify&&(await x(o.default.resolve(e,"_redirects"),o.default.resolve(t,"_redirects"),()=>Re(r,u)),await x(o.default.resolve(e,"netlify.toml"),o.default.resolve(t,"netlify.toml"),()=>We(n&&o.default.basename(n))))},"writeGeneratedDocsFiles"),te=m((e={},t,r)=>{const a=new se.Marked((0,ae.markedHighlight)({langPrefix:"hljs language-",highlight(n,u){const P=_.default.getLanguage(u)?u:"plaintext";return _.default.highlight(n,{language:P}).value}}));return a.use({renderer:ie.default}),a.use((0,le.createMarkdownLayoutExtension)({marked:a,handlers:e.markdownLayouts,renderMarkdown:r})),e.markedOptions&&a.use(e.markedOptions),t&&a.use(t),a},"createBaseMarked"),Be=m((e={},t)=>{const r=te(e,t),a=m(u=>r.parse(u),"renderMarkdown"),n=te(e,t,a);return n.use({hooks:{postprocess(u){const{layout:P="default",...y}=W.attributes,k=Pe(e.scripts,u);u=oe.default.sanitize(u);const T=[...u.matchAll(/<h([0-6])\sid="[^"]+".*?>.*?<a\s+href="([^"]+)".*?>([^<]+)<\/a>/gm)].map(D=>({path:D[2],label:D[3],level:D[1]}));return R.get(P)?.({...y,content:u,siteMap:W.siteMap,tableOfContent:T,projectMeta:V,renderMarkdown:a,scripts:k,themeStylesheet:e.theme?`/stylesheets/theme.css?v=${A}`:void 0,cacheKey:A})||u}}}),n},"createMarked"),v=m(async e=>{const t=await(0,c.readdir)(e),r=[];for(const a of t){const n=o.default.extname(a);/^[._]/.test(a)||(n?r.push(o.default.join(e,a)):/(stylesheets|assets|scripts)/.test(a)||r.push(...await v(o.default.join(e,a))))}return r},"traverseDirectory"),Ne=m(async({srcDir:e,publicDir:t,markedOptions:r,template:a,siteUrl:n,generatedFiles:u}={})=>{A=Date.now().toString(36);try{const s=o.default.resolve(process.cwd(),"package.json");f.default.existsSync(s)&&(V=JSON.parse(await(0,c.readFile)(s,"utf-8")))}catch(s){console.warn("Failed to load project package.json metadata",s)}const P=m(()=>{try{return __dirname}catch{return o.default.dirname((0,$.fileURLToPath)(ze.url))}},"getDirname"),y=a?o.default.resolve(P(),"templates",a):null,k=y?o.default.resolve(y,"assets"):null,T=y?o.default.resolve(y,"stylesheets"):null,D=y?o.default.resolve(y,"layouts"):null;let M={};if(y)try{let s=o.default.resolve(y,"template.config.js");if(f.default.existsSync(s)||(s=s.replace(/\.js$/,".ts")),f.default.existsSync(s)){const i=await import((0,$.pathToFileURL)(s).href);M=i.default||i}}catch(s){console.error(`Failed to load template config for ${a}`,s)}const d=e??o.default.resolve(process.cwd(),"docs"),p=t??o.default.resolve(process.cwd(),"website"),ue=Ge(u),S=o.default.resolve(d,"_template"),B=o.default.resolve(S,"assets"),N=o.default.resolve(S,"stylesheets"),U=o.default.resolve(S,"scripts"),z=o.default.resolve(S,"layouts"),q=o.default.resolve(d,"_layouts"),F=o.default.resolve(d,"assets"),H=o.default.resolve(d,"stylesheets"),L=o.default.resolve(d,"scripts");try{let s=o.default.resolve(S,"template.config.js");if(f.default.existsSync(s)||(s=s.replace(/\.js$/,".ts")),f.default.existsSync(s)){const i=await import((0,$.pathToFileURL)(s).href),l=i.default||i;M=xe(M,l)}}catch(s){console.error("Failed to load docs _template config",s)}const fe=Be(M,r);if(await(0,c.mkdir)(p,{recursive:!0}),k&&f.default.existsSync(k))try{await(0,c.cp)(k,F.replace(d,p),{recursive:!0})}catch(s){console.warn(s)}if(f.default.existsSync(F))try{await(0,c.cp)(F,F.replace(d,p),{recursive:!0})}catch(s){console.warn(s)}if(f.default.existsSync(B))try{await(0,c.cp)(B,o.default.resolve(p,"assets"),{recursive:!0})}catch(s){console.warn(s)}await Fe(o.default.resolve(p,"assets"));try{const s=new Set;if(T&&f.default.existsSync(T)&&(await v(T)).forEach(l=>s.add(l)),f.default.existsSync(H)&&(await v(H)).forEach(l=>s.add(l)),f.default.existsSync(N)&&(await v(N)).forEach(l=>s.add(l)),s.size){await(0,c.mkdir)(o.default.join(p,"stylesheets"),{recursive:!0});for(const l of s){const h=await(0,c.readFile)(l,"utf-8"),g=Y.minify(h);g.errors.length&&g.errors.forEach(console.error);const C=l.startsWith(S)?l.replace(S,p):l.startsWith(d)?l.replace(d,p):o.default.join(p,"stylesheets",o.default.basename(l));await(0,c.writeFile)(C,g.styles??h)}}const i=ke(M.theme);if(i){const l=Y.minify(i);l.errors.length&&l.errors.forEach(console.error),await(0,c.mkdir)(o.default.join(p,"stylesheets"),{recursive:!0}),await(0,c.writeFile)(o.default.join(p,"stylesheets","theme.css"),l.styles??i)}}catch(s){console.error(s)}if(f.default.existsSync(L))try{const s=await v(L);s.length&&await(0,c.mkdir)(L.replace(d,p),{recursive:!0});for(const i of s)try{const l=await(0,c.readFile)(i,"utf-8");await(0,c.writeFile)(i.replace(d,p),X.minify(l))}catch(l){console.error(l)}}catch(s){console.warn(s)}if(f.default.existsSync(U))try{const s=await v(U);s.length&&await(0,c.mkdir)(o.default.join(p,"scripts"),{recursive:!0});for(const i of s)try{const l=await(0,c.readFile)(i,"utf-8");await(0,c.writeFile)(i.replace(S,p),X.minify(l))}catch(l){console.error(l)}}catch(s){console.warn(s)}try{const s=new Map;D&&f.default.existsSync(D)&&(await v(D)).forEach(i=>{/\.(j|t)s$/.test(i)&&s.set(o.default.basename(i).replace(/\.(j|t)s$/,""),i)}),f.default.existsSync(q)&&(await v(q)).forEach(i=>{/\.(j|t)s$/.test(i)&&s.set(o.default.basename(i).replace(/\.(j|t)s$/,""),i)}),f.default.existsSync(z)&&(await v(z)).forEach(i=>{/\.(j|t)s$/.test(i)&&s.set(o.default.basename(i).replace(/\.(j|t)s$/,""),i)});for(const[i,l]of s.entries()){const h=await import((0,$.pathToFileURL)(l).href);R.set(i,h.default)}}catch(s){console.error("Template import failed",s)}const pe=await v(d),I=new Map,J=(await Promise.all(pe.filter(s=>s.endsWith(".md")).map(async s=>{const i=await(0,c.readFile)(s,"utf-8");return{filePath:s,...(0,re.default)(i)}}))).sort((s,i)=>(s.attributes.order??0)-(i.attributes.order??0)).map(({attributes:s,body:i,filePath:l})=>{const h=l.replace(d,"").replace(/\.md/,".html"),g=l.replace(d,p).replace(".md",".html"),C=g.replace(o.default.basename(g),""),E=o.default.basename(h)||"/",de=h.replace(E,"").replace(/\/$/,"");let b=I;de.split("/").filter(Boolean).forEach(O=>{b.has(O)||b.set(O,new Map),b=b.get(O)});const K={...s,path:h};return b.has(E)||b.set(E,K),{attributes:K,fileWebsitePath:g,fileDirWebsitePath:C,body:i,sourcePath:o.default.relative(d,l),siteMap:I}});for(const{attributes:s,body:i,fileDirWebsitePath:l,fileWebsitePath:h,siteMap:g}of J){W={attributes:s,siteMap:g};const C=await fe.parse(i);await(0,c.mkdir)(l,{recursive:!0}),await(0,c.writeFile)(h,me.default.minify(C,{includeAutoGeneratedTags:!0,removeAttributeQuotes:!0,removeComments:!0,removeRedundantAttributes:!0,removeScriptTypeAttributes:!0,removeStyleLinkTypeAttributes:!0,sortClassName:!0,useShortDoctype:!0,collapseWhitespace:!0,minifyJS:!0,minifyCSS:!0}))}await _e({docsDir:d,docsSiteDir:p,pages:J.map(({attributes:s,body:i,sourcePath:l})=>{const h=Ce(String(s.path)),g=Me(i);return{sourcePath:l,urlPath:h,title:String(s.title||s.name||"").trim()||"Documentation",name:String(s.name||s.title||"").trim()||"Documentation",description:String(s.description||"").trim()||g.slice(0,156)||"Documentation page.",order:Number(s.order??999),summary:g.slice(0,320)}}),siteUrl:n,publicDir:p,generatedFiles:ue})},"buildDocs");0&&(module.exports={buildDocs});