boltdocs 2.9.0 → 2.9.1

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 (68) hide show
  1. package/dist/{cache-C2PiGyg8.cjs → cache-B19MLTpN.cjs} +1 -1
  2. package/dist/{cache-DFW4R3S0.mjs → cache-CfhOTR3Q.mjs} +1 -1
  3. package/dist/config-BqZUYono.cjs +7 -0
  4. package/dist/config-DBKBEj3j.mjs +7 -0
  5. package/dist/config-GPVEdeon.mjs +6 -0
  6. package/dist/config-kIQOJHXC.cjs +6 -0
  7. package/dist/csp-CBysWlAf.cjs +6 -0
  8. package/dist/csp-RJyh0nHV.mjs +6 -0
  9. package/dist/doctor-C19DsI1e.mjs +7 -0
  10. package/dist/{parser-DJoEF96Y.cjs → doctor-D8fl3Sbg.cjs} +1 -1
  11. package/dist/doctor-DzEgMMRo.cjs +7 -0
  12. package/dist/errors-C0Hx15Ag.mjs +6 -0
  13. package/dist/errors-Dx6JHoKE.cjs +6 -0
  14. package/dist/{doctor-wsPTzt8Y.mjs → handler-eNNcucnf.mjs} +1 -1
  15. package/dist/headers-BJ4jJAhU.cjs +6 -0
  16. package/dist/headers-HD_qTVVW.mjs +6 -0
  17. package/dist/{meta-loader-D0V6oOQt.cjs → meta-loader-C9MKjAs0.cjs} +1 -1
  18. package/dist/{meta-loader-By22EnYa.mjs → meta-loader-CxAoQthW.mjs} +1 -1
  19. package/dist/node/cli-entry.cjs +9 -3
  20. package/dist/node/cli-entry.mjs +9 -3
  21. package/dist/node/index.cjs +1 -1
  22. package/dist/node/index.d.cts +7 -7
  23. package/dist/node/index.d.mts +8 -8
  24. package/dist/node/index.mjs +1 -1
  25. package/dist/node/routes/worker.cjs +1 -1
  26. package/dist/node/routes/worker.mjs +1 -1
  27. package/dist/node-B7qbjtLl.mjs +105 -0
  28. package/dist/node-Dj3-2YYP.cjs +105 -0
  29. package/dist/package-ByXh2JHp.cjs +6 -0
  30. package/dist/{package-BK_82QLX.mjs → package-DQBAV8uo.mjs} +1 -1
  31. package/dist/{doctor-Bknon8f5.cjs → parser-B8naUXl2.cjs} +1 -1
  32. package/dist/parser-D4oEyuP-.cjs +6 -0
  33. package/dist/parser-IR9tfyGE.mjs +6 -0
  34. package/dist/plugin-BkquLpOI.mjs +61 -0
  35. package/dist/plugin-CL1LsQXk.cjs +61 -0
  36. package/dist/routes-DR13Y1em.mjs +6 -0
  37. package/dist/routes-DX8ryKjs.cjs +6 -0
  38. package/dist/{routes-C6Kr2HFN.cjs → routes-DgTQxpZi.cjs} +1 -1
  39. package/dist/{routes-CKgGAy8P.mjs → routes-TUSK5wD7.mjs} +1 -1
  40. package/dist/{shiki-adapter-CUtj-xKv.cjs → shiki-adapter-BB71nVsG.cjs} +1 -1
  41. package/dist/{handler-B31cxNw0.mjs → shiki-adapter-CL-IQwKI.cjs} +1 -1
  42. package/dist/shiki-adapter-CxTLkjew.mjs +6 -0
  43. package/dist/{shiki-adapter-F-P-lDon.mjs → shiki-adapter-rQ087Lx3.mjs} +1 -1
  44. package/dist/types-generator-BRyf4o9F.mjs +26 -0
  45. package/dist/types-generator-BqNKCbrx.cjs +26 -0
  46. package/dist/types-generator-Cu2jQP-V.mjs +6 -0
  47. package/dist/utils-BWy_8ASj.cjs +7 -0
  48. package/dist/utils-DexBrwiP.mjs +7 -0
  49. package/dist/{worker-pool-DRv8ef4z.mjs → worker-pool-C6r6V05j.mjs} +1 -1
  50. package/package.json +1 -1
  51. package/dist/doctor-BY1tSmQd.mjs +0 -34
  52. package/dist/doctor-DcFLi4t1.cjs +0 -34
  53. package/dist/node-DV-EPtMU.mjs +0 -160
  54. package/dist/node-vOVNRABe.cjs +0 -160
  55. package/dist/package-OxKE0p6j.cjs +0 -6
  56. package/dist/parser-C2Pw18LY.cjs +0 -6
  57. package/dist/parser-DScG_PTs.mjs +0 -6
  58. package/dist/routes--LYHSHT7.cjs +0 -6
  59. package/dist/routes-BAsfsn_e.mjs +0 -6
  60. package/dist/shiki-adapter-EZptJAmW.mjs +0 -6
  61. package/dist/shiki-adapter-PQBl32AN.cjs +0 -6
  62. package/dist/utils-DC4Wq-S2.mjs +0 -7
  63. package/dist/utils-wHud9ny5.cjs +0 -7
  64. /package/dist/{generator-DILs0EFN.mjs → generator-B6lrnDZ-.mjs} +0 -0
  65. /package/dist/{generator-BEIF6MOx.cjs → generator-DtUU3Cfk.cjs} +0 -0
  66. /package/dist/{handler-Djy0HfsI.cjs → handler-1LRMYeI4.cjs} +0 -0
  67. /package/dist/{handler-DfhH9D1b.mjs → handler-CyIBbZdb.mjs} +0 -0
  68. /package/dist/{worker-pool-BS1LX67P.cjs → worker-pool-m81xuM5v.cjs} +0 -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-Ds5LZdWN.cjs`),t=require(`./utils-wHud9ny5.cjs`);let n=require(`node:path`);n=e.n(n);let r=require(`node:fs`);r=e.n(r);let i=require(`node:fs/promises`);i=e.n(i);let a=require(`node:crypto`);a=e.n(a);let o=require(`node:zlib`);o=e.n(o);let s=require(`node:util`),c=require(`lru-cache`);const l=i.default.writeFile,u=i.default.readFile,d=i.default.mkdir,f=i.default.rename,p=(0,s.promisify)(o.default.gzip),m=(0,s.promisify)(o.default.gunzip),h=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var g=class{entries=new Map;cachePath=null;compress;constructor(e={}){let r=t.o();if(this.compress=e.compress===void 0?r.compress:e.compress,e.name){let t=e.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.default.resolve(t,r.dir,`${e.name}.${i}`)}}async load(){if(!t.o().noCache&&this.cachePath)try{let e=await u(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await m(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch(e){if(e.code===`ENOENT`)return}}save(){if(t.o().noCache||!this.cachePath)return;let e=Object.fromEntries(this.entries),r=JSON.stringify(e),i=this.cachePath,o=this.compress;h.add(async()=>{try{await d(n.default.dirname(i),{recursive:!0});let e=Buffer.from(r);o&&(e=await p(e));let t=`${i}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(t,e),await f(t,i)}catch{}})}get(e){let n=this.entries.get(e);return!n||t.s(e)!==n.mtime?null:n.data}getStale(e){let t=this.entries.get(e);return t?t.data:null}set(e,n){this.entries.set(e,{data:n,mtime:t.s(e)})}isValid(e){let n=this.entries.get(e);return n?t.s(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await h.flush()}},_=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;saveTimeout=null;constructor(e,r=process.cwd()){let i=t.o();this.baseDir=n.default.resolve(r,i.dir,`transform-${e}`),this.shardsDir=n.default.resolve(this.baseDir,`shards`),this.indexPath=n.default.resolve(this.baseDir,`index.json`),this.memoryCache=new c.LRUCache({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!t.o().noCache)try{let e=await u(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch(e){if(e.code===`ENOENT`)return}}save(){if(t.o().noCache)return;let e=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;h.add(async()=>{try{await d(n.default.dirname(r),{recursive:!0}),await l(r,e)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.default.resolve(this.shardsDir,`${t}.gz`);try{let t=(await m(await u(r))).toString(`utf-8`);return this.memoryCache.set(e,t),{key:e,val:t}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let r=this.index.get(e);if(!r)return null;let i=n.default.resolve(this.shardsDir,`${r}.gz`);try{let t=(await m(await u(i))).toString(`utf-8`);return this.memoryCache.set(e,t),t}catch(e){return e.code,null}}set(e,t){let r=a.default.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,r),this.memoryCache.set(e,t);let o=n.default.resolve(this.shardsDir,`${r}.gz`);h.add(async()=>{try{try{await i.default.access(o);return}catch{}await d(this.shardsDir,{recursive:!0});let e=await p(Buffer.from(t)),n=`${o}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(n,e),await f(n,o)}catch{}}),this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>{this.save()},500),typeof this.saveTimeout.unref==`function`&&this.saveTimeout.unref()}get size(){return this.index.size}async flush(){await h.flush()}},v=class{assetsDir;hashMap=new Map;constructor(e=process.cwd()){let r=t.o();this.assetsDir=n.default.resolve(e,r.dir,`assets`)}async getFileHash(e){let t=await i.default.stat(e),n=t.mtimeMs,r=this.hashMap.get(e);if(r&&r.mtime===n)return r.hash;let o=a.default.createHash(`md5`).update(`${t.size}-${n}`).digest(`hex`);return this.hashMap.set(e,{hash:o,mtime:n}),o}async get(e,t){try{let n=await this.getFileHash(e),r=this.getCachedPath(e,`${t}-${n}`);return await i.default.access(r),r}catch{return null}}set(e,t,n,r){let i=this.getCachedPath(e,`${t}-${r}`);h.add(async()=>{try{await d(this.assetsDir,{recursive:!0});let e=`${i}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(e,n),await f(e,i)}catch{}})}getCachedPath(e,t){let r=n.default.extname(e),i=n.default.basename(e,r),a=t.replace(/[^a-z0-9]/gi,`-`).toLowerCase();return n.default.join(this.assetsDir,`${i}.${a}${r}`)}clear(){r.default.existsSync(this.assetsDir)&&r.default.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await h.flush()}};async function y(){await h.flush()}const b=new Map,x=()=>{let e=t.o();return n.default.resolve(process.cwd(),e.dir,`cache/parser`)},S=`v2.4`;var C=class{static async get(e){if(t.o().noCache)return null;try{let t=await r.default.promises.stat(e),i=b.get(e);if(i&&i.mtime===t.mtimeMs)return i.data;let o=x(),s=a.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`);try{let n=await r.default.promises.readFile(c,`utf-8`),i=JSON.parse(n);return i._mtime!==t.mtimeMs||i._v!==S?null:(b.set(e,{data:i.data,mtime:i._mtime}),i.data)}catch{return null}}catch{return null}}static async set(e,i){if(!t.o().noCache)try{let t=await r.default.promises.stat(e);b.set(e,{data:i,mtime:t.mtimeMs});let o=x(),s=a.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`),l={_v:S,_mtime:t.mtimeMs,data:i};h.add(async()=>{try{await r.default.promises.mkdir(o,{recursive:!0}),await r.default.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){b.delete(e)}static clear(){b.clear();let e=x();if(r.default.existsSync(e))try{r.default.rmSync(e,{recursive:!0,force:!0})}catch{}}};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return C}});
6
+ const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`);let n=require(`node:path`);n=e.n(n);let r=require(`node:fs`);r=e.n(r);let i=require(`node:fs/promises`);i=e.n(i);let a=require(`node:crypto`);a=e.n(a);let o=require(`node:zlib`);o=e.n(o);let s=require(`node:util`),c=require(`lru-cache`);const l=i.default.writeFile,u=i.default.readFile,d=i.default.mkdir,f=i.default.rename,p=(0,s.promisify)(o.default.gzip),m=(0,s.promisify)(o.default.gunzip),h=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var g=class{entries=new Map;cachePath=null;compress;constructor(e={}){let r=t.o();if(this.compress=e.compress===void 0?r.compress:e.compress,e.name){let t=e.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.default.resolve(t,r.dir,`${e.name}.${i}`)}}async load(){if(!t.o().noCache&&this.cachePath)try{let e=await u(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await m(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch(e){if(e.code===`ENOENT`)return}}save(){if(t.o().noCache||!this.cachePath)return;let e=Object.fromEntries(this.entries),r=JSON.stringify(e),i=this.cachePath,o=this.compress;h.add(async()=>{try{await d(n.default.dirname(i),{recursive:!0});let e=Buffer.from(r);o&&(e=await p(e));let t=`${i}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(t,e),await f(t,i)}catch{}})}get(e){let n=this.entries.get(e);return!n||t.s(e)!==n.mtime?null:n.data}getStale(e){let t=this.entries.get(e);return t?t.data:null}set(e,n){this.entries.set(e,{data:n,mtime:t.s(e)})}isValid(e){let n=this.entries.get(e);return n?t.s(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await h.flush()}},_=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;saveTimeout=null;constructor(e,r=process.cwd()){let i=t.o();this.baseDir=n.default.resolve(r,i.dir,`transform-${e}`),this.shardsDir=n.default.resolve(this.baseDir,`shards`),this.indexPath=n.default.resolve(this.baseDir,`index.json`),this.memoryCache=new c.LRUCache({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!t.o().noCache)try{let e=await u(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch(e){if(e.code===`ENOENT`)return}}save(){if(t.o().noCache)return;let e=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;h.add(async()=>{try{await d(n.default.dirname(r),{recursive:!0}),await l(r,e)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.default.resolve(this.shardsDir,`${t}.gz`);try{let t=(await m(await u(r))).toString(`utf-8`);return this.memoryCache.set(e,t),{key:e,val:t}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let r=this.index.get(e);if(!r)return null;let i=n.default.resolve(this.shardsDir,`${r}.gz`);try{let t=(await m(await u(i))).toString(`utf-8`);return this.memoryCache.set(e,t),t}catch(e){return e.code,null}}set(e,t){let r=a.default.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,r),this.memoryCache.set(e,t);let o=n.default.resolve(this.shardsDir,`${r}.gz`);h.add(async()=>{try{try{await i.default.access(o);return}catch{}await d(this.shardsDir,{recursive:!0});let e=await p(Buffer.from(t)),n=`${o}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(n,e),await f(n,o)}catch{}}),this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>{this.save()},500),typeof this.saveTimeout.unref==`function`&&this.saveTimeout.unref()}get size(){return this.index.size}async flush(){await h.flush()}},v=class{assetsDir;hashMap=new Map;constructor(e=process.cwd()){let r=t.o();this.assetsDir=n.default.resolve(e,r.dir,`assets`)}async getFileHash(e){let t=await i.default.stat(e),n=t.mtimeMs,r=this.hashMap.get(e);if(r&&r.mtime===n)return r.hash;let o=a.default.createHash(`md5`).update(`${t.size}-${n}`).digest(`hex`);return this.hashMap.set(e,{hash:o,mtime:n}),o}async get(e,t){try{let n=await this.getFileHash(e),r=this.getCachedPath(e,`${t}-${n}`);return await i.default.access(r),r}catch{return null}}set(e,t,n,r){let i=this.getCachedPath(e,`${t}-${r}`);h.add(async()=>{try{await d(this.assetsDir,{recursive:!0});let e=`${i}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(e,n),await f(e,i)}catch{}})}getCachedPath(e,t){let r=n.default.extname(e),i=n.default.basename(e,r),a=t.replace(/[^a-z0-9]/gi,`-`).toLowerCase();return n.default.join(this.assetsDir,`${i}.${a}${r}`)}clear(){r.default.existsSync(this.assetsDir)&&r.default.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await h.flush()}};async function y(){await h.flush()}const b=new Map,x=()=>{let e=t.o();return n.default.resolve(process.cwd(),e.dir,`cache/parser`)},S=`v2.4`;var C=class{static async get(e){if(t.o().noCache)return null;try{let t=await r.default.promises.stat(e),i=b.get(e);if(i&&i.mtime===t.mtimeMs)return i.data;let o=x(),s=a.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`);try{let n=await r.default.promises.readFile(c,`utf-8`),i=JSON.parse(n);return i._mtime!==t.mtimeMs||i._v!==S?null:(b.set(e,{data:i.data,mtime:i._mtime}),i.data)}catch{return null}}catch{return null}}static async set(e,i){if(!t.o().noCache)try{let t=await r.default.promises.stat(e);b.set(e,{data:i,mtime:t.mtimeMs});let o=x(),s=a.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`),l={_v:S,_mtime:t.mtimeMs,data:i};h.add(async()=>{try{await r.default.promises.mkdir(o,{recursive:!0}),await r.default.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){b.delete(e)}static clear(){b.clear();let e=x();if(r.default.existsSync(e))try{r.default.rmSync(e,{recursive:!0,force:!0})}catch{}}};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return C}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{o as e,s as t}from"./utils-DC4Wq-S2.mjs";import n from"node:path";import r from"node:fs";import i from"node:fs/promises";import a from"node:crypto";import o from"node:zlib";import{promisify as s}from"node:util";import{LRUCache as c}from"lru-cache";const l=i.writeFile,u=i.readFile,d=i.mkdir,f=i.rename,p=s(o.gzip),m=s(o.gunzip),h=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var g=class{entries=new Map;cachePath=null;compress;constructor(t={}){let r=e();if(this.compress=t.compress===void 0?r.compress:t.compress,t.name){let e=t.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.resolve(e,r.dir,`${t.name}.${i}`)}}async load(){if(!e().noCache&&this.cachePath)try{let e=await u(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await m(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch(e){if(e.code===`ENOENT`)return}}save(){if(e().noCache||!this.cachePath)return;let t=Object.fromEntries(this.entries),r=JSON.stringify(t),i=this.cachePath,o=this.compress;h.add(async()=>{try{await d(n.dirname(i),{recursive:!0});let e=Buffer.from(r);o&&(e=await p(e));let t=`${i}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(t,e),await f(t,i)}catch{}})}get(e){let n=this.entries.get(e);return!n||t(e)!==n.mtime?null:n.data}getStale(e){let t=this.entries.get(e);return t?t.data:null}set(e,n){this.entries.set(e,{data:n,mtime:t(e)})}isValid(e){let n=this.entries.get(e);return n?t(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await h.flush()}},_=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;saveTimeout=null;constructor(t,r=process.cwd()){let i=e();this.baseDir=n.resolve(r,i.dir,`transform-${t}`),this.shardsDir=n.resolve(this.baseDir,`shards`),this.indexPath=n.resolve(this.baseDir,`index.json`),this.memoryCache=new c({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!e().noCache)try{let e=await u(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch(e){if(e.code===`ENOENT`)return}}save(){if(e().noCache)return;let t=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;h.add(async()=>{try{await d(n.dirname(r),{recursive:!0}),await l(r,t)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.resolve(this.shardsDir,`${t}.gz`);try{let t=(await m(await u(r))).toString(`utf-8`);return this.memoryCache.set(e,t),{key:e,val:t}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let r=this.index.get(e);if(!r)return null;let i=n.resolve(this.shardsDir,`${r}.gz`);try{let t=(await m(await u(i))).toString(`utf-8`);return this.memoryCache.set(e,t),t}catch(e){return e.code,null}}set(e,t){let r=a.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,r),this.memoryCache.set(e,t);let o=n.resolve(this.shardsDir,`${r}.gz`);h.add(async()=>{try{try{await i.access(o);return}catch{}await d(this.shardsDir,{recursive:!0});let e=await p(Buffer.from(t)),n=`${o}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(n,e),await f(n,o)}catch{}}),this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>{this.save()},500),typeof this.saveTimeout.unref==`function`&&this.saveTimeout.unref()}get size(){return this.index.size}async flush(){await h.flush()}},v=class{assetsDir;hashMap=new Map;constructor(t=process.cwd()){let r=e();this.assetsDir=n.resolve(t,r.dir,`assets`)}async getFileHash(e){let t=await i.stat(e),n=t.mtimeMs,r=this.hashMap.get(e);if(r&&r.mtime===n)return r.hash;let o=a.createHash(`md5`).update(`${t.size}-${n}`).digest(`hex`);return this.hashMap.set(e,{hash:o,mtime:n}),o}async get(e,t){try{let n=await this.getFileHash(e),r=this.getCachedPath(e,`${t}-${n}`);return await i.access(r),r}catch{return null}}set(e,t,n,r){let i=this.getCachedPath(e,`${t}-${r}`);h.add(async()=>{try{await d(this.assetsDir,{recursive:!0});let e=`${i}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(e,n),await f(e,i)}catch{}})}getCachedPath(e,t){let r=n.extname(e),i=n.basename(e,r),a=t.replace(/[^a-z0-9]/gi,`-`).toLowerCase();return n.join(this.assetsDir,`${i}.${a}${r}`)}clear(){r.existsSync(this.assetsDir)&&r.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await h.flush()}};async function y(){await h.flush()}const b=new Map,x=()=>{let t=e();return n.resolve(process.cwd(),t.dir,`cache/parser`)},S=`v2.4`;var C=class{static async get(t){if(e().noCache)return null;try{let e=await r.promises.stat(t),i=b.get(t);if(i&&i.mtime===e.mtimeMs)return i.data;let o=x(),s=a.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`);try{let n=await r.promises.readFile(c,`utf-8`),i=JSON.parse(n);return i._mtime!==e.mtimeMs||i._v!==S?null:(b.set(t,{data:i.data,mtime:i._mtime}),i.data)}catch{return null}}catch{return null}}static async set(t,i){if(!e().noCache)try{let e=await r.promises.stat(t);b.set(t,{data:i,mtime:e.mtimeMs});let o=x(),s=a.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`),l={_v:S,_mtime:e.mtimeMs,data:i};h.add(async()=>{try{await r.promises.mkdir(o,{recursive:!0}),await r.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){b.delete(e)}static clear(){b.clear();let e=x();if(r.existsSync(e))try{r.rmSync(e,{recursive:!0,force:!0})}catch{}}};export{y as a,_ as i,v as n,g as r,C as t};
6
+ import{o as e,s as t}from"./utils-DexBrwiP.mjs";import n from"node:path";import r from"node:fs";import i from"node:fs/promises";import a from"node:crypto";import o from"node:zlib";import{promisify as s}from"node:util";import{LRUCache as c}from"lru-cache";const l=i.writeFile,u=i.readFile,d=i.mkdir,f=i.rename,p=s(o.gzip),m=s(o.gunzip),h=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var g=class{entries=new Map;cachePath=null;compress;constructor(t={}){let r=e();if(this.compress=t.compress===void 0?r.compress:t.compress,t.name){let e=t.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.resolve(e,r.dir,`${t.name}.${i}`)}}async load(){if(!e().noCache&&this.cachePath)try{let e=await u(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await m(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch(e){if(e.code===`ENOENT`)return}}save(){if(e().noCache||!this.cachePath)return;let t=Object.fromEntries(this.entries),r=JSON.stringify(t),i=this.cachePath,o=this.compress;h.add(async()=>{try{await d(n.dirname(i),{recursive:!0});let e=Buffer.from(r);o&&(e=await p(e));let t=`${i}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(t,e),await f(t,i)}catch{}})}get(e){let n=this.entries.get(e);return!n||t(e)!==n.mtime?null:n.data}getStale(e){let t=this.entries.get(e);return t?t.data:null}set(e,n){this.entries.set(e,{data:n,mtime:t(e)})}isValid(e){let n=this.entries.get(e);return n?t(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await h.flush()}},_=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;saveTimeout=null;constructor(t,r=process.cwd()){let i=e();this.baseDir=n.resolve(r,i.dir,`transform-${t}`),this.shardsDir=n.resolve(this.baseDir,`shards`),this.indexPath=n.resolve(this.baseDir,`index.json`),this.memoryCache=new c({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!e().noCache)try{let e=await u(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch(e){if(e.code===`ENOENT`)return}}save(){if(e().noCache)return;let t=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;h.add(async()=>{try{await d(n.dirname(r),{recursive:!0}),await l(r,t)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.resolve(this.shardsDir,`${t}.gz`);try{let t=(await m(await u(r))).toString(`utf-8`);return this.memoryCache.set(e,t),{key:e,val:t}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let r=this.index.get(e);if(!r)return null;let i=n.resolve(this.shardsDir,`${r}.gz`);try{let t=(await m(await u(i))).toString(`utf-8`);return this.memoryCache.set(e,t),t}catch(e){return e.code,null}}set(e,t){let r=a.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,r),this.memoryCache.set(e,t);let o=n.resolve(this.shardsDir,`${r}.gz`);h.add(async()=>{try{try{await i.access(o);return}catch{}await d(this.shardsDir,{recursive:!0});let e=await p(Buffer.from(t)),n=`${o}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(n,e),await f(n,o)}catch{}}),this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>{this.save()},500),typeof this.saveTimeout.unref==`function`&&this.saveTimeout.unref()}get size(){return this.index.size}async flush(){await h.flush()}},v=class{assetsDir;hashMap=new Map;constructor(t=process.cwd()){let r=e();this.assetsDir=n.resolve(t,r.dir,`assets`)}async getFileHash(e){let t=await i.stat(e),n=t.mtimeMs,r=this.hashMap.get(e);if(r&&r.mtime===n)return r.hash;let o=a.createHash(`md5`).update(`${t.size}-${n}`).digest(`hex`);return this.hashMap.set(e,{hash:o,mtime:n}),o}async get(e,t){try{let n=await this.getFileHash(e),r=this.getCachedPath(e,`${t}-${n}`);return await i.access(r),r}catch{return null}}set(e,t,n,r){let i=this.getCachedPath(e,`${t}-${r}`);h.add(async()=>{try{await d(this.assetsDir,{recursive:!0});let e=`${i}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(e,n),await f(e,i)}catch{}})}getCachedPath(e,t){let r=n.extname(e),i=n.basename(e,r),a=t.replace(/[^a-z0-9]/gi,`-`).toLowerCase();return n.join(this.assetsDir,`${i}.${a}${r}`)}clear(){r.existsSync(this.assetsDir)&&r.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await h.flush()}};async function y(){await h.flush()}const b=new Map,x=()=>{let t=e();return n.resolve(process.cwd(),t.dir,`cache/parser`)},S=`v2.4`;var C=class{static async get(t){if(e().noCache)return null;try{let e=await r.promises.stat(t),i=b.get(t);if(i&&i.mtime===e.mtimeMs)return i.data;let o=x(),s=a.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`);try{let n=await r.promises.readFile(c,`utf-8`),i=JSON.parse(n);return i._mtime!==e.mtimeMs||i._v!==S?null:(b.set(t,{data:i.data,mtime:i._mtime}),i.data)}catch{return null}}catch{return null}}static async set(t,i){if(!e().noCache)try{let e=await r.promises.stat(t);b.set(t,{data:i,mtime:e.mtimeMs});let o=x(),s=a.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`),l={_v:S,_mtime:e.mtimeMs,data:i};h.add(async()=>{try{await r.promises.mkdir(o,{recursive:!0}),await r.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){b.delete(e)}static clear(){b.clear();let e=x();if(r.existsSync(e))try{r.rmSync(e,{recursive:!0,force:!0})}catch{}}};export{y as a,_ as i,v as n,g as r,C as t};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./errors-Dx6JHoKE.cjs`),n=require(`./types-generator-BqNKCbrx.cjs`);let r=require(`node:path`);r=e.n(r);let i=require(`node:fs`);i=e.n(i);let a=require(`zod`),o=require(`@bdocs/dui`),s=require(`vite`);function c(e){return e}const l=a.z.object({icon:a.z.string().max(50),link:a.z.string().url()});a.z.object({text:a.z.string().max(2e3).optional()});const u=a.z.object({name:a.z.string(),enforce:a.z.enum([`pre`,`post`]).optional(),version:a.z.string().optional(),boltdocsVersion:a.z.string().optional(),remarkPlugins:a.z.array(a.z.unknown()).optional(),rehypePlugins:a.z.array(a.z.unknown()).optional(),vitePlugins:a.z.array(a.z.unknown()).optional(),components:a.z.record(a.z.string(),a.z.string()).optional(),hooks:a.z.record(a.z.string(),a.z.unknown()).optional()}),d=a.z.object({title:a.z.union([a.z.string(),a.z.record(a.z.string(),a.z.string())]).optional(),description:a.z.union([a.z.string(),a.z.record(a.z.string(),a.z.string())]).optional(),logo:a.z.union([a.z.string(),a.z.object({dark:a.z.string(),light:a.z.string(),alt:a.z.string().optional(),width:a.z.number().optional(),height:a.z.number().optional()})]).optional(),navbar:a.z.array(a.z.object({label:a.z.union([a.z.string(),a.z.record(a.z.string(),a.z.string())]),href:a.z.string(),items:a.z.array(a.z.object({label:a.z.union([a.z.string(),a.z.record(a.z.string(),a.z.string())]),href:a.z.string()})).optional()})).optional(),sidebar:a.z.record(a.z.string(),a.z.array(a.z.object({text:a.z.string(),link:a.z.string()}))).optional(),sidebarGroups:a.z.record(a.z.string(),a.z.object({title:a.z.union([a.z.string(),a.z.record(a.z.string(),a.z.string())]).optional(),icon:a.z.string().optional()})).optional(),socialLinks:a.z.array(l).optional(),editLink:a.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:a.z.string().url().optional(),version:a.z.string().max(50).optional(),githubRepo:a.z.string().max(100).optional(),favicon:a.z.string().optional(),tabs:a.z.array(a.z.object({id:a.z.string(),text:a.z.union([a.z.string(),a.z.record(a.z.string(),a.z.string())]),icon:a.z.string().optional()})).optional(),codeTheme:a.z.union([a.z.string(),a.z.object({light:a.z.string(),dark:a.z.string()})]).optional()}),f=a.z.union([a.z.string(),a.z.object({rules:a.z.array(a.z.object({userAgent:a.z.string(),allow:a.z.union([a.z.string(),a.z.array(a.z.string())]).optional(),disallow:a.z.union([a.z.string(),a.z.array(a.z.string())]).optional()})).optional(),sitemaps:a.z.array(a.z.string().url()).optional()})]),p=a.z.object({defaultLocale:a.z.string(),locales:a.z.union([a.z.record(a.z.string(),a.z.string()),a.z.array(a.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:a.z.record(a.z.string(),a.z.object({label:a.z.string().optional(),direction:a.z.enum([`ltr`,`rtl`]).optional(),htmlLang:a.z.string().optional(),calendar:a.z.string().optional()})).optional()}),m=a.z.object({defaultVersion:a.z.string(),prefix:a.z.string().optional(),versions:a.z.array(a.z.object({label:a.z.string(),path:a.z.string()}))}),h=a.z.object({headers:a.z.record(a.z.string(),a.z.string()).optional(),enableCSP:a.z.boolean().optional(),customHeaders:a.z.record(a.z.string(),a.z.string()).optional()}),g=a.z.object({metatags:a.z.record(a.z.string(),a.z.string()).optional(),indexing:a.z.enum([`all`,`public`]).optional(),thumbnails:a.z.object({background:a.z.string().optional()}).optional()}),_=a.z.object({measurementId:a.z.string().min(1,`Measurement ID is required for GA4`),debug:a.z.boolean().optional(),anonymizeIp:a.z.boolean().optional(),sendPageView:a.z.boolean().optional(),cookieFlags:a.z.string().optional(),autoTrack:a.z.object({pageViews:a.z.boolean().optional(),downloads:a.z.boolean().optional(),externalLinks:a.z.boolean().optional(),search:a.z.boolean().optional()}).optional()}),v=a.z.object({tagId:a.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:a.z.string().optional(),preview:a.z.string().optional()}),y=a.z.object({appId:a.z.string().min(1,`Algolia App ID is required`),apiKey:a.z.string().min(1,`Algolia API Key is required`),indexName:a.z.string().min(1,`Algolia Index Name is required`)}),b=a.z.object({repo:a.z.string().min(1,`Giscus repository is required`),repoId:a.z.string().min(1,`Giscus repository ID is required`),category:a.z.string().optional(),categoryId:a.z.string().optional(),mapping:a.z.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:a.z.union([a.z.enum([`0`,`1`]),a.z.boolean()]).optional(),reactionsEnabled:a.z.union([a.z.enum([`0`,`1`]),a.z.boolean()]).optional(),emitMetadata:a.z.union([a.z.enum([`0`,`1`]),a.z.boolean()]).optional(),inputPosition:a.z.enum([`top`,`bottom`]).optional(),theme:a.z.string().optional(),darkTheme:a.z.string().optional(),lang:a.z.string().optional(),loading:a.z.enum([`lazy`,`eager`]).optional()}),x=a.z.object({enabled:a.z.boolean(),owner:a.z.string().min(1,`GitHub owner is required`),repo:a.z.string().min(1,`GitHub repository name is required`),categorySlug:a.z.string().optional(),endpoint:a.z.string().optional()}),S=a.z.object({ga4:_.optional(),gtm:v.optional(),algolia:y.optional(),feedback:a.z.object({giscus:b.optional(),custom:x.optional()}).optional()}),C=a.z.object({siteUrl:a.z.string().url().optional(),docsDir:a.z.string().optional(),base:a.z.string().optional(),theme:d.optional(),i18n:p.optional(),versions:m.optional(),plugins:a.z.array(u).optional(),robots:f.optional(),security:h.optional(),seo:g.optional(),integrations:S.optional(),vite:a.z.record(a.z.string(),a.z.unknown()).optional()}),w=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function T(e,n=process.cwd()){let a=n,c={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 w){let t=r.default.resolve(a,e);if(i.default.existsSync(t))try{let e=await(0,s.loadConfigFromFile)({command:`serve`,mode:`development`},t,a);if(e){l=e.config;break}}catch(t){(0,o.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:{...c.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=C.safeParse(f);if(!p.success)throw new t.r(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
+ `)}`);return p.data}async function E(e,t=process.cwd()){let r=await T(e,t);return n.t(r,e,t),r}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return w}});
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import{r as e}from"./errors-C0Hx15Ag.mjs";import{t}from"./types-generator-BRyf4o9F.mjs";import n from"node:path";import r from"node:fs";import{z as i}from"zod";import{warn as a}from"@bdocs/dui";import{loadConfigFromFile as o}from"vite";function s(e){return e}const c=i.object({icon:i.string().max(50),link:i.string().url()});i.object({text:i.string().max(2e3).optional()});const l=i.object({name:i.string(),enforce:i.enum([`pre`,`post`]).optional(),version:i.string().optional(),boltdocsVersion:i.string().optional(),remarkPlugins:i.array(i.unknown()).optional(),rehypePlugins:i.array(i.unknown()).optional(),vitePlugins:i.array(i.unknown()).optional(),components:i.record(i.string(),i.string()).optional(),hooks:i.record(i.string(),i.unknown()).optional()}),u=i.object({title:i.union([i.string(),i.record(i.string(),i.string())]).optional(),description:i.union([i.string(),i.record(i.string(),i.string())]).optional(),logo:i.union([i.string(),i.object({dark:i.string(),light:i.string(),alt:i.string().optional(),width:i.number().optional(),height:i.number().optional()})]).optional(),navbar:i.array(i.object({label:i.union([i.string(),i.record(i.string(),i.string())]),href:i.string(),items:i.array(i.object({label:i.union([i.string(),i.record(i.string(),i.string())]),href:i.string()})).optional()})).optional(),sidebar:i.record(i.string(),i.array(i.object({text:i.string(),link:i.string()}))).optional(),sidebarGroups:i.record(i.string(),i.object({title:i.union([i.string(),i.record(i.string(),i.string())]).optional(),icon:i.string().optional()})).optional(),socialLinks:i.array(c).optional(),editLink:i.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:i.string().url().optional(),version:i.string().max(50).optional(),githubRepo:i.string().max(100).optional(),favicon:i.string().optional(),tabs:i.array(i.object({id:i.string(),text:i.union([i.string(),i.record(i.string(),i.string())]),icon:i.string().optional()})).optional(),codeTheme:i.union([i.string(),i.object({light:i.string(),dark:i.string()})]).optional()}),d=i.union([i.string(),i.object({rules:i.array(i.object({userAgent:i.string(),allow:i.union([i.string(),i.array(i.string())]).optional(),disallow:i.union([i.string(),i.array(i.string())]).optional()})).optional(),sitemaps:i.array(i.string().url()).optional()})]),f=i.object({defaultLocale:i.string(),locales:i.union([i.record(i.string(),i.string()),i.array(i.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:i.record(i.string(),i.object({label:i.string().optional(),direction:i.enum([`ltr`,`rtl`]).optional(),htmlLang:i.string().optional(),calendar:i.string().optional()})).optional()}),p=i.object({defaultVersion:i.string(),prefix:i.string().optional(),versions:i.array(i.object({label:i.string(),path:i.string()}))}),m=i.object({headers:i.record(i.string(),i.string()).optional(),enableCSP:i.boolean().optional(),customHeaders:i.record(i.string(),i.string()).optional()}),h=i.object({metatags:i.record(i.string(),i.string()).optional(),indexing:i.enum([`all`,`public`]).optional(),thumbnails:i.object({background:i.string().optional()}).optional()}),g=i.object({measurementId:i.string().min(1,`Measurement ID is required for GA4`),debug:i.boolean().optional(),anonymizeIp:i.boolean().optional(),sendPageView:i.boolean().optional(),cookieFlags:i.string().optional(),autoTrack:i.object({pageViews:i.boolean().optional(),downloads:i.boolean().optional(),externalLinks:i.boolean().optional(),search:i.boolean().optional()}).optional()}),_=i.object({tagId:i.string().min(1,`Tag ID is required for GTM`),dataLayerName:i.string().optional(),preview:i.string().optional()}),v=i.object({appId:i.string().min(1,`Algolia App ID is required`),apiKey:i.string().min(1,`Algolia API Key is required`),indexName:i.string().min(1,`Algolia Index Name is required`)}),y=i.object({repo:i.string().min(1,`Giscus repository is required`),repoId:i.string().min(1,`Giscus repository ID is required`),category:i.string().optional(),categoryId:i.string().optional(),mapping:i.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:i.union([i.enum([`0`,`1`]),i.boolean()]).optional(),reactionsEnabled:i.union([i.enum([`0`,`1`]),i.boolean()]).optional(),emitMetadata:i.union([i.enum([`0`,`1`]),i.boolean()]).optional(),inputPosition:i.enum([`top`,`bottom`]).optional(),theme:i.string().optional(),darkTheme:i.string().optional(),lang:i.string().optional(),loading:i.enum([`lazy`,`eager`]).optional()}),b=i.object({enabled:i.boolean(),owner:i.string().min(1,`GitHub owner is required`),repo:i.string().min(1,`GitHub repository name is required`),categorySlug:i.string().optional(),endpoint:i.string().optional()}),x=i.object({ga4:g.optional(),gtm:_.optional(),algolia:v.optional(),feedback:i.object({giscus:y.optional(),custom:b.optional()}).optional()}),S=i.object({siteUrl:i.string().url().optional(),docsDir:i.string().optional(),base:i.string().optional(),theme:u.optional(),i18n:f.optional(),versions:p.optional(),plugins:i.array(l).optional(),robots:d.optional(),security:m.optional(),seo:h.optional(),integrations:x.optional(),vite:i.record(i.string(),i.unknown()).optional()}),C=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function w(t,i=process.cwd()){let s=i,c={docsDir:n.resolve(t),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 C){let t=n.resolve(s,e);if(r.existsSync(t))try{let e=await o({command:`serve`,mode:`development`},t,s);if(e){l=e.config;break}}catch(t){a(`Failed to load config from ${e}:`,t)}}let u={title:l.title,description:l.description,logo:l.logo,favicon:l.favicon,navbar:l.navbar,sidebar:l.sidebar,sidebarGroups:l.theme?.sidebarGroups,socialLinks:l.socialLinks,githubRepo:l.githubRepo,tabs:l.tabs,codeTheme:l.codeTheme,communityHelp:l.communityHelp,version:l.version,editLink:l.editLink,...l.theme||{}},d=Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));d.navbar&&=d.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let f={docsDir:n.resolve(t),theme:{...c.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=S.safeParse(f);if(!p.success)throw new e(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
+ `)}`);return p.data}async function T(e,n=process.cwd()){let r=await w(e,n);return t(r,e,n),r}export{s as a,l as i,w as n,T as r,C 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{a as e,n as t,r as n,t as r}from"./config-DBKBEj3j.mjs";export{r as CONFIG_FILES,e as defineConfig,t as resolveConfig,n as resolveConfigAndGenerateTypes};
@@ -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(`./config-BqZUYono.cjs`);exports.CONFIG_FILES=e.t,exports.defineConfig=e.a,exports.resolveConfig=e.n,exports.resolveConfigAndGenerateTypes=e.r;
@@ -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
+ var e=require(`./chunk-Ds5LZdWN.cjs`).t({getCSPHeader:()=>t});function t(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return e}});
@@ -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{P as e}from"./node-B7qbjtLl.mjs";var t=e({getCSPHeader:()=>n});function n(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}export{n,t};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import{P as e}from"./node-B7qbjtLl.mjs";import{a as t,d as n,g as r,u as i}from"./utils-DexBrwiP.mjs";import{n as a}from"./config-DBKBEj3j.mjs";import{t as o}from"./node/cli-entry.mjs";import s from"node:path";import c from"node:fs";import{bullet as l,colors as u,confirm as d,dividerLog as f,double as p,error as m,info as h,round as g,single as _,success as v,tasks as y,warn as b}from"@bdocs/dui";import{fdir as x}from"fdir";import S from"picomatch";import{distance as C}from"fastest-levenshtein";const w={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0},performance:{enabled:!0,budgets:{maxJSBundleSize:`200kb`,maxCSSBundleSize:`30kb`,maxPageHTMLSize:`80kb`,maxImagesKB:500,maxBuildTime:3e4,maxFontCount:3}}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/reports/doctor.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`,budgetExceeded:`warning`},exclude:[]};function T(e,t){if(e==null)return t;if(typeof e==`number`)return e;let n=e.toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/);if(!n)return t;let r=Number.parseFloat(n[1]),i=n[2]||`b`;return Math.round(r*({b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024}[i]||1))}function E(e,t,n){return e.doctorConfig.severity[t]||n}async function D(e,t){c.existsSync(t)||c.mkdirSync(t,{recursive:!0});let n=s.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=s.join(t,`${n}.${r}.bak`);c.copyFileSync(e,i)}const O=new Map;function k(e){let t=O.get(e);if(t)return t;let r=(async()=>{let t=await n(e,!1);return{raw:t.raw,data:t.data,content:t.content}})();return O.set(e,r),r}const A=new Map;function j(e){if(A.has(e))return A.get(e);let t=!1;try{t=c.existsSync(e)&&c.statSync(e).isFile()}catch{t=!1}return A.set(e,t),t}async function M(e){let t=s.resolve(e,`doctor.json`);if(c.existsSync(t))try{let e=JSON.parse(c.readFileSync(t,`utf-8`));return{...w,...e,checks:{...w.checks,...e.checks,metadata:{...w.checks.metadata,...e.checks?.metadata},links:{...w.checks.links,...e.checks?.links},i18n:{...w.checks.i18n,...e.checks?.i18n},performance:{...w.checks.performance,...e.checks?.performance,budgets:{...w.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...w.fix,...e.fix},reporting:{...w.reporting,...e.reporting},severity:{...w.severity,...e.severity},exclude:[...w.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return w}async function N(e,n=process.cwd(),r,i){let a=s.resolve(n,`.boltdocs`,`generated`);c.existsSync(a)||c.mkdirSync(a,{recursive:!0});let o=i;o||=await new x().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let l=r?.base||`/docs`,u=[];for(let n=0;n<o.length;n+=100){let r=o.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=s.isAbsolute(n)?n:s.resolve(e,n),i=s.relative(e,r),{data:a}=await k(r),o;return o=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:t(i),l===`/`?o:(l.endsWith(`/`)?l:l+`/`)+(o.startsWith(`/`)?o.substring(1):o)}));u.push(...i)}u.includes(l)||u.push(l);let d={routes:Array.from(new Set(u)).sort(),timestamp:Date.now()};return c.writeFileSync(s.resolve(a,`link-tree.json`),JSON.stringify(d,null,2)),d}function P(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-C(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-C(e,t)/Math.max(e.length,t.length)}const F=new Map;function I(e,t){if(F.has(e))return F.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=P(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return F.set(e,a),a}async function L(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:n,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,c=new Map;for(let l of e.files){let u=i(s.relative(e.docsDir,l));try{let{raw:i,data:s}=await k(l);if(i.trim().startsWith(`---`)&&i.split(`---`).length>=3&&Object.keys(s).length===0){let n=E(e,`malformedFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=r.safeParse(s);if(!d.success){let n=E(e,`invalidFrontmatter`,`high`);if(n!==`off`)for(let e of d.error.issues)t.push({file:u,level:n,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let n of f)if(s[n]===void 0){let r=E(e,`missingMetadata`,`warning`);r!==`off`&&t.push({file:u,level:r,message:`Missing required frontmatter field: "${n}".`,suggestion:`Add the "${n}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let n=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of n)if(s[r]&&Number.isNaN(Date.parse(String(s[r])))){let n=E(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${s[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(s.title){let r=String(s.title);if(r.length<n){let i=E(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,level:i,message:`Title is too short (${r.length} chars).`,suggestion:`Titles should be at least ${n} characters for better SEO.`})}else if(r.length>a){let n=E(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Title is too long (${r.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let i=c.get(r)||[];i.push(u),c.set(r,i)}if(s.description&&String(s.description).length<o){let n=E(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(n){if(n instanceof Error){let r=E(e,`malformedFrontmatter`,`high`);r!==`off`&&t.push({file:u,level:r,message:`Malformed frontmatter (YAML error): ${n.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[n,r]of c.entries())if(r.length>1){let i=E(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)t.push({file:e,level:i,message:`Duplicate title found: "${n}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return t}async function R(e){let t=[],{internal:n,external:r,ignore:a,timeout:o,concurrency:l}=e.doctorConfig.checks.links;if(!n&&!r&&!e.options.checkExternal)return t;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let o of e.files){let l=i(s.relative(e.docsDir,o)),{content:u}=await k(o),m=[...(u.length>p?u.slice(0,p):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let i of m){let u=i[1]||i[2],d=!!i[1];if(!u||a.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(r||e.options.checkExternal)&&f.add({url:u,file:o});continue}if(!n||/^(mailto|tel|#)/i.test(u))continue;let p;try{p=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{p=u.split(`#`)[0].split(`?`)[0]}if(!p)continue;let m=!1,h=``;if(p.startsWith(`/`))if(e.routeIndex.has(p)||e.routeIndexWithSlash.has(p)||e.routeIndexWithoutSlash.has(p))m=!0;else{let t=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))m=!1,h=t;else{let t=e.config.base!==`/`&&p.startsWith(e.config.base||`/`)?p.substring((e.config.base||`/`).length):p,n=t.startsWith(`/`)?t.substring(1):t;h=s.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>j(h+e))}}else h=s.resolve(s.dirname(o),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>j(h+e));if(!m){let{bestMatch:n,similarity:r}=I(p,e.linkTree.routes),i=!1,a=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(n=a,r=1,i=!0);let s=r>.6||i,f=r>.75&&n!==p||i,m=E(e,`brokenLink`,`high`);m!==`off`&&t.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:s?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,t=d?`(${u})`:`href="${u}"`,r=d?`(${n}${e})`:`href="${n}${e}"`,i=c.readFileSync(o,`utf-8`).replace(t,r);c.writeFileSync(o,i),O.delete(o)}:void 0})}}}if(f.size>0){h(u.gray(`Verifying ${f.size} external links...`));let n=new Map;for(let e of f)n.has(e.url)||n.set(e.url,[]),n.get(e.url).push(e.file);let r=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),o),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(n.keys()),c=[];for(let e=0;e<a.length;e+=l){let t=a.slice(e,e+l),n=await Promise.allSettled(t.map(r));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let r of c)if(!r.ok){let a=E(e,`brokenLink`,`warning`);if(a!==`off`){let o=n.get(r.url)||[];for(let n of o)t.push({file:i(s.relative(e.docsDir,n)),level:a,message:`Broken external link: "${r.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${r.error||`Status >= 400`}`})}}}return t}async function z(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:n,locales:r}=e.config.i18n,a=Object.keys(r),o=a.filter(e=>e!==n);for(let r of e.files){let l=i(s.relative(e.docsDir,r)),u=l.split(`/`),d=u[0];if(d===n){let n=u.slice(1).join(`/`);for(let i of o){let a=s.join(e.docsDir,i,n);if(!j(a)){let o=E(e,`missingTranslation`,`warning`);o!==`off`&&t.push({file:l,level:o,message:`Missing translation for locale "${i}"`,suggestion:`Create a version at "${i}/${n}".`,fix:async()=>{let e=s.dirname(a);c.existsSync(e)||c.mkdirSync(e,{recursive:!0}),c.copyFileSync(r,a)}})}}}else if(a.includes(d)){let i=u.slice(1).join(`/`);if(!j(s.join(e.docsDir,n,i))){let a=E(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:l,level:a,message:`Orphaned translation (source missing in "${n}")`,suggestion:`Remove this file or create the source at "${n}/${i}".`,fix:async()=>{c.unlinkSync(r)}})}}}return t}async function B(e){let t=[];if(!e.config.theme.sidebar)return t;let n=new Set,r=e.config.theme.sidebar;for(let[i,a]of Object.entries(r))for(let r of a){if(!r.text){let n=E(e,`invalidFrontmatter`,`warning`);n!==`off`&&t.push({file:`boltdocs.config.ts`,level:n,message:`Sidebar item in group "${i}" is missing a label.`,suggestion:`Add a "text" property to the sidebar item.`})}if(r.link&&(n.add(r.link),!e.routeIndex.has(r.link))){let{bestMatch:n,similarity:i}=I(r.link,e.linkTree.routes),a=i>.6,o=E(e,`brokenLink`,`high`);o!==`off`&&t.push({file:`boltdocs.config.ts`,level:o,message:`Broken sidebar link: "${r.link}"`,suggestion:a?`Did you mean "${n}"?`:`Ensure the route exists and is correctly formatted.`})}}for(let r of e.linkTree.routes)if(!(r===`/`||r===``)&&!n.has(r)){let n=E(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}async function V(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=s.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!c.existsSync(r))return t.push({file:`(build)`,level:E(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let i;try{i=JSON.parse(c.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:E(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let a=n.budgets,o=E(e,`budgetExceeded`,`warning`),l=T(a?.maxJSBundleSize,1/0),u=T(a?.maxCSSBundleSize,1/0),d=T(a?.maxPageHTMLSize,1/0),f=a?.maxImagesKB??1/0,p=a?.maxBuildTime??1/0,m=a?.maxFontCount??1/0;if(l!==1/0&&i.totalJSBundleSize>l){let e=(i.totalJSBundleSize/1024).toFixed(0),n=(l/1024).toFixed(0);t.push({file:`(build)`,level:o,message:`JS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Code-split large dependencies or lazy-load route components.`})}if(u!==1/0&&i.totalCSSBundleSize>u){let e=(i.totalCSSBundleSize/1024).toFixed(0),n=(u/1024).toFixed(0);t.push({file:`(build)`,level:o,message:`CSS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Remove unused styles or split CSS by route.`})}if(d!==1/0){for(let e of i.pages)if(e.htmlSize>d){let n=(e.htmlSize/1024).toFixed(0),r=(d/1024).toFixed(0);t.push({file:e.route,level:o,message:`Page HTML size exceeds budget: ${n}kb > ${r}kb`,suggestion:`Reduce the amount of inline content or split into sub-pages.`})}}let h=f*1024;if(f!==1/0&&i.totalImagesSize>h){let e=(i.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:o,message:`Image assets exceed budget: ${e}kb > ${f}kb`,suggestion:`Optimize images with lossy compression or use next-gen formats (webp/avif).`})}if(p!==1/0&&i.buildTime>p){let e=(i.buildTime/1e3).toFixed(1),n=(p/1e3).toFixed(1);t.push({file:`(build)`,level:o,message:`Build time exceeds budget: ${e}s > ${n}s`,suggestion:"Check for large unoptimized assets or increase `concurrency` in SSG options."})}return m!==1/0&&i.fontCount>m&&t.push({file:`(build)`,level:o,message:`Font files exceed budget: ${i.fontCount} > ${m}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}var H=e({DEFAULT_DOCTOR_CONFIG:()=>w,checkI18n:()=>z,checkLinks:()=>R,checkMetadata:()=>L,checkPerformance:()=>V,checkSidebar:()=>B,doctorAction:()=>W,doctorInit:()=>U,generateLinkTree:()=>N,loadDoctorConfig:()=>M});async function U(e){let t=s.resolve(e,`doctor.json`);if(c.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{c.writeFileSync(t,JSON.stringify(w,null,2)),v(`Created "doctor.json" with default configuration.`)}catch(e){m(`Failed to create "doctor.json": ${e}`)}}async function W(e=process.cwd(),t={}){if(t.init){await U(e);return}o();try{let n=await M(e),{format:r}=n.reporting,i=performance.now(),o=await a(`docs`,e),b=s.resolve(e,`docs`);c.existsSync(b)||(r===`pretty`&&m(`Docs dir not found at ${b}`),process.exit(1)),r===`pretty`&&console.log(p([` ${u.dim(`Docs dir:`)} ${b}`,` ${u.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),r===`pretty`&&h(u.dim(`🔍 Discovering files and routes...`));let C=S(n.exclude||[]),w=await new x().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=s.relative(b,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!C(t)&&!n}).crawl(b).withPromise();for(let e of w)A.set(e,!0);let T=await N(b,e,o,w),E=o.base||`/`,O=E===`/`?``:E.endsWith(`/`)?E.slice(0,-1):E,k={root:e,docsDir:b,config:o,doctorConfig:n,linkTree:T,files:w,options:t,routeIndex:new Set(T.routes),routeIndexWithSlash:new Set(T.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(T.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:O};r===`pretty`&&h(u.dim(`🧪 Running diagnostic checks in parallel...`));let j=[L(k),R(k),z(k),B(k)];t.budget&&j.push(V(k));let[P,F,I,H,...U]=await Promise.all(j),W=t.budget?U[0]:[],G=[...P,...F,...I,...H,...W];if(r===`pretty`){let e=[{label:`Metadata checks ${P.length>0?`— ${P.length} issue${P.length===1?``:`s`}`:`— OK`}`,done:P.length===0},{label:`Link checks ${F.length>0?`— ${F.length} issue${F.length===1?``:`s`}`:`— OK`}`,done:F.length===0},{label:`i18n checks ${I.length>0?`— ${I.length} issue${I.length===1?``:`s`}`:`— OK`}`,done:I.length===0},{label:`Sidebar checks ${H.length>0?`— ${H.length} issue${H.length===1?``:`s`}`:`— OK`}`,done:H.length===0}];t.budget&&e.push({label:`Performance budget ${W.length>0?`— ${W.length} issue${W.length===1?``:`s`}`:`— OK`}`,done:W.length===0}),console.log(`\n${y(e)}`)}let K=0;if(t.fix){for(let e of G)if(e.fix){if(k.doctorConfig.fix.confirmChanges&&!await d(`Fix issue in "${e.file}": ${e.message}?`))continue;if(k.doctorConfig.fix.backupFiles){let t=s.resolve(k.docsDir,e.file);c.existsSync(t)&&await D(t,s.resolve(k.root,k.doctorConfig.fix.backupPath))}await e.fix(),K++}}let q=((performance.now()-i)/1e3).toFixed(2),J=G.filter(e=>e.level===`high`).length,Y=G.filter(e=>e.level===`warning`).length,X=G.filter(e=>e.level===`low`).length,Z={summary:{total:G.length,high:J,warning:Y,low:X,fixed:K,duration:q},issues:G.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=s.resolve(e,n.reporting.outputFile);c.existsSync(s.dirname(t))||c.mkdirSync(s.dirname(t),{recursive:!0}),c.writeFileSync(t,JSON.stringify(Z,null,2))}if(r===`json`)console.log(JSON.stringify(Z,null,2));else if(r===`pretty`){let e=G.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(G.length>0){f();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?u.red:n.level===`warning`?u.yellow:u.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${u.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${u.green(`✅ Fixed automatically`)}`)}console.log(`\n${_(e,{title:`📄 ${n}`})}`)}f()}if(G.length===0)console.log(g([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${u.dim(`Scanned ${w.length} file${w.length===1?``:`s`} in ${q}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];J>0&&e.push(u.red(`${J} Critical Error${J===1?``:`s`}`)),Y>0&&e.push(u.yellow(`${Y} Warning${Y===1?``:`s`}`)),X>0&&e.push(u.blue(`${X} Improvement${X===1?``:`s`}`));let t=[...l(e).split(`
7
+ `).map(e=>e.trimStart()),``,u.dim(`Scanned ${w.length} file${w.length===1?``:`s`} in ${q}s`)];console.log(`\n${p(t,{title:`Diagnosis Results`})}\n`),K>0&&v(`Successfully fixed ${K} issues automatically!`),J>0?m(`Please fix the critical errors before building for production.`):v(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&J>0&&process.exit(1),n.reporting.maxWarnings!==-1&&Y>n.reporting.maxWarnings&&(r===`pretty`&&m(`Failed: Too many warnings (${Y} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){m(`Doctor failed: ${e}`),process.exit(1)}}export{N as n,H as t};
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./parser-C2Pw18LY.cjs`);exports.parseDocFile=e.t;
6
+ const e=require(`./doctor-DzEgMMRo.cjs`);exports.doctorAction=e.t;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`),n=require(`./config-BqZUYono.cjs`),r=require(`./node/cli-entry.cjs`);let i=require(`node:path`);i=e.n(i);let a=require(`node:fs`);a=e.n(a);let o=require(`@bdocs/dui`),s=require(`fdir`),c=require(`picomatch`);c=e.n(c);let l=require(`fastest-levenshtein`);const u={$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 d(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 f(e,t,n){return e.doctorConfig.severity[t]||n}async function p(e,t){a.default.existsSync(t)||a.default.mkdirSync(t,{recursive:!0});let n=i.default.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),o=i.default.join(t,`${n}.${r}.bak`);a.default.copyFileSync(e,o)}const m=new Map;function h(e){let n=m.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 m.set(e,r),r}const g=new Map;function _(e){if(g.has(e))return g.get(e);let t=!1;try{t=a.default.existsSync(e)&&a.default.statSync(e).isFile()}catch{t=!1}return g.set(e,t),t}async function v(e){let t=i.default.resolve(e,`doctor.json`);if(a.default.existsSync(t))try{let e=JSON.parse(a.default.readFileSync(t,`utf-8`));return{...u,...e,checks:{...u.checks,...e.checks,metadata:{...u.checks.metadata,...e.checks?.metadata},links:{...u.checks.links,...e.checks?.links},i18n:{...u.checks.i18n,...e.checks?.i18n},performance:{...u.checks.performance,...e.checks?.performance,budgets:{...u.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...u.fix,...e.fix},reporting:{...u.reporting,...e.reporting},severity:{...u.severity,...e.severity},exclude:[...u.exclude,...e.exclude||[]]}}catch(e){(0,o.warn)(`Failed to parse doctor.json: ${e}`)}return u}async function y(e,n=process.cwd(),r,o){let c=i.default.resolve(n,`.boltdocs`,`generated`);a.default.existsSync(c)||a.default.mkdirSync(c,{recursive:!0});let l=o;l||=await new s.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=r?.base||`/docs`,d=[];for(let n=0;n<l.length;n+=100){let r=l.slice(n,n+100),a=await Promise.all(r.map(async n=>{let r=i.default.isAbsolute(n)?n:i.default.resolve(e,n),a=i.default.relative(e,r),{data:o}=await h(r),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.a(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return a.default.writeFileSync(i.default.resolve(c,`link-tree.json`),JSON.stringify(f,null,2)),f}function b(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,l.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,l.distance)(e,t)/Math.max(e.length,t.length)}const x=new Map;function S(e,t){if(x.has(e))return x.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=b(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return x.set(e,a),a}async function C(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:r,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.u(i.default.relative(e.docsDir,c));try{let{raw:i,data:u}=await h(c);if(i.trim().startsWith(`---`)&&i.split(`---`).length>=3&&Object.keys(u).length===0){let t=f(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=f(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 p=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let t of p)if(u[t]===void 0){let r=f(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=f(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=f(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>a){let r=f(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 i=s.get(t)||[];i.push(l),s.set(t,i)}if(u.description&&String(u.description).length<o){let t=f(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=f(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=f(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 w(e){let n=[],{internal:r,external:s,ignore:c,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!r&&!s&&!e.options.checkExternal)return n;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,p=new Set,g=5e5;for(let o of e.files){let l=t.u(i.default.relative(e.docsDir,o)),{content:u}=await h(o),v=[...(u.length>g?u.slice(0,g):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let t of v){let u=t[1]||t[2],d=!!t[1];if(!u||c.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(s||e.options.checkExternal)&&p.add({url:u,file:o});continue}if(!r||/^(mailto|tel|#)/i.test(u))continue;let h;try{h=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{h=u.split(`#`)[0].split(`?`)[0]}if(!h)continue;let g=!1,v=``;if(h.startsWith(`/`))if(e.routeIndex.has(h)||e.routeIndexWithSlash.has(h)||e.routeIndexWithoutSlash.has(h))g=!0;else{let t=e.basePrefix+(h.startsWith(`/`)?h:`/`+h);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))g=!1,v=t;else{let t=e.config.base!==`/`&&h.startsWith(e.config.base||`/`)?h.substring((e.config.base||`/`).length):h,n=t.startsWith(`/`)?t.substring(1):t;v=i.default.join(e.docsDir,n),g=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>_(v+e))}}else v=i.default.resolve(i.default.dirname(o),h),g=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>_(v+e));if(!g){let{bestMatch:t,similarity:r}=S(h,e.linkTree.routes),i=!1,s=e.basePrefix+(h.startsWith(`/`)?h:`/`+h);(e.routeIndex.has(s)||e.routeIndexWithSlash.has(s))&&(t=s,r=1,i=!0);let c=r>.6||i,p=r>.75&&t!==h||i,g=f(e,`brokenLink`,`high`);g!==`off`&&n.push({file:l,level:g,message:`Broken internal link: "${u}"`,suggestion:c?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:p?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=d?`(${u})`:`href="${u}"`,r=d?`(${t}${e})`:`href="${t}${e}"`,i=a.default.readFileSync(o,`utf-8`).replace(n,r);a.default.writeFileSync(o,i),m.delete(o)}:void 0})}}}if(p.size>0){(0,o.info)(o.colors.gray(`Verifying ${p.size} external links...`));let r=new Map;for(let e of p)r.has(e.url)||r.set(e.url,[]),r.get(e.url).push(e.file);let a=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),l),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},s=Array.from(r.keys()),c=[];for(let e=0;e<s.length;e+=u){let t=s.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=f(e,`brokenLink`,`warning`);if(o!==`off`){let s=r.get(a.url)||[];for(let r of s)n.push({file:t.u(i.default.relative(e.docsDir,r)),level:o,message:`Broken external link: "${a.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${a.error||`Status >= 400`}`})}}}return n}async function T(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:r,locales:o}=e.config.i18n,s=Object.keys(o),c=s.filter(e=>e!==r);for(let o of e.files){let l=t.u(i.default.relative(e.docsDir,o)),u=l.split(`/`),d=u[0];if(d===r){let t=u.slice(1).join(`/`);for(let r of c){let s=i.default.join(e.docsDir,r,t);if(!_(s)){let c=f(e,`missingTranslation`,`warning`);c!==`off`&&n.push({file:l,level:c,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${t}".`,fix:async()=>{let e=i.default.dirname(s);a.default.existsSync(e)||a.default.mkdirSync(e,{recursive:!0}),a.default.copyFileSync(o,s)}})}}}else if(s.includes(d)){let t=u.slice(1).join(`/`);if(!_(i.default.join(e.docsDir,r,t))){let i=f(e,`missingTranslation`,`low`);i!==`off`&&n.push({file:l,level:i,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${t}".`,fix:async()=>{a.default.unlinkSync(o)}})}}}return n}async function E(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=f(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}=S(r.link,e.linkTree.routes),a=i>.6,o=f(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=f(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 D(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=i.default.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!a.default.existsSync(r))return t.push({file:`(build)`,level:f(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let o;try{o=JSON.parse(a.default.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:f(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let s=n.budgets,c=f(e,`budgetExceeded`,`warning`),l=d(s?.maxJSBundleSize,1/0),u=d(s?.maxCSSBundleSize,1/0),p=d(s?.maxPageHTMLSize,1/0),m=s?.maxImagesKB??1/0,h=s?.maxBuildTime??1/0,g=s?.maxFontCount??1/0;if(l!==1/0&&o.totalJSBundleSize>l){let e=(o.totalJSBundleSize/1024).toFixed(0),n=(l/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`JS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Code-split large dependencies or lazy-load route components.`})}if(u!==1/0&&o.totalCSSBundleSize>u){let e=(o.totalCSSBundleSize/1024).toFixed(0),n=(u/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`CSS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Remove unused styles or split CSS by route.`})}if(p!==1/0){for(let e of o.pages)if(e.htmlSize>p){let n=(e.htmlSize/1024).toFixed(0),r=(p/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&&o.totalImagesSize>_){let e=(o.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&&o.buildTime>h){let e=(o.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&&o.fontCount>g&&t.push({file:`(build)`,level:c,message:`Font files exceed budget: ${o.fontCount} > ${g}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function O(e){let t=i.default.resolve(e,`doctor.json`);if(a.default.existsSync(t)){(0,o.warn)(`"doctor.json" already exists at ${e}.`);return}try{a.default.writeFileSync(t,JSON.stringify(u,null,2)),(0,o.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,o.error)(`Failed to create "doctor.json": ${e}`)}}async function k(e=process.cwd(),t={}){if(t.init){await O(e);return}r.t();try{let r=await v(e),{format:l}=r.reporting,u=performance.now(),d=await n.n(`docs`,e),f=i.default.resolve(e,`docs`);a.default.existsSync(f)||(l===`pretty`&&(0,o.error)(`Docs dir not found at ${f}`),process.exit(1)),l===`pretty`&&console.log((0,o.double)([` ${o.colors.dim(`Docs dir:`)} ${f}`,` ${o.colors.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),l===`pretty`&&(0,o.info)(o.colors.dim(`🔍 Discovering files and routes...`));let m=(0,c.default)(r.exclude||[]),h=await new s.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=i.default.relative(f,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!m(t)&&!n}).crawl(f).withPromise();for(let e of h)g.set(e,!0);let _=await y(f,e,d,h),b=d.base||`/`,x=b===`/`?``:b.endsWith(`/`)?b.slice(0,-1):b,S={root:e,docsDir:f,config:d,doctorConfig:r,linkTree:_,files:h,options:t,routeIndex:new Set(_.routes),routeIndexWithSlash:new Set(_.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(_.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:x};l===`pretty`&&(0,o.info)(o.colors.dim(`🧪 Running diagnostic checks in parallel...`));let O=[C(S),w(S),T(S),E(S)];t.budget&&O.push(D(S));let[k,A,j,M,...N]=await Promise.all(O),P=t.budget?N[0]:[],F=[...k,...A,...j,...M,...P];if(l===`pretty`){let e=[{label:`Metadata checks ${k.length>0?`— ${k.length} issue${k.length===1?``:`s`}`:`— OK`}`,done:k.length===0},{label:`Link checks ${A.length>0?`— ${A.length} issue${A.length===1?``:`s`}`:`— OK`}`,done:A.length===0},{label:`i18n checks ${j.length>0?`— ${j.length} issue${j.length===1?``:`s`}`:`— OK`}`,done:j.length===0},{label:`Sidebar checks ${M.length>0?`— ${M.length} issue${M.length===1?``:`s`}`:`— OK`}`,done:M.length===0}];t.budget&&e.push({label:`Performance budget ${P.length>0?`— ${P.length} issue${P.length===1?``:`s`}`:`— OK`}`,done:P.length===0}),console.log(`\n${(0,o.tasks)(e)}`)}let I=0;if(t.fix){for(let e of F)if(e.fix){if(S.doctorConfig.fix.confirmChanges&&!await(0,o.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(S.doctorConfig.fix.backupFiles){let t=i.default.resolve(S.docsDir,e.file);a.default.existsSync(t)&&await p(t,i.default.resolve(S.root,S.doctorConfig.fix.backupPath))}await e.fix(),I++}}let L=((performance.now()-u)/1e3).toFixed(2),R=F.filter(e=>e.level===`high`).length,z=F.filter(e=>e.level===`warning`).length,B=F.filter(e=>e.level===`low`).length,V={summary:{total:F.length,high:R,warning:z,low:B,fixed:I,duration:L},issues:F.map(e=>({...e,fix:void 0}))};if(r.reporting.outputFile){let t=i.default.resolve(e,r.reporting.outputFile);a.default.existsSync(i.default.dirname(t))||a.default.mkdirSync(i.default.dirname(t),{recursive:!0}),a.default.writeFileSync(t,JSON.stringify(V,null,2))}if(l===`json`)console.log(JSON.stringify(V,null,2));else if(l===`pretty`){let e=F.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(F.length>0){(0,o.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`?o.colors.red:n.level===`warning`?o.colors.yellow:o.colors.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${o.colors.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${o.colors.green(`✅ Fixed automatically`)}`)}console.log(`\n${(0,o.single)(e,{title:`📄 ${n}`})}`)}(0,o.dividerLog)()}if(F.length===0)console.log((0,o.round)([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${o.colors.dim(`Scanned ${h.length} file${h.length===1?``:`s`} in ${L}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];R>0&&e.push(o.colors.red(`${R} Critical Error${R===1?``:`s`}`)),z>0&&e.push(o.colors.yellow(`${z} Warning${z===1?``:`s`}`)),B>0&&e.push(o.colors.blue(`${B} Improvement${B===1?``:`s`}`));let t=[...(0,o.bullet)(e).split(`
7
+ `).map(e=>e.trimStart()),``,o.colors.dim(`Scanned ${h.length} file${h.length===1?``:`s`} in ${L}s`)];console.log(`\n${(0,o.double)(t,{title:`Diagnosis Results`})}\n`),I>0&&(0,o.success)(`Successfully fixed ${I} issues automatically!`),R>0?(0,o.error)(`Please fix the critical errors before building for production.`):(0,o.success)(`No critical issues found. You are ready to go!`)}}r.reporting.failOnError&&R>0&&process.exit(1),r.reporting.maxWarnings!==-1&&z>r.reporting.maxWarnings&&(l===`pretty`&&(0,o.error)(`Failed: Too many warnings (${z} > ${r.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,o.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return u}});
@@ -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
+ var e=class e extends Error{constructor(t){super(t),this.name=`SecurityViolationError`,Object.setPrototypeOf(this,e.prototype)}},t=class t extends e{constructor(e){super(e),this.name=`PathTraversalError`,Object.setPrototypeOf(this,t.prototype)}},n=class t extends e{constructor(e){super(e),this.name=`EncodingSecurityError`,Object.setPrototypeOf(this,t.prototype)}},r=class t extends e{constructor(e){super(e),this.name=`ValidationError`,Object.setPrototypeOf(this,t.prototype)}};export{t as n,r,n 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
+ var e=class e extends Error{constructor(t){super(t),this.name=`SecurityViolationError`,Object.setPrototypeOf(this,e.prototype)}},t=class t extends e{constructor(e){super(e),this.name=`PathTraversalError`,Object.setPrototypeOf(this,t.prototype)}},n=class t extends e{constructor(e){super(e),this.name=`EncodingSecurityError`,Object.setPrototypeOf(this,t.prototype)}},r=class t extends e{constructor(e){super(e),this.name=`ValidationError`,Object.setPrototypeOf(this,t.prototype)}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{t as e}from"./doctor-BY1tSmQd.mjs";export{e as doctorAction};
6
+ import{t as e}from"./handler-CyIBbZdb.mjs";export{e as handleFeedback};
@@ -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
+ var e=require(`./chunk-Ds5LZdWN.cjs`).t({SECURITY_HEADERS:()=>t});const t={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return 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{P as e}from"./node-B7qbjtLl.mjs";var t=e({SECURITY_HEADERS:()=>n});const n={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};export{t as n,n as t};
@@ -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-Ds5LZdWN.cjs`);let t=require(`node:path`);t=e.n(t);let n=require(`fdir`),r=require(`@bdocs/dui`),i=require(`node:fs/promises`);i=e.n(i);async function a(e){let a={};try{let o=(await new n.fdir().withFullPaths().filter(e=>e.endsWith(`meta.json`)).crawl(e).withPromise()).filter(e=>{let n=t.default.basename(e);return n===`meta.json`||n===`_meta.json`}),s=await Promise.allSettled(o.map(async n=>{let r=await i.default.readFile(n,`utf-8`),a=t.default.relative(e,t.default.dirname(n)).replace(/\\/g,`/`);return{key:a===``?`.`:a,content:JSON.parse(r)}}));for(let e of s)e.status===`fulfilled`?a[e.value.key]=e.value.content:(0,r.warn)(`Failed to read meta.json:`,e.reason)}catch(e){(0,r.error)(`Error loading directory metadata:`,e)}return a}exports.loadDirectoryMeta=a;
6
+ const e=require(`./chunk-Ds5LZdWN.cjs`);let t=require(`node:path`);t=e.n(t);let n=require(`@bdocs/dui`),r=require(`fdir`),i=require(`node:fs/promises`);i=e.n(i);async function a(e){let a={};try{let o=(await new r.fdir().withFullPaths().filter(e=>e.endsWith(`meta.json`)).crawl(e).withPromise()).filter(e=>{let n=t.default.basename(e);return n===`meta.json`||n===`_meta.json`}),s=await Promise.allSettled(o.map(async n=>{let r=await i.default.readFile(n,`utf-8`),a=t.default.relative(e,t.default.dirname(n)).replace(/\\/g,`/`);return{key:a===``?`.`:a,content:JSON.parse(r)}}));for(let e of s)e.status===`fulfilled`?a[e.value.key]=e.value.content:(0,n.warn)(`Failed to read meta.json:`,e.reason)}catch(e){(0,n.error)(`Error loading directory metadata:`,e)}return a}exports.loadDirectoryMeta=a;
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import e from"node:path";import{fdir as t}from"fdir";import{error as n,warn as r}from"@bdocs/dui";import i from"node:fs/promises";async function a(a){let o={};try{let n=(await new t().withFullPaths().filter(e=>e.endsWith(`meta.json`)).crawl(a).withPromise()).filter(t=>{let n=e.basename(t);return n===`meta.json`||n===`_meta.json`}),s=await Promise.allSettled(n.map(async t=>{let n=await i.readFile(t,`utf-8`),r=e.relative(a,e.dirname(t)).replace(/\\/g,`/`);return{key:r===``?`.`:r,content:JSON.parse(n)}}));for(let e of s)e.status===`fulfilled`?o[e.value.key]=e.value.content:r(`Failed to read meta.json:`,e.reason)}catch(e){n(`Error loading directory metadata:`,e)}return o}export{a as loadDirectoryMeta};
6
+ import e from"node:path";import{error as t,warn as n}from"@bdocs/dui";import{fdir as r}from"fdir";import i from"node:fs/promises";async function a(a){let o={};try{let t=(await new r().withFullPaths().filter(e=>e.endsWith(`meta.json`)).crawl(a).withPromise()).filter(t=>{let n=e.basename(t);return n===`meta.json`||n===`_meta.json`}),s=await Promise.allSettled(t.map(async t=>{let n=await i.readFile(t,`utf-8`),r=e.relative(a,e.dirname(t)).replace(/\\/g,`/`);return{key:r===``?`.`:r,content:JSON.parse(n)}}));for(let e of s)e.status===`fulfilled`?o[e.value.key]=e.value.content:n(`Failed to read meta.json:`,e.reason)}catch(e){t(`Error loading directory metadata:`,e)}return o}export{a as loadDirectoryMeta};
@@ -4,6 +4,12 @@
4
4
  * Copyright (c) 2026 Jesus Alcala
5
5
  * Licensed under the MIT License.
6
6
  */
7
- const e=require(`../chunk-Ds5LZdWN.cjs`),t=require(`../cache-C2PiGyg8.cjs`),n=require(`../doctor-DcFLi4t1.cjs`),r=require(`../node-vOVNRABe.cjs`);let i=require(`node:path`);i=e.n(i);let a=require(`node:fs`);a=e.n(a);let o=require(`vite`),s=require(`@bdocs/dui`),c=require(`node:fs/promises`);c=e.n(c);let l=require(`@bdocs/ssg/node`),u=require(`cac`);u=e.n(u);function d(e){let t=e;for(;t&&t!==i.default.dirname(t);){if(a.default.existsSync(i.default.join(t,`.git`))||a.default.existsSync(i.default.join(t,`pnpm-workspace.yaml`)))return t;t=i.default.dirname(t)}t=e;let n=e;for(;t&&t!==i.default.dirname(t);)a.default.existsSync(i.default.join(t,`package.json`))&&(n=t),t=i.default.dirname(t);return n}let f=d(process.cwd());function p(e){if(!e)return;let t;if(typeof e==`string`)t=e;else if(e instanceof URL){if(e.protocol!==`file:`)return;t=e.pathname}else if(Buffer.isBuffer(e))t=e.toString();else return;let n=i.default.resolve(f,t),r=i.default.relative(f,n),a=r.startsWith(`..`)||i.default.isAbsolute(r),o=n.split(i.default.sep),s=o.some(e=>e.startsWith(`.env`)),c=o.some((e,t)=>{if(e===`node_modules`){let e=o[t+1];return!e||!e.startsWith(`.`)}return!1});if(a||s||c)throw Error(`[Boltdocs Security] Write/delete operation blocked on path: "${n}". Modifications are restricted to the project root, and cannot access .env or non-cache node_modules folders.`)}function m(e){return e==null?!1:typeof e==`number`?e!==0:typeof e==`string`?e.includes(`w`)||e.includes(`a`)||e.includes(`+`):!0}function h(){let e=a.default.writeFile;a.default.writeFile=((t,...n)=>{try{p(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return e.call(a.default,t,...n)});let t=a.default.writeFileSync;a.default.writeFileSync=(e,...n)=>(p(e),t.call(a.default,e,...n));let n=a.default.rm;a.default.rm=((e,...t)=>{try{p(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return n.call(a.default,e,...t)});let r=a.default.rmSync;a.default.rmSync=(e,...t)=>(p(e),r.call(a.default,e,...t));let i=a.default.unlink;a.default.unlink=((e,...t)=>{try{p(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return i.call(a.default,e,...t)});let o=a.default.unlinkSync;a.default.unlinkSync=(e,...t)=>(p(e),o.call(a.default,e,...t));let s=a.default.mkdir;a.default.mkdir=((e,...t)=>{try{p(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return s.call(a.default,e,...t)});let l=a.default.mkdirSync;a.default.mkdirSync=(e,...t)=>(p(e),l.call(a.default,e,...t));let u=a.default.rmdir;a.default.rmdir=((e,...t)=>{try{p(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return u.call(a.default,e,...t)});let d=a.default.rmdirSync;a.default.rmdirSync=(e,...t)=>(p(e),d.call(a.default,e,...t));let f=a.default.appendFile;a.default.appendFile=((e,...t)=>{try{p(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return f.call(a.default,e,...t)});let h=a.default.appendFileSync;a.default.appendFileSync=(e,...t)=>(p(e),h.call(a.default,e,...t));let g=a.default.copyFile;a.default.copyFile=((e,t,...n)=>{try{p(e),p(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return g.call(a.default,e,t,...n)});let _=a.default.copyFileSync;a.default.copyFileSync=(e,t,...n)=>(p(e),p(t),_.call(a.default,e,t,...n));let v=a.default.rename;a.default.rename=((e,t,...n)=>{try{p(e),p(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return v.call(a.default,e,t,...n)});let y=a.default.renameSync;a.default.renameSync=(e,t,...n)=>(p(e),p(t),y.call(a.default,e,t,...n));let b=a.default.createWriteStream;a.default.createWriteStream=(e,...t)=>(p(e),b.call(a.default,e,...t));let x=a.default.open;a.default.open=((e,t,...n)=>{if(m(typeof t==`function`?void 0:t))try{p(e)}catch(e){let r=n[n.length-1],i=typeof t==`function`?t:typeof r==`function`?r:void 0;if(i){process.nextTick(()=>i(e));return}throw e}return x.call(a.default,e,t,...n)});let S=a.default.openSync;a.default.openSync=(e,t,...n)=>(m(t)&&p(e),S.call(a.default,e,t,...n));let C=e=>{if(!e)return;let t=e.writeFile;t&&(e.writeFile=async(n,...r)=>(p(n),t.call(e,n,...r)));let n=e.rm;n&&(e.rm=async(t,...r)=>(p(t),n.call(e,t,...r)));let r=e.mkdir;r&&(e.mkdir=async(t,...n)=>(p(t),r.call(e,t,...n)));let i=e.rmdir;i&&(e.rmdir=async(t,...n)=>(p(t),i.call(e,t,...n)));let a=e.unlink;a&&(e.unlink=async(t,...n)=>(p(t),a.call(e,t,...n)));let o=e.appendFile;o&&(e.appendFile=async(t,...n)=>(p(t),o.call(e,t,...n)));let s=e.copyFile;s&&(e.copyFile=async(t,n,...r)=>(p(t),p(n),s.call(e,t,n,...r)));let c=e.rename;c&&(e.rename=async(t,n,...r)=>(p(t),p(n),c.call(e,t,n,...r)));let l=e.open;l&&(e.open=async(t,n,...r)=>(m(n)&&p(t),l.call(e,t,n,...r)))};C(a.default.promises),C(c.default)}let g=!1;async function _(e=process.cwd(),t={}){if(g)return;g=!0,n.d();let a;try{a=await n.h(i.default.resolve(e,`docs`),e),r.w(a,e)}catch{}try{let i=await r.n(e,`development`,a);i.logLevel=`warn`,i.clearScreen=!1,t.port!==void 0&&(i.server=i.server||{},i.server.port=Number(t.port)),t.host!==void 0&&(i.server=i.server||{},i.server.host=t.host),t.force&&(i.optimizeDeps=i.optimizeDeps||{},i.optimizeDeps.force=!0);let o=await(0,l.createServer)(i);await o.listen();let s=o.resolvedUrls;console.log(n.f(s?.local?.[0]??`http://localhost:${t.port??5173}`,s?.network?.[0]??null)),o.bindCLIShortcuts({print:!1})}catch(e){(0,s.error)(`Failed to start dev server:`,e),process.exit(1)}}async function v(e=process.cwd()){n.d();try{let n=await r.C().run({root:e,timing:{}});n.success||((0,s.error)(`Build failed at step "${n.failedStep}":`,n.error),await t.a(),process.exit(1)),console.log((0,s.double)([`SSG build completed in ${(Math.round(n.timing.total)/1e3).toFixed(1)}s`,``,`${s.colors.cyan(`boltdocs`)} documentation is ready at ${s.colors.green(`dist/`)}`])),await t.a(),process.exit(0)}catch(e){(0,s.error)(`Build failed:`,e),await t.a(),process.exit(1)}}async function y(e=process.cwd(),t={}){try{let i=await r.n(e,`production`);i.logLevel=`warn`,i.clearScreen=!1,t.port!==void 0&&(i.preview=i.preview||{},i.preview.port=Number(t.port)),t.host!==void 0&&(i.preview=i.preview||{},i.preview.host=t.host);let a=(await(0,o.preview)(i)).resolvedUrls;console.log(n.p(a?.local?.[0]??`http://localhost:${t.port??4173}`,a?.network?.[0]??null))}catch(e){(0,s.error)(`Failed to start preview server:`,e),process.exit(1)}}function b(e){let t=[];if(!a.default.existsSync(e))return t;try{let n=a.default.readdirSync(e);for(let r of n){let n=i.default.join(e,r);a.default.statSync(n).isDirectory()?r!==`node_modules`&&r!==`.git`&&r!==`dist`&&r!==`coverage`&&t.push(...b(n)):/\.(js|mjs|cjs|ts|tsx|jsx)$/.test(r)&&t.push(n)}}catch{}return t}async function x(e=process.cwd()){(0,s.info)(`Starting static security audit of Boltdocs plugins...`);let t;try{t=await n.h(i.default.resolve(e,`docs`),e)}catch(e){(0,s.error)(`Failed to load Boltdocs configuration for audit:`,e),process.exit(1)}let r=t.plugins||[];if(r.length===0){(0,s.success)(`No plugins configured. Nothing to audit.`);return}let o=[];for(let t of r){if(!t.name)continue;let n=null;try{let{createRequire:r}=await import(`node:module`),a=r(i.default.resolve(e,`package.json`)).resolve(`${t.name}/package.json`);n=i.default.dirname(a)}catch{let r=i.default.resolve(e,`node_modules`,t.name);a.default.existsSync(r)&&(n=r)}if(!n){o.push({name:s.colors.cyan(t.name),status:s.colors.red(`❓ Unresolved`),details:`Could not locate plugin files in node_modules.`});continue}let r=b(n),c=[];for(let e of r)try{let t=a.default.readFileSync(e,`utf-8`);t.includes(`fetch(`)&&c.push(`fetch`),t.includes(`axios`)&&c.push(`axios`),t.includes(`http.request`)&&c.push(`http.request`),t.includes(`https.request`)&&c.push(`https.request`),t.includes(`process.env`)&&c.push(`process.env`)}catch{}let l=Array.from(new Set(c));l.length>0?o.push({name:s.colors.cyan(t.name),status:s.colors.yellow(`⚠️ Warning`),details:`Contains network/env accesses: ${s.colors.bold(l.join(`, `))}. Ensure you trust the author.`}):o.push({name:s.colors.cyan(t.name),status:s.colors.green(`✅ Clean`),details:`No external network calls or env accesses detected.`})}let c=[`Plugin`,`Status`,`Audit Notes`],l=o.map(e=>[e.name,e.status,e.details]);console.log(`
8
- `+(0,s.table)(c,l)+`
9
- `),o.some(e=>e.status.includes(`Warning`))?(0,s.warn)(`⚠️ One or more plugins have security warnings. Review the flags above.`):(0,s.success)(`✓ All plugins passed the static security check!`)}const{emitWarning:S}=process;process.emitWarning=function(e,...t){if(!(e&&typeof e==`object`&&e.code===`DEP0205`)&&!(typeof e==`string`&&t.includes(`DEP0205`)))return Reflect.apply(S,process,[e,...t])},h(),(0,s.configure)({prefix:`boltdocs`});const C=(0,u.default)(`boltdocs`);C.command(`dev [root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(_),C.command(`[root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(_),C.command(`build [root]`,`Build for production`).action(v),C.command(`preview [root]`,`Preview production build`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).action(y),C.command(`audit [root]`,`Audit configured plugins for security warnings`).action(x),C.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).option(`--budget`,`Check build performance against configured budgets`).action(async(e,t)=>{let{doctorAction:n}=await Promise.resolve().then(()=>require(`../doctor-Bknon8f5.cjs`));await n(e,t)}),C.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await Promise.resolve().then(()=>require(`../generator-BEIF6MOx.cjs`));await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),C.help(),C.version(`2.0.0`),C.parse();
7
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Ds5LZdWN.cjs`),t=require(`../node-Dj3-2YYP.cjs`),n=require(`../config-BqZUYono.cjs`),r=require(`../cache-B19MLTpN.cjs`);let i=require(`node:path`);i=e.n(i);let a=require(`node:fs`);a=e.n(a);let o=require(`@bdocs/dui`),s=require(`vite`),c=require(`node:module`),l=require(`node:fs/promises`);l=e.n(l);let u=require(`@bdocs/ssg/node`),d=require(`cac`);d=e.n(d);let f=require(`node:os`);f=e.n(f);let p=require(`node:url`);function m(e){let t=e;for(;t&&t!==i.default.dirname(t);){if(a.default.existsSync(i.default.join(t,`.git`))||a.default.existsSync(i.default.join(t,`pnpm-workspace.yaml`)))return t;t=i.default.dirname(t)}t=e;let n=e;for(;t&&t!==i.default.dirname(t);)a.default.existsSync(i.default.join(t,`package.json`))&&(n=t),t=i.default.dirname(t);return n}let h=m(process.cwd());function g(e){if(!e)return;let t;if(typeof e==`string`)t=e;else if(e instanceof URL){if(e.protocol!==`file:`)return;t=e.pathname}else if(Buffer.isBuffer(e))t=e.toString();else return;let n=i.default.resolve(h,t),r=i.default.relative(h,n),a=r.startsWith(`..`)||i.default.isAbsolute(r),o=n.split(i.default.sep),s=o.some(e=>e.startsWith(`.env`)),c=o.some((e,t)=>{if(e===`node_modules`){let e=o[t+1];return!e||!e.startsWith(`.`)}return!1});if(a||s||c)throw Error(`[Boltdocs Security] Write/delete operation blocked on path: "${n}". Modifications are restricted to the project root, and cannot access .env or non-cache node_modules folders.`)}function _(e){return e==null?!1:typeof e==`number`?e!==0:typeof e==`string`?e.includes(`w`)||e.includes(`a`)||e.includes(`+`):!0}function v(){let e=a.default.writeFile;a.default.writeFile=((t,...n)=>{try{g(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return e.call(a.default,t,...n)});let t=a.default.writeFileSync;a.default.writeFileSync=(e,...n)=>(g(e),t.call(a.default,e,...n));let n=a.default.rm;a.default.rm=((e,...t)=>{try{g(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return n.call(a.default,e,...t)});let r=a.default.rmSync;a.default.rmSync=(e,...t)=>(g(e),r.call(a.default,e,...t));let i=a.default.unlink;a.default.unlink=((e,...t)=>{try{g(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return i.call(a.default,e,...t)});let o=a.default.unlinkSync;a.default.unlinkSync=(e,...t)=>(g(e),o.call(a.default,e,...t));let s=a.default.mkdir;a.default.mkdir=((e,...t)=>{try{g(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return s.call(a.default,e,...t)});let c=a.default.mkdirSync;a.default.mkdirSync=(e,...t)=>(g(e),c.call(a.default,e,...t));let u=a.default.rmdir;a.default.rmdir=((e,...t)=>{try{g(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return u.call(a.default,e,...t)});let d=a.default.rmdirSync;a.default.rmdirSync=(e,...t)=>(g(e),d.call(a.default,e,...t));let f=a.default.appendFile;a.default.appendFile=((e,...t)=>{try{g(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return f.call(a.default,e,...t)});let p=a.default.appendFileSync;a.default.appendFileSync=(e,...t)=>(g(e),p.call(a.default,e,...t));let m=a.default.copyFile;a.default.copyFile=((e,t,...n)=>{try{g(e),g(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return m.call(a.default,e,t,...n)});let h=a.default.copyFileSync;a.default.copyFileSync=(e,t,...n)=>(g(e),g(t),h.call(a.default,e,t,...n));let v=a.default.rename;a.default.rename=((e,t,...n)=>{try{g(e),g(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return v.call(a.default,e,t,...n)});let y=a.default.renameSync;a.default.renameSync=(e,t,...n)=>(g(e),g(t),y.call(a.default,e,t,...n));let b=a.default.createWriteStream;a.default.createWriteStream=(e,...t)=>(g(e),b.call(a.default,e,...t));let x=a.default.open;a.default.open=((e,t,...n)=>{if(_(typeof t==`function`?void 0:t))try{g(e)}catch(e){let r=n[n.length-1],i=typeof t==`function`?t:typeof r==`function`?r:void 0;if(i){process.nextTick(()=>i(e));return}throw e}return x.call(a.default,e,t,...n)});let S=a.default.openSync;a.default.openSync=(e,t,...n)=>(_(t)&&g(e),S.call(a.default,e,t,...n));let C=e=>{if(!e)return;let t=e.writeFile;t&&(e.writeFile=async(n,...r)=>(g(n),t.call(e,n,...r)));let n=e.rm;n&&(e.rm=async(t,...r)=>(g(t),n.call(e,t,...r)));let r=e.mkdir;r&&(e.mkdir=async(t,...n)=>(g(t),r.call(e,t,...n)));let i=e.rmdir;i&&(e.rmdir=async(t,...n)=>(g(t),i.call(e,t,...n)));let a=e.unlink;a&&(e.unlink=async(t,...n)=>(g(t),a.call(e,t,...n)));let o=e.appendFile;o&&(e.appendFile=async(t,...n)=>(g(t),o.call(e,t,...n)));let s=e.copyFile;s&&(e.copyFile=async(t,n,...r)=>(g(t),g(n),s.call(e,t,n,...r)));let c=e.rename;c&&(e.rename=async(t,n,...r)=>(g(t),g(n),c.call(e,t,n,...r)));let l=e.open;l&&(e.open=async(t,n,...r)=>(_(n)&&g(t),l.call(e,t,n,...r)))};C(a.default.promises),C(l.default)}function y(e,t){let n=t?` ${o.colors.green(`➜`)} ${o.colors.green(`Network:`)} ${o.colors.cyan(t)}`:` ${o.colors.green(`➜`)} ${o.colors.green(`Network:`)} ${o.colors.gray(`use --host to expose`)}`;return`
8
+ `+(0,o.double)([` ${o.colors.green(`➜`)} ${o.colors.green(`Local:`)} ${o.colors.cyan(e)}`,n,``,` ${o.colors.dim(`press h + enter for help`)}`],{title:`boltdocs dev server`})+`
9
+ `}function b(e,t){let n=t?` ${o.colors.green(`➜`)} ${o.colors.green(`Network:`)} ${o.colors.cyan(t)}`:` ${o.colors.green(`➜`)} ${o.colors.green(`Network:`)} ${o.colors.gray(`use --host to expose`)}`;return`
10
+ `+(0,o.double)([` ${o.colors.green(`➜`)} ${o.colors.green(`Local:`)} ${o.colors.cyan(e)}`,n],{title:`boltdocs preview server`})+`
11
+ `}function x(e,t){return`
12
+ `+(0,o.double)([(0,o.padCenter)(`🚀 Update available!`,50),``,` ${o.colors.dim(`Current:`)} ${o.colors.red(e)} ${o.colors.gray(`→`)} ${o.colors.green(t)}`,``,` ${o.colors.dim(`Run:`)} ${o.colors.bold(`npm install boltdocs@latest`)}`])+`
13
+ `}const S=(0,c.createRequire)(require(`url`).pathToFileURL(__filename).href);function C(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 w(){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 T(){try{let e=(0,p.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),t=i.default.dirname(e);for(let e=0;e<5;e++){let e=i.default.join(t,`package.json`);if(a.default.existsSync(e)){let t=JSON.parse(a.default.readFileSync(e,`utf-8`));if(t.name===`boltdocs`)return t.version}t=i.default.dirname(t)}}catch{}try{return S(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function E(){let e=``;try{e=i.default.join(f.default.homedir(),`.boltdocs`,`update-check.json`)}catch{return}let t=0;try{if(a.default.existsSync(e)){let n=JSON.parse(a.default.readFileSync(e,`utf-8`));t=Number(n.lastCheck)||0}}catch{}let n=Date.now();if(n-t<864e5)return;try{a.default.mkdirSync(i.default.dirname(e),{recursive:!0}),a.default.writeFileSync(e,JSON.stringify({lastCheck:n}),`utf-8`)}catch{}let r=await T();if(r===`0.0.0`)return;let o=await w();o&&C(o,r)&&console.log(x(r,o))}let D=!1;async function O(e=process.cwd(),r={}){if(D)return;D=!0,E();let a;try{a=await n.n(i.default.resolve(e,`docs`),e),t.w(a,e)}catch{}try{let n=await t.n(e,`development`,a);n.logLevel=`warn`,n.clearScreen=!1,r.port!==void 0&&(n.server=n.server||{},n.server.port=Number(r.port)),r.host!==void 0&&(n.server=n.server||{},n.server.host=r.host),r.force&&(n.optimizeDeps=n.optimizeDeps||{},n.optimizeDeps.force=!0);let i=await(0,u.createServer)(n);await i.listen();let o=i.resolvedUrls;console.log(y(o?.local?.[0]??`http://localhost:${r.port??5173}`,o?.network?.[0]??null)),i.bindCLIShortcuts({print:!1})}catch(e){(0,o.error)(`Failed to start dev server:`,e),process.exit(1)}}async function k(e=process.cwd()){E();try{let n=await t.S().run({root:e,timing:{}});n.success||((0,o.error)(`Build failed at step "${n.failedStep}":`,n.error),await r.a(),process.exit(1)),console.log((0,o.double)([`SSG build completed in ${(Math.round(n.timing.total)/1e3).toFixed(1)}s`,``,`${o.colors.cyan(`boltdocs`)} documentation is ready at ${o.colors.green(`dist/`)}`])),await r.a(),process.exit(0)}catch(e){(0,o.error)(`Build failed:`,e),await r.a(),process.exit(1)}}async function A(e=process.cwd(),n={}){try{let r=await t.n(e,`production`);r.logLevel=`warn`,r.clearScreen=!1,n.port!==void 0&&(r.preview=r.preview||{},r.preview.port=Number(n.port)),n.host!==void 0&&(r.preview=r.preview||{},r.preview.host=n.host);let i=(await(0,s.preview)(r)).resolvedUrls;console.log(b(i?.local?.[0]??`http://localhost:${n.port??4173}`,i?.network?.[0]??null))}catch(e){(0,o.error)(`Failed to start preview server:`,e),process.exit(1)}}function j(e){let t=[];if(!a.default.existsSync(e))return t;try{let n=a.default.readdirSync(e);for(let r of n){let n=i.default.join(e,r);a.default.statSync(n).isDirectory()?r!==`node_modules`&&r!==`.git`&&r!==`dist`&&r!==`coverage`&&t.push(...j(n)):/\.(js|mjs|cjs|ts|tsx|jsx)$/.test(r)&&t.push(n)}}catch{}return t}async function M(e=process.cwd()){(0,o.info)(`Starting static security audit of Boltdocs plugins...`);let t;try{t=await n.n(i.default.resolve(e,`docs`),e)}catch(e){(0,o.error)(`Failed to load Boltdocs configuration for audit:`,e),process.exit(1)}let r=t.plugins||[];if(r.length===0){(0,o.success)(`No plugins configured. Nothing to audit.`);return}let s=[];for(let t of r){if(!t.name)continue;let n=null;try{let{createRequire:r}=await import(`node:module`),a=r(i.default.resolve(e,`package.json`)).resolve(`${t.name}/package.json`);n=i.default.dirname(a)}catch{let r=i.default.resolve(e,`node_modules`,t.name);a.default.existsSync(r)&&(n=r)}if(!n){s.push({name:o.colors.cyan(t.name),status:o.colors.red(`❓ Unresolved`),details:`Could not locate plugin files in node_modules.`});continue}let r=j(n),c=[];for(let e of r)try{let t=a.default.readFileSync(e,`utf-8`);t.includes(`fetch(`)&&c.push(`fetch`),t.includes(`axios`)&&c.push(`axios`),t.includes(`http.request`)&&c.push(`http.request`),t.includes(`https.request`)&&c.push(`https.request`),t.includes(`process.env`)&&c.push(`process.env`)}catch{}let l=Array.from(new Set(c));l.length>0?s.push({name:o.colors.cyan(t.name),status:o.colors.yellow(`⚠️ Warning`),details:`Contains network/env accesses: ${o.colors.bold(l.join(`, `))}. Ensure you trust the author.`}):s.push({name:o.colors.cyan(t.name),status:o.colors.green(`✅ Clean`),details:`No external network calls or env accesses detected.`})}let c=[`Plugin`,`Status`,`Audit Notes`],l=s.map(e=>[e.name,e.status,e.details]);console.log(`
14
+ `+(0,o.table)(c,l)+`
15
+ `),s.some(e=>e.status.includes(`Warning`))?(0,o.warn)(`⚠️ One or more plugins have security warnings. Review the flags above.`):(0,o.success)(`✓ All plugins passed the static security check!`)}const{emitWarning:N}=process;process.emitWarning=function(e,...t){if(!(e&&typeof e==`object`&&e.code===`DEP0205`)&&!(typeof e==`string`&&t.includes(`DEP0205`)))return Reflect.apply(N,process,[e,...t])},v(),(0,o.configure)({prefix:`boltdocs`});const P=(0,d.default)(`boltdocs`);P.command(`dev [root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(O),P.command(`[root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(O),P.command(`build [root]`,`Build for production`).action(k),P.command(`preview [root]`,`Preview production build`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).action(A),P.command(`audit [root]`,`Audit configured plugins for security warnings`).action(M),P.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).option(`--budget`,`Check build performance against configured budgets`).action(async(e,t)=>{let{doctorAction:n}=await Promise.resolve().then(()=>require(`../doctor-D8fl3Sbg.cjs`));await n(e,t)}),P.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await Promise.resolve().then(()=>require(`../generator-DtUU3Cfk.cjs`));await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),P.help(),P.version(`2.0.0`),P.parse(),exports.t=E;
@@ -4,6 +4,12 @@
4
4
  * Copyright (c) 2026 Jesus Alcala
5
5
  * Licensed under the MIT License.
6
6
  */
7
- import{E as e,T as t,n}from"../node-DV-EPtMU.mjs";import{a as r}from"../cache-DFW4R3S0.mjs";import{d as i,f as a,h as o,p as s}from"../doctor-BY1tSmQd.mjs";import c from"node:path";import l from"node:fs";import{preview as u}from"vite";import{colors as d,configure as f,double as p,error as m,info as h,success as g,table as _,warn as v}from"@bdocs/dui";import y from"node:fs/promises";import{createServer as b}from"@bdocs/ssg/node";import x from"cac";function S(e){let t=e;for(;t&&t!==c.dirname(t);){if(l.existsSync(c.join(t,`.git`))||l.existsSync(c.join(t,`pnpm-workspace.yaml`)))return t;t=c.dirname(t)}t=e;let n=e;for(;t&&t!==c.dirname(t);)l.existsSync(c.join(t,`package.json`))&&(n=t),t=c.dirname(t);return n}let C=S(process.cwd());function w(e){if(!e)return;let t;if(typeof e==`string`)t=e;else if(e instanceof URL){if(e.protocol!==`file:`)return;t=e.pathname}else if(Buffer.isBuffer(e))t=e.toString();else return;let n=c.resolve(C,t),r=c.relative(C,n),i=r.startsWith(`..`)||c.isAbsolute(r),a=n.split(c.sep),o=a.some(e=>e.startsWith(`.env`)),s=a.some((e,t)=>{if(e===`node_modules`){let e=a[t+1];return!e||!e.startsWith(`.`)}return!1});if(i||o||s)throw Error(`[Boltdocs Security] Write/delete operation blocked on path: "${n}". Modifications are restricted to the project root, and cannot access .env or non-cache node_modules folders.`)}function T(e){return e==null?!1:typeof e==`number`?e!==0:typeof e==`string`?e.includes(`w`)||e.includes(`a`)||e.includes(`+`):!0}function E(){let e=l.writeFile;l.writeFile=((t,...n)=>{try{w(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return e.call(l,t,...n)});let t=l.writeFileSync;l.writeFileSync=(e,...n)=>(w(e),t.call(l,e,...n));let n=l.rm;l.rm=((e,...t)=>{try{w(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return n.call(l,e,...t)});let r=l.rmSync;l.rmSync=(e,...t)=>(w(e),r.call(l,e,...t));let i=l.unlink;l.unlink=((e,...t)=>{try{w(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return i.call(l,e,...t)});let a=l.unlinkSync;l.unlinkSync=(e,...t)=>(w(e),a.call(l,e,...t));let o=l.mkdir;l.mkdir=((e,...t)=>{try{w(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return o.call(l,e,...t)});let s=l.mkdirSync;l.mkdirSync=(e,...t)=>(w(e),s.call(l,e,...t));let c=l.rmdir;l.rmdir=((e,...t)=>{try{w(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return c.call(l,e,...t)});let u=l.rmdirSync;l.rmdirSync=(e,...t)=>(w(e),u.call(l,e,...t));let d=l.appendFile;l.appendFile=((e,...t)=>{try{w(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return d.call(l,e,...t)});let f=l.appendFileSync;l.appendFileSync=(e,...t)=>(w(e),f.call(l,e,...t));let p=l.copyFile;l.copyFile=((e,t,...n)=>{try{w(e),w(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return p.call(l,e,t,...n)});let m=l.copyFileSync;l.copyFileSync=(e,t,...n)=>(w(e),w(t),m.call(l,e,t,...n));let h=l.rename;l.rename=((e,t,...n)=>{try{w(e),w(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return h.call(l,e,t,...n)});let g=l.renameSync;l.renameSync=(e,t,...n)=>(w(e),w(t),g.call(l,e,t,...n));let _=l.createWriteStream;l.createWriteStream=(e,...t)=>(w(e),_.call(l,e,...t));let v=l.open;l.open=((e,t,...n)=>{if(T(typeof t==`function`?void 0:t))try{w(e)}catch(e){let r=n[n.length-1],i=typeof t==`function`?t:typeof r==`function`?r:void 0;if(i){process.nextTick(()=>i(e));return}throw e}return v.call(l,e,t,...n)});let b=l.openSync;l.openSync=(e,t,...n)=>(T(t)&&w(e),b.call(l,e,t,...n));let x=e=>{if(!e)return;let t=e.writeFile;t&&(e.writeFile=async(n,...r)=>(w(n),t.call(e,n,...r)));let n=e.rm;n&&(e.rm=async(t,...r)=>(w(t),n.call(e,t,...r)));let r=e.mkdir;r&&(e.mkdir=async(t,...n)=>(w(t),r.call(e,t,...n)));let i=e.rmdir;i&&(e.rmdir=async(t,...n)=>(w(t),i.call(e,t,...n)));let a=e.unlink;a&&(e.unlink=async(t,...n)=>(w(t),a.call(e,t,...n)));let o=e.appendFile;o&&(e.appendFile=async(t,...n)=>(w(t),o.call(e,t,...n)));let s=e.copyFile;s&&(e.copyFile=async(t,n,...r)=>(w(t),w(n),s.call(e,t,n,...r)));let c=e.rename;c&&(e.rename=async(t,n,...r)=>(w(t),w(n),c.call(e,t,n,...r)));let l=e.open;l&&(e.open=async(t,n,...r)=>(T(n)&&w(t),l.call(e,t,n,...r)))};x(l.promises),x(y)}let D=!1;async function O(t=process.cwd(),r={}){if(D)return;D=!0,i();let s;try{s=await o(c.resolve(t,`docs`),t),e(s,t)}catch{}try{let e=await n(t,`development`,s);e.logLevel=`warn`,e.clearScreen=!1,r.port!==void 0&&(e.server=e.server||{},e.server.port=Number(r.port)),r.host!==void 0&&(e.server=e.server||{},e.server.host=r.host),r.force&&(e.optimizeDeps=e.optimizeDeps||{},e.optimizeDeps.force=!0);let i=await b(e);await i.listen();let o=i.resolvedUrls;console.log(a(o?.local?.[0]??`http://localhost:${r.port??5173}`,o?.network?.[0]??null)),i.bindCLIShortcuts({print:!1})}catch(e){m(`Failed to start dev server:`,e),process.exit(1)}}async function k(e=process.cwd()){i();try{let n=await t().run({root:e,timing:{}});n.success||(m(`Build failed at step "${n.failedStep}":`,n.error),await r(),process.exit(1)),console.log(p([`SSG build completed in ${(Math.round(n.timing.total)/1e3).toFixed(1)}s`,``,`${d.cyan(`boltdocs`)} documentation is ready at ${d.green(`dist/`)}`])),await r(),process.exit(0)}catch(e){m(`Build failed:`,e),await r(),process.exit(1)}}async function A(e=process.cwd(),t={}){try{let r=await n(e,`production`);r.logLevel=`warn`,r.clearScreen=!1,t.port!==void 0&&(r.preview=r.preview||{},r.preview.port=Number(t.port)),t.host!==void 0&&(r.preview=r.preview||{},r.preview.host=t.host);let i=(await u(r)).resolvedUrls;console.log(s(i?.local?.[0]??`http://localhost:${t.port??4173}`,i?.network?.[0]??null))}catch(e){m(`Failed to start preview server:`,e),process.exit(1)}}function j(e){let t=[];if(!l.existsSync(e))return t;try{let n=l.readdirSync(e);for(let r of n){let n=c.join(e,r);l.statSync(n).isDirectory()?r!==`node_modules`&&r!==`.git`&&r!==`dist`&&r!==`coverage`&&t.push(...j(n)):/\.(js|mjs|cjs|ts|tsx|jsx)$/.test(r)&&t.push(n)}}catch{}return t}async function M(e=process.cwd()){h(`Starting static security audit of Boltdocs plugins...`);let t;try{t=await o(c.resolve(e,`docs`),e)}catch(e){m(`Failed to load Boltdocs configuration for audit:`,e),process.exit(1)}let n=t.plugins||[];if(n.length===0){g(`No plugins configured. Nothing to audit.`);return}let r=[];for(let t of n){if(!t.name)continue;let n=null;try{let{createRequire:r}=await import(`node:module`),i=r(c.resolve(e,`package.json`)).resolve(`${t.name}/package.json`);n=c.dirname(i)}catch{let r=c.resolve(e,`node_modules`,t.name);l.existsSync(r)&&(n=r)}if(!n){r.push({name:d.cyan(t.name),status:d.red(`❓ Unresolved`),details:`Could not locate plugin files in node_modules.`});continue}let i=j(n),a=[];for(let e of i)try{let t=l.readFileSync(e,`utf-8`);t.includes(`fetch(`)&&a.push(`fetch`),t.includes(`axios`)&&a.push(`axios`),t.includes(`http.request`)&&a.push(`http.request`),t.includes(`https.request`)&&a.push(`https.request`),t.includes(`process.env`)&&a.push(`process.env`)}catch{}let o=Array.from(new Set(a));o.length>0?r.push({name:d.cyan(t.name),status:d.yellow(`⚠️ Warning`),details:`Contains network/env accesses: ${d.bold(o.join(`, `))}. Ensure you trust the author.`}):r.push({name:d.cyan(t.name),status:d.green(`✅ Clean`),details:`No external network calls or env accesses detected.`})}let i=[`Plugin`,`Status`,`Audit Notes`],a=r.map(e=>[e.name,e.status,e.details]);console.log(`
8
- `+_(i,a)+`
9
- `),r.some(e=>e.status.includes(`Warning`))?v(`⚠️ One or more plugins have security warnings. Review the flags above.`):g(`✓ All plugins passed the static security check!`)}const{emitWarning:N}=process;process.emitWarning=function(e,...t){if(!(e&&typeof e==`object`&&e.code===`DEP0205`)&&!(typeof e==`string`&&t.includes(`DEP0205`)))return Reflect.apply(N,process,[e,...t])},E(),f({prefix:`boltdocs`});const P=x(`boltdocs`);P.command(`dev [root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(O),P.command(`[root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(O),P.command(`build [root]`,`Build for production`).action(k),P.command(`preview [root]`,`Preview production build`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).action(A),P.command(`audit [root]`,`Audit configured plugins for security warnings`).action(M),P.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).option(`--budget`,`Check build performance against configured budgets`).action(async(e,t)=>{let{doctorAction:n}=await import(`../doctor-wsPTzt8Y.mjs`);await n(e,t)}),P.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await import(`../generator-DILs0EFN.mjs`);await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),P.help(),P.version(`2.0.0`),P.parse();export{};
7
+ import{E as e,n as t,w as n}from"../node-B7qbjtLl.mjs";import{n as r}from"../config-DBKBEj3j.mjs";import{a as i}from"../cache-CfhOTR3Q.mjs";import{createRequire as a}from"node:module";import o from"node:path";import s from"node:fs";import{colors as c,configure as l,double as u,error as d,info as f,padCenter as p,success as m,table as h,warn as g}from"@bdocs/dui";import{preview as _}from"vite";import v from"node:fs/promises";import{createServer as y}from"@bdocs/ssg/node";import b from"cac";import x from"node:os";import{fileURLToPath as S}from"node:url";function C(e){let t=e;for(;t&&t!==o.dirname(t);){if(s.existsSync(o.join(t,`.git`))||s.existsSync(o.join(t,`pnpm-workspace.yaml`)))return t;t=o.dirname(t)}t=e;let n=e;for(;t&&t!==o.dirname(t);)s.existsSync(o.join(t,`package.json`))&&(n=t),t=o.dirname(t);return n}let w=C(process.cwd());function T(e){if(!e)return;let t;if(typeof e==`string`)t=e;else if(e instanceof URL){if(e.protocol!==`file:`)return;t=e.pathname}else if(Buffer.isBuffer(e))t=e.toString();else return;let n=o.resolve(w,t),r=o.relative(w,n),i=r.startsWith(`..`)||o.isAbsolute(r),a=n.split(o.sep),s=a.some(e=>e.startsWith(`.env`)),c=a.some((e,t)=>{if(e===`node_modules`){let e=a[t+1];return!e||!e.startsWith(`.`)}return!1});if(i||s||c)throw Error(`[Boltdocs Security] Write/delete operation blocked on path: "${n}". Modifications are restricted to the project root, and cannot access .env or non-cache node_modules folders.`)}function E(e){return e==null?!1:typeof e==`number`?e!==0:typeof e==`string`?e.includes(`w`)||e.includes(`a`)||e.includes(`+`):!0}function D(){let e=s.writeFile;s.writeFile=((t,...n)=>{try{T(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return e.call(s,t,...n)});let t=s.writeFileSync;s.writeFileSync=(e,...n)=>(T(e),t.call(s,e,...n));let n=s.rm;s.rm=((e,...t)=>{try{T(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return n.call(s,e,...t)});let r=s.rmSync;s.rmSync=(e,...t)=>(T(e),r.call(s,e,...t));let i=s.unlink;s.unlink=((e,...t)=>{try{T(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return i.call(s,e,...t)});let a=s.unlinkSync;s.unlinkSync=(e,...t)=>(T(e),a.call(s,e,...t));let o=s.mkdir;s.mkdir=((e,...t)=>{try{T(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return o.call(s,e,...t)});let c=s.mkdirSync;s.mkdirSync=(e,...t)=>(T(e),c.call(s,e,...t));let l=s.rmdir;s.rmdir=((e,...t)=>{try{T(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return l.call(s,e,...t)});let u=s.rmdirSync;s.rmdirSync=(e,...t)=>(T(e),u.call(s,e,...t));let d=s.appendFile;s.appendFile=((e,...t)=>{try{T(e)}catch(e){let n=t[t.length-1];if(typeof n==`function`){process.nextTick(()=>n(e));return}throw e}return d.call(s,e,...t)});let f=s.appendFileSync;s.appendFileSync=(e,...t)=>(T(e),f.call(s,e,...t));let p=s.copyFile;s.copyFile=((e,t,...n)=>{try{T(e),T(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return p.call(s,e,t,...n)});let m=s.copyFileSync;s.copyFileSync=(e,t,...n)=>(T(e),T(t),m.call(s,e,t,...n));let h=s.rename;s.rename=((e,t,...n)=>{try{T(e),T(t)}catch(e){let t=n[n.length-1];if(typeof t==`function`){process.nextTick(()=>t(e));return}throw e}return h.call(s,e,t,...n)});let g=s.renameSync;s.renameSync=(e,t,...n)=>(T(e),T(t),g.call(s,e,t,...n));let _=s.createWriteStream;s.createWriteStream=(e,...t)=>(T(e),_.call(s,e,...t));let y=s.open;s.open=((e,t,...n)=>{if(E(typeof t==`function`?void 0:t))try{T(e)}catch(e){let r=n[n.length-1],i=typeof t==`function`?t:typeof r==`function`?r:void 0;if(i){process.nextTick(()=>i(e));return}throw e}return y.call(s,e,t,...n)});let b=s.openSync;s.openSync=(e,t,...n)=>(E(t)&&T(e),b.call(s,e,t,...n));let x=e=>{if(!e)return;let t=e.writeFile;t&&(e.writeFile=async(n,...r)=>(T(n),t.call(e,n,...r)));let n=e.rm;n&&(e.rm=async(t,...r)=>(T(t),n.call(e,t,...r)));let r=e.mkdir;r&&(e.mkdir=async(t,...n)=>(T(t),r.call(e,t,...n)));let i=e.rmdir;i&&(e.rmdir=async(t,...n)=>(T(t),i.call(e,t,...n)));let a=e.unlink;a&&(e.unlink=async(t,...n)=>(T(t),a.call(e,t,...n)));let o=e.appendFile;o&&(e.appendFile=async(t,...n)=>(T(t),o.call(e,t,...n)));let s=e.copyFile;s&&(e.copyFile=async(t,n,...r)=>(T(t),T(n),s.call(e,t,n,...r)));let c=e.rename;c&&(e.rename=async(t,n,...r)=>(T(t),T(n),c.call(e,t,n,...r)));let l=e.open;l&&(e.open=async(t,n,...r)=>(E(n)&&T(t),l.call(e,t,n,...r)))};x(s.promises),x(v)}function O(e,t){let n=t?` ${c.green(`➜`)} ${c.green(`Network:`)} ${c.cyan(t)}`:` ${c.green(`➜`)} ${c.green(`Network:`)} ${c.gray(`use --host to expose`)}`;return`
8
+ `+u([` ${c.green(`➜`)} ${c.green(`Local:`)} ${c.cyan(e)}`,n,``,` ${c.dim(`press h + enter for help`)}`],{title:`boltdocs dev server`})+`
9
+ `}function k(e,t){let n=t?` ${c.green(`➜`)} ${c.green(`Network:`)} ${c.cyan(t)}`:` ${c.green(`➜`)} ${c.green(`Network:`)} ${c.gray(`use --host to expose`)}`;return`
10
+ `+u([` ${c.green(`➜`)} ${c.green(`Local:`)} ${c.cyan(e)}`,n],{title:`boltdocs preview server`})+`
11
+ `}function A(e,t){return`
12
+ `+u([p(`🚀 Update available!`,50),``,` ${c.dim(`Current:`)} ${c.red(e)} ${c.gray(`→`)} ${c.green(t)}`,``,` ${c.dim(`Run:`)} ${c.bold(`npm install boltdocs@latest`)}`])+`
13
+ `}const j=a(import.meta.url);function M(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 N(){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 P(){try{let e=S(import.meta.url),t=o.dirname(e);for(let e=0;e<5;e++){let e=o.join(t,`package.json`);if(s.existsSync(e)){let t=JSON.parse(s.readFileSync(e,`utf-8`));if(t.name===`boltdocs`)return t.version}t=o.dirname(t)}}catch{}try{return j(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function F(){let e=``;try{e=o.join(x.homedir(),`.boltdocs`,`update-check.json`)}catch{return}let t=0;try{if(s.existsSync(e)){let n=JSON.parse(s.readFileSync(e,`utf-8`));t=Number(n.lastCheck)||0}}catch{}let n=Date.now();if(n-t<864e5)return;try{s.mkdirSync(o.dirname(e),{recursive:!0}),s.writeFileSync(e,JSON.stringify({lastCheck:n}),`utf-8`)}catch{}let r=await P();if(r===`0.0.0`)return;let i=await N();i&&M(i,r)&&console.log(A(r,i))}let I=!1;async function L(n=process.cwd(),i={}){if(I)return;I=!0,F();let a;try{a=await r(o.resolve(n,`docs`),n),e(a,n)}catch{}try{let e=await t(n,`development`,a);e.logLevel=`warn`,e.clearScreen=!1,i.port!==void 0&&(e.server=e.server||{},e.server.port=Number(i.port)),i.host!==void 0&&(e.server=e.server||{},e.server.host=i.host),i.force&&(e.optimizeDeps=e.optimizeDeps||{},e.optimizeDeps.force=!0);let r=await y(e);await r.listen();let o=r.resolvedUrls;console.log(O(o?.local?.[0]??`http://localhost:${i.port??5173}`,o?.network?.[0]??null)),r.bindCLIShortcuts({print:!1})}catch(e){d(`Failed to start dev server:`,e),process.exit(1)}}async function R(e=process.cwd()){F();try{let t=await n().run({root:e,timing:{}});t.success||(d(`Build failed at step "${t.failedStep}":`,t.error),await i(),process.exit(1)),console.log(u([`SSG build completed in ${(Math.round(t.timing.total)/1e3).toFixed(1)}s`,``,`${c.cyan(`boltdocs`)} documentation is ready at ${c.green(`dist/`)}`])),await i(),process.exit(0)}catch(e){d(`Build failed:`,e),await i(),process.exit(1)}}async function z(e=process.cwd(),n={}){try{let r=await t(e,`production`);r.logLevel=`warn`,r.clearScreen=!1,n.port!==void 0&&(r.preview=r.preview||{},r.preview.port=Number(n.port)),n.host!==void 0&&(r.preview=r.preview||{},r.preview.host=n.host);let i=(await _(r)).resolvedUrls;console.log(k(i?.local?.[0]??`http://localhost:${n.port??4173}`,i?.network?.[0]??null))}catch(e){d(`Failed to start preview server:`,e),process.exit(1)}}function B(e){let t=[];if(!s.existsSync(e))return t;try{let n=s.readdirSync(e);for(let r of n){let n=o.join(e,r);s.statSync(n).isDirectory()?r!==`node_modules`&&r!==`.git`&&r!==`dist`&&r!==`coverage`&&t.push(...B(n)):/\.(js|mjs|cjs|ts|tsx|jsx)$/.test(r)&&t.push(n)}}catch{}return t}async function V(e=process.cwd()){f(`Starting static security audit of Boltdocs plugins...`);let t;try{t=await r(o.resolve(e,`docs`),e)}catch(e){d(`Failed to load Boltdocs configuration for audit:`,e),process.exit(1)}let n=t.plugins||[];if(n.length===0){m(`No plugins configured. Nothing to audit.`);return}let i=[];for(let t of n){if(!t.name)continue;let n=null;try{let{createRequire:r}=await import(`node:module`),i=r(o.resolve(e,`package.json`)).resolve(`${t.name}/package.json`);n=o.dirname(i)}catch{let r=o.resolve(e,`node_modules`,t.name);s.existsSync(r)&&(n=r)}if(!n){i.push({name:c.cyan(t.name),status:c.red(`❓ Unresolved`),details:`Could not locate plugin files in node_modules.`});continue}let r=B(n),a=[];for(let e of r)try{let t=s.readFileSync(e,`utf-8`);t.includes(`fetch(`)&&a.push(`fetch`),t.includes(`axios`)&&a.push(`axios`),t.includes(`http.request`)&&a.push(`http.request`),t.includes(`https.request`)&&a.push(`https.request`),t.includes(`process.env`)&&a.push(`process.env`)}catch{}let l=Array.from(new Set(a));l.length>0?i.push({name:c.cyan(t.name),status:c.yellow(`⚠️ Warning`),details:`Contains network/env accesses: ${c.bold(l.join(`, `))}. Ensure you trust the author.`}):i.push({name:c.cyan(t.name),status:c.green(`✅ Clean`),details:`No external network calls or env accesses detected.`})}let a=[`Plugin`,`Status`,`Audit Notes`],l=i.map(e=>[e.name,e.status,e.details]);console.log(`
14
+ `+h(a,l)+`
15
+ `),i.some(e=>e.status.includes(`Warning`))?g(`⚠️ One or more plugins have security warnings. Review the flags above.`):m(`✓ All plugins passed the static security check!`)}const{emitWarning:H}=process;process.emitWarning=function(e,...t){if(!(e&&typeof e==`object`&&e.code===`DEP0205`)&&!(typeof e==`string`&&t.includes(`DEP0205`)))return Reflect.apply(H,process,[e,...t])},D(),l({prefix:`boltdocs`});const U=b(`boltdocs`);U.command(`dev [root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(L),U.command(`[root]`,`Start development server`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).option(`--force`,`Force Vite to re-optimize dependencies`).action(L),U.command(`build [root]`,`Build for production`).action(R),U.command(`preview [root]`,`Preview production build`).option(`--port <port>`,`Port to listen on`).option(`--host [host]`,`Host to bind to`).action(z),U.command(`audit [root]`,`Audit configured plugins for security warnings`).action(V),U.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).option(`--budget`,`Check build performance against configured budgets`).action(async(e,t)=>{let{doctorAction:n}=await import(`../doctor-C19DsI1e.mjs`).then(e=>e.t);await n(e,t)}),U.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await import(`../generator-B6lrnDZ-.mjs`);await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),U.help(),U.version(`2.0.0`),U.parse();export{F as t};
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../chunk-Ds5LZdWN.cjs`);const e=require(`../utils-wHud9ny5.cjs`),t=require(`../cache-C2PiGyg8.cjs`),n=require(`../doctor-DcFLi4t1.cjs`),r=require(`../node-vOVNRABe.cjs`),i=require(`../shiki-adapter-CUtj-xKv.cjs`),a=require(`../handler-Djy0HfsI.cjs`);let o=require(`unist-util-visit`);exports.AssetCache=t.n,exports.BoltdocsPluginStore=r.E,exports.EXIT=o.EXIT,exports.MDX_NODES=i.o,exports.PluginCompatibilityError=r.D,exports.PluginError=r.O,exports.PluginHookError=r.k,exports.PluginLifecycleManager=r.S,exports.PluginValidationError=r.A,exports.SKIP=o.SKIP,exports.addNodeClass=r.l,exports.createMdxAttribute=r.u,exports.createMdxElement=r.d,exports.createPlugin=r.c,exports.createRehypeElement=r.f,exports.createViteConfig=r.n,exports.default=r.t,exports.defineConfig=n.g,exports.flushCache=t.a,exports.generateEntryCode=r.s,exports.getNodeProperty=r.p,exports.handleAwsFeedback=r.r,exports.handleFeedback=a.t,exports.handleNetlifyFeedback=r.a,exports.handleVercelFeedback=r.o,exports.handleWebFeedback=r.i,exports.hasNodeClass=r.m,exports.normalizePath=e.u,exports.parseMetaString=i.r,exports.removeNodeClass=r.h,exports.resolveConfig=n.h,exports.sanitizeFilename=e.f,exports.setNodeProperty=r.g,exports.validatePlugins=r.T,exports.visitMdxElements=r._,exports.visitNodes=r.v,exports.visitRehypeElements=r.y,exports.visitRemarkHeadings=r.b,exports.visitRemarkLinks=r.x;
6
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../chunk-Ds5LZdWN.cjs`);const e=require(`../utils-BWy_8ASj.cjs`),t=require(`../node-Dj3-2YYP.cjs`),n=require(`../config-BqZUYono.cjs`),r=require(`../cache-B19MLTpN.cjs`),i=require(`../shiki-adapter-BB71nVsG.cjs`),a=require(`../handler-1LRMYeI4.cjs`);let o=require(`unist-util-visit`);exports.AssetCache=r.n,exports.BoltdocsPluginStore=t.E,exports.EXIT=o.EXIT,exports.MDX_NODES=i.o,exports.PluginCompatibilityError=t.D,exports.PluginError=t.O,exports.PluginHookError=t.k,exports.PluginLifecycleManager=t.x,exports.PluginValidationError=t.A,exports.SKIP=o.SKIP,exports.addNodeClass=t.c,exports.createMdxAttribute=t.l,exports.createMdxElement=t.u,exports.createPlugin=t.s,exports.createRehypeElement=t.d,exports.createViteConfig=t.n,exports.default=t.t,exports.defineConfig=n.a,exports.flushCache=r.a,exports.generateEntryCode=t.j,exports.getNodeProperty=t.f,exports.handleAwsFeedback=t.r,exports.handleFeedback=a.t,exports.handleNetlifyFeedback=t.a,exports.handleVercelFeedback=t.o,exports.handleWebFeedback=t.i,exports.hasNodeClass=t.p,exports.normalizePath=e.u,exports.parseMetaString=i.r,exports.removeNodeClass=t.m,exports.resolveConfig=n.n,exports.sanitizeFilename=e.f,exports.setNodeProperty=t.h,exports.validatePlugins=t.T,exports.visitMdxElements=t.g,exports.visitNodes=t._,exports.visitRehypeElements=t.v,exports.visitRemarkHeadings=t.y,exports.visitRemarkLinks=t.b;
@@ -236,7 +236,7 @@ interface BoltdocsIntegrationsConfig {
236
236
  /**
237
237
  * The root configuration object for Boltdocs.
238
238
  */
239
- interface BoltdocsConfig$1 {
239
+ interface BoltdocsConfig {
240
240
  siteUrl?: string;
241
241
  docsDir?: string;
242
242
  base?: string;
@@ -282,7 +282,7 @@ type BoltdocsRoutePathWithFallback = BoltdocsRoutePath extends never ? string :
282
282
  *
283
283
  * @param config - The Boltdocs configuration object
284
284
  */
285
- declare function defineConfig(config: BoltdocsConfig$1): BoltdocsConfig$1;
285
+ declare function defineConfig(config: BoltdocsConfig): BoltdocsConfig;
286
286
  //#endregion
287
287
  //#region src/node/config.d.ts
288
288
  /**
@@ -293,7 +293,7 @@ declare function defineConfig(config: BoltdocsConfig$1): BoltdocsConfig$1;
293
293
  * @param root - The project root directory (defaults to process.cwd())
294
294
  * @returns The merged configuration object
295
295
  */
296
- declare function resolveConfig(docsDir: string, root?: string): Promise<BoltdocsConfig$1>;
296
+ declare function resolveConfig(docsDir: string, root?: string): Promise<BoltdocsConfig>;
297
297
  //#endregion
298
298
  //#region src/node/plugin/types.d.ts
299
299
  /**
@@ -313,7 +313,7 @@ interface BoltdocsPluginOptions {
313
313
  * @param config - The resolved Boltdocs configuration containing custom plugins and components
314
314
  * @returns A string of JavaScript code to be evaluated by the browser
315
315
  */
316
- declare function generateEntryCode(options: BoltdocsPluginOptions, config?: BoltdocsConfig$1): string;
316
+ declare function generateEntryCode(options: BoltdocsPluginOptions, config?: BoltdocsConfig): string;
317
317
  //#endregion
318
318
  //#region src/node/routes/types.d.ts
319
319
  /**
@@ -419,7 +419,7 @@ declare function flushCache(): Promise<void>;
419
419
  //#endregion
420
420
  //#region src/node/plugins/plugin-types.d.ts
421
421
  interface PluginContext {
422
- readonly config: BoltdocsConfig$1;
422
+ readonly config: BoltdocsConfig;
423
423
  readonly logger: PluginLogger;
424
424
  readonly store: PluginStore;
425
425
  readonly meta: PluginMeta;
@@ -537,7 +537,7 @@ declare class PluginLifecycleManager {
537
537
  private store;
538
538
  private docsDir;
539
539
  private rootDir;
540
- constructor(plugins: SecureBoltdocsPlugin[], config: BoltdocsConfig$1, docsDir?: string, rootDir?: string);
540
+ constructor(plugins: SecureBoltdocsPlugin[], config: BoltdocsConfig, docsDir?: string, rootDir?: string);
541
541
  runHook(hookName: keyof PluginLifecycleHooks, ...args: unknown[]): Promise<void>;
542
542
  runChain<TParams>(hookName: keyof PluginLifecycleHooks, initialParams: TParams): Promise<TParams>;
543
543
  private getSortedPlugins;
@@ -1037,4 +1037,4 @@ declare function boltdocs(options?: BoltdocsPluginOptions): Promise<Plugin[]>;
1037
1037
  */
1038
1038
  declare function createViteConfig(root: string, mode?: 'development' | 'production', preResolvedConfig?: BoltdocsConfig): Promise<InlineConfig>;
1039
1039
  //#endregion
1040
- export { AssetCache, type BoltdocsConfig$1 as BoltdocsConfig, type BoltdocsPlugin, type BoltdocsPluginOptions, BoltdocsPluginStore, type BoltdocsThemeConfig, EXIT, MDX_NODES, NodeWithHProperties, PluginCompatibilityError, PluginContext, PluginError, PluginHookError, PluginLifecycleHooks, PluginLifecycleManager, PluginLogger, PluginMeta, PluginStore, PluginValidationError, type RouteMeta, SKIP, SecureBoltdocsPlugin, addNodeClass, createMdxAttribute, createMdxElement, createPlugin, createRehypeElement, createViteConfig, boltdocs as default, defineConfig, flushCache, generateEntryCode, getNodeProperty, handleAwsFeedback, handleFeedback, handleNetlifyFeedback, handleVercelFeedback, handleWebFeedback, hasNodeClass, normalizePath, parseMetaString, removeNodeClass, resolveConfig, sanitizeFilename, setNodeProperty, validatePlugins, visitMdxElements, visitNodes, visitRehypeElements, visitRemarkHeadings, visitRemarkLinks };
1040
+ export { AssetCache, type BoltdocsConfig, type BoltdocsPlugin, type BoltdocsPluginOptions, BoltdocsPluginStore, type BoltdocsThemeConfig, EXIT, MDX_NODES, NodeWithHProperties, PluginCompatibilityError, PluginContext, PluginError, PluginHookError, PluginLifecycleHooks, PluginLifecycleManager, PluginLogger, PluginMeta, PluginStore, PluginValidationError, type RouteMeta, SKIP, SecureBoltdocsPlugin, addNodeClass, createMdxAttribute, createMdxElement, createPlugin, createRehypeElement, createViteConfig, boltdocs as default, defineConfig, flushCache, generateEntryCode, getNodeProperty, handleAwsFeedback, handleFeedback, handleNetlifyFeedback, handleVercelFeedback, handleWebFeedback, hasNodeClass, normalizePath, parseMetaString, removeNodeClass, resolveConfig, sanitizeFilename, setNodeProperty, validatePlugins, visitMdxElements, visitNodes, visitRehypeElements, visitRemarkHeadings, visitRemarkLinks };