boltdocs 2.9.2 → 3.0.0

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 (108) hide show
  1. package/bin/boltdocs.js +2 -1
  2. package/dist/{adapters-uGz-UKQa.cjs → adapters-C5AWWGfb.cjs} +1 -1
  3. package/dist/{adapters-HVuXENAe.mjs → adapters-DEXNIv3x.mjs} +1 -1
  4. package/dist/{banner-D2NddBfF.d.ts → banner-CfdalYLL.d.ts} +1 -1
  5. package/dist/{banner-C_xkGxzI.d.cts → banner-DNSkgUsO.d.cts} +1 -1
  6. package/dist/{cache-B19MLTpN.cjs → cache-DETwlACe.cjs} +1 -1
  7. package/dist/{cache-CfhOTR3Q.mjs → cache-SF59enb3.mjs} +1 -1
  8. package/dist/client/index.cjs +260 -147
  9. package/dist/client/index.d.cts +4 -3
  10. package/dist/client/index.d.ts +4 -3
  11. package/dist/client/index.js +259 -147
  12. package/dist/client/mdx.cjs +1 -1
  13. package/dist/client/mdx.js +1 -1
  14. package/dist/client/primitives.cjs +2 -2
  15. package/dist/client/primitives.d.cts +10 -8
  16. package/dist/client/primitives.d.ts +10 -8
  17. package/dist/client/primitives.js +2 -2
  18. package/dist/config-B5uVv5q4.cjs +7 -0
  19. package/dist/config-D3_zDkHh.mjs +7 -0
  20. package/dist/{config-CnmfjOE4.cjs → config-JGkMJoJQ.cjs} +1 -1
  21. package/dist/csp-gaZ51xzq.mjs +6 -0
  22. package/dist/doctor-3MheVMwd.mjs +7 -0
  23. package/dist/{parser-CHsNUEhU.cjs → doctor-BR1B2Mkz.cjs} +1 -1
  24. package/dist/doctor-DQxLM202.cjs +7 -0
  25. package/dist/handler-Btd4t_67.mjs +28 -0
  26. package/dist/{headers-DuCAOgYX.cjs → headers-BXKxiPUv.cjs} +1 -1
  27. package/dist/headers-CXyf0auY.mjs +6 -0
  28. package/dist/{image-BCDyLHyD.js → image-C9md50h2.js} +14 -6
  29. package/dist/{image-DWdmichO.cjs → image-CR6UlaI5.cjs} +14 -6
  30. package/dist/{mdx-9QJoSITt.cjs → mdx-DJBg5DuL.cjs} +10 -23
  31. package/dist/{mdx-DFbspTP9.js → mdx-DhyMkc35.js} +10 -23
  32. package/dist/node/cli-entry.cjs +3 -3
  33. package/dist/node/cli-entry.mjs +3 -3
  34. package/dist/node/index.cjs +1 -1
  35. package/dist/node/index.d.cts +40 -19
  36. package/dist/node/index.d.mts +41 -20
  37. package/dist/node/index.mjs +1 -1
  38. package/dist/node-BUAMwxuS.cjs +105 -0
  39. package/dist/node-Clh72alT.mjs +105 -0
  40. package/dist/{package-D6O7a8qA.mjs → package-1GvyLw7z.mjs} +1 -1
  41. package/dist/{package-CVw_u5VT.cjs → package-3jQEMIvy.cjs} +1 -1
  42. package/dist/pages-external-BYa4JSda.mjs +6 -0
  43. package/dist/pages-external-CX2uyW95.cjs +6 -0
  44. package/dist/parser-CNIPHx4s.cjs +8 -0
  45. package/dist/parser-D0QHIQsi.mjs +8 -0
  46. package/dist/plugin-D9gURy-9.mjs +68 -0
  47. package/dist/plugin-N3zGyZXw.cjs +68 -0
  48. package/dist/rolldown-runtime-fkIsjY3S.mjs +6 -0
  49. package/dist/routes-BajCwrvX.cjs +6 -0
  50. package/dist/routes-CyrnmVuG.mjs +6 -0
  51. package/dist/routes-D6Tuu7Fs.cjs +6 -0
  52. package/dist/{search-dialog-DRNJsxOv.js → search-dialog-CQneRo8T.js} +1 -1
  53. package/dist/{search-dialog-BsAiQgnx.cjs → search-dialog-CwNh8lIN.cjs} +27 -30
  54. package/dist/{search-dialog-BhXg05Ri.cjs → search-dialog-D4rplZMv.cjs} +1 -0
  55. package/dist/{search-dialog-DaR66wl0.js → search-dialog-DaeSPvEo.js} +1 -0
  56. package/dist/{search-dialog-CaOO1Q4i.js → search-dialog-DoGobmuG.js} +28 -31
  57. package/dist/{search-dialog-CzwvKoLW.cjs → search-dialog-cHJoKjts.cjs} +1 -1
  58. package/dist/server/index.cjs +1 -1
  59. package/dist/server/index.d.mts +1 -1
  60. package/dist/server/index.mjs +1 -1
  61. package/dist/{shiki-adapter-BB71nVsG.cjs → shiki-adapter-CGTmrR6S.cjs} +1 -1
  62. package/dist/shiki-adapter-CXEGRnjr.mjs +6 -0
  63. package/dist/{doctor-BL6c8x2Q.cjs → shiki-adapter-Mr8_oT_9.cjs} +1 -1
  64. package/dist/{sidebar-BtJyWHy4.d.cts → sidebar-7gIifpBX.d.cts} +21 -4
  65. package/dist/{sidebar-C4fuRYYS.d.ts → sidebar-BAKgJ-Er.d.ts} +21 -4
  66. package/dist/types-generator-DVOnRVKU.mjs +26 -0
  67. package/dist/{utils-DexBrwiP.mjs → utils-B3xYMrpK.mjs} +1 -1
  68. package/dist/{utils-BWy_8ASj.cjs → utils-Bz1tG9Dg.cjs} +1 -1
  69. package/package.json +2 -1
  70. package/src/shared/types.ts +22 -3
  71. package/dist/config-BCqkPkjC.mjs +0 -7
  72. package/dist/config-BPWGa2W3.mjs +0 -6
  73. package/dist/config-D7ERJhqe.cjs +0 -7
  74. package/dist/csp-CUAEgrxR.mjs +0 -6
  75. package/dist/doctor-A17UhTRn.cjs +0 -7
  76. package/dist/doctor-hKOBLhBF.mjs +0 -7
  77. package/dist/handler-CyIBbZdb.mjs +0 -28
  78. package/dist/handler-eNNcucnf.mjs +0 -6
  79. package/dist/headers-DBzZ9yC6.mjs +0 -6
  80. package/dist/node/routes/worker.cjs +0 -6
  81. package/dist/node/routes/worker.d.cts +0 -2
  82. package/dist/node/routes/worker.d.mts +0 -2
  83. package/dist/node/routes/worker.mjs +0 -6
  84. package/dist/node-B-I15rGR.cjs +0 -105
  85. package/dist/node-FkxzriO7.mjs +0 -105
  86. package/dist/parser-8u0xHVc7.mjs +0 -6
  87. package/dist/parser-CLtGv_XH.cjs +0 -6
  88. package/dist/plugin-CHa0IT49.mjs +0 -61
  89. package/dist/plugin-Dqj9plKB.cjs +0 -61
  90. package/dist/routes-B2joDAlC.cjs +0 -6
  91. package/dist/routes-BTx0ngdX.mjs +0 -6
  92. package/dist/routes-Bm0CQvyL.mjs +0 -6
  93. package/dist/routes-CyKj3dzf.cjs +0 -6
  94. package/dist/shiki-adapter-CL-IQwKI.cjs +0 -6
  95. package/dist/shiki-adapter-CxTLkjew.mjs +0 -6
  96. package/dist/shiki-adapter-rQ087Lx3.mjs +0 -6
  97. package/dist/types-generator-BRyf4o9F.mjs +0 -26
  98. package/dist/types-generator-Cu2jQP-V.mjs +0 -6
  99. package/dist/worker-pool-CgOMozUz.cjs +0 -6
  100. package/dist/worker-pool-v6tW2MDQ.mjs +0 -6
  101. /package/dist/{csp-DbbF3R9Q.cjs → csp-CBysWlAf.cjs} +0 -0
  102. /package/dist/{generator-BaSvGlxR.mjs → generator-CcOBN5vI.mjs} +0 -0
  103. /package/dist/{generator-DsajVrDx.cjs → generator-DtUU3Cfk.cjs} +0 -0
  104. /package/dist/{handler-1LRMYeI4.cjs → handler-Dzf4dSnV.cjs} +0 -0
  105. /package/dist/{index-ZqgZUvwp.d.mts → index-CdJv4ocW.d.mts} +0 -0
  106. /package/dist/{meta-loader-CD3Yptr5.mjs → meta-loader-C4Hu9RN9.mjs} +0 -0
  107. /package/dist/{meta-loader-CjphwtS7.cjs → meta-loader-C9MKjAs0.cjs} +0 -0
  108. /package/dist/{types-generator-BqNKCbrx.cjs → types-generator-CYcHkDzZ.cjs} +0 -0
