UNPKG

@dovenv/docs

Version:

Documentation utils for dovenv

143 lines (137 loc) 28 kB
import{deepmergeCustom as k,joinPath as u,existsPath as b,relativePath as L,joinUrl as w,resolvePath as R,getMediaPalette as K,chroma as g,isAbsolutePath as A,color as I,getPackageRepoUrlFromContent as Y,process as v,copyDir as q,removeDirIfExist as Q,createMergeDataFn as X,fileURLToPath as Z,getExtName as tt,getDirName as O,getObjectFromJSONFile as et,isDev as ot,truncate as S,existsFile as T,performance as rt,image2DataUri as at,deepmerge as it,camel2Snake as F,getBaseName as st,getCurrentDir as nt}from"@dovenv/core/utils";import{mergeConfig as $}from"vitepress";import{transformerTwoslash as ct}from"@shikijs/vitepress-twoslash";import G from"markdown-it-container";import lt from"markdown-it-task-lists";import{groupIconMdPlugin as dt,groupIconVitePlugin as pt}from"vitepress-plugin-group-icons";import{Resvg as gt}from"@resvg/resvg-js";import{writeFile as ut}from"node:fs/promises";import ft from"satori";import{html as ht}from"satori-html";import mt from"vite-plugin-restart";import vt from"vitepress-plugin-llmstxt";import{RssPlugin as bt}from"vitepress-plugin-rss";import{createAppleSplashScreens as yt,minimal2023Preset as wt}from"@vite-pwa/assets-generator/config";import{VitePWA as xt}from"vite-plugin-pwa";const Ct=k({}),j={image:"public/logo.png",overrideManifestIcons:!0,includeHtmlHeadLinks:!0,preset:{...wt,appleSplashScreens:yt({padding:.3,resizeOptions:{fit:"contain",background:"white"},darkResizeOptions:{fit:"contain",background:"black"},linkMediaOptions:{log:!0,addMediaScreen:!0,xhtml:!0}},['iPad Air 9.7"'])}},Dt=async t=>{const{config:e,data:o}=t;if(!e||!o){console.warn(`PWA error: no config or data found `);return}if(e.pwa===!1)return;const a=e.pwa?.pwaAssets?.image||"public/logo.png",i=u(o.srcDir,a);if(console.debug(["PWA [paths]",{out:o.outDir,src:o.srcDir,imagePath:i,image:a}]),!await b(i)){console.warn(`Disable PWA, because image [${i}] does not exists `);return}let r={pwaAssets:{...j,image:a,integration:{baseUrl:"/",publicDir:u(o.srcDir,"public"),outDir:o.outDir}},mode:"development",injectRegister:"script-defer",registerType:"autoUpdate",strategies:"generateSW",workbox:{globDirectory:L(process.cwd(),o.srcDir),globPatterns:["**/*.{css,js,html,svg,png,ico,txt,woff2}"],swDest:u(o.outDir,"sw.js")},devOptions:{enabled:!0,navigateFallback:"/"},manifest:{description:e.desc,name:e.name,short_name:e.name,start_url:"/?source=pwa",theme_color:e.styles?.color?.primary,background_color:e.styles?.color?.dark?.bg,id:o.devMode?void 0:e.url,display:"standalone"},outDir:L(process.cwd(),o.outDir)};return e.pwa&&(r=Ct(r,e.pwa)),console.debug(["PWA [config]",r]),r},kt=async t=>{const{config:e,data:o}=t;if(e.pwa===!1)return{vite:void 0,transformHead:void 0,buildEnd:void 0};let a;return{vite:{plugins:[...xt(await Dt({config:e,data:o})),{name:"vite-plugin-pwa:vitepress",apply:"build",enforce:"post",configResolved(i){i.build.ssr||(a=i.plugins.find(r=>r.name==="vite-plugin-pwa")?.api)}},{name:"vite-plugin-pwa:pwa-assets:vitepress",apply:"serve",enforce:"pre",configResolved(i){i.build.ssr||(a=i.plugins.find(r=>r.name==="vite-plugin-pwa")?.api)},async handleHotUpdate({file:i,server:r}){await(await a?.pwaAssetsGenerator())?.checkHotUpdate(i)&&await r.restart()}}]},transformHead:async i=>{const r=await a?.pwaAssetsGenerator();if(r){const c=r.resolveHtmlAssets();c.themeColor&&i.head.push(["meta",{name:"theme-color",content:c.themeColor.content}]);for(const l of c.links)i.head.push(["link",{...l}])}const s=a?.webManifestData();if(s){const c=s.href;s.useCredentials?i.head.push(["link",{rel:"manifest",href:c,crossorigin:"use-credentials"}]):i.head.push(["link",{rel:"manifest",href:c}])}const n=a?.registerSWData();return n&&n.shouldRegisterSW&&(n.mode==="inline"?i.head.push(["script",{id:"vite-plugin-pwa:inline-sw"},`if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('${n.inlinePath}', { scope: '${n.scope}' })})}`]):n.mode==="script-defer"?i.head.push(["script",{id:"vite-plugin-pwa:register-sw",defer:"defer",src:n.registerPath}]):i.head.push(["script",{id:"vite-plugin-pwa:register-sw",src:n.registerPath}])),i.head},buildEnd:async i=>{}}},x=k({}),$t=t=>t?{repoURL:t,contributingURL:w(t,"blob/main/CONTRIBUTING.md"),changelogURL:w(t,"blob/main/CHANGELOG.md"),license:{url:w(t,"blob/main/LICENSE")}}:{},Pt=(t,e,o,a,i)=>({url:t,rss:t?{title:e||"",language:o,description:a,baseUrl:t.endsWith("/")?t.slice(0,-1):t,copyright:`Copyright (c) ${new Date().getFullYear()}-present, ${e}`,ignoreHome:!0}:void 0}),Ot={input:"./docs",output:"./build",logo:"/logo.png",favicon:"/favicon.png",name:"DOVENV",desc:"Workspace documentation",license:{type:"MIT"},docsPath:"docs",lang:"en",titleTemplate:({title:t,name:e})=>`${t} | ${e}`},St=({desc:t,lang:e,name:o,url:a,repoURL:i,styles:r}={})=>x($t(i||void 0),Pt(a,o,e,t),{name:o,desc:t,styles:r,lang:e}),C={color:{primary:"#e8243d",secondary:"#ee683a",terciary:"#f49133",fourth:"#461411"},radius:"20px"},Vt=async(t,e,o,a)=>{const i=u(e,"public"),r=R(a,u(i,o));console.debug({logoPath:r});const s=await b(r);t.styles||(t.styles={}),t.styles.color||(t.styles.color={});let n;const c={primary:C.color.primary,secondary:C.color.secondary,terciary:C.color.terciary,fourth:C.color.fourth};if(s&&!t.styles.color.primary)try{const d=await K(r);n={primary:d[0],secondary:d[1],terciary:d[3],fourth:d[4]}}catch(d){console.warn(d instanceof Error?d.message:d),n=c}else if(t.styles.color.primary){const d=t.styles.color.primary;n={primary:g(d).hex(),secondary:g(d).darken(2).hex(),terciary:g(d).brighten(2).hex(),fourth:g(d).saturate(-2).hex()}}else n=c;const l={...n,dark:{text:g(n.primary).brighten(4).hex(),text2:g(n.primary).brighten(4).alpha(.8).hex(),text3:g(n.secondary).brighten(2).alpha(.8).hex(),bg:g(n.primary).darken(8).hex(),bgAlt:g(n.primary).darken(6).alpha(.8).hex(),bgSoft:g(n.secondary).darken(6).hex(),bgOpacity:g(n.terciary).darken(6).alpha(.5).hex(),shadow:g(n.secondary).brighten(4).alpha(.05).hex(),divider:g(n.secondary).brighten(4).alpha(.1).hex()},light:{text:g(n.primary).darken(4).hex(),text2:g(n.primary).darken(4).alpha(.8).hex(),text3:g(n.secondary).darken(2).alpha(.8).hex(),bg:g(n.primary).brighten(8).hex(),bgAlt:g(n.primary).brighten(6).alpha(.8).hex(),bgSoft:g(n.secondary).brighten(6).hex(),bgOpacity:g(n.terciary).brighten(6).alpha(.5).hex(),shadow:g(n.secondary).darken(4).alpha(.05).hex(),divider:g(n.secondary).darken(4).alpha(.1).hex()}},p=k({})({color:l,radius:C.radius},t?.styles||{});return t.styles=p,t},Et=async({root:t,fnConfig:e,pathConfig:o,packageConfig:a})=>{console.debug({root:t});const i=x(Ot,a||{},o||{},e||{}),r=await Vt(i,i.input,i.logo,t),s=await St(r),n=await x(s,r),c=A(n.input)?n.input:u(t,n.input),l=A(n.output)?n.output:u(t,n.output);if(await b(c)||(console.error(I.red(`Docs path not found in ${c} `)),process.exit(1)),n.contributors){const p=new Set;n.contributors=n.contributors.filter(d=>d.name&&!p.has(d.name)?(p.add(d.name),!0):!1)}return{config:n,default:s,srcDir:c,outDir:l}},V=async t=>{const e={};e.footer={copy:void 0,links:void 0},e.license={type:void 0,url:void 0},typeof t?.funding=="object"&&(Array.isArray(t.funding)?typeof t?.funding?.[0]=="object"&&typeof t.funding[0].url=="string"&&(e.fundingURL=t.funding[0].url):typeof t?.funding?.url=="string"&&(e.fundingURL=t.funding.url)),t?.repository&&(e.repoURL=Y(t)),typeof t?.bugs=="object"&&typeof t?.bugs?.url=="string"&&(e.bugsURL=t.bugs.url),t?.license&&(e.license.type=t.license),typeof t?.homepage=="string"&&(e.url=t.homepage),typeof t?.description=="string"&&(e.desc=t.description),typeof t?.extra?.productName=="string"?e.name=t.extra.productName:typeof t?.extra?.id=="string"?e.name=t.extra.id:typeof t?.name=="string"&&(e.name=t.name),typeof t?.version=="string"&&(e.version=t.version);const o=(p,d)=>{if(!p||!(typeof p=="object"&&"name"in p&&"url"in p&&typeof p.name=="string"&&typeof p.url=="string"))return[];const h=p.url.startsWith("https://github.com/");return[{name:p.name,title:d,avatar:h?p.url+".png":"",links:h?[{icon:"github",link:p.url}]:[]}]};if(e.contributors=[...o(t?.author,"Author")],t.contributors&&Array.isArray(t.contributors))for(let p=0;p<t.contributors.length;p++){const d=t.contributors[p];e.contributors.push(...o(d,"Contributor"))}if(!t.extra)return e;const a=t.extra.changelogURL||t.extra.changelogUrl,i=t.extra.licenseURL||t.extra.licenseUrl,r=t.extra.libraryURL||t.extra.libraryUrl,s=t.extra.collective?.url,n={web:t.extra.collective.web,email:t.extra.collective.email,...t.extra.collective.social},c=t.extra.shortDesc,l=t.extra.contributingURL||t.extra.contributingUrl;return e.footer.copy={name:t.extra.collective?.name||t.extra.collective?.id,url:t.extra.collective?.url},a&&(e.changelogURL=a),i&&(e.license.url=i),r&&(e.npmURL=r),s&&(e.moreURL=s),c&&(e.shortDesc=c),n&&(e.footer.links=n),l&&(e.contributingURL=l),e},_t=(t,e=0)=>{v.on("SIGINT",async()=>{await t(),v.exit(e)}),v.on("SIGTERM",async()=>{await t(),v.exit(e)}),v.on("beforeExit",async()=>{await t(),v.exit(e)})},M="\x1B[32m\u2713\x1B[0m",E="\x1B[31m\u2717\x1B[0m",Nt=async({config:t,data:e})=>{if(!t)return console.error("Unexpected: DOVENV configuration not found"),v.exit(1);if(!e)return console.error("Unexpected: DOVENV data not found"),v.exit(1);!e.devMode&&!t?.experimental?.noTempDirOnBuild&&(console.debug("Copy dir to temp dir"),await q({input:e.srcDir,output:e.tempDir}),e.srcDir=e.tempDir,_t(async()=>{console.debug(`Remove if exist temporary dir: ${e.tempDir}`),await Q(e.tempDir)}));const{srcDir:o}=e;if(t.logo){const a=u(o,"public",t.logo);console.debug({logoSrc:a}),await b(a)||(console.warn(`Disable "logo" because it does not exist at path [${a}].`),conf.logo=conf.logo=void 0)}if(t.favicon){const a=u(o,"public",t.favicon);console.debug({faviconSrc:a}),await b(a)||(console.warn(`Disable "favicon" because it does not exist at path [${a}].`),t.logo&&console.info('Changed the "favicon" path to the "logo" path because the "logo" path exists'),t.favicon=t.logo)}return t.favicon&&!t.logo&&(console.info('Changed the "logo" path to the "favicon" path because the "favicon" path exists'),t.logo=t.favicon),{data:e,config:t}},W="@dovenv/docs",Ut="1.6.1",Lt="https://dovenv.pigeonposse.com/guide/plugin/docs",Rt={"dovenv-docs":"dist/bin.mjs"},At={vitepress:"1.6.3"},It=At.vitepress,f={DOVENV_CONFIG_PATH:"DOVENV_CONFIG_PATH",DOVENV_UTILS:"DOVENV_UTILS",DOVENV_DOCS_CONFIG_PATH:"DOVENV_DOCS_CONFIG_PATH",DOVENV_DOCS_PKG_PATH:"DOVENV_DOCS_PKG_PATH",DOVENV_DOCS_CONFIG:"DOVENV_DOCS_CONFIG",DOVENV_DOCS_DATA:"DOVENV_DOCS_DATA",VITEPRESS_CONFIG:"VITEPRESS_CONFIG"},D=(t,e)=>{globalThis[f[t]]=e},y=t=>f[t]in globalThis?globalThis[f[t]]:void 0,Tt=Object.keys(Rt)[0],Ft=({configPath:t,packageJsonPath:e})=>{D(f.DOVENV_DOCS_CONFIG_PATH,t),D(f.DOVENV_DOCS_PKG_PATH,e)},Gt=()=>({configPath:y(f.DOVENV_DOCS_CONFIG_PATH),packageJsonPath:y(f.DOVENV_DOCS_PKG_PATH),dovenvConfigPath:y(f.DOVENV_CONFIG_PATH)});class jt{cwd;configPath;packagePath;dovenvConfigPath;constructor(){const e=Gt();this.cwd=v.cwd(),this.configPath=e.configPath,this.packagePath=e.packageJsonPath||u(this.cwd,"package.json"),this.dovenvConfigPath=e.dovenvConfigPath||Z(import.meta.url),console.debug({configPath:this.configPath,packagePath:this.packagePath,dovenvConfigPath:this.dovenvConfigPath})}async#t(){let e=this.configPath;if(!e||typeof e!="string")return;if(e=R(e),!await b(e))throw new Error(`A configuration route [${e}] does not exist`);const o=tt(e),a=O(e);o===".mjs"||o===".js"||o===".json"||(console.error("File type not supported. Use a .json, .mjs, or .js file."),v.exit(1));const{default:i}=await import(e+`?update=${Date.now()}`);return{config:i,path:e,dir:a}}async#e(){const e=await b(this.packagePath)?await et(this.packagePath):void 0;if(!e)return;const o=await V(e);return{dir:O(this.packagePath),path:this.packagePath,config:o}}async#o(){let e={};if(this.dovenvConfigPath){if(this.dovenvConfigPath)try{if(await b(this.dovenvConfigPath)){const{default:o}=await import(this.dovenvConfigPath+`?update=${Date.now()}`),a=o?.const?.pkg,i=o?.const?.[f.DOVENV_DOCS_CONFIG];if(i){let r;if(typeof i=="function"){const s=y(f.DOVENV_UTILS);if(!s)throw new Error(`Must exists global: ${f.DOVENV_UTILS}`);r=await i(s)}else r=i;e=x(r,e)}a&&(e=x(await V(a),e))}}catch(o){o instanceof Error?console.warn('Error getting fn config "pkg" data:',o?.message):console.warn('Error getting fn config "pkg" data:',o)}if(e)return{config:e,path:this.dovenvConfigPath,dir:O(this.dovenvConfigPath)}}}async#r(){const e=await this.#t(),o=await this.#e(),a=await this.#o(),i=this.cwd,r=ot(),s=await Et({root:i,fnConfig:a?.config,pathConfig:e?.config,packageConfig:o?.config}),n=s.config,c=u(s.outDir,".temp"),l=u(s.outDir,"docs"),p=u(s.outDir,".cache"),d=s.srcDir;return await Nt({config:n,data:{devMode:r,root:i,srcDir:d,outDir:l,tempDir:c,cacheDir:p,defaultConfig:s.default,pathConfig:e,fnConfig:a,packageConfig:o}})}async updateGlobals(){console.log(I.green(` \u2728 Update DOVENV globals `));const e=await this.#r();return D(f.DOVENV_DOCS_CONFIG_PATH,e.data.pathConfig?.path),D(f.DOVENV_DOCS_CONFIG,e.config),D(f.DOVENV_DOCS_DATA,e.data),console.debug("DOVENV_DOCS_DATA",e.data),console.debug("DOVENV_DOCS_CONFIG",e.config),{config:e.config,data:e.data}}}const Mt=X(),Wt=t=>{const e=a=>t.name+"-"+a+"-css",o=[];return t.llms===!1&&o.push(["style",{type:"text/css",id:e("llmstxt")},".llmstxt-section { display: none; }"]),t.css&&o.push(["style",{type:"text/css",id:e("user")},t.css]),o.push(["style",{type:"text/css",id:e("theme")},` :root { --pp-brand-1: ${t.styles.color.primary}; --pp-brand-2: ${t.styles.color.secondary}; --pp-brand-3: ${t.styles.color.terciary}; --pp-brand-4: ${t.styles.color.fourth}; --vp-c-text-1: ${t.styles.color.light.text}; --vp-c-text-2: ${t.styles.color.light.text2}; --vp-c-text-3:${t.styles.color.light.text3}; --vp-c-bg: ${t.styles.color.light.bg}; --vp-c-bg-alt: ${t.styles.color.light.bgAlt}; --vp-c-bg-elv: ${t.styles.color.light.bgSoft}; --vp-c-bg-soft: ${t.styles.color.light.bgSoft}; --vp-c-bg-opacity: ${t.styles.color.light.bgOpacity}; --vp-c-divider: ${t.styles.color.light.divider}; --pp-brand-shadow: ${t.styles.color.light.shadow}; --pp-radius: ${t.styles.radius}; --vp-c-brand-1: var(--pp-brand-2); --vp-c-brand-2: var(--pp-brand-1); --vp-c-brand-3: var(--pp-brand-3); --vp-sidebar-bg-color: var(--vp-c-bg); --vp-home-hero-name-color: transparent; --vp-home-hero-name-background: -webkit-linear-gradient(150deg, var(--pp-brand-2), var(--pp-brand-4), var(--pp-brand-3), var(--pp-brand-1)); --vp-home-hero-image-background-image: linear-gradient(150deg, var(--pp-brand-2), var(--pp-brand-4), var(--pp-brand-3), var(--pp-brand-1)); --vp-home-hero-image-filter: blur(56px); } .dark { --vp-c-text-1: ${t.styles.color.dark.text}; --vp-c-text-2: ${t.styles.color.dark.text2}; --vp-c-text-3:${t.styles.color.dark.text3}; --vp-c-bg: ${t.styles.color.dark.bg}; --vp-c-bg-alt: ${t.styles.color.dark.bgAlt}; --vp-c-bg-elv: ${t.styles.color.dark.bgSoft}; --vp-c-bg-soft: ${t.styles.color.dark.bgSoft}; --vp-c-bg-opacity: ${t.styles.color.dark.bgOpacity}; --vp-c-divider: ${t.styles.color.dark.divider}; --pp-brand-shadow: ${t.styles.color.dark.shadow}; } `]),o},Ht=t=>{t.use(G,"steps",{validate:e=>e.trim().match(/^steps\s*$/),render:(e,o)=>e[o].nesting===1?`<div class="steps"> `:`</div> `}),t.use(G,"step",{validate:e=>e.trim().match(/^step\s+([\w\s\S]+)/),render:(e,o)=>{const a=e[o];if(a.nesting===1){const i=a.info.trim().match(/^step\s+([\w\s\S]+)/);return`<div class="step"> <span class="step-number">${i?i[1].substring(0,1):""}</span> `}else return`</div> `}})},_="------------------------",Bt=({data:t,config:e})=>({config:o=>{o.use(lt),o.use(Ht),e.groupIcon!==!1&&o.use(dt)},codeTransformers:e.twoslash!==!1?[ct({throws:!t.devMode,onShikiError:o=>console[t.devMode?"warn":"error"](o),onTwoslashError:(o,a,i)=>console[t.devMode?"warn":"error"](`Twoslash (${i}) Error: ${_} ${o instanceof Error?o.message:""} ${_} ${a} ${_}`),...e.twoslash})]:void 0}),zt=async(t,e=400)=>{const o=`https://fonts.googleapis.com/css2?family=${t}:wght@${e}&display=swap`,a=(await(await fetch(o)).text()).match(/src: url\((.+)\) format\('(opentype|truetype)'\)/);if(a){const i=await fetch(a[1]);if(i.status==200)return await i.arrayBuffer()}throw new Error("failed to load font data")},Jt=async t=>{const e=t.width||1200,o=t.height||600,a=e/3,i=t.output||"./build/og.png",r={primary:t.color?.primary||"#fff",secondary:t.color?.secondary||"#fff",terciary:t.color?.terciary||"#fff",fourth:t.color?.fourth||"#fff",text:t.color?.text||"#fff",bg:t.color?.bg||"#000"},s=t.radius||"20px",n=t.fontFamily||"Open+Sans",c={text:400,desc:600,title:700},l={text:"25px",desc:"35px",title:"80px"},p=ht`<div style=" display: flex; justify-content: space-around; background-color: ${r.bg}; color: ${r.text}; align-items: center; flex-direction: row; height: 100%; width: 100%; padding: 60px; font-family: ${n}; gap: 20px; border-radius: ${s}; " > <div style=" display: flex; flex-direction: column; justify-content: center; flex: 1; " > <h1 style=" font-size: ${l.title}; font-weight: ${c.title}; margin: 0; color: ${r.primary}; " > ${S(t.title?.toUpperCase()||"",50)} </h1> <h3 style="font-size: ${l.desc}; opacity: 0.9; margin: 10px 0; font-weight: ${c.desc}"> ${S(t.desc||"",100)} </h3> <p style="font-size: ${l.text}; opacity: 0.8; margin: 0; font-weight: ${c.text}"> ${S(t.text||"",400)} </p> </div> <div style=" display: flex; position: relative; width: ${a}px; height: ${a}px; " > <div style=" display: flex; position: absolute; top: 50%; left: 50%; border-radius: 50%; width: ${a}px; height: ${a}px; transform: translate(-50%, -50%); background-image: linear-gradient(150deg, ${r.primary}, ${r.secondary}, ${r.terciary}, ${r.fourth}); opacity: 0.7; filter: blur(100px); " ></div> <img src="${t.image}" width="${a}" height="${a}" style=" position: absolute; top: 50%; left: 50%; width: 100%; max-width: ${a}px; max-height: ${a}px; border-radius: ${s}; transform: translate(-50%, -50%); " /> </div> </div> `,d=await ft(p,{embedFont:!0,width:e,height:o,fonts:await Promise.all(Object.values(c).map(async U=>({name:n,data:await zt(n,U),style:"normal",weight:U})))}),h=new gt(d,{background:r.bg}).render().asPng();await ut(i,h)},H="banner.png",B="og.png",Kt=(t,e)=>{try{const o={image:t.meta?.shared?.image||(t.url?w(t.url,e||H):void 0),title:t.meta?.shared?.title||t.name,description:t.meta?.shared?.description||t.desc,url:t.meta?.shared?.url||t.url},a=typeof t.meta?.og=="boolean"?!1:{image:t.meta?.og?.image||o.image,title:t.meta?.og?.title||o.title,url:t.meta?.og?.url||o.url,description:t.meta?.og?.description||o.description,type:t.meta?.og?.type||"website",siteName:t.meta?.og?.siteName||t.name},i=typeof t.meta?.twitter=="boolean"?!1:{image:t.meta?.twitter?.image||o.image,title:t.meta?.twitter?.title||o.title,url:t.meta?.twitter?.url||o.url,description:t.meta?.twitter?.description||o.description,card:t.meta?.twitter?.card||"summary_large_image",domain:t.meta?.twitter?.domain||(t.url?new URL(t.url).hostname:void 0),site:t.meta?.twitter?.site||void 0,creator:t.meta?.twitter?.creator||void 0},r=t.meta?.custom?t.meta.custom:void 0;return[...a?Object.entries(a).map(([s,n])=>n?["meta",{property:`og:${F(s)}`,content:String(n)}]:void 0).filter(Boolean):[],...i?Object.entries(i).map(([s,n])=>n?["meta",{name:`twitter:${F(s)}`,content:String(n)}]:void 0).filter(Boolean):[],...r?r.map(s=>["meta",s]):[]]}catch(o){return console.error(`${E} Error getting meta:`,o instanceof Error?o.message:o||"Unknown error"),[]}},Yt=async t=>{const{config:e,data:o}=t,a=async()=>await T(u(o.srcDir,"public",H)),i=e.meta?.autoImage===!1?!1:e.meta?.autoImage||!await a();return{head:Kt(e,i?B:void 0),transformHead:async r=>{try{return e.meta?.onPage?await e.meta.onPage({context:r,config:e}):void 0}catch(s){console.error(`${E} Error transforming meta:`,s instanceof Error?s.message:s||"Unknown error")}},buildEnd:async r=>{try{if(!i)return;const s=rt();console.log(),console.log(`${M} Creating og image...`);const n=u(r.outDir,B),c=u(r.outDir,e.logo||e.favicon);if(!await T(c))throw new Error(`Logo input not found: ${c}`);const l=await at({input:c});await Jt(it({output:n,title:e.name,desc:e.desc,image:l,color:{...e.styles.color,...e.styles.color.dark},radius:e.styles.radius},i===!0?{}:i)),console.log(`${M} Created og image: - input: ${n} - time: ${s.prettyStop()}`),console.log()}catch(s){console.error(`${E} Error creating og image:`,s instanceof Error?s.message:s||"Unknown error"),console.log()}}}},qt=t=>{const e={},o=[];for(const a in t)if(Object.prototype.hasOwnProperty.call(t,a)){const i=t[a],r=i.type;if(e[r]||(e[r]=[]),i.url){const s={text:i.name,link:i.url};e[r].push(s),o.push(s)}}return{groups:e,all:o}},Qt=t=>{if(!t||!("items"in t))return;const{groups:e,all:o}=qt(t.items);if(!("groups"in t))return o;const a=[];for(const i in t.groups)e[i]&&a.push({text:t.groups[i],items:e[i]});return a},z=({conf:t,guide:e,posts:o,links:a})=>{const i=[...t.nav?t.nav:[],...e?[{text:"Guide",activeMatch:"^/guide",link:"/guide"}]:[],...o?[{text:"Articles",activeMatch:"^/posts",link:"/posts"}]:[],...t.download&&t.download.items?[{text:"Downloads",items:Qt(t.download)||[]}]:[],...a?[{text:"Links",activeMatch:"^/links",link:"/links"}]:[]];if(t.version){const r=[...t?.changelogURL?[{text:"Changelog",link:t.changelogURL}]:[],...t.contributingURL?[{text:"Contributing",link:t.contributingURL}]:[],...t.oldVersions&&t.oldVersions.length>0?[{text:"Versions",items:t.oldVersions.map(s=>({text:s.name,link:s.url}))}]:[]];r.length>0&&i.push({text:t.version,items:r})}return i},P=t=>t.charAt(0).toUpperCase()+t.slice(1),m=(t,e,o=void 0,a=void 0)=>{try{return o?[{text:t,items:o,collapsed:a!==void 0&&typeof a=="boolean"?a:void 0}]:e?(e=e?.startsWith("guide")&&e.endsWith("index.md")?u("/",e.replaceAll("index.md","")):e?.startsWith("guide")?u("/",e):e,[{text:t,link:e}]):[]}catch(i){return console.warn(`Error setting "${t}" path in sidebar`,{e:i,data:{title:t,path:e,items:o,collapsed:a}}),[]}},J=t=>{try{return t.map(e=>{let o=P((e.split("/").pop()||"").replace(".md",""));return o.toLowerCase()==="index"&&(o="\u{1F3C1} Get started"),{name:o,path:e}}).sort((e,o)=>e.name==="\u{1F3C1} Get started"?-1:o.name==="\u{1F3C1} Get started"?1:e.name.localeCompare(o.name)).flatMap(e=>m(e.name,e.path))}catch(e){return console.warn("Error getting filtered sidebar paths",{e,data:{paths:t}}),[]}},Xt=(t,e=0)=>{try{const o=t.filter(r=>r.split("/").length===3),a=e+1,i={};for(let r=0;r<o.length;r++){const s=o[r],n=s.split("/")[a];n&&(i[n]||(i[n]=[]),i[n].push(s))}return Object.keys(i).flatMap(r=>{const s=i[r];return s.length===1?m(P(r),s[0]):m(P(r),r,J(s),r!=="core")})}catch(o){return console.warn("Error getting filtered group sidebar paths",{e:o,data:{paths:t,group:e}}),[]}},Zt=(t,e)=>{if(!t||t.length===0)return[];const o="/guide/",a=t.filter(s=>s.split("/").length===2&&s!=="guide/index.md"),i=t.includes("guide/index.md")?"guide/index.md":void 0,r=()=>{const s=Xt(t);return s.length?[{text:"Reference",items:s}]:[]};return[...e?.autoSidebar?.intro!==void 0&&e.autoSidebar.intro===!1?[]:m("Introduction",i,[...m(`What is ${e.name}?`,o),...J(a)]),...e?.autoSidebar?.reference!==void 0&&e.autoSidebar.reference===!1?[]:r()]},N=({conf:t,guide:e,contributors:o,todo:a})=>{const i=a&&a.length===1?a[0]:void 0,r=a&&a.length>1?a.map(l=>m(P(st(l.replace(".md",""))),l)).flat():void 0,s=m("Todo",i,r,!0),n=()=>{const l=[...m("Report issues",t.bugsURL||void 0),...s];return l.length?[{text:"Contribute",items:l}]:[]},c=()=>{const l=[...m("Contributors",o),...m("Changelog",t.changelogURL||void 0),...m("License",t.license?.url),...m("More projects",t.moreURL||void 0)];return l.length?[{text:"About",items:l}]:[]};return[...Zt(e,t),...t?.autoSidebar?.contribute!==void 0&&t.autoSidebar.contribute===!1?[]:n(),...t?.autoSidebar?.about!==void 0&&t.autoSidebar.about===!1?[]:c()]},te=({conf:t,guide:e,contributors:o,todo:a})=>k({})(t.sidebar?t.sidebar:{},{"/guide/":N({conf:t,guide:e,contributors:o,todo:a}),"/todo/":N({conf:t,guide:e,contributors:o,todo:a}),"/contributors":N({conf:t,guide:e,contributors:o,todo:a})}),ee=async({config:t,data:e})=>({vite:{optimizeDeps:{exclude:["virtual:group-icons.css"]},server:{fs:{strict:!1}},plugins:[{name:W+"--listen-to-server",configureServer(o){o.watcher.add("*.md").on("all",async(a,i)=>{})},config(o){const a=o.vitepress.configDeps;e.packageConfig?.path&&!a.includes(e.packageConfig?.path)&&a.push(e.packageConfig?.path),e.pathConfig?.path&&!a.includes(e.pathConfig?.path)&&a.push(e.pathConfig?.path),e.fnConfig?.path&&!a.includes(e.fnConfig?.path)&&a.push(e.fnConfig?.path),console.debug({configDeps:a});const i=y(f.VITEPRESS_CONFIG)?.pages,r=y(f.DOVENV_DOCS_CONFIG);if(!r){console.warn("Unexpected error: No config provided. Please restart the server and report this issue if persists.");return}console.debug({docsPages:i});const s=i?.filter(h=>h.startsWith("guide/")),n=i?.filter(h=>h.startsWith("posts/")),c=i?.filter(h=>h.startsWith("todo/")),l=i?.some(h=>h.startsWith("posts.md")),p=i?.some(h=>h.startsWith("contributors.md"))?"contributors.md":void 0,d=i?.some(h=>h.startsWith("links.md"))?"links.md":void 0;o.vitepress.site.themeConfig.sidebar=te({conf:r,guide:s,contributors:p,todo:c}),o.vitepress.site.themeConfig.nav=z({conf:r,guide:!!(s&&s.length>0),posts:!!(n&&n.length>0&&l),links:!!d}),o.vitepress.logger.info("Sidebar data updated successfully",{timestamp:!0}),console.log()}},...t.groupIcon===!1?[]:[pt(t.groupIcon)],...t.rss?[bt(t.rss)]:[],mt({reload:[...t?.server?.hotReloadFiles?t.server.hotReloadFiles:[]],restart:[...t?.server?.restartFiles?t.server.restartFiles:[]]}),...t.llms===!1?[]:[vt(t.llms)]]}}),oe='<svg class="svg-donate" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg>',re=u(nt(import.meta.url),".."),ae=async()=>{const t=await new jt().updateGlobals(),e=await Yt(t),o=await kt(t),a=await ee(t),{data:i,config:r}=t;let s=$({title:r.shortDesc?`${r.name} - ${r.shortDesc}`:"",titleTemplate:r.titleTemplate({title:":title",name:r.name}),description:r.desc,lang:r.lang,markdown:Bt({data:i,config:r}),cacheDir:i.cacheDir,outDir:i.outDir,srcDir:i.srcDir,cleanUrls:!0,head:[...Wt(r),["link",{rel:"icon",href:r.favicon}]],themeConfig:{logo:r.logo,siteTitle:r.name.toUpperCase(),search:{provider:"local"},editLink:r.repoURL?{pattern:w(r.repoURL,"edit","main",r.docsPath,"/:path")}:void 0,outline:[2,3],nav:z({conf:r}),sidebar:r.sidebar,socialLinks:[...r.navLinks?r.navLinks:[],...r.npmURL?[{icon:"npm",link:r.npmURL}]:[],...r.repoURL?[{icon:"github",link:r.repoURL}]:[],...r.fundingURL?[{icon:{svg:oe},link:r.fundingURL}]:[]],collectiveLinks:r.footer?.links,customFooter:{license:r.license,copy:r.footer?.copy},contributors:r.contributors,links:r.links}},a);return s=$(s,e),s=$(s,o),r.vitepress&&(s=$(s,r.vitepress)),console.debug({vitepressConfig:s}),s};export{re as V,j as a,Tt as b,It as c,Mt as d,f as e,ae as f,V as g,Lt as h,W as n,Ft as s,Ut as v};