boltdocs 2.9.0 → 2.9.2

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 (86) hide show
  1. package/dist/adapters-HVuXENAe.mjs +6 -0
  2. package/dist/adapters-uGz-UKQa.cjs +6 -0
  3. package/dist/{cache-C2PiGyg8.cjs → cache-B19MLTpN.cjs} +1 -1
  4. package/dist/{cache-DFW4R3S0.mjs → cache-CfhOTR3Q.mjs} +1 -1
  5. package/dist/client/index.cjs +2 -2
  6. package/dist/client/index.js +2 -2
  7. package/dist/client/mdx.cjs +1 -1
  8. package/dist/client/mdx.js +1 -1
  9. package/dist/client/primitives.cjs +1 -1
  10. package/dist/client/primitives.js +1 -1
  11. package/dist/config-BCqkPkjC.mjs +7 -0
  12. package/dist/config-BPWGa2W3.mjs +6 -0
  13. package/dist/config-CnmfjOE4.cjs +6 -0
  14. package/dist/config-D7ERJhqe.cjs +7 -0
  15. package/dist/csp-CUAEgrxR.mjs +6 -0
  16. package/dist/csp-DbbF3R9Q.cjs +6 -0
  17. package/dist/doctor-A17UhTRn.cjs +7 -0
  18. package/dist/{parser-DJoEF96Y.cjs → doctor-BL6c8x2Q.cjs} +1 -1
  19. package/dist/doctor-hKOBLhBF.mjs +7 -0
  20. package/dist/errors-C0Hx15Ag.mjs +6 -0
  21. package/dist/errors-Dx6JHoKE.cjs +6 -0
  22. package/dist/{doctor-wsPTzt8Y.mjs → handler-eNNcucnf.mjs} +1 -1
  23. package/dist/headers-DBzZ9yC6.mjs +6 -0
  24. package/dist/headers-DuCAOgYX.cjs +6 -0
  25. package/dist/{image-CjYu9Eml.js → image-BCDyLHyD.js} +1 -4
  26. package/dist/{image-B9YA_oQ_.cjs → image-DWdmichO.cjs} +1 -4
  27. package/dist/index-ZqgZUvwp.d.mts +274 -0
  28. package/dist/index-aWC0KjDF.d.cts +274 -0
  29. package/dist/{mdx-WXjAMS8Y.cjs → mdx-9QJoSITt.cjs} +1 -1
  30. package/dist/{mdx-Cy_c2zio.js → mdx-DFbspTP9.js} +1 -1
  31. package/dist/{meta-loader-By22EnYa.mjs → meta-loader-CD3Yptr5.mjs} +1 -1
  32. package/dist/{meta-loader-D0V6oOQt.cjs → meta-loader-CjphwtS7.cjs} +1 -1
  33. package/dist/node/cli-entry.cjs +9 -3
  34. package/dist/node/cli-entry.mjs +9 -3
  35. package/dist/node/index.cjs +1 -1
  36. package/dist/node/index.d.cts +8 -278
  37. package/dist/node/index.d.mts +9 -280
  38. package/dist/node/index.mjs +1 -1
  39. package/dist/node/routes/worker.cjs +1 -1
  40. package/dist/node/routes/worker.mjs +1 -1
  41. package/dist/node-B-I15rGR.cjs +105 -0
  42. package/dist/node-FkxzriO7.mjs +105 -0
  43. package/dist/package-CVw_u5VT.cjs +6 -0
  44. package/dist/{package-BK_82QLX.mjs → package-D6O7a8qA.mjs} +1 -1
  45. package/dist/parser-8u0xHVc7.mjs +6 -0
  46. package/dist/{doctor-Bknon8f5.cjs → parser-CHsNUEhU.cjs} +1 -1
  47. package/dist/parser-CLtGv_XH.cjs +6 -0
  48. package/dist/plugin-CHa0IT49.mjs +61 -0
  49. package/dist/plugin-Dqj9plKB.cjs +61 -0
  50. package/dist/routes-B2joDAlC.cjs +6 -0
  51. package/dist/routes-BTx0ngdX.mjs +6 -0
  52. package/dist/{routes-CKgGAy8P.mjs → routes-Bm0CQvyL.mjs} +1 -1
  53. package/dist/{routes-C6Kr2HFN.cjs → routes-CyKj3dzf.cjs} +1 -1
  54. package/dist/server/index.cjs +6 -0
  55. package/dist/server/index.d.cts +3 -0
  56. package/dist/server/index.d.mts +3 -0
  57. package/dist/server/index.mjs +6 -0
  58. package/dist/{shiki-adapter-CUtj-xKv.cjs → shiki-adapter-BB71nVsG.cjs} +1 -1
  59. package/dist/{handler-B31cxNw0.mjs → shiki-adapter-CL-IQwKI.cjs} +1 -1
  60. package/dist/shiki-adapter-CxTLkjew.mjs +6 -0
  61. package/dist/{shiki-adapter-F-P-lDon.mjs → shiki-adapter-rQ087Lx3.mjs} +1 -1
  62. package/dist/types-generator-BRyf4o9F.mjs +26 -0
  63. package/dist/types-generator-BqNKCbrx.cjs +26 -0
  64. package/dist/types-generator-Cu2jQP-V.mjs +6 -0
  65. package/dist/utils-BWy_8ASj.cjs +7 -0
  66. package/dist/utils-DexBrwiP.mjs +7 -0
  67. package/dist/{worker-pool-DRv8ef4z.mjs → worker-pool-v6tW2MDQ.mjs} +1 -1
  68. package/package.json +6 -1
  69. package/dist/doctor-BY1tSmQd.mjs +0 -34
  70. package/dist/doctor-DcFLi4t1.cjs +0 -34
  71. package/dist/node-DV-EPtMU.mjs +0 -160
  72. package/dist/node-vOVNRABe.cjs +0 -160
  73. package/dist/package-OxKE0p6j.cjs +0 -6
  74. package/dist/parser-C2Pw18LY.cjs +0 -6
  75. package/dist/parser-DScG_PTs.mjs +0 -6
  76. package/dist/routes--LYHSHT7.cjs +0 -6
  77. package/dist/routes-BAsfsn_e.mjs +0 -6
  78. package/dist/shiki-adapter-EZptJAmW.mjs +0 -6
  79. package/dist/shiki-adapter-PQBl32AN.cjs +0 -6
  80. package/dist/utils-DC4Wq-S2.mjs +0 -7
  81. package/dist/utils-wHud9ny5.cjs +0 -7
  82. /package/dist/{generator-DILs0EFN.mjs → generator-BaSvGlxR.mjs} +0 -0
  83. /package/dist/{generator-BEIF6MOx.cjs → generator-DsajVrDx.cjs} +0 -0
  84. /package/dist/{handler-Djy0HfsI.cjs → handler-1LRMYeI4.cjs} +0 -0
  85. /package/dist/{handler-DfhH9D1b.mjs → handler-CyIBbZdb.mjs} +0 -0
  86. /package/dist/{worker-pool-BS1LX67P.cjs → worker-pool-CgOMozUz.cjs} +0 -0