@@ -1,7 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{A as e}from"./node-FkxzriO7.mjs";import{a as t,d as n,g as r,u as i}from"./utils-DexBrwiP.mjs";import{n as a}from"./config-BCqkPkjC.mjs";import{t as o}from"./node/cli-entry.mjs";import s from"node:path";import c from"node:fs";import{bullet as l,colors as u,confirm as d,dividerLog as f,double as p,error as m,info as h,round as g,single as _,success as v,tasks as y,warn as b}from"@bdocs/dui";import{fdir as x}from"fdir";import S from"picomatch";import{distance as C}from"fastest-levenshtein";const w={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0},performance:{enabled:!0,budgets:{maxJSBundleSize:`200kb`,maxCSSBundleSize:`30kb`,maxPageHTMLSize:`80kb`,maxImagesKB:500,maxBuildTime:3e4,maxFontCount:3}}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/reports/doctor.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`,budgetExceeded:`warning`},exclude:[]};function T(e,t){if(e==null)return t;if(typeof e==`number`)return e;let n=e.toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/);if(!n)return t;let r=Number.parseFloat(n[1]),i=n[2]||`b`;return Math.round(r*({b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024}[i]||1))}function E(e,t,n){return e.doctorConfig.severity[t]||n}async function D(e,t){c.existsSync(t)||c.mkdirSync(t,{recursive:!0});let n=s.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=s.join(t,`${n}.${r}.bak`);c.copyFileSync(e,i)}const O=new Map;function k(e){let t=O.get(e);if(t)return t;let r=(async()=>{let t=await n(e,!1);return{raw:t.raw,data:t.data,content:t.content}})();return O.set(e,r),r}const A=new Map;function j(e){if(A.has(e))return A.get(e);let t=!1;try{t=c.existsSync(e)&&c.statSync(e).isFile()}catch{t=!1}return A.set(e,t),t}async function M(e){let t=s.resolve(e,`doctor.json`);if(c.existsSync(t))try{let e=JSON.parse(c.readFileSync(t,`utf-8`));return{...w,...e,checks:{...w.checks,...e.checks,metadata:{...w.checks.metadata,...e.checks?.metadata},links:{...w.checks.links,...e.checks?.links},i18n:{...w.checks.i18n,...e.checks?.i18n},performance:{...w.checks.performance,...e.checks?.performance,budgets:{...w.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...w.fix,...e.fix},reporting:{...w.reporting,...e.reporting},severity:{...w.severity,...e.severity},exclude:[...w.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return w}async function N(e,n=process.cwd(),r,i){let a=s.resolve(n,`.boltdocs`,`generated`);c.existsSync(a)||c.mkdirSync(a,{recursive:!0});let o=i;o||=await new x().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let l=r?.base||`/docs`,u=[];for(let n=0;n<o.length;n+=100){let r=o.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=s.isAbsolute(n)?n:s.resolve(e,n),i=s.relative(e,r),{data:a}=await k(r),o;return o=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:t(i),l===`/`?o:(l.endsWith(`/`)?l:l+`/`)+(o.startsWith(`/`)?o.substring(1):o)}));u.push(...i)}u.includes(l)||u.push(l);let d={routes:Array.from(new Set(u)).sort(),timestamp:Date.now()};return c.writeFileSync(s.resolve(a,`link-tree.json`),JSON.stringify(d,null,2)),d}function P(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-C(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-C(e,t)/Math.max(e.length,t.length)}const F=new Map;function I(e,t){if(F.has(e))return F.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=P(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return F.set(e,a),a}async function L(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:n,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,c=new Map;for(let l of e.files){let u=i(s.relative(e.docsDir,l));try{let{raw:i,data:s}=await k(l);if(i.trim().startsWith(`---`)&&i.split(`---`).length>=3&&Object.keys(s).length===0){let n=E(e,`malformedFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=r.safeParse(s);if(!d.success){let n=E(e,`invalidFrontmatter`,`high`);if(n!==`off`)for(let e of d.error.issues)t.push({file:u,level:n,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let n of f)if(s[n]===void 0){let r=E(e,`missingMetadata`,`warning`);r!==`off`&&t.push({file:u,level:r,message:`Missing required frontmatter field: "${n}".`,suggestion:`Add the "${n}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let n=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of n)if(s[r]&&Number.isNaN(Date.parse(String(s[r])))){let n=E(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${s[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(s.title){let r=String(s.title);if(r.length<n){let i=E(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,level:i,message:`Title is too short (${r.length} chars).`,suggestion:`Titles should be at least ${n} characters for better SEO.`})}else if(r.length>a){let n=E(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Title is too long (${r.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let i=c.get(r)||[];i.push(u),c.set(r,i)}if(s.description&&String(s.description).length<o){let n=E(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(n){if(n instanceof Error){let r=E(e,`malformedFrontmatter`,`high`);r!==`off`&&t.push({file:u,level:r,message:`Malformed frontmatter (YAML error): ${n.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[n,r]of c.entries())if(r.length>1){let i=E(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)t.push({file:e,level:i,message:`Duplicate title found: "${n}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return t}async function R(e){let t=[],{internal:n,external:r,ignore:a,timeout:o,concurrency:l}=e.doctorConfig.checks.links;if(!n&&!r&&!e.options.checkExternal)return t;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let o of e.files){let l=i(s.relative(e.docsDir,o)),{content:u}=await k(o),m=[...(u.length>p?u.slice(0,p):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let i of m){let u=i[1]||i[2],d=!!i[1];if(!u||a.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(r||e.options.checkExternal)&&f.add({url:u,file:o});continue}if(!n||/^(mailto|tel|#)/i.test(u))continue;let p;try{p=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{p=u.split(`#`)[0].split(`?`)[0]}if(!p)continue;let m=!1,h=``;if(p.startsWith(`/`))if(e.routeIndex.has(p)||e.routeIndexWithSlash.has(p)||e.routeIndexWithoutSlash.has(p))m=!0;else{let t=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))m=!1,h=t;else{let t=e.config.base!==`/`&&p.startsWith(e.config.base||`/`)?p.substring((e.config.base||`/`).length):p,n=t.startsWith(`/`)?t.substring(1):t;h=s.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>j(h+e))}}else h=s.resolve(s.dirname(o),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>j(h+e));if(!m){let{bestMatch:n,similarity:r}=I(p,e.linkTree.routes),i=!1,a=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(n=a,r=1,i=!0);let s=r>.6||i,f=r>.75&&n!==p||i,m=E(e,`brokenLink`,`high`);m!==`off`&&t.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:s?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,t=d?`(${u})`:`href="${u}"`,r=d?`(${n}${e})`:`href="${n}${e}"`,i=c.readFileSync(o,`utf-8`).replace(t,r);c.writeFileSync(o,i),O.delete(o)}:void 0})}}}if(f.size>0){h(u.gray(`Verifying ${f.size} external links...`));let n=new Map;for(let e of f)n.has(e.url)||n.set(e.url,[]),n.get(e.url).push(e.file);let r=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),o),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(n.keys()),c=[];for(let e=0;e<a.length;e+=l){let t=a.slice(e,e+l),n=await Promise.allSettled(t.map(r));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let r of c)if(!r.ok){let a=E(e,`brokenLink`,`warning`);if(a!==`off`){let o=n.get(r.url)||[];for(let n of o)t.push({file:i(s.relative(e.docsDir,n)),level:a,message:`Broken external link: "${r.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${r.error||`Status >= 400`}`})}}}return t}async function z(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:n,locales:r}=e.config.i18n,a=Object.keys(r),o=a.filter(e=>e!==n);for(let r of e.files){let l=i(s.relative(e.docsDir,r)),u=l.split(`/`),d=u[0];if(d===n){let n=u.slice(1).join(`/`);for(let i of o){let a=s.join(e.docsDir,i,n);if(!j(a)){let o=E(e,`missingTranslation`,`warning`);o!==`off`&&t.push({file:l,level:o,message:`Missing translation for locale "${i}"`,suggestion:`Create a version at "${i}/${n}".`,fix:async()=>{let e=s.dirname(a);c.existsSync(e)||c.mkdirSync(e,{recursive:!0}),c.copyFileSync(r,a)}})}}}else if(a.includes(d)){let i=u.slice(1).join(`/`);if(!j(s.join(e.docsDir,n,i))){let a=E(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:l,level:a,message:`Orphaned translation (source missing in "${n}")`,suggestion:`Remove this file or create the source at "${n}/${i}".`,fix:async()=>{c.unlinkSync(r)}})}}}return t}async function B(e){let t=[];if(!e.config.theme.sidebar)return t;let n=new Set,r=e.config.theme.sidebar;for(let[i,a]of Object.entries(r))for(let r of a){if(!r.text){let n=E(e,`invalidFrontmatter`,`warning`);n!==`off`&&t.push({file:`boltdocs.config.ts`,level:n,message:`Sidebar item in group "${i}" is missing a label.`,suggestion:`Add a "text" property to the sidebar item.`})}if(r.link&&(n.add(r.link),!e.routeIndex.has(r.link))){let{bestMatch:n,similarity:i}=I(r.link,e.linkTree.routes),a=i>.6,o=E(e,`brokenLink`,`high`);o!==`off`&&t.push({file:`boltdocs.config.ts`,level:o,message:`Broken sidebar link: "${r.link}"`,suggestion:a?`Did you mean "${n}"?`:`Ensure the route exists and is correctly formatted.`})}}for(let r of e.linkTree.routes)if(!(r===`/`||r===``)&&!n.has(r)){let n=E(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}async function V(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=s.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!c.existsSync(r))return t.push({file:`(build)`,level:E(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let i;try{i=JSON.parse(c.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:E(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let a=n.budgets,o=E(e,`budgetExceeded`,`warning`),l=T(a?.maxJSBundleSize,1/0),u=T(a?.maxCSSBundleSize,1/0),d=T(a?.maxPageHTMLSize,1/0),f=a?.maxImagesKB??1/0,p=a?.maxBuildTime??1/0,m=a?.maxFontCount??1/0;if(l!==1/0&&i.totalJSBundleSize>l){let e=(i.totalJSBundleSize/1024).toFixed(0),n=(l/1024).toFixed(0);t.push({file:`(build)`,level:o,message:`JS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Code-split large dependencies or lazy-load route components.`})}if(u!==1/0&&i.totalCSSBundleSize>u){let e=(i.totalCSSBundleSize/1024).toFixed(0),n=(u/1024).toFixed(0);t.push({file:`(build)`,level:o,message:`CSS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Remove unused styles or split CSS by route.`})}if(d!==1/0){for(let e of i.pages)if(e.htmlSize>d){let n=(e.htmlSize/1024).toFixed(0),r=(d/1024).toFixed(0);t.push({file:e.route,level:o,message:`Page HTML size exceeds budget: ${n}kb > ${r}kb`,suggestion:`Reduce the amount of inline content or split into sub-pages.`})}}let h=f*1024;if(f!==1/0&&i.totalImagesSize>h){let e=(i.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:o,message:`Image assets exceed budget: ${e}kb > ${f}kb`,suggestion:`Optimize images with lossy compression or use next-gen formats (webp/avif).`})}if(p!==1/0&&i.buildTime>p){let e=(i.buildTime/1e3).toFixed(1),n=(p/1e3).toFixed(1);t.push({file:`(build)`,level:o,message:`Build time exceeds budget: ${e}s > ${n}s`,suggestion:"Check for large unoptimized assets or increase `concurrency` in SSG options."})}return m!==1/0&&i.fontCount>m&&t.push({file:`(build)`,level:o,message:`Font files exceed budget: ${i.fontCount} > ${m}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}var H=e({DEFAULT_DOCTOR_CONFIG:()=>w,checkI18n:()=>z,checkLinks:()=>R,checkMetadata:()=>L,checkPerformance:()=>V,checkSidebar:()=>B,doctorAction:()=>W,doctorInit:()=>U,generateLinkTree:()=>N,loadDoctorConfig:()=>M});async function U(e){let t=s.resolve(e,`doctor.json`);if(c.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{c.writeFileSync(t,JSON.stringify(w,null,2)),v(`Created "doctor.json" with default configuration.`)}catch(e){m(`Failed to create "doctor.json": ${e}`)}}async function W(e=process.cwd(),t={}){if(t.init){await U(e);return}o();try{let n=await M(e),{format:r}=n.reporting,i=performance.now(),o=await a(`docs`,e),b=s.resolve(e,`docs`);c.existsSync(b)||(r===`pretty`&&m(`Docs dir not found at ${b}`),process.exit(1)),r===`pretty`&&console.log(p([` ${u.dim(`Docs dir:`)} ${b}`,` ${u.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),r===`pretty`&&h(u.dim(`🔍 Discovering files and routes...`));let C=S(n.exclude||[]),w=await new x().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=s.relative(b,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!C(t)&&!n}).crawl(b).withPromise();for(let e of w)A.set(e,!0);let T=await N(b,e,o,w),E=o.base||`/`,O=E===`/`?``:E.endsWith(`/`)?E.slice(0,-1):E,k={root:e,docsDir:b,config:o,doctorConfig:n,linkTree:T,files:w,options:t,routeIndex:new Set(T.routes),routeIndexWithSlash:new Set(T.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(T.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:O};r===`pretty`&&h(u.dim(`🧪 Running diagnostic checks in parallel...`));let j=[L(k),R(k),z(k),B(k)];t.budget&&j.push(V(k));let[P,F,I,H,...U]=await Promise.all(j),W=t.budget?U[0]:[],G=[...P,...F,...I,...H,...W];if(r===`pretty`){let e=[{label:`Metadata checks ${P.length>0?`— ${P.length} issue${P.length===1?``:`s`}`:`— OK`}`,done:P.length===0},{label:`Link checks ${F.length>0?`— ${F.length} issue${F.length===1?``:`s`}`:`— OK`}`,done:F.length===0},{label:`i18n checks ${I.length>0?`— ${I.length} issue${I.length===1?``:`s`}`:`— OK`}`,done:I.length===0},{label:`Sidebar checks ${H.length>0?`— ${H.length} issue${H.length===1?``:`s`}`:`— OK`}`,done:H.length===0}];t.budget&&e.push({label:`Performance budget ${W.length>0?`— ${W.length} issue${W.length===1?``:`s`}`:`— OK`}`,done:W.length===0}),console.log(`\n${y(e)}`)}let K=0;if(t.fix){for(let e of G)if(e.fix){if(k.doctorConfig.fix.confirmChanges&&!await d(`Fix issue in "${e.file}": ${e.message}?`))continue;if(k.doctorConfig.fix.backupFiles){let t=s.resolve(k.docsDir,e.file);c.existsSync(t)&&await D(t,s.resolve(k.root,k.doctorConfig.fix.backupPath))}await e.fix(),K++}}let q=((performance.now()-i)/1e3).toFixed(2),J=G.filter(e=>e.level===`high`).length,Y=G.filter(e=>e.level===`warning`).length,X=G.filter(e=>e.level===`low`).length,Z={summary:{total:G.length,high:J,warning:Y,low:X,fixed:K,duration:q},issues:G.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=s.resolve(e,n.reporting.outputFile);c.existsSync(s.dirname(t))||c.mkdirSync(s.dirname(t),{recursive:!0}),c.writeFileSync(t,JSON.stringify(Z,null,2))}if(r===`json`)console.log(JSON.stringify(Z,null,2));else if(r===`pretty`){let e=G.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(G.length>0){f();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?u.red:n.level===`warning`?u.yellow:u.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${u.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${u.green(`✅ Fixed automatically`)}`)}console.log(`\n${_(e,{title:`📄 ${n}`})}`)}f()}if(G.length===0)console.log(g([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${u.dim(`Scanned ${w.length} file${w.length===1?``:`s`} in ${q}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];J>0&&e.push(u.red(`${J} Critical Error${J===1?``:`s`}`)),Y>0&&e.push(u.yellow(`${Y} Warning${Y===1?``:`s`}`)),X>0&&e.push(u.blue(`${X} Improvement${X===1?``:`s`}`));let t=[...l(e).split(`
7
- `).map(e=>e.trimStart()),``,u.dim(`Scanned ${w.length} file${w.length===1?``:`s`} in ${q}s`)];console.log(`\n${p(t,{title:`Diagnosis Results`})}\n`),K>0&&v(`Successfully fixed ${K} issues automatically!`),J>0?m(`Please fix the critical errors before building for production.`):v(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&J>0&&process.exit(1),n.reporting.maxWarnings!==-1&&Y>n.reporting.maxWarnings&&(r===`pretty`&&m(`Failed: Too many warnings (${Y} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){m(`Doctor failed: ${e}`),process.exit(1)}}export{N as n,H as t};
@@ -1,28 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import*as e from"zod";import t from"node:crypto";function n(e,n){let r={alg:`RS256`,typ:`JWT`},i=Math.floor(Date.now()/1e3),a={iat:i-60,exp:i+600,iss:e},o=e=>Buffer.from(JSON.stringify(e)).toString(`base64url`),s=o(r),c=o(a),l=t.createSign(`RSA-SHA256`);l.update(`${s}.${c}`);let u=n.replace(/\\n/g,`
7
- `);return`${s}.${c}.${l.sign(u,`base64`)}`}async function r(e,t,r){let i=n(e,t),a=await fetch(`https://api.github.com/app/installations/${r}/access_tokens`,{method:`POST`,headers:{Authorization:`Bearer ${i}`,Accept:`application/vnd.github+json`,"User-Agent":`Boltdocs-Feedback`}});if(!a.ok){let e=await a.text();throw Error(`Failed to get installation access token: ${a.status} ${e}`)}return(await a.json()).token}async function i(e,t,n={}){let r=await fetch(`https://api.github.com/graphql`,{method:`POST`,headers:{Authorization:`bearer ${e}`,"Content-Type":`application/json`,"User-Agent":`Boltdocs-Feedback`},body:JSON.stringify({query:t,variables:n})});if(!r.ok){let e=await r.text();throw Error(`GitHub GraphQL API error: ${r.status} ${e}`)}let i=await r.json();if(i.errors?.length){let e=i.errors.map(e=>e.message).join(`, `);throw Error(`GitHub GraphQL Error: ${e}`)}return i.data}async function a(e,t){let n=t.token;if(!n)if(t.appId&&t.privateKey&&t.installationId)n=await r(t.appId,t.privateKey,t.installationId);else throw Error(`GitHub authentication credentials missing. Provide GITHUB_TOKEN or GITHUB_APP_* variables.`);let{owner:a,repo:o,categorySlug:s=`general`}=t,{rating:c,comment:l,path:u,title:d,blockId:f}=e,p=await i(n,`query GetRepoAndCategory($owner: String!, $name: String!, $categorySlug: String!) {
8
- repository(owner: $owner, name: $name) {
9
- id
10
- discussionCategory(slug: $categorySlug) { id }
11
- }
12
- }`,{owner:a,name:o,categorySlug:s});if(!p?.repository)throw Error(`Repository not found: ${a}/${o}`);let m=p.repository.id,h=p.repository.discussionCategory?.id;if(!h)throw Error(`Discussion category slug "${s}" not found in ${a}/${o}`);let g=`[Feedback] ${u}`,_=((await i(n,`query FindDiscussion($searchQuery: String!) {
13
- search(query: $searchQuery, type: DISCUSSION, first: 10) {
14
- nodes {
15
- ... on Discussion { id title }
16
- }
17
- }
18
- }`,{searchQuery:`repo:${a}/${o} in:title "${g}"`}))?.search?.nodes||[]).find(e=>e.title===g)?.id;if(_||=(await i(n,`mutation CreateDiscussion($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
19
- createDiscussion(input: {repositoryId: $repositoryId, categoryId: $categoryId, title: $title, body: $body}) {
20
- discussion { id }
21
- }
22
- }`,{repositoryId:m,categoryId:h,title:g,body:`This discussion thread holds feedback comments for page: [${d}](${u}).`}))?.createDiscussion?.discussion?.id,!_)throw Error(`Failed to resolve or create discussion thread.`);let v=[f?`### Code Block Feedback`:`### Page Feedback`,`- **Page:** [${d}](${u})`,`- **Rating:** ${{good:`😊 GOOD`,neutral:`😐 NEUTRAL`,bad:`🙁 BAD`}[c]}`,f?`- **Block:** ${f}`:``,l?`\n**Comment:**\n${l}`:`
23
- _No comments provided._`];return await i(n,`mutation AddComment($discussionId: ID!, $body: String!) {
24
- addDiscussionComment(input: {discussionId: $discussionId, body: $body}) {
25
- comment { id }
26
- }
27
- }`,{discussionId:_,body:v.filter(Boolean).join(`
28
- `)}),{success:!0}}const o=e.object({rating:e.enum([`good`,`neutral`,`bad`]),path:e.string(),title:e.string(),comment:e.string().optional()});async function s(e,t=process.env,n={}){let r=o.safeParse(e);if(!r.success)throw Error(`Invalid feedback payload`);let i=r.data,s=n.owner||t.GITHUB_REPO_OWNER||t.BOLTDOCS_GITHUB_REPO_OWNER,c=n.repo||t.GITHUB_REPO_NAME||t.BOLTDOCS_GITHUB_REPO_NAME,l=n.categorySlug||t.GITHUB_DISCUSSION_CATEGORY||t.BOLTDOCS_GITHUB_DISCUSSION_CATEGORY||`general`,u=n.token||t.BOLTDOCS_GITHUB_TOKEN||t.GITHUB_TOKEN,d=n.appId||t.GITHUB_APP_ID,f=n.privateKey||t.GITHUB_PRIVATE_KEY,p=n.installationId||t.GITHUB_INSTALLATION_ID;if(!s||!c)throw Error(`GitHub repository coordinates (owner and repo name) are missing. Please set GITHUB_REPO_OWNER and GITHUB_REPO_NAME.`);return await a(i,{owner:s,repo:c,categorySlug:l,token:u,appId:d,privateKey:f,installationId:p}),{success:!0}}export{s as t};
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{t as e}from"./handler-CyIBbZdb.mjs";export{e as handleFeedback};
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{A as e}from"./node-FkxzriO7.mjs";var t=e({SECURITY_HEADERS:()=>n});const n={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};export{t as n,n as t};
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- require(`../../chunk-Ds5LZdWN.cjs`);const e=require(`../../parser-CLtGv_XH.cjs`);let t=require(`node:worker_threads`);if(!t.parentPort)throw Error(`This file must be run as a worker thread.`);t.parentPort.on(`message`,async n=>{if(n.type===`PARSE_FILE`)try{let r=await e.t(n.file,n.docsDir,n.basePath,n.config);t.parentPort?.postMessage({type:`SUCCESS`,file:n.file,result:r})}catch(e){t.parentPort?.postMessage({type:`ERROR`,file:n.file,error:e.message||`Unknown parsing error`})}});
@@ -1,2 +0,0 @@
1
-
2
- export { };
@@ -1,2 +0,0 @@
1
-
2
- export { };
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{n as e}from"../../parser-8u0xHVc7.mjs";import{parentPort as t}from"node:worker_threads";if(!t)throw Error(`This file must be run as a worker thread.`);t.on(`message`,async n=>{if(n.type===`PARSE_FILE`)try{let r=await e(n.file,n.docsDir,n.basePath,n.config);t?.postMessage({type:`SUCCESS`,file:n.file,result:r})}catch(e){t?.postMessage({type:`ERROR`,file:n.file,error:e.message||`Unknown parsing error`})}});export{};
@@ -1,105 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`),n=require(`./config-D7ERJhqe.cjs`),r=require(`./types-generator-BqNKCbrx.cjs`),i=require(`./routes-CyKj3dzf.cjs`),a=require(`./shiki-adapter-BB71nVsG.cjs`);let o=require(`node:path`);o=e.n(o);let s=require(`node:fs`);s=e.n(s);let c=require(`zod`),l=require(`@bdocs/dui`);l=e.n(l);let u=require(`semver`);u=e.n(u);let d=require(`@bdocs/ssg/node`),f=require(`unist-util-visit`);function p(e,n){let r=o.default.resolve(process.cwd(),`index.css`),i=s.default.existsSync(r)?`import './index.css';`:``,a=n?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],c=a.map(([e,n])=>`import * as _comp_${e} from '${t.u(n)}';
7
- const ${e} = _comp_${e}.default || _comp_${e}['${e}'] || _comp_${e};`).join(`
8
- `),l=a.map(([e])=>e).join(`, `),u=o.default.basename(e.docsDir||`docs`),d=o.default.resolve(process.cwd(),e.docsDir||`docs`),f=[`tsx`,`ts`,`jsx`,`js`].map(e=>o.default.resolve(d,`pages-external/index.${e}`)).find(e=>s.default.existsSync(e)),p=f?`import * as _external_module from '${t.u(f)}';`:``,m=f?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``,h=process.env.VITE_SSG===`true`,g=h?`{ eager: true }`:`{}`,_=h?``:`
9
- if (typeof window !== 'undefined') {
10
- const prefetchAll = () => {
11
- const getters = Object.values(mdxModules)
12
- if (getters.length === 0) return
13
- let i = 0
14
- const nextBatch = () => {
15
- if (i >= getters.length) return
16
- const batch = getters.slice(i, i + 6)
17
- i += batch.length
18
- Promise.allSettled(batch.map(fn => fn())).then(() => {
19
- setTimeout(nextBatch, 0)
20
- })
21
- }
22
- ;(typeof requestIdleCallback === 'function' ? requestIdleCallback : function(cb) { setTimeout(cb, 500) })(nextBatch)
23
- }
24
- prefetchAll()
25
- }
26
- `;return`
27
- import { ViteReactSSG, createRoutes } from 'boltdocs/client'
28
- import _routes from 'virtual:boltdocs-routes.ts'
29
- import _collections from 'virtual:boltdocs-collections.ts'
30
- import _config from 'virtual:boltdocs-config.ts'
31
- import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx'
32
- ${i}
33
- ${c}
34
- ${p}
35
-
36
- const mdxModules = import.meta.glob('/${u}/**/*.{md,mdx}', ${g});
37
-
38
- const _collLayoutMods = import.meta.glob('${`/${u}/**/layout.tsx`}', { eager: true });
39
- const _collListMods = import.meta.glob('${`/${u}/**/list.tsx`}', { eager: true });
40
- const _collPostMods = import.meta.glob('${`/${u}/**/post.tsx`}', { eager: true });
41
-
42
- const _collectionLayouts = {};
43
- for (const [p, mod] of Object.entries(_collLayoutMods)) {
44
- const dir = p.split('/').slice(-2, -1)[0];
45
- if (dir.startsWith('[') && dir.endsWith(']')) {
46
- _collectionLayouts[dir.slice(1, -1)] = mod.default || mod;
47
- }
48
- }
49
-
50
- const _collectionLists = {};
51
- for (const [p, mod] of Object.entries(_collListMods)) {
52
- const dir = p.split('/').slice(-2, -1)[0];
53
- if (dir.startsWith('[') && dir.endsWith(']')) {
54
- _collectionLists[dir.slice(1, -1)] = mod.default || mod;
55
- }
56
- }
57
-
58
- const _collectionPosts = {};
59
- for (const [p, mod] of Object.entries(_collPostMods)) {
60
- const dir = p.split('/').slice(-2, -1)[0];
61
- if (dir.startsWith('[') && dir.endsWith(']')) {
62
- _collectionPosts[dir.slice(1, -1)] = mod.default || mod;
63
- }
64
- }
65
-
66
- export const createRoot = ViteReactSSG(
67
- {
68
- routes: createRoutes({
69
- routesData: _routes,
70
- collectionsData: _collections,
71
- collectionLayouts: _collectionLayouts,
72
- collectionLists: _collectionLists,
73
- collectionPosts: _collectionPosts,
74
- config: _config,
75
- mdxModules,
76
- ${m}
77
- components: { ${l}${l?`, `:``} ...(_user_mdx_components || {}) },
78
- }),
79
- },
80
- ({ isClient }) => {
81
- // Boltdocs initialization hook
82
- if (isClient) {
83
- // Client-side initialization
84
- }
85
- },
86
- );
87
- ${_}
88
- `}var m=class extends Error{name=this.constructor.name;constructor(e,t,n){super(`[plugin:${e}] ${t}`,n),this.pluginName=e}},h=class extends m{constructor(e,t){super(e,`Validation failed: ${t}`)}},g=class extends m{constructor(e,t){super(e,`Compatibility error: ${t}`)}},_=class extends m{constructor(e,t,n){super(e,`Error in hook '${t}': ${n.message}`,{cause:n}),this.hookName=t}},v=class{data=new Map;getNamespaceKey(e,t){return`${e}:${t}`}get(e,t){let n=this.getNamespaceKey(e,t),r=this.data.get(n);if(r!==void 0)return typeof r==`object`&&r?JSON.parse(JSON.stringify(r)):r}set(e,t,n){let r=this.getNamespaceKey(e,t),i=typeof n==`object`&&n?JSON.parse(JSON.stringify(n)):n;this.data.set(r,i)}has(e,t){let n=this.getNamespaceKey(e,t);return this.data.has(n)}};const y=n.i.extend({version:c.z.string().optional(),boltdocsVersion:c.z.string().optional(),hooks:c.z.object({beforeBuild:c.z.function().optional(),afterBuild:c.z.function().optional(),beforeDev:c.z.function().optional(),afterDev:c.z.function().optional(),buildEnd:c.z.function().optional(),transformSource:c.z.function().optional(),transformMdx:c.z.function().optional(),transformHtml:c.z.function().optional()}).optional()});function b(e,t){let n=[],r=new Set;for(let i of e){let e=y.safeParse(i);if(!e.success)throw new h(i.name||`unknown`,e.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `));let a=e.data;if(r.has(a.name))throw new h(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!u.default.satisfies(t,a.boltdocsVersion))throw new g(a.name,`Plugin expects Boltdocs version ${a.boltdocsVersion}, but current is ${t}`);if(a.components){for(let[e,t]of Object.entries(a.components))if((t.includes(`..`)||o.default.isAbsolute(t))&&t.includes(`..`))throw new h(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function x(e,t=process.cwd()){let n=e.plugins||[];for(let e of n)if(e.name)try{let n=null;try{let{createRequire:r}=require(`node:module`);n=r(o.default.resolve(t,`package.json`)).resolve(`${e.name}/package.json`)}catch{let r=o.default.resolve(t,`node_modules`,e.name,`package.json`);s.default.existsSync(r)&&(n=r)}if(n&&s.default.existsSync(n)){let t=JSON.parse(s.default.readFileSync(n,`utf-8`)).scripts||{};(t.preinstall||t.postinstall||t.install)&&(0,l.warn)(`💡 ${l.colors.yellow(l.colors.bold(`Nota de seguridad:`))} El plugin ${l.colors.cyan(e.name)} ejecuta scripts nativos al instalarse. Corre ${l.colors.bold(`boltdocs audit`)} para un análisis detallado.`)}}catch{}}var S=class{name=`ConfigResolve`;async execute(e){e.config=await n.n(`docs`,e.root),x(e.config,e.root),e.viteConfig=await X(e.root,`production`)}};function C(e){return e.map(e=>({path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],_content:e._content||``,_rawContent:e._rawContent||``,locale:e.locale,version:e.version,tab:e.tab,collection:e.collection,tags:e.tags,author:e.author,draft:e.draft,excerpt:e.excerpt,coverImage:e.coverImage,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo,date:e.date,lastUpdated:e.lastUpdated,category:e.category,order:e.order,sidebarLabel:e.sidebarLabel,sidebarHidden:e.sidebarHidden,frontmatter:e.frontmatter,slugParts:e.slugParts}))}var w=class{name=`RouteGenerate`;async execute(e){if(!e.config)throw Error(`Config not resolved. Run ConfigResolve first.`);let t=o.default.resolve(e.root,`docs`),n=e.viteConfig?.base||e.config.base||`/docs`;e.routes=[...await i.t(t,e.config,n)],e.ssgRoutes=C(e.routes)}};const T=c.z.object({title:c.z.string().optional(),description:c.z.string().optional(),canonical:c.z.string().url().optional(),robots:c.z.string().optional(),noindex:c.z.boolean().optional(),"og:title":c.z.string().optional(),"og:description":c.z.string().optional(),"og:image":c.z.string().optional(),"og:type":c.z.string().optional(),"og:url":c.z.string().url().optional()});var E=class{name=`SEOValidate`;async execute(e){if(!e.routes||!e.config)throw Error(`Routes or Config not initialized.`);let t=e.config.siteUrl;e.routes=e.routes.map(e=>{let n=e.seo||{},r=n.canonical||(t?`${t.replace(/\/$/,``)}${e.path}`:void 0),i=n[`og:url`]||r||void 0,a={...n};r&&(a.canonical=r),i&&(a[`og:url`]=i),!a[`og:title`]&&e.title&&(a[`og:title`]=e.title),!a[`og:description`]&&e.description&&(a[`og:description`]=e.description);let o=T.safeParse(a);return o.success||(0,l.warn)(`[SEOValidate] Validation issues on route "${e.path}":`,o.error.message),e.title||(0,l.warn)(`[SEOValidate] Route "${e.path}" is missing a title.`),{...e,seo:a}}),e.ssgRoutes=C(e.routes)}},D=class{name=`TypeGenerate`;async execute(e){if(!e.config||!e.routes)throw Error(`Config or Routes not initialized.`);let t=o.default.resolve(e.root,`docs`),n=e.routes.map(e=>e.path),i=(e.config.base||`/docs`).replace(/\/$/,``);n.includes(i)||n.push(i),r.t(e.config,t,e.root,n),r.r(n)}},O=class{name=`SSGBuild`;async execute(e){if(!e.routes||!e.viteConfig)throw Error(`Routes or ViteConfig not initialized.`);let t={};for(let n of e.routes)if(n.path&&n.componentPath){t[n.path]=n.componentPath;let e=n.path.replace(/\/$/,``);t[e]=n.componentPath}await(0,d.build)({entry:`boltdocs/entry`,routeToSourceFileMap:t,cacheDir:o.default.resolve(e.root,`.boltdocs/build`)},e.viteConfig),e.outDir=e.viteConfig.build?.outDir||`dist`}};function k(e,n){let r=(n.siteUrl||``).replace(/\/$/,``);if(!r)return``;let i=n.seo?.indexing!==`all`&&n.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
89
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
90
- ${e.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(i&&e.seo?.index,!0)).map(e=>` <url>
91
- <loc>${t.r(`${r}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`)}</loc>
92
- <changefreq>weekly</changefreq>
93
- <priority>0.7</priority>
94
- </url>`).join(`
95
- `)}
96
- </urlset>`}function A(e){let t=e.siteUrl||``,n=t?`${t.replace(/\/$/,``)}/sitemap.xml`:``;if(e.seo?.indexing!==`all`&&e.seo?.indexing!==`public`&&e.seo?.indexing)return[`User-agent: *`,`Disallow: /`].filter(Boolean).join(`
97
- `);if(typeof e.robots==`string`)return e.robots;if(e.robots&&typeof e.robots==`object`){let t=e.robots.rules||[],r=e.robots.sitemaps||[],i=t.map(e=>{let t=`User-agent: ${e.userAgent}\n`;return e.allow&&(Array.isArray(e.allow)?t+=e.allow.map(e=>`Allow: ${e}`).join(`
98
- `)+`
99
- `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
100
- `)+`
101
- `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
102
-
103
- `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
104
- `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
105
- `)}var j=class{name=`SEOWrite`;async execute(e){if(!e.ssgRoutes||!e.config||!e.outDir)throw Error(`SSG Routes, Config, or OutDir not initialized.`);let t=k(e.ssgRoutes,e.config),n=o.default.resolve(e.root,e.outDir);t&&s.default.writeFileSync(o.default.join(n,`sitemap.xml`),t,`utf-8`);let r=A(e.config);s.default.writeFileSync(o.default.join(n,`robots.txt`),r,`utf-8`)}};function M(){return new N().addStep(new S).addStep(new w).addStep(new E).addStep(new D).addStep(new O).addStep(new j)}var N=class{steps=[];addStep(e){return this.steps.push(e),this}async run(e){let t=[],n=performance.now(),r={...e,timing:{}};for(let e of this.steps){let i=performance.now();try{await e.execute(r);let n=performance.now()-i;t.push({name:e.name,duration:n,success:!0}),r.timing[e.name]=n}catch(a){let o=performance.now()-i;t.push({name:e.name,duration:o,success:!1,error:a instanceof Error?a:Error(String(a))});for(let e of t.filter(e=>e.success).reverse()){let t=this.steps.find(t=>t.name===e.name);if(t?.rollback)try{await t.rollback(r)}catch(t){console.error(`[pipeline] rollback failed for step "${e.name}":`,t)}}let s=performance.now()-n;return{success:!1,failedStep:e.name,error:a instanceof Error?a:Error(String(a)),timing:{total:s,steps:r.timing},stepResults:t}}}return{success:!0,timing:{total:performance.now()-n,steps:r.timing},stepResults:t}}},P=class{plugins;config;store;docsDir;rootDir;constructor(e,t,n,r){this.plugins=e,this.config=t,this.store=new v,this.docsDir=n||process.cwd(),this.rootDir=r||process.cwd()}async runHook(e,...t){let n=this.getSortedPlugins(),r=new N;for(let i of n)i.hooks?.[e]&&r.addStep(this.createStep(i,e,t));await r.run({})}async runChain(e,t){let n=this.getSortedPlugins(),r=t;for(let t of n){if(!t.hooks?.[e])continue;let n=this.createContext(t);try{let i=t.hooks[e],a=await i(n,r);a!==void 0&&(r=a)}catch(r){let i=new _(t.name,e,r instanceof Error?r:Error(String(r)));n.logger.error(i)}}return r}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createStep(e,t,n){return{name:`${e.name}:${String(t)}`,execute:async()=>{let r=this.createContext(e);try{let i=e.hooks[t];await i(r,...n)}catch(n){let i=new _(e.name,t,n instanceof Error?n:Error(String(n)));r.logger.error(i)}},rollback:async()=>{let t=e.hooks?.buildEnd;if(t){let n=this.createContext(e);try{await t(n)}catch{}}}}}createContext(e){return{config:Object.freeze({...this.config}),docsDir:this.docsDir,rootDir:this.rootDir,meta:{name:e.name,version:e.version,boltdocsVersion:e.boltdocsVersion},store:{get:(e,t)=>this.store.get(e,t),set:(e,t,n)=>this.store.set(e,t,n),has:(e,t)=>this.store.has(e,t)},logger:this.createLogger(e.name)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>l.info(`${t} ${e}`),warn:e=>l.warn(`${t} ${e}`),error:e=>{l.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>l.debug(`${t} ${e}`)}}};function F(e,t,n){e&&(0,f.visit)(e,typeof t==`function`?t:e=>Array.isArray(t)?t.includes(e.type):e.type===t,(e,t,r)=>{if(t!==void 0&&r!==void 0)return n(e,t,r)})}function I(e,t,n){F(e,a.o.ELEMENT,(e,r,i)=>{if(e.tagName===t)return n(e,r,i)})}function L(e,t,n){let r=Array.isArray(t)?t:[t],i=[a.o.JSX_FLOW_ELEMENT,a.o.JSX_TEXT_ELEMENT];F(e,e=>i.includes(e.type),(e,t,i)=>{if(e.name&&r.includes(e.name))return n(e,t,i)})}function R(e,t,n){e&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties[t]=n)}function z(e,t){return e?.data?.hProperties?.[t]}function B(e,t){return typeof t==`object`&&t?{type:a.o.JSX_ATTRIBUTE,name:e,value:t}:{type:a.o.JSX_ATTRIBUTE,name:e,value:String(t)}}function V(e,t={},n=[]){return{type:a.o.ELEMENT,tagName:e,properties:t,children:n}}function H(e,t={},n=[],r=!0){let i=Object.entries(t).map(([e,t])=>B(e,t));return{type:r?a.o.JSX_FLOW_ELEMENT:a.o.JSX_TEXT_ELEMENT,name:e,attributes:i,children:n}}function U(e,t){e&&(0,f.visit)(e,a.o.HEADING,(e,n,r)=>{if(n!==void 0&&r!==void 0)return t(e,n,r)})}function W(e,t){e&&(0,f.visit)(e,a.o.LINK,(e,n,r)=>{if(n!==void 0&&r!==void 0)return t(e,n,r)})}function G(e,t){if(!e)return;e.properties=e.properties||{};let n=e.properties.className;Array.isArray(n)?n.includes(t)||n.push(t):typeof n==`string`?n!==t&&(e.properties.className=[n,t]):e.properties.className=[t]}function K(e,t){if(!e||!e.properties||!e.properties.className)return;let n=e.properties.className;Array.isArray(n)?e.properties.className=n.filter(e=>e!==t):typeof n==`string`&&n===t&&delete e.properties.className}function q(e,t){if(!e||!e.properties||!e.properties.className)return!1;let n=e.properties.className;return Array.isArray(n)?n.includes(t):typeof n==`string`?n===t:!1}function J(e){return e}async function Y(e){let{resolveConfig:t}=await Promise.resolve().then(()=>require(`./config-CnmfjOE4.cjs`)),{generateRoutes:n}=await Promise.resolve().then(()=>require(`./routes-B2joDAlC.cjs`)),{generateProjectTypes:r,writeLinkTree:i}=await Promise.resolve().then(()=>require(`./types-generator-BqNKCbrx.cjs`)).then(e=>e.n),{boltdocsPlugin:a}=await Promise.resolve().then(()=>require(`./plugin-Dqj9plKB.cjs`)),o=e?.docsDir||`docs`,s=await t(o),c=(await n(o,s)).map(e=>e.path),l=(s.base||`/docs`).replace(/\/$/,``);return c.includes(l)||c.push(l),r(s,o,void 0,c),i(c),a({...e},s)}async function X(e,t=`development`,n){let[r,i,{boltdocsPlugin:a,getExternalAbsolutePaths:s},{SECURITY_HEADERS:c},{getCSPHeader:l},{resolveConfig:u},{generateRoutes:d},{generateProjectTypes:f,writeLinkTree:p},{normalizePath:m}]=await Promise.all([import(`@vitejs/plugin-react`),import(`@tailwindcss/vite`),Promise.resolve().then(()=>require(`./plugin-Dqj9plKB.cjs`)),Promise.resolve().then(()=>require(`./headers-DuCAOgYX.cjs`)).then(e=>e.n),Promise.resolve().then(()=>require(`./csp-DbbF3R9Q.cjs`)).then(e=>e.t),Promise.resolve().then(()=>require(`./config-CnmfjOE4.cjs`)),Promise.resolve().then(()=>require(`./routes-B2joDAlC.cjs`)),Promise.resolve().then(()=>require(`./types-generator-BqNKCbrx.cjs`)).then(e=>e.n),import(`vite`).then(e=>({normalizePath:e.normalizePath}))]),h=r.default,g=i.default,_=n||await u(`docs`,e),v=(await d(`docs`,_)).map(e=>e.path),y=(_.base||`/docs`).replace(/\/$/,``);v.includes(y)||v.push(y),f(_,`docs`,e,v),p(v);let b=t===`production`,x=b?{...c}:{};return _.security?.enableCSP&&(x[`Content-Security-Policy`]=l(_)),{root:e,mode:t,oxc:{jsx:{development:!b,runtime:`automatic`,importSource:`react`}},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`react-fast-compare`,`invariant`,`use-sync-external-store/shim`]},build:{},plugins:[h(),g(),...a({docsDir:`docs`,root:e},_)],resolve:{alias:[{find:`boltdocs/entry`,replacement:m(o.default.resolve(e,`boltdocs-entry.tsx`))},{find:`boltdocs/client`,replacement:m(o.default.resolve(e,`boltdocs-client.mjs`))},{find:`use-sync-external-store/shim/index.js`,replacement:`react`},{find:`use-sync-external-store/shim`,replacement:`react`},{find:`use-sync-external-store`,replacement:`react`},{find:`@`,replacement:m(o.default.resolve(e,`../packages/core/src`))}],dedupe:[`react`,`react-dom`]},ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...s()],optimizeDeps:{include:[`react`,`react-dom`,`react-fast-compare`,`invariant`,..._.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`,`react-router-dom`]},server:{headers:{...x,..._.vite?.server?.headers},..._.vite?.server},preview:{headers:{...x,..._.vite?.preview?.headers},..._.vite?.preview},..._.vite}}Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return C}});
@@ -1,105 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{r as e,u as t}from"./utils-DexBrwiP.mjs";import{i as n,n as r}from"./config-BCqkPkjC.mjs";import{n as i,t as a}from"./types-generator-BRyf4o9F.mjs";import{t as o}from"./routes-Bm0CQvyL.mjs";import{o as s}from"./shiki-adapter-rQ087Lx3.mjs";import{createRequire as c}from"node:module";import l from"node:path";import u from"node:fs";import{z as d}from"zod";import*as f from"@bdocs/dui";import{colors as p,warn as m}from"@bdocs/dui";import h from"semver";import{build as g}from"@bdocs/ssg/node";import{EXIT as _,SKIP as v,visit as y}from"unist-util-visit";var b=Object.defineProperty,x=(e,t)=>{let n={};for(var r in e)b(n,r,{get:e[r],enumerable:!0});return t||b(n,Symbol.toStringTag,{value:`Module`}),n},S=c(import.meta.url);function C(e,n){let r=l.resolve(process.cwd(),`index.css`),i=u.existsSync(r)?`import './index.css';`:``,a=n?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],o=a.map(([e,n])=>`import * as _comp_${e} from '${t(n)}';
7
- const ${e} = _comp_${e}.default || _comp_${e}['${e}'] || _comp_${e};`).join(`
8
- `),s=a.map(([e])=>e).join(`, `),c=l.basename(e.docsDir||`docs`),d=l.resolve(process.cwd(),e.docsDir||`docs`),f=[`tsx`,`ts`,`jsx`,`js`].map(e=>l.resolve(d,`pages-external/index.${e}`)).find(e=>u.existsSync(e)),p=f?`import * as _external_module from '${t(f)}';`:``,m=f?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``,h=process.env.VITE_SSG===`true`,g=h?`{ eager: true }`:`{}`,_=h?``:`
9
- if (typeof window !== 'undefined') {
10
- const prefetchAll = () => {
11
- const getters = Object.values(mdxModules)
12
- if (getters.length === 0) return
13
- let i = 0
14
- const nextBatch = () => {
15
- if (i >= getters.length) return
16
- const batch = getters.slice(i, i + 6)
17
- i += batch.length
18
- Promise.allSettled(batch.map(fn => fn())).then(() => {
19
- setTimeout(nextBatch, 0)
20
- })
21
- }
22
- ;(typeof requestIdleCallback === 'function' ? requestIdleCallback : function(cb) { setTimeout(cb, 500) })(nextBatch)
23
- }
24
- prefetchAll()
25
- }
26
- `;return`
27
- import { ViteReactSSG, createRoutes } from 'boltdocs/client'
28
- import _routes from 'virtual:boltdocs-routes.ts'
29
- import _collections from 'virtual:boltdocs-collections.ts'
30
- import _config from 'virtual:boltdocs-config.ts'
31
- import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx'
32
- ${i}
33
- ${o}
34
- ${p}
35
-
36
- const mdxModules = import.meta.glob('/${c}/**/*.{md,mdx}', ${g});
37
-
38
- const _collLayoutMods = import.meta.glob('${`/${c}/**/layout.tsx`}', { eager: true });
39
- const _collListMods = import.meta.glob('${`/${c}/**/list.tsx`}', { eager: true });
40
- const _collPostMods = import.meta.glob('${`/${c}/**/post.tsx`}', { eager: true });
41
-
42
- const _collectionLayouts = {};
43
- for (const [p, mod] of Object.entries(_collLayoutMods)) {
44
- const dir = p.split('/').slice(-2, -1)[0];
45
- if (dir.startsWith('[') && dir.endsWith(']')) {
46
- _collectionLayouts[dir.slice(1, -1)] = mod.default || mod;
47
- }
48
- }
49
-
50
- const _collectionLists = {};
51
- for (const [p, mod] of Object.entries(_collListMods)) {
52
- const dir = p.split('/').slice(-2, -1)[0];
53
- if (dir.startsWith('[') && dir.endsWith(']')) {
54
- _collectionLists[dir.slice(1, -1)] = mod.default || mod;
55
- }
56
- }
57
-
58
- const _collectionPosts = {};
59
- for (const [p, mod] of Object.entries(_collPostMods)) {
60
- const dir = p.split('/').slice(-2, -1)[0];
61
- if (dir.startsWith('[') && dir.endsWith(']')) {
62
- _collectionPosts[dir.slice(1, -1)] = mod.default || mod;
63
- }
64
- }
65
-
66
- export const createRoot = ViteReactSSG(
67
- {
68
- routes: createRoutes({
69
- routesData: _routes,
70
- collectionsData: _collections,
71
- collectionLayouts: _collectionLayouts,
72
- collectionLists: _collectionLists,
73
- collectionPosts: _collectionPosts,
74
- config: _config,
75
- mdxModules,
76
- ${m}
77
- components: { ${s}${s?`, `:``} ...(_user_mdx_components || {}) },
78
- }),
79
- },
80
- ({ isClient }) => {
81
- // Boltdocs initialization hook
82
- if (isClient) {
83
- // Client-side initialization
84
- }
85
- },
86
- );
87
- ${_}
88
- `}var w=class extends Error{name=this.constructor.name;constructor(e,t,n){super(`[plugin:${e}] ${t}`,n),this.pluginName=e}},T=class extends w{constructor(e,t){super(e,`Validation failed: ${t}`)}},E=class extends w{constructor(e,t){super(e,`Compatibility error: ${t}`)}},D=class extends w{constructor(e,t,n){super(e,`Error in hook '${t}': ${n.message}`,{cause:n}),this.hookName=t}},O=class{data=new Map;getNamespaceKey(e,t){return`${e}:${t}`}get(e,t){let n=this.getNamespaceKey(e,t),r=this.data.get(n);if(r!==void 0)return typeof r==`object`&&r?JSON.parse(JSON.stringify(r)):r}set(e,t,n){let r=this.getNamespaceKey(e,t),i=typeof n==`object`&&n?JSON.parse(JSON.stringify(n)):n;this.data.set(r,i)}has(e,t){let n=this.getNamespaceKey(e,t);return this.data.has(n)}};const k=n.extend({version:d.string().optional(),boltdocsVersion:d.string().optional(),hooks:d.object({beforeBuild:d.function().optional(),afterBuild:d.function().optional(),beforeDev:d.function().optional(),afterDev:d.function().optional(),buildEnd:d.function().optional(),transformSource:d.function().optional(),transformMdx:d.function().optional(),transformHtml:d.function().optional()}).optional()});function A(e,t){let n=[],r=new Set;for(let i of e){let e=k.safeParse(i);if(!e.success)throw new T(i.name||`unknown`,e.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `));let a=e.data;if(r.has(a.name))throw new T(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!h.satisfies(t,a.boltdocsVersion))throw new E(a.name,`Plugin expects Boltdocs version ${a.boltdocsVersion}, but current is ${t}`);if(a.components){for(let[e,t]of Object.entries(a.components))if((t.includes(`..`)||l.isAbsolute(t))&&t.includes(`..`))throw new T(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function j(e,t=process.cwd()){let n=e.plugins||[];for(let e of n)if(e.name)try{let n=null;try{let{createRequire:r}=S(`node:module`);n=r(l.resolve(t,`package.json`)).resolve(`${e.name}/package.json`)}catch{let r=l.resolve(t,`node_modules`,e.name,`package.json`);u.existsSync(r)&&(n=r)}if(n&&u.existsSync(n)){let t=JSON.parse(u.readFileSync(n,`utf-8`)).scripts||{};(t.preinstall||t.postinstall||t.install)&&m(`💡 ${p.yellow(p.bold(`Nota de seguridad:`))} El plugin ${p.cyan(e.name)} ejecuta scripts nativos al instalarse. Corre ${p.bold(`boltdocs audit`)} para un análisis detallado.`)}}catch{}}var M=class{name=`ConfigResolve`;async execute(e){e.config=await r(`docs`,e.root),j(e.config,e.root),e.viteConfig=await $(e.root,`production`)}};function N(e){return e.map(e=>({path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],_content:e._content||``,_rawContent:e._rawContent||``,locale:e.locale,version:e.version,tab:e.tab,collection:e.collection,tags:e.tags,author:e.author,draft:e.draft,excerpt:e.excerpt,coverImage:e.coverImage,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo,date:e.date,lastUpdated:e.lastUpdated,category:e.category,order:e.order,sidebarLabel:e.sidebarLabel,sidebarHidden:e.sidebarHidden,frontmatter:e.frontmatter,slugParts:e.slugParts}))}var ee=class{name=`RouteGenerate`;async execute(e){if(!e.config)throw Error(`Config not resolved. Run ConfigResolve first.`);let t=l.resolve(e.root,`docs`),n=e.viteConfig?.base||e.config.base||`/docs`;e.routes=[...await o(t,e.config,n)],e.ssgRoutes=N(e.routes)}};const P=d.object({title:d.string().optional(),description:d.string().optional(),canonical:d.string().url().optional(),robots:d.string().optional(),noindex:d.boolean().optional(),"og:title":d.string().optional(),"og:description":d.string().optional(),"og:image":d.string().optional(),"og:type":d.string().optional(),"og:url":d.string().url().optional()});var F=class{name=`SEOValidate`;async execute(e){if(!e.routes||!e.config)throw Error(`Routes or Config not initialized.`);let t=e.config.siteUrl;e.routes=e.routes.map(e=>{let n=e.seo||{},r=n.canonical||(t?`${t.replace(/\/$/,``)}${e.path}`:void 0),i=n[`og:url`]||r||void 0,a={...n};r&&(a.canonical=r),i&&(a[`og:url`]=i),!a[`og:title`]&&e.title&&(a[`og:title`]=e.title),!a[`og:description`]&&e.description&&(a[`og:description`]=e.description);let o=P.safeParse(a);return o.success||m(`[SEOValidate] Validation issues on route "${e.path}":`,o.error.message),e.title||m(`[SEOValidate] Route "${e.path}" is missing a title.`),{...e,seo:a}}),e.ssgRoutes=N(e.routes)}},I=class{name=`TypeGenerate`;async execute(e){if(!e.config||!e.routes)throw Error(`Config or Routes not initialized.`);let t=l.resolve(e.root,`docs`),n=e.routes.map(e=>e.path),r=(e.config.base||`/docs`).replace(/\/$/,``);n.includes(r)||n.push(r),a(e.config,t,e.root,n),i(n)}},L=class{name=`SSGBuild`;async execute(e){if(!e.routes||!e.viteConfig)throw Error(`Routes or ViteConfig not initialized.`);let t={};for(let n of e.routes)if(n.path&&n.componentPath){t[n.path]=n.componentPath;let e=n.path.replace(/\/$/,``);t[e]=n.componentPath}await g({entry:`boltdocs/entry`,routeToSourceFileMap:t,cacheDir:l.resolve(e.root,`.boltdocs/build`)},e.viteConfig),e.outDir=e.viteConfig.build?.outDir||`dist`}};function R(t,n){let r=(n.siteUrl||``).replace(/\/$/,``);if(!r)return``;let i=n.seo?.indexing!==`all`&&n.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
89
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
90
- ${t.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(i&&e.seo?.index,!0)).map(t=>` <url>
91
- <loc>${e(`${r}${t.path.startsWith(`/`)?t.path:`/${t.path}`}`)}</loc>
92
- <changefreq>weekly</changefreq>
93
- <priority>0.7</priority>
94
- </url>`).join(`
95
- `)}
96
- </urlset>`}function z(e){let t=e.siteUrl||``,n=t?`${t.replace(/\/$/,``)}/sitemap.xml`:``;if(e.seo?.indexing!==`all`&&e.seo?.indexing!==`public`&&e.seo?.indexing)return[`User-agent: *`,`Disallow: /`].filter(Boolean).join(`
97
- `);if(typeof e.robots==`string`)return e.robots;if(e.robots&&typeof e.robots==`object`){let t=e.robots.rules||[],r=e.robots.sitemaps||[],i=t.map(e=>{let t=`User-agent: ${e.userAgent}\n`;return e.allow&&(Array.isArray(e.allow)?t+=e.allow.map(e=>`Allow: ${e}`).join(`
98
- `)+`
99
- `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
100
- `)+`
101
- `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
102
-
103
- `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
104
- `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
105
- `)}var B=class{name=`SEOWrite`;async execute(e){if(!e.ssgRoutes||!e.config||!e.outDir)throw Error(`SSG Routes, Config, or OutDir not initialized.`);let t=R(e.ssgRoutes,e.config),n=l.resolve(e.root,e.outDir);t&&u.writeFileSync(l.join(n,`sitemap.xml`),t,`utf-8`);let r=z(e.config);u.writeFileSync(l.join(n,`robots.txt`),r,`utf-8`)}};function V(){return new H().addStep(new M).addStep(new ee).addStep(new F).addStep(new I).addStep(new L).addStep(new B)}var H=class{steps=[];addStep(e){return this.steps.push(e),this}async run(e){let t=[],n=performance.now(),r={...e,timing:{}};for(let e of this.steps){let i=performance.now();try{await e.execute(r);let n=performance.now()-i;t.push({name:e.name,duration:n,success:!0}),r.timing[e.name]=n}catch(a){let o=performance.now()-i;t.push({name:e.name,duration:o,success:!1,error:a instanceof Error?a:Error(String(a))});for(let e of t.filter(e=>e.success).reverse()){let t=this.steps.find(t=>t.name===e.name);if(t?.rollback)try{await t.rollback(r)}catch(t){console.error(`[pipeline] rollback failed for step "${e.name}":`,t)}}let s=performance.now()-n;return{success:!1,failedStep:e.name,error:a instanceof Error?a:Error(String(a)),timing:{total:s,steps:r.timing},stepResults:t}}}return{success:!0,timing:{total:performance.now()-n,steps:r.timing},stepResults:t}}},U=class{plugins;config;store;docsDir;rootDir;constructor(e,t,n,r){this.plugins=e,this.config=t,this.store=new O,this.docsDir=n||process.cwd(),this.rootDir=r||process.cwd()}async runHook(e,...t){let n=this.getSortedPlugins(),r=new H;for(let i of n)i.hooks?.[e]&&r.addStep(this.createStep(i,e,t));await r.run({})}async runChain(e,t){let n=this.getSortedPlugins(),r=t;for(let t of n){if(!t.hooks?.[e])continue;let n=this.createContext(t);try{let i=t.hooks[e],a=await i(n,r);a!==void 0&&(r=a)}catch(r){let i=new D(t.name,e,r instanceof Error?r:Error(String(r)));n.logger.error(i)}}return r}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createStep(e,t,n){return{name:`${e.name}:${String(t)}`,execute:async()=>{let r=this.createContext(e);try{let i=e.hooks[t];await i(r,...n)}catch(n){let i=new D(e.name,t,n instanceof Error?n:Error(String(n)));r.logger.error(i)}},rollback:async()=>{let t=e.hooks?.buildEnd;if(t){let n=this.createContext(e);try{await t(n)}catch{}}}}}createContext(e){return{config:Object.freeze({...this.config}),docsDir:this.docsDir,rootDir:this.rootDir,meta:{name:e.name,version:e.version,boltdocsVersion:e.boltdocsVersion},store:{get:(e,t)=>this.store.get(e,t),set:(e,t,n)=>this.store.set(e,t,n),has:(e,t)=>this.store.has(e,t)},logger:this.createLogger(e.name)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>f.info(`${t} ${e}`),warn:e=>f.warn(`${t} ${e}`),error:e=>{f.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>f.debug(`${t} ${e}`)}}};function W(e,t,n){e&&y(e,typeof t==`function`?t:e=>Array.isArray(t)?t.includes(e.type):e.type===t,(e,t,r)=>{if(t!==void 0&&r!==void 0)return n(e,t,r)})}function G(e,t,n){W(e,s.ELEMENT,(e,r,i)=>{if(e.tagName===t)return n(e,r,i)})}function K(e,t,n){let r=Array.isArray(t)?t:[t],i=[s.JSX_FLOW_ELEMENT,s.JSX_TEXT_ELEMENT];W(e,e=>i.includes(e.type),(e,t,i)=>{if(e.name&&r.includes(e.name))return n(e,t,i)})}function q(e,t,n){e&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties[t]=n)}function J(e,t){return e?.data?.hProperties?.[t]}function Y(e,t){return typeof t==`object`&&t?{type:s.JSX_ATTRIBUTE,name:e,value:t}:{type:s.JSX_ATTRIBUTE,name:e,value:String(t)}}function X(e,t={},n=[]){return{type:s.ELEMENT,tagName:e,properties:t,children:n}}function Z(e,t={},n=[],r=!0){let i=Object.entries(t).map(([e,t])=>Y(e,t));return{type:r?s.JSX_FLOW_ELEMENT:s.JSX_TEXT_ELEMENT,name:e,attributes:i,children:n}}function Q(e,t){e&&y(e,s.HEADING,(e,n,r)=>{if(n!==void 0&&r!==void 0)return t(e,n,r)})}function te(e,t){e&&y(e,s.LINK,(e,n,r)=>{if(n!==void 0&&r!==void 0)return t(e,n,r)})}function ne(e,t){if(!e)return;e.properties=e.properties||{};let n=e.properties.className;Array.isArray(n)?n.includes(t)||n.push(t):typeof n==`string`?n!==t&&(e.properties.className=[n,t]):e.properties.className=[t]}function re(e,t){if(!e||!e.properties||!e.properties.className)return;let n=e.properties.className;Array.isArray(n)?e.properties.className=n.filter(e=>e!==t):typeof n==`string`&&n===t&&delete e.properties.className}function ie(e,t){if(!e||!e.properties||!e.properties.className)return!1;let n=e.properties.className;return Array.isArray(n)?n.includes(t):typeof n==`string`?n===t:!1}function ae(e){return e}async function oe(e){let{resolveConfig:t}=await import(`./config-BPWGa2W3.mjs`),{generateRoutes:n}=await import(`./routes-BTx0ngdX.mjs`),{generateProjectTypes:r,writeLinkTree:i}=await import(`./types-generator-Cu2jQP-V.mjs`),{boltdocsPlugin:a}=await import(`./plugin-CHa0IT49.mjs`),o=e?.docsDir||`docs`,s=await t(o),c=(await n(o,s)).map(e=>e.path),l=(s.base||`/docs`).replace(/\/$/,``);return c.includes(l)||c.push(l),r(s,o,void 0,c),i(c),a({...e},s)}async function $(e,t=`development`,n){let[r,i,{boltdocsPlugin:a,getExternalAbsolutePaths:o},{SECURITY_HEADERS:s},{getCSPHeader:c},{resolveConfig:u},{generateRoutes:d},{generateProjectTypes:f,writeLinkTree:p},{normalizePath:m}]=await Promise.all([import(`@vitejs/plugin-react`),import(`@tailwindcss/vite`),import(`./plugin-CHa0IT49.mjs`),import(`./headers-DBzZ9yC6.mjs`).then(e=>e.n),import(`./csp-CUAEgrxR.mjs`).then(e=>e.t),import(`./config-BPWGa2W3.mjs`),import(`./routes-BTx0ngdX.mjs`),import(`./types-generator-Cu2jQP-V.mjs`),import(`vite`).then(e=>({normalizePath:e.normalizePath}))]),h=r.default,g=i.default,_=n||await u(`docs`,e),v=(await d(`docs`,_)).map(e=>e.path),y=(_.base||`/docs`).replace(/\/$/,``);v.includes(y)||v.push(y),f(_,`docs`,e,v),p(v);let b=t===`production`,x=b?{...s}:{};return _.security?.enableCSP&&(x[`Content-Security-Policy`]=c(_)),{root:e,mode:t,oxc:{jsx:{development:!b,runtime:`automatic`,importSource:`react`}},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`react-fast-compare`,`invariant`,`use-sync-external-store/shim`]},build:{},plugins:[h(),g(),...a({docsDir:`docs`,root:e},_)],resolve:{alias:[{find:`boltdocs/entry`,replacement:m(l.resolve(e,`boltdocs-entry.tsx`))},{find:`boltdocs/client`,replacement:m(l.resolve(e,`boltdocs-client.mjs`))},{find:`use-sync-external-store/shim/index.js`,replacement:`react`},{find:`use-sync-external-store/shim`,replacement:`react`},{find:`use-sync-external-store`,replacement:`react`},{find:`@`,replacement:m(l.resolve(e,`../packages/core/src`))}],dedupe:[`react`,`react-dom`]},ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...o()],optimizeDeps:{include:[`react`,`react-dom`,`react-fast-compare`,`invariant`,..._.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`,`react-router-dom`]},server:{headers:{...x,..._.vite?.server?.headers},..._.vite?.server},preview:{headers:{...x,..._.vite?.preview?.headers},..._.vite?.preview},..._.vite}}export{x as A,A as C,D,w as E,T as O,j as S,E as T,Q as _,v as a,V as b,Z as c,ie as d,re as f,G as g,W as h,_ as i,C as k,X as l,K as m,$ as n,ne as o,q as p,ae as r,Y as s,oe as t,J as u,te as v,O as w,N as x,U as y};
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{A as e}from"./node-FkxzriO7.mjs";import{_ as t,a as n,d as r,h as i,i as a,l as o,m as s,p as c,t as l}from"./utils-DexBrwiP.mjs";import{n as u,t as d}from"./errors-C0Hx15Ag.mjs";import{t as f}from"./cache-CfhOTR3Q.mjs";import p from"node:path";import m from"github-slugger";function h(e,t,r,a,o){let s=p.relative(t,e).replace(/\\/g,`/`),c=s.split(`/`),l,u,d,f;if(a?.versions&&c.length>0){let e=c[0],t=a.versions.prefix||``,n=a.versions.versions.find(n=>e===t+n.path||e===n.path);n&&(u=n.path,c=c.slice(1))}if(a?.i18n&&c.length>0){let e=c[0];(Array.isArray(a.i18n.locales)?a.i18n.locales.includes(e):a.i18n.locales[e])&&(l=e,c=c.slice(1))}if(c.length>0){let e=c[0].match(/^\((.+)\)$/);e&&(d=e[1].toLowerCase(),c=c.slice(1))}if(c.length>0){let e=c[0].match(/^\[(.+)\]$/);e&&(f=e[1].toLowerCase(),c=c.slice(1))}let m=[...c],h=c.map(e=>i(e)).join(`/`),g=o?o.startsWith(`/`)?o:`/${o}`:n(h||`index.md`),_=[f?`/${f}`:r,u,l,!o&&!f?d:void 0,g].filter(Boolean).join(`/`).replace(/\/+/g,`/`).replace(/\/$/,``)||`/`;return{relativePath:s,finalPath:_.startsWith(`/`)?_:`/${_}`,remainingParts:m,locale:l,version:u,inferredTab:d,subRouteGroup:void 0,collection:f}}const g=/^(#{2,4})\s+(.+)$/gm,_=/\[([^\]]+)\]\([^)]+\)/g,v=/[_*`]/g,y=/\s+/g,b=/[[\]_*`]|#+.*$|\{[^}]+\}/gm,x=/\((?:[^)]+)\)/g;function S(e,t){let n=new m,r=[];for(let t of e.matchAll(g)){let e=t[1].length,i=c(t[2].replace(_,`$1`).replace(v,``).trim()).trim(),a=n.slug(i);r.push({level:e,text:i,id:a})}let i=s(e.replace(b,``).replace(x,``).replace(y,` `)).trim(),a=t?c(t).trim():``;return!a&&e&&(a=i.substring(0,160)),{headings:r,description:a,plainText:i}}const C=[`og:`,`twitter:`,`article:`,`music:`,`video:`,`profile:`,`book:`],w=[`noindex`,`robots`,`canonical`,`keywords`,`author`];function T(e){let t={};e.seo&&typeof e.seo==`object`&&Object.assign(t,e.seo);for(let n of Object.keys(e))(w.includes(n)||C.some(e=>n.startsWith(e)))&&(t[n]=e[n]);return e.hidden===!0&&t.noindex===void 0&&(t.noindex=!0),Object.keys(t).length>0?t:void 0}function E(e){return{title:e.title?c(String(e.title)):void 0,badge:e.badge?c(String(e.badge)):void 0,description:e.description?c(String(e.description)):void 0}}async function D(e,n,o,s){let c=await f.get(e);if(c)return c;let d=e.replace(/\\/g,`/`),m=n.replace(/\\/g,`/`),g=O(d),_=p.resolve(g),v=p.resolve(m);if(p.sep===`/`){let e=e=>{let t=e.replace(/\\/g,`/`);return/^[a-zA-Z]:/.test(t)&&(t=t.replace(/^[a-zA-Z]:/,``)),p.resolve(t)};_=e(g),v=e(m)}let y=p.relative(v,_).replace(/\\/g,`/`);if(y.startsWith(`../`)||y!==`.`&&!t.test(y))throw new u(`Security breach: File is outside of docs directory, contains null bytes, or invalid path characters: ${p.basename(g)}`);let{data:b,content:x}=await r(e),C=h(_,v,o,s,b.permalink),w=S(x,b.description),D=E(b),k=T(b),A=p.basename(C.relativePath),j=i(A),M=C.remainingParts.map(e=>i(e)).slice(0,-1),N=/^index\.mdx?$/.test(j),P=b.sidebarPosition??a(A),F=M.join(`/`),I={route:{path:C.finalPath,componentPath:e,filePath:C.relativePath,title:D.title||i(p.basename(d,p.extname(d))),description:w.description,sidebarPosition:P,headings:w.headings,locale:C.locale,version:C.version,badge:D.badge,icon:b.icon?String(b.icon):void 0,tab:C.inferredTab,subRouteGroup:C.subRouteGroup,slugParts:M,_content:w.plainText,_rawContent:x,date:b.date,lastUpdated:b.lastUpdated,category:b.category,order:b.order,sidebarLabel:b.sidebarLabel,sidebarHidden:b.sidebarHidden||b.hidden,seo:k,frontmatter:b,collection:C.collection,tags:b.tags,author:b.author,draft:b.draft,excerpt:b.excerpt,coverImage:b.coverImage||b.cover},relativeDir:C.collection?void 0:F||void 0,isGroupIndex:N,inferredTab:C.inferredTab,inferredCollection:C.collection,groupMeta:N?{title:b.groupTitle||D.title||(M.length>0?l(M[M.length-1]):``),position:b.groupPosition??b.sidebarPosition??(C.remainingParts.length>1?a(C.remainingParts[C.remainingParts.length-2]):void 0),icon:b.icon?String(b.icon):void 0}:void 0,inferredGroupPosition:C.remainingParts.length>1?a(C.remainingParts[C.remainingParts.length-2]):void 0};return await f.set(e,I),I}function O(e){let t;try{t=decodeURIComponent(e)}catch{throw o(`SECURITY_ERROR`,`Invalid encoding in path`,{file:e}),new d(`Security breach: Invalid characters or encoding in path`)}if(t.length>260)throw new u(`Path length exceeds limit`);return t}var k=e({parseDocFile:()=>D});export{D as n,k as t};
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`),n=require(`./errors-Dx6JHoKE.cjs`),r=require(`./cache-B19MLTpN.cjs`);let i=require(`node:path`);i=e.n(i);let a=require(`github-slugger`);a=e.n(a);function o(e,n,r,a,o){let s=i.default.relative(n,e).replace(/\\/g,`/`),c=s.split(`/`),l,u,d,f;if(a?.versions&&c.length>0){let e=c[0],t=a.versions.prefix||``,n=a.versions.versions.find(n=>e===t+n.path||e===n.path);n&&(u=n.path,c=c.slice(1))}if(a?.i18n&&c.length>0){let e=c[0];(Array.isArray(a.i18n.locales)?a.i18n.locales.includes(e):a.i18n.locales[e])&&(l=e,c=c.slice(1))}if(c.length>0){let e=c[0].match(/^\((.+)\)$/);e&&(d=e[1].toLowerCase(),c=c.slice(1))}if(c.length>0){let e=c[0].match(/^\[(.+)\]$/);e&&(f=e[1].toLowerCase(),c=c.slice(1))}let p=[...c],m=c.map(e=>t.h(e)).join(`/`),h=o?o.startsWith(`/`)?o:`/${o}`:t.a(m||`index.md`),g=[f?`/${f}`:r,u,l,!o&&!f?d:void 0,h].filter(Boolean).join(`/`).replace(/\/+/g,`/`).replace(/\/$/,``)||`/`;return{relativePath:s,finalPath:g.startsWith(`/`)?g:`/${g}`,remainingParts:p,locale:l,version:u,inferredTab:d,subRouteGroup:void 0,collection:f}}const s=/^(#{2,4})\s+(.+)$/gm,c=/\[([^\]]+)\]\([^)]+\)/g,l=/[_*`]/g,u=/\s+/g,d=/[[\]_*`]|#+.*$|\{[^}]+\}/gm,f=/\((?:[^)]+)\)/g;function p(e,n){let r=new a.default,i=[];for(let n of e.matchAll(s)){let e=n[1].length,a=t.p(n[2].replace(c,`$1`).replace(l,``).trim()).trim(),o=r.slug(a);i.push({level:e,text:a,id:o})}let o=t.m(e.replace(d,``).replace(f,``).replace(u,` `)).trim(),p=n?t.p(n).trim():``;return!p&&e&&(p=o.substring(0,160)),{headings:i,description:p,plainText:o}}const m=[`og:`,`twitter:`,`article:`,`music:`,`video:`,`profile:`,`book:`],h=[`noindex`,`robots`,`canonical`,`keywords`,`author`];function g(e){let t={};e.seo&&typeof e.seo==`object`&&Object.assign(t,e.seo);for(let n of Object.keys(e))(h.includes(n)||m.some(e=>n.startsWith(e)))&&(t[n]=e[n]);return e.hidden===!0&&t.noindex===void 0&&(t.noindex=!0),Object.keys(t).length>0?t:void 0}function _(e){return{title:e.title?t.p(String(e.title)):void 0,badge:e.badge?t.p(String(e.badge)):void 0,description:e.description?t.p(String(e.description)):void 0}}async function v(e,a,s,c){let l=await r.t.get(e);if(l)return l;let u=e.replace(/\\/g,`/`),d=a.replace(/\\/g,`/`),f=y(u),m=i.default.resolve(f),h=i.default.resolve(d);if(i.default.sep===`/`){let e=e=>{let t=e.replace(/\\/g,`/`);return/^[a-zA-Z]:/.test(t)&&(t=t.replace(/^[a-zA-Z]:/,``)),i.default.resolve(t)};m=e(f),h=e(d)}let v=i.default.relative(h,m).replace(/\\/g,`/`);if(v.startsWith(`../`)||v!==`.`&&!t._.test(v))throw new n.n(`Security breach: File is outside of docs directory, contains null bytes, or invalid path characters: ${i.default.basename(f)}`);let{data:b,content:x}=await t.d(e),S=o(m,h,s,c,b.permalink),C=p(x,b.description),w=_(b),T=g(b),E=i.default.basename(S.relativePath),D=t.h(E),O=S.remainingParts.map(e=>t.h(e)).slice(0,-1),k=/^index\.mdx?$/.test(D),A=b.sidebarPosition??t.i(E),j=O.join(`/`),M={route:{path:S.finalPath,componentPath:e,filePath:S.relativePath,title:w.title||t.h(i.default.basename(u,i.default.extname(u))),description:C.description,sidebarPosition:A,headings:C.headings,locale:S.locale,version:S.version,badge:w.badge,icon:b.icon?String(b.icon):void 0,tab:S.inferredTab,subRouteGroup:S.subRouteGroup,slugParts:O,_content:C.plainText,_rawContent:x,date:b.date,lastUpdated:b.lastUpdated,category:b.category,order:b.order,sidebarLabel:b.sidebarLabel,sidebarHidden:b.sidebarHidden||b.hidden,seo:T,frontmatter:b,collection:S.collection,tags:b.tags,author:b.author,draft:b.draft,excerpt:b.excerpt,coverImage:b.coverImage||b.cover},relativeDir:S.collection?void 0:j||void 0,isGroupIndex:k,inferredTab:S.inferredTab,inferredCollection:S.collection,groupMeta:k?{title:b.groupTitle||w.title||(O.length>0?t.t(O[O.length-1]):``),position:b.groupPosition??b.sidebarPosition??(S.remainingParts.length>1?t.i(S.remainingParts[S.remainingParts.length-2]):void 0),icon:b.icon?String(b.icon):void 0}:void 0,inferredGroupPosition:S.remainingParts.length>1?t.i(S.remainingParts[S.remainingParts.length-2]):void 0};return await r.t.set(e,M),M}function y(e){let r;try{r=decodeURIComponent(e)}catch{throw t.l(`SECURITY_ERROR`,`Invalid encoding in path`,{file:e}),new n.t(`Security breach: Invalid characters or encoding in path`)}if(r.length>260)throw new n.n(`Path length exceeds limit`);return r}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return v}});
@@ -1,61 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{C as e,a as t,h as n,k as r,p as i,x as a,y as o}from"./node-FkxzriO7.mjs";import{c as s,d as c,u as l}from"./utils-DexBrwiP.mjs";import{n as u,t as d}from"./config-BCqkPkjC.mjs";import{n as ee,t as f}from"./types-generator-BRyf4o9F.mjs";import{i as p}from"./cache-CfhOTR3Q.mjs";import{i as m,n as h,r as g,t as _}from"./routes-Bm0CQvyL.mjs";import{a as v,i as y,n as te,o as b,r as ne,s as re}from"./shiki-adapter-rQ087Lx3.mjs";import{n as x}from"./doctor-hKOBLhBF.mjs";import{t as ie}from"./headers-DBzZ9yC6.mjs";import{n as ae}from"./csp-CUAEgrxR.mjs";import*as S from"node:module";import C from"node:path";import w from"node:fs";import{error as T}from"@bdocs/dui";import E from"node:crypto";import{fileURLToPath as oe}from"node:url";import{loadEnv as se}from"vite";import{ViteImageOptimizer as ce}from"@bdocs/plugin-image-optimizer";import le from"@mdx-js/rollup";import ue from"remark-gfm";import D from"remark-frontmatter";import O from"rehype-slug";function k(e){return`<!doctype html>
7
- <html lang="en">
8
- <head>
9
- <meta charset="UTF-8" />
10
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
11
- <title>${e.theme?.title||`Boltdocs`}</title>
12
- </head>
13
- <body>
14
- <div id="root"></div>
15
- </body>
16
- </html>`}function A(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=k(t));let n=t.theme,r=n?.title||`Boltdocs`;if(typeof r==`object`){let e=t.i18n?.defaultLocale||``;r=r[e]||Object.values(r)[0]||`Boltdocs`}let i=n?.description||``;if(typeof i==`object`){let e=t.i18n?.defaultLocale||``;i=i[e]||Object.values(i)[0]||``}let a=n?.favicon;!a&&n?.logo&&(a=typeof n.logo==`string`?n.logo:n.logo.light||n.logo.dark);let o=[a?`<link rel="icon" href="${a}">`:``,`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,`<meta property="og:type" content="website">`,t.siteUrl?`<meta property="og:url" content="${t.siteUrl}">`:``,t.siteUrl?`<link rel="canonical" href="${t.siteUrl}">`:``,`<meta name="twitter:card" content="summary_large_image">`,`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,`<meta name="generator" content="Boltdocs">`].filter(Boolean).join(`
17
- `);e=e.includes(`<title>`)?e.replace(/<title>.*?<\/title>/,`<title>${r}</title>`):e.replace(`</head>`,` <title>${r}</title>\n </head>`);let s=``;if(t.integrations?.ga4){let e=t.integrations.ga4;if(process.env.NODE_ENV===`production`||e.debug){let t=e.anonymizeIp?`gtag('set', 'ip', true);`:``,n=e.sendPageView===!1?`{send_page_view: false}`:`{}`,r=e.cookieFlags?`, {'cookie_flags': '${e.cookieFlags}'}`:``;s=`
18
- <!-- Google tag (gtag.js) - ${e.measurementId} -->
19
- <script async src="https://www.googletagmanager.com/gtag/js?id=${e.measurementId}"><\/script>
20
- <script>
21
- window.dataLayer = window.dataLayer || [];
22
- function gtag(){dataLayer.push(arguments);}
23
- gtag('js', new Date());
24
- ${t}
25
- gtag('config', '${e.measurementId}', ${n}${r});
26
- <\/script>
27
- `}}let c=``,l=``;if(t.integrations?.gtm){let e=t.integrations.gtm;if(process.env.NODE_ENV===`production`){let t=e.dataLayerName||`dataLayer`;c=`
28
- <!-- Google Tag Manager -->
29
- <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
30
- new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
31
- j=d.createElement(s),dl=l!='${t}'?'&l='+l:'';j.async=true;j.src=
32
- 'https://www.googletagmanager.com/gtm.js?id='+i+dl+'${e.preview?`&gtm_preview=${e.preview}`:``}';f.parentNode.insertBefore(j,f);
33
- })(window,document,'script','${t}','${e.tagId}');<\/script>
34
- <!-- End Google Tag Manager -->
35
- `,l=`
36
- <!-- Google Tag Manager (noscript) -->
37
- <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=${e.tagId}"
38
- height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
39
- <!-- End Google Tag Manager (noscript) -->
40
- `}}return e=e.replace(`<head>`,`<head>
41
-
42
- <script>
43
- (function() {
44
- try {
45
- var stored = localStorage.getItem("boltdocs-theme");
46
- var isDark =
47
- stored === "dark" ||
48
- (stored !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
49
- document.documentElement.classList.toggle("dark", isDark);
50
- document.documentElement.dataset.theme = isDark ? "dark" : "light";
51
- } catch (e) {
52
- // Ignore localStorage errors (e.g. if cookies/storage are disabled)
53
- }
54
- })();
55
- <\/script>
56
- `),e=e.replace(`</head>`,` ${o}\n${s}${c} </head>`),l&&(e=e.replace(/<body([^>]*)>/,`<body$1>\n${l}`)),!e.includes(`src/main`)&&!e.includes(`virtual:boltdocs-entry`)&&(e=e.replace(`</body>`,` <script type="module">import "virtual:boltdocs-entry";<\/script>
57
- </body>`)),e}const j=C.dirname(oe(import.meta.url));function M(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(M):e&&typeof e==`object`?Object.values(e).flatMap(M):[]}const de=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function fe(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=M(Object.entries(n.frontmatter).filter(([e])=>!de.has(e)).map(([e,t])=>t)).join(` `));let r=e?`${n._content||``} ${e}`:n._content||``;if(t.push({id:n.path,title:n.title,content:r,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings)for(let e of n.headings)t.push({id:`${n.path}#${e.id}`,title:e.text,content:`${e.text} in ${n.title}`,url:`${n.path}#${e.id}`,display:`${n.title} > ${e.text}`,locale:n.locale,version:n.version})}return t}let N=null,P=null;function F(){N=null,P=null}function I(e,t,n,i){return{name:`vite-plugin-boltdocs-virtual-modules`,resolveId(e){let t=n()?.root||process.cwd();return e.includes(`boltdocs-entry.tsx`)||e===`virtual:boltdocs-entry`||e===`boltdocs-entry`||e===`\0virtual:boltdocs-entry`?l(C.resolve(t,`boltdocs-entry.tsx`)):e.includes(`boltdocs-client.mjs`)||e===`virtual:boltdocs-client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.ts`?l(C.resolve(t,`boltdocs-client.mjs`)):e.startsWith(`virtual:boltdocs-`)?`\0`+e:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(n){let o=t();if(n.includes(`boltdocs-entry.tsx`)||n===`\0virtual:boltdocs-entry`)return r(e,o);if(n.includes(`boltdocs-client.mjs`)||n===`\0virtual:boltdocs-client.ts`||n===`virtual:boltdocs-client`){let e=j,t=e;for(;e!==C.parse(e).root;){if(w.existsSync(C.join(e,`package.json`))&&JSON.parse(w.readFileSync(C.join(e,`package.json`),`utf-8`)).name===`boltdocs`){t=e;break}e=C.dirname(e)}let n=C.join(t,`src/client/index.ts`),r=C.join(t,`dist/client/index.js`);return`export * from '${l(w.existsSync(n)?n:r)}';`}if(!n.startsWith(`\0virtual:boltdocs-`))return;let s=n.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(s===`routes`){let e=a(await _(i,o));return`export default ${JSON.stringify(e,null,2)};`}if(s===`collections`){let e=a(await _(i,o)),t={};for(let n of e)n.collection&&(t[n.collection]||(t[n.collection]=[]),t[n.collection].push({path:n.path,title:n.title,date:n.date,excerpt:n.excerpt,tags:n.tags,author:n.author,coverImage:n.coverImage,filePath:n.filePath,frontmatter:n.frontmatter}));return`export default ${JSON.stringify(t,null,2)};`}if(s===`config`){if(N===null){let{loadDirectoryMeta:e}=await import(`./meta-loader-CD3Yptr5.mjs`);N=await e(i)}let e=N,t={base:o?.base,theme:o?.theme,i18n:o?.i18n,versions:o?.versions,siteUrl:o?.siteUrl,integrations:o?.integrations,plugins:o?.plugins?.map(e=>({name:e.name})),directoryMeta:e};return`export default ${JSON.stringify(t,null,2)};`}if(s===`entry`)return r(e,o);if(s===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],t=null;for(let n of e){let e=C.resolve(i,`mdx-components.${n}`);if(w.existsSync(e)){t=e;break}}if(t){let e=l(t);return`import * as components from '${e}';
58
- const mdxComponents = components.default || components;
59
- export default mdxComponents;
60
- export * from '${e}';`}return`export default {};`}if(s===`layout`){let e=[`tsx`,`jsx`],t=null;for(let n of e){let e=C.resolve(i,`layout.${n}`);if(w.existsSync(e)){t=e;break}}if(t)return`import UserLayout from '${l(t)}';
61
- export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(s===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let n of e){let e=C.resolve(i,`icons.${n}`);if(w.existsSync(e)){t=e;break}}return t?`import * as icons from '${l(t)}';\nexport default icons;`:`export default {};`}if(s===`search`){if(!P){let e=fe(await _(i,o));P=`export default ${JSON.stringify(e,null,2)};`}return P}if(s===`client`){let e=j,t=``;for(;e&&e!==C.parse(e).root;){let n=C.join(e,`src/client/index.ts`),r=C.join(e,`dist/client/index.mjs`),i=C.join(e,`client/index.ts`);if(w.existsSync(n)){t=l(n);break}if(w.existsSync(r)){t=l(r);break}if(w.existsSync(i)){t=l(i);break}e=C.dirname(e)}if(!t)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${j}`);return`export * from '${t}';`}}}}function L(e){return(t,n,r)=>{let i=e().integrations?.feedback?.custom,a=i?.endpoint||`/api/feedback`;if(!i?.enabled||t.method!==`POST`||t.url?.split(`?`)[0]!==a)return r();let o=``;t.on(`data`,e=>{o+=e}),t.on(`end`,async()=>{n.setHeader(`Content-Type`,`application/json`);try{let{handleFeedback:e}=await import(`./handler-eNNcucnf.mjs`),t=await e(JSON.parse(o),process.env,{owner:i.owner,repo:i.repo,categorySlug:i.categorySlug});n.statusCode=200,n.end(JSON.stringify(t))}catch(e){n.statusCode=500;let t=e instanceof Error?e.message:`Failed to submit feedback`;n.end(JSON.stringify({error:t}))}})}}function R(e){return(t,n,r)=>{let i=t.url||`/`,a=i.split(`?`)[0].split(`#`)[0];if(C.extname(a))return r();let o=e(),s=C.resolve(o?.root||process.cwd(),o?.build?.outDir||`dist`),c=a.replace(/\/$/,``)||`/`,l=C.join(s,c,`index.html`);c!==`/`&&w.existsSync(l)&&(t.url=`${c}/index.html${i.includes(`?`)?`?${i.split(`?`)[1]}`:``}`),r()}}const z=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i;function B(e,t,n){let r=process.env.NODE_ENV===`production`;e.middlewares.use(L(n)),e.middlewares.use((e,t,i)=>{r&&Object.entries(ie).forEach(([e,n])=>{t.setHeader(e,n)});let a=n();a.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,ae(a)),i()}),e.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),e.middlewares.use(async(t,r,i)=>{let a=t.url?.split(`?`)[0]||`/`,o=t.headers.accept||``,s=n();if(o.includes(`text/html`)&&!z.test(a)){let n=k(s);n=A(n,s),n=await e.transformIndexHtml(t.url||`/`,n),r.statusCode=200,r.setHeader(`Content-Type`,`text/html`),r.end(n);return}i()})}function V(e,t,n){setTimeout(async()=>{try{let{generateRoutes:r}=await import(`./routes-BTx0ngdX.mjs`),i=(await r(t,n())).filter(e=>e.filePath).map(e=>e.filePath);for(let t=0;t<i.length;t+=32){let n=i.slice(t,t+32);await Promise.allSettled(n.map(t=>{let n=C.relative(process.cwd(),t).replace(/\\/g,`/`),r=n.startsWith(`/`)?n:`/${n}`;return e.transformRequest(r)}))}}catch{}},0)}const H=[`tsx`,`jsx`],U=[`tsx`,`ts`,`jsx`,`js`];function pe(e,t){let n=d.map(e=>C.resolve(process.cwd(),e)),r=H.map(e=>C.resolve(t,`layout.${e}`)),i=U.map(e=>C.resolve(t,`mdx-components.${e}`)),a=U.map(e=>C.resolve(t,`pages-external/index.${e}`)),o=U.map(e=>C.resolve(t,`icons.${e}`));e.watcher.add([...n,...i,...r,...a,...o])}const W=new Map;function G(e){let{lastUpdated:t,...n}=e;return E.createHash(`md5`).update(JSON.stringify(n)).digest(`hex`)}async function me(e){try{let{data:t}=await c(e);return G(t)}catch{return``}}function he(e){let t=W.get(e);if(t===void 0){let n=g.getStale(e);n?.route?.frontmatter&&(t=G(n.route.frontmatter),W.set(e,t))}return t}function ge(e,t){W.set(e,t)}function _e(e){W.delete(e)}const K=[`tsx`,`ts`,`jsx`,`js`];function q(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function ve(e,t,n,r){let i=new Map,a=n.toLowerCase(),o=async(n,o)=>{try{let c=l(n);if(d.some(e=>c.endsWith(e))){e.restart();return}if(K.some(e=>c.endsWith(`mdx-components.${e}`))){f(r(),t),q(e,`mdx-components.tsx`),e.ws.send({type:`full-reload`});return}if(K.some(e=>c.endsWith(`icons.${e}`))){q(e,`icons.tsx`),e.ws.send({type:`full-reload`});return}if(c.endsWith(`layout.tsx`)||c.endsWith(`layout.jsx`)){q(e,`layout.tsx`),e.ws.send({type:`full-reload`});return}if(c.includes(`/pages-external/`)||c.includes(`\\pages-external\\`)){q(e,`entry`),e.ws.send({type:`full-reload`});return}if(!c.toLowerCase().startsWith(a))return;let u=c.endsWith(`meta.json`)||c.endsWith(`_meta.json`);if(!u&&!s(c))return;if(o===`add`||o===`unlink`||u){o===`unlink`&&_e(n),h(),F();let i=r();f(i,t),q(e,`config`),q(e,`routes`),q(e,`search`),q(e,`collections`),x(t,process.cwd(),i).catch(e=>{T(`Failed to update link tree:`,e)}),e.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:i?.theme,i18n:i?.i18n,versions:i?.versions,siteUrl:i?.siteUrl}}),e.ws.send({type:`full-reload`});return}i.has(c)&&clearTimeout(i.get(c)),i.set(c,setTimeout(async()=>{i.delete(c);try{let r=he(n),i=await me(n);if(ge(n,i),m(n),r!==void 0&&r!==i){q(e,`routes`),q(e,`search`),q(e,`collections`),e.ws.send({type:`full-reload`});return}let a=l(C.relative(t,n)),o=e.moduleGraph.getModulesByFile(c);if(o&&o.size>0)for(let t of o)e.moduleGraph.invalidateModule(t);else{e.ws.send({type:`full-reload`});return}e.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:c,relPath:a}})}catch(e){T(`HMR error processing content change:`,e)}},150))}catch(e){T(`HMR error during ${o} event:`,e)}};e.watcher.on(`add`,e=>o(e,`add`)),e.watcher.on(`unlink`,e=>o(e,`unlink`)),e.watcher.on(`change`,e=>o(e,`change`))}function ye(e){let t=e.toLowerCase();return({file:e})=>{let n=e.toLowerCase();if(n.startsWith(t)&&(s(e)||n.endsWith(`meta.json`)))return[]}}function be(e,t,n,r,i){return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(r){let a=i();await a?.runHook(`beforeDev`),x(e,process.cwd(),n()).catch(e=>{T(`Failed to generate initial link tree:`,e)}),V(r,e,n),B(r,e,n),pe(r,e),ve(r,e,t,n),await a?.runHook(`afterDev`)},hotUpdate:ye(t)}}const J=new p(`mdx`);function xe(e){let r=te(e);return async e=>{let i=await r.getHighlighter();n(e,b.ELEMENT,e=>{if(e.tagName!==`pre`)return;let n=e.children?.[0];if(!n||n.type!==b.ELEMENT||n.tagName!==`code`)return;let a=(n.properties?.className||[]).find(e=>e.startsWith(`language-`)),o=a?a.slice(9):v.MDX_DEFAULT_LANG;if(o===`mermaid`)return;let s=ne(n.properties?.metastring||n.data?.meta||``),c=r.getOptions(o,s),l=n.children?.[0]?.value||``;try{let t=i.codeToHast(l,c),n=t.type===`root`?t.children[0]:t;e.children=n.children,e.properties={...e.properties,...n.properties,[y.HIGHLIGHTED]:`true`,[y.LANG]:o}}catch(t){T(`[rehypeShiki] Failed to highlight code block:`,t),e.properties=e.properties||{},e.properties.className=[...e.properties.className||[],re.FALLBACK],e.properties[y.HIGHLIGHTED]=`false`,e.properties[y.LANG]=o}return s.title&&(e.properties[y.TITLE]=s.title),t})}}function Se(){return e=>{n(e,b.CODE,e=>{e.meta&&i(e,`metastring`,e.meta)})}}let Ce=!1;function we(e,t,n=le){let r=e?.plugins?.flatMap(e=>e.remarkPlugins||[])||[],i=e?.plugins?.flatMap(e=>e.rehypePlugins||[])||[],a=n({remarkPlugins:[ue,D,Se,...r],rehypePlugins:[O,[xe,e],...i],jsxRuntime:`automatic`});return{...a,name:`vite-plugin-boltdocs-mdx`,async buildStart(){Ce||=(await J.load(),!0),a.buildStart&&await a.buildStart.call(this)},async load(e,n){if(e.endsWith(`.md`)||e.endsWith(`.mdx`))try{let n=w.readFileSync(e,`utf-8`),r=t?.();return r&&(n=(await r.runChain(`transformSource`,{code:n,filePath:e})).code),n}catch{return null}return a.load?a.load.call(this,e,n):null},async transform(e,n,r){let[i]=n.split(`?`);if(!i.endsWith(`.md`)&&!i.endsWith(`.mdx`))return a.transform?.call(this,e,n,r);let o=`${i}:${E.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,s=await J.getAsync(o);if(s)return{code:s,map:null};let c=await a.transform.call(this,e,i,r);if(c&&typeof c==`object`&&c.code){let e=c.code,n=t?.();return n&&(e=(await n.runChain(`transformMdx`,{code:e,filePath:i})).code),J.set(o,e),{code:e,map:null}}return c},async buildEnd(){J.save(),await J.flush(),a.buildEnd&&await a.buildEnd.call(this)}}}const Y=S.createRequire(import.meta.url),Te=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],Ee=[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`];function X(e=Y){try{let e=C.join(process.cwd(),`node_modules/boltdocs/package.json`);return w.existsSync(e)?S.createRequire(w.realpathSync(e)):S.createRequire(C.join(process.cwd(),`package.json`))}catch{return e}}function Z(e,t=Y){try{let n=e.split(`/`),r=e.startsWith(`@`)?n.slice(0,2).join(`/`):n[0],i=e.startsWith(`@`)?n.slice(2).join(`/`):n.slice(1).join(`/`),a=``;try{a=t.resolve(`${r}/package.json`)}catch{let e=t.resolve(r),n=C.dirname(e);for(;n&&n!==C.dirname(n);){let e=C.join(n,`package.json`);if(w.existsSync(e)){a=e;break}n=C.dirname(n)}}if(!a)throw Error();let o=C.dirname(a),s=JSON.parse(w.readFileSync(a,`utf-8`)),c=i?`./${i}`:`.`,l=s.exports?.[c]||s.exports?.[i]||``;typeof l==`object`&&l&&(l=l.import||l.default||l.require||``),!l&&!i&&(l=s.module||s.main||`index.js`);let u=C.resolve(o,l);if(w.existsSync(u))return u}catch{}return t.resolve(e)}function Q(e=Y){let t=[],n=X(e),r=new Set([n,e]);for(let e of r){for(let n of Te)try{let r=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(n)?Z(n,e):e.resolve(n);r&&t.push(w.realpathSync(r))}catch{}for(let n of Ee)try{t.push(w.realpathSync(e.resolve(n)))}catch{}}return Array.from(new Set(t)).map(e=>l(e))}const $=S.createRequire(import.meta.url),De=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`];function Oe(t={},n){let r=C.resolve(process.cwd(),t.docsDir||`docs`),i=l(r),a=n,s,c=!1,d,p=[],m=()=>a,h=e=>{a=e},g=()=>s,v=()=>d;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(t,n){c=n.command===`build`;let i=!!(n.isSsrBuild||t.build?.ssr);if(Object.assign(process.env,se(n.mode,t.envDir||process.cwd(),``)),!a){a=await u(r);let e=(await _(r,a)).map(e=>e.path),t=(a.base||`/docs`).replace(/\/$/,``);e.includes(t)||e.push(t),f(a,r,void 0,e),ee(e)}import(`./shiki-adapter-CxTLkjew.mjs`).then(({getShikiAdapter:e})=>{e(a).getHighlighter().catch(()=>{})}).catch(()=>{});let{version:s}=await import(`./package-D6O7a8qA.mjs`),l=e(a.plugins||[],s);return a.plugins=l,d=new o(l,a),p=l.flatMap(e=>e.vitePlugins||[]),c&&await d.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`flat`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`}},build:{ssrManifest:c},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`,`react-fast-compare`,`invariant`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{alias:[{find:`react-router-dom`,replacement:Z(`react-router-dom`)},{find:`react-helmet-async`,replacement:Z(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:Z(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...i?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Q($)],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[`react-router-dom`]}}},configResolved(e){s=e},resolveId(e,t,n){let r=De.find(t=>e===t||e.startsWith(`${t}/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,C.sep)}/`));if(r&&n?.ssr&&!C.isAbsolute(e)&&r!==`react`&&r!==`react-dom`){let t=X($),n=e;try{n=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(r)?Z(e,t):t.resolve(e)}catch{try{n=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(r)?Z(e,$):$.resolve(e)}catch{}}try{n=w.realpathSync(n)}catch{}return{id:n,external:!0}}return null},transformIndexHtml:{order:`pre`,handler:e=>A(e,a)},async buildEnd(){let{pool:e}=await import(`./worker-pool-v6tW2MDQ.mjs`);await e.terminate()},async closeBundle(){!c||s?.build?.ssr||(await d?.runHook(`afterBuild`),await d?.runHook(`buildEnd`))},configurePreviewServer(e){e.middlewares.use(L(m)),e.middlewares.use(R(g))}},I(t,m,g,r),be(r,i,m,h,v),we(a,v),ce({includePublic:!0}),...p]}export{Oe as boltdocsPlugin,X as getBaseRequire,Q as getExternalAbsolutePaths,Z as resolveEsm};