boltdocs 2.7.9 → 2.7.11

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 (174) hide show
  1. package/dist/{cache-DorPMFgW.cjs → cache-Ba-DZQNH.cjs} +1 -1
  2. package/dist/{cache-CQKlT4fI.mjs → cache-BuMZ58L5.mjs} +1 -1
  3. package/dist/chunk-CU-zTemE.cjs +6 -0
  4. package/dist/client/index.cjs +1929 -1
  5. package/dist/client/index.js +1880 -1
  6. package/dist/client/mdx.cjs +7 -1
  7. package/dist/client/mdx.js +7 -1
  8. package/dist/client/primitives.cjs +60 -1
  9. package/dist/client/primitives.js +20 -1
  10. package/dist/docs-layout-BXHV0xw_.cjs +1431 -0
  11. package/dist/docs-layout-DwFndmj5.js +1231 -0
  12. package/dist/doctor-Be7Ly1oM.mjs +21 -0
  13. package/dist/{doctor-D4_Y7M4p.cjs → doctor-CrytFkqW.cjs} +1 -1
  14. package/dist/doctor-jMxWZyLJ.cjs +21 -0
  15. package/dist/generator-CHqxiQhF.cjs +21 -0
  16. package/dist/generator-ClVanhvi.mjs +21 -0
  17. package/dist/icons-dev-3cZMyt8r.cjs +1204 -0
  18. package/dist/icons-dev-Df8OQ481.js +839 -0
  19. package/dist/image-DtrI2cw3.cjs +268 -0
  20. package/dist/image-jxPb-2iV.js +214 -0
  21. package/dist/mdx-BdWkJTeB.cjs +523 -0
  22. package/dist/mdx-UTTLFWJq.js +494 -0
  23. package/dist/meta-loader-CWg2gnbY.mjs +6 -0
  24. package/dist/meta-loader-Cv9O0Pzl.cjs +6 -0
  25. package/dist/node/cli-entry.cjs +1 -1
  26. package/dist/node/cli-entry.mjs +1 -1
  27. package/dist/node/index.cjs +1 -1
  28. package/dist/node/index.mjs +1 -1
  29. package/dist/node/routes/worker.cjs +1 -1
  30. package/dist/node/routes/worker.mjs +1 -1
  31. package/dist/node-BSM4qcDK.cjs +111 -0
  32. package/dist/node-BspZN3R2.mjs +111 -0
  33. package/dist/{package-VfQM94VL.cjs → package-DIIrjuWI.cjs} +1 -1
  34. package/dist/{package-B4MD00N3.mjs → package-K0zsjGIz.mjs} +1 -1
  35. package/dist/{parser-Bh11BsdA.cjs → parser-Aq8LoH-0.cjs} +1 -1
  36. package/dist/{parser-DYRzXWmA.cjs → parser-CdNbqN5y.cjs} +1 -1
  37. package/dist/parser-nE792MLO.mjs +6 -0
  38. package/dist/rolldown-runtime-fkIsjY3S.mjs +6 -0
  39. package/dist/{routes-Co1mRM58.cjs → routes-2k3tbUmC.cjs} +1 -1
  40. package/dist/routes-CpxZIsMM.mjs +6 -0
  41. package/dist/{routes-CHf76Ye4.cjs → routes-DP1vmWRj.cjs} +1 -1
  42. package/dist/search-dialog-BHuIiUC6.js +8 -0
  43. package/dist/search-dialog-BNF10tDl.js +375 -0
  44. package/dist/search-dialog-BwkDuI9R.cjs +220 -0
  45. package/dist/search-dialog-C7xuvyNk.cjs +386 -0
  46. package/dist/search-dialog-CIQg6k8c.cjs +8 -0
  47. package/dist/search-dialog-D-DDN7zJ.js +208 -0
  48. package/dist/utils-CG65J0Sc.mjs +7 -0
  49. package/dist/utils-CKunkU96.cjs +7 -0
  50. package/dist/{worker-pool-BwU8ckrg.cjs → worker-pool-Crbqgw5R.cjs} +1 -1
  51. package/package.json +5 -5
  52. package/dist/chunk-Ds5LZdWN.cjs +0 -6
  53. package/dist/docs-layout-KoWNZc8_.js +0 -6
  54. package/dist/docs-layout-x2yKt2cL.cjs +0 -6
  55. package/dist/doctor-BD1BSB03.mjs +0 -23
  56. package/dist/doctor-BHc9ua6r.cjs +0 -23
  57. package/dist/generator-DGW6pkCC.cjs +0 -22
  58. package/dist/generator-Dv3wEmhZ.mjs +0 -22
  59. package/dist/icons-dev-B_RZIyxu.js +0 -6
  60. package/dist/icons-dev-BlV3wWFT.cjs +0 -6
  61. package/dist/image-BHhTvQzr.cjs +0 -6
  62. package/dist/image-CqKzYD8f.js +0 -6
  63. package/dist/mdx-DudBEac0.js +0 -7
  64. package/dist/mdx-r4cDQxWu.cjs +0 -7
  65. package/dist/meta-loader-0gJ4PtBC.cjs +0 -6
  66. package/dist/meta-loader-9IpAHWDS.mjs +0 -6
  67. package/dist/node-DBaH7kat.mjs +0 -111
  68. package/dist/node-t5C3Q85p.cjs +0 -111
  69. package/dist/parser-9cVdK7w9.mjs +0 -6
  70. package/dist/routes-DwrMa5-z.mjs +0 -6
  71. package/dist/search-dialog-B584t9ZF.js +0 -6
  72. package/dist/search-dialog-BvBopRsZ.cjs +0 -6
  73. package/dist/search-dialog-ByvGScjt.js +0 -6
  74. package/dist/search-dialog-Cyko6TJm.cjs +0 -6
  75. package/dist/search-dialog-D6BNohIJ.js +0 -6
  76. package/dist/search-dialog-DuYTIefy.cjs +0 -6
  77. package/dist/utils-BxNAXhZZ.mjs +0 -7
  78. package/dist/utils-Clzu7jvb.cjs +0 -7
  79. package/src/client/app/config-context.tsx +0 -51
  80. package/src/client/app/doc-page.tsx +0 -38
  81. package/src/client/app/docs-layout.tsx +0 -28
  82. package/src/client/app/head.tsx +0 -122
  83. package/src/client/app/helmet-compat.tsx +0 -36
  84. package/src/client/app/mdx-component.tsx +0 -8
  85. package/src/client/app/mdx-components-context.tsx +0 -72
  86. package/src/client/app/routes-context.tsx +0 -34
  87. package/src/client/app/scroll-handler.tsx +0 -74
  88. package/src/client/app/theme-context.tsx +0 -103
  89. package/src/client/app/ui-context.tsx +0 -42
  90. package/src/client/components/docs-layout-default.tsx +0 -85
  91. package/src/client/components/icons-dev.tsx +0 -282
  92. package/src/client/components/mdx/callout.tsx +0 -97
  93. package/src/client/components/mdx/card.tsx +0 -99
  94. package/src/client/components/mdx/cards.tsx +0 -27
  95. package/src/client/components/mdx/code-block.tsx +0 -184
  96. package/src/client/components/mdx/field.tsx +0 -33
  97. package/src/client/components/mdx/image.tsx +0 -44
  98. package/src/client/components/mdx/index.ts +0 -19
  99. package/src/client/components/mdx/table.tsx +0 -54
  100. package/src/client/components/mdx/typographics.tsx +0 -120
  101. package/src/client/components/mdx/use-code-block.ts +0 -34
  102. package/src/client/components/primitives/breadcrumbs.tsx +0 -54
  103. package/src/client/components/primitives/button-group.tsx +0 -54
  104. package/src/client/components/primitives/button.tsx +0 -6
  105. package/src/client/components/primitives/code-block.tsx +0 -120
  106. package/src/client/components/primitives/docs-layout.tsx +0 -125
  107. package/src/client/components/primitives/error-boundary.tsx +0 -107
  108. package/src/client/components/primitives/heading.tsx +0 -128
  109. package/src/client/components/primitives/helpers/observer.ts +0 -141
  110. package/src/client/components/primitives/image.tsx +0 -26
  111. package/src/client/components/primitives/link.tsx +0 -102
  112. package/src/client/components/primitives/menu.tsx +0 -137
  113. package/src/client/components/primitives/navbar.tsx +0 -466
  114. package/src/client/components/primitives/on-this-page.tsx +0 -430
  115. package/src/client/components/primitives/page-nav.tsx +0 -51
  116. package/src/client/components/primitives/popover.tsx +0 -28
  117. package/src/client/components/primitives/search-dialog.tsx +0 -193
  118. package/src/client/components/primitives/sidebar.tsx +0 -423
  119. package/src/client/components/primitives/skeleton.tsx +0 -26
  120. package/src/client/components/primitives/tabs.tsx +0 -70
  121. package/src/client/components/primitives/tooltip.tsx +0 -81
  122. package/src/client/components/primitives/types.ts +0 -11
  123. package/src/client/components/ui-base/banner.tsx +0 -66
  124. package/src/client/components/ui-base/breadcrumbs.tsx +0 -44
  125. package/src/client/components/ui-base/copy-markdown.tsx +0 -107
  126. package/src/client/components/ui-base/error-boundary.tsx +0 -15
  127. package/src/client/components/ui-base/github-stars.tsx +0 -29
  128. package/src/client/components/ui-base/icons.tsx +0 -240
  129. package/src/client/components/ui-base/index.ts +0 -16
  130. package/src/client/components/ui-base/last-updated.tsx +0 -27
  131. package/src/client/components/ui-base/navbar.tsx +0 -266
  132. package/src/client/components/ui-base/not-found.tsx +0 -26
  133. package/src/client/components/ui-base/on-this-page.tsx +0 -57
  134. package/src/client/components/ui-base/page-nav.tsx +0 -50
  135. package/src/client/components/ui-base/search-dialog.tsx +0 -163
  136. package/src/client/components/ui-base/search-highlight.tsx +0 -10
  137. package/src/client/components/ui-base/sidebar.tsx +0 -92
  138. package/src/client/components/ui-base/tabs.tsx +0 -83
  139. package/src/client/components/ui-base/theme-toggle.tsx +0 -130
  140. package/src/client/components/ui-base/version-i18n.tsx +0 -80
  141. package/src/client/hooks/index.ts +0 -13
  142. package/src/client/hooks/use-analytics.ts +0 -272
  143. package/src/client/hooks/use-breadcrumbs.ts +0 -22
  144. package/src/client/hooks/use-i18n.ts +0 -182
  145. package/src/client/hooks/use-localized-to.ts +0 -113
  146. package/src/client/hooks/use-location.ts +0 -5
  147. package/src/client/hooks/use-navbar.ts +0 -130
  148. package/src/client/hooks/use-page-nav.ts +0 -46
  149. package/src/client/hooks/use-routes.ts +0 -108
  150. package/src/client/hooks/use-search-highlight.ts +0 -185
  151. package/src/client/hooks/use-search.ts +0 -118
  152. package/src/client/hooks/use-sidebar.ts +0 -205
  153. package/src/client/hooks/use-tabs.ts +0 -46
  154. package/src/client/hooks/use-version.ts +0 -111
  155. package/src/client/index.ts +0 -31
  156. package/src/client/mdx.ts +0 -2
  157. package/src/client/primitives.ts +0 -19
  158. package/src/client/ssg/boltdocs-shell.tsx +0 -148
  159. package/src/client/ssg/create-routes.tsx +0 -473
  160. package/src/client/ssg/index.ts +0 -4
  161. package/src/client/ssg/mdx-page.tsx +0 -38
  162. package/src/client/store/boltdocs-context.tsx +0 -137
  163. package/src/client/theme/neutral.css +0 -141
  164. package/src/client/theme/reset.css +0 -189
  165. package/src/client/types.ts +0 -116
  166. package/src/client/utils/cn.ts +0 -6
  167. package/src/client/utils/copy-clipboard.ts +0 -22
  168. package/src/client/utils/get-base-file-path.ts +0 -21
  169. package/src/client/utils/github.ts +0 -121
  170. package/src/client/utils/i18n.ts +0 -23
  171. package/src/client/utils/path.ts +0 -9
  172. package/src/client/utils/react-to-text.ts +0 -34
  173. package/src/client/virtual.d.ts +0 -24
  174. /package/dist/{worker-pool-Bd8Y9KDv.mjs → worker-pool-CGn7DrLb.mjs} +0 -0
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import{t as e}from"./rolldown-runtime-fkIsjY3S.mjs";import{_ as t,i as n,l as r,u as i,v as a}from"./utils-CG65J0Sc.mjs";import{createRequire as o}from"node:module";import{loadConfigFromFile as s}from"vite";import c from"node:path";import{fdir as l}from"fdir";import u from"fs";import{z as d}from"zod";import*as f from"@bdocs/dui";import{bullet as p,colors as m,confirm as ee,dividerLog as h,double as g,error as _,info as v,round as te,single as ne,success as y,tasks as re,warn as b}from"@bdocs/dui";import x from"node:fs";import S from"path";import ie from"picomatch";import{distance as C}from"fastest-levenshtein";const w=d.object({icon:d.string().max(50),link:d.string().url()});d.object({text:d.string().max(2e3).optional()});const T=d.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),E=d.object({name:d.string(),enforce:d.enum([`pre`,`post`]).optional(),version:d.string().optional(),boltdocsVersion:d.string().optional(),permissions:d.array(T).optional(),remarkPlugins:d.array(d.any()).optional(),rehypePlugins:d.array(d.any()).optional(),vitePlugins:d.array(d.any()).optional(),components:d.record(d.string(),d.string()).optional(),hooks:d.record(d.string(),d.any()).optional()}),D=d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),description:d.union([d.string(),d.record(d.string(),d.string())]).optional(),logo:d.union([d.string(),d.object({dark:d.string(),light:d.string(),alt:d.string().optional(),width:d.number().optional(),height:d.number().optional()})]).optional(),navbar:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string(),items:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string()})).optional()})).optional(),sidebar:d.record(d.string(),d.array(d.object({text:d.string(),link:d.string()}))).optional(),sidebarGroups:d.record(d.string(),d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),icon:d.string().optional()})).optional(),socialLinks:d.array(w).optional(),editLink:d.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:d.string().url().optional(),version:d.string().max(50).optional(),githubRepo:d.string().max(100).optional(),favicon:d.string().optional(),tabs:d.array(d.object({id:d.string(),text:d.union([d.string(),d.record(d.string(),d.string())]),icon:d.string().optional()})).optional(),codeTheme:d.union([d.string(),d.object({light:d.string(),dark:d.string()})]).optional()}),O=d.union([d.string(),d.object({rules:d.array(d.object({userAgent:d.string(),allow:d.union([d.string(),d.array(d.string())]).optional(),disallow:d.union([d.string(),d.array(d.string())]).optional()})).optional(),sitemaps:d.array(d.string().url()).optional()})]),k=d.object({defaultLocale:d.string(),locales:d.union([d.record(d.string(),d.string()),d.array(d.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:d.record(d.string(),d.object({label:d.string().optional(),direction:d.enum([`ltr`,`rtl`]).optional(),htmlLang:d.string().optional(),calendar:d.string().optional()})).optional()}),A=d.object({defaultVersion:d.string(),prefix:d.string().optional(),versions:d.array(d.object({label:d.string(),path:d.string()}))}),j=d.object({headers:d.record(d.string(),d.string()).optional(),enableCSP:d.boolean().optional(),customHeaders:d.record(d.string(),d.string()).optional()}),M=d.object({metatags:d.record(d.string(),d.string()).optional(),indexing:d.enum([`all`,`public`]).optional(),thumbnails:d.object({background:d.string().optional()}).optional()}),N=d.object({measurementId:d.string().min(1,`Measurement ID is required for GA4`),debug:d.boolean().optional(),anonymizeIp:d.boolean().optional(),sendPageView:d.boolean().optional(),cookieFlags:d.string().optional(),autoTrack:d.object({pageViews:d.boolean().optional(),downloads:d.boolean().optional(),externalLinks:d.boolean().optional(),search:d.boolean().optional()}).optional()}),ae=d.object({tagId:d.string().min(1,`Tag ID is required for GTM`),dataLayerName:d.string().optional(),preview:d.string().optional()}),oe=d.object({ga4:N.optional(),gtm:ae.optional()}),se=d.object({siteUrl:d.string().url().optional(),docsDir:d.string().optional(),base:d.string().optional(),theme:D.optional(),i18n:k.optional(),versions:A.optional(),plugins:d.array(E).optional(),robots:O.optional(),security:j.optional(),seo:M.optional(),integrations:oe.optional(),vite:d.record(d.string(),d.unknown()).optional()});function P(e,t,n=process.cwd()){let r=c.resolve(n,`.boltdocs`);x.existsSync(r)||x.mkdirSync(r,{recursive:!0});let i=e.i18n?Object.keys(e.i18n.locales):[],a=e.versions?e.versions.versions.map(e=>e.path):[],o=i.length>0?i.map(e=>`'${e}'`).join(` | `):`string`,s=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=[`tsx`,`ts`,`jsx`,`js`],u=``,d=``;for(let e of l){let i=c.resolve(n,t,`mdx-components.${e}`);if(x.existsSync(i)){let e=c.join(n,t,`mdx-components`),i=c.relative(r,e).replace(/\\/g,`/`);u=`import type * as MdxComponentsModule from '${i.startsWith(`.`)?i:`./${i}`}'\n`,d=` MdxComponents: typeof MdxComponentsModule`;break}}let f=`// This file is automatically generated by Boltdocs.
7
+ // Do not edit this file manually.
8
+
9
+ ${u}declare global {
10
+ namespace Boltdocs {
11
+ interface Types {
12
+ Locale: ${o}
13
+ Version: ${s}${d?`\n${d}`:``}
14
+ }
15
+ }
16
+ }
17
+
18
+ export {}
19
+ `;x.writeFileSync(c.resolve(r,`types.d.ts`),f)}function ce(e){return e}const F=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function I(e,n=process.cwd()){let r=n,i={docsDir:c.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},a={};for(let e of F){let t=c.resolve(r,e);if(x.existsSync(t))try{let e=await s({command:`serve`,mode:`development`},t,r);if(e){a=e.config;break}}catch(t){b(`Failed to load config from ${e}:`,t)}}let o={title:a.title,description:a.description,logo:a.logo,favicon:a.favicon,navbar:a.navbar,sidebar:a.sidebar,sidebarGroups:a.theme?.sidebarGroups,socialLinks:a.socialLinks,githubRepo:a.githubRepo,tabs:a.tabs,codeTheme:a.codeTheme,communityHelp:a.communityHelp,version:a.version,editLink:a.editLink,...a.theme||{}},l=Object.fromEntries(Object.entries(o).filter(([e,t])=>t!==void 0));l.navbar&&=l.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let u={docsDir:c.resolve(e),theme:{...i.theme,...l},i18n:a.i18n?{...a.i18n,locales:Array.isArray(a.i18n.locales)?Object.fromEntries(a.i18n.locales.map(e=>[e,e])):a.i18n.locales}:void 0,versions:a.versions,siteUrl:a.siteUrl,base:a.base,seo:a.seo,plugins:a.plugins||[],robots:a.robots,security:a.security,integrations:a.integrations,vite:a.vite},d=se.safeParse(u);if(!d.success)throw new t(`Invalid Boltdocs configuration:\n${d.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
20
+ `)}`);return d.data}async function le(e,t=process.cwd()){let n=await I(e,t);return P(n,e,t),n}const ue=o(import.meta.url);let L=0;function de(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function fe(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function pe(){try{return ue(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function R(){let e=Date.now();if(e-L<864e5)return;L=e;let t=await pe();if(t===`0.0.0`)return;let n=await fe();n&&de(n,t)&&console.log(f.updateAvailable(t,n))}const z={$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}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.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`},exclude:[]};function B(e,t,n){return e.doctorConfig.severity[t]||n}async function me(e,t){x.existsSync(t)||x.mkdirSync(t,{recursive:!0});let n=c.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=c.join(t,`${n}.${r}.bak`);x.copyFileSync(e,i)}const V=new Map;function H(e){let t=V.get(e);if(t)return t;let n=(async()=>{let t=await i(e,!1);return{raw:t.raw,data:t.data,content:t.content}})();return V.set(e,n),n}const U=new Map;function W(e){if(U.has(e))return U.get(e);let t=!1;try{t=x.existsSync(e)&&x.statSync(e).isFile()}catch{t=!1}return U.set(e,t),t}async function G(e){let t=c.resolve(e,`doctor.json`);if(x.existsSync(t))try{let e=JSON.parse(x.readFileSync(t,`utf-8`));return{...z,...e,checks:{...z.checks,...e.checks,metadata:{...z.checks.metadata,...e.checks?.metadata},links:{...z.checks.links,...e.checks?.links},i18n:{...z.checks.i18n,...e.checks?.i18n}},fix:{...z.fix,...e.fix},reporting:{...z.reporting,...e.reporting},severity:{...z.severity,...e.severity},exclude:[...z.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return z}async function K(e,t=process.cwd(),r,i){let a=c.resolve(t,`.boltdocs`);x.existsSync(a)||x.mkdirSync(a,{recursive:!0});let o=i;o||=await new l().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let s=r?.base||`/docs`,u=[];for(let t=0;t<o.length;t+=100){let r=o.slice(t,t+100),i=await Promise.all(r.map(async t=>{let r=c.isAbsolute(t)?t:c.resolve(e,t),i=c.relative(e,r),{data:a}=await H(r),o;return o=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:n(i),s===`/`?o:(s.endsWith(`/`)?s:s+`/`)+(o.startsWith(`/`)?o.substring(1):o)}));u.push(...i)}u.includes(s)||u.push(s);let d={routes:Array.from(new Set(u)).sort(),timestamp:Date.now()};return x.writeFileSync(c.resolve(a,`link-tree.json`),JSON.stringify(d,null,2)),d}function he(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-C(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-C(e,t)/Math.max(e.length,t.length)}const q=new Map;function J(e,t){if(q.has(e))return q.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=he(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return q.set(e,a),a}async function Y(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:n,titleMax:i,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let l of e.files){let u=r(c.relative(e.docsDir,l));try{let{raw:r,data:c}=await H(l);if(r.trim().startsWith(`---`)&&r.split(`---`).length>=3&&Object.keys(c).length===0){let n=B(e,`malformedFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=a.safeParse(c);if(!d.success){let n=B(e,`invalidFrontmatter`,`high`);if(n!==`off`)for(let e of d.error.issues)t.push({file:u,level:n,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let n of f)if(c[n]===void 0){let r=B(e,`missingMetadata`,`warning`);r!==`off`&&t.push({file:u,level:r,message:`Missing required frontmatter field: "${n}".`,suggestion:`Add the "${n}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let n=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of n)if(c[r]&&isNaN(Date.parse(String(c[r])))){let n=B(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${c[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(c.title){let r=String(c.title);if(r.length<n){let i=B(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,level:i,message:`Title is too short (${r.length} chars).`,suggestion:`Titles should be at least ${n} characters for better SEO.`})}else if(r.length>i){let n=B(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Title is too long (${r.length} chars).`,suggestion:`Titles should be under ${i} characters.`})}let a=s.get(r)||[];a.push(u),s.set(r,a)}if(c.description&&String(c.description).length<o){let n=B(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(n){let r=B(e,`malformedFrontmatter`,`high`);r!==`off`&&t.push({file:u,level:r,message:`Malformed frontmatter (YAML error): ${n.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}for(let[n,r]of s.entries())if(r.length>1){let i=B(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)t.push({file:e,level:i,message:`Duplicate title found: "${n}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return t}async function X(e){let t=[],{internal:n,external:i,ignore:a,timeout:o,concurrency:s}=e.doctorConfig.checks.links;if(!n&&!i&&!e.options.checkExternal)return t;let l=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,u=new Set,d=5e5;for(let o of e.files){let s=r(c.relative(e.docsDir,o)),{content:f}=await H(o),p=[...(f.length>d?f.slice(0,d):f).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(l)];for(let r of p){let l=r[1]||r[2],d=!!r[1];if(!l||a.some(e=>l.includes(e)))continue;if(/^https?:\/\//i.test(l)){(i||e.options.checkExternal)&&u.add({url:l,file:o});continue}if(!n||/^(mailto|tel|#)/i.test(l))continue;let f;try{f=decodeURIComponent(l.split(`#`)[0].split(`?`)[0])}catch{f=l.split(`#`)[0].split(`?`)[0]}if(!f)continue;let p=!1,m=``;if(f.startsWith(`/`))if(e.routeIndex.has(f)||e.routeIndexWithSlash.has(f)||e.routeIndexWithoutSlash.has(f))p=!0;else{let t=e.basePrefix+(f.startsWith(`/`)?f:`/`+f);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))p=!1,m=t;else{let t=e.config.base!==`/`&&f.startsWith(e.config.base||`/`)?f.substring((e.config.base||`/`).length):f,n=t.startsWith(`/`)?t.substring(1):t;m=c.join(e.docsDir,n),p=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>W(m+e))}}else m=c.resolve(c.dirname(o),f),p=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>W(m+e));if(!p){let{bestMatch:n,similarity:r}=J(f,e.linkTree.routes),i=!1,a=e.basePrefix+(f.startsWith(`/`)?f:`/`+f);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(n=a,r=1,i=!0);let c=r>.6||i,u=r>.75&&n!==f||i,p=B(e,`brokenLink`,`high`);p!==`off`&&t.push({file:s,level:p,message:`Broken internal link: "${l}"`,suggestion:c?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:u?async()=>{let e=l.includes(`#`)?`#`+l.split(`#`)[1]:``,t=d?`(${l})`:`href="${l}"`,r=d?`(${n}${e})`:`href="${n}${e}"`,i=x.readFileSync(o,`utf-8`).replace(t,r);x.writeFileSync(o,i),V.delete(o)}:void 0})}}}if(u.size>0){v(m.gray(`Verifying ${u.size} external links...`));let n=new Map;for(let e of u)n.has(e.url)||n.set(e.url,[]),n.get(e.url).push(e.file);let i=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),o),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(n.keys()),l=[];for(let e=0;e<a.length;e+=s){let t=a.slice(e,e+s),n=await Promise.allSettled(t.map(i));l.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of l)if(!i.ok){let a=B(e,`brokenLink`,`warning`);if(a!==`off`){let o=n.get(i.url)||[];for(let n of o)t.push({file:r(c.relative(e.docsDir,n)),level:a,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return t}async function Z(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:n,locales:i}=e.config.i18n,a=Object.keys(i),o=a.filter(e=>e!==n);for(let i of e.files){let s=r(c.relative(e.docsDir,i)),l=s.split(`/`),u=l[0];if(u===n){let n=l.slice(1).join(`/`);for(let r of o){let a=c.join(e.docsDir,r,n);if(!W(a)){let o=B(e,`missingTranslation`,`warning`);o!==`off`&&t.push({file:s,level:o,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${n}".`,fix:async()=>{let e=c.dirname(a);x.existsSync(e)||x.mkdirSync(e,{recursive:!0}),x.copyFileSync(i,a)}})}}}else if(a.includes(u)){let r=l.slice(1).join(`/`);if(!W(c.join(e.docsDir,n,r))){let a=B(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:s,level:a,message:`Orphaned translation (source missing in "${n}")`,suggestion:`Remove this file or create the source at "${n}/${r}".`,fix:async()=>{x.unlinkSync(i)}})}}}return t}async function Q(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=B(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}=J(r.link,e.linkTree.routes),a=i>.6,o=B(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=B(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}var ge=e({DEFAULT_DOCTOR_CONFIG:()=>z,checkI18n:()=>Z,checkLinks:()=>X,checkMetadata:()=>Y,checkSidebar:()=>Q,doctorAction:()=>_e,doctorInit:()=>$,generateLinkTree:()=>K,loadDoctorConfig:()=>G});async function $(e){let t=S.resolve(e,`doctor.json`);if(u.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{u.writeFileSync(t,JSON.stringify(z,null,2)),y(`Created "doctor.json" with default configuration.`)}catch(e){_(`Failed to create "doctor.json": ${e}`)}}async function _e(e=process.cwd(),t={}){if(t.init){await $(e);return}R();try{let n=await G(e),{format:r}=n.reporting,i=performance.now(),a=await I(`docs`,e),o=S.resolve(e,`docs`);u.existsSync(o)||(r===`pretty`&&_(`Docs dir not found at ${o}`),process.exit(1)),r===`pretty`&&console.log(g(`✦ DOCTOR — Documentation Health Check`,[` ${m.dim(`Docs dir:`)} ${o}`,` ${m.dim(`Reports:`)} ${e}/.boltdocs/`])),r===`pretty`&&v(m.dim(`🔍 Discovering files and routes...`));let s=ie(n.exclude||[]),c=await new l().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=S.relative(o,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!s(t)&&!n}).crawl(o).withPromise();for(let e of c)U.set(e,!0);let d=await K(o,e,a,c),f=a.base||`/`,b=f===`/`?``:f.endsWith(`/`)?f.slice(0,-1):f,x={root:e,docsDir:o,config:a,doctorConfig:n,linkTree:d,files:c,options:t,routeIndex:new Set(d.routes),routeIndexWithSlash:new Set(d.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(d.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:b};r===`pretty`&&v(m.dim(`🧪 Running diagnostic checks in parallel...`));let[C,w,T,E]=await Promise.all([Y(x),X(x),Z(x),Q(x)]),D=[...C,...w,...T,...E];r===`pretty`&&console.log(`\n${re([{label:`Metadata checks ${C.length>0?`— ${C.length} issue${C.length===1?``:`s`}`:`— OK`}`,done:C.length===0},{label:`Link checks ${w.length>0?`— ${w.length} issue${w.length===1?``:`s`}`:`— OK`}`,done:w.length===0},{label:`i18n checks ${T.length>0?`— ${T.length} issue${T.length===1?``:`s`}`:`— OK`}`,done:T.length===0},{label:`Sidebar checks ${E.length>0?`— ${E.length} issue${E.length===1?``:`s`}`:`— OK`}`,done:E.length===0}])}`);let O=0;if(t.fix){for(let e of D)if(e.fix){if(x.doctorConfig.fix.confirmChanges&&!await ee(`Fix issue in "${e.file}": ${e.message}?`))continue;if(x.doctorConfig.fix.backupFiles){let t=S.resolve(x.docsDir,e.file);u.existsSync(t)&&await me(t,S.resolve(x.root,x.doctorConfig.fix.backupPath))}await e.fix(),O++}}let k=((performance.now()-i)/1e3).toFixed(2),A=D.filter(e=>e.level===`high`).length,j=D.filter(e=>e.level===`warning`).length,M=D.filter(e=>e.level===`low`).length,N={summary:{total:D.length,high:A,warning:j,low:M,fixed:O,duration:k},issues:D.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=S.resolve(e,n.reporting.outputFile);u.existsSync(S.dirname(t))||u.mkdirSync(S.dirname(t),{recursive:!0}),u.writeFileSync(t,JSON.stringify(N,null,2))}if(r===`json`)console.log(JSON.stringify(N,null,2));else if(r===`pretty`){let e=D.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(D.length>0){h();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?m.red:n.level===`warning`?m.yellow:m.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${m.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${m.green(`✅ Fixed automatically`)}`)}console.log(`\n${ne(`📄 ${n}`,e)}`)}h()}if(D.length===0)console.log(te(`✨ Documentation Health Check`,[` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${m.dim(`Scanned ${c.length} file${c.length===1?``:`s`} in ${k}s`)}`]));else{let e=[];A>0&&e.push(m.red(`${A} Critical Error${A===1?``:`s`}`)),j>0&&e.push(m.yellow(`${j} Warning${j===1?``:`s`}`)),M>0&&e.push(m.blue(`${M} Improvement${M===1?``:`s`}`));let t=[...p(e).split(`
21
+ `).map(e=>e.trimStart()),``,m.dim(`Scanned ${c.length} file${c.length===1?``:`s`} in ${k}s`)];console.log(`\n${g(`Diagnosis Results`,t)}\n`),O>0&&y(`Successfully fixed ${O} issues automatically!`),A>0?_(`Please fix the critical errors before building for production.`):y(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&A>0&&process.exit(1),n.reporting.maxWarnings!==-1&&j>n.reporting.maxWarnings&&(r===`pretty`&&_(`Failed: Too many warnings (${j} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){_(`Doctor failed: ${e}`),process.exit(1)}}export{I as a,P as c,F as i,E as l,K as n,le as o,R as r,ce as s,ge as t};
@@ -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-BHc9ua6r.cjs`);exports.doctorAction=e.t;
6
+ const e=require(`./doctor-jMxWZyLJ.cjs`);exports.doctorAction=e.t;
@@ -0,0 +1,21 @@
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-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`);let n=require(`vite`),r=require(`node:path`);r=e.t(r);let i=require(`fdir`),a=require(`fs`);a=e.t(a);let o=require(`zod`),s=require(`@bdocs/dui`);s=e.t(s);let c=require(`node:fs`);c=e.t(c);let l=require(`path`);l=e.t(l);let u=require(`picomatch`);u=e.t(u);let d=require(`node:module`),f=require(`fastest-levenshtein`);const p=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()});o.z.object({text:o.z.string().max(2e3).optional()});const m=o.z.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),h=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),permissions:o.z.array(m).optional(),remarkPlugins:o.z.array(o.z.any()).optional(),rehypePlugins:o.z.array(o.z.any()).optional(),vitePlugins:o.z.array(o.z.any()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),hooks:o.z.record(o.z.string(),o.z.any()).optional()}),g=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(p).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()}),_=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()})]),v=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()}),y=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()}))}),b=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()}),x=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()}),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({ga4:S.optional(),gtm:C.optional()}),T=o.z.object({siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:g.optional(),i18n:v.optional(),versions:y.optional(),plugins:o.z.array(h).optional(),robots:_.optional(),security:b.optional(),seo:x.optional(),integrations:w.optional(),vite:o.z.record(o.z.string(),o.z.unknown()).optional()});function E(e,t,n=process.cwd()){let i=r.default.resolve(n,`.boltdocs`);c.default.existsSync(i)||c.default.mkdirSync(i,{recursive:!0});let a=e.i18n?Object.keys(e.i18n.locales):[],o=e.versions?e.versions.versions.map(e=>e.path):[],s=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=o.length>0?o.map(e=>`'${e}'`).join(` | `):`string`,u=[`tsx`,`ts`,`jsx`,`js`],d=``,f=``;for(let e of u){let a=r.default.resolve(n,t,`mdx-components.${e}`);if(c.default.existsSync(a)){let e=r.default.join(n,t,`mdx-components`),a=r.default.relative(i,e).replace(/\\/g,`/`);d=`import type * as MdxComponentsModule from '${a.startsWith(`.`)?a:`./${a}`}'\n`,f=` MdxComponents: typeof MdxComponentsModule`;break}}let p=`// This file is automatically generated by Boltdocs.
7
+ // Do not edit this file manually.
8
+
9
+ ${d}declare global {
10
+ namespace Boltdocs {
11
+ interface Types {
12
+ Locale: ${s}
13
+ Version: ${l}${f?`\n${f}`:``}
14
+ }
15
+ }
16
+ }
17
+
18
+ export {}
19
+ `;c.default.writeFileSync(r.default.resolve(i,`types.d.ts`),p)}function D(e){return e}const O=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function k(e,i=process.cwd()){let a=i,o={docsDir:r.default.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},l={};for(let e of O){let t=r.default.resolve(a,e);if(c.default.existsSync(t))try{let e=await(0,n.loadConfigFromFile)({command:`serve`,mode:`development`},t,a);if(e){l=e.config;break}}catch(t){(0,s.warn)(`Failed to load config from ${e}:`,t)}}let u={title:l.title,description:l.description,logo:l.logo,favicon:l.favicon,navbar:l.navbar,sidebar:l.sidebar,sidebarGroups:l.theme?.sidebarGroups,socialLinks:l.socialLinks,githubRepo:l.githubRepo,tabs:l.tabs,codeTheme:l.codeTheme,communityHelp:l.communityHelp,version:l.version,editLink:l.editLink,...l.theme||{}},d=Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));d.navbar&&=d.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let f={docsDir:r.default.resolve(e),theme:{...o.theme,...d},i18n:l.i18n?{...l.i18n,locales:Array.isArray(l.i18n.locales)?Object.fromEntries(l.i18n.locales.map(e=>[e,e])):l.i18n.locales}:void 0,versions:l.versions,siteUrl:l.siteUrl,base:l.base,seo:l.seo,plugins:l.plugins||[],robots:l.robots,security:l.security,integrations:l.integrations,vite:l.vite},p=T.safeParse(f);if(!p.success)throw new t._(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
20
+ `)}`);return p.data}async function A(e,t=process.cwd()){let n=await k(e,t);return E(n,e,t),n}const j=(0,d.createRequire)(require(`url`).pathToFileURL(__filename).href);let M=0;function N(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function P(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function F(){try{return j(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function I(){let e=Date.now();if(e-M<864e5)return;M=e;let t=await F();if(t===`0.0.0`)return;let n=await P();n&&N(n,t)&&console.log(s.updateAvailable(t,n))}const L={$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}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.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`},exclude:[]};function R(e,t,n){return e.doctorConfig.severity[t]||n}async function z(e,t){c.default.existsSync(t)||c.default.mkdirSync(t,{recursive:!0});let n=r.default.basename(e),i=new Date().toISOString().replace(/[:.]/g,`-`),a=r.default.join(t,`${n}.${i}.bak`);c.default.copyFileSync(e,a)}const B=new Map;function V(e){let n=B.get(e);if(n)return n;let r=(async()=>{let n=await t.u(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return B.set(e,r),r}const H=new Map;function U(e){if(H.has(e))return H.get(e);let t=!1;try{t=c.default.existsSync(e)&&c.default.statSync(e).isFile()}catch{t=!1}return H.set(e,t),t}async function W(e){let t=r.default.resolve(e,`doctor.json`);if(c.default.existsSync(t))try{let e=JSON.parse(c.default.readFileSync(t,`utf-8`));return{...L,...e,checks:{...L.checks,...e.checks,metadata:{...L.checks.metadata,...e.checks?.metadata},links:{...L.checks.links,...e.checks?.links},i18n:{...L.checks.i18n,...e.checks?.i18n}},fix:{...L.fix,...e.fix},reporting:{...L.reporting,...e.reporting},severity:{...L.severity,...e.severity},exclude:[...L.exclude,...e.exclude||[]]}}catch(e){(0,s.warn)(`Failed to parse doctor.json: ${e}`)}return L}async function G(e,n=process.cwd(),a,o){let s=r.default.resolve(n,`.boltdocs`);c.default.existsSync(s)||c.default.mkdirSync(s,{recursive:!0});let l=o;l||=await new i.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=a?.base||`/docs`,d=[];for(let n=0;n<l.length;n+=100){let i=l.slice(n,n+100),a=await Promise.all(i.map(async n=>{let i=r.default.isAbsolute(n)?n:r.default.resolve(e,n),a=r.default.relative(e,i),{data:o}=await V(i),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.i(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return c.default.writeFileSync(r.default.resolve(s,`link-tree.json`),JSON.stringify(f,null,2)),f}function K(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-(0,f.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,f.distance)(e,t)/Math.max(e.length,t.length)}const q=new Map;function J(e,t){if(q.has(e))return q.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=K(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return q.set(e,a),a}async function Y(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:i,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.l(r.default.relative(e.docsDir,c));try{let{raw:r,data:u}=await V(c);if(r.trim().startsWith(`---`)&&r.split(`---`).length>=3&&Object.keys(u).length===0){let t=R(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.v.safeParse(u);if(!d.success){let t=R(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=R(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]&&isNaN(Date.parse(String(u[r])))){let t=R(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<i){let r=R(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${i} characters for better SEO.`})}else if(t.length>a){let r=R(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let r=s.get(t)||[];r.push(l),s.set(t,r)}if(u.description&&String(u.description).length<o){let t=R(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){let r=R(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=R(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}async function X(e){let n=[],{internal:i,external:a,ignore:o,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!i&&!a&&!e.options.checkExternal)return n;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let s of e.files){let l=t.l(r.default.relative(e.docsDir,s)),{content:u}=await V(s),m=[...(u.length>p?u.slice(0,p):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let t of m){let u=t[1]||t[2],d=!!t[1];if(!u||o.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(a||e.options.checkExternal)&&f.add({url:u,file:s});continue}if(!i||/^(mailto|tel|#)/i.test(u))continue;let p;try{p=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{p=u.split(`#`)[0].split(`?`)[0]}if(!p)continue;let m=!1,h=``;if(p.startsWith(`/`))if(e.routeIndex.has(p)||e.routeIndexWithSlash.has(p)||e.routeIndexWithoutSlash.has(p))m=!0;else{let t=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))m=!1,h=t;else{let t=e.config.base!==`/`&&p.startsWith(e.config.base||`/`)?p.substring((e.config.base||`/`).length):p,n=t.startsWith(`/`)?t.substring(1):t;h=r.default.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>U(h+e))}}else h=r.default.resolve(r.default.dirname(s),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>U(h+e));if(!m){let{bestMatch:t,similarity:r}=J(p,e.linkTree.routes),i=!1,a=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(t=a,r=1,i=!0);let o=r>.6||i,f=r>.75&&t!==p||i,m=R(e,`brokenLink`,`high`);m!==`off`&&n.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:o?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=d?`(${u})`:`href="${u}"`,r=d?`(${t}${e})`:`href="${t}${e}"`,i=c.default.readFileSync(s,`utf-8`).replace(n,r);c.default.writeFileSync(s,i),B.delete(s)}:void 0})}}}if(f.size>0){(0,s.info)(s.colors.gray(`Verifying ${f.size} external links...`));let i=new Map;for(let e of f)i.has(e.url)||i.set(e.url,[]),i.get(e.url).push(e.file);let a=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),l),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},o=Array.from(i.keys()),c=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(a));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let a of c)if(!a.ok){let o=R(e,`brokenLink`,`warning`);if(o!==`off`){let s=i.get(a.url)||[];for(let i of s)n.push({file:t.l(r.default.relative(e.docsDir,i)),level:o,message:`Broken external link: "${a.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${a.error||`Status >= 400`}`})}}}return n}async function Z(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:i,locales:a}=e.config.i18n,o=Object.keys(a),s=o.filter(e=>e!==i);for(let a of e.files){let l=t.l(r.default.relative(e.docsDir,a)),u=l.split(`/`),d=u[0];if(d===i){let t=u.slice(1).join(`/`);for(let i of s){let o=r.default.join(e.docsDir,i,t);if(!U(o)){let s=R(e,`missingTranslation`,`warning`);s!==`off`&&n.push({file:l,level:s,message:`Missing translation for locale "${i}"`,suggestion:`Create a version at "${i}/${t}".`,fix:async()=>{let e=r.default.dirname(o);c.default.existsSync(e)||c.default.mkdirSync(e,{recursive:!0}),c.default.copyFileSync(a,o)}})}}}else if(o.includes(d)){let t=u.slice(1).join(`/`);if(!U(r.default.join(e.docsDir,i,t))){let r=R(e,`missingTranslation`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Orphaned translation (source missing in "${i}")`,suggestion:`Remove this file or create the source at "${i}/${t}".`,fix:async()=>{c.default.unlinkSync(a)}})}}}return n}async function Q(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=R(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}=J(r.link,e.linkTree.routes),a=i>.6,o=R(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=R(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 $(e){let t=l.default.resolve(e,`doctor.json`);if(a.default.existsSync(t)){(0,s.warn)(`"doctor.json" already exists at ${e}.`);return}try{a.default.writeFileSync(t,JSON.stringify(L,null,2)),(0,s.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,s.error)(`Failed to create "doctor.json": ${e}`)}}async function ee(e=process.cwd(),t={}){if(t.init){await $(e);return}I();try{let n=await W(e),{format:r}=n.reporting,o=performance.now(),c=await k(`docs`,e),d=l.default.resolve(e,`docs`);a.default.existsSync(d)||(r===`pretty`&&(0,s.error)(`Docs dir not found at ${d}`),process.exit(1)),r===`pretty`&&console.log((0,s.double)(`✦ DOCTOR — Documentation Health Check`,[` ${s.colors.dim(`Docs dir:`)} ${d}`,` ${s.colors.dim(`Reports:`)} ${e}/.boltdocs/`])),r===`pretty`&&(0,s.info)(s.colors.dim(`🔍 Discovering files and routes...`));let f=(0,u.default)(n.exclude||[]),p=await new i.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=l.default.relative(d,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!f(t)&&!n}).crawl(d).withPromise();for(let e of p)H.set(e,!0);let m=await G(d,e,c,p),h=c.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:d,config:c,doctorConfig:n,linkTree:m,files:p,options:t,routeIndex:new Set(m.routes),routeIndexWithSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:g};r===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let[v,y,b,x]=await Promise.all([Y(_),X(_),Z(_),Q(_)]),S=[...v,...y,...b,...x];r===`pretty`&&console.log(`\n${(0,s.tasks)([{label:`Metadata checks ${v.length>0?`— ${v.length} issue${v.length===1?``:`s`}`:`— OK`}`,done:v.length===0},{label:`Link checks ${y.length>0?`— ${y.length} issue${y.length===1?``:`s`}`:`— OK`}`,done:y.length===0},{label:`i18n checks ${b.length>0?`— ${b.length} issue${b.length===1?``:`s`}`:`— OK`}`,done:b.length===0},{label:`Sidebar checks ${x.length>0?`— ${x.length} issue${x.length===1?``:`s`}`:`— OK`}`,done:x.length===0}])}`);let C=0;if(t.fix){for(let e of S)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await(0,s.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=l.default.resolve(_.docsDir,e.file);a.default.existsSync(t)&&await z(t,l.default.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),C++}}let w=((performance.now()-o)/1e3).toFixed(2),T=S.filter(e=>e.level===`high`).length,E=S.filter(e=>e.level===`warning`).length,D=S.filter(e=>e.level===`low`).length,O={summary:{total:S.length,high:T,warning:E,low:D,fixed:C,duration:w},issues:S.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=l.default.resolve(e,n.reporting.outputFile);a.default.existsSync(l.default.dirname(t))||a.default.mkdirSync(l.default.dirname(t),{recursive:!0}),a.default.writeFileSync(t,JSON.stringify(O,null,2))}if(r===`json`)console.log(JSON.stringify(O,null,2));else if(r===`pretty`){let e=S.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(S.length>0){(0,s.dividerLog)();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?s.colors.red:n.level===`warning`?s.colors.yellow:s.colors.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${s.colors.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${s.colors.green(`✅ Fixed automatically`)}`)}console.log(`\n${(0,s.single)(`📄 ${n}`,e)}`)}(0,s.dividerLog)()}if(S.length===0)console.log((0,s.round)(`✨ Documentation Health Check`,[` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${s.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${w}s`)}`]));else{let e=[];T>0&&e.push(s.colors.red(`${T} Critical Error${T===1?``:`s`}`)),E>0&&e.push(s.colors.yellow(`${E} Warning${E===1?``:`s`}`)),D>0&&e.push(s.colors.blue(`${D} Improvement${D===1?``:`s`}`));let t=[...(0,s.bullet)(e).split(`
21
+ `).map(e=>e.trimStart()),``,s.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${w}s`)];console.log(`\n${(0,s.double)(`Diagnosis Results`,t)}\n`),C>0&&(0,s.success)(`Successfully fixed ${C} issues automatically!`),T>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&&T>0&&process.exit(1),n.reporting.maxWarnings!==-1&&E>n.reporting.maxWarnings&&(r===`pretty`&&(0,s.error)(`Failed: Too many warnings (${E} > ${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 Y}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return I}});
@@ -0,0 +1,21 @@
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-CU-zTemE.cjs`);let t=require(`node:path`);t=e.t(t);let n=require(`@bdocs/dui`),r=require(`node:fs`);r=e.t(r);function i(e){return e.replace(/^v/,``).replace(/^\[|\]$/g,``)}function a(e){let t=e.match(/Thanks \[@(\w+)\]/);return t?t[1]:void 0}function o(e){let t=e.match(/Thanks \[@[^\]]+\]\(([^)]+)\)/);return t?t[1]:void 0}function s(e){let t=e.match(/\[`([a-f0-9]+)`\]/);return t?t[1]:void 0}function c(e){let t=e.match(/\[`[a-f0-9]+`\]\(([^)]+)\)/);return t?t[1]:void 0}function l(e,t){let n=e;return n=n.replace(/Thanks \[@[^\]]+\]\([^)]+\)/g,``),n=n.replace(/\[`[a-f0-9]+`\]\([^)]+\)/g,``),n=n.replace(/!\s*-/g,``),n=n.replace(/^-\s*/,``),n=n.replace(/^feat:\s*/i,``),n=n.replace(/^fix:\s*/i,``),n=n.replace(/^perf:\s*/i,``),n=n.replace(/^refactor:\s*/i,``),n=n.replace(/^docs:\s*/i,``),n=n.replace(/^chore:\s*/i,``),n=n.replace(/^\*\*[a-z]+(\([^)]+\))?:\*\*/gi,``),n.trim()}function u(e){let t=/^###\s+(Minor Changes|Major Changes|Patch Changes)/m.test(e),n=/^##\s+v?(\d+\.\d+\.\d+)/m.test(e);return t&&n}function d(e,t){for(let n=t+1;n<Math.min(t+10,e.length);n++){let t=e[n].trim().toLowerCase();if(t.startsWith(`### major`))return`major`;if(t.startsWith(`### minor`))return`minor`;if(t.startsWith(`### patch`))return`patch`}return null}function f(e){let t=e.split(`
7
+ `),n=[],r=null,u=``;for(let e=0;e<t.length;e++){let f=t[e].trim(),p=f.match(/^##\s+v?(\d+\.\d+\.\d+)/);if(p){r&&n.push(r);let a=i(p[1]),o=`patch`,s,c=f.match(/\((\d{4}-\d{2}-\d{2})\)/);c&&(s=c[1]);let l=d(t,e);l&&(o=l),r={version:a,type:o,date:s,changes:[]},u=``;continue}let m=f.match(/^###\s+(.+)$/i);if(m){u=m[1].toLowerCase();continue}if(f.startsWith(`- `)&&r){let e=f.slice(2).trim(),t=`other`;u.includes(`feat`)||u.includes(`minor`)?t=`feat`:u.includes(`fix`)||u.includes(`patch`)?t=`fix`:u.includes(`perf`)?t=`perf`:u.includes(`refactor`)?t=`refactor`:u.includes(`docs`)||u.includes(`documentation`)?t=`docs`:u.includes(`chore`)&&(t=`chore`);let n={type:t,message:l(e,t),author:a(e),authorUrl:o(e),commit:s(e),commitUrl:c(e)};r.changes.push(n)}}return r&&n.push(r),n}const p={name:`changesets`,detect:u,parse:f},m={added:`feat`,changed:`refactor`,deprecated:`fix`,removed:`fix`,fixed:`fix`,security:`fix`};function h(e){let t=/^#\s+Changelog/i.test(e),n=/^##\s*\[[\d.]+\]\s*-\s*\d{4}-\d{2}-\d{2}/m.test(e),r=/^###\s+(Added|Changed|Deprecated|Removed|Fixed|Security)$/m.test(e);return t&&n&&r}function g(e){let t=e.split(`
8
+ `),n=[],r=null,u=``;for(let e=0;e<t.length;e++){let d=t[e].trim(),f=d.match(/^##\s*\[(\d+\.\d+\.\d+[^\]]*)\]\s*-\s*(\d{4}-\d{2}-\d{2})/);if(f){r&&n.push(r),r={version:i(f[1]),type:`patch`,date:f[2],changes:[]},u=``;continue}if(d.match(/^##\s*\[Unreleased\]/i)){r&&n.push(r),r={version:`unreleased`,type:`patch`,date:void 0,changes:[]},u=``;continue}let p=d.match(/^###\s+(Added|Changed|Deprecated|Removed|Fixed|Security)$/i);if(p){u=p[1].toLowerCase();continue}if((d.startsWith(`- `)||d.startsWith(`* `))&&r){let e=d.slice(2).trim(),t=m[u]||`other`,n={type:t,message:l(e,t),author:a(e),authorUrl:o(e),commit:s(e),commitUrl:c(e)};r.changes.push(n)}}return r&&n.push(r),n}const _={name:`keep-a-changelog`,detect:h,parse:g},v={features:`feat`,"breaking changes":`feat`,breaking:`feat`,"bug fixes":`fix`,bugfixes:`fix`,fixes:`fix`,performance:`perf`,"build system":`chore`,builds:`chore`,tests:`chore`,chores:`chore`,documentation:`docs`,docs:`docs`,revert:`fix`,reverts:`fix`,refactor:`refactor`,"code refactoring":`refactor`};function y(e){let t=/^###\s+(Features|Bug Fixes|BREAKING CHANGES|Build System|Tests|Chores|Documentation|Reverts)/m.test(e),n=/^\*\*[a-z]+(\([^)]+\))?:\*\*/m.test(e),r=/^##\s*\[[\d.]+\]\([^)]+\)\s*\(\d{4}-\d{2}-\d{2}\)/m.test(e);return t&&(n||r)}function b(e){let t=e.split(`
9
+ `),n=[],r=null,u=``;for(let e=0;e<t.length;e++){let d=t[e].trim(),f=d.match(/^##\s*\[(\d+\.\d+\.\d+[^\]]*)\]\([^)]+\)\s*\((\d{4}-\d{2}-\d{2})\)/);if(f){r&&n.push(r);let a=i(f[1]),o=`patch`;for(let n=e+1;n<Math.min(e+20,t.length);n++){let e=t[n].toLowerCase();if(e.includes(`major`)||e.includes(`breaking`)){o=`major`;break}(e.includes(`minor`)||e.includes(`feat`))&&(o=`minor`)}r={version:a,type:o,date:f[2],changes:[]},u=``;continue}let p=d.match(/^###\s+(.+)$/i);if(p){u=p[1].toLowerCase();continue}if((d.startsWith(`- `)||d.startsWith(`* `))&&r){let e=d.slice(2).trim(),t=v[u]||`other`,n={type:t,message:l(e,t),author:a(e),authorUrl:o(e),commit:s(e),commitUrl:c(e)};r.changes.push(n)}}return r&&n.push(r),n}const x={name:`semantic-release`,detect:y,parse:b},S={features:`feat`,"breaking changes":`feat`,breaking:`feat`,"bug fixes":`fix`,fixes:`fix`,performance:`perf`,"build system":`chore`,builds:`chore`,tests:`chore`,chores:`chore`,documentation:`docs`,docs:`docs`,revert:`fix`,reverts:`fix`,refactor:`refactor`,"code refactoring":`refactor`};function C(e){let t=/^##\s+(\d+\.\d+\.\d+)\s*\((\d{4}-\d{2}-\d{2})\)/m.test(e),n=/^###\s+(Features|Bug Fixes|BREAKING CHANGES|Build System|Tests|Chores|Documentation)/m.test(e),r=/^[*-]\s+/m.test(e);return t&&n&&r}function w(e){let t=e.split(`
10
+ `),n=[],r=null,u=``;for(let e=0;e<t.length;e++){let d=t[e].trim(),f=d.match(/^##\s+(\d+\.\d+\.\d+)\s*\((\d{4}-\d{2}-\d{2})\)/);if(f){r&&n.push(r);let a=i(f[1]),o=`patch`;for(let n=e+1;n<Math.min(e+20,t.length);n++){let e=t[n].toLowerCase();if(e.includes(`major`)||e.includes(`breaking`)){o=`major`;break}(e.includes(`minor`)||e.includes(`feat`))&&(o=`minor`)}r={version:a,type:o,date:f[2],changes:[]},u=``;continue}let p=d.match(/^###\s+(.+)$/i);if(p){u=p[1].toLowerCase();continue}if((d.startsWith(`- `)||d.startsWith(`* `))&&r){let e=d.slice(2).trim(),t=S[u]||`other`,n={type:t,message:l(e,t),author:a(e),authorUrl:o(e),commit:s(e),commitUrl:c(e)};r.changes.push(n)}}return r&&n.push(r),n}const T=[_,x,{name:`standard-version`,detect:C,parse:w},p];function E(e){for(let t of T)if(t.detect(e))return{parser:t,name:t.name};return{parser:p,name:`changesets (fallback)`}}function D(e){let{parser:t}=E(e);return t?.parse(e)||[]}function O(e){return D(e)}function k(e){let n=t.default.resolve(e);if(!r.default.existsSync(n))throw Error(`Changelog file not found: ${n}`);return r.default.readFileSync(n,`utf-8`)}const A={feat:`Feature`,fix:`Bug Fix`,perf:`Performance`,refactor:`Refactor`,docs:`Documentation`,chore:`Chore`,other:`Other`};async function j(e,i={}){let a=t.default.resolve(i.output||`docs/changelog`),o=i.title||`Changelog`,s=i.inferTab!==!1,c=i.limit?Math.max(1,i.limit):void 0;(0,n.info)(`📄 Reading changelog from: ${e}`);let l=O(k(e));if(l.length===0){(0,n.warn)(`⚠️ No versions found in changelog`);return}let u=c?l.slice(0,c):l;r.default.existsSync(a)||(r.default.mkdirSync(a,{recursive:!0}),(0,n.info)(`📁 Created directory: ${a}`));for(let[e,i]of u.entries()){let c=M(i,o,s),l=`${e+1}.v${i.version}.md`,u=t.default.join(a,l);r.default.writeFileSync(u,c,`utf-8`),(0,n.success)(`Generated: ${l}`)}let d=[` ✨ Generated ${c&&c<l.length?`${c} of ${l.length} versions`:`${l.length} versions`} changelog pages in ${a}`,``,` 📝 Add this to your navbar in boltdocs.config.ts:`,` { label: '${o}', href: '/changelog' }`];console.log(`\n${(0,n.double)(`Changelog Generation`,d)}\n`)}function M(e,t,n){let r=e.type.charAt(0).toUpperCase()+e.type.slice(1),i=N(e.changes),a=`---
11
+ title: v${e.version}
12
+ badge: "${r}"
13
+ description: Changelog version ${e.version}${e.date?` (${e.date})`:``}
14
+ ---
15
+
16
+ # ${t} v${e.version}
17
+
18
+ ${e.date?`**Released:** ${e.date}`:``}
19
+
20
+ `;for(let[e,t]of Object.entries(i)){if(t.length===0)continue;let n=A[e]||e;a+=`## ${n}\n\n`;for(let e of t)a+=`- ${e.message}\n`,e.author&&(e.authorUrl?a+=` - **Author:** [@${e.author}](${e.authorUrl})\n`:a+=` - **Author:** @${e.author}\n`),e.commit&&(e.commitUrl?a+=` - **Commit:** [\`${e.commit.slice(0,7)}\`](${e.commitUrl})\n`:a+=` - **Commit:** \`${e.commit.slice(0,7)}\`\n`);a+=`
21
+ `}return a}function N(e){let t={feat:[],fix:[],perf:[],refactor:[],docs:[],chore:[],other:[]};for(let n of e)t[t[n.type]?n.type:`other`].push(n);return t}exports.generateChangelog=j;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import e from"node:path";import{double as t,info as n,success as r,warn as i}from"@bdocs/dui";import a from"node:fs";function o(e){return e.replace(/^v/,``).replace(/^\[|\]$/g,``)}function s(e){let t=e.match(/Thanks \[@(\w+)\]/);return t?t[1]:void 0}function c(e){let t=e.match(/Thanks \[@[^\]]+\]\(([^)]+)\)/);return t?t[1]:void 0}function l(e){let t=e.match(/\[`([a-f0-9]+)`\]/);return t?t[1]:void 0}function u(e){let t=e.match(/\[`[a-f0-9]+`\]\(([^)]+)\)/);return t?t[1]:void 0}function d(e,t){let n=e;return n=n.replace(/Thanks \[@[^\]]+\]\([^)]+\)/g,``),n=n.replace(/\[`[a-f0-9]+`\]\([^)]+\)/g,``),n=n.replace(/!\s*-/g,``),n=n.replace(/^-\s*/,``),n=n.replace(/^feat:\s*/i,``),n=n.replace(/^fix:\s*/i,``),n=n.replace(/^perf:\s*/i,``),n=n.replace(/^refactor:\s*/i,``),n=n.replace(/^docs:\s*/i,``),n=n.replace(/^chore:\s*/i,``),n=n.replace(/^\*\*[a-z]+(\([^)]+\))?:\*\*/gi,``),n.trim()}function f(e){let t=/^###\s+(Minor Changes|Major Changes|Patch Changes)/m.test(e),n=/^##\s+v?(\d+\.\d+\.\d+)/m.test(e);return t&&n}function p(e,t){for(let n=t+1;n<Math.min(t+10,e.length);n++){let t=e[n].trim().toLowerCase();if(t.startsWith(`### major`))return`major`;if(t.startsWith(`### minor`))return`minor`;if(t.startsWith(`### patch`))return`patch`}return null}function m(e){let t=e.split(`
7
+ `),n=[],r=null,i=``;for(let e=0;e<t.length;e++){let a=t[e].trim(),f=a.match(/^##\s+v?(\d+\.\d+\.\d+)/);if(f){r&&n.push(r);let s=o(f[1]),c=`patch`,l,u=a.match(/\((\d{4}-\d{2}-\d{2})\)/);u&&(l=u[1]);let d=p(t,e);d&&(c=d),r={version:s,type:c,date:l,changes:[]},i=``;continue}let m=a.match(/^###\s+(.+)$/i);if(m){i=m[1].toLowerCase();continue}if(a.startsWith(`- `)&&r){let e=a.slice(2).trim(),t=`other`;i.includes(`feat`)||i.includes(`minor`)?t=`feat`:i.includes(`fix`)||i.includes(`patch`)?t=`fix`:i.includes(`perf`)?t=`perf`:i.includes(`refactor`)?t=`refactor`:i.includes(`docs`)||i.includes(`documentation`)?t=`docs`:i.includes(`chore`)&&(t=`chore`);let n={type:t,message:d(e,t),author:s(e),authorUrl:c(e),commit:l(e),commitUrl:u(e)};r.changes.push(n)}}return r&&n.push(r),n}const h={name:`changesets`,detect:f,parse:m},g={added:`feat`,changed:`refactor`,deprecated:`fix`,removed:`fix`,fixed:`fix`,security:`fix`};function _(e){let t=/^#\s+Changelog/i.test(e),n=/^##\s*\[[\d.]+\]\s*-\s*\d{4}-\d{2}-\d{2}/m.test(e),r=/^###\s+(Added|Changed|Deprecated|Removed|Fixed|Security)$/m.test(e);return t&&n&&r}function v(e){let t=e.split(`
8
+ `),n=[],r=null,i=``;for(let e=0;e<t.length;e++){let a=t[e].trim(),f=a.match(/^##\s*\[(\d+\.\d+\.\d+[^\]]*)\]\s*-\s*(\d{4}-\d{2}-\d{2})/);if(f){r&&n.push(r),r={version:o(f[1]),type:`patch`,date:f[2],changes:[]},i=``;continue}if(a.match(/^##\s*\[Unreleased\]/i)){r&&n.push(r),r={version:`unreleased`,type:`patch`,date:void 0,changes:[]},i=``;continue}let p=a.match(/^###\s+(Added|Changed|Deprecated|Removed|Fixed|Security)$/i);if(p){i=p[1].toLowerCase();continue}if((a.startsWith(`- `)||a.startsWith(`* `))&&r){let e=a.slice(2).trim(),t=g[i]||`other`,n={type:t,message:d(e,t),author:s(e),authorUrl:c(e),commit:l(e),commitUrl:u(e)};r.changes.push(n)}}return r&&n.push(r),n}const y={name:`keep-a-changelog`,detect:_,parse:v},b={features:`feat`,"breaking changes":`feat`,breaking:`feat`,"bug fixes":`fix`,bugfixes:`fix`,fixes:`fix`,performance:`perf`,"build system":`chore`,builds:`chore`,tests:`chore`,chores:`chore`,documentation:`docs`,docs:`docs`,revert:`fix`,reverts:`fix`,refactor:`refactor`,"code refactoring":`refactor`};function x(e){let t=/^###\s+(Features|Bug Fixes|BREAKING CHANGES|Build System|Tests|Chores|Documentation|Reverts)/m.test(e),n=/^\*\*[a-z]+(\([^)]+\))?:\*\*/m.test(e),r=/^##\s*\[[\d.]+\]\([^)]+\)\s*\(\d{4}-\d{2}-\d{2}\)/m.test(e);return t&&(n||r)}function S(e){let t=e.split(`
9
+ `),n=[],r=null,i=``;for(let e=0;e<t.length;e++){let a=t[e].trim(),f=a.match(/^##\s*\[(\d+\.\d+\.\d+[^\]]*)\]\([^)]+\)\s*\((\d{4}-\d{2}-\d{2})\)/);if(f){r&&n.push(r);let a=o(f[1]),s=`patch`;for(let n=e+1;n<Math.min(e+20,t.length);n++){let e=t[n].toLowerCase();if(e.includes(`major`)||e.includes(`breaking`)){s=`major`;break}(e.includes(`minor`)||e.includes(`feat`))&&(s=`minor`)}r={version:a,type:s,date:f[2],changes:[]},i=``;continue}let p=a.match(/^###\s+(.+)$/i);if(p){i=p[1].toLowerCase();continue}if((a.startsWith(`- `)||a.startsWith(`* `))&&r){let e=a.slice(2).trim(),t=b[i]||`other`,n={type:t,message:d(e,t),author:s(e),authorUrl:c(e),commit:l(e),commitUrl:u(e)};r.changes.push(n)}}return r&&n.push(r),n}const C={name:`semantic-release`,detect:x,parse:S},w={features:`feat`,"breaking changes":`feat`,breaking:`feat`,"bug fixes":`fix`,fixes:`fix`,performance:`perf`,"build system":`chore`,builds:`chore`,tests:`chore`,chores:`chore`,documentation:`docs`,docs:`docs`,revert:`fix`,reverts:`fix`,refactor:`refactor`,"code refactoring":`refactor`};function T(e){let t=/^##\s+(\d+\.\d+\.\d+)\s*\((\d{4}-\d{2}-\d{2})\)/m.test(e),n=/^###\s+(Features|Bug Fixes|BREAKING CHANGES|Build System|Tests|Chores|Documentation)/m.test(e),r=/^[*-]\s+/m.test(e);return t&&n&&r}function E(e){let t=e.split(`
10
+ `),n=[],r=null,i=``;for(let e=0;e<t.length;e++){let a=t[e].trim(),f=a.match(/^##\s+(\d+\.\d+\.\d+)\s*\((\d{4}-\d{2}-\d{2})\)/);if(f){r&&n.push(r);let a=o(f[1]),s=`patch`;for(let n=e+1;n<Math.min(e+20,t.length);n++){let e=t[n].toLowerCase();if(e.includes(`major`)||e.includes(`breaking`)){s=`major`;break}(e.includes(`minor`)||e.includes(`feat`))&&(s=`minor`)}r={version:a,type:s,date:f[2],changes:[]},i=``;continue}let p=a.match(/^###\s+(.+)$/i);if(p){i=p[1].toLowerCase();continue}if((a.startsWith(`- `)||a.startsWith(`* `))&&r){let e=a.slice(2).trim(),t=w[i]||`other`,n={type:t,message:d(e,t),author:s(e),authorUrl:c(e),commit:l(e),commitUrl:u(e)};r.changes.push(n)}}return r&&n.push(r),n}const D=[y,C,{name:`standard-version`,detect:T,parse:E},h];function O(e){for(let t of D)if(t.detect(e))return{parser:t,name:t.name};return{parser:h,name:`changesets (fallback)`}}function k(e){let{parser:t}=O(e);return t?.parse(e)||[]}function A(e){return k(e)}function j(t){let n=e.resolve(t);if(!a.existsSync(n))throw Error(`Changelog file not found: ${n}`);return a.readFileSync(n,`utf-8`)}const M={feat:`Feature`,fix:`Bug Fix`,perf:`Performance`,refactor:`Refactor`,docs:`Documentation`,chore:`Chore`,other:`Other`};async function N(o,s={}){let c=e.resolve(s.output||`docs/changelog`),l=s.title||`Changelog`,u=s.inferTab!==!1,d=s.limit?Math.max(1,s.limit):void 0;n(`📄 Reading changelog from: ${o}`);let f=A(j(o));if(f.length===0){i(`⚠️ No versions found in changelog`);return}let p=d?f.slice(0,d):f;a.existsSync(c)||(a.mkdirSync(c,{recursive:!0}),n(`📁 Created directory: ${c}`));for(let[t,n]of p.entries()){let i=P(n,l,u),o=`${t+1}.v${n.version}.md`,s=e.join(c,o);a.writeFileSync(s,i,`utf-8`),r(`Generated: ${o}`)}let m=[` ✨ Generated ${d&&d<f.length?`${d} of ${f.length} versions`:`${f.length} versions`} changelog pages in ${c}`,``,` 📝 Add this to your navbar in boltdocs.config.ts:`,` { label: '${l}', href: '/changelog' }`];console.log(`\n${t(`Changelog Generation`,m)}\n`)}function P(e,t,n){let r=e.type.charAt(0).toUpperCase()+e.type.slice(1),i=F(e.changes),a=`---
11
+ title: v${e.version}
12
+ badge: "${r}"
13
+ description: Changelog version ${e.version}${e.date?` (${e.date})`:``}
14
+ ---
15
+
16
+ # ${t} v${e.version}
17
+
18
+ ${e.date?`**Released:** ${e.date}`:``}
19
+
20
+ `;for(let[e,t]of Object.entries(i)){if(t.length===0)continue;let n=M[e]||e;a+=`## ${n}\n\n`;for(let e of t)a+=`- ${e.message}\n`,e.author&&(e.authorUrl?a+=` - **Author:** [@${e.author}](${e.authorUrl})\n`:a+=` - **Author:** @${e.author}\n`),e.commit&&(e.commitUrl?a+=` - **Commit:** [\`${e.commit.slice(0,7)}\`](${e.commitUrl})\n`:a+=` - **Commit:** \`${e.commit.slice(0,7)}\`\n`);a+=`
21
+ `}return a}function F(e){let t={feat:[],fix:[],perf:[],refactor:[],docs:[],chore:[],other:[]};for(let n of e)t[t[n.type]?n.type:`other`].push(n);return t}export{N as generateChangelog};