boltdocs 2.6.0 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/client/index.cjs +1 -1
  2. package/dist/client/index.d.cts +41 -37
  3. package/dist/client/index.d.ts +41 -37
  4. package/dist/client/index.js +1 -1
  5. package/dist/node/cli-entry.cjs +1 -1
  6. package/dist/node/cli-entry.mjs +1 -1
  7. package/dist/node/index.cjs +1 -1
  8. package/dist/node/index.d.cts +30 -3
  9. package/dist/node/index.d.mts +30 -3
  10. package/dist/node/index.mjs +1 -1
  11. package/dist/node-Bogvkxao.mjs +101 -0
  12. package/dist/node-CXaog6St.cjs +101 -0
  13. package/dist/{package-CR0HF9x3.mjs → package-Bqbn1AYK.mjs} +1 -1
  14. package/dist/{package-Dgmsc_l5.cjs → package-CFP44vfn.cjs} +1 -1
  15. package/dist/{search-dialog-DMK5OpgH.cjs → search-dialog-CV3eJzMm.cjs} +1 -1
  16. package/dist/{search-dialog-3lvKsbVG.js → search-dialog-DNTomKgu.js} +1 -1
  17. package/dist/use-search-CS3gH19M.js +6 -0
  18. package/dist/use-search-DBpJZQuw.cjs +6 -0
  19. package/package.json +3 -2
  20. package/src/client/components/ui-base/head.tsx +10 -3
  21. package/src/client/hooks/use-i18n.ts +4 -3
  22. package/src/client/hooks/use-localized-to.ts +1 -4
  23. package/src/client/hooks/use-routes.ts +4 -4
  24. package/src/client/hooks/use-sidebar.ts +3 -0
  25. package/src/client/hooks/use-version.ts +19 -6
  26. package/src/client/index.ts +2 -3
  27. package/src/client/ssg/boltdocs-shell.tsx +46 -14
  28. package/src/client/ssg/create-routes.tsx +56 -12
  29. package/src/client/store/boltdocs-context.tsx +24 -5
  30. package/src/shared/config-utils.ts +12 -0
  31. package/src/shared/types.ts +187 -0
  32. package/dist/node-BgvNl2Ay.mjs +0 -89
  33. package/dist/node-vkbb0MK7.cjs +0 -89
  34. package/dist/use-search-C9bxCqfF.js +0 -6
  35. package/dist/use-search-DcfZSunO.cjs +0 -6
  36. package/src/client/components/default-layout.tsx +0 -89
@@ -39,7 +39,7 @@ interface BoltdocsThemeConfig {
39
39
  link: string;
40
40
  }>>;
41
41
  sidebarGroups?: Record<string, {
42
- title?: string;
42
+ title?: string | Record<string, string>;
43
43
  icon?: string;
44
44
  }>;
45
45
  socialLinks?: BoltdocsSocialLink[];
