@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.
- package/README.md +839 -142
- package/dist/cjs/docs/run.js +16 -14
- package/dist/cjs/docs/templates/fading-citrus/README.md +772 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/logo.dark.svg +8 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/logo.light.svg +8 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/logo.svg +8 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_footer.js +13 -6
- package/dist/cjs/docs/templates/fading-citrus/layouts/_head-meta.js +3 -2
- package/dist/cjs/docs/templates/fading-citrus/layouts/_header.js +9 -4
- package/dist/cjs/docs/templates/fading-citrus/layouts/document.js +3 -2
- package/dist/cjs/docs/templates/fading-citrus/layouts/landing.js +4 -2
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/common.css +135 -50
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/documentation.css +32 -24
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +12 -12
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +22 -22
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/landing.css +74 -87
- package/dist/cjs/docs/templates/fading-citrus/template.config.js +106 -15
- package/dist/cjs/docs/types.js +1 -1
- package/dist/esm/docs/run.js +15 -13
- package/dist/esm/docs/templates/fading-citrus/README.md +772 -0
- package/dist/esm/docs/templates/fading-citrus/assets/logo.dark.svg +8 -0
- package/dist/esm/docs/templates/fading-citrus/assets/logo.light.svg +8 -0
- package/dist/esm/docs/templates/fading-citrus/assets/logo.svg +8 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_footer.js +13 -6
- package/dist/esm/docs/templates/fading-citrus/layouts/_head-meta.js +3 -2
- package/dist/esm/docs/templates/fading-citrus/layouts/_header.js +9 -4
- package/dist/esm/docs/templates/fading-citrus/layouts/document.js +3 -2
- package/dist/esm/docs/templates/fading-citrus/layouts/landing.js +4 -2
- package/dist/esm/docs/templates/fading-citrus/stylesheets/common.css +135 -50
- package/dist/esm/docs/templates/fading-citrus/stylesheets/documentation.css +32 -24
- package/dist/esm/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +12 -12
- package/dist/esm/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +22 -22
- package/dist/esm/docs/templates/fading-citrus/stylesheets/landing.css +74 -87
- package/dist/esm/docs/templates/fading-citrus/template.config.js +106 -15
- package/dist/types/docs/types.d.ts +4 -2
- package/package.json +1 -1
- package/dist/cjs/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_logo.js +0 -31
- package/dist/esm/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_logo.js +0 -31
package/dist/esm/docs/run.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
var
|
|
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"),
|
|
5
|
-
${G(" :root",
|
|
6
|
-
}`:"",
|
|
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"),
|
|
10
|
+
`):""},"renderThemeStylesheet"),xe=c((e="")=>String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),"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(
|
|
11
|
-
<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"),
|
|
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"),
|
|
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: ${
|
|
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"),
|
|
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"),
|
|
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"),
|
|
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};
|