@@ -1,34 +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,d as t,u as n,v as r,y as i}from"./utils-DC4Wq-S2.mjs";import{createRequire as a}from"node:module";import o from"node:path";import s from"node:fs";import{loadConfigFromFile as c}from"vite";import{fdir as l}from"fdir";import{z as u}from"zod";import{bullet as d,colors as f,confirm as p,dividerLog as m,double as h,error as g,info as _,padCenter as v,round as ee,single as te,success as y,tasks as ne,warn as b}from"@bdocs/dui";import{fileURLToPath as x}from"node:url";import re from"picomatch";import S from"node:os";import{distance as C}from"fastest-levenshtein";const w=u.object({icon:u.string().max(50),link:u.string().url()});u.object({text:u.string().max(2e3).optional()});const T=u.object({name:u.string(),enforce:u.enum([`pre`,`post`]).optional(),version:u.string().optional(),boltdocsVersion:u.string().optional(),remarkPlugins:u.array(u.unknown()).optional(),rehypePlugins:u.array(u.unknown()).optional(),vitePlugins:u.array(u.unknown()).optional(),components:u.record(u.string(),u.string()).optional(),hooks:u.record(u.string(),u.unknown()).optional()}),E=u.object({title:u.union([u.string(),u.record(u.string(),u.string())]).optional(),description:u.union([u.string(),u.record(u.string(),u.string())]).optional(),logo:u.union([u.string(),u.object({dark:u.string(),light:u.string(),alt:u.string().optional(),width:u.number().optional(),height:u.number().optional()})]).optional(),navbar:u.array(u.object({label:u.union([u.string(),u.record(u.string(),u.string())]),href:u.string(),items:u.array(u.object({label:u.union([u.string(),u.record(u.string(),u.string())]),href:u.string()})).optional()})).optional(),sidebar:u.record(u.string(),u.array(u.object({text:u.string(),link:u.string()}))).optional(),sidebarGroups:u.record(u.string(),u.object({title:u.union([u.string(),u.record(u.string(),u.string())]).optional(),icon:u.string().optional()})).optional(),socialLinks:u.array(w).optional(),editLink:u.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:u.string().url().optional(),version:u.string().max(50).optional(),githubRepo:u.string().max(100).optional(),favicon:u.string().optional(),tabs:u.array(u.object({id:u.string(),text:u.union([u.string(),u.record(u.string(),u.string())]),icon:u.string().optional()})).optional(),codeTheme:u.union([u.string(),u.object({light:u.string(),dark:u.string()})]).optional()}),D=u.union([u.string(),u.object({rules:u.array(u.object({userAgent:u.string(),allow:u.union([u.string(),u.array(u.string())]).optional(),disallow:u.union([u.string(),u.array(u.string())]).optional()})).optional(),sitemaps:u.array(u.string().url()).optional()})]),O=u.object({defaultLocale:u.string(),locales:u.union([u.record(u.string(),u.string()),u.array(u.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:u.record(u.string(),u.object({label:u.string().optional(),direction:u.enum([`ltr`,`rtl`]).optional(),htmlLang:u.string().optional(),calendar:u.string().optional()})).optional()}),k=u.object({defaultVersion:u.string(),prefix:u.string().optional(),versions:u.array(u.object({label:u.string(),path:u.string()}))}),A=u.object({headers:u.record(u.string(),u.string()).optional(),enableCSP:u.boolean().optional(),customHeaders:u.record(u.string(),u.string()).optional()}),j=u.object({metatags:u.record(u.string(),u.string()).optional(),indexing:u.enum([`all`,`public`]).optional(),thumbnails:u.object({background:u.string().optional()}).optional()}),M=u.object({measurementId:u.string().min(1,`Measurement ID is required for GA4`),debug:u.boolean().optional(),anonymizeIp:u.boolean().optional(),sendPageView:u.boolean().optional(),cookieFlags:u.string().optional(),autoTrack:u.object({pageViews:u.boolean().optional(),downloads:u.boolean().optional(),externalLinks:u.boolean().optional(),search:u.boolean().optional()}).optional()}),N=u.object({tagId:u.string().min(1,`Tag ID is required for GTM`),dataLayerName:u.string().optional(),preview:u.string().optional()}),P=u.object({appId:u.string().min(1,`Algolia App ID is required`),apiKey:u.string().min(1,`Algolia API Key is required`),indexName:u.string().min(1,`Algolia Index Name is required`)}),F=u.object({repo:u.string().min(1,`Giscus repository is required`),repoId:u.string().min(1,`Giscus repository ID is required`),category:u.string().optional(),categoryId:u.string().optional(),mapping:u.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:u.union([u.enum([`0`,`1`]),u.boolean()]).optional(),reactionsEnabled:u.union([u.enum([`0`,`1`]),u.boolean()]).optional(),emitMetadata:u.union([u.enum([`0`,`1`]),u.boolean()]).optional(),inputPosition:u.enum([`top`,`bottom`]).optional(),theme:u.string().optional(),darkTheme:u.string().optional(),lang:u.string().optional(),loading:u.enum([`lazy`,`eager`]).optional()}),I=u.object({enabled:u.boolean(),owner:u.string().min(1,`GitHub owner is required`),repo:u.string().min(1,`GitHub repository name is required`),categorySlug:u.string().optional(),endpoint:u.string().optional()}),L=u.object({ga4:M.optional(),gtm:N.optional(),algolia:P.optional(),feedback:u.object({giscus:F.optional(),custom:I.optional()}).optional()}),ie=u.object({siteUrl:u.string().url().optional(),docsDir:u.string().optional(),base:u.string().optional(),theme:E.optional(),i18n:O.optional(),versions:k.optional(),plugins:u.array(T).optional(),robots:D.optional(),security:A.optional(),seo:j.optional(),integrations:L.optional(),vite:u.record(u.string(),u.unknown()).optional()});function ae(e,t,n=process.cwd(),r){let i=o.resolve(n,`.boltdocs`,`generated`);s.existsSync(i)||s.mkdirSync(i,{recursive:!0});let a=e.i18n?Object.keys(e.i18n.locales):[],c=e.versions?e.versions.versions.map(e=>e.path):[],l=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,u=c.length>0?c.map(e=>`'${e}'`).join(` | `):`string`,d=[`tsx`,`ts`,`jsx`,`js`],f=``,p=``;for(let e of d){let r=o.resolve(n,t,`mdx-components.${e}`);if(s.existsSync(r)){let e=o.join(n,t,`mdx-components`),r=o.relative(i,e).replace(/\\/g,`/`);f=`import type * as MdxComponentsModule from '${r.startsWith(`.`)?r:`./${r}`}'\n`,p=` MdxComponents: typeof MdxComponentsModule`;break}}let m=r&&r.length>0?`\ndeclare global {
7
- namespace Boltdocs {
8
- interface RoutePaths {
9
- ${r.map(e=>` '${e}': void`).join(`
10
- `)}
11
- }
12
- }
13
- }`:``,h=`// This file is automatically generated by Boltdocs.
14
- // Do not edit this file manually.
15
-
16
- ${f}declare global {
17
- namespace Boltdocs {
18
- interface Types {
19
- Locale: ${l}
20
- Version: ${u}${p?`\n${p}`:``}
21
- }
22
- }
23
- }${m}
24
-
25
- export {}
26
- `;s.writeFileSync(o.resolve(i,`types.d.ts`),h)}function oe(e,t=process.cwd()){let n=o.resolve(t,`.boltdocs`,`generated`);s.existsSync(n)||s.mkdirSync(n,{recursive:!0});let r={routes:Array.from(new Set(e)).sort(),timestamp:Date.now()};s.writeFileSync(o.resolve(n,`link-tree.json`),JSON.stringify(r,null,2))}function se(e){return e}const R=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function z(e,t=process.cwd()){let n=t,i={docsDir:o.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},a={};for(let e of R){let t=o.resolve(n,e);if(s.existsSync(t))try{let e=await c({command:`serve`,mode:`development`},t,n);if(e){a=e.config;break}}catch(t){b(`Failed to load config from ${e}:`,t)}}let l={title:a.title,description:a.description,logo:a.logo,favicon:a.favicon,navbar:a.navbar,sidebar:a.sidebar,sidebarGroups:a.theme?.sidebarGroups,socialLinks:a.socialLinks,githubRepo:a.githubRepo,tabs:a.tabs,codeTheme:a.codeTheme,communityHelp:a.communityHelp,version:a.version,editLink:a.editLink,...a.theme||{}},u=Object.fromEntries(Object.entries(l).filter(([e,t])=>t!==void 0));u.navbar&&=u.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let d={docsDir:o.resolve(e),theme:{...i.theme,...u},i18n:a.i18n?{...a.i18n,locales:Array.isArray(a.i18n.locales)?Object.fromEntries(a.i18n.locales.map(e=>[e,e])):a.i18n.locales}:void 0,versions:a.versions,siteUrl:a.siteUrl,base:a.base,seo:a.seo,plugins:a.plugins||[],robots:a.robots,security:a.security,integrations:a.integrations,vite:a.vite},f=ie.safeParse(d);if(!f.success)throw new r(`Invalid Boltdocs configuration:\n${f.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
27
- `)}`);return f.data}function ce(e,t){let n=t?` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.cyan(t)}`:` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.gray(`use --host to expose`)}`;return`
28
- `+h([` ${f.green(`➜`)} ${f.green(`Local:`)} ${f.cyan(e)}`,n,``,` ${f.dim(`press h + enter for help`)}`],{title:`boltdocs dev server`})+`
29
- `}function le(e,t){let n=t?` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.cyan(t)}`:` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.gray(`use --host to expose`)}`;return`
30
- `+h([` ${f.green(`➜`)} ${f.green(`Local:`)} ${f.cyan(e)}`,n],{title:`boltdocs preview server`})+`
31
- `}function ue(e,t){return`
32
- `+h([v(`🚀 Update available!`,50),``,` ${f.dim(`Current:`)} ${f.red(e)} ${f.gray(`→`)} ${f.green(t)}`,``,` ${f.dim(`Run:`)} ${f.bold(`npm install boltdocs@latest`)}`])+`
33
- `}const de=a(import.meta.url);function fe(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function pe(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function me(){try{let e=x(import.meta.url),t=o.dirname(e);for(let e=0;e<5;e++){let e=o.join(t,`package.json`);if(s.existsSync(e)){let t=JSON.parse(s.readFileSync(e,`utf-8`));if(t.name===`boltdocs`)return t.version}t=o.dirname(t)}}catch{}try{return de(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function B(){let e=``;try{e=o.join(S.homedir(),`.boltdocs`,`update-check.json`)}catch{return}let t=0;try{if(s.existsSync(e)){let n=JSON.parse(s.readFileSync(e,`utf-8`));t=Number(n.lastCheck)||0}}catch{}let n=Date.now();if(n-t<864e5)return;try{s.mkdirSync(o.dirname(e),{recursive:!0}),s.writeFileSync(e,JSON.stringify({lastCheck:n}),`utf-8`)}catch{}let r=await me();if(r===`0.0.0`)return;let i=await pe();i&&fe(i,r)&&console.log(ue(r,i))}const V={$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 H(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 U(e,t,n){return e.doctorConfig.severity[t]||n}async function he(e,t){s.existsSync(t)||s.mkdirSync(t,{recursive:!0});let n=o.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=o.join(t,`${n}.${r}.bak`);s.copyFileSync(e,i)}const W=new Map;function G(e){let n=W.get(e);if(n)return n;let r=(async()=>{let n=await t(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return W.set(e,r),r}const K=new Map;function q(e){if(K.has(e))return K.get(e);let t=!1;try{t=s.existsSync(e)&&s.statSync(e).isFile()}catch{t=!1}return K.set(e,t),t}async function J(e){let t=o.resolve(e,`doctor.json`);if(s.existsSync(t))try{let e=JSON.parse(s.readFileSync(t,`utf-8`));return{...V,...e,checks:{...V.checks,...e.checks,metadata:{...V.checks.metadata,...e.checks?.metadata},links:{...V.checks.links,...e.checks?.links},i18n:{...V.checks.i18n,...e.checks?.i18n},performance:{...V.checks.performance,...e.checks?.performance,budgets:{...V.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...V.fix,...e.fix},reporting:{...V.reporting,...e.reporting},severity:{...V.severity,...e.severity},exclude:[...V.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return V}async function Y(t,n=process.cwd(),r,i){let a=o.resolve(n,`.boltdocs`,`generated`);s.existsSync(a)||s.mkdirSync(a,{recursive:!0});let c=i;c||=await new l().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(t).withPromise();let u=r?.base||`/docs`,d=[];for(let n=0;n<c.length;n+=100){let r=c.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=o.isAbsolute(n)?n:o.resolve(t,n),i=o.relative(t,r),{data:a}=await G(r),s;return s=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:e(i),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...i)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return s.writeFileSync(o.resolve(a,`link-tree.json`),JSON.stringify(f,null,2)),f}function ge(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 X=new Map;function Z(e,t){if(X.has(e))return X.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=ge(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return X.set(e,a),a}async function Q(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:r,titleMax:a,descriptionMin:s}=e.doctorConfig.checks.metadata,c=new Map;for(let l of e.files){let u=n(o.relative(e.docsDir,l));try{let{raw:n,data:o}=await G(l);if(n.trim().startsWith(`---`)&&n.split(`---`).length>=3&&Object.keys(o).length===0){let n=U(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=i.safeParse(o);if(!d.success){let n=U(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(o[n]===void 0){let r=U(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(o[r]&&Number.isNaN(Date.parse(String(o[r])))){let n=U(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${o[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(o.title){let n=String(o.title);if(n.length<r){let i=U(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,level:i,message:`Title is too short (${n.length} chars).`,suggestion:`Titles should be at least ${r} characters for better SEO.`})}else if(n.length>a){let r=U(e,`shortMetadata`,`low`);r!==`off`&&t.push({file:u,level:r,message:`Title is too long (${n.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let i=c.get(n)||[];i.push(u),c.set(n,i)}if(o.description&&String(o.description).length<s){let n=U(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${s} characters.`})}}catch(n){if(n instanceof Error){let r=U(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=U(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 $(e){let t=[],{internal:r,external:i,ignore:a,timeout:c,concurrency:l}=e.doctorConfig.checks.links;if(!r&&!i&&!e.options.checkExternal)return t;let u=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,d=new Set,p=5e5;for(let c of e.files){let l=n(o.relative(e.docsDir,c)),{content:f}=await G(c),m=[...(f.length>p?f.slice(0,p):f).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(u)];for(let n of m){let u=n[1]||n[2],f=!!n[1];if(!u||a.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(i||e.options.checkExternal)&&d.add({url:u,file:c});continue}if(!r||/^(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=o.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>q(h+e))}}else h=o.resolve(o.dirname(c),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>q(h+e));if(!m){let{bestMatch:n,similarity:r}=Z(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 o=r>.6||i,d=r>.75&&n!==p||i,m=U(e,`brokenLink`,`high`);m!==`off`&&t.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:o?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:d?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,t=f?`(${u})`:`href="${u}"`,r=f?`(${n}${e})`:`href="${n}${e}"`,i=s.readFileSync(c,`utf-8`).replace(t,r);s.writeFileSync(c,i),W.delete(c)}:void 0})}}}if(d.size>0){_(f.gray(`Verifying ${d.size} external links...`));let r=new Map;for(let e of d)r.has(e.url)||r.set(e.url,[]),r.get(e.url).push(e.file);let i=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),c),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(r.keys()),s=[];for(let e=0;e<a.length;e+=l){let t=a.slice(e,e+l),n=await Promise.allSettled(t.map(i));s.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of s)if(!i.ok){let a=U(e,`brokenLink`,`warning`);if(a!==`off`){let s=r.get(i.url)||[];for(let r of s)t.push({file:n(o.relative(e.docsDir,r)),level:a,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return t}async function _e(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:r,locales:i}=e.config.i18n,a=Object.keys(i),c=a.filter(e=>e!==r);for(let i of e.files){let l=n(o.relative(e.docsDir,i)),u=l.split(`/`),d=u[0];if(d===r){let n=u.slice(1).join(`/`);for(let r of c){let a=o.join(e.docsDir,r,n);if(!q(a)){let c=U(e,`missingTranslation`,`warning`);c!==`off`&&t.push({file:l,level:c,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${n}".`,fix:async()=>{let e=o.dirname(a);s.existsSync(e)||s.mkdirSync(e,{recursive:!0}),s.copyFileSync(i,a)}})}}}else if(a.includes(d)){let n=u.slice(1).join(`/`);if(!q(o.join(e.docsDir,r,n))){let a=U(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:l,level:a,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${n}".`,fix:async()=>{s.unlinkSync(i)}})}}}return t}async function ve(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=U(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}=Z(r.link,e.linkTree.routes),a=i>.6,o=U(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=U(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 ye(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=o.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!s.existsSync(r))return t.push({file:`(build)`,level:U(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let i;try{i=JSON.parse(s.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:U(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let a=n.budgets,c=U(e,`budgetExceeded`,`warning`),l=H(a?.maxJSBundleSize,1/0),u=H(a?.maxCSSBundleSize,1/0),d=H(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:c,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:c,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:c,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:c,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:c,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:c,message:`Font files exceed budget: ${i.fontCount} > ${m}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function be(e){let t=o.resolve(e,`doctor.json`);if(s.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{s.writeFileSync(t,JSON.stringify(V,null,2)),y(`Created "doctor.json" with default configuration.`)}catch(e){g(`Failed to create "doctor.json": ${e}`)}}async function xe(e=process.cwd(),t={}){if(t.init){await be(e);return}B();try{let n=await J(e),{format:r}=n.reporting,i=performance.now(),a=await z(`docs`,e),c=o.resolve(e,`docs`);s.existsSync(c)||(r===`pretty`&&g(`Docs dir not found at ${c}`),process.exit(1)),r===`pretty`&&console.log(h([` ${f.dim(`Docs dir:`)} ${c}`,` ${f.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),r===`pretty`&&_(f.dim(`🔍 Discovering files and routes...`));let u=re(n.exclude||[]),v=await new l().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=o.relative(c,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!u(t)&&!n}).crawl(c).withPromise();for(let e of v)K.set(e,!0);let b=await Y(c,e,a,v),x=a.base||`/`,S=x===`/`?``:x.endsWith(`/`)?x.slice(0,-1):x,C={root:e,docsDir:c,config:a,doctorConfig:n,linkTree:b,files:v,options:t,routeIndex:new Set(b.routes),routeIndexWithSlash:new Set(b.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(b.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:S};r===`pretty`&&_(f.dim(`🧪 Running diagnostic checks in parallel...`));let w=[Q(C),$(C),_e(C),ve(C)];t.budget&&w.push(ye(C));let[T,E,D,O,...k]=await Promise.all(w),A=t.budget?k[0]:[],j=[...T,...E,...D,...O,...A];if(r===`pretty`){let e=[{label:`Metadata checks ${T.length>0?`— ${T.length} issue${T.length===1?``:`s`}`:`— OK`}`,done:T.length===0},{label:`Link checks ${E.length>0?`— ${E.length} issue${E.length===1?``:`s`}`:`— OK`}`,done:E.length===0},{label:`i18n checks ${D.length>0?`— ${D.length} issue${D.length===1?``:`s`}`:`— OK`}`,done:D.length===0},{label:`Sidebar checks ${O.length>0?`— ${O.length} issue${O.length===1?``:`s`}`:`— OK`}`,done:O.length===0}];t.budget&&e.push({label:`Performance budget ${A.length>0?`— ${A.length} issue${A.length===1?``:`s`}`:`— OK`}`,done:A.length===0}),console.log(`\n${ne(e)}`)}let M=0;if(t.fix){for(let e of j)if(e.fix){if(C.doctorConfig.fix.confirmChanges&&!await p(`Fix issue in "${e.file}": ${e.message}?`))continue;if(C.doctorConfig.fix.backupFiles){let t=o.resolve(C.docsDir,e.file);s.existsSync(t)&&await he(t,o.resolve(C.root,C.doctorConfig.fix.backupPath))}await e.fix(),M++}}let N=((performance.now()-i)/1e3).toFixed(2),P=j.filter(e=>e.level===`high`).length,F=j.filter(e=>e.level===`warning`).length,I=j.filter(e=>e.level===`low`).length,L={summary:{total:j.length,high:P,warning:F,low:I,fixed:M,duration:N},issues:j.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=o.resolve(e,n.reporting.outputFile);s.existsSync(o.dirname(t))||s.mkdirSync(o.dirname(t),{recursive:!0}),s.writeFileSync(t,JSON.stringify(L,null,2))}if(r===`json`)console.log(JSON.stringify(L,null,2));else if(r===`pretty`){let e=j.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(j.length>0){m();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`?f.red:n.level===`warning`?f.yellow:f.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${f.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${f.green(`✅ Fixed automatically`)}`)}console.log(`\n${te(e,{title:`📄 ${n}`})}`)}m()}if(j.length===0)console.log(ee([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${f.dim(`Scanned ${v.length} file${v.length===1?``:`s`} in ${N}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];P>0&&e.push(f.red(`${P} Critical Error${P===1?``:`s`}`)),F>0&&e.push(f.yellow(`${F} Warning${F===1?``:`s`}`)),I>0&&e.push(f.blue(`${I} Improvement${I===1?``:`s`}`));let t=[...d(e).split(`
34
- `).map(e=>e.trimStart()),``,f.dim(`Scanned ${v.length} file${v.length===1?``:`s`} in ${N}s`)];console.log(`\n${h(t,{title:`Diagnosis Results`})}\n`),M>0&&y(`Successfully fixed ${M} issues automatically!`),P>0?g(`Please fix the critical errors before building for production.`):y(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&P>0&&process.exit(1),n.reporting.maxWarnings!==-1&&F>n.reporting.maxWarnings&&(r===`pretty`&&g(`Failed: Too many warnings (${F} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){g(`Doctor failed: ${e}`),process.exit(1)}}export{ae as _,Q as a,Y as c,B as d,ce as f,se as g,z as h,$ as i,J as l,R as m,be as n,ye as o,le as p,_e as r,ve as s,xe as t,V as u,oe as v,T as y};
@@ -1,34 +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-wHud9ny5.cjs`);let n=require(`node:path`);n=e.n(n);let r=require(`node:fs`);r=e.n(r);let i=require(`node:module`),a=require(`vite`),o=require(`fdir`),s=require(`zod`),c=require(`@bdocs/dui`),l=require(`picomatch`);l=e.n(l);let u=require(`node:os`);u=e.n(u);let d=require(`node:url`),f=require(`fastest-levenshtein`);const p=s.z.object({icon:s.z.string().max(50),link:s.z.string().url()});s.z.object({text:s.z.string().max(2e3).optional()});const m=s.z.object({name:s.z.string(),enforce:s.z.enum([`pre`,`post`]).optional(),version:s.z.string().optional(),boltdocsVersion:s.z.string().optional(),remarkPlugins:s.z.array(s.z.unknown()).optional(),rehypePlugins:s.z.array(s.z.unknown()).optional(),vitePlugins:s.z.array(s.z.unknown()).optional(),components:s.z.record(s.z.string(),s.z.string()).optional(),hooks:s.z.record(s.z.string(),s.z.unknown()).optional()}),h=s.z.object({title:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]).optional(),description:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]).optional(),logo:s.z.union([s.z.string(),s.z.object({dark:s.z.string(),light:s.z.string(),alt:s.z.string().optional(),width:s.z.number().optional(),height:s.z.number().optional()})]).optional(),navbar:s.z.array(s.z.object({label:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]),href:s.z.string(),items:s.z.array(s.z.object({label:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]),href:s.z.string()})).optional()})).optional(),sidebar:s.z.record(s.z.string(),s.z.array(s.z.object({text:s.z.string(),link:s.z.string()}))).optional(),sidebarGroups:s.z.record(s.z.string(),s.z.object({title:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]).optional(),icon:s.z.string().optional()})).optional(),socialLinks:s.z.array(p).optional(),editLink:s.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:s.z.string().url().optional(),version:s.z.string().max(50).optional(),githubRepo:s.z.string().max(100).optional(),favicon:s.z.string().optional(),tabs:s.z.array(s.z.object({id:s.z.string(),text:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]),icon:s.z.string().optional()})).optional(),codeTheme:s.z.union([s.z.string(),s.z.object({light:s.z.string(),dark:s.z.string()})]).optional()}),g=s.z.union([s.z.string(),s.z.object({rules:s.z.array(s.z.object({userAgent:s.z.string(),allow:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional(),disallow:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional()})).optional(),sitemaps:s.z.array(s.z.string().url()).optional()})]),_=s.z.object({defaultLocale:s.z.string(),locales:s.z.union([s.z.record(s.z.string(),s.z.string()),s.z.array(s.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:s.z.record(s.z.string(),s.z.object({label:s.z.string().optional(),direction:s.z.enum([`ltr`,`rtl`]).optional(),htmlLang:s.z.string().optional(),calendar:s.z.string().optional()})).optional()}),v=s.z.object({defaultVersion:s.z.string(),prefix:s.z.string().optional(),versions:s.z.array(s.z.object({label:s.z.string(),path:s.z.string()}))}),y=s.z.object({headers:s.z.record(s.z.string(),s.z.string()).optional(),enableCSP:s.z.boolean().optional(),customHeaders:s.z.record(s.z.string(),s.z.string()).optional()}),b=s.z.object({metatags:s.z.record(s.z.string(),s.z.string()).optional(),indexing:s.z.enum([`all`,`public`]).optional(),thumbnails:s.z.object({background:s.z.string().optional()}).optional()}),x=s.z.object({measurementId:s.z.string().min(1,`Measurement ID is required for GA4`),debug:s.z.boolean().optional(),anonymizeIp:s.z.boolean().optional(),sendPageView:s.z.boolean().optional(),cookieFlags:s.z.string().optional(),autoTrack:s.z.object({pageViews:s.z.boolean().optional(),downloads:s.z.boolean().optional(),externalLinks:s.z.boolean().optional(),search:s.z.boolean().optional()}).optional()}),S=s.z.object({tagId:s.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:s.z.string().optional(),preview:s.z.string().optional()}),C=s.z.object({appId:s.z.string().min(1,`Algolia App ID is required`),apiKey:s.z.string().min(1,`Algolia API Key is required`),indexName:s.z.string().min(1,`Algolia Index Name is required`)}),w=s.z.object({repo:s.z.string().min(1,`Giscus repository is required`),repoId:s.z.string().min(1,`Giscus repository ID is required`),category:s.z.string().optional(),categoryId:s.z.string().optional(),mapping:s.z.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:s.z.union([s.z.enum([`0`,`1`]),s.z.boolean()]).optional(),reactionsEnabled:s.z.union([s.z.enum([`0`,`1`]),s.z.boolean()]).optional(),emitMetadata:s.z.union([s.z.enum([`0`,`1`]),s.z.boolean()]).optional(),inputPosition:s.z.enum([`top`,`bottom`]).optional(),theme:s.z.string().optional(),darkTheme:s.z.string().optional(),lang:s.z.string().optional(),loading:s.z.enum([`lazy`,`eager`]).optional()}),T=s.z.object({enabled:s.z.boolean(),owner:s.z.string().min(1,`GitHub owner is required`),repo:s.z.string().min(1,`GitHub repository name is required`),categorySlug:s.z.string().optional(),endpoint:s.z.string().optional()}),E=s.z.object({ga4:x.optional(),gtm:S.optional(),algolia:C.optional(),feedback:s.z.object({giscus:w.optional(),custom:T.optional()}).optional()}),D=s.z.object({siteUrl:s.z.string().url().optional(),docsDir:s.z.string().optional(),base:s.z.string().optional(),theme:h.optional(),i18n:_.optional(),versions:v.optional(),plugins:s.z.array(m).optional(),robots:g.optional(),security:y.optional(),seo:b.optional(),integrations:E.optional(),vite:s.z.record(s.z.string(),s.z.unknown()).optional()});function O(e,t,i=process.cwd(),a){let o=n.default.resolve(i,`.boltdocs`,`generated`);r.default.existsSync(o)||r.default.mkdirSync(o,{recursive:!0});let s=e.i18n?Object.keys(e.i18n.locales):[],c=e.versions?e.versions.versions.map(e=>e.path):[],l=s.length>0?s.map(e=>`'${e}'`).join(` | `):`string`,u=c.length>0?c.map(e=>`'${e}'`).join(` | `):`string`,d=[`tsx`,`ts`,`jsx`,`js`],f=``,p=``;for(let e of d){let a=n.default.resolve(i,t,`mdx-components.${e}`);if(r.default.existsSync(a)){let e=n.default.join(i,t,`mdx-components`),r=n.default.relative(o,e).replace(/\\/g,`/`);f=`import type * as MdxComponentsModule from '${r.startsWith(`.`)?r:`./${r}`}'\n`,p=` MdxComponents: typeof MdxComponentsModule`;break}}let m=a&&a.length>0?`\ndeclare global {
7
- namespace Boltdocs {
8
- interface RoutePaths {
9
- ${a.map(e=>` '${e}': void`).join(`
10
- `)}
11
- }
12
- }
13
- }`:``,h=`// This file is automatically generated by Boltdocs.
14
- // Do not edit this file manually.
15
-
16
- ${f}declare global {
17
- namespace Boltdocs {
18
- interface Types {
19
- Locale: ${l}
20
- Version: ${u}${p?`\n${p}`:``}
21
- }
22
- }
23
- }${m}
24
-
25
- export {}
26
- `;r.default.writeFileSync(n.default.resolve(o,`types.d.ts`),h)}function k(e,t=process.cwd()){let i=n.default.resolve(t,`.boltdocs`,`generated`);r.default.existsSync(i)||r.default.mkdirSync(i,{recursive:!0});let a={routes:Array.from(new Set(e)).sort(),timestamp:Date.now()};r.default.writeFileSync(n.default.resolve(i,`link-tree.json`),JSON.stringify(a,null,2))}function A(e){return e}const j=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function M(e,i=process.cwd()){let o=i,s={docsDir:n.default.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},l={};for(let e of j){let t=n.default.resolve(o,e);if(r.default.existsSync(t))try{let e=await(0,a.loadConfigFromFile)({command:`serve`,mode:`development`},t,o);if(e){l=e.config;break}}catch(t){(0,c.warn)(`Failed to load config from ${e}:`,t)}}let u={title:l.title,description:l.description,logo:l.logo,favicon:l.favicon,navbar:l.navbar,sidebar:l.sidebar,sidebarGroups:l.theme?.sidebarGroups,socialLinks:l.socialLinks,githubRepo:l.githubRepo,tabs:l.tabs,codeTheme:l.codeTheme,communityHelp:l.communityHelp,version:l.version,editLink:l.editLink,...l.theme||{}},d=Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));d.navbar&&=d.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let f={docsDir:n.default.resolve(e),theme:{...s.theme,...d},i18n:l.i18n?{...l.i18n,locales:Array.isArray(l.i18n.locales)?Object.fromEntries(l.i18n.locales.map(e=>[e,e])):l.i18n.locales}:void 0,versions:l.versions,siteUrl:l.siteUrl,base:l.base,seo:l.seo,plugins:l.plugins||[],robots:l.robots,security:l.security,integrations:l.integrations,vite:l.vite},p=D.safeParse(f);if(!p.success)throw new t.v(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
27
- `)}`);return p.data}function ee(e,t){let n=t?` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.cyan(t)}`:` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.gray(`use --host to expose`)}`;return`
28
- `+(0,c.double)([` ${c.colors.green(`➜`)} ${c.colors.green(`Local:`)} ${c.colors.cyan(e)}`,n,``,` ${c.colors.dim(`press h + enter for help`)}`],{title:`boltdocs dev server`})+`
29
- `}function te(e,t){let n=t?` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.cyan(t)}`:` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.gray(`use --host to expose`)}`;return`
30
- `+(0,c.double)([` ${c.colors.green(`➜`)} ${c.colors.green(`Local:`)} ${c.colors.cyan(e)}`,n],{title:`boltdocs preview server`})+`
31
- `}function ne(e,t){return`
32
- `+(0,c.double)([(0,c.padCenter)(`🚀 Update available!`,50),``,` ${c.colors.dim(`Current:`)} ${c.colors.red(e)} ${c.colors.gray(`→`)} ${c.colors.green(t)}`,``,` ${c.colors.dim(`Run:`)} ${c.colors.bold(`npm install boltdocs@latest`)}`])+`
33
- `}const re=(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href);function N(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function ie(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function ae(){try{let e=(0,d.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),t=n.default.dirname(e);for(let e=0;e<5;e++){let e=n.default.join(t,`package.json`);if(r.default.existsSync(e)){let t=JSON.parse(r.default.readFileSync(e,`utf-8`));if(t.name===`boltdocs`)return t.version}t=n.default.dirname(t)}}catch{}try{return re(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function P(){let e=``;try{e=n.default.join(u.default.homedir(),`.boltdocs`,`update-check.json`)}catch{return}let t=0;try{if(r.default.existsSync(e)){let n=JSON.parse(r.default.readFileSync(e,`utf-8`));t=Number(n.lastCheck)||0}}catch{}let i=Date.now();if(i-t<864e5)return;try{r.default.mkdirSync(n.default.dirname(e),{recursive:!0}),r.default.writeFileSync(e,JSON.stringify({lastCheck:i}),`utf-8`)}catch{}let a=await ae();if(a===`0.0.0`)return;let o=await ie();o&&N(o,a)&&console.log(ne(a,o))}const F={$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 I(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 L(e,t,n){return e.doctorConfig.severity[t]||n}async function R(e,t){r.default.existsSync(t)||r.default.mkdirSync(t,{recursive:!0});let i=n.default.basename(e),a=new Date().toISOString().replace(/[:.]/g,`-`),o=n.default.join(t,`${i}.${a}.bak`);r.default.copyFileSync(e,o)}const z=new Map;function B(e){let n=z.get(e);if(n)return n;let r=(async()=>{let n=await t.d(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return z.set(e,r),r}const V=new Map;function H(e){if(V.has(e))return V.get(e);let t=!1;try{t=r.default.existsSync(e)&&r.default.statSync(e).isFile()}catch{t=!1}return V.set(e,t),t}async function U(e){let t=n.default.resolve(e,`doctor.json`);if(r.default.existsSync(t))try{let e=JSON.parse(r.default.readFileSync(t,`utf-8`));return{...F,...e,checks:{...F.checks,...e.checks,metadata:{...F.checks.metadata,...e.checks?.metadata},links:{...F.checks.links,...e.checks?.links},i18n:{...F.checks.i18n,...e.checks?.i18n},performance:{...F.checks.performance,...e.checks?.performance,budgets:{...F.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...F.fix,...e.fix},reporting:{...F.reporting,...e.reporting},severity:{...F.severity,...e.severity},exclude:[...F.exclude,...e.exclude||[]]}}catch(e){(0,c.warn)(`Failed to parse doctor.json: ${e}`)}return F}async function W(e,i=process.cwd(),a,s){let c=n.default.resolve(i,`.boltdocs`,`generated`);r.default.existsSync(c)||r.default.mkdirSync(c,{recursive:!0});let l=s;l||=await new o.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=a?.base||`/docs`,d=[];for(let r=0;r<l.length;r+=100){let i=l.slice(r,r+100),a=await Promise.all(i.map(async r=>{let i=n.default.isAbsolute(r)?r:n.default.resolve(e,r),a=n.default.relative(e,i),{data:o}=await B(i),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.a(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return r.default.writeFileSync(n.default.resolve(c,`link-tree.json`),JSON.stringify(f,null,2)),f}function G(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-(0,f.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,f.distance)(e,t)/Math.max(e.length,t.length)}const K=new Map;function q(e,t){if(K.has(e))return K.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=G(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return K.set(e,a),a}async function J(e){let r=[];if(!e.doctorConfig.checks.metadata.enabled)return r;let{titleMin:i,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.u(n.default.relative(e.docsDir,c));try{let{raw:n,data:u}=await B(c);if(n.trim().startsWith(`---`)&&n.split(`---`).length>=3&&Object.keys(u).length===0){let t=L(e,`malformedFrontmatter`,`high`);t!==`off`&&r.push({file:l,level:t,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=t.y.safeParse(u);if(!d.success){let t=L(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)r.push({file:l,level:t,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 t of f)if(u[t]===void 0){let n=L(e,`missingMetadata`,`warning`);n!==`off`&&r.push({file:l,level:n,message:`Missing required frontmatter field: "${t}".`,suggestion:`Add the "${t}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let t=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let n of t)if(u[n]&&Number.isNaN(Date.parse(String(u[n])))){let t=L(e,`invalidFrontmatter`,`high`);t!==`off`&&r.push({file:l,level:t,message:`Invalid date format in field "${n}": "${u[n]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<i){let n=L(e,`shortMetadata`,`low`);n!==`off`&&r.push({file:l,level:n,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${i} characters for better SEO.`})}else if(t.length>a){let n=L(e,`shortMetadata`,`low`);n!==`off`&&r.push({file:l,level:n,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let n=s.get(t)||[];n.push(l),s.set(t,n)}if(u.description&&String(u.description).length<o){let t=L(e,`shortMetadata`,`low`);t!==`off`&&r.push({file:l,level:t,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(t){if(t instanceof Error){let n=L(e,`malformedFrontmatter`,`high`);n!==`off`&&r.push({file:l,level:n,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[t,n]of s.entries())if(n.length>1){let i=L(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of n)r.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${n.filter(t=>t!==e).join(`, `)}`})}return r}async function Y(e){let i=[],{internal:a,external:o,ignore:s,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!a&&!o&&!e.options.checkExternal)return i;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let c of e.files){let l=t.u(n.default.relative(e.docsDir,c)),{content:u}=await B(c),m=[...(u.length>p?u.slice(0,p):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let t of m){let u=t[1]||t[2],d=!!t[1];if(!u||s.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(o||e.options.checkExternal)&&f.add({url:u,file:c});continue}if(!a||/^(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,r=t.startsWith(`/`)?t.substring(1):t;h=n.default.join(e.docsDir,r),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>H(h+e))}}else h=n.default.resolve(n.default.dirname(c),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>H(h+e));if(!m){let{bestMatch:t,similarity:n}=q(p,e.linkTree.routes),a=!1,o=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(o)||e.routeIndexWithSlash.has(o))&&(t=o,n=1,a=!0);let s=n>.6||a,f=n>.75&&t!==p||a,m=L(e,`brokenLink`,`high`);m!==`off`&&i.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:s?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=d?`(${u})`:`href="${u}"`,i=d?`(${t}${e})`:`href="${t}${e}"`,a=r.default.readFileSync(c,`utf-8`).replace(n,i);r.default.writeFileSync(c,a),z.delete(c)}:void 0})}}}if(f.size>0){(0,c.info)(c.colors.gray(`Verifying ${f.size} external links...`));let r=new Map;for(let e of f)r.has(e.url)||r.set(e.url,[]),r.get(e.url).push(e.file);let a=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),l),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}}},o=Array.from(r.keys()),s=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(a));s.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let a of s)if(!a.ok){let o=L(e,`brokenLink`,`warning`);if(o!==`off`){let s=r.get(a.url)||[];for(let r of s)i.push({file:t.u(n.default.relative(e.docsDir,r)),level:o,message:`Broken external link: "${a.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${a.error||`Status >= 400`}`})}}}return i}async function X(e){let i=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return i;let{defaultLocale:a,locales:o}=e.config.i18n,s=Object.keys(o),c=s.filter(e=>e!==a);for(let o of e.files){let l=t.u(n.default.relative(e.docsDir,o)),u=l.split(`/`),d=u[0];if(d===a){let t=u.slice(1).join(`/`);for(let a of c){let s=n.default.join(e.docsDir,a,t);if(!H(s)){let c=L(e,`missingTranslation`,`warning`);c!==`off`&&i.push({file:l,level:c,message:`Missing translation for locale "${a}"`,suggestion:`Create a version at "${a}/${t}".`,fix:async()=>{let e=n.default.dirname(s);r.default.existsSync(e)||r.default.mkdirSync(e,{recursive:!0}),r.default.copyFileSync(o,s)}})}}}else if(s.includes(d)){let t=u.slice(1).join(`/`);if(!H(n.default.join(e.docsDir,a,t))){let n=L(e,`missingTranslation`,`low`);n!==`off`&&i.push({file:l,level:n,message:`Orphaned translation (source missing in "${a}")`,suggestion:`Remove this file or create the source at "${a}/${t}".`,fix:async()=>{r.default.unlinkSync(o)}})}}}return i}async function Z(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=L(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}=q(r.link,e.linkTree.routes),a=i>.6,o=L(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=L(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 Q(e){let t=[],i=e.doctorConfig.checks.performance;if(!i?.enabled)return t;let a=n.default.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!r.default.existsSync(a))return t.push({file:`(build)`,level:L(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let o;try{o=JSON.parse(r.default.readFileSync(a,`utf-8`))}catch{return t.push({file:`(build)`,level:L(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let s=i.budgets,c=L(e,`budgetExceeded`,`warning`),l=I(s?.maxJSBundleSize,1/0),u=I(s?.maxCSSBundleSize,1/0),d=I(s?.maxPageHTMLSize,1/0),f=s?.maxImagesKB??1/0,p=s?.maxBuildTime??1/0,m=s?.maxFontCount??1/0;if(l!==1/0&&o.totalJSBundleSize>l){let e=(o.totalJSBundleSize/1024).toFixed(0),n=(l/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`JS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Code-split large dependencies or lazy-load route components.`})}if(u!==1/0&&o.totalCSSBundleSize>u){let e=(o.totalCSSBundleSize/1024).toFixed(0),n=(u/1024).toFixed(0);t.push({file:`(build)`,level:c,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 o.pages)if(e.htmlSize>d){let n=(e.htmlSize/1024).toFixed(0),r=(d/1024).toFixed(0);t.push({file:e.route,level:c,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&&o.totalImagesSize>h){let e=(o.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:c,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&&o.buildTime>p){let e=(o.buildTime/1e3).toFixed(1),n=(p/1e3).toFixed(1);t.push({file:`(build)`,level:c,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&&o.fontCount>m&&t.push({file:`(build)`,level:c,message:`Font files exceed budget: ${o.fontCount} > ${m}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function $(e){let t=n.default.resolve(e,`doctor.json`);if(r.default.existsSync(t)){(0,c.warn)(`"doctor.json" already exists at ${e}.`);return}try{r.default.writeFileSync(t,JSON.stringify(F,null,2)),(0,c.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,c.error)(`Failed to create "doctor.json": ${e}`)}}async function oe(e=process.cwd(),t={}){if(t.init){await $(e);return}P();try{let i=await U(e),{format:a}=i.reporting,s=performance.now(),u=await M(`docs`,e),d=n.default.resolve(e,`docs`);r.default.existsSync(d)||(a===`pretty`&&(0,c.error)(`Docs dir not found at ${d}`),process.exit(1)),a===`pretty`&&console.log((0,c.double)([` ${c.colors.dim(`Docs dir:`)} ${d}`,` ${c.colors.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),a===`pretty`&&(0,c.info)(c.colors.dim(`🔍 Discovering files and routes...`));let f=(0,l.default)(i.exclude||[]),p=await new o.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=n.default.relative(d,e).replace(/\\/g,`/`),r=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!f(t)&&!r}).crawl(d).withPromise();for(let e of p)V.set(e,!0);let m=await W(d,e,u,p),h=u.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:d,config:u,doctorConfig:i,linkTree:m,files:p,options:t,routeIndex:new Set(m.routes),routeIndexWithSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:g};a===`pretty`&&(0,c.info)(c.colors.dim(`🧪 Running diagnostic checks in parallel...`));let v=[J(_),Y(_),X(_),Z(_)];t.budget&&v.push(Q(_));let[y,b,x,S,...C]=await Promise.all(v),w=t.budget?C[0]:[],T=[...y,...b,...x,...S,...w];if(a===`pretty`){let e=[{label:`Metadata checks ${y.length>0?`— ${y.length} issue${y.length===1?``:`s`}`:`— OK`}`,done:y.length===0},{label:`Link checks ${b.length>0?`— ${b.length} issue${b.length===1?``:`s`}`:`— OK`}`,done:b.length===0},{label:`i18n checks ${x.length>0?`— ${x.length} issue${x.length===1?``:`s`}`:`— OK`}`,done:x.length===0},{label:`Sidebar checks ${S.length>0?`— ${S.length} issue${S.length===1?``:`s`}`:`— OK`}`,done:S.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${(0,c.tasks)(e)}`)}let E=0;if(t.fix){for(let e of T)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await(0,c.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=n.default.resolve(_.docsDir,e.file);r.default.existsSync(t)&&await R(t,n.default.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),E++}}let D=((performance.now()-s)/1e3).toFixed(2),O=T.filter(e=>e.level===`high`).length,k=T.filter(e=>e.level===`warning`).length,A=T.filter(e=>e.level===`low`).length,j={summary:{total:T.length,high:O,warning:k,low:A,fixed:E,duration:D},issues:T.map(e=>({...e,fix:void 0}))};if(i.reporting.outputFile){let t=n.default.resolve(e,i.reporting.outputFile);r.default.existsSync(n.default.dirname(t))||r.default.mkdirSync(n.default.dirname(t),{recursive:!0}),r.default.writeFileSync(t,JSON.stringify(j,null,2))}if(a===`json`)console.log(JSON.stringify(j,null,2));else if(a===`pretty`){let e=T.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(T.length>0){(0,c.dividerLog)();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`?c.colors.red:n.level===`warning`?c.colors.yellow:c.colors.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${c.colors.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${c.colors.green(`✅ Fixed automatically`)}`)}console.log(`\n${(0,c.single)(e,{title:`📄 ${n}`})}`)}(0,c.dividerLog)()}if(T.length===0)console.log((0,c.round)([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${c.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${D}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];O>0&&e.push(c.colors.red(`${O} Critical Error${O===1?``:`s`}`)),k>0&&e.push(c.colors.yellow(`${k} Warning${k===1?``:`s`}`)),A>0&&e.push(c.colors.blue(`${A} Improvement${A===1?``:`s`}`));let t=[...(0,c.bullet)(e).split(`
34
- `).map(e=>e.trimStart()),``,c.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${D}s`)];console.log(`\n${(0,c.double)(t,{title:`Diagnosis Results`})}\n`),E>0&&(0,c.success)(`Successfully fixed ${E} issues automatically!`),O>0?(0,c.error)(`Please fix the critical errors before building for production.`):(0,c.success)(`No critical issues found. You are ready to go!`)}}i.reporting.failOnError&&O>0&&process.exit(1),i.reporting.maxWarnings!==-1&&k>i.reporting.maxWarnings&&(a===`pretty`&&(0,c.error)(`Failed: Too many warnings (${k} > ${i.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,c.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return m}});
@@ -1,160 +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,d as t,r as n,u as r}from"./utils-DC4Wq-S2.mjs";import{i}from"./cache-DFW4R3S0.mjs";import{i as a,n as o,r as s,t as c}from"./routes-CKgGAy8P.mjs";import{_ as l,c as u,h as d,m as f,v as p,y as m}from"./doctor-BY1tSmQd.mjs";import{a as h,i as g,n as _,o as v,r as ee,s as te}from"./shiki-adapter-F-P-lDon.mjs";import{t as y}from"./handler-DfhH9D1b.mjs";import*as b from"node:module";import{createRequire as ne}from"node:module";import re from"@vitejs/plugin-react";import ie from"@tailwindcss/vite";import x from"node:path";import S from"node:fs";import{loadEnv as ae,normalizePath as C}from"vite";import{ViteImageOptimizer as oe}from"@bdocs/plugin-image-optimizer";import{z as w}from"zod";import*as T from"@bdocs/dui";import{colors as E,error as D,warn as O}from"@bdocs/dui";import se from"node:crypto";import ce from"semver";import{build as le}from"@bdocs/ssg/node";import{EXIT as ue,SKIP as de,visit as k}from"unist-util-visit";import{fileURLToPath as fe}from"node:url";import pe from"@mdx-js/rollup";import me from"remark-gfm";import he from"remark-frontmatter";import ge from"rehype-slug";var A=Object.defineProperty,_e=(e,t)=>{let n={};for(var r in e)A(n,r,{get:e[r],enumerable:!0});return t||A(n,Symbol.toStringTag,{value:`Module`}),n},ve=ne(import.meta.url);function ye(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 be(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=ye(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}var j=class extends Error{name=this.constructor.name;constructor(e,t,n){super(`[plugin:${e}] ${t}`,n),this.pluginName=e}},M=class extends j{constructor(e,t){super(e,`Validation failed: ${t}`)}},N=class extends j{constructor(e,t){super(e,`Compatibility error: ${t}`)}},P=class extends j{constructor(e,t,n){super(e,`Error in hook '${t}': ${n.message}`,{cause:n}),this.hookName=t}},F=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 xe=m.extend({version:w.string().optional(),boltdocsVersion:w.string().optional(),hooks:w.object({beforeBuild:w.function().optional(),afterBuild:w.function().optional(),beforeDev:w.function().optional(),afterDev:w.function().optional(),buildEnd:w.function().optional(),transformSource:w.function().optional(),transformMdx:w.function().optional(),transformHtml:w.function().optional()}).optional()});function Se(e,t){let n=[],r=new Set;for(let i of e){let e=xe.safeParse(i);if(!e.success)throw new M(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 M(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!ce.satisfies(t,a.boltdocsVersion))throw new N(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(`..`)||x.isAbsolute(t))&&t.includes(`..`))throw new M(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function Ce(e,t=process.cwd()){let n=e.plugins||[];for(let e of n)if(e.name)try{let n=null;try{let{createRequire:r}=ve(`node:module`);n=r(x.resolve(t,`package.json`)).resolve(`${e.name}/package.json`)}catch{let r=x.resolve(t,`node_modules`,e.name,`package.json`);S.existsSync(r)&&(n=r)}if(n&&S.existsSync(n)){let t=JSON.parse(S.readFileSync(n,`utf-8`)).scripts||{};(t.preinstall||t.postinstall||t.install)&&O(`💡 ${E.yellow(E.bold(`Nota de seguridad:`))} El plugin ${E.cyan(e.name)} ejecuta scripts nativos al instalarse. Corre ${E.bold(`boltdocs audit`)} para un análisis detallado.`)}}catch{}}var we=class{name=`ConfigResolve`;async execute(e){e.config=await d(`docs`,e.root),Ce(e.config,e.root),e.viteConfig=await kt(e.root,`production`)}};function I(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 Te=class{name=`RouteGenerate`;async execute(e){if(!e.config)throw Error(`Config not resolved. Run ConfigResolve first.`);let t=x.resolve(e.root,`docs`),n=e.viteConfig?.base||e.config.base||`/docs`;e.routes=[...await c(t,e.config,n)],e.ssgRoutes=I(e.routes)}};const Ee=w.object({title:w.string().optional(),description:w.string().optional(),canonical:w.string().url().optional(),robots:w.string().optional(),noindex:w.boolean().optional(),"og:title":w.string().optional(),"og:description":w.string().optional(),"og:image":w.string().optional(),"og:type":w.string().optional(),"og:url":w.string().url().optional()});var De=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=Ee.safeParse(a);return o.success||O(`[SEOValidate] Validation issues on route "${e.path}":`,o.error.message),e.title||O(`[SEOValidate] Route "${e.path}" is missing a title.`),{...e,seo:a}}),e.ssgRoutes=I(e.routes)}},Oe=class{name=`TypeGenerate`;async execute(e){if(!e.config||!e.routes)throw Error(`Config or Routes not initialized.`);let t=x.resolve(e.root,`docs`),n=e.routes.map(e=>e.path),r=(e.config.base||`/docs`).replace(/\/$/,``);n.includes(r)||n.push(r),l(e.config,t,e.root,n),p(n)}},ke=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 le({entry:`boltdocs/entry`,routeToSourceFileMap:t,cacheDir:x.resolve(e.root,`.boltdocs/build`)},e.viteConfig),e.outDir=e.viteConfig.build?.outDir||`dist`}};function Ae(e,t){let r=(t.siteUrl||``).replace(/\/$/,``);if(!r)return``;let i=t.seo?.indexing!==`all`&&t.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
58
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
59
- ${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>
60
- <loc>${n(`${r}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`)}</loc>
61
- <changefreq>weekly</changefreq>
62
- <priority>0.7</priority>
63
- </url>`).join(`
64
- `)}
65
- </urlset>`}function je(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(`
66
- `);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(`
67
- `)+`
68
- `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
69
- `)+`
70
- `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
71
-
72
- `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
73
- `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
74
- `)}var Me=class{name=`SEOWrite`;async execute(e){if(!e.ssgRoutes||!e.config||!e.outDir)throw Error(`SSG Routes, Config, or OutDir not initialized.`);let t=Ae(e.ssgRoutes,e.config),n=x.resolve(e.root,e.outDir);t&&S.writeFileSync(x.join(n,`sitemap.xml`),t,`utf-8`);let r=je(e.config);S.writeFileSync(x.join(n,`robots.txt`),r,`utf-8`)}};function Ne(){return new Pe().addStep(new we).addStep(new Te).addStep(new De).addStep(new Oe).addStep(new ke).addStep(new Me)}var Pe=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}}},Fe=class{plugins;config;store;docsDir;rootDir;constructor(e,t,n,r){this.plugins=e,this.config=t,this.store=new F,this.docsDir=n||process.cwd(),this.rootDir=r||process.cwd()}async runHook(e,...t){let n=this.getSortedPlugins(),r=new Pe;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 P(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 P(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=>T.info(`${t} ${e}`),warn:e=>T.warn(`${t} ${e}`),error:e=>{T.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>T.debug(`${t} ${e}`)}}};function L(e,t,n){e&&k(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 Ie(e,t,n){L(e,v.ELEMENT,(e,r,i)=>{if(e.tagName===t)return n(e,r,i)})}function Le(e,t,n){let r=Array.isArray(t)?t:[t],i=[v.JSX_FLOW_ELEMENT,v.JSX_TEXT_ELEMENT];L(e,e=>i.includes(e.type),(e,t,i)=>{if(e.name&&r.includes(e.name))return n(e,t,i)})}function Re(e,t,n){e&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties[t]=n)}function ze(e,t){return e?.data?.hProperties?.[t]}function Be(e,t){return typeof t==`object`&&t?{type:v.JSX_ATTRIBUTE,name:e,value:t}:{type:v.JSX_ATTRIBUTE,name:e,value:String(t)}}function Ve(e,t={},n=[]){return{type:v.ELEMENT,tagName:e,properties:t,children:n}}function He(e,t={},n=[],r=!0){let i=Object.entries(t).map(([e,t])=>Be(e,t));return{type:r?v.JSX_FLOW_ELEMENT:v.JSX_TEXT_ELEMENT,name:e,attributes:i,children:n}}function Ue(e,t){e&&k(e,v.HEADING,(e,n,r)=>{if(n!==void 0&&r!==void 0)return t(e,n,r)})}function We(e,t){e&&k(e,v.LINK,(e,n,r)=>{if(n!==void 0&&r!==void 0)return t(e,n,r)})}function Ge(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 Ke(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 qe(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 Je(e){return e}const R=x.dirname(fe(import.meta.url));function z(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(z):e&&typeof e==`object`?Object.values(e).flatMap(z):[]}const Ye=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function Xe(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=z(Object.entries(n.frontmatter).filter(([e])=>!Ye.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}function B(e,t){let n=x.resolve(process.cwd(),`index.css`),i=S.existsSync(n)?`import './index.css';`:``,a=t?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],o=a.map(([e,t])=>`import * as _comp_${e} from '${r(t)}';
75
- const ${e} = _comp_${e}.default || _comp_${e}['${e}'] || _comp_${e};`).join(`
76
- `),s=a.map(([e])=>e).join(`, `),c=x.basename(e.docsDir||`docs`),l=x.resolve(process.cwd(),e.docsDir||`docs`),u=[`tsx`,`ts`,`jsx`,`js`].map(e=>x.resolve(l,`pages-external/index.${e}`)).find(e=>S.existsSync(e)),d=u?`import * as _external_module from '${r(u)}';`:``,f=u?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``,p=process.env.VITE_SSG===`true`,m=p?`{ eager: true }`:`{}`,h=p?``:`
77
- if (typeof window !== 'undefined') {
78
- const prefetchAll = () => {
79
- const getters = Object.values(mdxModules)
80
- if (getters.length === 0) return
81
- let i = 0
82
- const nextBatch = () => {
83
- if (i >= getters.length) return
84
- const batch = getters.slice(i, i + 6)
85
- i += batch.length
86
- Promise.allSettled(batch.map(fn => fn())).then(() => {
87
- setTimeout(nextBatch, 0)
88
- })
89
- }
90
- ;(typeof requestIdleCallback === 'function' ? requestIdleCallback : function(cb) { setTimeout(cb, 500) })(nextBatch)
91
- }
92
- prefetchAll()
93
- }
94
- `;return`
95
- import { ViteReactSSG, createRoutes } from 'boltdocs/client'
96
- import _routes from 'virtual:boltdocs-routes.ts'
97
- import _collections from 'virtual:boltdocs-collections.ts'
98
- import _config from 'virtual:boltdocs-config.ts'
99
- import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx'
100
- ${i}
101
- ${o}
102
- ${d}
103
-
104
- const mdxModules = import.meta.glob('/${c}/**/*.{md,mdx}', ${m});
105
-
106
- const _collLayoutMods = import.meta.glob('${`/${c}/**/layout.tsx`}', { eager: true });
107
- const _collListMods = import.meta.glob('${`/${c}/**/list.tsx`}', { eager: true });
108
- const _collPostMods = import.meta.glob('${`/${c}/**/post.tsx`}', { eager: true });
109
-
110
- const _collectionLayouts = {};
111
- for (const [p, mod] of Object.entries(_collLayoutMods)) {
112
- const dir = p.split('/').slice(-2, -1)[0];
113
- if (dir.startsWith('[') && dir.endsWith(']')) {
114
- _collectionLayouts[dir.slice(1, -1)] = mod.default || mod;
115
- }
116
- }
117
-
118
- const _collectionLists = {};
119
- for (const [p, mod] of Object.entries(_collListMods)) {
120
- const dir = p.split('/').slice(-2, -1)[0];
121
- if (dir.startsWith('[') && dir.endsWith(']')) {
122
- _collectionLists[dir.slice(1, -1)] = mod.default || mod;
123
- }
124
- }
125
-
126
- const _collectionPosts = {};
127
- for (const [p, mod] of Object.entries(_collPostMods)) {
128
- const dir = p.split('/').slice(-2, -1)[0];
129
- if (dir.startsWith('[') && dir.endsWith(']')) {
130
- _collectionPosts[dir.slice(1, -1)] = mod.default || mod;
131
- }
132
- }
133
-
134
- export const createRoot = ViteReactSSG(
135
- {
136
- routes: createRoutes({
137
- routesData: _routes,
138
- collectionsData: _collections,
139
- collectionLayouts: _collectionLayouts,
140
- collectionLists: _collectionLists,
141
- collectionPosts: _collectionPosts,
142
- config: _config,
143
- mdxModules,
144
- ${f}
145
- components: { ${s}${s?`, `:``} ...(_user_mdx_components || {}) },
146
- }),
147
- },
148
- ({ isClient }) => {
149
- // Boltdocs initialization hook
150
- if (isClient) {
151
- // Client-side initialization
152
- }
153
- },
154
- );
155
- ${h}
156
- `}let V=null,H=null;function Ze(){V=null,H=null}function Qe(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`?r(x.resolve(t,`boltdocs-entry.tsx`)):e.includes(`boltdocs-client.mjs`)||e===`virtual:boltdocs-client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.ts`?r(x.resolve(t,`boltdocs-client.mjs`)):e.startsWith(`virtual:boltdocs-`)?`\0`+e:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(n){let a=t();if(n.includes(`boltdocs-entry.tsx`)||n===`\0virtual:boltdocs-entry`)return B(e,a);if(n.includes(`boltdocs-client.mjs`)||n===`\0virtual:boltdocs-client.ts`||n===`virtual:boltdocs-client`){let e=R,t=e;for(;e!==x.parse(e).root;){if(S.existsSync(x.join(e,`package.json`))&&JSON.parse(S.readFileSync(x.join(e,`package.json`),`utf-8`)).name===`boltdocs`){t=e;break}e=x.dirname(e)}let n=x.join(t,`src/client/index.ts`),i=x.join(t,`dist/client/index.js`);return`export * from '${r(S.existsSync(n)?n:i)}';`}if(!n.startsWith(`\0virtual:boltdocs-`))return;let o=n.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(o===`routes`){let e=I(await c(i,a));return`export default ${JSON.stringify(e,null,2)};`}if(o===`collections`){let e=I(await c(i,a)),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(o===`config`){if(V===null){let{loadDirectoryMeta:e}=await import(`./meta-loader-By22EnYa.mjs`);V=await e(i)}let e=V,t={base:a?.base,theme:a?.theme,i18n:a?.i18n,versions:a?.versions,siteUrl:a?.siteUrl,integrations:a?.integrations,plugins:a?.plugins?.map(e=>({name:e.name})),directoryMeta:e};return`export default ${JSON.stringify(t,null,2)};`}if(o===`entry`)return B(e,a);if(o===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],t=null;for(let n of e){let e=x.resolve(i,`mdx-components.${n}`);if(S.existsSync(e)){t=e;break}}if(t){let e=r(t);return`import * as components from '${e}';
157
- const mdxComponents = components.default || components;
158
- export default mdxComponents;
159
- export * from '${e}';`}return`export default {};`}if(o===`layout`){let e=[`tsx`,`jsx`],t=null;for(let n of e){let e=x.resolve(i,`layout.${n}`);if(S.existsSync(e)){t=e;break}}if(t)return`import UserLayout from '${r(t)}';
160
- 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(o===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let n of e){let e=x.resolve(i,`icons.${n}`);if(S.existsSync(e)){t=e;break}}return t?`import * as icons from '${r(t)}';\nexport default icons;`:`export default {};`}if(o===`search`){if(!H){let e=Xe(await c(i,a));H=`export default ${JSON.stringify(e,null,2)};`}return H}if(o===`client`){let e=R,t=``;for(;e&&e!==x.parse(e).root;){let n=x.join(e,`src/client/index.ts`),i=x.join(e,`dist/client/index.mjs`),a=x.join(e,`client/index.ts`);if(S.existsSync(n)){t=r(n);break}if(S.existsSync(i)){t=r(i);break}if(S.existsSync(a)){t=r(a);break}e=x.dirname(e)}if(!t)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${R}`);return`export * from '${t}';`}}}}const U={"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`};function W(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}function $e(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-B31cxNw0.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 et(e){return(t,n,r)=>{let i=t.url||`/`,a=i.split(`?`)[0].split(`#`)[0];if(x.extname(a))return r();let o=e(),s=x.resolve(o?.root||process.cwd(),o?.build?.outDir||`dist`),c=a.replace(/\/$/,``)||`/`,l=x.join(s,c,`index.html`);c!==`/`&&S.existsSync(l)&&(t.url=`${c}/index.html${i.includes(`?`)?`?${i.split(`?`)[1]}`:``}`),r()}}const tt=/\.(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 nt(e,t,n){let r=process.env.NODE_ENV===`production`;e.middlewares.use($e(n)),e.middlewares.use((e,t,i)=>{r&&Object.entries(U).forEach(([e,n])=>{t.setHeader(e,n)});let a=n();a.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,W(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`)&&!tt.test(a)){let n=ye(s);n=be(n,s),n=await e.transformIndexHtml(t.url||`/`,n),r.statusCode=200,r.setHeader(`Content-Type`,`text/html`),r.end(n);return}i()})}function rt(e,t,n){setTimeout(async()=>{try{let{generateRoutes:r}=await import(`./routes-BAsfsn_e.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=x.relative(process.cwd(),t).replace(/\\/g,`/`),r=n.startsWith(`/`)?n:`/${n}`;return e.transformRequest(r)}))}}catch{}},0)}const it=[`tsx`,`jsx`],G=[`tsx`,`ts`,`jsx`,`js`];function at(e,t){let n=f.map(e=>x.resolve(process.cwd(),e)),r=it.map(e=>x.resolve(t,`layout.${e}`)),i=G.map(e=>x.resolve(t,`mdx-components.${e}`)),a=G.map(e=>x.resolve(t,`pages-external/index.${e}`)),o=G.map(e=>x.resolve(t,`icons.${e}`));e.watcher.add([...n,...i,...r,...a,...o])}const K=new Map;function ot(e){let{lastUpdated:t,...n}=e;return se.createHash(`md5`).update(JSON.stringify(n)).digest(`hex`)}async function st(e){try{let{data:n}=await t(e);return ot(n)}catch{return``}}function ct(e){let t=K.get(e);if(t===void 0){let n=s.getStale(e);n?.route?.frontmatter&&(t=ot(n.route.frontmatter),K.set(e,t))}return t}function lt(e,t){K.set(e,t)}function ut(e){K.delete(e)}const dt=[`tsx`,`ts`,`jsx`,`js`];function q(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function ft(t,n,i,s){let c=new Map,d=i.toLowerCase(),p=async(i,p)=>{try{let m=r(i);if(f.some(e=>m.endsWith(e))){t.restart();return}if(dt.some(e=>m.endsWith(`mdx-components.${e}`))){l(s(),n),q(t,`mdx-components.tsx`),t.ws.send({type:`full-reload`});return}if(dt.some(e=>m.endsWith(`icons.${e}`))){q(t,`icons.tsx`),t.ws.send({type:`full-reload`});return}if(m.endsWith(`layout.tsx`)||m.endsWith(`layout.jsx`)){q(t,`layout.tsx`),t.ws.send({type:`full-reload`});return}if(m.includes(`/pages-external/`)||m.includes(`\\pages-external\\`)){q(t,`entry`),t.ws.send({type:`full-reload`});return}if(!m.toLowerCase().startsWith(d))return;let h=m.endsWith(`meta.json`)||m.endsWith(`_meta.json`);if(!h&&!e(m))return;if(p===`add`||p===`unlink`||h){p===`unlink`&&ut(i),o(),Ze();let e=s();l(e,n),q(t,`config`),q(t,`routes`),q(t,`search`),q(t,`collections`),u(n,process.cwd(),e).catch(e=>{D(`Failed to update link tree:`,e)}),t.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:e?.theme,i18n:e?.i18n,versions:e?.versions,siteUrl:e?.siteUrl}}),t.ws.send({type:`full-reload`});return}c.has(m)&&clearTimeout(c.get(m)),c.set(m,setTimeout(async()=>{c.delete(m);try{let e=ct(i),o=await st(i);if(lt(i,o),a(i),e!==void 0&&e!==o){q(t,`routes`),q(t,`search`),q(t,`collections`),t.ws.send({type:`full-reload`});return}let s=r(x.relative(n,i)),c=t.moduleGraph.getModulesByFile(m);if(c&&c.size>0)for(let e of c)t.moduleGraph.invalidateModule(e);else{t.ws.send({type:`full-reload`});return}t.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:m,relPath:s}})}catch(e){D(`HMR error processing content change:`,e)}},150))}catch(e){D(`HMR error during ${p} event:`,e)}};t.watcher.on(`add`,e=>p(e,`add`)),t.watcher.on(`unlink`,e=>p(e,`unlink`)),t.watcher.on(`change`,e=>p(e,`change`))}function pt(t){let n=t.toLowerCase();return({file:t})=>{let r=t.toLowerCase();if(r.startsWith(n)&&(e(t)||r.endsWith(`meta.json`)))return[]}}function mt(e,t,n,r,i){return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(r){let a=i();await a?.runHook(`beforeDev`),u(e,process.cwd(),n()).catch(e=>{D(`Failed to generate initial link tree:`,e)}),rt(r,e,n),nt(r,e,n),at(r,e),ft(r,e,t,n),await a?.runHook(`afterDev`)},hotUpdate:pt(t)}}const J=new i(`mdx`);function ht(e){let t=_(e);return async e=>{let n=await t.getHighlighter();L(e,v.ELEMENT,e=>{if(e.tagName!==`pre`)return;let r=e.children?.[0];if(!r||r.type!==v.ELEMENT||r.tagName!==`code`)return;let i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):h.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=ee(r.properties?.metastring||r.data?.meta||``),s=t.getOptions(a,o),c=r.children?.[0]?.value||``;try{let t=n.codeToHast(c,s),r=t.type===`root`?t.children[0]:t;e.children=r.children,e.properties={...e.properties,...r.properties,[g.HIGHLIGHTED]:`true`,[g.LANG]:a}}catch(t){D(`[rehypeShiki] Failed to highlight code block:`,t),e.properties=e.properties||{},e.properties.className=[...e.properties.className||[],te.FALLBACK],e.properties[g.HIGHLIGHTED]=`false`,e.properties[g.LANG]=a}return o.title&&(e.properties[g.TITLE]=o.title),de})}}function gt(){return e=>{L(e,v.CODE,e=>{e.meta&&Re(e,`metastring`,e.meta)})}}let _t=!1;function vt(e,t,n=pe){let r=e?.plugins?.flatMap(e=>e.remarkPlugins||[])||[],i=e?.plugins?.flatMap(e=>e.rehypePlugins||[])||[],a=n({remarkPlugins:[me,he,gt,...r],rehypePlugins:[ge,[ht,e],...i],jsxRuntime:`automatic`});return{...a,name:`vite-plugin-boltdocs-mdx`,async buildStart(){_t||=(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=S.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}:${se.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=b.createRequire(import.meta.url),yt=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],bt=[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`];function xt(e=Y){try{let e=x.join(process.cwd(),`node_modules/boltdocs/package.json`);return S.existsSync(e)?b.createRequire(S.realpathSync(e)):b.createRequire(x.join(process.cwd(),`package.json`))}catch{return e}}function X(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=x.dirname(e);for(;n&&n!==x.dirname(n);){let e=x.join(n,`package.json`);if(S.existsSync(e)){a=e;break}n=x.dirname(n)}}if(!a)throw Error();let o=x.dirname(a),s=JSON.parse(S.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=x.resolve(o,l);if(S.existsSync(u))return u}catch{}return t.resolve(e)}function Z(e=Y){let t=[],n=xt(e),i=new Set([n,e]);for(let e of i){for(let n of yt)try{let r=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(n)?X(n,e):e.resolve(n);r&&t.push(S.realpathSync(r))}catch{}for(let n of bt)try{t.push(S.realpathSync(e.resolve(n)))}catch{}}return Array.from(new Set(t)).map(e=>r(e))}const Q=b.createRequire(import.meta.url),St=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`];function Ct(e={},t){let n=x.resolve(process.cwd(),e.docsDir||`docs`),i=r(n),a=t,o,s=!1,u,f=[],m=()=>a,h=e=>{a=e},g=()=>o,_=()=>u;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){s=t.command===`build`;let r=!!(t.isSsrBuild||e.build?.ssr);if(Object.assign(process.env,ae(t.mode,e.envDir||process.cwd(),``)),!a){a=await d(n);let e=(await c(n,a)).map(e=>e.path),t=(a.base||`/docs`).replace(/\/$/,``);e.includes(t)||e.push(t),l(a,n,void 0,e),p(e)}import(`./shiki-adapter-EZptJAmW.mjs`).then(({getShikiAdapter:e})=>{e(a).getHighlighter().catch(()=>{})}).catch(()=>{});let{version:i}=await import(`./package-BK_82QLX.mjs`),o=Se(a.plugins||[],i);return a.plugins=o,u=new Fe(o,a),f=o.flatMap(e=>e.vitePlugins||[]),s&&await u.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`flat`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`}},build:{ssrManifest:s},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:X(`react-router-dom`)},{find:`react-helmet-async`,replacement:X(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:X(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...r?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Z(Q)],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[`react-router-dom`]}}},configResolved(e){o=e},resolveId(e,t,n){let r=St.find(t=>e===t||e.startsWith(`${t}/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,x.sep)}/`));if(r&&n?.ssr&&!x.isAbsolute(e)&&r!==`react`&&r!==`react-dom`){let t=xt(Q),n=e;try{n=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(r)?X(e,t):t.resolve(e)}catch{try{n=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(r)?X(e,Q):Q.resolve(e)}catch{}}try{n=S.realpathSync(n)}catch{}return{id:n,external:!0}}return null},transformIndexHtml:{order:`pre`,handler:e=>be(e,a)},async buildEnd(){let{pool:e}=await import(`./worker-pool-DRv8ef4z.mjs`);await e.terminate()},async closeBundle(){!s||o?.build?.ssr||(await u?.runHook(`afterBuild`),await u?.runHook(`buildEnd`))},configurePreviewServer(e){e.middlewares.use($e(m)),e.middlewares.use(et(g))}},Qe(e,m,g,n),mt(n,i,m,h,_),vt(a,_),oe({includePublic:!0}),...f]}const $={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`,"Content-Type":`application/json`};async function wt(e,t){if(Object.entries($).forEach(([e,n])=>{t.setHeader(e,n)}),e.method===`OPTIONS`){t.status(200).end();return}if(e.method!==`POST`){t.status(405).json({error:`Method Not Allowed`});return}try{let n=await y(e.body,process.env);t.status(200).json(n)}catch(e){let n=e instanceof Error?e.message:`Failed to submit feedback`;return t.status(500).json({error:n})}}async function Tt(e,t=process.env){let n=(e,t=200)=>({statusCode:t,headers:$,body:e?JSON.stringify(e):``});if(e.httpMethod===`OPTIONS`)return n(null,200);if(e.httpMethod!==`POST`)return n({error:`Method Not Allowed`},405);try{return n(await y(e.body?JSON.parse(e.body):{},t))}catch(e){return n({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function Et(e,t={}){let n=(e,t=200)=>new Response(e?JSON.stringify(e):null,{status:t,headers:$});if(e.method===`OPTIONS`)return n(null);if(e.method!==`POST`)return n({error:`Method Not Allowed`},405);try{return n(await y(await e.json(),{...process.env,...t}))}catch(e){return n({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function Dt(e,t=process.env){let n=(e,t=200)=>({statusCode:t,headers:$,body:e?JSON.stringify(e):``});if(e.httpMethod===`OPTIONS`)return n(null,200);if(e.httpMethod!==`POST`)return n({error:`Method Not Allowed`},405);try{return n(await y(e.body?JSON.parse(e.body):{},t))}catch(e){return n({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function Ot(e){let t=e?.docsDir||`docs`,n=await d(t),r=(await c(t,n)).map(e=>e.path),i=(n.base||`/docs`).replace(/\/$/,``);return r.includes(i)||r.push(i),l(n,t,void 0,r),p(r),Ct({...e},n)}async function kt(e,t=`development`,n){let r=n||await d(`docs`,e),i=(await c(`docs`,r)).map(e=>e.path),a=(r.base||`/docs`).replace(/\/$/,``);i.includes(a)||i.push(a),l(r,`docs`,e,i),p(i);let o=t===`production`,s=o?{...U}:{};return r.security?.enableCSP&&(s[`Content-Security-Policy`]=W(r)),{root:e,mode:t,oxc:{jsx:{development:!o,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:[re(),ie(),...Ct({docsDir:`docs`,root:e},r)],resolve:{alias:[{find:`boltdocs/entry`,replacement:C(x.resolve(e,`boltdocs-entry.tsx`))},{find:`boltdocs/client`,replacement:C(x.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:C(x.resolve(e,`../packages/core/src`))}],dedupe:[`react`,`react-dom`]},ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Z()],optimizeDeps:{include:[`react`,`react-dom`,`react-fast-compare`,`invariant`,...r.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`,`react-router-dom`]},server:{headers:{...s,...r.vite?.server?.headers},...r.vite?.server},preview:{headers:{...s,...r.vite?.preview?.headers},...r.vite?.preview},...r.vite}}export{j as A,We as C,Se as D,Ce as E,M,_e as N,F as O,Ue as S,Ne as T,Ke as _,Tt as a,L as b,Je as c,Ge as d,Be as f,qe as g,ze as h,Et as i,P as j,N as k,ue as l,Ve as m,kt as n,wt as o,He as p,Dt as r,B as s,Ot as t,de as u,Re as v,Fe as w,Ie as x,Le as y};