@@ -94,7 +94,7 @@ interface BoltdocsLocaleConfig {
94
94
  */
95
95
  interface BoltdocsI18nConfig {
96
96
  defaultLocale: string;
97
- locales: Record<string, string>;
97
+ locales: string[] | Record<string, string>;
98
98
  localeConfigs?: Record<string, BoltdocsLocaleConfig>;
99
99
  }
100
100
  /**
@@ -162,6 +162,15 @@ interface BoltdocsConfig {
162
162
  seo?: BoltdocsSeoConfig;
163
163
  vite?: any;
164
164
  }
165
+ /**
166
+ * Global namespace for Boltdocs types that can be augmented by generated code.
167
+ * This allows for strictly typed locales and versions based on the project configuration.
168
+ */
169
+ declare global {
170
+ namespace Boltdocs {
171
+ interface Types {}
172
+ }
173
+ }
165
174
  //#endregion
166
175
  //#region src/shared/config-utils.d.ts
167
176
  /**
@@ -261,6 +270,24 @@ interface RouteMeta {
261
270
  seo?: Record<string, any>;
262
271
  }
263
272
  //#endregion
273
+ //#region src/node/utils.d.ts
274
+ /**
275
+ * Normalizes a file path by replacing Windows backslashes with forward slashes.
276
+ * Ensures consistent path handling across different operating systems.
277
+ *
278
+ * @param p - The file path to normalize
279
+ * @returns The normalized path using forward slashes
280
+ */
281
+ declare function normalizePath(p: string): string;
282
+ /**
283
+ * Sanitizes a filename or path component by removing dangerous characters.
284
+ * Prevents multiple dots to avoid path traversal tricks.
285
+ *
286
+ * @param name - The name to sanitize
287
+ * @returns The sanitized name
288
+ */
289
+ declare function sanitizeFilename(name: string): string;
290
+ //#endregion
264
291
  //#region src/node/plugins/plugin-types.d.ts
265
292
  /**
266
293
  * Permissions that a plugin can request to access specific Boltdocs capabilities.
@@ -516,4 +543,4 @@ declare function boltdocs(options?: BoltdocsPluginOptions): Promise<Plugin[]>;
516
543
  */
517
544
  declare function createViteConfig(root: string, mode?: 'development' | 'production'): Promise<InlineConfig>;
518
545
  //#endregion
519
- export { type BoltdocsConfig, type BoltdocsPlugin, type BoltdocsPluginOptions, BoltdocsPluginStore, type BoltdocsThemeConfig, PluginCompatibilityError, PluginContext, PluginError, PluginHookError, PluginLifecycleHooks, PluginLifecycleManager, PluginLogger, PluginMeta, PluginPermission, PluginPermissionError, PluginSandbox, PluginStore, PluginValidationError, type RouteMeta, SecureBoltdocsPlugin, SecurePluginSchema, createPlugin, createViteConfig, boltdocs as default, defineConfig, generateEntryCode, hasPermission, resolveConfig, validatePlugins };
546
+ export { type BoltdocsConfig, type BoltdocsPlugin, type BoltdocsPluginOptions, BoltdocsPluginStore, type BoltdocsThemeConfig, PluginCompatibilityError, PluginContext, PluginError, PluginHookError, PluginLifecycleHooks, PluginLifecycleManager, PluginLogger, PluginMeta, PluginPermission, PluginPermissionError, PluginSandbox, PluginStore, PluginValidationError, type RouteMeta, SecureBoltdocsPlugin, SecurePluginSchema, createPlugin, createViteConfig, boltdocs as default, defineConfig, generateEntryCode, hasPermission, normalizePath, resolveConfig, sanitizeFilename, validatePlugins };
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g}from"../node-BgvNl2Ay.mjs";export{c as BoltdocsPluginStore,g as PluginCompatibilityError,r as PluginError,i as PluginHookError,s as PluginLifecycleManager,f as PluginPermissionError,t as PluginSandbox,l as PluginValidationError,d as SecurePluginSchema,p as createPlugin,u as createViteConfig,h as default,e as defineConfig,o as generateEntryCode,m as hasPermission,a as resolveConfig,n as validatePlugins};
6
+ import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as u,n as d,o as f,p,r as m,s as h,t as g,u as _,v}from"../node-Bogvkxao.mjs";export{l as BoltdocsPluginStore,_ as PluginCompatibilityError,i as PluginError,a as PluginHookError,c as PluginLifecycleManager,p as PluginPermissionError,t as PluginSandbox,u as PluginValidationError,f as SecurePluginSchema,m as createPlugin,d as createViteConfig,g as default,e as defineConfig,s as generateEntryCode,h as hasPermission,v as normalizePath,o as resolveConfig,n as sanitizeFilename,r as validatePlugins};
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import e from"@vitejs/plugin-react";import t from"@tailwindcss/vite";import n from"node:path";import{fileURLToPath as r}from"node:url";import{loadConfigFromFile as i,loadEnv as a,normalizePath as o}from"vite";import s from"fast-glob";import c from"fs";import l from"gray-matter";import u from"isomorphic-dompurify";import{z as d}from"zod";import f from"path";import p from"crypto";import m from"zlib";import{promisify as h}from"util";import ee from"github-slugger";import{ViteImageOptimizer as te}from"vite-plugin-image-optimizer";import g from"node:fs";import _ from"semver";import v from"@mdx-js/rollup";import ne from"remark-gfm";import re from"remark-frontmatter";import ie from"rehype-slug";import{visit as y}from"unist-util-visit";import{createJavaScriptRegexEngine as b}from"shiki/engine/javascript";import{createHighlighterCore as ae}from"shiki/core";import x from"@shikijs/themes/github-light";import S from"@shikijs/themes/github-dark";import C from"@shikijs/themes/tokyo-night";import w from"@shikijs/themes/dracula";import T from"@shikijs/themes/nord";import E from"@shikijs/themes/one-dark-pro";import D from"@shikijs/themes/one-light";import O from"@shikijs/langs/html";import oe from"@shikijs/langs/js";import se from"@shikijs/langs/ts";import ce from"@shikijs/langs/tsx";import le from"@shikijs/langs/css";import ue from"@shikijs/langs/json";import de from"@shikijs/langs/bash";import fe from"@shikijs/langs/markdown";import pe from"@shikijs/langs/mdx";import me from"@shikijs/langs/yaml";import he from"@shikijs/langs/rust";import ge from"@shikijs/langs/toml";const k=n.dirname(r(import.meta.url)),_e=/^[a-zA-Z0-9\-_\/\.\(\)]+$/,ve=d.object({title:d.string().max(200).optional(),description:d.string().max(500).optional(),sidebarPosition:d.number().optional(),sidebarLabel:d.string().max(100).optional(),category:d.string().max(50).optional(),order:d.number().optional(),badge:d.string().max(50).optional(),icon:d.string().max(50).optional()});var A=class e extends Error{constructor(t){super(t),this.name=`SecurityViolationError`,Object.setPrototypeOf(this,e.prototype)}},ye=class e extends A{constructor(t){super(t),this.name=`PathTraversalError`,Object.setPrototypeOf(this,e.prototype)}},be=class e extends A{constructor(t){super(t),this.name=`EncodingSecurityError`,Object.setPrototypeOf(this,e.prototype)}},xe=class e extends A{constructor(t){super(t),this.name=`ValidationError`,Object.setPrototypeOf(this,e.prototype)}};function j(e){return e.replace(/\\/g,`/`)}function M(e){return e.replace(/^\d+\./,``)}function N(e){let t=e.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function Se(e){return/\.mdx?$/.test(e)}function P(e){try{return c.statSync(e).mtimeMs}catch{return 0}}function Ce(e){let t=c.readFileSync(e,`utf-8`);try{let{data:n,content:r,matter:i}=l(t);if(i&&i.length>10240)throw R(`FRONTMATTER_TOO_LARGE`,`Frontmatter block exceeds size limit`,{size:i.length,file:e}),new xe(`Security breach: Frontmatter size exceeds limit of 10240 bytes`);let a=ve.safeParse(n);a.success||console.warn(`[VALIDATION][${e}] Invalid frontmatter fields detected.`);let o={...a.success?a.data:{}};return o.title&&=I(o.title).trim(),o.description&&=I(o.description).trim(),{data:o,content:r}}catch(e){if(e instanceof xe)throw e;return{data:{},content:t}}}function we(e){return e.replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function Te(e){return we(e)}function Ee(e){let t=e.split(`/`).map(e=>M(De(e))).join(`/`).replace(/\/$/,``);return t=t.replace(/\.mdx?$/,``),(t===`index`||t.endsWith(`/index`))&&(t=t.replace(/index$/,``)),t.startsWith(`/`)||(t=`/`+t),t.length>1&&t.endsWith(`/`)&&(t=t.slice(0,-1)),t}function F(e){return u.sanitize(e,{ALLOWED_TAGS:`b.i.em.strong.a.p.br.code.pre.span.div.h1.h2.h3.h4.h5.h6.ul.ol.li.table.thead.tbody.tr.th.td.blockquote.hr`.split(`.`),ALLOWED_ATTR:[`href`,`title`,`target`,`class`,`id`,`src`,`alt`,`width`,`height`],FORCE_BODY:!0})}u.addHook(`afterSanitizeAttributes`,e=>{if(e.hasAttribute(`href`)){let t=e.getAttribute(`href`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`href`)}if(e.hasAttribute(`src`)){let t=e.getAttribute(`src`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`src`)}});function I(e){return u.sanitize(e,{ALLOWED_TAGS:[],KEEP_CONTENT:!0})}function L(e){return e.charAt(0).toUpperCase()+e.slice(1)}function De(e){return e.replace(/[^a-zA-Z0-9\-_\/\.]/g,``).split(`/`).filter(e=>e!==`..`&&e!==`.`).map(e=>e.replace(/\.\.+/g,`.`)).join(`/`)}function R(e,t,n={}){let r=new Date().toISOString(),i={...n};for(let e in i)typeof i[e]==`string`&&i[e].includes(`:`)&&(i[e]=i[e].split(/[\\/]/).pop()||i[e]);console.error(`[SECURITY][${r}] TYPE: ${e} | MESSAGE: ${t} | DETAILS: ${JSON.stringify(i)}`)}const Oe=h(c.writeFile),ke=h(c.readFile),z=h(c.mkdir),Ae=h(c.rename),je=process.env.BOLTDOCS_CACHE_DIR||`.boltdocs`,Me=parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||`2000`,10),Ne=process.env.BOLTDOCS_CACHE_COMPRESS!==`0`;var Pe=class{cache=new Map;constructor(e){this.limit=e}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.limit){let e=this.cache.keys().next().value;e!==void 0&&this.cache.delete(e)}this.cache.set(e,t)}get size(){return this.cache.size}clear(){this.cache.clear()}};const B=new class{queue=Promise.resolve();pendingCount=0;add(e){this.pendingCount++,this.queue=this.queue.then(e).finally(()=>{this.pendingCount--})}async flush(){await this.queue}get pending(){return this.pendingCount}};var Fe=class{entries=new Map;cachePath=null;compress;constructor(e={}){if(this.compress=e.compress===void 0?Ne:e.compress,e.name){let t=e.root||process.cwd(),n=this.compress?`json.gz`:`json`;this.cachePath=f.resolve(t,je,`${e.name}.${n}`)}}load(){if(process.env.BOLTDOCS_NO_CACHE!==`1`&&!(!this.cachePath||!c.existsSync(this.cachePath)))try{let e=c.readFileSync(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=m.gunzipSync(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE===`1`||!this.cachePath)return;let e=Object.fromEntries(this.entries),t=JSON.stringify(e),n=this.cachePath,r=this.compress;B.add(async()=>{try{await z(f.dirname(n),{recursive:!0});let e=Buffer.from(t);r&&(e=m.gzipSync(e));let i=`${n}.${p.randomBytes(4).toString(`hex`)}.tmp`;await Oe(i,e),await Ae(i,n)}catch{}})}get(e){let t=this.entries.get(e);return!t||P(e)!==t.mtime?null:t.data}set(e,t){this.entries.set(e,{data:t,mtime:P(e)})}isValid(e){let t=this.entries.get(e);return t?P(e)===t.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 B.flush()}},Ie=class{index=new Map;memoryCache=new Pe(Me);baseDir;shardsDir;indexPath;constructor(e,t=process.cwd()){this.baseDir=f.resolve(t,je,`transform-${e}`),this.shardsDir=f.resolve(this.baseDir,`shards`),this.indexPath=f.resolve(this.baseDir,`index.json`)}load(){if(process.env.BOLTDOCS_NO_CACHE!==`1`&&c.existsSync(this.indexPath))try{let e=c.readFileSync(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE===`1`)return;let e=JSON.stringify(Object.fromEntries(this.index)),t=this.indexPath;B.add(async()=>{await z(f.dirname(t),{recursive:!0}),await Oe(t,e)})}async getMany(e){let t=new Map,n=[];for(let r of e){let e=this.memoryCache.get(r);e?t.set(r,e):this.index.has(r)&&n.push(r)}if(n.length>0){let e=await Promise.all(n.map(async e=>{let t=this.index.get(e),n=f.resolve(this.shardsDir,`${t}.gz`);try{let t=await ke(n),r=m.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,r),{key:e,val:r}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}get(e){let t=this.memoryCache.get(e);if(t)return t;let n=this.index.get(e);if(!n)return null;let r=f.resolve(this.shardsDir,`${n}.gz`);if(!c.existsSync(r))return null;try{let t=c.readFileSync(r),n=m.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,n),n}catch{return null}}set(e,t){let n=p.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,n),this.memoryCache.set(e,t);let r=f.resolve(this.shardsDir,`${n}.gz`);B.add(async()=>{if(c.existsSync(r))return;await z(this.shardsDir,{recursive:!0});let e=m.gzipSync(Buffer.from(t)),n=`${r}.${p.randomBytes(4).toString(`hex`)}.tmp`;await Oe(n,e),await Ae(n,r)})}get size(){return this.index.size}async flush(){await B.flush()}};const V=new Fe({name:`routes`});function Le(){V.invalidateAll()}function Re(e){V.invalidate(e)}function ze(e,t,n,r){let i;try{i=decodeURIComponent(e)}catch{let t=f.basename(e);throw R(`ENCODING_ERROR`,`Invalid character encoding`,{file:t}),new be(`Security breach: Invalid characters or encoding in path: ${t}`)}if(i.length>260){let e=f.basename(i);throw R(`PATH_TOO_LONG`,`Path length exceeds limit`,{length:i.length,file:e}),new ye(`Security breach: Path length exceeds limit of 260 characters: ${e}`)}let a=f.resolve(i),o=f.resolve(t),s=j(f.relative(o,a));if(s.startsWith(`../`)||s===`..`||a.includes(`\0`)||!_e.test(s)){let t=f.basename(e);throw R(`PATH_TRAVERSAL_ATTEMPT`,`Path traversal or invalid characters detected`,{path:s}),new ye(`Security breach: File is outside of docs directory, contains null bytes, or invalid characters: ${t}`)}let{data:c,content:l}=Ce(e),u=s.split(`/`),d,p;if(r?.versions&&u.length>0){let e=u[0],t=r.versions.prefix||``,n=r.versions.versions.find(n=>e===t+n.path||e===n.path);n&&(p=n.path,u=u.slice(1))}if(r?.i18n&&u.length>0){let e=u[0];(Array.isArray(r.i18n.locales)?r.i18n.locales.includes(e):r.i18n.locales[e])&&(d=e,u=u.slice(1))}let m;if(u.length>0){let e=u[0].match(/^\((.+)\)$/);e&&(m=e[1].toLowerCase(),u=u.slice(1))}let h;u=u.map(e=>{let t=M(e);return t.startsWith(`_`)&&t!==`_`?(h=t.substring(1),e.substring(0,e.length-t.length)+t.substring(1)):e});let te=u.join(`/`),g;g=c.permalink?c.permalink.startsWith(`/`)?c.permalink:`/${c.permalink}`:Ee(te||`index.md`);let _=n;p&&(_+=`/`+p),d&&(_+=`/`+d),m&&(_+=`/`+m),_+=g===`/`?``:g,(!_||_===``)&&(_=`/`);let v=u[u.length-1],ne=M(v),re=M(f.basename(e,f.extname(e))),ie=c.sidebarPosition??N(v),y=u.length>=2?u[0]:void 0,b=y?M(y):void 0,ae=u.length===2&&/^index\.mdx?$/.test(ne),x=new ee,S=[];for(let e of l.matchAll(/^(#{2,4})\s+(.+)$/gm)){let t=e[1].length,n=F(e[2].replace(/\[([^\]]+)\]\([^\)]+\)/g,`$1`).replace(/[_*`]/g,``).trim()).trim(),r=x.slug(n);S.push({level:t,text:n,id:r})}let C=c.title?F(String(c.title)):re,w=c.description?F(String(c.description)):``;!w&&l&&(w=I(l.replace(/^#+.*$/gm,``).replace(/\[([^\]]+)\]\([^\)]+\)/g,`$1`).replace(/[_*`]/g,``).replace(/\s+/g,` `)).trim().slice(0,160));let T=c.badge?F(String(c.badge)):void 0,E=c.icon?String(c.icon):void 0,D=Be(l),O={},oe=[`og:`,`twitter:`,`article:`,`music:`,`video:`,`profile:`,`book:`],se=[`noindex`,`robots`,`canonical`,`keywords`,`author`];c.seo&&typeof c.seo==`object`&&Object.assign(O,c.seo);for(let e of Object.keys(c))(se.includes(e)||oe.some(t=>e.startsWith(t)))&&(O[e]=c[e]);return c.hidden===!0&&O.noindex===void 0&&(O.noindex=!0),{route:{path:_,componentPath:e,filePath:s,title:C,description:w,sidebarPosition:ie,headings:S,locale:d,version:p,badge:T,icon:E,tab:m,subRouteGroup:h,_content:D,_rawContent:l,seo:Object.keys(O).length>0?O:void 0},relativeDir:b,isGroupIndex:ae,inferredTab:m,groupMeta:ae?{title:c.groupTitle||c.title||(b?L(b):``),position:c.groupPosition??c.sidebarPosition??(y?N(y):void 0),icon:E}:void 0,inferredGroupPosition:y?N(y):void 0}}function Be(e){return I(e.replace(/^#+.*$/gm,``).replace(/\[([^\]]+)\]\([^\)]+\)/g,`$1`).replace(/\{[^\}]+\}/g,``).replace(/[_*`]/g,``).replace(/\s+/g,` `)).trim()}function Ve(e){return e.sort((e,t)=>!e.group&&!t.group?He(e,t):e.group?t.group?e.group===t.group?He(e,t):Ue(e,t):1:-1)}function He(e,t){return e.sidebarPosition!==void 0&&t.sidebarPosition!==void 0?e.sidebarPosition-t.sidebarPosition:e.sidebarPosition===void 0?t.sidebarPosition===void 0?e.title.localeCompare(t.title):1:-1}function Ue(e,t){return e.groupPosition!==void 0&&t.groupPosition!==void 0?e.groupPosition-t.groupPosition:e.groupPosition===void 0?t.groupPosition===void 0?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):1:-1}let H=null;const U=new Map;async function W(e,t,n=`/docs`,r=!0){V.load(),U.clear(),(process.env.BOLTDOCS_FORCE_REPARSE===`true`||t?.i18n)&&V.invalidateAll();let i;!r&&H?i=H:(i=await s([`**/*.md`,`**/*.mdx`],{cwd:e,absolute:!0,suppressErrors:!0,followSymbolicLinks:!1}),H=i),V.pruneStale(new Set(i));let a=[],o=0;for(let r=0;r<i.length;r+=50){let s=i.slice(r,r+50),c=await Promise.all(s.map(async r=>{let i=V.get(r);if(i)return o++,i;let a=ze(r,e,n,t);return V.set(r,a),a}));a.push(...c),r+50<i.length&&await new Promise(e=>setImmediate(e))}V.save();let c=new Map,l=[],u=t?.i18n?.defaultLocale||``;for(let e of a)if(e.isGroupIndex&&e.relativeDir&&l.push(e),e.relativeDir){let t=`${e.route.locale||u}:${e.relativeDir}`,n=c.get(t);n?n.position===void 0&&e.inferredGroupPosition!==void 0&&(n.position=e.inferredGroupPosition):(n={title:L(e.relativeDir),position:e.inferredGroupPosition},c.set(t,n))}for(let e of l){let t=`${e.route.locale||u}:${e.relativeDir}`,n=c.get(t);e.groupMeta&&(n.title=e.groupMeta.title,e.groupMeta.position!==void 0&&(n.position=e.groupMeta.position),e.groupMeta.icon&&(n.icon=e.groupMeta.icon))}if(t?.theme?.sidebarGroups){let e=t.i18n?Object.keys(t.i18n.locales):[u];for(let[n,r]of Object.entries(t.theme.sidebarGroups))for(let t of e){let e=`${t}:${n}`,i=c.get(e),a;typeof r.title==`string`?a=r.title:r.title&&(a=r.title[t]||r.title[u]),i?(a&&(i.title=a),r.icon&&(i.icon=r.icon)):c.set(e,{title:a||L(n),icon:r.icon})}}let d=Array(a.length);for(let e=0;e<a.length;e++){let t=a[e],n=t.relativeDir,r=t.route.locale||u,i=n?`${r}:${n}`:void 0,o=i?c.get(i):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[r]||o.title[u]),d[e]={...t.route,group:n,groupTitle:s||(n?L(n):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let f=d;if(t?.i18n){let e=We(d,t,n);f=[...d,...e]}return Ve(f)}function We(e,t,n){let r=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),a=[],o=new Map,s=[];for(let t of e){let e=t.locale||r;o.has(e)||o.set(e,new Set),o.get(e).add(t.path),e===r&&s.push(t)}for(let e of i){let i=o.get(e)||new Set;for(let o of s){let s=Ge(o.path,r,e,n,t);s!==o.path&&(i.has(s)||a.push({...o,path:s,locale:e}))}}return a}function Ge(e,t,n,r,i){let a=`${e}:${n}`,o=U.get(a);if(o)return o;let s=r.startsWith(`/`)?r:`/`+r,c=s;if(i?.versions){let t=i.versions.prefix||``;for(let n of i.versions.versions){let r=`${s}/${t+n.path}`;if(e.startsWith(r)){c=r;break}let i=`${s}/${n.path}`;if(e.startsWith(i)){c=i;break}}}let l=e.substring(c.length),u=`/${t}`;if(l.startsWith(u+`/`))l=`/`+n+`/`+l.substring(u.length+1);else if(l===u)l=`/`+n;else if(l===`/`||l===``)l=`/`+n;else{let e=l.startsWith(`/`)?``:`/`;l=`/`+n+e+l}let d=c+l;return U.size>2e3&&U.clear(),U.set(a,d),d}function Ke(e){return e.map(e=>({path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],_content:e._content||``,locale:e.locale,version:e.version,tab:e.tab,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo}))}const qe=d.object({icon:d.string().max(50),link:d.string().url()}),Je=d.object({text:d.string().max(2e3).optional()}),Ye=d.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),Xe=d.object({name:d.string(),enforce:d.enum([`pre`,`post`]).optional(),version:d.string().optional(),boltdocsVersion:d.string().optional(),permissions:d.array(Ye).optional(),remarkPlugins:d.array(d.any()).optional(),rehypePlugins:d.array(d.any()).optional(),vitePlugins:d.array(d.any()).optional(),components:d.record(d.string(),d.string()).optional(),hooks:d.record(d.string(),d.any()).optional()}),Ze=d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),description:d.union([d.string(),d.record(d.string(),d.string())]).optional(),logo:d.union([d.string(),d.object({dark:d.string(),light:d.string(),alt:d.string().optional(),width:d.number().optional(),height:d.number().optional()})]).optional(),navbar:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string()})).optional(),sidebar:d.record(d.string(),d.array(d.object({text:d.string(),link:d.string()}))).optional(),sidebarGroups:d.record(d.string(),d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),icon:d.string().optional()})).optional(),socialLinks:d.array(qe).optional(),footer:Je.optional(),breadcrumbs:d.boolean().optional(),editLink:d.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:d.string().url().optional(),version:d.string().max(50).optional(),githubRepo:d.string().max(100).optional(),favicon:d.string().optional(),poweredBy:d.boolean().optional(),tabs:d.array(d.object({id:d.string(),text:d.union([d.string(),d.record(d.string(),d.string())]),icon:d.string().optional()})).optional(),codeTheme:d.union([d.string(),d.object({light:d.string(),dark:d.string()})]).optional(),copyMarkdown:d.union([d.boolean(),d.object({text:d.string().optional(),icon:d.string().optional()})]).optional()}),Qe=d.union([d.string(),d.object({rules:d.array(d.object({userAgent:d.string(),allow:d.union([d.string(),d.array(d.string())]).optional(),disallow:d.union([d.string(),d.array(d.string())]).optional()})).optional(),sitemaps:d.array(d.string().url()).optional()})]),$e=d.object({defaultLocale:d.string(),locales:d.union([d.record(d.string(),d.string()),d.array(d.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:d.record(d.string(),d.object({label:d.string().optional(),direction:d.enum([`ltr`,`rtl`]).optional(),htmlLang:d.string().optional(),calendar:d.string().optional()})).optional()}),et=d.object({defaultVersion:d.string(),prefix:d.string().optional(),versions:d.array(d.object({label:d.string(),path:d.string()}))}),tt=d.object({headers:d.record(d.string(),d.string()).optional(),enableCSP:d.boolean().optional(),customHeaders:d.record(d.string(),d.string()).optional()}),nt=d.object({metatags:d.record(d.string(),d.string()).optional(),indexing:d.enum([`all`,`public`]).optional(),thumbnails:d.object({background:d.string().optional()}).optional()}),rt=d.object({siteUrl:d.string().url().optional(),docsDir:d.string().optional(),homePage:d.string().optional(),theme:Ze.optional(),i18n:$e.optional(),versions:et.optional(),plugins:d.array(Xe).optional(),robots:Qe.optional(),security:tt.optional(),seo:nt.optional(),vite:d.record(d.string(),d.unknown()).optional()});function it(e,t=process.cwd()){let r=n.resolve(t,`.boltdocs`);g.existsSync(r)||g.mkdirSync(r,{recursive:!0});let i=e.i18n?Object.keys(e.i18n.locales):[],a=e.versions?e.versions.versions.map(e=>e.path):[],o=`// This file is automatically generated by Boltdocs.
7
+ // Do not edit this file manually.
8
+
9
+ declare global {
10
+ namespace Boltdocs {
11
+ interface Types {
12
+ Locale: ${i.length>0?i.map(e=>`'${e}'`).join(` | `):`string`}
13
+ Version: ${a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`}
14
+ }
15
+ }
16
+ }
17
+
18
+ export {}
19
+ `;g.writeFileSync(n.resolve(r,`types.d.ts`),o)}function at(e){return e}const G=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function ot(e,t=process.cwd()){let r=t,a={docsDir:n.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`},poweredBy:!0,breadcrumbs:!0}},o={};for(let e of G){let t=n.resolve(r,e);if(g.existsSync(t))try{let e=await i({command:`serve`,mode:`development`},t,r);if(e){o=e.config;break}}catch(t){console.warn(`[boltdocs] Failed to load config from ${e}:`,t)}}let s={title:o.title,description:o.description,logo:o.logo,favicon:o.favicon,navbar:o.navbar,sidebar:o.sidebar,sidebarGroups:o.theme?.sidebarGroups,socialLinks:o.socialLinks,footer:o.footer,githubRepo:o.githubRepo,tabs:o.tabs,codeTheme:o.codeTheme,copyMarkdown:o.copyMarkdown,breadcrumbs:o.breadcrumbs,poweredBy:o.poweredBy,communityHelp:o.communityHelp,version:o.version,editLink:o.editLink,...o.theme||{}},c=Object.fromEntries(Object.entries(s).filter(([e,t])=>t!==void 0));c.navbar&&=c.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``}));let l={docsDir:n.resolve(e),homePage:o.homePage,theme:{...a.theme,...c},i18n:o.i18n?{...o.i18n,locales:Array.isArray(o.i18n.locales)?Object.fromEntries(o.i18n.locales.map(e=>[e,e])):o.i18n.locales}:void 0,versions:o.versions,siteUrl:o.siteUrl,plugins:o.plugins||[],robots:o.robots,security:o.security,vite:o.vite},u=rt.safeParse(l);if(!u.success)throw new xe(`Invalid Boltdocs configuration:\n${u.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
20
+ `)}`);return u.data}async function K(e,t=process.cwd()){let n=await ot(e,t);return it(n,t),n}function st(e,t){let n=(t.siteUrl||``).replace(/\/$/,``);if(!n)return``;let r=t.seo?.indexing!==`all`&&t.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
21
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
22
+ ${e.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(r&&e.seo?.index,!0)).map(e=>` <url>
23
+ <loc>${Te(`${n}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`)}</loc>
24
+ <changefreq>weekly</changefreq>
25
+ <priority>0.7</priority>
26
+ </url>`).join(`
27
+ `)}
28
+ </urlset>`}function ct(e){let t=e.siteUrl||``,n=t?`${t.replace(/\/$/,``)}/sitemap.xml`:``;if(e.seo?.indexing!==`all`&&e.seo?.indexing!==`public`&&e.seo?.indexing)return[`User-agent: *`,`Disallow: /`].filter(Boolean).join(`
29
+ `);if(typeof e.robots==`string`)return e.robots;if(e.robots&&typeof e.robots==`object`){let t=e.robots.rules||[],r=e.robots.sitemaps||[],i=t.map(e=>{let t=`User-agent: ${e.userAgent}\n`;return e.allow&&(Array.isArray(e.allow)?t+=e.allow.map(e=>`Allow: ${e}`).join(`
30
+ `)+`
31
+ `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
32
+ `)+`
33
+ `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
34
+
35
+ `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
36
+ `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
37
+ `)}function q(e,t){let n=e.homePage?`import HomePage from '${j(e.homePage)}';`:``,r=f.resolve(process.cwd(),`index.css`),i=c.existsSync(r)?`import './index.css';`:``,a=e.homePage?`homePage: HomePage,`:``,o=t?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],s=o.map(([e,t])=>`import * as _comp_${e} from '${j(t)}';
38
+ const ${e} = _comp_${e}.default || _comp_${e}['${e}'] || _comp_${e};`).join(`
39
+ `),l=o.map(([e])=>e).join(`, `),u=f.basename(e.docsDir||`docs`),d=f.resolve(process.cwd(),e.docsDir||`docs`),p=[`tsx`,`ts`,`jsx`,`js`].map(e=>f.resolve(d,`pages-external/index.${e}`)).find(e=>c.existsSync(e)),m=p?`import * as _external_module from '${j(p)}';`:``;return a=p?`homePage: _external_module.homePage || HomePage,`:e.homePage?`homePage: HomePage,`:``,`
40
+ import { ViteReactSSG } from '@bdocs/ssg';
41
+ import { createRoutes } from 'boltdocs/client';
42
+ import _routes from 'virtual:boltdocs-routes.ts';
43
+ import _config from 'virtual:boltdocs-config.ts';
44
+ import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx';
45
+ import _Layout from 'virtual:boltdocs-layout.tsx';
46
+ ${i}
47
+ ${n}
48
+ ${s}
49
+ ${m}
50
+
51
+ const mdxModules = import.meta.glob('/${u}/**/*.{md,mdx}', { eager: true });
52
+
53
+ export const createRoot = ViteReactSSG(
54
+ {
55
+ routes: createRoutes({
56
+ routesData: _routes,
57
+ config: _config,
58
+ mdxModules,
59
+ Layout: _Layout,
60
+ ${a}
61
+ ${p?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``}
62
+ components: { ${l}${l?`, `:``} ...(_user_mdx_components || {}) },
63
+ }),
64
+ },
65
+ ({ isClient }) => {
66
+ // Boltdocs initialization hook
67
+ if (isClient) {
68
+ // Client-side initialization
69
+ }
70
+ },
71
+ );
72
+ `}function lt(e){return`<!doctype html>
73
+ <html lang="en">
74
+ <head>
75
+ <meta charset="UTF-8" />
76
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
77
+ <title>${e.theme?.title||`Boltdocs`}</title>
78
+ </head>
79
+ <body>
80
+ <div id="root"></div>
81
+ </body>
82
+ </html>`}function ut(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=lt(t));let n=t.theme,r=n?.title||`Boltdocs`,i=n?.description||``,a=n?.favicon;!a&&n?.logo&&(a=typeof n.logo==`string`?n.logo:n.logo.light||n.logo.dark);let o=[a?`<link rel="icon" href="${a}">`:``,`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,`<meta property="og:type" content="website">`,`<meta name="twitter:card" content="summary_large_image">`,`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,`<meta name="generator" content="Boltdocs">`].filter(Boolean).join(`
83
+ `);return e=e.includes(`<title>`)?e.replace(/<title>.*?<\/title>/,`<title>${r}</title>`):e.replace(`</head>`,` <title>${r}</title>\n </head>`),e=e.replace(`</head>`,` ${o}\n
84
+ <script>
85
+ (function() {
86
+ try {
87
+ var stored = localStorage.getItem("boltdocs-theme");
88
+ var isDark =
89
+ stored === "dark" ||
90
+ (stored !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
91
+ document.documentElement.classList.toggle("dark", isDark);
92
+ document.documentElement.dataset.theme = isDark ? "dark" : "light";
93
+ } catch (e) {}
94
+ })();
95
+ <\/script>
96
+ </head>`),!e.includes(`src/main`)&&!e.includes(`virtual:boltdocs-entry`)&&(e=e.replace(`</body>`,` <script type="module">import "virtual:boltdocs-entry";<\/script>
97
+ </body>`)),e}function dt(e){let t=[];for(let n of e)if(t.push({id:n.path,title:n.title,content:n._content||``,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings)for(let e of n.headings)t.push({id:`${n.path}#${e.id}`,title:e.text,content:`${e.text} in ${n.title}`,url:`${n.path}#${e.id}`,display:`${n.title} > ${e.text}`,locale:n.locale,version:n.version});return t}const ft={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function pt(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(`; `)}var J=class e extends Error{pluginName;constructor(t,n){super(`[plugin:${t}] ${n}`),this.name=`PluginError`,this.pluginName=t,Object.setPrototypeOf(this,e.prototype)}},Y=class e extends J{constructor(t,n){super(t,`Validation failed: ${n}`),this.name=`PluginValidationError`,Object.setPrototypeOf(this,e.prototype)}},mt=class e extends J{constructor(t,n){super(t,`Compatibility error: ${n}`),this.name=`PluginCompatibilityError`,Object.setPrototypeOf(this,e.prototype)}},X=class e extends J{constructor(t,n){super(t,`Missing required permission: '${n}'`),this.name=`PluginPermissionError`,Object.setPrototypeOf(this,e.prototype)}},ht=class e extends J{hookName;constructor(t,n,r){super(t,`Error in hook '${n}': ${r.message}`),this.name=`PluginHookError`,this.hookName=n,this.stack=r.stack,Object.setPrototypeOf(this,e.prototype)}},gt=class{data=new Map;getNamespaceKey(e,t){return`${e}:${t}`}get(e,t){let n=this.getNamespaceKey(e,t),r=this.data.get(n);if(r!==void 0)return typeof r==`object`&&r?JSON.parse(JSON.stringify(r)):r}set(e,t,n){let r=this.getNamespaceKey(e,t),i=typeof n==`object`&&n?JSON.parse(JSON.stringify(n)):n;this.data.set(r,i)}has(e,t){let n=this.getNamespaceKey(e,t);return this.data.has(n)}};const _t=Xe.extend({version:d.string().optional(),boltdocsVersion:d.string().optional(),permissions:d.array(d.string()).optional(),hooks:d.object({beforeBuild:d.function().optional(),afterBuild:d.function().optional(),beforeDev:d.function().optional(),afterDev:d.function().optional(),configResolved:d.function().optional(),buildEnd:d.function().optional()}).optional()});function vt(e,t){let n=[],r=new Set;for(let i of e){let e=_t.safeParse(i);if(!e.success)throw new Y(i.name||`unknown`,e.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `));let a=e.data;if(r.has(a.name))throw new Y(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!_.satisfies(t,a.boltdocsVersion))throw new mt(a.name,`Plugin expects Boltdocs version ${a.boltdocsVersion}, but current is ${t}`);if(a.components){for(let[e,t]of Object.entries(a.components))if((t.includes(`..`)||f.isAbsolute(t))&&t.includes(`..`))throw new Y(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function Z(e,t){return e.permissions?e.permissions.includes(t):!1}var Q=class{static checkPermission(e,t){if(!Z(e,t))throw new X(e.name,t)}static getSanitizedCapabilities(e){return{remarkPlugins:Z(e,`mdx:remark`)?e.remarkPlugins:[],rehypePlugins:Z(e,`mdx:rehype`)?e.rehypePlugins:[],vitePlugins:Z(e,`vite:config`)?e.vitePlugins:[],components:Z(e,`components`)?e.components:{}}}static async executeWithIsolation(e,t,n,r){try{return this.checkPermission(e,t),await r()}catch(t){if(t instanceof X){console.warn(`[boltdocs] Skipping hook '${n}' for plugin '${e.name}': ${t.message}`);return}throw t}}},yt=class{plugins;config;store;constructor(e,t){this.plugins=e,this.config=t,this.store=new gt}async runHook(e,...t){let n=this.getSortedPlugins();for(let r of n){if(!r.hooks?.[e])continue;let n=this.createContext(r),i=e.toLowerCase().includes(`build`),a=e.toLowerCase().includes(`dev`),o=i?`hooks:build`:a?`hooks:dev`:void 0;try{o?await Q.executeWithIsolation(r,o,e,()=>r.hooks[e](n,...t)):await r.hooks[e](n,...t)}catch(t){let i=new ht(r.name,e,t instanceof Error?t:Error(String(t)));n.logger.error(i)}}}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createContext(e){return{config:Object.freeze({...this.config}),meta:{name:e.name,version:e.version,boltdocsVersion:e.boltdocsVersion},store:{get:(e,t)=>this.store.get(e,t),set:(e,t,n)=>this.store.set(e,t,n),has:(e,t)=>this.store.has(e,t)},logger:this.createLogger(e.name)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>console.log(`${t} INFO: ${e}`),warn:e=>console.warn(`${t} WARN: ${e}`),error:e=>{let n=e instanceof Error?e.message:e;console.error(`${t} ERROR: ${n}`)},debug:e=>console.debug(`${t} DEBUG: ${e}`)}}};function bt(e){return e}function xt(e={},t){let r=n.resolve(process.cwd(),e.docsDir||`docs`),i=j(r),o=t,s,c=!1,l,u=[];return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){c=t.command===`build`;let i=e.envDir||process.cwd(),s=a(t.mode,i,``);Object.assign(process.env,s),o||=await K(r);let d=(await import(`./package-Bqbn1AYK.mjs`)).version,f=vt(o.plugins||[],d);return o.plugins=f,l=new yt(f,o),u=f.flatMap(e=>Q.getSanitizedCapabilities(e).vitePlugins||[]),c&&await l.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`nested`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=st(Ke(await W(r,o)),o);t&&g.writeFileSync(n.join(e,`sitemap.xml`),t);let i=ct(o);g.writeFileSync(n.join(e,`robots.txt`),i)}},build:{ssrManifest:c},async config(){let e=k;for(;e!==n.parse(e).root&&!g.existsSync(n.join(e,`package.json`));)e=n.dirname(e);if(g.existsSync(n.join(e,`package.json`))&&JSON.parse(g.readFileSync(n.join(e,`package.json`),`utf-8`)).name!==`boltdocs`){let t=n.dirname(e);for(;t!==n.parse(t).root;){if(g.existsSync(n.join(t,`package.json`))&&JSON.parse(g.readFileSync(n.join(t,`package.json`),`utf-8`)).name===`boltdocs`){e=t;break}t=n.dirname(t)}}return{optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{dedupe:[`react`,`react-dom`]}}}}},configResolved(e){s=e,l?.runHook(`configResolved`,o)},async configureServer(e){await l?.runHook(`beforeDev`),e.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(ft).forEach(([e,n])=>{t.setHeader(e,n)}),o.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,pt(o)),n()}),e.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),e.middlewares.use(async(t,n,r)=>{let i=t.url?.split(`?`)[0]||`/`,a=t.headers.accept||``,s=i===`/`||i.startsWith(`/docs`)||o.i18n&&Object.keys(o.i18n.locales).some(e=>i.startsWith(`/${e}/docs`)||i===`/${e}`)||!0,c=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(i);if(a.includes(`text/html`)&&!c&&s){let r=lt(o);r=ut(r,o),r=await e.transformIndexHtml(t.url||`/`,r),n.statusCode=200,n.setHeader(`Content-Type`,`text/html`),n.end(r);return}r()});let t=G.map(e=>n.resolve(process.cwd(),e)),a=[`tsx`,`jsx`].map(e=>n.resolve(r,`layout.${e}`)),s=[`tsx`,`ts`,`jsx`,`js`],c=s.map(e=>n.resolve(r,`mdx-components.${e}`)),u=s.map(e=>n.resolve(r,`pages-external/index.${e}`)),d=s.map(e=>n.resolve(r,`icons.${e}`));e.watcher.add([...t,...c,...a,...u,...d]);let f=async(t,n)=>{try{let a=j(t);if(G.some(e=>a.endsWith(e))){e.restart();return}if(s.some(e=>a.endsWith(`mdx-components.${e}`))){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-mdx-components.tsx`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(s.some(e=>a.endsWith(`icons.${e}`))){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-icons.tsx`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(a.endsWith(`layout.tsx`)||a.endsWith(`layout.jsx`)){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-layout.tsx`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(a.includes(`/pages-external/`)||a.includes(`\\pages-external\\`)){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-entry`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(!a.startsWith(i)||!Se(a))return;if(n===`add`||n===`unlink`){Le(),o=await K(r);let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-config.ts`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:o?.theme,i18n:o?.i18n,versions:o?.versions,siteUrl:o?.siteUrl}})}else Re(t);let c=e.moduleGraph.getModuleById(`\0virtual:boltdocs-routes.ts`);c&&e.moduleGraph.invalidateModule(c);let l=e.moduleGraph.getModuleById(`\0virtual:boltdocs-config.ts`);l&&e.moduleGraph.invalidateModule(l),e.ws.send({type:`full-reload`})}catch(e){console.error(`[boltdocs] HMR error during ${n} event:`,e)}};e.watcher.on(`add`,e=>f(e,`add`)),e.watcher.on(`unlink`,e=>f(e,`unlink`)),e.watcher.on(`change`,e=>f(e,`change`)),await l?.runHook(`afterDev`)},resolveId(e){let t=s?.root||process.cwd();return e.includes(`boltdocs-entry.mjs`)||e===`virtual:boltdocs-entry`||e===`boltdocs-entry`||e===`\0virtual:boltdocs-entry`?j(n.resolve(t,`boltdocs-entry.mjs`)):e.includes(`boltdocs-client.mjs`)||e===`virtual:boltdocs-client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.ts`?j(n.resolve(t,`boltdocs-client.mjs`)):e.startsWith(`virtual:boltdocs-`)?`\0`+e:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(t){if(t.includes(`boltdocs-entry.mjs`)||t===`\0virtual:boltdocs-entry`)return q(e,o);if(t.includes(`boltdocs-client.mjs`)||t===`\0virtual:boltdocs-client.ts`||t===`virtual:boltdocs-client`){let e=k,t=e;for(;e!==n.parse(e).root;){if(g.existsSync(n.join(e,`package.json`))&&JSON.parse(g.readFileSync(n.join(e,`package.json`),`utf-8`)).name===`boltdocs`){t=e;break}e=n.dirname(e)}let r=n.join(t,`src/client/index.ts`),i=n.join(t,`dist/client/index.js`);return`export * from '${j(g.existsSync(r)?r:i)}';`}if(!t.startsWith(`\0virtual:boltdocs-`))return;let i=t.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(i===`routes`){let e=Ke(await W(r,o));return`export default ${JSON.stringify(e,null,2)};`}if(i===`config`){let e={theme:o?.theme,i18n:o?.i18n,versions:o?.versions,siteUrl:o?.siteUrl,plugins:o?.plugins?.map(e=>({name:e.name}))};return`export default ${JSON.stringify(e,null,2)};`}if(i===`entry`)return q(e,o);if(i===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],t=null;for(let i of e){let e=n.resolve(r,`mdx-components.${i}`);if(g.existsSync(e)){t=e;break}}if(t){let e=j(t);return`import * as components from '${e}';
98
+ const mdxComponents = components.default || components;
99
+ export default mdxComponents;
100
+ export * from '${e}';`}return`export default {};`}if(i===`layout`){let e=[`tsx`,`jsx`],t=null;for(let i of e){let e=n.resolve(r,`layout.${i}`);if(g.existsSync(e)){t=e;break}}if(t)return`import UserLayout from '${j(t)}';
101
+ export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(i===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let i of e){let e=n.resolve(r,`icons.${i}`);if(g.existsSync(e)){t=e;break}}return t?`import * as icons from '${j(t)}';\nexport default icons;`:`export default {};`}if(i===`search`){let e=dt(await W(r,o));return`export default ${JSON.stringify(e,null,2)};`}if(i===`client`){let e=k,t=``;for(;e&&e!==n.parse(e).root;){let r=n.join(e,`src/client/index.ts`),i=n.join(e,`dist/client/index.mjs`),a=n.join(e,`client/index.ts`);if(g.existsSync(r)){t=j(r);break}if(g.existsSync(i)){t=j(i);break}if(g.existsSync(a)){t=j(a);break}e=n.dirname(e)}if(!t)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${k}`);return`export * from '${t}';`}},transformIndexHtml:{order:`pre`,handler(e){return ut(e,o)}},async closeBundle(){!c||s?.build?.ssr||(await l?.runHook(`afterBuild`),await l?.runHook(`buildEnd`))}},te({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),{name:`vite-plugin-boltdocs-extra-plugins`,async configResolved(){}},...u]}const $=new Ie(`mdx`),St=[x.default||x,S.default||S,C.default||C,w.default||w,T.default||T,E.default||E,D.default||D],Ct=[O,oe,se,ce,le,ue,de,fe,pe,me,he,ge];let wt=null,Tt=null;const Et=()=>(wt??=b(),wt),Dt=async e=>Tt||(Tt=ae({themes:St,langs:Ct,engine:Et()}),Tt),Ot=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.__raw||``,r=/lineNumbers|showLineNumbers/.test(n);(t||r)&&this.addClassToHast(e,`shiki-line-numbers`)}}},kt=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.__raw||``,r=/wordWrap|word-wrap/.test(n);(t||r)&&this.addClassToHast(e,`shiki-word-wrap`)}}},At=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.__raw;if(!t)return;let n=t.match(/title=(["'])(.*?)\1/)?.[2];e.properties[`data-title`]=n}}),jt=()=>({name:`AddLanguageProperty`,pre(e){e.properties[`data-lang`]=this.options.lang||`plaintext`}});var Mt=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:`github-light`,dark:`github-dark`}}async getHighlighter(){return await Dt(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={lang:e,meta:{__raw:t},transformers:[Ot(),kt(),At(),jt()]};return typeof n==`object`?r.themes={light:n.light,dark:n.dark}:r.theme=n,r}async render(e,t,n){let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}};function Nt(e){let t=new Mt(e);return async e=>{let n=await t.getHighlighter();y(e,[`mdxJsxFlowElement`,`mdxJsxTextElement`],e=>{if(e.name!==`ComponentPreview`)return;let r=e.attributes?.find(e=>e.name===`code`),i=``;if(r){if(typeof r.value==`string`)i=r.value;else if(r.value?.type===`mdxJsxAttributeValueExpression`){let e=r.value.value??``;i=e.match(/^[`'"]([\s\S]+)[`'"]$/)?.[1]??e}}if(!i)return;let a=e.attributes?.find(e=>e.name===`lineNumbers`||e.name===`showLineNumbers`),o=e.attributes?.find(e=>e.name===`wordWrap`||e.name===`word-wrap`),s=e.attributes?.find(e=>e.name===`title`),c=``;a&&(c+=` lineNumbers`),o&&(c+=` wordWrap`),s&&typeof s.value==`string`&&(c+=` title="${s.value}"`);let l=t.getOptions(`tsx`,c),u=n.codeToHtml(i,l);e.attributes=(e.attributes??[]).filter(e=>e.name!==`highlightedHtml`),e.attributes.push({type:`mdxJsxAttribute`,name:`highlightedHtml`,value:u})})}}function Pt(e){let t=new Mt(e);return async e=>{let n=await t.getHighlighter();y(e,`element`,e=>{if(e.tagName===`pre`&&e.children?.[0]?.tagName===`code`){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):`text`,o=r.children[0]?.value||``,s=r.properties?.metastring||r.data?.meta||``,c=t.getOptions(a,s),l=n.codeToHtml(o,c);e.properties[`data-highlighted`]=`true`,e.properties[`data-highlighted-html`]=l,e.properties[`data-lang`]=a,e.children=[]}})}}function Ft(){return e=>{y(e,`code`,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let It=!1;function Lt(e,t=v){let n=e?.plugins?.flatMap(e=>Q.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>Q.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[ne,re,Ft,[Nt,e],...n],rehypePlugins:[ie,[Pt,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){It||=($.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){if(!t.endsWith(`.md`)&&!t.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let r=`${t}:${p.createHash(`md5`).update(e).digest(`hex`)}:v2`,a=$.get(r);if(a)return{code:a,map:null};let o=await i.transform.call(this,e,t,n);return o&&typeof o==`object`&&o.code&&$.set(r,o.code),o},async buildEnd(){$.save(),await $.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}async function Rt(e){let t=await K(e?.docsDir||`docs`);return[...xt({...e,homePage:e?.homePage||t.homePage},t),Lt(t)]}async function zt(r,i=`development`){let a=await K(`docs`,r),s=i===`production`,c=s?{...ft}:{};return a.security?.enableCSP&&(c[`Content-Security-Policy`]=pt(a)),{root:r,mode:i,oxc:{jsx:{development:!s,runtime:`automatic`,importSource:`react`}},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`use-sync-external-store/shim`],rolldownOptions:{}},build:{rolldownOptions:{}},plugins:[e(),t(),await Rt({...a,root:r})],resolve:{alias:[{find:`boltdocs/entry`,replacement:o(n.resolve(r,`boltdocs-entry.mjs`))},{find:`boltdocs/client`,replacement:o(n.resolve(r,`boltdocs-client.mjs`))},{find:`use-sync-external-store/shim/index.js`,replacement:`react`},{find:`use-sync-external-store/shim`,replacement:`react`},{find:`use-sync-external-store`,replacement:`react`}],dedupe:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]},ssr:{optimizeDeps:{include:[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,...a.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-helmet-async`,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`]},server:{headers:{...c,...a.vite?.server?.headers},...a.vite?.server},preview:{headers:{...c,...a.vite?.preview?.headers},...a.vite?.preview},...a.vite}}export{at as _,Q as a,De as b,vt as c,J as d,ht as f,ot as g,q as h,yt as i,gt as l,Y as m,zt as n,_t as o,X as p,bt as r,Z as s,Rt as t,mt as u,j as v,Ce as y};
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require(`@vitejs/plugin-react`);l=c(l);let u=require(`@tailwindcss/vite`);u=c(u);let d=require(`vite`),f=require(`fast-glob`);f=c(f);let p=require(`fs`);p=c(p);let m=require(`gray-matter`);m=c(m);let h=require(`isomorphic-dompurify`);h=c(h);let g=require(`zod`),_=require(`path`);_=c(_);let v=require(`crypto`);v=c(v);let y=require(`zlib`);y=c(y);let b=require(`util`),x=require(`github-slugger`);x=c(x);let ee=require(`vite-plugin-image-optimizer`),S=require(`node:path`);S=c(S);let C=require(`node:fs`);C=c(C);let w=require(`semver`);w=c(w);let T=require(`@mdx-js/rollup`);T=c(T);let E=require(`remark-gfm`);E=c(E);let D=require(`remark-frontmatter`);D=c(D);let O=require(`rehype-slug`);O=c(O);let k=require(`unist-util-visit`),te=require(`shiki/engine/javascript`),ne=require(`shiki/core`),A=require(`@shikijs/themes/github-light`);A=c(A);let j=require(`@shikijs/themes/github-dark`);j=c(j);let M=require(`@shikijs/themes/tokyo-night`);M=c(M);let N=require(`@shikijs/themes/dracula`);N=c(N);let P=require(`@shikijs/themes/nord`);P=c(P);let F=require(`@shikijs/themes/one-dark-pro`);F=c(F);let I=require(`@shikijs/themes/one-light`);I=c(I);let re=require(`@shikijs/langs/html`);re=c(re);let ie=require(`@shikijs/langs/js`);ie=c(ie);let ae=require(`@shikijs/langs/ts`);ae=c(ae);let oe=require(`@shikijs/langs/tsx`);oe=c(oe);let se=require(`@shikijs/langs/css`);se=c(se);let ce=require(`@shikijs/langs/json`);ce=c(ce);let le=require(`@shikijs/langs/bash`);le=c(le);let ue=require(`@shikijs/langs/markdown`);ue=c(ue);let de=require(`@shikijs/langs/mdx`);de=c(de);let L=require(`@shikijs/langs/yaml`);L=c(L);let fe=require(`@shikijs/langs/rust`);fe=c(fe);let pe=require(`@shikijs/langs/toml`);pe=c(pe);const me=/^[a-zA-Z0-9\-_\/\.\(\)]+$/,he=g.z.object({title:g.z.string().max(200).optional(),description:g.z.string().max(500).optional(),sidebarPosition:g.z.number().optional(),sidebarLabel:g.z.string().max(100).optional(),category:g.z.string().max(50).optional(),order:g.z.number().optional(),badge:g.z.string().max(50).optional(),icon:g.z.string().max(50).optional()});var ge=class e extends Error{constructor(t){super(t),this.name=`SecurityViolationError`,Object.setPrototypeOf(this,e.prototype)}},_e=class e extends ge{constructor(t){super(t),this.name=`PathTraversalError`,Object.setPrototypeOf(this,e.prototype)}},ve=class e extends ge{constructor(t){super(t),this.name=`EncodingSecurityError`,Object.setPrototypeOf(this,e.prototype)}},R=class e extends ge{constructor(t){super(t),this.name=`ValidationError`,Object.setPrototypeOf(this,e.prototype)}};function z(e){return e.replace(/\\/g,`/`)}function B(e){return e.replace(/^\d+\./,``)}function ye(e){let t=e.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function be(e){return/\.mdx?$/.test(e)}function xe(e){try{return p.default.statSync(e).mtimeMs}catch{return 0}}function Se(e){let t=p.default.readFileSync(e,`utf-8`);try{let{data:n,content:r,matter:i}=(0,m.default)(t);if(i&&i.length>10240)throw W(`FRONTMATTER_TOO_LARGE`,`Frontmatter block exceeds size limit`,{size:i.length,file:e}),new R(`Security breach: Frontmatter size exceeds limit of 10240 bytes`);let a=he.safeParse(n);a.success||console.warn(`[VALIDATION][${e}] Invalid frontmatter fields detected.`);let o={...a.success?a.data:{}};return o.title&&=H(o.title).trim(),o.description&&=H(o.description).trim(),{data:o,content:r}}catch(e){if(e instanceof R)throw e;return{data:{},content:t}}}function Ce(e){return e.replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function we(e){return Ce(e)}function Te(e){let t=e.split(`/`).map(e=>B(Ee(e))).join(`/`).replace(/\/$/,``);return t=t.replace(/\.mdx?$/,``),(t===`index`||t.endsWith(`/index`))&&(t=t.replace(/index$/,``)),t.startsWith(`/`)||(t=`/`+t),t.length>1&&t.endsWith(`/`)&&(t=t.slice(0,-1)),t}function V(e){return h.default.sanitize(e,{ALLOWED_TAGS:`b.i.em.strong.a.p.br.code.pre.span.div.h1.h2.h3.h4.h5.h6.ul.ol.li.table.thead.tbody.tr.th.td.blockquote.hr`.split(`.`),ALLOWED_ATTR:[`href`,`title`,`target`,`class`,`id`,`src`,`alt`,`width`,`height`],FORCE_BODY:!0})}h.default.addHook(`afterSanitizeAttributes`,e=>{if(e.hasAttribute(`href`)){let t=e.getAttribute(`href`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`href`)}if(e.hasAttribute(`src`)){let t=e.getAttribute(`src`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`src`)}});function H(e){return h.default.sanitize(e,{ALLOWED_TAGS:[],KEEP_CONTENT:!0})}function U(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ee(e){return e.replace(/[^a-zA-Z0-9\-_\/\.]/g,``).split(`/`).filter(e=>e!==`..`&&e!==`.`).map(e=>e.replace(/\.\.+/g,`.`)).join(`/`)}function W(e,t,n={}){let r=new Date().toISOString(),i={...n};for(let e in i)typeof i[e]==`string`&&i[e].includes(`:`)&&(i[e]=i[e].split(/[\\/]/).pop()||i[e]);console.error(`[SECURITY][${r}] TYPE: ${e} | MESSAGE: ${t} | DETAILS: ${JSON.stringify(i)}`)}const De=(0,b.promisify)(p.default.writeFile),Oe=(0,b.promisify)(p.default.readFile),ke=(0,b.promisify)(p.default.mkdir),Ae=(0,b.promisify)(p.default.rename),je=process.env.BOLTDOCS_CACHE_DIR||`.boltdocs`,Me=parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||`2000`,10),Ne=process.env.BOLTDOCS_CACHE_COMPRESS!==`0`;var Pe=class{cache=new Map;constructor(e){this.limit=e}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.limit){let e=this.cache.keys().next().value;e!==void 0&&this.cache.delete(e)}this.cache.set(e,t)}get size(){return this.cache.size}clear(){this.cache.clear()}};const G=new class{queue=Promise.resolve();pendingCount=0;add(e){this.pendingCount++,this.queue=this.queue.then(e).finally(()=>{this.pendingCount--})}async flush(){await this.queue}get pending(){return this.pendingCount}};var Fe=class{entries=new Map;cachePath=null;compress;constructor(e={}){if(this.compress=e.compress===void 0?Ne:e.compress,e.name){let t=e.root||process.cwd(),n=this.compress?`json.gz`:`json`;this.cachePath=_.default.resolve(t,je,`${e.name}.${n}`)}}load(){if(process.env.BOLTDOCS_NO_CACHE!==`1`&&!(!this.cachePath||!p.default.existsSync(this.cachePath)))try{let e=p.default.readFileSync(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=y.default.gunzipSync(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE===`1`||!this.cachePath)return;let e=Object.fromEntries(this.entries),t=JSON.stringify(e),n=this.cachePath,r=this.compress;G.add(async()=>{try{await ke(_.default.dirname(n),{recursive:!0});let e=Buffer.from(t);r&&(e=y.default.gzipSync(e));let i=`${n}.${v.default.randomBytes(4).toString(`hex`)}.tmp`;await De(i,e),await Ae(i,n)}catch{}})}get(e){let t=this.entries.get(e);return!t||xe(e)!==t.mtime?null:t.data}set(e,t){this.entries.set(e,{data:t,mtime:xe(e)})}isValid(e){let t=this.entries.get(e);return t?xe(e)===t.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 G.flush()}},Ie=class{index=new Map;memoryCache=new Pe(Me);baseDir;shardsDir;indexPath;constructor(e,t=process.cwd()){this.baseDir=_.default.resolve(t,je,`transform-${e}`),this.shardsDir=_.default.resolve(this.baseDir,`shards`),this.indexPath=_.default.resolve(this.baseDir,`index.json`)}load(){if(process.env.BOLTDOCS_NO_CACHE!==`1`&&p.default.existsSync(this.indexPath))try{let e=p.default.readFileSync(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE===`1`)return;let e=JSON.stringify(Object.fromEntries(this.index)),t=this.indexPath;G.add(async()=>{await ke(_.default.dirname(t),{recursive:!0}),await De(t,e)})}async getMany(e){let t=new Map,n=[];for(let r of e){let e=this.memoryCache.get(r);e?t.set(r,e):this.index.has(r)&&n.push(r)}if(n.length>0){let e=await Promise.all(n.map(async e=>{let t=this.index.get(e),n=_.default.resolve(this.shardsDir,`${t}.gz`);try{let t=await Oe(n),r=y.default.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,r),{key:e,val:r}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}get(e){let t=this.memoryCache.get(e);if(t)return t;let n=this.index.get(e);if(!n)return null;let r=_.default.resolve(this.shardsDir,`${n}.gz`);if(!p.default.existsSync(r))return null;try{let t=p.default.readFileSync(r),n=y.default.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,n),n}catch{return null}}set(e,t){let n=v.default.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,n),this.memoryCache.set(e,t);let r=_.default.resolve(this.shardsDir,`${n}.gz`);G.add(async()=>{if(p.default.existsSync(r))return;await ke(this.shardsDir,{recursive:!0});let e=y.default.gzipSync(Buffer.from(t)),n=`${r}.${v.default.randomBytes(4).toString(`hex`)}.tmp`;await De(n,e),await Ae(n,r)})}get size(){return this.index.size}async flush(){await G.flush()}};const K=new Fe({name:`routes`});function Le(){K.invalidateAll()}function Re(e){K.invalidate(e)}function ze(e,t,n,r){let i;try{i=decodeURIComponent(e)}catch{let t=_.default.basename(e);throw W(`ENCODING_ERROR`,`Invalid character encoding`,{file:t}),new ve(`Security breach: Invalid characters or encoding in path: ${t}`)}if(i.length>260){let e=_.default.basename(i);throw W(`PATH_TOO_LONG`,`Path length exceeds limit`,{length:i.length,file:e}),new _e(`Security breach: Path length exceeds limit of 260 characters: ${e}`)}let a=_.default.resolve(i),o=_.default.resolve(t),s=z(_.default.relative(o,a));if(s.startsWith(`../`)||s===`..`||a.includes(`\0`)||!me.test(s)){let t=_.default.basename(e);throw W(`PATH_TRAVERSAL_ATTEMPT`,`Path traversal or invalid characters detected`,{path:s}),new _e(`Security breach: File is outside of docs directory, contains null bytes, or invalid characters: ${t}`)}let{data:c,content:l}=Se(e),u=s.split(`/`),d,f;if(r?.versions&&u.length>0){let e=u[0],t=r.versions.prefix||``,n=r.versions.versions.find(n=>e===t+n.path||e===n.path);n&&(f=n.path,u=u.slice(1))}if(r?.i18n&&u.length>0){let e=u[0];(Array.isArray(r.i18n.locales)?r.i18n.locales.includes(e):r.i18n.locales[e])&&(d=e,u=u.slice(1))}let p;if(u.length>0){let e=u[0].match(/^\((.+)\)$/);e&&(p=e[1].toLowerCase(),u=u.slice(1))}let m;u=u.map(e=>{let t=B(e);return t.startsWith(`_`)&&t!==`_`?(m=t.substring(1),e.substring(0,e.length-t.length)+t.substring(1)):e});let h=u.join(`/`),g;g=c.permalink?c.permalink.startsWith(`/`)?c.permalink:`/${c.permalink}`:Te(h||`index.md`);let v=n;f&&(v+=`/`+f),d&&(v+=`/`+d),p&&(v+=`/`+p),v+=g===`/`?``:g,(!v||v===``)&&(v=`/`);let y=u[u.length-1],b=B(y),ee=B(_.default.basename(e,_.default.extname(e))),S=c.sidebarPosition??ye(y),C=u.length>=2?u[0]:void 0,w=C?B(C):void 0,T=u.length===2&&/^index\.mdx?$/.test(b),E=new x.default,D=[];for(let e of l.matchAll(/^(#{2,4})\s+(.+)$/gm)){let t=e[1].length,n=V(e[2].replace(/\[([^\]]+)\]\([^\)]+\)/g,`$1`).replace(/[_*`]/g,``).trim()).trim(),r=E.slug(n);D.push({level:t,text:n,id:r})}let O=c.title?V(String(c.title)):ee,k=c.description?V(String(c.description)):``;!k&&l&&(k=H(l.replace(/^#+.*$/gm,``).replace(/\[([^\]]+)\]\([^\)]+\)/g,`$1`).replace(/[_*`]/g,``).replace(/\s+/g,` `)).trim().slice(0,160));let te=c.badge?V(String(c.badge)):void 0,ne=c.icon?String(c.icon):void 0,A=Be(l),j={},M=[`og:`,`twitter:`,`article:`,`music:`,`video:`,`profile:`,`book:`],N=[`noindex`,`robots`,`canonical`,`keywords`,`author`];c.seo&&typeof c.seo==`object`&&Object.assign(j,c.seo);for(let e of Object.keys(c))(N.includes(e)||M.some(t=>e.startsWith(t)))&&(j[e]=c[e]);return c.hidden===!0&&j.noindex===void 0&&(j.noindex=!0),{route:{path:v,componentPath:e,filePath:s,title:O,description:k,sidebarPosition:S,headings:D,locale:d,version:f,badge:te,icon:ne,tab:p,subRouteGroup:m,_content:A,_rawContent:l,seo:Object.keys(j).length>0?j:void 0},relativeDir:w,isGroupIndex:T,inferredTab:p,groupMeta:T?{title:c.groupTitle||c.title||(w?U(w):``),position:c.groupPosition??c.sidebarPosition??(C?ye(C):void 0),icon:ne}:void 0,inferredGroupPosition:C?ye(C):void 0}}function Be(e){return H(e.replace(/^#+.*$/gm,``).replace(/\[([^\]]+)\]\([^\)]+\)/g,`$1`).replace(/\{[^\}]+\}/g,``).replace(/[_*`]/g,``).replace(/\s+/g,` `)).trim()}function Ve(e){return e.sort((e,t)=>!e.group&&!t.group?He(e,t):e.group?t.group?e.group===t.group?He(e,t):Ue(e,t):1:-1)}function He(e,t){return e.sidebarPosition!==void 0&&t.sidebarPosition!==void 0?e.sidebarPosition-t.sidebarPosition:e.sidebarPosition===void 0?t.sidebarPosition===void 0?e.title.localeCompare(t.title):1:-1}function Ue(e,t){return e.groupPosition!==void 0&&t.groupPosition!==void 0?e.groupPosition-t.groupPosition:e.groupPosition===void 0?t.groupPosition===void 0?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):1:-1}let We=null;const q=new Map;async function Ge(e,t,n=`/docs`,r=!0){K.load(),q.clear(),(process.env.BOLTDOCS_FORCE_REPARSE===`true`||t?.i18n)&&K.invalidateAll();let i;!r&&We?i=We:(i=await(0,f.default)([`**/*.md`,`**/*.mdx`],{cwd:e,absolute:!0,suppressErrors:!0,followSymbolicLinks:!1}),We=i),K.pruneStale(new Set(i));let a=[],o=0;for(let r=0;r<i.length;r+=50){let s=i.slice(r,r+50),c=await Promise.all(s.map(async r=>{let i=K.get(r);if(i)return o++,i;let a=ze(r,e,n,t);return K.set(r,a),a}));a.push(...c),r+50<i.length&&await new Promise(e=>setImmediate(e))}K.save();let s=new Map,c=[],l=t?.i18n?.defaultLocale||``;for(let e of a)if(e.isGroupIndex&&e.relativeDir&&c.push(e),e.relativeDir){let t=`${e.route.locale||l}:${e.relativeDir}`,n=s.get(t);n?n.position===void 0&&e.inferredGroupPosition!==void 0&&(n.position=e.inferredGroupPosition):(n={title:U(e.relativeDir),position:e.inferredGroupPosition},s.set(t,n))}for(let e of c){let t=`${e.route.locale||l}:${e.relativeDir}`,n=s.get(t);e.groupMeta&&(n.title=e.groupMeta.title,e.groupMeta.position!==void 0&&(n.position=e.groupMeta.position),e.groupMeta.icon&&(n.icon=e.groupMeta.icon))}if(t?.theme?.sidebarGroups){let e=t.i18n?Object.keys(t.i18n.locales):[l];for(let[n,r]of Object.entries(t.theme.sidebarGroups))for(let t of e){let e=`${t}:${n}`,i=s.get(e),a;typeof r.title==`string`?a=r.title:r.title&&(a=r.title[t]||r.title[l]),i?(a&&(i.title=a),r.icon&&(i.icon=r.icon)):s.set(e,{title:a||U(n),icon:r.icon})}}let u=Array(a.length);for(let e=0;e<a.length;e++){let t=a[e],n=t.relativeDir,r=t.route.locale||l,i=n?`${r}:${n}`:void 0,o=i?s.get(i):void 0,c;o&&(c=typeof o.title==`string`?o.title:o.title[r]||o.title[l]),u[e]={...t.route,group:n,groupTitle:c||(n?U(n):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let d=u;if(t?.i18n){let e=Ke(u,t,n);d=[...u,...e]}return Ve(d)}function Ke(e,t,n){let r=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),a=[],o=new Map,s=[];for(let t of e){let e=t.locale||r;o.has(e)||o.set(e,new Set),o.get(e).add(t.path),e===r&&s.push(t)}for(let e of i){let i=o.get(e)||new Set;for(let o of s){let s=qe(o.path,r,e,n,t);s!==o.path&&(i.has(s)||a.push({...o,path:s,locale:e}))}}return a}function qe(e,t,n,r,i){let a=`${e}:${n}`,o=q.get(a);if(o)return o;let s=r.startsWith(`/`)?r:`/`+r,c=s;if(i?.versions){let t=i.versions.prefix||``;for(let n of i.versions.versions){let r=`${s}/${t+n.path}`;if(e.startsWith(r)){c=r;break}let i=`${s}/${n.path}`;if(e.startsWith(i)){c=i;break}}}let l=e.substring(c.length),u=`/${t}`;if(l.startsWith(u+`/`))l=`/`+n+`/`+l.substring(u.length+1);else if(l===u)l=`/`+n;else if(l===`/`||l===``)l=`/`+n;else{let e=l.startsWith(`/`)?``:`/`;l=`/`+n+e+l}let d=c+l;return q.size>2e3&&q.clear(),q.set(a,d),d}function Je(e){return e.map(e=>({path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],_content:e._content||``,locale:e.locale,version:e.version,tab:e.tab,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo}))}const Ye=g.z.object({icon:g.z.string().max(50),link:g.z.string().url()}),Xe=g.z.object({text:g.z.string().max(2e3).optional()}),Ze=g.z.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),Qe=g.z.object({name:g.z.string(),enforce:g.z.enum([`pre`,`post`]).optional(),version:g.z.string().optional(),boltdocsVersion:g.z.string().optional(),permissions:g.z.array(Ze).optional(),remarkPlugins:g.z.array(g.z.any()).optional(),rehypePlugins:g.z.array(g.z.any()).optional(),vitePlugins:g.z.array(g.z.any()).optional(),components:g.z.record(g.z.string(),g.z.string()).optional(),hooks:g.z.record(g.z.string(),g.z.any()).optional()}),$e=g.z.object({title:g.z.union([g.z.string(),g.z.record(g.z.string(),g.z.string())]).optional(),description:g.z.union([g.z.string(),g.z.record(g.z.string(),g.z.string())]).optional(),logo:g.z.union([g.z.string(),g.z.object({dark:g.z.string(),light:g.z.string(),alt:g.z.string().optional(),width:g.z.number().optional(),height:g.z.number().optional()})]).optional(),navbar:g.z.array(g.z.object({label:g.z.union([g.z.string(),g.z.record(g.z.string(),g.z.string())]),href:g.z.string()})).optional(),sidebar:g.z.record(g.z.string(),g.z.array(g.z.object({text:g.z.string(),link:g.z.string()}))).optional(),sidebarGroups:g.z.record(g.z.string(),g.z.object({title:g.z.union([g.z.string(),g.z.record(g.z.string(),g.z.string())]).optional(),icon:g.z.string().optional()})).optional(),socialLinks:g.z.array(Ye).optional(),footer:Xe.optional(),breadcrumbs:g.z.boolean().optional(),editLink:g.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:g.z.string().url().optional(),version:g.z.string().max(50).optional(),githubRepo:g.z.string().max(100).optional(),favicon:g.z.string().optional(),poweredBy:g.z.boolean().optional(),tabs:g.z.array(g.z.object({id:g.z.string(),text:g.z.union([g.z.string(),g.z.record(g.z.string(),g.z.string())]),icon:g.z.string().optional()})).optional(),codeTheme:g.z.union([g.z.string(),g.z.object({light:g.z.string(),dark:g.z.string()})]).optional(),copyMarkdown:g.z.union([g.z.boolean(),g.z.object({text:g.z.string().optional(),icon:g.z.string().optional()})]).optional()}),et=g.z.union([g.z.string(),g.z.object({rules:g.z.array(g.z.object({userAgent:g.z.string(),allow:g.z.union([g.z.string(),g.z.array(g.z.string())]).optional(),disallow:g.z.union([g.z.string(),g.z.array(g.z.string())]).optional()})).optional(),sitemaps:g.z.array(g.z.string().url()).optional()})]),tt=g.z.object({defaultLocale:g.z.string(),locales:g.z.union([g.z.record(g.z.string(),g.z.string()),g.z.array(g.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:g.z.record(g.z.string(),g.z.object({label:g.z.string().optional(),direction:g.z.enum([`ltr`,`rtl`]).optional(),htmlLang:g.z.string().optional(),calendar:g.z.string().optional()})).optional()}),nt=g.z.object({defaultVersion:g.z.string(),prefix:g.z.string().optional(),versions:g.z.array(g.z.object({label:g.z.string(),path:g.z.string()}))}),rt=g.z.object({headers:g.z.record(g.z.string(),g.z.string()).optional(),enableCSP:g.z.boolean().optional(),customHeaders:g.z.record(g.z.string(),g.z.string()).optional()}),it=g.z.object({metatags:g.z.record(g.z.string(),g.z.string()).optional(),indexing:g.z.enum([`all`,`public`]).optional(),thumbnails:g.z.object({background:g.z.string().optional()}).optional()}),at=g.z.object({siteUrl:g.z.string().url().optional(),docsDir:g.z.string().optional(),homePage:g.z.string().optional(),theme:$e.optional(),i18n:tt.optional(),versions:nt.optional(),plugins:g.z.array(Qe).optional(),robots:et.optional(),security:rt.optional(),seo:it.optional(),vite:g.z.record(g.z.string(),g.z.unknown()).optional()});function ot(e,t=process.cwd()){let n=S.default.resolve(t,`.boltdocs`);C.default.existsSync(n)||C.default.mkdirSync(n,{recursive:!0});let r=e.i18n?Object.keys(e.i18n.locales):[],i=e.versions?e.versions.versions.map(e=>e.path):[],a=`// This file is automatically generated by Boltdocs.
7
+ // Do not edit this file manually.
8
+
9
+ declare global {
10
+ namespace Boltdocs {
11
+ interface Types {
12
+ Locale: ${r.length>0?r.map(e=>`'${e}'`).join(` | `):`string`}
13
+ Version: ${i.length>0?i.map(e=>`'${e}'`).join(` | `):`string`}
14
+ }
15
+ }
16
+ }
17
+
18
+ export {}
19
+ `;C.default.writeFileSync(S.default.resolve(n,`types.d.ts`),a)}function st(e){return e}const ct=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function lt(e,t=process.cwd()){let n=t,r={docsDir:S.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`},poweredBy:!0,breadcrumbs:!0}},i={};for(let e of ct){let t=S.default.resolve(n,e);if(C.default.existsSync(t))try{let e=await(0,d.loadConfigFromFile)({command:`serve`,mode:`development`},t,n);if(e){i=e.config;break}}catch(t){console.warn(`[boltdocs] Failed to load config from ${e}:`,t)}}let a={title:i.title,description:i.description,logo:i.logo,favicon:i.favicon,navbar:i.navbar,sidebar:i.sidebar,sidebarGroups:i.theme?.sidebarGroups,socialLinks:i.socialLinks,footer:i.footer,githubRepo:i.githubRepo,tabs:i.tabs,codeTheme:i.codeTheme,copyMarkdown:i.copyMarkdown,breadcrumbs:i.breadcrumbs,poweredBy:i.poweredBy,communityHelp:i.communityHelp,version:i.version,editLink:i.editLink,...i.theme||{}},o=Object.fromEntries(Object.entries(a).filter(([e,t])=>t!==void 0));o.navbar&&=o.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``}));let s={docsDir:S.default.resolve(e),homePage:i.homePage,theme:{...r.theme,...o},i18n:i.i18n?{...i.i18n,locales:Array.isArray(i.i18n.locales)?Object.fromEntries(i.i18n.locales.map(e=>[e,e])):i.i18n.locales}:void 0,versions:i.versions,siteUrl:i.siteUrl,plugins:i.plugins||[],robots:i.robots,security:i.security,vite:i.vite},c=at.safeParse(s);if(!c.success)throw new R(`Invalid Boltdocs configuration:\n${c.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
20
+ `)}`);return c.data}async function J(e,t=process.cwd()){let n=await lt(e,t);return ot(n,t),n}function ut(e,t){let n=(t.siteUrl||``).replace(/\/$/,``);if(!n)return``;let r=t.seo?.indexing!==`all`&&t.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
21
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
22
+ ${e.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(r&&e.seo?.index,!0)).map(e=>` <url>
23
+ <loc>${we(`${n}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`)}</loc>
24
+ <changefreq>weekly</changefreq>
25
+ <priority>0.7</priority>
26
+ </url>`).join(`
27
+ `)}
28
+ </urlset>`}function dt(e){let t=e.siteUrl||``,n=t?`${t.replace(/\/$/,``)}/sitemap.xml`:``;if(e.seo?.indexing!==`all`&&e.seo?.indexing!==`public`&&e.seo?.indexing)return[`User-agent: *`,`Disallow: /`].filter(Boolean).join(`
29
+ `);if(typeof e.robots==`string`)return e.robots;if(e.robots&&typeof e.robots==`object`){let t=e.robots.rules||[],r=e.robots.sitemaps||[],i=t.map(e=>{let t=`User-agent: ${e.userAgent}\n`;return e.allow&&(Array.isArray(e.allow)?t+=e.allow.map(e=>`Allow: ${e}`).join(`
30
+ `)+`
31
+ `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
32
+ `)+`
33
+ `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
34
+
35
+ `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
36
+ `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
37
+ `)}function ft(e,t){let n=e.homePage?`import HomePage from '${z(e.homePage)}';`:``,r=_.default.resolve(process.cwd(),`index.css`),i=p.default.existsSync(r)?`import './index.css';`:``,a=e.homePage?`homePage: HomePage,`:``,o=t?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],s=o.map(([e,t])=>`import * as _comp_${e} from '${z(t)}';
38
+ const ${e} = _comp_${e}.default || _comp_${e}['${e}'] || _comp_${e};`).join(`
39
+ `),c=o.map(([e])=>e).join(`, `),l=_.default.basename(e.docsDir||`docs`),u=_.default.resolve(process.cwd(),e.docsDir||`docs`),d=[`tsx`,`ts`,`jsx`,`js`].map(e=>_.default.resolve(u,`pages-external/index.${e}`)).find(e=>p.default.existsSync(e)),f=d?`import * as _external_module from '${z(d)}';`:``;return a=d?`homePage: _external_module.homePage || HomePage,`:e.homePage?`homePage: HomePage,`:``,`
40
+ import { ViteReactSSG } from '@bdocs/ssg';
41
+ import { createRoutes } from 'boltdocs/client';
42
+ import _routes from 'virtual:boltdocs-routes.ts';
43
+ import _config from 'virtual:boltdocs-config.ts';
44
+ import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx';
45
+ import _Layout from 'virtual:boltdocs-layout.tsx';
46
+ ${i}
47
+ ${n}
48
+ ${s}
49
+ ${f}
50
+
51
+ const mdxModules = import.meta.glob('/${l}/**/*.{md,mdx}', { eager: true });
52
+
53
+ export const createRoot = ViteReactSSG(
54
+ {
55
+ routes: createRoutes({
56
+ routesData: _routes,
57
+ config: _config,
58
+ mdxModules,
59
+ Layout: _Layout,
60
+ ${a}
61
+ ${d?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``}
62
+ components: { ${c}${c?`, `:``} ...(_user_mdx_components || {}) },
63
+ }),
64
+ },
65
+ ({ isClient }) => {
66
+ // Boltdocs initialization hook
67
+ if (isClient) {
68
+ // Client-side initialization
69
+ }
70
+ },
71
+ );
72
+ `}function pt(e){return`<!doctype html>
73
+ <html lang="en">
74
+ <head>
75
+ <meta charset="UTF-8" />
76
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
77
+ <title>${e.theme?.title||`Boltdocs`}</title>
78
+ </head>
79
+ <body>
80
+ <div id="root"></div>
81
+ </body>
82
+ </html>`}function mt(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=pt(t));let n=t.theme,r=n?.title||`Boltdocs`,i=n?.description||``,a=n?.favicon;!a&&n?.logo&&(a=typeof n.logo==`string`?n.logo:n.logo.light||n.logo.dark);let o=[a?`<link rel="icon" href="${a}">`:``,`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,`<meta property="og:type" content="website">`,`<meta name="twitter:card" content="summary_large_image">`,`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,`<meta name="generator" content="Boltdocs">`].filter(Boolean).join(`
83
+ `);return e=e.includes(`<title>`)?e.replace(/<title>.*?<\/title>/,`<title>${r}</title>`):e.replace(`</head>`,` <title>${r}</title>\n </head>`),e=e.replace(`</head>`,` ${o}\n
84
+ <script>
85
+ (function() {
86
+ try {
87
+ var stored = localStorage.getItem("boltdocs-theme");
88
+ var isDark =
89
+ stored === "dark" ||
90
+ (stored !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
91
+ document.documentElement.classList.toggle("dark", isDark);
92
+ document.documentElement.dataset.theme = isDark ? "dark" : "light";
93
+ } catch (e) {}
94
+ })();
95
+ <\/script>
96
+ </head>`),!e.includes(`src/main`)&&!e.includes(`virtual:boltdocs-entry`)&&(e=e.replace(`</body>`,` <script type="module">import "virtual:boltdocs-entry";<\/script>
97
+ </body>`)),e}function ht(e){let t=[];for(let n of e)if(t.push({id:n.path,title:n.title,content:n._content||``,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings)for(let e of n.headings)t.push({id:`${n.path}#${e.id}`,title:e.text,content:`${e.text} in ${n.title}`,url:`${n.path}#${e.id}`,display:`${n.title} > ${e.text}`,locale:n.locale,version:n.version});return t}const gt={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function _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(`; `)}var Y=class e extends Error{pluginName;constructor(t,n){super(`[plugin:${t}] ${n}`),this.name=`PluginError`,this.pluginName=t,Object.setPrototypeOf(this,e.prototype)}},X=class e extends Y{constructor(t,n){super(t,`Validation failed: ${n}`),this.name=`PluginValidationError`,Object.setPrototypeOf(this,e.prototype)}},vt=class e extends Y{constructor(t,n){super(t,`Compatibility error: ${n}`),this.name=`PluginCompatibilityError`,Object.setPrototypeOf(this,e.prototype)}},yt=class e extends Y{constructor(t,n){super(t,`Missing required permission: '${n}'`),this.name=`PluginPermissionError`,Object.setPrototypeOf(this,e.prototype)}},bt=class e extends Y{hookName;constructor(t,n,r){super(t,`Error in hook '${n}': ${r.message}`),this.name=`PluginHookError`,this.hookName=n,this.stack=r.stack,Object.setPrototypeOf(this,e.prototype)}},xt=class{data=new Map;getNamespaceKey(e,t){return`${e}:${t}`}get(e,t){let n=this.getNamespaceKey(e,t),r=this.data.get(n);if(r!==void 0)return typeof r==`object`&&r?JSON.parse(JSON.stringify(r)):r}set(e,t,n){let r=this.getNamespaceKey(e,t),i=typeof n==`object`&&n?JSON.parse(JSON.stringify(n)):n;this.data.set(r,i)}has(e,t){let n=this.getNamespaceKey(e,t);return this.data.has(n)}};const St=Qe.extend({version:g.z.string().optional(),boltdocsVersion:g.z.string().optional(),permissions:g.z.array(g.z.string()).optional(),hooks:g.z.object({beforeBuild:g.z.function().optional(),afterBuild:g.z.function().optional(),beforeDev:g.z.function().optional(),afterDev:g.z.function().optional(),configResolved:g.z.function().optional(),buildEnd:g.z.function().optional()}).optional()});function Ct(e,t){let n=[],r=new Set;for(let i of e){let e=St.safeParse(i);if(!e.success)throw new X(i.name||`unknown`,e.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `));let a=e.data;if(r.has(a.name))throw new X(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!w.default.satisfies(t,a.boltdocsVersion))throw new vt(a.name,`Plugin expects Boltdocs version ${a.boltdocsVersion}, but current is ${t}`);if(a.components){for(let[e,t]of Object.entries(a.components))if((t.includes(`..`)||_.default.isAbsolute(t))&&t.includes(`..`))throw new X(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function Z(e,t){return e.permissions?e.permissions.includes(t):!1}var Q=class{static checkPermission(e,t){if(!Z(e,t))throw new yt(e.name,t)}static getSanitizedCapabilities(e){return{remarkPlugins:Z(e,`mdx:remark`)?e.remarkPlugins:[],rehypePlugins:Z(e,`mdx:rehype`)?e.rehypePlugins:[],vitePlugins:Z(e,`vite:config`)?e.vitePlugins:[],components:Z(e,`components`)?e.components:{}}}static async executeWithIsolation(e,t,n,r){try{return this.checkPermission(e,t),await r()}catch(t){if(t instanceof yt){console.warn(`[boltdocs] Skipping hook '${n}' for plugin '${e.name}': ${t.message}`);return}throw t}}},wt=class{plugins;config;store;constructor(e,t){this.plugins=e,this.config=t,this.store=new xt}async runHook(e,...t){let n=this.getSortedPlugins();for(let r of n){if(!r.hooks?.[e])continue;let n=this.createContext(r),i=e.toLowerCase().includes(`build`),a=e.toLowerCase().includes(`dev`),o=i?`hooks:build`:a?`hooks:dev`:void 0;try{o?await Q.executeWithIsolation(r,o,e,()=>r.hooks[e](n,...t)):await r.hooks[e](n,...t)}catch(t){let i=new bt(r.name,e,t instanceof Error?t:Error(String(t)));n.logger.error(i)}}}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createContext(e){return{config:Object.freeze({...this.config}),meta:{name:e.name,version:e.version,boltdocsVersion:e.boltdocsVersion},store:{get:(e,t)=>this.store.get(e,t),set:(e,t,n)=>this.store.set(e,t,n),has:(e,t)=>this.store.has(e,t)},logger:this.createLogger(e.name)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>console.log(`${t} INFO: ${e}`),warn:e=>console.warn(`${t} WARN: ${e}`),error:e=>{let n=e instanceof Error?e.message:e;console.error(`${t} ERROR: ${n}`)},debug:e=>console.debug(`${t} DEBUG: ${e}`)}}};function Tt(e){return e}function Et(e={},t){let n=S.default.resolve(process.cwd(),e.docsDir||`docs`),r=z(n),i=t,a,o=!1,s,c=[];return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){o=t.command===`build`;let r=e.envDir||process.cwd(),a=(0,d.loadEnv)(t.mode,r,``);Object.assign(process.env,a),i||=await J(n);let l=(await Promise.resolve().then(()=>require(`./package-CFP44vfn.cjs`))).version,u=Ct(i.plugins||[],l);return i.plugins=u,s=new wt(u,i),c=u.flatMap(e=>Q.getSanitizedCapabilities(e).vitePlugins||[]),o&&await s.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`nested`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=ut(Je(await Ge(n,i)),i);t&&C.default.writeFileSync(S.default.join(e,`sitemap.xml`),t);let r=dt(i);C.default.writeFileSync(S.default.join(e,`robots.txt`),r)}},build:{ssrManifest:o},async config(){let e=__dirname;for(;e!==S.default.parse(e).root&&!C.default.existsSync(S.default.join(e,`package.json`));)e=S.default.dirname(e);if(C.default.existsSync(S.default.join(e,`package.json`))&&JSON.parse(C.default.readFileSync(S.default.join(e,`package.json`),`utf-8`)).name!==`boltdocs`){let t=S.default.dirname(e);for(;t!==S.default.parse(t).root;){if(C.default.existsSync(S.default.join(t,`package.json`))&&JSON.parse(C.default.readFileSync(S.default.join(t,`package.json`),`utf-8`)).name===`boltdocs`){e=t;break}t=S.default.dirname(t)}}return{optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{dedupe:[`react`,`react-dom`]}}}}},configResolved(e){a=e,s?.runHook(`configResolved`,i)},async configureServer(e){await s?.runHook(`beforeDev`),e.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(gt).forEach(([e,n])=>{t.setHeader(e,n)}),i.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,_t(i)),n()}),e.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),e.middlewares.use(async(t,n,r)=>{let a=t.url?.split(`?`)[0]||`/`,o=t.headers.accept||``,s=a===`/`||a.startsWith(`/docs`)||i.i18n&&Object.keys(i.i18n.locales).some(e=>a.startsWith(`/${e}/docs`)||a===`/${e}`)||!0,c=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(a);if(o.includes(`text/html`)&&!c&&s){let r=pt(i);r=mt(r,i),r=await e.transformIndexHtml(t.url||`/`,r),n.statusCode=200,n.setHeader(`Content-Type`,`text/html`),n.end(r);return}r()});let t=ct.map(e=>S.default.resolve(process.cwd(),e)),a=[`tsx`,`jsx`].map(e=>S.default.resolve(n,`layout.${e}`)),o=[`tsx`,`ts`,`jsx`,`js`],c=o.map(e=>S.default.resolve(n,`mdx-components.${e}`)),l=o.map(e=>S.default.resolve(n,`pages-external/index.${e}`)),u=o.map(e=>S.default.resolve(n,`icons.${e}`));e.watcher.add([...t,...c,...a,...l,...u]);let d=async(t,a)=>{try{let s=z(t);if(ct.some(e=>s.endsWith(e))){e.restart();return}if(o.some(e=>s.endsWith(`mdx-components.${e}`))){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-mdx-components.tsx`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(o.some(e=>s.endsWith(`icons.${e}`))){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-icons.tsx`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(s.endsWith(`layout.tsx`)||s.endsWith(`layout.jsx`)){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-layout.tsx`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(s.includes(`/pages-external/`)||s.includes(`\\pages-external\\`)){let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-entry`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`full-reload`});return}if(!s.startsWith(r)||!be(s))return;if(a===`add`||a===`unlink`){Le(),i=await J(n);let t=e.moduleGraph.getModuleById(`\0virtual:boltdocs-config.ts`);t&&e.moduleGraph.invalidateModule(t),e.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:i?.theme,i18n:i?.i18n,versions:i?.versions,siteUrl:i?.siteUrl}})}else Re(t);let c=e.moduleGraph.getModuleById(`\0virtual:boltdocs-routes.ts`);c&&e.moduleGraph.invalidateModule(c);let l=e.moduleGraph.getModuleById(`\0virtual:boltdocs-config.ts`);l&&e.moduleGraph.invalidateModule(l),e.ws.send({type:`full-reload`})}catch(e){console.error(`[boltdocs] HMR error during ${a} event:`,e)}};e.watcher.on(`add`,e=>d(e,`add`)),e.watcher.on(`unlink`,e=>d(e,`unlink`)),e.watcher.on(`change`,e=>d(e,`change`)),await s?.runHook(`afterDev`)},resolveId(e){let t=a?.root||process.cwd();return e.includes(`boltdocs-entry.mjs`)||e===`virtual:boltdocs-entry`||e===`boltdocs-entry`||e===`\0virtual:boltdocs-entry`?z(S.default.resolve(t,`boltdocs-entry.mjs`)):e.includes(`boltdocs-client.mjs`)||e===`virtual:boltdocs-client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.ts`?z(S.default.resolve(t,`boltdocs-client.mjs`)):e.startsWith(`virtual:boltdocs-`)?`\0`+e:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(t){if(t.includes(`boltdocs-entry.mjs`)||t===`\0virtual:boltdocs-entry`)return ft(e,i);if(t.includes(`boltdocs-client.mjs`)||t===`\0virtual:boltdocs-client.ts`||t===`virtual:boltdocs-client`){let e=__dirname,t=e;for(;e!==S.default.parse(e).root;){if(C.default.existsSync(S.default.join(e,`package.json`))&&JSON.parse(C.default.readFileSync(S.default.join(e,`package.json`),`utf-8`)).name===`boltdocs`){t=e;break}e=S.default.dirname(e)}let n=S.default.join(t,`src/client/index.ts`),r=S.default.join(t,`dist/client/index.js`);return`export * from '${z(C.default.existsSync(n)?n:r)}';`}if(!t.startsWith(`\0virtual:boltdocs-`))return;let r=t.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(r===`routes`){let e=Je(await Ge(n,i));return`export default ${JSON.stringify(e,null,2)};`}if(r===`config`){let e={theme:i?.theme,i18n:i?.i18n,versions:i?.versions,siteUrl:i?.siteUrl,plugins:i?.plugins?.map(e=>({name:e.name}))};return`export default ${JSON.stringify(e,null,2)};`}if(r===`entry`)return ft(e,i);if(r===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],t=null;for(let r of e){let e=S.default.resolve(n,`mdx-components.${r}`);if(C.default.existsSync(e)){t=e;break}}if(t){let e=z(t);return`import * as components from '${e}';
98
+ const mdxComponents = components.default || components;
99
+ export default mdxComponents;
100
+ export * from '${e}';`}return`export default {};`}if(r===`layout`){let e=[`tsx`,`jsx`],t=null;for(let r of e){let e=S.default.resolve(n,`layout.${r}`);if(C.default.existsSync(e)){t=e;break}}if(t)return`import UserLayout from '${z(t)}';
101
+ export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(r===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let r of e){let e=S.default.resolve(n,`icons.${r}`);if(C.default.existsSync(e)){t=e;break}}return t?`import * as icons from '${z(t)}';\nexport default icons;`:`export default {};`}if(r===`search`){let e=ht(await Ge(n,i));return`export default ${JSON.stringify(e,null,2)};`}if(r===`client`){let e=__dirname,t=``;for(;e&&e!==S.default.parse(e).root;){let n=S.default.join(e,`src/client/index.ts`),r=S.default.join(e,`dist/client/index.mjs`),i=S.default.join(e,`client/index.ts`);if(C.default.existsSync(n)){t=z(n);break}if(C.default.existsSync(r)){t=z(r);break}if(C.default.existsSync(i)){t=z(i);break}e=S.default.dirname(e)}if(!t)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${__dirname}`);return`export * from '${t}';`}},transformIndexHtml:{order:`pre`,handler(e){return mt(e,i)}},async closeBundle(){!o||a?.build?.ssr||(await s?.runHook(`afterBuild`),await s?.runHook(`buildEnd`))}},(0,ee.ViteImageOptimizer)({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),{name:`vite-plugin-boltdocs-extra-plugins`,async configResolved(){}},...c]}const $=new Ie(`mdx`),Dt=[A.default.default||A.default,j.default.default||j.default,M.default.default||M.default,N.default.default||N.default,P.default.default||P.default,F.default.default||F.default,I.default.default||I.default],Ot=[re.default,ie.default,ae.default,oe.default,se.default,ce.default,le.default,ue.default,de.default,L.default,fe.default,pe.default];let kt=null,At=null;const jt=()=>(kt??=(0,te.createJavaScriptRegexEngine)(),kt),Mt=async e=>At||(At=(0,ne.createHighlighterCore)({themes:Dt,langs:Ot,engine:jt()}),At),Nt=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.__raw||``,r=/lineNumbers|showLineNumbers/.test(n);(t||r)&&this.addClassToHast(e,`shiki-line-numbers`)}}},Pt=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.__raw||``,r=/wordWrap|word-wrap/.test(n);(t||r)&&this.addClassToHast(e,`shiki-word-wrap`)}}},Ft=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.__raw;if(!t)return;let n=t.match(/title=(["'])(.*?)\1/)?.[2];e.properties[`data-title`]=n}}),It=()=>({name:`AddLanguageProperty`,pre(e){e.properties[`data-lang`]=this.options.lang||`plaintext`}});var Lt=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:`github-light`,dark:`github-dark`}}async getHighlighter(){return await Mt(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={lang:e,meta:{__raw:t},transformers:[Nt(),Pt(),Ft(),It()]};return typeof n==`object`?r.themes={light:n.light,dark:n.dark}:r.theme=n,r}async render(e,t,n){let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}};function Rt(e){let t=new Lt(e);return async e=>{let n=await t.getHighlighter();(0,k.visit)(e,[`mdxJsxFlowElement`,`mdxJsxTextElement`],e=>{if(e.name!==`ComponentPreview`)return;let r=e.attributes?.find(e=>e.name===`code`),i=``;if(r){if(typeof r.value==`string`)i=r.value;else if(r.value?.type===`mdxJsxAttributeValueExpression`){let e=r.value.value??``;i=e.match(/^[`'"]([\s\S]+)[`'"]$/)?.[1]??e}}if(!i)return;let a=e.attributes?.find(e=>e.name===`lineNumbers`||e.name===`showLineNumbers`),o=e.attributes?.find(e=>e.name===`wordWrap`||e.name===`word-wrap`),s=e.attributes?.find(e=>e.name===`title`),c=``;a&&(c+=` lineNumbers`),o&&(c+=` wordWrap`),s&&typeof s.value==`string`&&(c+=` title="${s.value}"`);let l=t.getOptions(`tsx`,c),u=n.codeToHtml(i,l);e.attributes=(e.attributes??[]).filter(e=>e.name!==`highlightedHtml`),e.attributes.push({type:`mdxJsxAttribute`,name:`highlightedHtml`,value:u})})}}function zt(e){let t=new Lt(e);return async e=>{let n=await t.getHighlighter();(0,k.visit)(e,`element`,e=>{if(e.tagName===`pre`&&e.children?.[0]?.tagName===`code`){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):`text`,o=r.children[0]?.value||``,s=r.properties?.metastring||r.data?.meta||``,c=t.getOptions(a,s),l=n.codeToHtml(o,c);e.properties[`data-highlighted`]=`true`,e.properties[`data-highlighted-html`]=l,e.properties[`data-lang`]=a,e.children=[]}})}}function Bt(){return e=>{(0,k.visit)(e,`code`,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let Vt=!1;function Ht(e,t=T.default){let n=e?.plugins?.flatMap(e=>Q.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>Q.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[E.default,D.default,Bt,[Rt,e],...n],rehypePlugins:[O.default,[zt,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){Vt||=($.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){if(!t.endsWith(`.md`)&&!t.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let r=`${t}:${v.default.createHash(`md5`).update(e).digest(`hex`)}:v2`,a=$.get(r);if(a)return{code:a,map:null};let o=await i.transform.call(this,e,t,n);return o&&typeof o==`object`&&o.code&&$.set(r,o.code),o},async buildEnd(){$.save(),await $.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}async function Ut(e){let t=await J(e?.docsDir||`docs`);return[...Et({...e,homePage:e?.homePage||t.homePage},t),Ht(t)]}async function Wt(e,t=`development`){let n=await J(`docs`,e),r=t===`production`,i=r?{...gt}:{};return n.security?.enableCSP&&(i[`Content-Security-Policy`]=_t(n)),{root:e,mode:t,oxc:{jsx:{development:!r,runtime:`automatic`,importSource:`react`}},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`use-sync-external-store/shim`],rolldownOptions:{}},build:{rolldownOptions:{}},plugins:[(0,l.default)(),(0,u.default)(),await Ut({...n,root:e})],resolve:{alias:[{find:`boltdocs/entry`,replacement:(0,d.normalizePath)(S.default.resolve(e,`boltdocs-entry.mjs`))},{find:`boltdocs/client`,replacement:(0,d.normalizePath)(S.default.resolve(e,`boltdocs-client.mjs`))},{find:`use-sync-external-store/shim/index.js`,replacement:`react`},{find:`use-sync-external-store/shim`,replacement:`react`},{find:`use-sync-external-store`,replacement:`react`}],dedupe:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]},ssr:{optimizeDeps:{include:[`react`,`react-dom`,`react/jsx-runtime`,`react/jsx-dev-runtime`,...n.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-helmet-async`,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`]},server:{headers:{...i,...n.vite?.server?.headers},...n.vite?.server},preview:{headers:{...i,...n.vite?.preview?.headers},...n.vite?.preview},...n.vite}}Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return st}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Ct}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return bt}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return lt}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return ft}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return wt}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Wt}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return St}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return yt}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Tt}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Ut}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return vt}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Se}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var e=`2.6.0`;export{e as version};
6
+ var e=`2.6.2`;export{e as version};
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var e=`2.6.0`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
6
+ var e=`2.6.2`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./use-search-DcfZSunO.cjs`);let t=require(`react-router-dom`),n=require(`react`),r=require(`react/jsx-runtime`);function i({routes:i}){let{isOpen:a,setIsOpen:o,query:s,setQuery:c,list:l}=e.t(i),u=(0,t.useNavigate)();(0,n.useEffect)(()=>{let e=e=>{(/Mac/.test(navigator.userAgent)?e.metaKey:e.ctrlKey)&&(e.key===`k`||e.key===`j`)&&(e.preventDefault(),o(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o]);let d=(0,n.useCallback)(e=>{let t=String(e);if(o(!1),t.includes(`#`)){let[e,n]=t.split(`#`);u(e),setTimeout(()=>{let e=document.getElementById(n);e&&e.scrollIntoView({behavior:`smooth`})},100)}else u(t)},[u,o]);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.r.SearchTrigger,{onPress:()=>o(!0)}),(0,r.jsx)(e.n.Root,{isOpen:a,onOpenChange:o,children:(0,r.jsxs)(e.n.Autocomplete,{onSelectionChange:d,children:[(0,r.jsx)(e.n.Input,{value:s,onChange:e=>c(e.target.value)}),(0,r.jsx)(e.n.List,{items:l,children:t=>(0,r.jsxs)(e.n.Item,{onPress:()=>d(t.id),textValue:t.title,children:[(0,r.jsx)(e.n.Item.Icon,{isHeading:t.isHeading}),(0,r.jsxs)(`div`,{className:`flex flex-col justify-center gap-0.5`,children:[(0,r.jsx)(e.n.Item.Title,{children:t.title}),(0,r.jsx)(e.n.Item.Bio,{children:t.bio})]})]},t.id)})]})})]})}exports.SearchDialog=i;
6
+ const e=require(`./use-search-DBpJZQuw.cjs`);let t=require(`react-router-dom`),n=require(`react`),r=require(`react/jsx-runtime`);function i({routes:i}){let{isOpen:a,setIsOpen:o,query:s,setQuery:c,list:l}=e.t(i),u=(0,t.useNavigate)();(0,n.useEffect)(()=>{let e=e=>{(/Mac/.test(navigator.userAgent)?e.metaKey:e.ctrlKey)&&(e.key===`k`||e.key===`j`)&&(e.preventDefault(),o(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o]);let d=(0,n.useCallback)(e=>{let t=String(e);if(o(!1),t.includes(`#`)){let[e,n]=t.split(`#`);u(e),setTimeout(()=>{let e=document.getElementById(n);e&&e.scrollIntoView({behavior:`smooth`})},100)}else u(t)},[u,o]);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.r.SearchTrigger,{onPress:()=>o(!0)}),(0,r.jsx)(e.n.Root,{isOpen:a,onOpenChange:o,children:(0,r.jsxs)(e.n.Autocomplete,{onSelectionChange:d,children:[(0,r.jsx)(e.n.Input,{value:s,onChange:e=>c(e.target.value)}),(0,r.jsx)(e.n.List,{items:l,children:t=>(0,r.jsxs)(e.n.Item,{onPress:()=>d(t.id),textValue:t.title,children:[(0,r.jsx)(e.n.Item.Icon,{isHeading:t.isHeading}),(0,r.jsxs)(`div`,{className:`flex flex-col justify-center gap-0.5`,children:[(0,r.jsx)(e.n.Item.Title,{children:t.title}),(0,r.jsx)(e.n.Item.Bio,{children:t.bio})]})]},t.id)})]})})]})}exports.SearchDialog=i;
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{g as e,t,v as n}from"./use-search-C9bxCqfF.js";import{useNavigate as r}from"react-router-dom";import{useCallback as i,useEffect as a}from"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l({routes:l}){let{isOpen:u,setIsOpen:d,query:f,setQuery:p,list:m}=t(l),h=r();a(()=>{let e=e=>{(/Mac/.test(navigator.userAgent)?e.metaKey:e.ctrlKey)&&(e.key===`k`||e.key===`j`)&&(e.preventDefault(),d(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[d]);let g=i(e=>{let t=String(e);if(d(!1),t.includes(`#`)){let[e,n]=t.split(`#`);h(e),setTimeout(()=>{let e=document.getElementById(n);e&&e.scrollIntoView({behavior:`smooth`})},100)}else h(t)},[h,d]);return c(o,{children:[s(n.SearchTrigger,{onPress:()=>d(!0)}),s(e.Root,{isOpen:u,onOpenChange:d,children:c(e.Autocomplete,{onSelectionChange:g,children:[s(e.Input,{value:f,onChange:e=>p(e.target.value)}),s(e.List,{items:m,children:t=>c(e.Item,{onPress:()=>g(t.id),textValue:t.title,children:[s(e.Item.Icon,{isHeading:t.isHeading}),c(`div`,{className:`flex flex-col justify-center gap-0.5`,children:[s(e.Item.Title,{children:t.title}),s(e.Item.Bio,{children:t.bio})]})]},t.id)})]})})]})}export{l as SearchDialog};
6
+ import{g as e,t,v as n}from"./use-search-CS3gH19M.js";import{useNavigate as r}from"react-router-dom";import{useCallback as i,useEffect as a}from"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l({routes:l}){let{isOpen:u,setIsOpen:d,query:f,setQuery:p,list:m}=t(l),h=r();a(()=>{let e=e=>{(/Mac/.test(navigator.userAgent)?e.metaKey:e.ctrlKey)&&(e.key===`k`||e.key===`j`)&&(e.preventDefault(),d(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[d]);let g=i(e=>{let t=String(e);if(d(!1),t.includes(`#`)){let[e,n]=t.split(`#`);h(e),setTimeout(()=>{let e=document.getElementById(n);e&&e.scrollIntoView({behavior:`smooth`})},100)}else h(t)},[h,d]);return c(o,{children:[s(n.SearchTrigger,{onPress:()=>d(!0)}),s(e.Root,{isOpen:u,onOpenChange:d,children:c(e.Autocomplete,{onSelectionChange:g,children:[s(e.Input,{value:f,onChange:e=>p(e.target.value)}),s(e.List,{items:m,children:t=>c(e.Item,{onPress:()=>g(t.id),textValue:t.title,children:[s(e.Item.Icon,{isHeading:t.isHeading}),c(`div`,{className:`flex flex-col justify-center gap-0.5`,children:[s(e.Item.Title,{children:t.title}),s(e.Item.Bio,{children:t.bio})]})]},t.id)})]})})]})}export{l as SearchDialog};