@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,14 +1,16 @@
1
- var oe=Object.defineProperty;var c=(e,t)=>oe(e,"name",{value:t,configurable:!0});import{Marked as ae}from"marked";import{cp as F,mkdir as v,readdir as ne,readFile as M,writeFile as b}from"fs/promises";import o from"path";import ie from"front-matter";import le from"isomorphic-dompurify";import{markedHighlight as ce}from"marked-highlight";import Q from"highlight.js";import me from"./templates/default.template.js";import ue from"./renderer/index.js";import{createMarkdownLayoutExtension as pe}from"./markdown-layout/index.js";import fe from"clean-css";import de from"html-minifier";import*as X from"@putout/minify";import{fileURLToPath as he,pathToFileURL as A}from"url";import p from"fs";let K;const V=new fe({inline:["none"]}),R=new Map;R.set("default",me);let W;const ge=c((e,t)=>{if(!(!e&&!t))return{light:{...e?.light,...t?.light},dark:{...e?.dark,...t?.dark}}},"mergeTheme"),ye=c((e,t)=>({...e,...t,markdownLayouts:{...e.markdownLayouts,...t.markdownLayouts},scripts:{...e.scripts,...t.scripts},theme:ge(e.theme,t.theme)}),"mergeTemplateConfig"),we=c((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(i=>t.includes(i)):r instanceof RegExp?r.test(t):r(t):!0},"scriptMatches"),ve=c((e,t)=>e?Object.values(e).filter(r=>r!==!1).filter(r=>we(r,t)).map(r=>typeof r=="function"?r():r.render()):[],"renderPageScripts"),G=c((e,t)=>{const r=Object.entries(t).filter(([i])=>i.startsWith("--")).map(([i,l])=>` ${i}: ${l};`).join(`
1
+ var ne=Object.defineProperty;var c=(e,t)=>ne(e,"name",{value:t,configurable:!0});import{Marked as ie}from"marked";import{cp as C,mkdir as v,readdir as le,readFile as j,writeFile as b}from"fs/promises";import o from"path";import ce from"front-matter";import me from"isomorphic-dompurify";import{markedHighlight as ue}from"marked-highlight";import Q from"highlight.js";import fe from"./templates/default.template.js";import pe from"./renderer/index.js";import{createMarkdownLayoutExtension as de}from"./markdown-layout/index.js";import he from"clean-css";import ge from"html-minifier";import*as X from"@putout/minify";import{fileURLToPath as ye,pathToFileURL as A}from"url";import u from"fs";let V,R="";const Y=new he({inline:["none"]}),W=new Map;W.set("default",fe);let _;const Z=c((e,t)=>t===!1?!1:t===void 0?e:e===!1||e===void 0?t:{...e,...t},"mergeThemeMode"),we=c((e,t)=>{if(!(!e&&!t))return{light:Z(e?.light,t?.light),dark:Z(e?.dark,t?.dark)}},"mergeTheme"),ve=c((e,t)=>({...e,...t,markdownLayouts:{...e.markdownLayouts,...t.markdownLayouts},scripts:{...e.scripts,...t.scripts},theme:we(e.theme,t.theme)}),"mergeTemplateConfig"),Se=c((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"),De=c((e,t)=>e?Object.values(e).filter(r=>r!==!1).filter(r=>Se(r,t)).map(r=>typeof r=="function"?r():r.render()):[],"renderPageScripts"),G=c((e,t)=>{const r=Object.entries(t).filter(([a])=>a.startsWith("--")).map(([a,i])=>` ${a}: ${i};`).join(`
2
2
  `);return r?`${e} {
3
3
  ${r}
4
- }`:""},"renderThemeBlock"),xe=c(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"),be=c(e=>{if(!e)return"";const t=e.light===!1,r=e.dark===!1,a=e.light===!1?void 0:e.light,i=r?void 0:e.dark,m=a||i;return m?[G(":root",m),i&&!t?`@media (prefers-color-scheme: dark) {
5
+ ${G(" :root",i)}
6
+ }`:"",a?G('[data-theme="light"]',a):"",i?G('[data-theme="dark"]',i):"",t&&i?`.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"),Se=c((e="")=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;"),"escapeXML"),be=c((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"),De=c(e=>e==="/index.html"?"/":e.replace(/\/index\.html$/,"/").replace(/\.html$/,"").replace(/\/+/g,"/"),"pagePathToUrlPath"),Y=c((e,t)=>e?`${e.replace(/\/$/,"")}${t==="/"?"/":t}`:t,"canonicalUrl"),$e=c(async(e,t)=>p.existsSync(e)?(await v(o.dirname(t),{recursive:!0}),await F(e,t),!0):!1,"copyIfExists"),Pe=c(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"),ke=c((e,t)=>{if(!t)return"";const r=new Date().toISOString().slice(0,10);return`<?xml version="1.0" encoding="UTF-8"?>
10
+ `):""},"renderThemeStylesheet"),xe=c((e="")=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;"),"escapeXML"),$e=c((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"),Pe=c(e=>e==="/index.html"?"/":e.replace(/\/index\.html$/,"/").replace(/\.html$/,"").replace(/\/+/g,"/"),"pagePathToUrlPath"),ee=c((e,t)=>e?`${e.replace(/\/$/,"")}${t==="/"?"/":t}`:t,"canonicalUrl"),ke=c(async(e,t)=>u.existsSync(e)?(await v(o.dirname(t),{recursive:!0}),await C(e,t),!0):!1,"copyIfExists"),Te=c(async e=>{const t=o.resolve(e,"logo.svg");u.existsSync(t)&&await Promise.all(["logo.light.svg","logo.dark.svg"].map(async r=>{const a=o.resolve(e,r);u.existsSync(a)||await C(t,a)}))},"ensureLogoModeAssets"),Me=c(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=c((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(l=>{const m=l.urlPath==="/"?"1.0":"0.8";return` <url>
11
- <loc>${Se(Y(t,l.urlPath))}</loc>
12
+ ${e.map(i=>{const m=i.urlPath==="/"?"1.0":"0.8";return` <url>
13
+ <loc>${xe(ee(t,i.urlPath))}</loc>
12
14
  <lastmod>${r}</lastmod>
13
15
  <changefreq>weekly</changefreq>
14
16
  <priority>${m}</priority>
@@ -21,28 +23,28 @@ ${e?`
21
23
  Sitemap: ${e.replace(/\/$/,"")}/sitemap.xml
22
24
  Host: ${e.replace(/\/$/,"")}
23
25
  `:""}
24
- `,"generateRobots"),Te=c(e=>`# Documentation
26
+ `,"generateRobots"),Fe=c(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"),Me=c((e,t)=>`# Documentation for AI agents
32
+ `,"generateLlms"),Ge=c((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"),Ce=c((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(l=>r.push(`/${l} /${l} 200`)),e.forEach(l=>{if(l.urlPath==="/")return;const m=l.urlPath.endsWith("/")?`${l.urlPath}index.html`:`${l.urlPath}.html`;r.push(`${l.urlPath} ${m} 200`),l.urlPath.endsWith("/")&&r.push(`${l.urlPath.replace(/\/$/,"")} ${m} 200`)}),`${[...new Set(r)].join(`
45
+ `,"generateLlmsFull"),Le=c((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 m=i.urlPath.endsWith("/")?`${i.urlPath}index.html`:`${i.urlPath}.html`;r.push(`${i.urlPath} ${m} 200`),i.urlPath.endsWith("/")&&r.push(`${i.urlPath.replace(/\/$/,"")} ${m} 200`)}),`${[...new Set(r)].join(`
44
46
  `)}
45
- `},"generateNetlifyRedirects"),Fe=c(e=>`[build]
47
+ `},"generateNetlifyRedirects"),Ee=c(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=c(async(e,t,r,i)=>{if(await $e(e,t))return;const l=r();if(!l){i&&console.warn(i);return}await v(o.dirname(t),{recursive:!0}),await b(t,l)},"writeGeneratedFile"),Ge=c(async({docsDir:e,docsSiteDir:t,pages:r,siteUrl:i,publicDir:l,generatedFiles:m})=>{m.sitemap&&await D(o.resolve(e,"sitemap.xml"),o.resolve(t,"sitemap.xml"),()=>ke(r,i),"Skipping generated sitemap.xml because buildDocs({ siteUrl }) is not set."),m.robots&&await D(o.resolve(e,"robots.txt"),o.resolve(t,"robots.txt"),()=>je(i)),m.llms&&await D(o.resolve(e,"llms.txt"),o.resolve(t,"llms.txt"),()=>Te(r)),m.llmsFull&&await D(o.resolve(e,"llms-full.txt"),o.resolve(t,"llms-full.txt"),()=>Me(r,i)),m.netlify&&(await D(o.resolve(e,"_redirects"),o.resolve(t,"_redirects"),()=>Ce(r,m)),await D(o.resolve(e,"netlify.toml"),o.resolve(t,"netlify.toml"),()=>Fe(l&&o.basename(l))))},"writeGeneratedDocsFiles"),Z=c((e={},t,r)=>{const i=new ae(ce({langPrefix:"hljs language-",highlight(l,m){const $=Q.getLanguage(m)?m:"plaintext";return Q.highlight(l,{language:$}).value}}));return i.use({renderer:ue}),i.use(pe({marked:i,handlers:e.markdownLayouts,renderMarkdown:r})),e.markedOptions&&i.use(e.markedOptions),t&&i.use(t),i},"createBaseMarked"),Ee=c((e={},t)=>{const r=Z(e,t),i=c(m=>r.parse(m),"renderMarkdown"),l=Z(e,t,i);return l.use({hooks:{postprocess(m){const{layout:$="default",...g}=W.attributes,P=ve(e.scripts,m);m=le.sanitize(m);const k=[...m.matchAll(/<h([0-6])\sid="[^"]+".*?>.*?<a\s+href="([^"]+)".*?>([^<]+)<\/a>/gm)].map(x=>({path:x[2],label:x[3],level:x[1]}));return R.get($)?.({...g,content:m,siteMap:W.siteMap,tableOfContent:k,projectMeta:K,renderMarkdown:i,scripts:P,themeStylesheet:e.theme?"/stylesheets/theme.css":void 0})||m}}}),l},"createMarked"),y=c(async e=>{const t=await ne(e),r=[];for(const i of t){const l=o.extname(i);/^[._]/.test(i)||(l?r.push(o.join(e,i)):/(stylesheets|assets|scripts)/.test(i)||r.push(...await y(o.join(e,i))))}return r},"traverseDirectory"),ot=c(async({srcDir:e,publicDir:t,markedOptions:r,template:i,siteUrl:l,generatedFiles:m}={})=>{try{const s=o.resolve(process.cwd(),"package.json");p.existsSync(s)&&(K=JSON.parse(await M(s,"utf-8")))}catch(s){console.warn("Failed to load project package.json metadata",s)}const $=c(()=>{try{return __dirname}catch{return o.dirname(he(import.meta.url))}},"getDirname"),g=i?o.resolve($(),"templates",i):null,P=g?o.resolve(g,"assets"):null,k=g?o.resolve(g,"stylesheets"):null,x=g?o.resolve(g,"layouts"):null;let j={};if(g)try{let s=o.resolve(g,"template.config.js");if(p.existsSync(s)||(s=s.replace(/\.js$/,".ts")),p.existsSync(s)){const a=await import(A(s).href);j=a.default||a}}catch(s){console.error(`Failed to load template config for ${i}`,s)}const f=e??o.resolve(process.cwd(),"docs"),u=t??o.resolve(process.cwd(),"website"),ee=Pe(m),w=o.resolve(f,"_template"),_=o.resolve(w,"assets"),B=o.resolve(w,"stylesheets"),N=o.resolve(w,"scripts"),U=o.resolve(w,"layouts"),z=o.resolve(f,"_layouts"),C=o.resolve(f,"assets"),q=o.resolve(f,"stylesheets"),E=o.resolve(f,"scripts");try{let s=o.resolve(w,"template.config.js");if(p.existsSync(s)||(s=s.replace(/\.js$/,".ts")),p.existsSync(s)){const a=await import(A(s).href),n=a.default||a;j=ye(j,n)}}catch(s){console.error("Failed to load docs _template config",s)}const te=Ee(j,r);if(await v(u,{recursive:!0}),P&&p.existsSync(P))try{await F(P,C.replace(f,u),{recursive:!0})}catch(s){console.warn(s)}if(p.existsSync(C))try{await F(C,C.replace(f,u),{recursive:!0})}catch(s){console.warn(s)}if(p.existsSync(_))try{await F(_,o.resolve(u,"assets"),{recursive:!0})}catch(s){console.warn(s)}try{const s=new Set;if(k&&p.existsSync(k)&&(await y(k)).forEach(n=>s.add(n)),p.existsSync(q)&&(await y(q)).forEach(n=>s.add(n)),p.existsSync(B)&&(await y(B)).forEach(n=>s.add(n)),s.size){await v(o.join(u,"stylesheets"),{recursive:!0});for(const n of s){const d=await M(n,"utf-8"),h=V.minify(d);h.errors.length&&h.errors.forEach(console.error);const T=n.startsWith(w)?n.replace(w,u):n.startsWith(f)?n.replace(f,u):o.join(u,"stylesheets",o.basename(n));await b(T,h.styles??d)}}const a=xe(j.theme);if(a){const n=V.minify(a);n.errors.length&&n.errors.forEach(console.error),await v(o.join(u,"stylesheets"),{recursive:!0}),await b(o.join(u,"stylesheets","theme.css"),n.styles??a)}}catch(s){console.error(s)}if(p.existsSync(E))try{const s=await y(E);s.length&&await v(E.replace(f,u),{recursive:!0});for(const a of s)try{const n=await M(a,"utf-8");await b(a.replace(f,u),X.minify(n))}catch(n){console.error(n)}}catch(s){console.warn(s)}if(p.existsSync(N))try{const s=await y(N);s.length&&await v(o.join(u,"scripts"),{recursive:!0});for(const a of s)try{const n=await M(a,"utf-8");await b(a.replace(w,u),X.minify(n))}catch(n){console.error(n)}}catch(s){console.warn(s)}try{const s=new Map;x&&p.existsSync(x)&&(await y(x)).forEach(a=>{/\.(j|t)s$/.test(a)&&s.set(o.basename(a).replace(/\.(j|t)s$/,""),a)}),p.existsSync(z)&&(await y(z)).forEach(a=>{/\.(j|t)s$/.test(a)&&s.set(o.basename(a).replace(/\.(j|t)s$/,""),a)}),p.existsSync(U)&&(await y(U)).forEach(a=>{/\.(j|t)s$/.test(a)&&s.set(o.basename(a).replace(/\.(j|t)s$/,""),a)});for(const[a,n]of s.entries()){const d=await import(A(n).href);R.set(a,d.default)}}catch(s){console.error("Template import failed",s)}const se=await y(f),H=new Map,I=(await Promise.all(se.filter(s=>s.endsWith(".md")).map(async s=>{const a=await M(s,"utf-8");return{filePath:s,...ie(a)}}))).sort((s,a)=>(s.attributes.order??0)-(a.attributes.order??0)).map(({attributes:s,body:a,filePath:n})=>{const d=n.replace(f,"").replace(/\.md/,".html"),h=n.replace(f,u).replace(".md",".html"),T=h.replace(o.basename(h),""),L=o.basename(d)||"/",re=d.replace(L,"").replace(/\/$/,"");let S=H;re.split("/").filter(Boolean).forEach(O=>{S.has(O)||S.set(O,new Map),S=S.get(O)});const J={...s,path:d};return S.has(L)||S.set(L,J),{attributes:J,fileWebsitePath:h,fileDirWebsitePath:T,body:a,sourcePath:o.relative(f,n),siteMap:H}});for(const{attributes:s,body:a,fileDirWebsitePath:n,fileWebsitePath:d,siteMap:h}of I){W={attributes:s,siteMap:h};const T=await te.parse(a);await v(n,{recursive:!0}),await b(d,de.minify(T,{includeAutoGeneratedTags:!0,removeAttributeQuotes:!0,removeComments:!0,removeRedundantAttributes:!0,removeScriptTypeAttributes:!0,removeStyleLinkTypeAttributes:!0,sortClassName:!0,useShortDoctype:!0,collapseWhitespace:!0,minifyJS:!0,minifyCSS:!0}))}await Ge({docsDir:f,docsSiteDir:u,pages:I.map(({attributes:s,body:a,sourcePath:n})=>{const d=De(String(s.path)),h=be(a);return{sourcePath:n,urlPath:d,title:String(s.title||s.name||"").trim()||"Documentation",name:String(s.name||s.title||"").trim()||"Documentation",description:String(s.description||"").trim()||h.slice(0,156)||"Documentation page.",order:Number(s.order??999),summary:h.slice(0,320)}}),siteUrl:l,publicDir:u,generatedFiles:ee})},"buildDocs");export{ot as buildDocs};
78
+ `,"generateNetlifyToml"),x=c(async(e,t,r,a)=>{if(await ke(e,t))return;const i=r();if(!i){a&&console.warn(a);return}await v(o.dirname(t),{recursive:!0}),await b(t,i)},"writeGeneratedFile"),Oe=c(async({docsDir:e,docsSiteDir:t,pages:r,siteUrl:a,publicDir:i,generatedFiles:m})=>{m.sitemap&&await x(o.resolve(e,"sitemap.xml"),o.resolve(t,"sitemap.xml"),()=>Ce(r,a),"Skipping generated sitemap.xml because buildDocs({ siteUrl }) is not set."),m.robots&&await x(o.resolve(e,"robots.txt"),o.resolve(t,"robots.txt"),()=>je(a)),m.llms&&await x(o.resolve(e,"llms.txt"),o.resolve(t,"llms.txt"),()=>Fe(r)),m.llmsFull&&await x(o.resolve(e,"llms-full.txt"),o.resolve(t,"llms-full.txt"),()=>Ge(r,a)),m.netlify&&(await x(o.resolve(e,"_redirects"),o.resolve(t,"_redirects"),()=>Le(r,m)),await x(o.resolve(e,"netlify.toml"),o.resolve(t,"netlify.toml"),()=>Ee(i&&o.basename(i))))},"writeGeneratedDocsFiles"),te=c((e={},t,r)=>{const a=new ie(ue({langPrefix:"hljs language-",highlight(i,m){const $=Q.getLanguage(m)?m:"plaintext";return Q.highlight(i,{language:$}).value}}));return a.use({renderer:pe}),a.use(de({marked:a,handlers:e.markdownLayouts,renderMarkdown:r})),e.markedOptions&&a.use(e.markedOptions),t&&a.use(t),a},"createBaseMarked"),Ae=c((e={},t)=>{const r=te(e,t),a=c(m=>r.parse(m),"renderMarkdown"),i=te(e,t,a);return i.use({hooks:{postprocess(m){const{layout:$="default",...g}=_.attributes,P=De(e.scripts,m);m=me.sanitize(m);const k=[...m.matchAll(/<h([0-6])\sid="[^"]+".*?>.*?<a\s+href="([^"]+)".*?>([^<]+)<\/a>/gm)].map(S=>({path:S[2],label:S[3],level:S[1]}));return W.get($)?.({...g,content:m,siteMap:_.siteMap,tableOfContent:k,projectMeta:V,renderMarkdown:a,scripts:P,themeStylesheet:e.theme?`/stylesheets/theme.css?v=${R}`:void 0,cacheKey:R})||m}}}),i},"createMarked"),y=c(async e=>{const t=await le(e),r=[];for(const a of t){const i=o.extname(a);/^[._]/.test(a)||(i?r.push(o.join(e,a)):/(stylesheets|assets|scripts)/.test(a)||r.push(...await y(o.join(e,a))))}return r},"traverseDirectory"),lt=c(async({srcDir:e,publicDir:t,markedOptions:r,template:a,siteUrl:i,generatedFiles:m}={})=>{R=Date.now().toString(36);try{const s=o.resolve(process.cwd(),"package.json");u.existsSync(s)&&(V=JSON.parse(await j(s,"utf-8")))}catch(s){console.warn("Failed to load project package.json metadata",s)}const $=c(()=>{try{return __dirname}catch{return o.dirname(ye(import.meta.url))}},"getDirname"),g=a?o.resolve($(),"templates",a):null,P=g?o.resolve(g,"assets"):null,k=g?o.resolve(g,"stylesheets"):null,S=g?o.resolve(g,"layouts"):null;let T={};if(g)try{let s=o.resolve(g,"template.config.js");if(u.existsSync(s)||(s=s.replace(/\.js$/,".ts")),u.existsSync(s)){const n=await import(A(s).href);T=n.default||n}}catch(s){console.error(`Failed to load template config for ${a}`,s)}const p=e??o.resolve(process.cwd(),"docs"),f=t??o.resolve(process.cwd(),"website"),se=Me(m),w=o.resolve(p,"_template"),B=o.resolve(w,"assets"),N=o.resolve(w,"stylesheets"),U=o.resolve(w,"scripts"),z=o.resolve(w,"layouts"),q=o.resolve(p,"_layouts"),F=o.resolve(p,"assets"),H=o.resolve(p,"stylesheets"),L=o.resolve(p,"scripts");try{let s=o.resolve(w,"template.config.js");if(u.existsSync(s)||(s=s.replace(/\.js$/,".ts")),u.existsSync(s)){const n=await import(A(s).href),l=n.default||n;T=ve(T,l)}}catch(s){console.error("Failed to load docs _template config",s)}const re=Ae(T,r);if(await v(f,{recursive:!0}),P&&u.existsSync(P))try{await C(P,F.replace(p,f),{recursive:!0})}catch(s){console.warn(s)}if(u.existsSync(F))try{await C(F,F.replace(p,f),{recursive:!0})}catch(s){console.warn(s)}if(u.existsSync(B))try{await C(B,o.resolve(f,"assets"),{recursive:!0})}catch(s){console.warn(s)}await Te(o.resolve(f,"assets"));try{const s=new Set;if(k&&u.existsSync(k)&&(await y(k)).forEach(l=>s.add(l)),u.existsSync(H)&&(await y(H)).forEach(l=>s.add(l)),u.existsSync(N)&&(await y(N)).forEach(l=>s.add(l)),s.size){await v(o.join(f,"stylesheets"),{recursive:!0});for(const l of s){const d=await j(l,"utf-8"),h=Y.minify(d);h.errors.length&&h.errors.forEach(console.error);const M=l.startsWith(w)?l.replace(w,f):l.startsWith(p)?l.replace(p,f):o.join(f,"stylesheets",o.basename(l));await b(M,h.styles??d)}}const n=be(T.theme);if(n){const l=Y.minify(n);l.errors.length&&l.errors.forEach(console.error),await v(o.join(f,"stylesheets"),{recursive:!0}),await b(o.join(f,"stylesheets","theme.css"),l.styles??n)}}catch(s){console.error(s)}if(u.existsSync(L))try{const s=await y(L);s.length&&await v(L.replace(p,f),{recursive:!0});for(const n of s)try{const l=await j(n,"utf-8");await b(n.replace(p,f),X.minify(l))}catch(l){console.error(l)}}catch(s){console.warn(s)}if(u.existsSync(U))try{const s=await y(U);s.length&&await v(o.join(f,"scripts"),{recursive:!0});for(const n of s)try{const l=await j(n,"utf-8");await b(n.replace(w,f),X.minify(l))}catch(l){console.error(l)}}catch(s){console.warn(s)}try{const s=new Map;S&&u.existsSync(S)&&(await y(S)).forEach(n=>{/\.(j|t)s$/.test(n)&&s.set(o.basename(n).replace(/\.(j|t)s$/,""),n)}),u.existsSync(q)&&(await y(q)).forEach(n=>{/\.(j|t)s$/.test(n)&&s.set(o.basename(n).replace(/\.(j|t)s$/,""),n)}),u.existsSync(z)&&(await y(z)).forEach(n=>{/\.(j|t)s$/.test(n)&&s.set(o.basename(n).replace(/\.(j|t)s$/,""),n)});for(const[n,l]of s.entries()){const d=await import(A(l).href);W.set(n,d.default)}}catch(s){console.error("Template import failed",s)}const oe=await y(p),I=new Map,J=(await Promise.all(oe.filter(s=>s.endsWith(".md")).map(async s=>{const n=await j(s,"utf-8");return{filePath:s,...ce(n)}}))).sort((s,n)=>(s.attributes.order??0)-(n.attributes.order??0)).map(({attributes:s,body:n,filePath:l})=>{const d=l.replace(p,"").replace(/\.md/,".html"),h=l.replace(p,f).replace(".md",".html"),M=h.replace(o.basename(h),""),E=o.basename(d)||"/",ae=d.replace(E,"").replace(/\/$/,"");let D=I;ae.split("/").filter(Boolean).forEach(O=>{D.has(O)||D.set(O,new Map),D=D.get(O)});const K={...s,path:d};return D.has(E)||D.set(E,K),{attributes:K,fileWebsitePath:h,fileDirWebsitePath:M,body:n,sourcePath:o.relative(p,l),siteMap:I}});for(const{attributes:s,body:n,fileDirWebsitePath:l,fileWebsitePath:d,siteMap:h}of J){_={attributes:s,siteMap:h};const M=await re.parse(n);await v(l,{recursive:!0}),await b(d,ge.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 Oe({docsDir:p,docsSiteDir:f,pages:J.map(({attributes:s,body:n,sourcePath:l})=>{const d=Pe(String(s.path)),h=$e(n);return{sourcePath:l,urlPath:d,title:String(s.title||s.name||"").trim()||"Documentation",name:String(s.name||s.title||"").trim()||"Documentation",description:String(s.description||"").trim()||h.slice(0,156)||"Documentation page.",order:Number(s.order??999),summary:h.slice(0,320)}}),siteUrl:i,publicDir:f,generatedFiles:se})},"buildDocs");export{lt as buildDocs};