boltdocs 3.3.6 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/{adapters-BKzKe2mO.mjs → adapters-BXiBWAKs.mjs} +1 -1
  2. package/dist/{adapters-DwDTQoCG.cjs → adapters-Czl3WtQt.cjs} +1 -1
  3. package/dist/{build-CxT38vPv.cjs → build-CNkXRdk8.cjs} +1 -1
  4. package/dist/{build-BJnL-FHG.mjs → build-CqUBsXVC.mjs} +1 -1
  5. package/dist/client/index.cjs +223 -51
  6. package/dist/client/index.d.cts +3 -3
  7. package/dist/client/index.d.ts +3 -3
  8. package/dist/client/index.js +226 -56
  9. package/dist/client/mdx.cjs +1 -1
  10. package/dist/client/mdx.js +1 -1
  11. package/dist/client/primitives.cjs +5 -5
  12. package/dist/client/primitives.d.cts +53 -34
  13. package/dist/client/primitives.d.ts +62 -43
  14. package/dist/client/primitives.js +4 -4
  15. package/dist/client/router.cjs +1 -1
  16. package/dist/client/router.d.cts +1 -1
  17. package/dist/client/router.d.ts +1 -1
  18. package/dist/client/router.js +1 -1
  19. package/dist/client/theme/reset.css +41 -0
  20. package/dist/{config-BJp3lGzE.cjs → config-B3SEoVjG.cjs} +2 -2
  21. package/dist/{config-BC_qhXws.cjs → config-Bfakeadu.cjs} +1 -1
  22. package/dist/{config-B3_iVsbi.mjs → config-CTcfF-0c.mjs} +2 -2
  23. package/dist/dev-D1DmOSjn.mjs +6 -0
  24. package/dist/dev-DH6cSge8.cjs +6 -0
  25. package/dist/{docs-layout-D3Fmb0Wd.js → docs-layout-CmntYM6p.js} +33 -33
  26. package/dist/{docs-layout-SgphExoE.cjs → docs-layout-DIgxJ5c7.cjs} +9 -9
  27. package/dist/{doctor-BqxOFRt3.cjs → doctor-BLxm2alc.cjs} +1 -1
  28. package/dist/{doctor-TS3JGNEU.cjs → doctor-Dd-JMTRo.cjs} +1 -1
  29. package/dist/{doctor-Cv5lXnay.mjs → doctor-DogHujrP.mjs} +1 -1
  30. package/dist/{image-Bkx85rsq.cjs → image-Bke2ojW1.cjs} +3 -3
  31. package/dist/{image-BAiDReNd.js → image-CaY2w0ua.js} +2 -1
  32. package/dist/index--xbYbT8N.d.ts +343 -0
  33. package/dist/{index-B1Mx0dHl.d.ts → index-B_o5y34l.d.cts} +89 -10
  34. package/dist/{index-DLaHgD-i.d.cts → index-Bx0CUd7Q.d.ts} +89 -10
  35. package/dist/index-RK7W_Fxy.d.cts +343 -0
  36. package/dist/{link-q1qHNGK_.js → link-CSe_oD8Y.js} +86 -113
  37. package/dist/{link-hLWOsx0x.cjs → link-Xb69Oy2F.cjs} +87 -143
  38. package/dist/{mdx-Qi0DmaY8.cjs → mdx-BCOrMd-P.cjs} +68 -16
  39. package/dist/{mdx-CJGWzBGy.js → mdx-BijiEbkp.js} +62 -15
  40. package/dist/{native-nLA4Jr0T.cjs → native-BbtRkce5.cjs} +1 -1
  41. package/dist/node/cli-entry.cjs +1 -1
  42. package/dist/node/cli-entry.mjs +1 -1
  43. package/dist/node/highlight.d.cts +2 -2
  44. package/dist/node/highlight.d.mts +2 -2
  45. package/dist/node/index.cjs +1 -1
  46. package/dist/node/index.d.cts +18 -39
  47. package/dist/node/index.d.mts +19 -40
  48. package/dist/node/index.mjs +1 -1
  49. package/dist/node/mdx/shiki-adapter.d.cts +1 -1
  50. package/dist/node/mdx/shiki-adapter.d.mts +1 -1
  51. package/dist/node-BgiLCa0I.cjs +39 -0
  52. package/dist/node-Da3tYBHo.mjs +39 -0
  53. package/dist/{package-Bah2tHjK.cjs → package-D1gVs5gQ.cjs} +1 -1
  54. package/dist/{package-D6bf68FR.mjs → package-YgQJn3Yh.mjs} +1 -1
  55. package/dist/pages-external-B_r6gvqP.cjs +6 -0
  56. package/dist/pages-external-jmK7AHaO.mjs +6 -0
  57. package/dist/{parser-CD8Oo8qh.mjs → parser-CvNZc5s3.mjs} +1 -1
  58. package/dist/{parser-vPaKvzLp.cjs → parser-DJLWTiO-.cjs} +1 -1
  59. package/dist/plugin-DW9K2fW5.mjs +69 -0
  60. package/dist/plugin-NwGKyTJX.cjs +69 -0
  61. package/dist/{plugin-context-b5qVVQSU.mjs → plugin-context-COh-cbsW.mjs} +1 -1
  62. package/dist/{plugin-context-BZs5lvDu.cjs → plugin-context-FIHaWn6r.cjs} +1 -1
  63. package/dist/{plugin-lifecycle-s89gzTlh.cjs → plugin-lifecycle-D9fTRaWY.cjs} +1 -1
  64. package/dist/{registry-B8pt41zj.d.cts → registry-BFmzj1yg.d.mts} +1 -1
  65. package/dist/{registry-BrrH2X9c.d.mts → registry-BoswPzYV.d.cts} +1 -1
  66. package/dist/{resolve-C5rT6B21.mjs → resolve-5puUe7eS.mjs} +1 -1
  67. package/dist/{resolve-BelytNYR.cjs → resolve-CF4ZLfqx.cjs} +1 -1
  68. package/dist/route-paths-B6ocUfNY.cjs +6 -0
  69. package/dist/route-paths-DyDji4bX.mjs +6 -0
  70. package/dist/{router-CZBxMRAH.js → router-B5e8k4qK.js} +175 -10
  71. package/dist/{router-C3kygdRK.cjs → router-DKC0Lu0n.cjs} +204 -9
  72. package/dist/{routes-Dq_2EUIB.cjs → routes-D55M8UrH.cjs} +1 -1
  73. package/dist/{routes-CzhKOw67.cjs → routes-DdE6Lfcl.cjs} +1 -1
  74. package/dist/{routes-Dw6g0bfF.mjs → routes-_I_8PQYF.mjs} +1 -1
  75. package/dist/{search-dialog-CguKVtUu.cjs → search-dialog-BOQRHKTb.cjs} +53 -20
  76. package/dist/{search-dialog-mYnqU4v7.js → search-dialog-BXil4_7P.js} +57 -24
  77. package/dist/{search-dialog-BYZS9aeO.cjs → search-dialog-CwlBd-Mu.cjs} +5 -5
  78. package/dist/{search-dialog-DQwod5Xc.js → search-dialog-D3Obh3eA.js} +1 -1
  79. package/dist/{search-dialog-DzObE-Ar.js → search-dialog-DeplpVEB.js} +3 -3
  80. package/dist/{search-dialog-QgKRRbsI.cjs → search-dialog-cHXR5zhL.cjs} +1 -1
  81. package/dist/server/index.cjs +1 -1
  82. package/dist/server/index.d.mts +1 -1
  83. package/dist/server/index.mjs +1 -1
  84. package/dist/ssg-static-options-Br1_u9qp.mjs +6 -0
  85. package/dist/ssg-static-options-CVvGKM8i.cjs +6 -0
  86. package/dist/types-58Ac3UGI.d.cts +114 -0
  87. package/dist/types-BwnGf-1E.d.mts +114 -0
  88. package/dist/{virtual-modules-C3S3Nz8r.cjs → virtual-modules-C4-qxFlL.cjs} +1 -1
  89. package/dist/{virtual-modules-CaxqrFd6.mjs → virtual-modules-DiWUKJGP.mjs} +1 -1
  90. package/package.json +5 -3
  91. package/src/shared/types.ts +133 -987
  92. package/dist/dev-46NiL0MC.cjs +0 -6
  93. package/dist/dev-C4kjO5xs.mjs +0 -6
  94. package/dist/index-CgWkOCCn.d.cts +0 -1193
  95. package/dist/index-CuNSD3E2.d.ts +0 -1193
  96. package/dist/node-7Cfw6nMr.cjs +0 -23
  97. package/dist/node-CT2E84nY.mjs +0 -23
  98. package/dist/pages-external-BBw8ObVK.mjs +0 -6
  99. package/dist/pages-external-DPiPFxxP.cjs +0 -6
  100. package/dist/plugin-AgNI3ktz.cjs +0 -69
  101. package/dist/plugin-BAv_pYLt.mjs +0 -69
  102. package/dist/types-74i_xUe2.d.mts +0 -975
  103. package/dist/types-X_Pwk8Cg.d.cts +0 -975
  104. /package/dist/{audit-CMc_ydRr.mjs → audit-CYAkXXvP.mjs} +0 -0
  105. /package/dist/{audit-CHkGiV3c.cjs → audit-DxCZZTuX.cjs} +0 -0
  106. /package/dist/{csp-BiGAG8aF.cjs → csp-B-gc2Iha.cjs} +0 -0
  107. /package/dist/{csp-D0BOH8ae.mjs → csp-f8DOcI_7.mjs} +0 -0
  108. /package/dist/{generator-BCrZL53x.cjs → generator-CBAPKY6r.cjs} +0 -0
  109. /package/dist/{generator-CFukoGa0.mjs → generator-MRpn-yp6.mjs} +0 -0
  110. /package/dist/{handler-Lex5DbvG.mjs → handler-DBZqoWt2.mjs} +0 -0
  111. /package/dist/{handler-Ch-Q9NAB.cjs → handler-ryZR9Q41.cjs} +0 -0
  112. /package/dist/{index-HAwIo4nZ.d.mts → index-CPr34I2C.d.mts} +0 -0
  113. /package/dist/{native-BYKMke79.mjs → native-DZ6WMwjG.mjs} +0 -0
  114. /package/dist/{native-BOet8hpE.cjs → native-DeKxny_T.cjs} +0 -0
  115. /package/dist/{update-check-BXD1atVv.mjs → update-check-BXx8te9F.mjs} +0 -0
  116. /package/dist/{update-check-DFQZyoSU.cjs → update-check-CiIeC7CX.cjs} +0 -0
@@ -3,5 +3,5 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./errors-vKw8CkiX.cjs`),n=require(`./config-files-ph2ZtHWl.cjs`);let r=require(`node:path`);r=e.r(r);let i=require(`node:fs`);i=e.r(i);let a=require(`node:crypto`);a=e.r(a);let o=require(`zod`),s=require(`@bdocs/dui`);function c(e){return e}const l=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()}),u=o.z.object({processor:o.z.enum([`satteri`]).default(`satteri`)}),d=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),clientEntry:o.z.string().optional(),remarkPlugins:o.z.array(o.z.unknown()).optional(),rehypePlugins:o.z.array(o.z.unknown()).optional(),vitePlugins:o.z.array(o.z.unknown()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),client:o.z.object({slots:o.z.record(o.z.string(),o.z.string()).optional(),providers:o.z.array(o.z.string()).optional(),mdxComponents:o.z.record(o.z.string(),o.z.string()).optional(),head:o.z.array(o.z.object({tag:o.z.enum([`script`,`link`,`meta`,`style`]),attrs:o.z.record(o.z.string(),o.z.union([o.z.string(),o.z.boolean()])).optional(),content:o.z.string().optional()})).optional()}).optional(),codeHighlighter:o.z.unknown().optional(),metadata:o.z.record(o.z.string(),o.z.unknown()).optional(),css:o.z.object({cssFiles:o.z.array(o.z.string()).optional(),headStyles:o.z.array(o.z.string()).optional(),postcssPlugins:o.z.array(o.z.unknown()).optional(),preprocessorOptions:o.z.record(o.z.string(),o.z.unknown()).optional()}).optional(),middleware:o.z.array(o.z.object({name:o.z.string().optional(),enforce:o.z.enum([`pre`,`post`]).optional()}).passthrough()).optional(),hooks:o.z.record(o.z.string(),o.z.unknown()).optional()}),f=o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),description:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),logo:o.z.union([o.z.string(),o.z.object({dark:o.z.string(),light:o.z.string(),alt:o.z.string().optional(),width:o.z.number().optional(),height:o.z.number().optional()})]).optional(),navbar:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string(),items:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string()})).optional()})).optional(),sidebar:o.z.record(o.z.string(),o.z.array(o.z.object({text:o.z.string(),link:o.z.string()}))).optional(),sidebarGroups:o.z.record(o.z.string(),o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),icon:o.z.string().optional()})).optional(),socialLinks:o.z.array(l).optional(),editLink:o.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.z.string().url().optional(),version:o.z.string().max(50).optional(),githubRepo:o.z.string().max(100).optional(),favicon:o.z.string().optional(),tabs:o.z.array(o.z.object({id:o.z.string(),text:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),icon:o.z.string().optional()})).optional(),codeTheme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional(),codeHighlighting:o.z.union([o.z.string(),o.z.object({engine:o.z.union([o.z.string(),o.z.unknown(),o.z.function()]).optional(),theme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional(),options:o.z.record(o.z.string(),o.z.unknown()).optional()})]).optional()}),p=o.z.union([o.z.string(),o.z.object({rules:o.z.array(o.z.object({userAgent:o.z.string(),allow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional(),disallow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional()})).optional(),sitemaps:o.z.array(o.z.string().url()).optional()})]),m=o.z.object({defaultLocale:o.z.string(),locales:o.z.union([o.z.record(o.z.string(),o.z.string()),o.z.array(o.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.z.record(o.z.string(),o.z.object({label:o.z.string().optional(),direction:o.z.enum([`ltr`,`rtl`]).optional(),htmlLang:o.z.string().optional(),calendar:o.z.string().optional()})).optional()}),h=o.z.object({defaultVersion:o.z.string(),prefix:o.z.string().optional(),versions:o.z.array(o.z.object({label:o.z.string(),path:o.z.string()}))}),g=o.z.object({headers:o.z.record(o.z.string(),o.z.string()).optional(),enableCSP:o.z.boolean().optional(),customHeaders:o.z.record(o.z.string(),o.z.string()).optional()}),_=o.z.object({google:o.z.string().optional(),bing:o.z.string().optional(),yandex:o.z.string().optional(),pinterest:o.z.string().optional(),facebook:o.z.string().optional()}),v=o.z.lazy(()=>o.z.union([o.z.string(),o.z.number(),o.z.boolean(),o.z.null(),o.z.array(v),o.z.record(o.z.string(),v)])),y=o.z.union([o.z.record(o.z.string(),v),o.z.array(o.z.record(o.z.string(),v))]),b=o.z.object({metatags:o.z.record(o.z.string(),o.z.string()).optional(),indexing:o.z.enum([`all`,`public`]).optional(),thumbnails:o.z.object({background:o.z.string().optional()}).optional(),verification:_.optional(),structuredData:y.optional()}),x=o.z.object({viewTransitions:o.z.union([o.z.boolean(),o.z.object({enabled:o.z.boolean().optional(),types:o.z.array(o.z.string()).optional()})]).optional(),fileRouting:o.z.boolean().optional()}),S=o.z.object({measurementId:o.z.string().min(1,`Measurement ID is required for GA4`),debug:o.z.boolean().optional(),anonymizeIp:o.z.boolean().optional(),sendPageView:o.z.boolean().optional(),cookieFlags:o.z.string().optional(),autoTrack:o.z.object({pageViews:o.z.boolean().optional(),downloads:o.z.boolean().optional(),externalLinks:o.z.boolean().optional(),search:o.z.boolean().optional()}).optional()}),C=o.z.object({tagId:o.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.z.string().optional(),preview:o.z.string().optional()}),w=o.z.object({appId:o.z.string().min(1,`Algolia App ID is required`),apiKey:o.z.string().min(1,`Algolia API Key is required`),indexName:o.z.string().min(1,`Algolia Index Name is required`)}),T=o.z.object({repo:o.z.string().min(1,`Giscus repository is required`),repoId:o.z.string().min(1,`Giscus repository ID is required`),category:o.z.string().optional(),categoryId:o.z.string().optional(),mapping:o.z.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),reactionsEnabled:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),emitMetadata:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),inputPosition:o.z.enum([`top`,`bottom`]).optional(),theme:o.z.string().optional(),darkTheme:o.z.string().optional(),lang:o.z.string().optional(),loading:o.z.enum([`lazy`,`eager`]).optional()}),E=o.z.object({enabled:o.z.boolean(),owner:o.z.string().min(1,`GitHub owner is required`),repo:o.z.string().min(1,`GitHub repository name is required`),categorySlug:o.z.string().optional(),endpoint:o.z.string().optional()}),D=o.z.object({analytics:o.z.boolean().optional(),speedInsights:o.z.boolean().optional()}),O=o.z.object({apiKey:o.z.string().min(1,`API key is required for PostHog`),host:o.z.string().url().optional(),capturePageview:o.z.boolean().optional(),capturePageleave:o.z.boolean().optional(),sessionRecording:o.z.boolean().optional(),autocapture:o.z.boolean().optional()}),k=o.z.object({ga4:S.optional(),gtm:C.optional(),vercel:D.optional(),posthog:O.optional()}),A=o.z.object({algolia:w.optional()}),j=o.z.object({giscus:T.optional(),custom:E.optional()}),M=o.z.object({analytics:k.optional(),search:A.optional(),feedback:j.optional()}),N=o.z.object({criticalCss:o.z.enum([`zig-critters`,`beasties`,`none`]).optional(),criticalCssMaxSize:o.z.number().int().min(0).optional()}),P=o.z.object({labels:o.z.record(o.z.string(),o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())])).optional(),positions:o.z.record(o.z.string(),o.z.number()).optional(),postsPerPage:o.z.number().int().positive().optional(),defaultCollection:o.z.string().optional(),dateFormat:o.z.string().optional(),sortBy:o.z.enum([`date`,`title`,`sidebarPosition`]).optional()}),F=o.z.object({visible:o.z.boolean().optional(),environments:o.z.array(o.z.string()).optional()}),I=o.z.object({turbo:o.z.boolean().optional(),siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:f.optional(),i18n:m.optional(),versions:h.optional(),mdx:u.optional(),ssg:N.optional(),plugins:o.z.array(d).optional(),collections:P.optional(),robots:p.optional(),security:g.optional(),seo:b.optional(),integrations:M.optional(),drafts:F.optional(),experimental:x.optional(),aliases:o.z.custom().optional(),featureFlags:o.z.record(o.z.string(),o.z.union([o.z.boolean(),o.z.string()])).optional(),vite:o.z.custom().optional()}),L=new Map;function R(e,t,n,r){return`${e}::${t}::${n}::${r}`}function z(e){return r.default.join(e,`.boltdocs`,`cache`,`config.json`)}function B(e,t,n,r,i){return a.default.createHash(`sha256`).update(`${e}:${t}:${n}:${r}:${i}`).digest(`hex`)}function V(e,t,n){let a=z(e);if(!i.default.existsSync(a))return null;try{let o=i.default.readFileSync(a,`utf-8`),s=JSON.parse(o),c=r.default.resolve(e,s.filename);if(!i.default.existsSync(c))return null;let l=i.default.statSync(c);if(B(s.filename,l.mtimeMs,l.size,t,n)!==B(s.filename,s.mtimeMs,s.size,s.command,s.mode))return null;let u=I.safeParse(s.config);return u.success?{config:u.data,configFile:c}:null}catch{return null}}function H(e,t,n,a,o,s,c){try{let l=z(e);i.default.mkdirSync(r.default.dirname(l),{recursive:!0});let u={filename:t,mtimeMs:n,size:a,command:o,mode:s,config:{...c,plugins:[]}};i.default.writeFileSync(l,JSON.stringify(u),`utf-8`)}catch(e){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] Failed to write config cache:`,e)}}async function U(e,t){let{createJiti:n}=await import(`jiti`),r=await n(t,{interopDefault:!0}).import(e);return r.default??r.config??r}async function W(e,a=process.cwd(),o=`serve`,c=`development`){let l=a,u=R(e,l,o,c);{let e=L.get(u);if(e)return e}let d=V(l,o,c);if(d){try{let e=await U(d.configFile,l);e?.plugins&&(d.config.plugins=e.plugins)}catch{}return L.set(u,d.config),d.config}let f={docsDir:r.default.resolve(l,e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},p={},m=null;for(let e of n.t){let t=r.default.resolve(l,e);if(i.default.existsSync(t))try{let n;try{n=await U(t,l)}catch(r){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] jiti config load failed for ${e}, falling back to Vite: ${r instanceof Error?r.message:String(r)}`);let{loadConfigFromFile:i}=await import(`vite`);n=(await i({command:o,mode:c},t,l))?.config}if(n){p=n;let r=i.default.statSync(t);m={filename:e,mtimeMs:r.mtimeMs,size:r.size};break}}catch(t){t instanceof Error&&(console.error(`\x1b[31m[boltdocs] ✖ Failed to load config from ${e}: ${t.message}\x1b[0m`),(0,s.warn)(`Failed to load config from ${e}: ${t.message}`))}}let h={title:p.title,description:p.description,logo:p.logo,favicon:p.favicon,navbar:p.navbar,sidebar:p.sidebar,sidebarGroups:p.theme?.sidebarGroups,socialLinks:p.socialLinks,githubRepo:p.githubRepo,tabs:p.tabs,codeTheme:p.codeTheme,codeHighlighting:p.theme?.codeHighlighting,communityHelp:p.communityHelp,version:p.version,editLink:p.editLink,...p.theme||{}},g=Object.fromEntries(Object.entries(h).filter(([e,t])=>t!==void 0));g.navbar&&=g.navbar.map(e=>({label:e.label||``,href:e.href||``,items:e.items}));let _={docsDir:r.default.resolve(l,p.docsDir||e),theme:{...f.theme,...g},i18n:p.i18n?{...p.i18n,locales:Array.isArray(p.i18n.locales)?Object.fromEntries(p.i18n.locales.map(e=>[e,e])):p.i18n.locales}:void 0,versions:p.versions,siteUrl:p.siteUrl,base:p.base,ssg:p.ssg,seo:p.seo,plugins:p.plugins||[],robots:p.robots,security:p.security,integrations:p.integrations,experimental:p.experimental,featureFlags:p.featureFlags,aliases:p.aliases,drafts:p.drafts,collections:p.collections,vite:p.vite},v=I.safeParse(_);if(!v.success)throw new t.r(`Invalid Boltdocs configuration:\n${v.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
- `)}`);let y=v.data;return m&&H(l,m.filename,m.mtimeMs,m.size,o,c,y),L.set(u,y),y}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return W}});
6
+ const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./errors-vKw8CkiX.cjs`),n=require(`./config-files-ph2ZtHWl.cjs`);let r=require(`node:path`);r=e.r(r);let i=require(`node:fs`);i=e.r(i);let a=require(`node:crypto`);a=e.r(a);let o=require(`zod`),s=require(`@bdocs/dui`);function c(e){return e}const l=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()}),u=o.z.object({processor:o.z.enum([`satteri`]).default(`satteri`)}),d=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),clientEntry:o.z.string().optional(),remarkPlugins:o.z.array(o.z.unknown()).optional(),rehypePlugins:o.z.array(o.z.unknown()).optional(),vitePlugins:o.z.array(o.z.unknown()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),client:o.z.object({slots:o.z.record(o.z.string(),o.z.string()).optional(),providers:o.z.array(o.z.string()).optional(),mdxComponents:o.z.record(o.z.string(),o.z.string()).optional(),head:o.z.array(o.z.object({tag:o.z.enum([`script`,`link`,`meta`,`style`]),attrs:o.z.record(o.z.string(),o.z.union([o.z.string(),o.z.boolean()])).optional(),content:o.z.string().optional()})).optional()}).optional(),codeHighlighter:o.z.unknown().optional(),metadata:o.z.record(o.z.string(),o.z.unknown()).optional(),css:o.z.object({cssFiles:o.z.array(o.z.string()).optional(),headStyles:o.z.array(o.z.string()).optional(),postcssPlugins:o.z.array(o.z.unknown()).optional(),preprocessorOptions:o.z.record(o.z.string(),o.z.unknown()).optional()}).optional(),middleware:o.z.array(o.z.object({name:o.z.string().optional(),enforce:o.z.enum([`pre`,`post`]).optional()}).passthrough()).optional(),hooks:o.z.record(o.z.string(),o.z.unknown()).optional()}),f=o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),description:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),logo:o.z.union([o.z.string(),o.z.object({dark:o.z.string(),light:o.z.string(),alt:o.z.string().optional(),width:o.z.number().optional(),height:o.z.number().optional()})]).optional(),navbar:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string(),items:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string()})).optional()})).optional(),sidebar:o.z.record(o.z.string(),o.z.array(o.z.object({text:o.z.string(),link:o.z.string()}))).optional(),sidebarGroups:o.z.record(o.z.string(),o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),icon:o.z.string().optional()})).optional(),socialLinks:o.z.array(l).optional(),editLink:o.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.z.string().url().optional(),version:o.z.string().max(50).optional(),githubRepo:o.z.string().max(100).optional(),favicon:o.z.string().optional(),tabs:o.z.array(o.z.object({id:o.z.string(),text:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),icon:o.z.string().optional()})).optional(),codeTheme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional(),codeHighlighting:o.z.union([o.z.string(),o.z.object({engine:o.z.union([o.z.string(),o.z.unknown(),o.z.function()]).optional(),theme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional(),options:o.z.record(o.z.string(),o.z.unknown()).optional()})]).optional()}),p=o.z.union([o.z.string(),o.z.object({rules:o.z.array(o.z.object({userAgent:o.z.string(),allow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional(),disallow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional()})).optional(),sitemaps:o.z.array(o.z.string().url()).optional()})]),m=o.z.object({defaultLocale:o.z.string(),locales:o.z.union([o.z.record(o.z.string(),o.z.string()),o.z.array(o.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.z.record(o.z.string(),o.z.object({label:o.z.string().optional(),direction:o.z.enum([`ltr`,`rtl`]).optional(),htmlLang:o.z.string().optional(),calendar:o.z.string().optional()})).optional()}),h=o.z.object({defaultVersion:o.z.string(),prefix:o.z.string().optional(),versions:o.z.array(o.z.object({label:o.z.string(),path:o.z.string()}))}),g=o.z.object({headers:o.z.record(o.z.string(),o.z.string()).optional(),enableCSP:o.z.boolean().optional(),customHeaders:o.z.record(o.z.string(),o.z.string()).optional()}),_=o.z.object({google:o.z.string().optional(),bing:o.z.string().optional(),yandex:o.z.string().optional(),pinterest:o.z.string().optional(),facebook:o.z.string().optional()}),v=o.z.lazy(()=>o.z.union([o.z.string(),o.z.number(),o.z.boolean(),o.z.null(),o.z.array(v),o.z.record(o.z.string(),v)])),y=o.z.union([o.z.record(o.z.string(),v),o.z.array(o.z.record(o.z.string(),v))]),b=o.z.object({metatags:o.z.record(o.z.string(),o.z.string()).optional(),indexing:o.z.enum([`all`,`public`]).optional(),thumbnails:o.z.object({background:o.z.string().optional()}).optional(),verification:_.optional(),structuredData:y.optional()}),x=o.z.object({viewTransitions:o.z.union([o.z.boolean(),o.z.object({enabled:o.z.boolean().optional(),types:o.z.array(o.z.string()).optional()})]).optional(),fileRouting:o.z.boolean().optional()}),S=o.z.object({measurementId:o.z.string().min(1,`Measurement ID is required for GA4`),debug:o.z.boolean().optional(),anonymizeIp:o.z.boolean().optional(),sendPageView:o.z.boolean().optional(),cookieFlags:o.z.string().optional(),autoTrack:o.z.object({pageViews:o.z.boolean().optional(),downloads:o.z.boolean().optional(),externalLinks:o.z.boolean().optional(),search:o.z.boolean().optional()}).optional()}),C=o.z.object({tagId:o.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.z.string().optional(),preview:o.z.string().optional()}),w=o.z.object({appId:o.z.string().min(1,`Algolia App ID is required`),apiKey:o.z.string().min(1,`Algolia API Key is required`),indexName:o.z.string().min(1,`Algolia Index Name is required`)}),T=o.z.object({repo:o.z.string().min(1,`Giscus repository is required`),repoId:o.z.string().min(1,`Giscus repository ID is required`),category:o.z.string().optional(),categoryId:o.z.string().optional(),mapping:o.z.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),reactionsEnabled:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),emitMetadata:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),inputPosition:o.z.enum([`top`,`bottom`]).optional(),theme:o.z.string().optional(),darkTheme:o.z.string().optional(),lang:o.z.string().optional(),loading:o.z.enum([`lazy`,`eager`]).optional()}),E=o.z.object({enabled:o.z.boolean(),owner:o.z.string().min(1,`GitHub owner is required`),repo:o.z.string().min(1,`GitHub repository name is required`),categorySlug:o.z.string().optional(),endpoint:o.z.string().optional()}),D=o.z.object({analytics:o.z.boolean().optional(),speedInsights:o.z.boolean().optional()}),O=o.z.object({apiKey:o.z.string().min(1,`API key is required for PostHog`),host:o.z.string().url().optional(),capturePageview:o.z.boolean().optional(),capturePageleave:o.z.boolean().optional(),sessionRecording:o.z.boolean().optional(),autocapture:o.z.boolean().optional()}),k=o.z.object({ga4:S.optional(),gtm:C.optional(),vercel:D.optional(),posthog:O.optional()}),A=o.z.object({algolia:w.optional()}),j=o.z.object({giscus:T.optional(),custom:E.optional()}),M=o.z.object({analytics:k.optional(),search:A.optional(),feedback:j.optional()}),N=o.z.object({criticalCss:o.z.enum([`zig-critters`,`beasties`,`none`]).optional(),criticalCssMaxSize:o.z.number().int().min(0).optional()}),P=o.z.object({labels:o.z.record(o.z.string(),o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())])).optional(),positions:o.z.record(o.z.string(),o.z.number()).optional(),postsPerPage:o.z.number().int().positive().optional(),defaultCollection:o.z.string().optional(),dateFormat:o.z.string().optional(),sortBy:o.z.enum([`date`,`title`,`sidebarPosition`]).optional()}),F=o.z.object({visible:o.z.boolean().optional(),environments:o.z.array(o.z.string()).optional()}),I=o.z.object({from:o.z.string().min(1,`Redirect "from" cannot be empty`).refine(e=>!/^[a-z][a-z0-9+.-]*:\/\//i.test(e),{message:`Redirect "from" must be a path, not an external URL`}).refine(e=>!e.includes(`#`),{message:`Redirect "from" cannot contain a hash fragment`}),to:o.z.string().min(1,`Redirect "to" cannot be empty`),status:o.z.union([o.z.literal(301),o.z.literal(302),o.z.literal(307),o.z.literal(308)]).optional(),locale:o.z.boolean().optional()}),L=o.z.object({turbo:o.z.boolean().optional(),siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:f.optional(),i18n:m.optional(),versions:h.optional(),mdx:u.optional(),ssg:N.optional(),plugins:o.z.array(d).optional(),collections:P.optional(),robots:p.optional(),redirects:o.z.array(I).optional(),security:g.optional(),seo:b.optional(),integrations:M.optional(),drafts:F.optional(),experimental:x.optional(),aliases:o.z.custom().optional(),featureFlags:o.z.record(o.z.string(),o.z.union([o.z.boolean(),o.z.string()])).optional(),vite:o.z.custom().optional()}),R=new Map;function z(e,t,n,r){return`${e}::${t}::${n}::${r}`}function B(e){return r.default.join(e,`.boltdocs`,`cache`,`config.json`)}function V(e,t,n,r,i){return a.default.createHash(`sha256`).update(`${e}:${t}:${n}:${r}:${i}`).digest(`hex`)}function H(e,t,n){let a=B(e);if(!i.default.existsSync(a))return null;try{let o=i.default.readFileSync(a,`utf-8`),s=JSON.parse(o),c=r.default.resolve(e,s.filename);if(!i.default.existsSync(c))return null;let l=i.default.statSync(c);if(V(s.filename,l.mtimeMs,l.size,t,n)!==V(s.filename,s.mtimeMs,s.size,s.command,s.mode))return null;let u=L.safeParse(s.config);return u.success?{config:u.data,configFile:c}:null}catch{return null}}function U(e,t,n,a,o,s,c){try{let l=B(e);i.default.mkdirSync(r.default.dirname(l),{recursive:!0});let u={filename:t,mtimeMs:n,size:a,command:o,mode:s,config:{...c,plugins:[]}};i.default.writeFileSync(l,JSON.stringify(u),`utf-8`)}catch(e){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] Failed to write config cache:`,e)}}async function W(e,t){let{createJiti:n}=await import(`jiti`),r=await n(t,{interopDefault:!0}).import(e);return r.default??r.config??r}async function G(e,a=process.cwd(),o=`serve`,c=`development`){let l=a,u=z(e,l,o,c);{let e=R.get(u);if(e)return e}let d=H(l,o,c);if(d){try{let e=await W(d.configFile,l);e?.plugins&&(d.config.plugins=e.plugins)}catch{}return R.set(u,d.config),d.config}let f={docsDir:r.default.resolve(l,e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},p={},m=null;for(let e of n.t){let t=r.default.resolve(l,e);if(i.default.existsSync(t))try{let n;try{n=await W(t,l)}catch(r){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] jiti config load failed for ${e}, falling back to Vite: ${r instanceof Error?r.message:String(r)}`);let{loadConfigFromFile:i}=await import(`vite`);n=(await i({command:o,mode:c},t,l))?.config}if(n){p=n;let r=i.default.statSync(t);m={filename:e,mtimeMs:r.mtimeMs,size:r.size};break}}catch(t){t instanceof Error&&(console.error(`\x1b[31m[boltdocs] ✖ Failed to load config from ${e}: ${t.message}\x1b[0m`),(0,s.warn)(`Failed to load config from ${e}: ${t.message}`))}}let h={title:p.title,description:p.description,logo:p.logo,favicon:p.favicon,navbar:p.navbar,sidebar:p.sidebar,sidebarGroups:p.theme?.sidebarGroups,socialLinks:p.socialLinks,githubRepo:p.githubRepo,tabs:p.tabs,codeTheme:p.codeTheme,codeHighlighting:p.theme?.codeHighlighting,communityHelp:p.communityHelp,version:p.version,editLink:p.editLink,...p.theme||{}},g=Object.fromEntries(Object.entries(h).filter(([e,t])=>t!==void 0));g.navbar&&=g.navbar.map(e=>({label:e.label||``,href:e.href||``,items:e.items}));let _={docsDir:r.default.resolve(l,p.docsDir||e),theme:{...f.theme,...g},i18n:p.i18n?{...p.i18n,locales:Array.isArray(p.i18n.locales)?Object.fromEntries(p.i18n.locales.map(e=>[e,e])):p.i18n.locales}:void 0,versions:p.versions,siteUrl:p.siteUrl,base:p.base,ssg:p.ssg,seo:p.seo,plugins:p.plugins||[],robots:p.robots,security:p.security,integrations:p.integrations,experimental:p.experimental,featureFlags:p.featureFlags,aliases:p.aliases,drafts:p.drafts,collections:p.collections,vite:p.vite},v=L.safeParse(_);if(!v.success)throw new t.r(`Invalid Boltdocs configuration:\n${v.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
+ `)}`);let y=v.data;return m&&U(l,m.filename,m.mtimeMs,m.size,o,c,y),R.set(u,y),y}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return G}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./config-BJp3lGzE.cjs`);require(`./config-files-ph2ZtHWl.cjs`),exports.resolveConfig=e.t;
6
+ const e=require(`./config-B3SEoVjG.cjs`);require(`./config-files-ph2ZtHWl.cjs`),exports.resolveConfig=e.t;
@@ -3,5 +3,5 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{t as e}from"./chunk-BFSpntXv.mjs";import{r as t}from"./errors-N-b6Sn2G.mjs";import{t as n}from"./config-files-DfwZ3Wot.mjs";import r from"node:path";import i from"node:fs";import a from"node:crypto";import{z as o}from"zod";import{warn as s}from"@bdocs/dui";function c(e){return e}const l=o.object({icon:o.string().max(50),link:o.string().url()}),u=o.object({processor:o.enum([`satteri`]).default(`satteri`)}),d=o.object({name:o.string(),enforce:o.enum([`pre`,`post`]).optional(),version:o.string().optional(),boltdocsVersion:o.string().optional(),clientEntry:o.string().optional(),remarkPlugins:o.array(o.unknown()).optional(),rehypePlugins:o.array(o.unknown()).optional(),vitePlugins:o.array(o.unknown()).optional(),components:o.record(o.string(),o.string()).optional(),client:o.object({slots:o.record(o.string(),o.string()).optional(),providers:o.array(o.string()).optional(),mdxComponents:o.record(o.string(),o.string()).optional(),head:o.array(o.object({tag:o.enum([`script`,`link`,`meta`,`style`]),attrs:o.record(o.string(),o.union([o.string(),o.boolean()])).optional(),content:o.string().optional()})).optional()}).optional(),codeHighlighter:o.unknown().optional(),metadata:o.record(o.string(),o.unknown()).optional(),css:o.object({cssFiles:o.array(o.string()).optional(),headStyles:o.array(o.string()).optional(),postcssPlugins:o.array(o.unknown()).optional(),preprocessorOptions:o.record(o.string(),o.unknown()).optional()}).optional(),middleware:o.array(o.object({name:o.string().optional(),enforce:o.enum([`pre`,`post`]).optional()}).passthrough()).optional(),hooks:o.record(o.string(),o.unknown()).optional()}),f=o.object({title:o.union([o.string(),o.record(o.string(),o.string())]).optional(),description:o.union([o.string(),o.record(o.string(),o.string())]).optional(),logo:o.union([o.string(),o.object({dark:o.string(),light:o.string(),alt:o.string().optional(),width:o.number().optional(),height:o.number().optional()})]).optional(),navbar:o.array(o.object({label:o.union([o.string(),o.record(o.string(),o.string())]),href:o.string(),items:o.array(o.object({label:o.union([o.string(),o.record(o.string(),o.string())]),href:o.string()})).optional()})).optional(),sidebar:o.record(o.string(),o.array(o.object({text:o.string(),link:o.string()}))).optional(),sidebarGroups:o.record(o.string(),o.object({title:o.union([o.string(),o.record(o.string(),o.string())]).optional(),icon:o.string().optional()})).optional(),socialLinks:o.array(l).optional(),editLink:o.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.string().url().optional(),version:o.string().max(50).optional(),githubRepo:o.string().max(100).optional(),favicon:o.string().optional(),tabs:o.array(o.object({id:o.string(),text:o.union([o.string(),o.record(o.string(),o.string())]),icon:o.string().optional()})).optional(),codeTheme:o.union([o.string(),o.object({light:o.string(),dark:o.string()})]).optional(),codeHighlighting:o.union([o.string(),o.object({engine:o.union([o.string(),o.unknown(),o.function()]).optional(),theme:o.union([o.string(),o.object({light:o.string(),dark:o.string()})]).optional(),options:o.record(o.string(),o.unknown()).optional()})]).optional()}),p=o.union([o.string(),o.object({rules:o.array(o.object({userAgent:o.string(),allow:o.union([o.string(),o.array(o.string())]).optional(),disallow:o.union([o.string(),o.array(o.string())]).optional()})).optional(),sitemaps:o.array(o.string().url()).optional()})]),m=o.object({defaultLocale:o.string(),locales:o.union([o.record(o.string(),o.string()),o.array(o.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.record(o.string(),o.object({label:o.string().optional(),direction:o.enum([`ltr`,`rtl`]).optional(),htmlLang:o.string().optional(),calendar:o.string().optional()})).optional()}),h=o.object({defaultVersion:o.string(),prefix:o.string().optional(),versions:o.array(o.object({label:o.string(),path:o.string()}))}),g=o.object({headers:o.record(o.string(),o.string()).optional(),enableCSP:o.boolean().optional(),customHeaders:o.record(o.string(),o.string()).optional()}),_=o.object({google:o.string().optional(),bing:o.string().optional(),yandex:o.string().optional(),pinterest:o.string().optional(),facebook:o.string().optional()}),v=o.lazy(()=>o.union([o.string(),o.number(),o.boolean(),o.null(),o.array(v),o.record(o.string(),v)])),y=o.union([o.record(o.string(),v),o.array(o.record(o.string(),v))]),b=o.object({metatags:o.record(o.string(),o.string()).optional(),indexing:o.enum([`all`,`public`]).optional(),thumbnails:o.object({background:o.string().optional()}).optional(),verification:_.optional(),structuredData:y.optional()}),x=o.object({viewTransitions:o.union([o.boolean(),o.object({enabled:o.boolean().optional(),types:o.array(o.string()).optional()})]).optional(),fileRouting:o.boolean().optional()}),S=o.object({measurementId:o.string().min(1,`Measurement ID is required for GA4`),debug:o.boolean().optional(),anonymizeIp:o.boolean().optional(),sendPageView:o.boolean().optional(),cookieFlags:o.string().optional(),autoTrack:o.object({pageViews:o.boolean().optional(),downloads:o.boolean().optional(),externalLinks:o.boolean().optional(),search:o.boolean().optional()}).optional()}),C=o.object({tagId:o.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.string().optional(),preview:o.string().optional()}),w=o.object({appId:o.string().min(1,`Algolia App ID is required`),apiKey:o.string().min(1,`Algolia API Key is required`),indexName:o.string().min(1,`Algolia Index Name is required`)}),T=o.object({repo:o.string().min(1,`Giscus repository is required`),repoId:o.string().min(1,`Giscus repository ID is required`),category:o.string().optional(),categoryId:o.string().optional(),mapping:o.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),reactionsEnabled:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),emitMetadata:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),inputPosition:o.enum([`top`,`bottom`]).optional(),theme:o.string().optional(),darkTheme:o.string().optional(),lang:o.string().optional(),loading:o.enum([`lazy`,`eager`]).optional()}),E=o.object({enabled:o.boolean(),owner:o.string().min(1,`GitHub owner is required`),repo:o.string().min(1,`GitHub repository name is required`),categorySlug:o.string().optional(),endpoint:o.string().optional()}),D=o.object({analytics:o.boolean().optional(),speedInsights:o.boolean().optional()}),O=o.object({apiKey:o.string().min(1,`API key is required for PostHog`),host:o.string().url().optional(),capturePageview:o.boolean().optional(),capturePageleave:o.boolean().optional(),sessionRecording:o.boolean().optional(),autocapture:o.boolean().optional()}),k=o.object({ga4:S.optional(),gtm:C.optional(),vercel:D.optional(),posthog:O.optional()}),A=o.object({algolia:w.optional()}),j=o.object({giscus:T.optional(),custom:E.optional()}),M=o.object({analytics:k.optional(),search:A.optional(),feedback:j.optional()}),N=o.object({criticalCss:o.enum([`zig-critters`,`beasties`,`none`]).optional(),criticalCssMaxSize:o.number().int().min(0).optional()}),P=o.object({labels:o.record(o.string(),o.union([o.string(),o.record(o.string(),o.string())])).optional(),positions:o.record(o.string(),o.number()).optional(),postsPerPage:o.number().int().positive().optional(),defaultCollection:o.string().optional(),dateFormat:o.string().optional(),sortBy:o.enum([`date`,`title`,`sidebarPosition`]).optional()}),F=o.object({visible:o.boolean().optional(),environments:o.array(o.string()).optional()}),I=o.object({turbo:o.boolean().optional(),siteUrl:o.string().url().optional(),docsDir:o.string().optional(),base:o.string().optional(),theme:f.optional(),i18n:m.optional(),versions:h.optional(),mdx:u.optional(),ssg:N.optional(),plugins:o.array(d).optional(),collections:P.optional(),robots:p.optional(),security:g.optional(),seo:b.optional(),integrations:M.optional(),drafts:F.optional(),experimental:x.optional(),aliases:o.custom().optional(),featureFlags:o.record(o.string(),o.union([o.boolean(),o.string()])).optional(),vite:o.custom().optional()});var L=e({resolveConfig:()=>G});const R=new Map;function z(e,t,n,r){return`${e}::${t}::${n}::${r}`}function B(e){return r.join(e,`.boltdocs`,`cache`,`config.json`)}function V(e,t,n,r,i){return a.createHash(`sha256`).update(`${e}:${t}:${n}:${r}:${i}`).digest(`hex`)}function H(e,t,n){let a=B(e);if(!i.existsSync(a))return null;try{let o=i.readFileSync(a,`utf-8`),s=JSON.parse(o),c=r.resolve(e,s.filename);if(!i.existsSync(c))return null;let l=i.statSync(c);if(V(s.filename,l.mtimeMs,l.size,t,n)!==V(s.filename,s.mtimeMs,s.size,s.command,s.mode))return null;let u=I.safeParse(s.config);return u.success?{config:u.data,configFile:c}:null}catch{return null}}function U(e,t,n,a,o,s,c){try{let l=B(e);i.mkdirSync(r.dirname(l),{recursive:!0});let u={filename:t,mtimeMs:n,size:a,command:o,mode:s,config:{...c,plugins:[]}};i.writeFileSync(l,JSON.stringify(u),`utf-8`)}catch(e){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] Failed to write config cache:`,e)}}async function W(e,t){let{createJiti:n}=await import(`jiti`),r=await n(t,{interopDefault:!0}).import(e);return r.default??r.config??r}async function G(e,a=process.cwd(),o=`serve`,c=`development`){let l=a,u=z(e,l,o,c);{let e=R.get(u);if(e)return e}let d=H(l,o,c);if(d){try{let e=await W(d.configFile,l);e?.plugins&&(d.config.plugins=e.plugins)}catch{}return R.set(u,d.config),d.config}let f={docsDir:r.resolve(l,e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},p={},m=null;for(let e of n){let t=r.resolve(l,e);if(i.existsSync(t))try{let n;try{n=await W(t,l)}catch(r){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] jiti config load failed for ${e}, falling back to Vite: ${r instanceof Error?r.message:String(r)}`);let{loadConfigFromFile:i}=await import(`vite`);n=(await i({command:o,mode:c},t,l))?.config}if(n){p=n;let r=i.statSync(t);m={filename:e,mtimeMs:r.mtimeMs,size:r.size};break}}catch(t){t instanceof Error&&(console.error(`\x1b[31m[boltdocs] ✖ Failed to load config from ${e}: ${t.message}\x1b[0m`),s(`Failed to load config from ${e}: ${t.message}`))}}let h={title:p.title,description:p.description,logo:p.logo,favicon:p.favicon,navbar:p.navbar,sidebar:p.sidebar,sidebarGroups:p.theme?.sidebarGroups,socialLinks:p.socialLinks,githubRepo:p.githubRepo,tabs:p.tabs,codeTheme:p.codeTheme,codeHighlighting:p.theme?.codeHighlighting,communityHelp:p.communityHelp,version:p.version,editLink:p.editLink,...p.theme||{}},g=Object.fromEntries(Object.entries(h).filter(([e,t])=>t!==void 0));g.navbar&&=g.navbar.map(e=>({label:e.label||``,href:e.href||``,items:e.items}));let _={docsDir:r.resolve(l,p.docsDir||e),theme:{...f.theme,...g},i18n:p.i18n?{...p.i18n,locales:Array.isArray(p.i18n.locales)?Object.fromEntries(p.i18n.locales.map(e=>[e,e])):p.i18n.locales}:void 0,versions:p.versions,siteUrl:p.siteUrl,base:p.base,ssg:p.ssg,seo:p.seo,plugins:p.plugins||[],robots:p.robots,security:p.security,integrations:p.integrations,experimental:p.experimental,featureFlags:p.featureFlags,aliases:p.aliases,drafts:p.drafts,collections:p.collections,vite:p.vite},v=I.safeParse(_);if(!v.success)throw new t(`Invalid Boltdocs configuration:\n${v.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
- `)}`);let y=v.data;return m&&U(l,m.filename,m.mtimeMs,m.size,o,c,y),R.set(u,y),y}export{c as i,G as n,d as r,L as t};
6
+ import{t as e}from"./chunk-BFSpntXv.mjs";import{r as t}from"./errors-N-b6Sn2G.mjs";import{t as n}from"./config-files-DfwZ3Wot.mjs";import r from"node:path";import i from"node:fs";import a from"node:crypto";import{z as o}from"zod";import{warn as s}from"@bdocs/dui";function c(e){return e}const l=o.object({icon:o.string().max(50),link:o.string().url()}),u=o.object({processor:o.enum([`satteri`]).default(`satteri`)}),d=o.object({name:o.string(),enforce:o.enum([`pre`,`post`]).optional(),version:o.string().optional(),boltdocsVersion:o.string().optional(),clientEntry:o.string().optional(),remarkPlugins:o.array(o.unknown()).optional(),rehypePlugins:o.array(o.unknown()).optional(),vitePlugins:o.array(o.unknown()).optional(),components:o.record(o.string(),o.string()).optional(),client:o.object({slots:o.record(o.string(),o.string()).optional(),providers:o.array(o.string()).optional(),mdxComponents:o.record(o.string(),o.string()).optional(),head:o.array(o.object({tag:o.enum([`script`,`link`,`meta`,`style`]),attrs:o.record(o.string(),o.union([o.string(),o.boolean()])).optional(),content:o.string().optional()})).optional()}).optional(),codeHighlighter:o.unknown().optional(),metadata:o.record(o.string(),o.unknown()).optional(),css:o.object({cssFiles:o.array(o.string()).optional(),headStyles:o.array(o.string()).optional(),postcssPlugins:o.array(o.unknown()).optional(),preprocessorOptions:o.record(o.string(),o.unknown()).optional()}).optional(),middleware:o.array(o.object({name:o.string().optional(),enforce:o.enum([`pre`,`post`]).optional()}).passthrough()).optional(),hooks:o.record(o.string(),o.unknown()).optional()}),f=o.object({title:o.union([o.string(),o.record(o.string(),o.string())]).optional(),description:o.union([o.string(),o.record(o.string(),o.string())]).optional(),logo:o.union([o.string(),o.object({dark:o.string(),light:o.string(),alt:o.string().optional(),width:o.number().optional(),height:o.number().optional()})]).optional(),navbar:o.array(o.object({label:o.union([o.string(),o.record(o.string(),o.string())]),href:o.string(),items:o.array(o.object({label:o.union([o.string(),o.record(o.string(),o.string())]),href:o.string()})).optional()})).optional(),sidebar:o.record(o.string(),o.array(o.object({text:o.string(),link:o.string()}))).optional(),sidebarGroups:o.record(o.string(),o.object({title:o.union([o.string(),o.record(o.string(),o.string())]).optional(),icon:o.string().optional()})).optional(),socialLinks:o.array(l).optional(),editLink:o.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.string().url().optional(),version:o.string().max(50).optional(),githubRepo:o.string().max(100).optional(),favicon:o.string().optional(),tabs:o.array(o.object({id:o.string(),text:o.union([o.string(),o.record(o.string(),o.string())]),icon:o.string().optional()})).optional(),codeTheme:o.union([o.string(),o.object({light:o.string(),dark:o.string()})]).optional(),codeHighlighting:o.union([o.string(),o.object({engine:o.union([o.string(),o.unknown(),o.function()]).optional(),theme:o.union([o.string(),o.object({light:o.string(),dark:o.string()})]).optional(),options:o.record(o.string(),o.unknown()).optional()})]).optional()}),p=o.union([o.string(),o.object({rules:o.array(o.object({userAgent:o.string(),allow:o.union([o.string(),o.array(o.string())]).optional(),disallow:o.union([o.string(),o.array(o.string())]).optional()})).optional(),sitemaps:o.array(o.string().url()).optional()})]),m=o.object({defaultLocale:o.string(),locales:o.union([o.record(o.string(),o.string()),o.array(o.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.record(o.string(),o.object({label:o.string().optional(),direction:o.enum([`ltr`,`rtl`]).optional(),htmlLang:o.string().optional(),calendar:o.string().optional()})).optional()}),h=o.object({defaultVersion:o.string(),prefix:o.string().optional(),versions:o.array(o.object({label:o.string(),path:o.string()}))}),g=o.object({headers:o.record(o.string(),o.string()).optional(),enableCSP:o.boolean().optional(),customHeaders:o.record(o.string(),o.string()).optional()}),_=o.object({google:o.string().optional(),bing:o.string().optional(),yandex:o.string().optional(),pinterest:o.string().optional(),facebook:o.string().optional()}),v=o.lazy(()=>o.union([o.string(),o.number(),o.boolean(),o.null(),o.array(v),o.record(o.string(),v)])),y=o.union([o.record(o.string(),v),o.array(o.record(o.string(),v))]),b=o.object({metatags:o.record(o.string(),o.string()).optional(),indexing:o.enum([`all`,`public`]).optional(),thumbnails:o.object({background:o.string().optional()}).optional(),verification:_.optional(),structuredData:y.optional()}),x=o.object({viewTransitions:o.union([o.boolean(),o.object({enabled:o.boolean().optional(),types:o.array(o.string()).optional()})]).optional(),fileRouting:o.boolean().optional()}),S=o.object({measurementId:o.string().min(1,`Measurement ID is required for GA4`),debug:o.boolean().optional(),anonymizeIp:o.boolean().optional(),sendPageView:o.boolean().optional(),cookieFlags:o.string().optional(),autoTrack:o.object({pageViews:o.boolean().optional(),downloads:o.boolean().optional(),externalLinks:o.boolean().optional(),search:o.boolean().optional()}).optional()}),C=o.object({tagId:o.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.string().optional(),preview:o.string().optional()}),w=o.object({appId:o.string().min(1,`Algolia App ID is required`),apiKey:o.string().min(1,`Algolia API Key is required`),indexName:o.string().min(1,`Algolia Index Name is required`)}),T=o.object({repo:o.string().min(1,`Giscus repository is required`),repoId:o.string().min(1,`Giscus repository ID is required`),category:o.string().optional(),categoryId:o.string().optional(),mapping:o.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),reactionsEnabled:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),emitMetadata:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),inputPosition:o.enum([`top`,`bottom`]).optional(),theme:o.string().optional(),darkTheme:o.string().optional(),lang:o.string().optional(),loading:o.enum([`lazy`,`eager`]).optional()}),E=o.object({enabled:o.boolean(),owner:o.string().min(1,`GitHub owner is required`),repo:o.string().min(1,`GitHub repository name is required`),categorySlug:o.string().optional(),endpoint:o.string().optional()}),D=o.object({analytics:o.boolean().optional(),speedInsights:o.boolean().optional()}),O=o.object({apiKey:o.string().min(1,`API key is required for PostHog`),host:o.string().url().optional(),capturePageview:o.boolean().optional(),capturePageleave:o.boolean().optional(),sessionRecording:o.boolean().optional(),autocapture:o.boolean().optional()}),k=o.object({ga4:S.optional(),gtm:C.optional(),vercel:D.optional(),posthog:O.optional()}),A=o.object({algolia:w.optional()}),j=o.object({giscus:T.optional(),custom:E.optional()}),M=o.object({analytics:k.optional(),search:A.optional(),feedback:j.optional()}),N=o.object({criticalCss:o.enum([`zig-critters`,`beasties`,`none`]).optional(),criticalCssMaxSize:o.number().int().min(0).optional()}),P=o.object({labels:o.record(o.string(),o.union([o.string(),o.record(o.string(),o.string())])).optional(),positions:o.record(o.string(),o.number()).optional(),postsPerPage:o.number().int().positive().optional(),defaultCollection:o.string().optional(),dateFormat:o.string().optional(),sortBy:o.enum([`date`,`title`,`sidebarPosition`]).optional()}),F=o.object({visible:o.boolean().optional(),environments:o.array(o.string()).optional()}),I=o.object({from:o.string().min(1,`Redirect "from" cannot be empty`).refine(e=>!/^[a-z][a-z0-9+.-]*:\/\//i.test(e),{message:`Redirect "from" must be a path, not an external URL`}).refine(e=>!e.includes(`#`),{message:`Redirect "from" cannot contain a hash fragment`}),to:o.string().min(1,`Redirect "to" cannot be empty`),status:o.union([o.literal(301),o.literal(302),o.literal(307),o.literal(308)]).optional(),locale:o.boolean().optional()}),L=o.object({turbo:o.boolean().optional(),siteUrl:o.string().url().optional(),docsDir:o.string().optional(),base:o.string().optional(),theme:f.optional(),i18n:m.optional(),versions:h.optional(),mdx:u.optional(),ssg:N.optional(),plugins:o.array(d).optional(),collections:P.optional(),robots:p.optional(),redirects:o.array(I).optional(),security:g.optional(),seo:b.optional(),integrations:M.optional(),drafts:F.optional(),experimental:x.optional(),aliases:o.custom().optional(),featureFlags:o.record(o.string(),o.union([o.boolean(),o.string()])).optional(),vite:o.custom().optional()});var R=e({resolveConfig:()=>K});const z=new Map;function B(e,t,n,r){return`${e}::${t}::${n}::${r}`}function V(e){return r.join(e,`.boltdocs`,`cache`,`config.json`)}function H(e,t,n,r,i){return a.createHash(`sha256`).update(`${e}:${t}:${n}:${r}:${i}`).digest(`hex`)}function U(e,t,n){let a=V(e);if(!i.existsSync(a))return null;try{let o=i.readFileSync(a,`utf-8`),s=JSON.parse(o),c=r.resolve(e,s.filename);if(!i.existsSync(c))return null;let l=i.statSync(c);if(H(s.filename,l.mtimeMs,l.size,t,n)!==H(s.filename,s.mtimeMs,s.size,s.command,s.mode))return null;let u=L.safeParse(s.config);return u.success?{config:u.data,configFile:c}:null}catch{return null}}function W(e,t,n,a,o,s,c){try{let l=V(e);i.mkdirSync(r.dirname(l),{recursive:!0});let u={filename:t,mtimeMs:n,size:a,command:o,mode:s,config:{...c,plugins:[]}};i.writeFileSync(l,JSON.stringify(u),`utf-8`)}catch(e){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] Failed to write config cache:`,e)}}async function G(e,t){let{createJiti:n}=await import(`jiti`),r=await n(t,{interopDefault:!0}).import(e);return r.default??r.config??r}async function K(e,a=process.cwd(),o=`serve`,c=`development`){let l=a,u=B(e,l,o,c);{let e=z.get(u);if(e)return e}let d=U(l,o,c);if(d){try{let e=await G(d.configFile,l);e?.plugins&&(d.config.plugins=e.plugins)}catch{}return z.set(u,d.config),d.config}let f={docsDir:r.resolve(l,e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},p={},m=null;for(let e of n){let t=r.resolve(l,e);if(i.existsSync(t))try{let n;try{n=await G(t,l)}catch(r){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] jiti config load failed for ${e}, falling back to Vite: ${r instanceof Error?r.message:String(r)}`);let{loadConfigFromFile:i}=await import(`vite`);n=(await i({command:o,mode:c},t,l))?.config}if(n){p=n;let r=i.statSync(t);m={filename:e,mtimeMs:r.mtimeMs,size:r.size};break}}catch(t){t instanceof Error&&(console.error(`\x1b[31m[boltdocs] ✖ Failed to load config from ${e}: ${t.message}\x1b[0m`),s(`Failed to load config from ${e}: ${t.message}`))}}let h={title:p.title,description:p.description,logo:p.logo,favicon:p.favicon,navbar:p.navbar,sidebar:p.sidebar,sidebarGroups:p.theme?.sidebarGroups,socialLinks:p.socialLinks,githubRepo:p.githubRepo,tabs:p.tabs,codeTheme:p.codeTheme,codeHighlighting:p.theme?.codeHighlighting,communityHelp:p.communityHelp,version:p.version,editLink:p.editLink,...p.theme||{}},g=Object.fromEntries(Object.entries(h).filter(([e,t])=>t!==void 0));g.navbar&&=g.navbar.map(e=>({label:e.label||``,href:e.href||``,items:e.items}));let _={docsDir:r.resolve(l,p.docsDir||e),theme:{...f.theme,...g},i18n:p.i18n?{...p.i18n,locales:Array.isArray(p.i18n.locales)?Object.fromEntries(p.i18n.locales.map(e=>[e,e])):p.i18n.locales}:void 0,versions:p.versions,siteUrl:p.siteUrl,base:p.base,ssg:p.ssg,seo:p.seo,plugins:p.plugins||[],robots:p.robots,security:p.security,integrations:p.integrations,experimental:p.experimental,featureFlags:p.featureFlags,aliases:p.aliases,drafts:p.drafts,collections:p.collections,vite:p.vite},v=L.safeParse(_);if(!v.success)throw new t(`Invalid Boltdocs configuration:\n${v.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
+ `)}`);let y=v.data;return m&&W(l,m.filename,m.mtimeMs,m.size,o,c,y),z.set(u,y),y}export{c as i,K as n,d as r,R as t};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import{f as e,n as t}from"./node-Da3tYBHo.mjs";import{t as n}from"./routes-_I_8PQYF.mjs";import{o as r,t as i}from"./update-check-BXx8te9F.mjs";import{t as a}from"./ssg-static-options-Br1_u9qp.mjs";import o from"node:path";import s from"node:fs";import{randomUUID as c}from"node:crypto";import{error as l}from"@bdocs/dui";import{createServer as u}from"@bdocs/ssg/node";function d(e,t,n=e=>process.exit(e)){let r=!1;return{async shutdown(i){if(!r){r=!0;try{await e()}finally{t(),i!==void 0&&n(i)}}},isShuttingDown(){return r}}}function f(e){try{let t=Number.parseInt(s.readFileSync(e,`utf8`).trim(),10);return Number.isInteger(t)&&t>0?t:null}catch{return null}}function p(e){try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function m(e){let t=o.join(e,`.boltdocs`,`dev-server.lock`);for(s.mkdirSync(o.dirname(t),{recursive:!0});;)try{let e=s.openSync(t,`wx`);s.writeFileSync(e,`${process.pid}\n`),s.closeSync(e);let n=!1;return{release(){if(!n){n=!0;try{f(t)===process.pid&&s.unlinkSync(t)}catch{}}}}}catch(e){if(e.code!==`EEXIST`)throw e;let n=f(t);if(n&&p(n))throw Error(`A Boltdocs dev server is already running for this project (pid ${n})`);let r=`${t}.stale-${process.pid}-${c()}`;try{s.renameSync(t,r),s.unlinkSync(r)}catch(e){try{s.existsSync(r)&&s.unlinkSync(r)}catch{}if(e.code===`ENOENT`)continue;throw Error(`Could not recover stale Boltdocs dev lock: ${t}`)}}}let h=!1;async function g(s=process.cwd(),c={}){if(h)return;h=!0;let f=null,p=null,g=()=>{};i();let _,v=process.env.BOLTDOCS_DEBUG===`true`,y=performance.now();try{f=m(s),v&&console.log(`[boltdocs-dev] acquireLock: ${Math.round(performance.now()-y)}ms`);let i=performance.now(),b=performance.now(),x=await t(s,`development`,void 0,{skipTypes:!0,skipLinkTree:!0,skipRoutes:!0});_=x.__boltdocsConfig,v&&console.log(`[boltdocs-dev] createViteConfig: ${Math.round(performance.now()-b)}ms`),x.logLevel=`warn`,x.clearScreen=!1,c.port!==void 0&&(x.server=x.server||{},x.server.port=Number(c.port)),c.host!==void 0&&(x.server=x.server||{},x.server.host=c.host),c.force&&(x.optimizeDeps=x.optimizeDeps||{},x.optimizeDeps.force=!0);let S=performance.now();p=await u(x,{skipResolveConfig:!0,...a(_)}),v&&console.log(`[boltdocs-dev] createServer: ${Math.round(performance.now()-S)}ms`),g=()=>{process.off(`SIGINT`,w),process.off(`SIGTERM`,T)};let C=d(()=>p.close(),()=>{h=!1,f?.release(),g()}),w=()=>{C.shutdown(0)},T=()=>{C.shutdown(143)};process.once(`SIGINT`,w),process.once(`SIGTERM`,T);let E=performance.now();try{await p.listen()}catch(e){throw g(),e}v&&console.log(`[boltdocs-dev] server.listen: ${Math.round(performance.now()-E)}ms`),p.httpServer?.once(`close`,()=>{g(),h=!1,f?.release()}),e(_,s),n(_?.docsDir||o.resolve(s,`docs`),_).catch(e=>{l(`Background route generation failed:`,e)});let D=performance.now()-i;v&&console.log(`[boltdocs-dev] total startup: ${Math.round(D)}ms`);let O=p.resolvedUrls;console.log(r(O?.local?.[0]??`http://localhost:${c.port??5173}`,O?.network?.[0]??null,{readyIn:D})),p.bindCLIShortcuts({print:!1})}catch(e){if(g(),p)try{await p.close()}catch{}h=!1,f?.release(),l(`Failed to start dev server:`,e),process.exit(1)}}export{g as devAction};
@@ -0,0 +1,6 @@
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-D1Md3oWO.cjs`),t=require(`./node-BgiLCa0I.cjs`),n=require(`./routes-DdE6Lfcl.cjs`),r=require(`./update-check-CiIeC7CX.cjs`),i=require(`./ssg-static-options-CVvGKM8i.cjs`);let a=require(`node:path`);a=e.r(a);let o=require(`node:fs`);o=e.r(o);let s=require(`node:crypto`),c=require(`@bdocs/dui`),l=require(`@bdocs/ssg/node`);function u(e,t,n=e=>process.exit(e)){let r=!1;return{async shutdown(i){if(!r){r=!0;try{await e()}finally{t(),i!==void 0&&n(i)}}},isShuttingDown(){return r}}}function d(e){try{let t=Number.parseInt(o.default.readFileSync(e,`utf8`).trim(),10);return Number.isInteger(t)&&t>0?t:null}catch{return null}}function f(e){try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function p(e){let t=a.default.join(e,`.boltdocs`,`dev-server.lock`);for(o.default.mkdirSync(a.default.dirname(t),{recursive:!0});;)try{let e=o.default.openSync(t,`wx`);o.default.writeFileSync(e,`${process.pid}\n`),o.default.closeSync(e);let n=!1;return{release(){if(!n){n=!0;try{d(t)===process.pid&&o.default.unlinkSync(t)}catch{}}}}}catch(e){if(e.code!==`EEXIST`)throw e;let n=d(t);if(n&&f(n))throw Error(`A Boltdocs dev server is already running for this project (pid ${n})`);let r=`${t}.stale-${process.pid}-${(0,s.randomUUID)()}`;try{o.default.renameSync(t,r),o.default.unlinkSync(r)}catch(e){try{o.default.existsSync(r)&&o.default.unlinkSync(r)}catch{}if(e.code===`ENOENT`)continue;throw Error(`Could not recover stale Boltdocs dev lock: ${t}`)}}}let m=!1;async function h(e=process.cwd(),o={}){if(m)return;m=!0;let s=null,d=null,f=()=>{};r.t();let h,g=process.env.BOLTDOCS_DEBUG===`true`,_=performance.now();try{s=p(e),g&&console.log(`[boltdocs-dev] acquireLock: ${Math.round(performance.now()-_)}ms`);let v=performance.now(),y=performance.now(),b=await t.n(e,`development`,void 0,{skipTypes:!0,skipLinkTree:!0,skipRoutes:!0});h=b.__boltdocsConfig,g&&console.log(`[boltdocs-dev] createViteConfig: ${Math.round(performance.now()-y)}ms`),b.logLevel=`warn`,b.clearScreen=!1,o.port!==void 0&&(b.server=b.server||{},b.server.port=Number(o.port)),o.host!==void 0&&(b.server=b.server||{},b.server.host=o.host),o.force&&(b.optimizeDeps=b.optimizeDeps||{},b.optimizeDeps.force=!0);let x=performance.now();d=await(0,l.createServer)(b,{skipResolveConfig:!0,...i.t(h)}),g&&console.log(`[boltdocs-dev] createServer: ${Math.round(performance.now()-x)}ms`),f=()=>{process.off(`SIGINT`,C),process.off(`SIGTERM`,w)};let S=u(()=>d.close(),()=>{m=!1,s?.release(),f()}),C=()=>{S.shutdown(0)},w=()=>{S.shutdown(143)};process.once(`SIGINT`,C),process.once(`SIGTERM`,w);let T=performance.now();try{await d.listen()}catch(e){throw f(),e}g&&console.log(`[boltdocs-dev] server.listen: ${Math.round(performance.now()-T)}ms`),d.httpServer?.once(`close`,()=>{f(),m=!1,s?.release()}),t.d(h,e),n.t(h?.docsDir||a.default.resolve(e,`docs`),h).catch(e=>{(0,c.error)(`Background route generation failed:`,e)});let E=performance.now()-v;g&&console.log(`[boltdocs-dev] total startup: ${Math.round(E)}ms`);let D=d.resolvedUrls;console.log(r.o(D?.local?.[0]??`http://localhost:${o.port??5173}`,D?.network?.[0]??null,{readyIn:E})),d.bindCLIShortcuts({print:!1})}catch(e){if(f(),d)try{await d.close()}catch{}m=!1,s?.release(),(0,c.error)(`Failed to start dev server:`,e),process.exit(1)}}exports.devAction=h;
@@ -3,13 +3,12 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import { G as useConfig, K as useOptionalConfig, U as icons_exports, d as normalizePath, f as resolvePublicAssetUrl, g as Check, o as cn, s as useLocalizedTo, t as Link, u as useRoutesContext, y as ChevronRight } from "./link-q1qHNGK_.js";
7
- import { E as useLocation, L as defaultNavigate, O as useNavigate, m as parseUrlReference } from "./router-CZBxMRAH.js";
8
- import { r as useSearchHighlight } from "./search-dialog-mYnqU4v7.js";
6
+ import { V as icons_exports, _ as ChevronRight, a as useLocalizedTo, c as useRoutesContext, i as cn, l as normalizePath, m as Check, t as Link, u as resolvePublicAssetUrl } from "./link-CSe_oD8Y.js";
7
+ import { E as useLocation, H as useOptionalConfig, L as defaultNavigate, O as useNavigate, V as useConfig, m as parseUrlReference } from "./router-B5e8k4qK.js";
8
+ import { r as useSearchHighlight } from "./search-dialog-BXil4_7P.js";
9
9
  import { Children, Fragment, createContext, use, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
10
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
- import * as RAC from "react-aria-components";
12
- import { Breadcrumb, Breadcrumbs, Popover } from "react-aria-components";
11
+ import { Breadcrumb, Breadcrumbs, Collection, Dialog, Header, Menu, MenuItem, MenuSection, MenuTrigger, Modal, ModalOverlay, Popover, Separator, SubmenuTrigger, composeRenderProps } from "react-aria-components";
13
12
  import DOMPurify from "isomorphic-dompurify";
14
13
  import virtualIcons from "virtual:boltdocs-icons";
15
14
  import scrollIntoView from "scroll-into-view-if-needed";
@@ -156,9 +155,9 @@ function Popover$1({ children, className, ...props }) {
156
155
 
157
156
  //#endregion
158
157
  //#region src/client/components/primitives/menu.tsx
159
- function MenuTrigger({ placement, className, ...props }) {
158
+ function MenuTrigger$1({ placement, className, ...props }) {
160
159
  const [trigger, menu] = Children.toArray(props.children).slice(0, 2);
161
- return /* @__PURE__ */ jsxs(RAC.MenuTrigger, {
160
+ return /* @__PURE__ */ jsxs(MenuTrigger, {
162
161
  ...props,
163
162
  children: [trigger, /* @__PURE__ */ jsx(Popover$1, {
164
163
  placement,
@@ -167,9 +166,9 @@ function MenuTrigger({ placement, className, ...props }) {
167
166
  })]
168
167
  });
169
168
  }
170
- function SubmenuTrigger({ className, ...props }) {
169
+ function SubmenuTrigger$1({ className, ...props }) {
171
170
  const [trigger, menu] = Children.toArray(props.children).slice(0, 2);
172
- return /* @__PURE__ */ jsxs(RAC.SubmenuTrigger, {
171
+ return /* @__PURE__ */ jsxs(SubmenuTrigger, {
173
172
  ...props,
174
173
  children: [trigger, /* @__PURE__ */ jsx(Popover$1, {
175
174
  offset: -4,
@@ -182,23 +181,23 @@ function SubmenuTrigger({ className, ...props }) {
182
181
  /**
183
182
  * The Menu container.
184
183
  */
185
- function Menu(props) {
186
- return /* @__PURE__ */ jsx(RAC.Menu, {
184
+ function Menu$1(props) {
185
+ return /* @__PURE__ */ jsx(Menu, {
187
186
  ...props,
188
- className: RAC.composeRenderProps(props.className, (className) => cn("outline-none overflow-auto", className))
187
+ className: composeRenderProps(props.className, (className) => cn("outline-none overflow-auto", className))
189
188
  });
190
189
  }
191
190
  /**
192
191
  * MenuItem with support for selection states and submenus.
193
192
  */
194
- function MenuItem(props) {
193
+ function MenuItem$1(props) {
195
194
  const textValue = props.textValue || (typeof props.children === "string" ? props.children : void 0);
196
195
  const { contentClassName, checkClassName, chevronClassName, check, chevron, ...racProps } = props;
197
- return /* @__PURE__ */ jsx(RAC.MenuItem, {
196
+ return /* @__PURE__ */ jsx(MenuItem, {
198
197
  ...racProps,
199
198
  textValue,
200
- className: RAC.composeRenderProps(props.className, (className) => cn("group relative flex flex-row items-center cursor-default outline-none", className)),
201
- children: RAC.composeRenderProps(props.children, (children, { selectionMode, isSelected, hasSubmenu }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
199
+ className: composeRenderProps(props.className, (className) => cn("group relative flex flex-row items-center cursor-default outline-none", className)),
200
+ children: composeRenderProps(props.children, (children, { selectionMode, isSelected, hasSubmenu }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
202
201
  selectionMode === "multiple" && /* @__PURE__ */ jsx("span", {
203
202
  className: cn("flex items-center shrink-0 justify-center", checkClassName),
204
203
  children: check ?? (isSelected ? /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) : null)
@@ -214,14 +213,14 @@ function MenuItem(props) {
214
213
  ] }))
215
214
  });
216
215
  }
217
- function MenuSection({ title, headerClassName, ...props }) {
218
- return /* @__PURE__ */ jsxs(RAC.MenuSection, {
216
+ function MenuSection$1({ title, headerClassName, ...props }) {
217
+ return /* @__PURE__ */ jsxs(MenuSection, {
219
218
  ...props,
220
219
  className: cn("flex flex-col", props.className),
221
- children: [title && /* @__PURE__ */ jsx(RAC.Header, {
220
+ children: [title && /* @__PURE__ */ jsx(Header, {
222
221
  className: cn("select-none", headerClassName),
223
222
  children: title
224
- }), /* @__PURE__ */ jsx(RAC.Collection, {
223
+ }), /* @__PURE__ */ jsx(Collection, {
225
224
  items: props.items,
226
225
  children: props.children
227
226
  })]
@@ -231,17 +230,17 @@ function MenuSection({ title, headerClassName, ...props }) {
231
230
  * MenuSeparator for visual division.
232
231
  */
233
232
  function MenuSeparator(props) {
234
- return /* @__PURE__ */ jsx(RAC.Separator, {
233
+ return /* @__PURE__ */ jsx(Separator, {
235
234
  ...props,
236
235
  className: cn("border-t", props.className)
237
236
  });
238
237
  }
239
- Menu.Root = Menu;
240
- Menu.Item = MenuItem;
241
- Menu.Trigger = MenuTrigger;
242
- Menu.SubTrigger = SubmenuTrigger;
243
- Menu.Section = MenuSection;
244
- Menu.Separator = MenuSeparator;
238
+ Menu$1.Root = Menu$1;
239
+ Menu$1.Item = MenuItem$1;
240
+ Menu$1.Trigger = MenuTrigger$1;
241
+ Menu$1.SubTrigger = SubmenuTrigger$1;
242
+ Menu$1.Section = MenuSection$1;
243
+ Menu$1.Separator = MenuSeparator;
245
244
 
246
245
  //#endregion
247
246
  //#region src/client/components/primitives/tabs.tsx
@@ -1000,14 +999,14 @@ function SidebarRoot({ children, className }) {
1000
999
  */
1001
1000
  function SidebarMobile({ children, className, overlayClassName, dialogClassName }) {
1002
1001
  const { isSidebarOpen, closeSidebar } = useUI();
1003
- return /* @__PURE__ */ jsx(RAC.ModalOverlay, {
1002
+ return /* @__PURE__ */ jsx(ModalOverlay, {
1004
1003
  isOpen: isSidebarOpen,
1005
1004
  onOpenChange: (open) => !open && closeSidebar(),
1006
1005
  isDismissable: true,
1007
1006
  className: cn("lg:hidden", overlayClassName),
1008
- children: /* @__PURE__ */ jsx(RAC.Modal, {
1007
+ children: /* @__PURE__ */ jsx(Modal, {
1009
1008
  className: cn("lg:hidden", className),
1010
- children: /* @__PURE__ */ jsx(RAC.Dialog, {
1009
+ children: /* @__PURE__ */ jsx(Dialog, {
1011
1010
  className: cn("h-full flex flex-col outline-none focus:outline-none", dialogClassName),
1012
1011
  children
1013
1012
  })
@@ -1105,6 +1104,7 @@ function SidebarLink({ label, href, active, icon: Icon, badge, className, iconCl
1105
1104
  return /* @__PURE__ */ jsxs(Link, {
1106
1105
  ref: linkRef,
1107
1106
  href,
1107
+ prefetch: "viewport",
1108
1108
  "data-active": active || void 0,
1109
1109
  "data-depth": depth !== void 0 ? depth : void 0,
1110
1110
  "aria-current": active ? "page" : void 0,
@@ -1338,7 +1338,7 @@ function ContentMdx({ children, className, style, contentClassName, contentStyle
1338
1338
  })]
1339
1339
  });
1340
1340
  }
1341
- function Header({ children, className, style }) {
1341
+ function Header$1({ children, className, style }) {
1342
1342
  return /* @__PURE__ */ jsx("header", {
1343
1343
  className: cn("mb-10", className),
1344
1344
  style,
@@ -1349,8 +1349,8 @@ const DocsLayout = Object.assign(DocsLayoutRoot, {
1349
1349
  Body,
1350
1350
  Content,
1351
1351
  ContentMdx,
1352
- Header
1352
+ Header: Header$1
1353
1353
  });
1354
1354
 
1355
1355
  //#endregion
1356
- export { useUI as A, resolveIcon as C, ButtonGroup as D, Popover$1 as E, Breadcrumbs$1 as O, IconRenderer as S, Menu as T, ScrollProvider as _, SidebarHeader as a, useItems as b, SidebarLink as c, SidebarSubGroup as d, PageNav as f, OnThisPageTree as g, OnThisPageItems as h, SidebarGroup as i, UIProvider as k, SidebarMobile as l, OnThisPage as m, Sidebar as n, SidebarItem as o, AnchorProvider as p, SidebarContent as r, SidebarItems as s, DocsLayout as t, SidebarRoot as u, useActiveAnchor as v, Tabs as w, useSidebar as x, useActiveAnchors as y };
1356
+ export { useUI as A, resolveIcon as C, ButtonGroup as D, Popover$1 as E, Breadcrumbs$1 as O, IconRenderer as S, Menu$1 as T, ScrollProvider as _, SidebarHeader as a, useItems as b, SidebarLink as c, SidebarSubGroup as d, PageNav as f, OnThisPageTree as g, OnThisPageItems as h, SidebarGroup as i, UIProvider as k, SidebarMobile as l, OnThisPage as m, Sidebar as n, SidebarItem as o, AnchorProvider as p, SidebarContent as r, SidebarItems as s, DocsLayout as t, SidebarRoot as u, useActiveAnchor as v, Tabs as w, useSidebar as x, useActiveAnchors as y };
@@ -3,13 +3,12 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const require_router = require('./router-C3kygdRK.cjs');
7
- const require_link = require('./link-hLWOsx0x.cjs');
8
- const require_search_dialog = require('./search-dialog-CguKVtUu.cjs');
6
+ const require_router = require('./router-DKC0Lu0n.cjs');
7
+ const require_link = require('./link-Xb69Oy2F.cjs');
8
+ const require_search_dialog = require('./search-dialog-BOQRHKTb.cjs');
9
9
  let react = require("react");
10
10
  let react_jsx_runtime = require("react/jsx-runtime");
11
11
  let react_aria_components = require("react-aria-components");
12
- react_aria_components = require_router.__toESM(react_aria_components);
13
12
  let isomorphic_dompurify = require("isomorphic-dompurify");
14
13
  isomorphic_dompurify = require_router.__toESM(isomorphic_dompurify);
15
14
  let virtual_boltdocs_icons = require("virtual:boltdocs-icons");
@@ -188,7 +187,7 @@ function SubmenuTrigger({ className, ...props }) {
188
187
  function Menu(props) {
189
188
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_components.Menu, {
190
189
  ...props,
191
- className: react_aria_components.composeRenderProps(props.className, (className) => require_link.cn("outline-none overflow-auto", className))
190
+ className: (0, react_aria_components.composeRenderProps)(props.className, (className) => require_link.cn("outline-none overflow-auto", className))
192
191
  });
193
192
  }
194
193
  /**
@@ -200,8 +199,8 @@ function MenuItem(props) {
200
199
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_components.MenuItem, {
201
200
  ...racProps,
202
201
  textValue,
203
- className: react_aria_components.composeRenderProps(props.className, (className) => require_link.cn("group relative flex flex-row items-center cursor-default outline-none", className)),
204
- children: react_aria_components.composeRenderProps(props.children, (children, { selectionMode, isSelected, hasSubmenu }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
202
+ className: (0, react_aria_components.composeRenderProps)(props.className, (className) => require_link.cn("group relative flex flex-row items-center cursor-default outline-none", className)),
203
+ children: (0, react_aria_components.composeRenderProps)(props.children, (children, { selectionMode, isSelected, hasSubmenu }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
205
204
  selectionMode === "multiple" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
206
205
  className: require_link.cn("flex items-center shrink-0 justify-center", checkClassName),
207
206
  children: check ?? (isSelected ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Check, { className: "size-3.5" }) : null)
@@ -321,7 +320,7 @@ function isImageSource(value) {
321
320
  return /^(?:https?:|data:image\/|\/|\.\.?(?:\/|$))/.test(value) || /\.(?:svg|png|jpe?g|gif|webp|avif)(?:\?.*)?$/i.test(value);
322
321
  }
323
322
  function IconRenderer({ icon, size = 16, className, label }) {
324
- const config = require_link.useOptionalConfig();
323
+ const config = require_router.useOptionalConfig();
325
324
  const resolved = resolveIcon(icon);
326
325
  if (!resolved) return null;
327
326
  if (typeof resolved === "function") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(resolved, {
@@ -456,7 +455,7 @@ const finalizeTree = (nodes) => {
456
455
  });
457
456
  };
458
457
  function useSidebar(routes) {
459
- const config = require_link.useConfig();
458
+ const config = require_router.useConfig();
460
459
  const { pathname } = require_router.useLocation();
461
460
  const { index } = require_link.useRoutesContext();
462
461
  const currentPath = require_link.normalizePath(pathname);
@@ -1108,6 +1107,7 @@ function SidebarLink({ label, href, active, icon: Icon, badge, className, iconCl
1108
1107
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_link.Link, {
1109
1108
  ref: linkRef,
1110
1109
  href,
1110
+ prefetch: "viewport",
1111
1111
  "data-active": active || void 0,
1112
1112
  "data-depth": depth !== void 0 ? depth : void 0,
1113
1113
  "aria-current": active ? "page" : void 0,
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./utils-ej6_SjIZ.cjs`),n=require(`./pages-external-DPiPFxxP.cjs`),r=require(`./config-BJp3lGzE.cjs`),i=require(`./update-check-DFQZyoSU.cjs`);let a=require(`node:path`);a=e.r(a);let o=require(`node:fs`);o=e.r(o);let s=require(`@bdocs/dui`),c=require(`fdir`),l=require(`picomatch`);l=e.r(l);let u=require(`fastest-levenshtein`);const d={$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 f(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 p(e,t,n){return e.doctorConfig.severity[t]||n}async function m(e,t){o.default.existsSync(t)||o.default.mkdirSync(t,{recursive:!0});let n=a.default.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=a.default.join(t,`${n}.${r}.bak`);o.default.copyFileSync(e,i)}const h=new Map;function g(e){let n=h.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 h.set(e,r),r}const _=new Map;function v(e){if(_.has(e))return _.get(e);let t=!1;try{t=o.default.existsSync(e)&&o.default.statSync(e).isFile()}catch{t=!1}return _.set(e,t),t}async function y(e){let t=a.default.resolve(e,`doctor.json`);if(o.default.existsSync(t))try{let e=JSON.parse(o.default.readFileSync(t,`utf-8`));return{...d,...e,checks:{...d.checks,...e.checks,metadata:{...d.checks.metadata,...e.checks?.metadata},links:{...d.checks.links,...e.checks?.links},i18n:{...d.checks.i18n,...e.checks?.i18n},performance:{...d.checks.performance,...e.checks?.performance,budgets:{...d.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...d.fix,...e.fix},reporting:{...d.reporting,...e.reporting},severity:{...d.severity,...e.severity},exclude:[...d.exclude,...e.exclude||[]]}}catch(e){(0,s.warn)(`Failed to parse doctor.json: ${e}`)}return d}async function b(e,r=process.cwd(),i,s){let l=a.default.resolve(r,`.boltdocs`,`generated`);o.default.existsSync(l)||o.default.mkdirSync(l,{recursive:!0});let u=s;u||=await new c.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let d=i?.base||`/`,f=[];for(let n=0;n<u.length;n+=100){let r=u.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=a.default.isAbsolute(n)?n:a.default.resolve(e,n),i=a.default.relative(e,r),{data:o}=await g(r),s;return s=o.permalink?String(o.permalink).startsWith(`/`)?String(o.permalink):`/${o.permalink}`:t.a(i),d===`/`?s:(d.endsWith(`/`)?d:d+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));f.push(...i)}f.includes(d)||f.push(d);let p=n.n(e,i);for(let e of p)f.includes(e)||f.push(e);let m={routes:Array.from(new Set(f)).sort(),timestamp:Date.now()};return o.default.writeFileSync(a.default.resolve(l,`link-tree.json`),JSON.stringify(m,null,2)),m}function x(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,u.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,u.distance)(e,t)/Math.max(e.length,t.length)}const S=new Map;function C(e,t){if(S.has(e))return S.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=x(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return S.set(e,a),a}function w(e,t,n){let r=/```[\s\S]*?```/g,i=/`[^`\n]*`/g,a=0,o=[],s=t=>{e=e.replace(t,e=>(o.push(e),`__BD_CODE_MASK_${a++}__`))};return s(r),s(i),e.split(t).join(n).replace(/__BD_CODE_MASK_(\d+)__/g,(e,t)=>o[Number(t)]??``)}async function T(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:r,titleMax:i,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.u(a.default.relative(e.docsDir,c));try{let{raw:a,data:u}=await g(c);if(a.trim().startsWith(`---`)&&a.split(`---`).length>=3&&Object.keys(u).length===0){let t=p(e,`malformedFrontmatter`,`high`);t!==`off`&&n.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.g.safeParse(u);if(!d.success){let t=p(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)n.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 r=p(e,`missingMetadata`,`warning`);r!==`off`&&n.push({file:l,level:r,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 r of t)if(u[r]&&Number.isNaN(Date.parse(String(u[r])))){let t=p(e,`invalidFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Invalid date format in field "${r}": "${u[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<r){let i=p(e,`shortMetadata`,`low`);i!==`off`&&n.push({file:l,level:i,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${r} characters for better SEO.`})}else if(t.length>i){let r=p(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${i} characters.`})}let a=s.get(t)||[];a.push(l),s.set(t,a)}if(u.description&&String(u.description).length<o){let t=p(e,`shortMetadata`,`low`);t!==`off`&&n.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 r=p(e,`malformedFrontmatter`,`high`);r!==`off`&&n.push({file:l,level:r,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[t,r]of s.entries())if(r.length>1){let i=p(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)n.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return n}const E=/(?:\[([^\]]*)\]\(([^)\s]+)(?:\s+["'][^"']*["'])?\))|(?:href=["']([^"']+)["'])|(?:<Link\s+[^>]*?to=["'](\/[^"']+)["'])/g,D=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`];function O(e){let t=[],n=e=>{t.includes(e)||t.push(e)};n(e),e.endsWith(`/`)?n(e.slice(0,-1)):n(e+`/`);let r=e.replace(/\.(md|mdx)$/i,``);r!==e&&(n(r),n(r+`/`));let i=e.replace(/\/index\.(md|mdx)$/i,``);return i!==e&&(n(i),n(i+`/`)),n(e.endsWith(`/`)?e+`index`:e+`/index`),e.endsWith(`/index`)&&n(e.replace(/\/index$/,``)),t}async function k(e){let n=[],{internal:r,external:i,ignore:c,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!r&&!i&&!e.options.checkExternal)return n;let d=new Set,f=5e5;for(let s of e.files){let l=t.u(a.default.relative(e.docsDir,s)),{content:u}=await g(s),m=[...(u.length>f?u.slice(0,f):u).replace(/<!--[\s\S]*?-->/g,``).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(E)];for(let t of m){let u=t[2]||t[3]||t[4],f=!!t[2],m=!!t[4];if(!u||c.some(e=>u.includes(e)))continue;if(/^(https?:|mailto:|tel:|data:|javascript:|blob:|ftp:)/i.test(u)){(i||e.options.checkExternal)&&d.add({url:u,file:s});continue}if(u.startsWith(`//`)){(i||e.options.checkExternal)&&d.add({url:u,file:s});continue}if(!r||u.startsWith(`#`))continue;let g;try{g=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{g=u.split(`#`)[0].split(`?`)[0]}if(!g)continue;let _=!1,y=!1,b=``;if(g.startsWith(`/`)){let t=O(g);for(let n of t)if(e.routeIndex.has(n)||e.routeIndexWithSlash.has(n)||e.routeIndexWithoutSlash.has(n)){_=!0;break}if(!_&&e.basePrefix)for(let n of t){let t=e.basePrefix+(n.startsWith(`/`)?n:`/`+n);if(t!==n&&(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))){y=!0,b=t;break}}if(!_&&!y){let t=g.replace(/^\/+/,``),n=a.default.join(e.docsDir,t);_=D.some(e=>v(n+e))}}else{let e=a.default.resolve(a.default.dirname(s),g);_=D.some(t=>v(e+t))}if(!_){let{bestMatch:t,similarity:r}=C(g,e.linkTree.routes);y&&(t=b,r=1);let i=r>.6||y,a=r>.75&&t!==g||y,c=p(e,`brokenLink`,`high`);c!==`off`&&n.push({file:l,level:c,message:`Broken internal link: "${u}"`,suggestion:i?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:a?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=f?`(${u})`:m?`to="${u}"`:`href="${u}"`,r=f?`(${t}${e})`:m?`to="${t}${e}"`:`href="${t}${e}"`,i=w(o.default.readFileSync(s,`utf-8`),n,r);o.default.writeFileSync(s,i),h.delete(s)}:void 0})}}}if(d.size>0){(0,s.info)(s.colors.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(),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 instanceof Error?t.message:String(t)}}},o=Array.from(r.keys()),c=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(i));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:String(e.reason)}))}for(let i of c)if(!i.ok){let o=p(e,`brokenLink`,`warning`);if(o!==`off`){let s=r.get(i.url)||[];for(let r of s)n.push({file:t.u(a.default.relative(e.docsDir,r)),level:o,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return n}async function A(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:r,locales:i}=e.config.i18n,s=Object.keys(i),c=s.filter(e=>e!==r);if(c.length===0)return n;let l=a.default.resolve(e.docsDir),u=a.default.join(l,r),d=o.default.existsSync(u)&&o.default.statSync(u).isDirectory(),f=e=>{let t=a.default.resolve(e);if(t!==l&&!t.startsWith(l+a.default.sep))throw Error(`Refusing to write outside docs dir: ${t}`);return t};for(let i of e.files){let m=t.u(a.default.relative(e.docsDir,i)),h=m.split(`/`),g=h[0],_,y;if(s.includes(g)&&g!==r?(_=g,y=h.slice(1).join(`/`)):g===r&&d?(_=r,y=h.slice(1).join(`/`)):(_=r,y=m),y)if(_===r)for(let t of c){let r=a.default.join(l,t,y);if(!v(r)){let s=p(e,`missingTranslation`,`warning`);s!==`off`&&n.push({file:m,level:s,message:`Missing translation for locale "${t}"`,suggestion:`Create a version at "${t}/${y}".`,fix:async()=>{let e=f(r),t=a.default.dirname(e);o.default.existsSync(t)||o.default.mkdirSync(t,{recursive:!0}),o.default.copyFileSync(i,e)}})}}else{let t=a.default.join(l,y),s=d?a.default.join(u,y):``;if(!(v(t)||s!==``&&v(s))){let t=p(e,`missingTranslation`,`low`);t!==`off`&&n.push({file:m,level:t,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${y}".`,fix:async()=>{o.default.unlinkSync(f(i))}})}}}return n}async function j(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=p(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}=C(r.link,e.linkTree.routes),a=i>.6,o=p(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=p(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 M(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=a.default.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!o.default.existsSync(r))return t.push({file:`(build)`,level:p(e,`budgetExceeded`,`warning`)??`warning`,message:"Performance metrics not found. Run `boltdocs build` first."}),t;let i;try{i=JSON.parse(o.default.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:p(e,`budgetExceeded`,`warning`)??`warning`,message:`Failed to parse performance metrics file.`}),t}let s=n.budgets,c=p(e,`budgetExceeded`,`warning`),l=f(s?.maxJSBundleSize,1/0),u=f(s?.maxCSSBundleSize,1/0),d=f(s?.maxPageHTMLSize,1/0),m=s?.maxImagesKB??1/0,h=s?.maxBuildTime??1/0,g=s?.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 _=m*1024;if(m!==1/0&&i.totalImagesSize>_){let e=(i.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`Image assets exceed budget: ${e}kb > ${m}kb`,suggestion:`Optimize images with lossy compression or use next-gen formats (webp/avif).`})}if(h!==1/0&&i.buildTime>h){let e=(i.buildTime/1e3).toFixed(1),n=(h/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 g!==1/0&&i.fontCount>g&&t.push({file:`(build)`,level:c,message:`Font files exceed budget: ${i.fontCount} > ${g}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function N(e){let t=a.default.resolve(e,`doctor.json`);if(o.default.existsSync(t)){(0,s.warn)(`"doctor.json" already exists at ${e}.`);return}try{o.default.writeFileSync(t,JSON.stringify(d,null,2)),(0,s.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,s.error)(`Failed to create "doctor.json": ${e}`)}}async function P(e=process.cwd(),t={}){if(t.init){await N(e);return}i.t();try{let n=await y(e),{format:u}=n.reporting,d=performance.now(),f=await r.t(`docs`,e),p=a.default.resolve(e,`docs`);if(o.default.existsSync(p)||(u===`pretty`&&(0,s.error)(`Docs dir not found at ${p}`),process.exit(1)),u===`pretty`){let t=i.n?` ${i.i(`v${i.n}`)}`:``;console.log(`\n ${s.colors.bold(`⚡`)} ${i.s(`boltdocs`)}${t} ${s.colors.dim(`—`)} ${s.colors.bold(`doctor`)} ${s.colors.dim(`· documentation health check`)}\n`),console.log(` ${s.colors.dim(`Docs dir ${p}`)}\n ${s.colors.dim(`Reports ${e}/.boltdocs/reports/`)}\n`)}u===`pretty`&&(0,s.info)(s.colors.dim(`🔍 Discovering files and routes...`));let h=(0,l.default)(n.exclude||[]),g=await new c.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=a.default.relative(p,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!h(t)&&!n}).crawl(p).withPromise();for(let e of g)_.set(e,!0);let v=await b(p,e,f,g),x=f.base||`/`,S=x===`/`?``:x.endsWith(`/`)?x.slice(0,-1):x,C=new Set(v.routes),w=new Set(v.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),E=new Set(v.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e));u===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let D={root:e,docsDir:p,config:f,doctorConfig:n,linkTree:v,files:g,options:t,routeIndex:C,routeIndexWithSlash:w,routeIndexWithoutSlash:E,basePrefix:S};u===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let O=[T(D),k(D),A(D),j(D)];t.budget&&O.push(M(D));let[N,P,F,I,...L]=await Promise.all(O),R=t.budget?L[0]??[]:[],z=[...N,...P,...F,...I,...R];if(u===`pretty`){let e=e=>e>0?s.colors.red(`${e} issue${e===1?``:`s`}`):s.colors.green(`OK`),n=[{label:`Metadata checks ${e(N.length)}`,done:N.length===0},{label:`Link checks ${e(P.length)}`,done:P.length===0},{label:`i18n checks ${e(F.length)}`,done:F.length===0},{label:`Sidebar checks ${e(I.length)}`,done:I.length===0}];t.budget&&n.push({label:`Performance budget ${e(R.length)}`,done:R.length===0}),console.log(`\n${(0,s.tasks)(n)}\n`)}let B=0;if(t.fix){for(let e of z)if(e.fix){if(D.doctorConfig.fix.confirmChanges&&!await(0,s.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(D.doctorConfig.fix.backupFiles){let t=a.default.resolve(D.docsDir,e.file);o.default.existsSync(t)&&await m(t,a.default.resolve(D.root,D.doctorConfig.fix.backupPath))}await e.fix(),B++}}let V=((performance.now()-d)/1e3).toFixed(2),H=z.filter(e=>e.level===`high`).length,U=z.filter(e=>e.level===`warning`).length,W=z.filter(e=>e.level===`low`).length,G={summary:{total:z.length,high:H,warning:U,low:W,fixed:B,duration:V},issues:z.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=a.default.resolve(e,n.reporting.outputFile);o.default.existsSync(a.default.dirname(t))||o.default.mkdirSync(a.default.dirname(t),{recursive:!0}),o.default.writeFileSync(t,JSON.stringify(G,null,2))}if(u===`json`)console.log(JSON.stringify(G,null,2));else if(u===`pretty`){let e=z.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(z.length>0){console.log((0,s.section)({title:`Issues`,colors:{title:i.r}}));for(let[n,r]of Object.entries(e)){let e=r.some(e=>e.level===`high`)?`high`:r.some(e=>e.level===`warning`)?`warning`:`low`,a=e.toUpperCase(),o=e===`high`?(0,s.badge)({label:a,status:`error`}):e===`warning`?(0,s.badge)({label:a,status:`warning`}):(0,s.badge)({label:a,colors:{text:`#ffffff`,bg:i.r}});console.log(`\n ${o} ${s.colors.bold(n)}`);for(let e of r){let n=e.level===`high`?`✖`:e.level===`warning`?`⚠`:`ℹ`,r=e.level===`high`?s.colors.red:e.level===`warning`?s.colors.yellow:e=>(0,s.colorize)(e,i.r,`fg`);console.log(` ${r(n)} ${e.message}`),e.suggestion&&console.log(` ${s.colors.dim(`💡 ${e.suggestion}`)}`),t.fix&&e.fix&&console.log(` ${s.colors.green(`✅ Fixed automatically`)}`)}}console.log(``)}z.length===0?(console.log(` ${s.colors.green.bold(`✨ Everything looks perfect!`)} ${s.colors.dim(`— your documentation is in great shape.`)}`),console.log(` ${s.colors.dim(`Scanned ${g.length} file${g.length===1?``:`s`} in ${V}s`)}`)):(console.log(`\n${(0,s.section)({title:`Summary`,colors:{title:i.r}})}`),H>0&&console.log(` ${(0,s.badge)({label:String(H),status:`error`})} ${s.colors.bold(`high`)}`),U>0&&console.log(` ${(0,s.badge)({label:String(U),status:`warning`})} ${s.colors.bold(`warning`)}${U===1?``:`s`}`),W>0&&console.log(` ${(0,s.badge)({label:String(W),colors:{text:`#ffffff`,bg:i.r}})} ${s.colors.bold(`low`)}`),console.log(` ${s.colors.dim(`Scanned ${g.length} file${g.length===1?``:`s`} in ${V}s`)}`),B>0&&(0,s.success)(`Successfully fixed ${B} issues automatically!`),H>0?(0,s.error)(`Please fix the critical errors before building for production.`):(0,s.success)(`No critical issues found. You are ready to go!`))}n.reporting.failOnError&&H>0&&process.exit(1),n.reporting.maxWarnings!==-1&&U>n.reporting.maxWarnings&&(u===`pretty`&&(0,s.error)(`Failed: Too many warnings (${U} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,s.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return d}});
6
+ const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./utils-ej6_SjIZ.cjs`),n=require(`./pages-external-B_r6gvqP.cjs`),r=require(`./config-B3SEoVjG.cjs`),i=require(`./update-check-CiIeC7CX.cjs`);let a=require(`node:path`);a=e.r(a);let o=require(`node:fs`);o=e.r(o);let s=require(`@bdocs/dui`),c=require(`fdir`),l=require(`picomatch`);l=e.r(l);let u=require(`fastest-levenshtein`);const d={$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 f(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 p(e,t,n){return e.doctorConfig.severity[t]||n}async function m(e,t){o.default.existsSync(t)||o.default.mkdirSync(t,{recursive:!0});let n=a.default.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=a.default.join(t,`${n}.${r}.bak`);o.default.copyFileSync(e,i)}const h=new Map;function g(e){let n=h.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 h.set(e,r),r}const _=new Map;function v(e){if(_.has(e))return _.get(e);let t=!1;try{t=o.default.existsSync(e)&&o.default.statSync(e).isFile()}catch{t=!1}return _.set(e,t),t}async function y(e){let t=a.default.resolve(e,`doctor.json`);if(o.default.existsSync(t))try{let e=JSON.parse(o.default.readFileSync(t,`utf-8`));return{...d,...e,checks:{...d.checks,...e.checks,metadata:{...d.checks.metadata,...e.checks?.metadata},links:{...d.checks.links,...e.checks?.links},i18n:{...d.checks.i18n,...e.checks?.i18n},performance:{...d.checks.performance,...e.checks?.performance,budgets:{...d.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...d.fix,...e.fix},reporting:{...d.reporting,...e.reporting},severity:{...d.severity,...e.severity},exclude:[...d.exclude,...e.exclude||[]]}}catch(e){(0,s.warn)(`Failed to parse doctor.json: ${e}`)}return d}async function b(e,r=process.cwd(),i,s){let l=a.default.resolve(r,`.boltdocs`,`generated`);o.default.existsSync(l)||o.default.mkdirSync(l,{recursive:!0});let u=s;u||=await new c.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let d=i?.base||`/`,f=[];for(let n=0;n<u.length;n+=100){let r=u.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=a.default.isAbsolute(n)?n:a.default.resolve(e,n),i=a.default.relative(e,r),{data:o}=await g(r),s;return s=o.permalink?String(o.permalink).startsWith(`/`)?String(o.permalink):`/${o.permalink}`:t.a(i),d===`/`?s:(d.endsWith(`/`)?d:d+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));f.push(...i)}f.includes(d)||f.push(d);let p=n.n(e,i);for(let e of p)f.includes(e)||f.push(e);let m={routes:Array.from(new Set(f)).sort(),timestamp:Date.now()};return o.default.writeFileSync(a.default.resolve(l,`link-tree.json`),JSON.stringify(m,null,2)),m}function x(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,u.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,u.distance)(e,t)/Math.max(e.length,t.length)}const S=new Map;function C(e,t){if(S.has(e))return S.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=x(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return S.set(e,a),a}function w(e,t,n){let r=/```[\s\S]*?```/g,i=/`[^`\n]*`/g,a=0,o=[],s=t=>{e=e.replace(t,e=>(o.push(e),`__BD_CODE_MASK_${a++}__`))};return s(r),s(i),e.split(t).join(n).replace(/__BD_CODE_MASK_(\d+)__/g,(e,t)=>o[Number(t)]??``)}async function T(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:r,titleMax:i,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.u(a.default.relative(e.docsDir,c));try{let{raw:a,data:u}=await g(c);if(a.trim().startsWith(`---`)&&a.split(`---`).length>=3&&Object.keys(u).length===0){let t=p(e,`malformedFrontmatter`,`high`);t!==`off`&&n.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.g.safeParse(u);if(!d.success){let t=p(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)n.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 r=p(e,`missingMetadata`,`warning`);r!==`off`&&n.push({file:l,level:r,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 r of t)if(u[r]&&Number.isNaN(Date.parse(String(u[r])))){let t=p(e,`invalidFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Invalid date format in field "${r}": "${u[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<r){let i=p(e,`shortMetadata`,`low`);i!==`off`&&n.push({file:l,level:i,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${r} characters for better SEO.`})}else if(t.length>i){let r=p(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${i} characters.`})}let a=s.get(t)||[];a.push(l),s.set(t,a)}if(u.description&&String(u.description).length<o){let t=p(e,`shortMetadata`,`low`);t!==`off`&&n.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 r=p(e,`malformedFrontmatter`,`high`);r!==`off`&&n.push({file:l,level:r,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[t,r]of s.entries())if(r.length>1){let i=p(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)n.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return n}const E=/(?:\[([^\]]*)\]\(([^)\s]+)(?:\s+["'][^"']*["'])?\))|(?:href=["']([^"']+)["'])|(?:<Link\s+[^>]*?to=["'](\/[^"']+)["'])/g,D=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`];function O(e){let t=[],n=e=>{t.includes(e)||t.push(e)};n(e),e.endsWith(`/`)?n(e.slice(0,-1)):n(e+`/`);let r=e.replace(/\.(md|mdx)$/i,``);r!==e&&(n(r),n(r+`/`));let i=e.replace(/\/index\.(md|mdx)$/i,``);return i!==e&&(n(i),n(i+`/`)),n(e.endsWith(`/`)?e+`index`:e+`/index`),e.endsWith(`/index`)&&n(e.replace(/\/index$/,``)),t}async function k(e){let n=[],{internal:r,external:i,ignore:c,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!r&&!i&&!e.options.checkExternal)return n;let d=new Set,f=5e5;for(let s of e.files){let l=t.u(a.default.relative(e.docsDir,s)),{content:u}=await g(s),m=[...(u.length>f?u.slice(0,f):u).replace(/<!--[\s\S]*?-->/g,``).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(E)];for(let t of m){let u=t[2]||t[3]||t[4],f=!!t[2],m=!!t[4];if(!u||c.some(e=>u.includes(e)))continue;if(/^(https?:|mailto:|tel:|data:|javascript:|blob:|ftp:)/i.test(u)){(i||e.options.checkExternal)&&d.add({url:u,file:s});continue}if(u.startsWith(`//`)){(i||e.options.checkExternal)&&d.add({url:u,file:s});continue}if(!r||u.startsWith(`#`))continue;let g;try{g=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{g=u.split(`#`)[0].split(`?`)[0]}if(!g)continue;let _=!1,y=!1,b=``;if(g.startsWith(`/`)){let t=O(g);for(let n of t)if(e.routeIndex.has(n)||e.routeIndexWithSlash.has(n)||e.routeIndexWithoutSlash.has(n)){_=!0;break}if(!_&&e.basePrefix)for(let n of t){let t=e.basePrefix+(n.startsWith(`/`)?n:`/`+n);if(t!==n&&(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))){y=!0,b=t;break}}if(!_&&!y){let t=g.replace(/^\/+/,``),n=a.default.join(e.docsDir,t);_=D.some(e=>v(n+e))}}else{let e=a.default.resolve(a.default.dirname(s),g);_=D.some(t=>v(e+t))}if(!_){let{bestMatch:t,similarity:r}=C(g,e.linkTree.routes);y&&(t=b,r=1);let i=r>.6||y,a=r>.75&&t!==g||y,c=p(e,`brokenLink`,`high`);c!==`off`&&n.push({file:l,level:c,message:`Broken internal link: "${u}"`,suggestion:i?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:a?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=f?`(${u})`:m?`to="${u}"`:`href="${u}"`,r=f?`(${t}${e})`:m?`to="${t}${e}"`:`href="${t}${e}"`,i=w(o.default.readFileSync(s,`utf-8`),n,r);o.default.writeFileSync(s,i),h.delete(s)}:void 0})}}}if(d.size>0){(0,s.info)(s.colors.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(),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 instanceof Error?t.message:String(t)}}},o=Array.from(r.keys()),c=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(i));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:String(e.reason)}))}for(let i of c)if(!i.ok){let o=p(e,`brokenLink`,`warning`);if(o!==`off`){let s=r.get(i.url)||[];for(let r of s)n.push({file:t.u(a.default.relative(e.docsDir,r)),level:o,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return n}async function A(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:r,locales:i}=e.config.i18n,s=Object.keys(i),c=s.filter(e=>e!==r);if(c.length===0)return n;let l=a.default.resolve(e.docsDir),u=a.default.join(l,r),d=o.default.existsSync(u)&&o.default.statSync(u).isDirectory(),f=e=>{let t=a.default.resolve(e);if(t!==l&&!t.startsWith(l+a.default.sep))throw Error(`Refusing to write outside docs dir: ${t}`);return t};for(let i of e.files){let m=t.u(a.default.relative(e.docsDir,i)),h=m.split(`/`),g=h[0],_,y;if(s.includes(g)&&g!==r?(_=g,y=h.slice(1).join(`/`)):g===r&&d?(_=r,y=h.slice(1).join(`/`)):(_=r,y=m),y)if(_===r)for(let t of c){let r=a.default.join(l,t,y);if(!v(r)){let s=p(e,`missingTranslation`,`warning`);s!==`off`&&n.push({file:m,level:s,message:`Missing translation for locale "${t}"`,suggestion:`Create a version at "${t}/${y}".`,fix:async()=>{let e=f(r),t=a.default.dirname(e);o.default.existsSync(t)||o.default.mkdirSync(t,{recursive:!0}),o.default.copyFileSync(i,e)}})}}else{let t=a.default.join(l,y),s=d?a.default.join(u,y):``;if(!(v(t)||s!==``&&v(s))){let t=p(e,`missingTranslation`,`low`);t!==`off`&&n.push({file:m,level:t,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${y}".`,fix:async()=>{o.default.unlinkSync(f(i))}})}}}return n}async function j(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=p(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}=C(r.link,e.linkTree.routes),a=i>.6,o=p(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=p(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 M(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=a.default.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!o.default.existsSync(r))return t.push({file:`(build)`,level:p(e,`budgetExceeded`,`warning`)??`warning`,message:"Performance metrics not found. Run `boltdocs build` first."}),t;let i;try{i=JSON.parse(o.default.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:p(e,`budgetExceeded`,`warning`)??`warning`,message:`Failed to parse performance metrics file.`}),t}let s=n.budgets,c=p(e,`budgetExceeded`,`warning`),l=f(s?.maxJSBundleSize,1/0),u=f(s?.maxCSSBundleSize,1/0),d=f(s?.maxPageHTMLSize,1/0),m=s?.maxImagesKB??1/0,h=s?.maxBuildTime??1/0,g=s?.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 _=m*1024;if(m!==1/0&&i.totalImagesSize>_){let e=(i.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`Image assets exceed budget: ${e}kb > ${m}kb`,suggestion:`Optimize images with lossy compression or use next-gen formats (webp/avif).`})}if(h!==1/0&&i.buildTime>h){let e=(i.buildTime/1e3).toFixed(1),n=(h/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 g!==1/0&&i.fontCount>g&&t.push({file:`(build)`,level:c,message:`Font files exceed budget: ${i.fontCount} > ${g}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function N(e){let t=a.default.resolve(e,`doctor.json`);if(o.default.existsSync(t)){(0,s.warn)(`"doctor.json" already exists at ${e}.`);return}try{o.default.writeFileSync(t,JSON.stringify(d,null,2)),(0,s.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,s.error)(`Failed to create "doctor.json": ${e}`)}}async function P(e=process.cwd(),t={}){if(t.init){await N(e);return}i.t();try{let n=await y(e),{format:u}=n.reporting,d=performance.now(),f=await r.t(`docs`,e),p=a.default.resolve(e,`docs`);if(o.default.existsSync(p)||(u===`pretty`&&(0,s.error)(`Docs dir not found at ${p}`),process.exit(1)),u===`pretty`){let t=i.n?` ${i.i(`v${i.n}`)}`:``;console.log(`\n ${s.colors.bold(`⚡`)} ${i.s(`boltdocs`)}${t} ${s.colors.dim(`—`)} ${s.colors.bold(`doctor`)} ${s.colors.dim(`· documentation health check`)}\n`),console.log(` ${s.colors.dim(`Docs dir ${p}`)}\n ${s.colors.dim(`Reports ${e}/.boltdocs/reports/`)}\n`)}u===`pretty`&&(0,s.info)(s.colors.dim(`🔍 Discovering files and routes...`));let h=(0,l.default)(n.exclude||[]),g=await new c.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=a.default.relative(p,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!h(t)&&!n}).crawl(p).withPromise();for(let e of g)_.set(e,!0);let v=await b(p,e,f,g),x=f.base||`/`,S=x===`/`?``:x.endsWith(`/`)?x.slice(0,-1):x,C=new Set(v.routes),w=new Set(v.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),E=new Set(v.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e));u===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let D={root:e,docsDir:p,config:f,doctorConfig:n,linkTree:v,files:g,options:t,routeIndex:C,routeIndexWithSlash:w,routeIndexWithoutSlash:E,basePrefix:S};u===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let O=[T(D),k(D),A(D),j(D)];t.budget&&O.push(M(D));let[N,P,F,I,...L]=await Promise.all(O),R=t.budget?L[0]??[]:[],z=[...N,...P,...F,...I,...R];if(u===`pretty`){let e=e=>e>0?s.colors.red(`${e} issue${e===1?``:`s`}`):s.colors.green(`OK`),n=[{label:`Metadata checks ${e(N.length)}`,done:N.length===0},{label:`Link checks ${e(P.length)}`,done:P.length===0},{label:`i18n checks ${e(F.length)}`,done:F.length===0},{label:`Sidebar checks ${e(I.length)}`,done:I.length===0}];t.budget&&n.push({label:`Performance budget ${e(R.length)}`,done:R.length===0}),console.log(`\n${(0,s.tasks)(n)}\n`)}let B=0;if(t.fix){for(let e of z)if(e.fix){if(D.doctorConfig.fix.confirmChanges&&!await(0,s.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(D.doctorConfig.fix.backupFiles){let t=a.default.resolve(D.docsDir,e.file);o.default.existsSync(t)&&await m(t,a.default.resolve(D.root,D.doctorConfig.fix.backupPath))}await e.fix(),B++}}let V=((performance.now()-d)/1e3).toFixed(2),H=z.filter(e=>e.level===`high`).length,U=z.filter(e=>e.level===`warning`).length,W=z.filter(e=>e.level===`low`).length,G={summary:{total:z.length,high:H,warning:U,low:W,fixed:B,duration:V},issues:z.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=a.default.resolve(e,n.reporting.outputFile);o.default.existsSync(a.default.dirname(t))||o.default.mkdirSync(a.default.dirname(t),{recursive:!0}),o.default.writeFileSync(t,JSON.stringify(G,null,2))}if(u===`json`)console.log(JSON.stringify(G,null,2));else if(u===`pretty`){let e=z.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(z.length>0){console.log((0,s.section)({title:`Issues`,colors:{title:i.r}}));for(let[n,r]of Object.entries(e)){let e=r.some(e=>e.level===`high`)?`high`:r.some(e=>e.level===`warning`)?`warning`:`low`,a=e.toUpperCase(),o=e===`high`?(0,s.badge)({label:a,status:`error`}):e===`warning`?(0,s.badge)({label:a,status:`warning`}):(0,s.badge)({label:a,colors:{text:`#ffffff`,bg:i.r}});console.log(`\n ${o} ${s.colors.bold(n)}`);for(let e of r){let n=e.level===`high`?`✖`:e.level===`warning`?`⚠`:`ℹ`,r=e.level===`high`?s.colors.red:e.level===`warning`?s.colors.yellow:e=>(0,s.colorize)(e,i.r,`fg`);console.log(` ${r(n)} ${e.message}`),e.suggestion&&console.log(` ${s.colors.dim(`💡 ${e.suggestion}`)}`),t.fix&&e.fix&&console.log(` ${s.colors.green(`✅ Fixed automatically`)}`)}}console.log(``)}z.length===0?(console.log(` ${s.colors.green.bold(`✨ Everything looks perfect!`)} ${s.colors.dim(`— your documentation is in great shape.`)}`),console.log(` ${s.colors.dim(`Scanned ${g.length} file${g.length===1?``:`s`} in ${V}s`)}`)):(console.log(`\n${(0,s.section)({title:`Summary`,colors:{title:i.r}})}`),H>0&&console.log(` ${(0,s.badge)({label:String(H),status:`error`})} ${s.colors.bold(`high`)}`),U>0&&console.log(` ${(0,s.badge)({label:String(U),status:`warning`})} ${s.colors.bold(`warning`)}${U===1?``:`s`}`),W>0&&console.log(` ${(0,s.badge)({label:String(W),colors:{text:`#ffffff`,bg:i.r}})} ${s.colors.bold(`low`)}`),console.log(` ${s.colors.dim(`Scanned ${g.length} file${g.length===1?``:`s`} in ${V}s`)}`),B>0&&(0,s.success)(`Successfully fixed ${B} issues automatically!`),H>0?(0,s.error)(`Please fix the critical errors before building for production.`):(0,s.success)(`No critical issues found. You are ready to go!`))}n.reporting.failOnError&&H>0&&process.exit(1),n.reporting.maxWarnings!==-1&&U>n.reporting.maxWarnings&&(u===`pretty`&&(0,s.error)(`Failed: Too many warnings (${U} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,s.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return d}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./doctor-BqxOFRt3.cjs`);exports.doctorAction=e.t;
6
+ const e=require(`./doctor-BLxm2alc.cjs`);exports.doctorAction=e.t;