boltdocs 3.3.4 → 3.3.6

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 (79) hide show
  1. package/dist/{build-COgv-rkY.mjs → build-BJnL-FHG.mjs} +1 -1
  2. package/dist/{build-1CsvBIsN.cjs → build-CxT38vPv.cjs} +1 -1
  3. package/dist/client/index.cjs +80 -32
  4. package/dist/client/index.d.cts +1 -1
  5. package/dist/client/index.d.ts +1 -1
  6. package/dist/client/index.js +78 -31
  7. package/dist/client/mdx.cjs +1 -1
  8. package/dist/client/mdx.js +1 -1
  9. package/dist/client/primitives.cjs +4 -4
  10. package/dist/client/primitives.d.cts +40 -9
  11. package/dist/client/primitives.d.ts +40 -9
  12. package/dist/client/primitives.js +4 -4
  13. package/dist/config-B3_iVsbi.mjs +7 -0
  14. package/dist/{config-PLvresCv.cjs → config-BC_qhXws.cjs} +1 -1
  15. package/dist/config-BJp3lGzE.cjs +7 -0
  16. package/dist/{dev-C_9iBwmu.cjs → dev-46NiL0MC.cjs} +1 -1
  17. package/dist/{dev-UWVM3ah-.mjs → dev-C4kjO5xs.mjs} +1 -1
  18. package/dist/{docs-layout-CbZ7LDRe.js → docs-layout-D3Fmb0Wd.js} +16 -117
  19. package/dist/{docs-layout-vzfXed1Q.cjs → docs-layout-SgphExoE.cjs} +16 -123
  20. package/dist/{doctor-DMECtdK6.cjs → doctor-BqxOFRt3.cjs} +1 -1
  21. package/dist/{doctor-i8Qmd8DJ.mjs → doctor-Cv5lXnay.mjs} +1 -1
  22. package/dist/{doctor-FuFY1jBz.cjs → doctor-TS3JGNEU.cjs} +1 -1
  23. package/dist/{image-B-NDSDuY.js → image-BAiDReNd.js} +1 -1
  24. package/dist/{image-Hnaa2bJd.cjs → image-Bkx85rsq.cjs} +1 -1
  25. package/dist/{index-Cg3TmXIZ.d.ts → index-B1Mx0dHl.d.ts} +30 -6
  26. package/dist/{index-CSiMUBhC.d.cts → index-DLaHgD-i.d.cts} +30 -6
  27. package/dist/{link-vZjmD-es.cjs → link-hLWOsx0x.cjs} +59 -28
  28. package/dist/{link-CgdI6O2o.js → link-q1qHNGK_.js} +54 -29
  29. package/dist/{mdx-BRT71V5Q.js → mdx-CJGWzBGy.js} +2 -2
  30. package/dist/{mdx-D0Absdq5.cjs → mdx-Qi0DmaY8.cjs} +2 -2
  31. package/dist/node/cli-entry.cjs +1 -1
  32. package/dist/node/cli-entry.mjs +1 -1
  33. package/dist/node/highlight.d.cts +2 -2
  34. package/dist/node/highlight.d.mts +2 -2
  35. package/dist/node/index.cjs +1 -1
  36. package/dist/node/index.d.cts +7 -4
  37. package/dist/node/index.d.mts +7 -4
  38. package/dist/node/index.mjs +1 -1
  39. package/dist/node/mdx/shiki-adapter.cjs +1 -1
  40. package/dist/node/mdx/shiki-adapter.d.cts +7 -2
  41. package/dist/node/mdx/shiki-adapter.d.mts +7 -2
  42. package/dist/node/mdx/shiki-adapter.mjs +1 -1
  43. package/dist/node-7Cfw6nMr.cjs +23 -0
  44. package/dist/node-CT2E84nY.mjs +23 -0
  45. package/dist/{package-Cwma8oO7.cjs → package-Bah2tHjK.cjs} +1 -1
  46. package/dist/{package-CKC-4LtU.mjs → package-D6bf68FR.mjs} +1 -1
  47. package/dist/plugin-AgNI3ktz.cjs +69 -0
  48. package/dist/plugin-BAv_pYLt.mjs +69 -0
  49. package/dist/{plugin-context-BxF88sW4.cjs → plugin-context-BZs5lvDu.cjs} +3 -3
  50. package/dist/{plugin-context-BKK-nfOd.mjs → plugin-context-b5qVVQSU.mjs} +2 -2
  51. package/dist/{plugin-lifecycle-BjMclfc3.cjs → plugin-lifecycle-s89gzTlh.cjs} +1 -1
  52. package/dist/{registry-BbB6NqSv.d.cts → registry-B8pt41zj.d.cts} +1 -1
  53. package/dist/{registry-sJqDv0kE.d.mts → registry-BrrH2X9c.d.mts} +1 -1
  54. package/dist/routes-CzhKOw67.cjs +6 -0
  55. package/dist/{routes-C3_w9fLX.cjs → routes-Dq_2EUIB.cjs} +1 -1
  56. package/dist/routes-Dw6g0bfF.mjs +6 -0
  57. package/dist/search-dialog-BYZS9aeO.cjs +747 -0
  58. package/dist/{search-dialog-x_qHU8ty.cjs → search-dialog-CguKVtUu.cjs} +145 -5
  59. package/dist/{search-dialog-MmwxFMmE.js → search-dialog-DQwod5Xc.js} +1 -1
  60. package/dist/search-dialog-DzObE-Ar.js +717 -0
  61. package/dist/{search-dialog-DmirOMPg.cjs → search-dialog-QgKRRbsI.cjs} +1 -1
  62. package/dist/{search-dialog-BqkzDTq2.js → search-dialog-mYnqU4v7.js} +134 -6
  63. package/dist/{types-Db6zToZH.d.mts → types-74i_xUe2.d.mts} +1 -1
  64. package/dist/{types-o7iZ2BAR.d.cts → types-X_Pwk8Cg.d.cts} +1 -1
  65. package/dist/virtual-modules-C3S3Nz8r.cjs +40 -0
  66. package/dist/virtual-modules-CaxqrFd6.mjs +40 -0
  67. package/package.json +4 -3
  68. package/dist/config-CrsQJHQz.cjs +0 -7
  69. package/dist/config-DC0nMMk7.mjs +0 -7
  70. package/dist/node-C3HctGaH.cjs +0 -23
  71. package/dist/node-CUiheODn.mjs +0 -23
  72. package/dist/plugin-BX6TXR8x.cjs +0 -69
  73. package/dist/plugin-C8UMIA-4.mjs +0 -69
  74. package/dist/routes-C0kb4ue6.cjs +0 -6
  75. package/dist/routes-C4wrLWwu.mjs +0 -6
  76. package/dist/search-dialog-D3jtaw6w.cjs +0 -525
  77. package/dist/search-dialog-DRiXejws.js +0 -501
  78. package/dist/virtual-modules-XBiJoTsp.mjs +0 -39
  79. package/dist/virtual-modules-hndVivLR.cjs +0 -39
@@ -3,6 +3,6 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const require_search_dialog = require('./search-dialog-D3jtaw6w.cjs');
6
+ const require_search_dialog = require('./search-dialog-BYZS9aeO.cjs');
7
7
 
8
8
  exports.SearchDialog = require_search_dialog.SearchDialog;
@@ -3,7 +3,7 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import { D as Hash, E as FileText, F as Moon, I as MoreVertical, S as ExternalLink, V as X, W as useConfig, d as resolvePublicAssetUrl, o as cn, s as useLocalizedTo, t as Link, x as CornerDownLeft, z as Sun } from "./link-CgdI6O2o.js";
6
+ import { B as Sun, C as ExternalLink, D as FileText, G as useConfig, H as X, I as Moon, L as MoreVertical, O as Hash, S as CornerDownLeft, f as resolvePublicAssetUrl, o as cn, s as useLocalizedTo, t as Link } from "./link-q1qHNGK_.js";
7
7
  import { E as useLocation } from "./router-CZBxMRAH.js";
8
8
  import { Component, useEffect, useState } from "react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -39,6 +39,15 @@ var ErrorBoundary = class extends Component {
39
39
  error: null
40
40
  });
41
41
  };
42
+ prevResetKeys = [];
43
+ componentDidUpdate(prevProps) {
44
+ if (prevProps.resetKeys !== this.props.resetKeys && this.state.hasError && this.props.resetKeys?.length && this.props.resetKeys.some((key, i) => !Object.is(key, this.prevResetKeys[i]))) {
45
+ this.prevResetKeys = this.props.resetKeys;
46
+ this.resetErrorBoundary();
47
+ return;
48
+ }
49
+ this.prevResetKeys = this.props.resetKeys ?? [];
50
+ }
42
51
  render() {
43
52
  const { hasError, error } = this.state;
44
53
  const { children, fallback, FallbackComponent } = this.props;
@@ -165,17 +174,20 @@ function NavbarLogo({ src, alt, width = 24, height = 24, className, logoClassNam
165
174
  });
166
175
  }
167
176
  function NavbarTitle({ children, className, linkClassName, href = "/" }) {
177
+ const titleText = typeof children === "string" || typeof children === "number" ? String(children) : void 0;
168
178
  return /* @__PURE__ */ jsx(Link, {
169
179
  href,
170
180
  className: cn(linkClassName),
181
+ "aria-label": titleText ? `Go to ${titleText} home` : void 0,
171
182
  children: /* @__PURE__ */ jsx("span", {
172
183
  className: cn("text-lg font-bold tracking-tight hidden sm:inline-block", className),
173
184
  children
174
185
  })
175
186
  });
176
187
  }
177
- function NavbarLinks({ children, className }) {
188
+ function NavbarLinks({ children, className, label }) {
178
189
  return /* @__PURE__ */ jsx("nav", {
190
+ "aria-label": label,
179
191
  className: cn("hidden md:flex items-center gap-6 text-sm font-medium", className),
180
192
  children
181
193
  });
@@ -236,18 +248,20 @@ function NavbarDropdownItem({ href, label, className }) {
236
248
  children: label
237
249
  });
238
250
  }
239
- function NavbarSearchTriggerDesktop({ className, onPress, children }) {
251
+ function NavbarSearchTriggerDesktop({ className, onPress, children, ...props }) {
240
252
  return /* @__PURE__ */ jsx(Button, {
253
+ ...props,
241
254
  onPress,
242
255
  className: cn("hidden lg:flex items-center justify-between gap-2 px-3 py-2 text-sm outline-none cursor-pointer w-full max-w-[720px]", className),
243
256
  children
244
257
  });
245
258
  }
246
- function NavbarSearchTriggerMobile({ className, onPress, children }) {
259
+ function NavbarSearchTriggerMobile({ className, onPress, children, ...props }) {
247
260
  return /* @__PURE__ */ jsx(Button, {
261
+ ...props,
248
262
  onPress,
249
263
  className: cn("lg:hidden flex h-10 w-10 items-center justify-center outline-none cursor-pointer", className),
250
- "aria-label": "Search",
264
+ "aria-label": props["aria-label"] || "Search",
251
265
  children
252
266
  });
253
267
  }
@@ -330,6 +344,7 @@ function NavbarMobileMenu({ isOpen, onClose, children, className, overlayClassNa
330
344
  children: /* @__PURE__ */ jsx(X, { size: 24 })
331
345
  })]
332
346
  }), /* @__PURE__ */ jsx("nav", {
347
+ "aria-label": "Mobile navigation",
333
348
  className: cn("flex-1 overflow-y-auto flex flex-col gap-4", navClassName),
334
349
  children
335
350
  })]
@@ -405,6 +420,119 @@ Navbar.MobileMenu = NavbarMobileMenu;
405
420
  Navbar.MobileLink = NavbarMobileLink;
406
421
  Navbar.MobileLinkItem = NavbarMobileLinkItem;
407
422
 
423
+ //#endregion
424
+ //#region src/client/hooks/use-search-highlight.ts
425
+ /**
426
+ * Hook to highlight search terms based on the 'hl' query parameter.
427
+ */
428
+ function useSearchHighlight(containerSelector = ".boltdocs-page") {
429
+ const { search } = useLocation();
430
+ const query = new URLSearchParams(search).get("hl");
431
+ useEffect(() => {
432
+ if (!query) {
433
+ clearHighlights(containerSelector);
434
+ return;
435
+ }
436
+ const container = document.querySelector(containerSelector);
437
+ if (!container) return;
438
+ const target = container;
439
+ let rafId;
440
+ const observer = new MutationObserver((mutations) => {
441
+ if (mutations.some((m) => {
442
+ const addedNodes = Array.from(m.addedNodes);
443
+ const removedNodes = Array.from(m.removedNodes);
444
+ return addedNodes.some((n) => !(n instanceof HTMLElement && n.hasAttribute("data-search-highlight"))) || removedNodes.some((n) => !(n instanceof HTMLElement && n.hasAttribute("data-search-highlight")));
445
+ })) run();
446
+ });
447
+ function run() {
448
+ cancelAnimationFrame(rafId);
449
+ rafId = requestAnimationFrame(() => {
450
+ observer.disconnect();
451
+ clearHighlights(containerSelector);
452
+ const terms = (query ?? "").split(/\s+/).map((t) => t.trim()).filter((t) => t.length >= 2);
453
+ if (terms.length > 0) highlightTerms(target, terms);
454
+ observer.observe(target, {
455
+ childList: true,
456
+ subtree: true
457
+ });
458
+ });
459
+ }
460
+ run();
461
+ return () => {
462
+ cancelAnimationFrame(rafId);
463
+ observer.disconnect();
464
+ clearHighlights(containerSelector);
465
+ };
466
+ }, [query, containerSelector]);
467
+ }
468
+ function clearHighlights(selector) {
469
+ document.querySelectorAll(`${selector} mark[data-search-highlight]`).forEach((mark) => {
470
+ try {
471
+ const parent = mark.parentNode;
472
+ if (parent?.contains(mark)) {
473
+ const text = mark.textContent || "";
474
+ parent.replaceChild(document.createTextNode(text), mark);
475
+ }
476
+ } catch {}
477
+ });
478
+ }
479
+ function createSearchHighlightRegex(terms) {
480
+ const accentMap = {
481
+ a: "[aáàäâãåāăą]",
482
+ c: "[cçćč]",
483
+ d: "[dďđ]",
484
+ e: "[eéèëêėęě]",
485
+ g: "[gğģ]",
486
+ i: "[iíìïîīįı]",
487
+ l: "[lĺļł]",
488
+ n: "[nñńň]",
489
+ o: "[oóòöôõøōő]",
490
+ r: "[rřŕ]",
491
+ s: "[sśšş]",
492
+ t: "[tťţ]",
493
+ u: "[uúùüûūůűų]",
494
+ y: "[yýÿ]",
495
+ z: "[zžźż]"
496
+ };
497
+ const escapeTerm = (term) => [...term].map((char) => {
498
+ return accentMap[char.toLocaleLowerCase()] ?? char.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
499
+ }).join("");
500
+ const uniqueTerms = [...new Set(terms.map((term) => term.trim()).filter(Boolean))].sort((left, right) => right.length - left.length);
501
+ if (uniqueTerms.length === 0) return null;
502
+ return new RegExp(`(${uniqueTerms.map(escapeTerm).join("|")})`, "gi");
503
+ }
504
+ function highlightTerms(container, terms) {
505
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT, { acceptNode: (node) => {
506
+ const parent = node.parentElement;
507
+ if (parent && (parent.tagName === "SCRIPT" || parent.tagName === "STYLE" || parent.tagName === "MARK" || parent.closest("pre") || parent.closest("code"))) return NodeFilter.FILTER_REJECT;
508
+ return NodeFilter.FILTER_ACCEPT;
509
+ } });
510
+ const nodes = [];
511
+ let node = walker.nextNode();
512
+ while (node) {
513
+ nodes.push(node);
514
+ node = walker.nextNode();
515
+ }
516
+ const regex = createSearchHighlightRegex(terms);
517
+ if (!regex) return;
518
+ nodes.forEach((textNode) => {
519
+ const text = textNode.textContent;
520
+ regex.lastIndex = 0;
521
+ if (text && regex.test(text)) {
522
+ const fragment = document.createDocumentFragment();
523
+ text.split(regex).forEach((part, index) => {
524
+ if (index % 2 === 1) {
525
+ const mark = document.createElement("mark");
526
+ mark.textContent = part;
527
+ mark.setAttribute("data-search-highlight", "true");
528
+ fragment.appendChild(mark);
529
+ } else if (part) fragment.appendChild(document.createTextNode(part));
530
+ });
531
+ if (textNode.parentNode) textNode.parentNode.replaceChild(fragment, textNode);
532
+ }
533
+ });
534
+ }
535
+
408
536
  //#endregion
409
537
  //#region src/client/components/primitives/search-dialog.tsx
410
538
  /**
@@ -541,4 +669,4 @@ SearchDialog.Item = Object.assign(SearchDialogItemRoot, {
541
669
  });
542
670
 
543
671
  //#endregion
544
- export { ErrorBoundaryFallback as a, ErrorBoundary as i, Navbar as n, Button$1 as o, Github as r, SearchDialog as t };
672
+ export { Github as a, Button$1 as c, Navbar as i, createSearchHighlightRegex as n, ErrorBoundary as o, useSearchHighlight as r, ErrorBoundaryFallback as s, SearchDialog as t };
@@ -972,4 +972,4 @@ type BoltdocsRoutePath = keyof Boltdocs.RoutePaths;
972
972
  type ExternalRouteReference = `/${string}` | `#${string}` | `?${string}` | `site:/${string}` | `site:${string}` | `http://${string}` | `https://${string}` | `//${string}`;
973
973
  type BoltdocsRoutePathWithFallback = BoltdocsRoutePath | ExternalRouteReference | string;
974
974
  //#endregion
975
- export { PluginTransformMiddleware as C, StructuredData as E, PluginStore as S, RouteMeta as T, PluginHmrEvent as _, CodeHighlightConfig as a, PluginMeta as b, CodeHighlighterRuntime as c, ExternalFileRoute as d, IPluginLifecycleManager as f, PluginContext as g, ParsedMetaLike as h, BoltdocsViewTransitionsConfig as i, CodeTheme as l, JsonLdValue as m, BoltdocsExperimentalConfig as n, CodeHighlighterAdapter as o, JsonLdObject as p, BoltdocsThemeConfig as r, CodeHighlighterEngine as s, BoltdocsConfig as t, DiagnosticRecord as u, PluginLifecycleHooks as v, RegisteredVirtualModule as w, PluginServerMiddleware as x, PluginLogger as y };
975
+ export { PluginStore as C, StructuredData as D, RouteMeta as E, PluginServerMiddleware as S, RegisteredVirtualModule as T, PluginContext as _, CodeHighlightConfig as a, PluginLogger as b, CodeHighlighterRuntime as c, ExternalFileRoute as d, IPluginLifecycleManager as f, PluginClientConfig as g, ParsedMetaLike as h, BoltdocsViewTransitionsConfig as i, CodeTheme as l, JsonLdValue as m, BoltdocsExperimentalConfig as n, CodeHighlighterAdapter as o, JsonLdObject as p, BoltdocsThemeConfig as r, CodeHighlighterEngine as s, BoltdocsConfig as t, DiagnosticRecord as u, PluginHmrEvent as v, PluginTransformMiddleware as w, PluginMeta as x, PluginLifecycleHooks as y };
@@ -972,4 +972,4 @@ type BoltdocsRoutePath = keyof Boltdocs.RoutePaths;
972
972
  type ExternalRouteReference = `/${string}` | `#${string}` | `?${string}` | `site:/${string}` | `site:${string}` | `http://${string}` | `https://${string}` | `//${string}`;
973
973
  type BoltdocsRoutePathWithFallback = BoltdocsRoutePath | ExternalRouteReference | string;
974
974
  //#endregion
975
- export { PluginTransformMiddleware as C, StructuredData as E, PluginStore as S, RouteMeta as T, PluginHmrEvent as _, CodeHighlightConfig as a, PluginMeta as b, CodeHighlighterRuntime as c, ExternalFileRoute as d, IPluginLifecycleManager as f, PluginContext as g, ParsedMetaLike as h, BoltdocsViewTransitionsConfig as i, CodeTheme as l, JsonLdValue as m, BoltdocsExperimentalConfig as n, CodeHighlighterAdapter as o, JsonLdObject as p, BoltdocsThemeConfig as r, CodeHighlighterEngine as s, BoltdocsConfig as t, DiagnosticRecord as u, PluginLifecycleHooks as v, RegisteredVirtualModule as w, PluginServerMiddleware as x, PluginLogger as y };
975
+ export { PluginStore as C, StructuredData as D, RouteMeta as E, PluginServerMiddleware as S, RegisteredVirtualModule as T, PluginContext as _, CodeHighlightConfig as a, PluginLogger as b, CodeHighlighterRuntime as c, ExternalFileRoute as d, IPluginLifecycleManager as f, PluginClientConfig as g, ParsedMetaLike as h, BoltdocsViewTransitionsConfig as i, CodeTheme as l, JsonLdValue as m, BoltdocsExperimentalConfig as n, CodeHighlighterAdapter as o, JsonLdObject as p, BoltdocsThemeConfig as r, CodeHighlighterEngine as s, BoltdocsConfig as t, DiagnosticRecord as u, PluginHmrEvent as v, PluginTransformMiddleware as w, PluginMeta as x, PluginLifecycleHooks as y };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./utils-ej6_SjIZ.cjs`),n=require(`./plugin-context-BZs5lvDu.cjs`),r=require(`./routes-CzhKOw67.cjs`);let i=require(`node:path`);i=e.r(i);let a=require(`node:fs`);a=e.r(a);const o=1200;function s(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(s):e&&typeof e==`object`?Object.values(e).flatMap(s):[]}const c=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function l(e,t){let n=e.replace(/\s+/g,` `).trim();return n.length>t?n.slice(0,t).trim():n}function u(e,t){let n=[],r=e.toLocaleLowerCase(),i=0;for(let e of t.slice(0,100)){let t=e.text.trim();if(!t)continue;let a=r.indexOf(t.toLocaleLowerCase(),i);if(a<0){n.push({heading:e,body:``});continue}let o=a+t.length;n.push({heading:e,start:o,body:``}),i=o}return n.map((t,r)=>{if(t.start===void 0)return t;let i=n[r+1]?.start??e.length;return{heading:t.heading,body:l(e.slice(t.start,i),Math.max(0,o-t.heading.text.length-4))}})}function d(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=s(Object.entries(n.frontmatter).filter(([e])=>!c.has(e)).map(([e,t])=>t)).join(` `));let r=n._content||``,i=l(e?`${r} ${e}`:r,2e3),a=n.headings?u(r,n.headings):[];if(t.push({id:n.path,title:n.title,content:i,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings){let e=6e3;for(let r of a){let{heading:i}=r,a=`${i.text} in ${n.title}`,s=l(r.body?`${a} ${r.body}`:a,Math.min(o,e));if(s&&(t.push({id:`${n.path}#${i.id}`,title:i.text,content:s,url:`${n.path}#${i.id}`,display:`${n.title} > ${i.text}`,locale:n.locale,version:n.version}),e=Math.max(0,e-s.length)),e===0)break}}}return t}function f(e){return{path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],frontmatter:e.frontmatter,locale:e.locale,version:e.version,tab:e.tab,collection:e.collection,tags:e.tags,author:e.author,draft:e.draft,excerpt:e.excerpt,coverImage:e.coverImage,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo,date:e.date,lastUpdated:e.lastUpdated,category:e.category,order:e.order,sidebarLabel:e.sidebarLabel,sidebarHidden:e.sidebarHidden,slugParts:e.slugParts}}const p=new Set([`apikey`,`authorization`,`credential`,`credentials`,`password`,`privatekey`,`secret`,`secretkey`,`token`]);function m(e){return p.has(e.toLowerCase().replace(/[^a-z0-9]/g,``))}function h(e,t=0){return t>10||typeof e!=`object`||!e?e:Array.isArray(e)?e.map(e=>h(e,t+1)):Object.fromEntries(Object.entries(e).filter(([e])=>!m(e)).map(([e,n])=>[e,h(n,t+1)]))}function g(e){return{name:e.name,...e.metadata?{metadata:h(e.metadata)}:{}}}function _(e){let t=e.lastIndexOf(`#`);return t===-1?{modulePath:e,exportName:`default`}:{modulePath:e.slice(0,t),exportName:e.slice(t+1)||`default`}}function v(e){let t={};for(let n of e)for(let[e,r]of Object.entries(n.client?.slots??{}))t[e]??=[],t[e].push(r);return`const slots = {\n${Object.entries(t).map(([e,t])=>{let n=t.map((t,n)=>{let{modulePath:r,exportName:i}=_(t);return`{ id: ${JSON.stringify(`${e}:${n}`)}, load: () => import(${JSON.stringify(r)}).then(module => ({ default: module[${JSON.stringify(i)}] || module.default })) }`});return` ${JSON.stringify(e)}: [${n.join(`, `)}]`}).join(`,
7
+ `)}\n};\nexport default slots;\n`}function y(e){return{routeCacheContext:e,routeGenerationFingerprint:void 0,directoryMetaCache:null,routesDataMap:new Map,collectionsDataMap:new Map,searchDataMap:new Map,serializedSearchData:null,serializedPageSourceData:null}}const b=y();function x(e){return e??b}function S(e){let t=x(e);t.directoryMetaCache=null,t.routeGenerationFingerprint=void 0,t.routeCacheVariant=void 0,t.routesDataMap.clear(),t.collectionsDataMap.clear(),t.searchDataMap.clear(),t.serializedSearchData=null,t.serializedPageSourceData=null}function C(e,t){return(!t.routeCacheContext||t.routeCacheContext.disposed)&&(t.routeCacheContext=r.d(e),t.routeCacheVariant=void 0,t.routeGenerationFingerprint=void 0,t.routesDataMap.clear(),t.collectionsDataMap.clear(),t.searchDataMap.clear(),t.serializedSearchData=null,t.serializedPageSourceData=null),t.routeCacheContext}async function w(e,t,n,i){let a=x(n),o=C(e,a),s=r.p(t),c=(i?.fingerprint===s&&o.variants.get(s)===i?i:void 0)??r.f(o,s);a.routeCacheVariant=c,a.routeGenerationFingerprint=s;let l=await r.t(e,t,void 0,!1,o,c);a.routesDataMap.clear();for(let e of l)a.routesDataMap.set(e.path,e);T(a)}function T(e){let t=x(e),n=Array.from(t.routesDataMap.values()),r=d(n);t.searchDataMap.clear(),t.serializedSearchData=null,t.serializedPageSourceData=null;for(let e of r)t.searchDataMap.set(e.id,e);t.collectionsDataMap.clear();for(let e of n)if(e.collection){let n={path:e.path,title:e.title,date:e.date,excerpt:e.excerpt,tags:e.tags,author:e.author,coverImage:e.coverImage,filePath:e.filePath,locale:e.locale,version:e.version,frontmatter:e.frontmatter,draft:e.frontmatter?.draft===!0,collection:e.collection};t.collectionsDataMap.set(e.filePath,n)}t.serializedSearchData=JSON.stringify(k(t)),t.serializedPageSourceData=JSON.stringify(A(t))}async function E(e,t,n){let i=x(n);C(e,i);let a=r.p(t);(i.routesDataMap.size===0||i.routeGenerationFingerprint!==a)&&(i.routesDataMap.clear(),i.collectionsDataMap.clear(),i.searchDataMap.clear(),i.serializedSearchData=null,i.serializedPageSourceData=null,await w(e,t,i))}function D(e){let t=x(e),n={},r=Array.from(t.collectionsDataMap.values()).sort((e,t)=>{let n=e=>{if(!e)return-1/0;let t=new Date(e).getTime();return Number.isFinite(t)?t:-1/0},r=n(e.date),i=n(t.date)-r;return i===0?e.path.localeCompare(t.path):i});for(let e of r){let t=e.collection;t&&(n[t]||(n[t]=[]),n[t].push(e))}return n}function O(e,t=e=>e){let n=Array.from(e.values(),t).sort((e,t)=>{let n=e=>{if(typeof e!=`object`||!e)return String(e);let t=e;return`${String(t.path||``)}\u0000${String(t.id||``)}\u0000${String(t.filePath||``)}`};return n(e).localeCompare(n(t))});return`export default ${JSON.stringify(n)};`}function k(e){return Array.from(x(e).searchDataMap.values()).sort((e,t)=>e.id.localeCompare(t.id))}function A(e){let t=x(e),n={};for(let e of t.routesDataMap.values()){let t=e;t.path&&t._rawContent&&(n[t.path]=t._rawContent)}return Object.fromEntries(Object.entries(n).sort(([e],[t])=>e.localeCompare(t)))}function j(e){let t=x(e);return t.serializedSearchData===null&&(t.serializedSearchData=JSON.stringify(k(t))),t.serializedSearchData}function M(e){let t=x(e);return t.serializedPageSourceData===null&&(t.serializedPageSourceData=JSON.stringify(A(t))),t.serializedPageSourceData}function N(e){return`export default ${JSON.stringify(e)};`}async function P(e,t,n,i,a){let o=x(n);i&&(o.routeCacheContext=i),a&&(o.routeCacheVariant=a);let s=r.p(t);o.routeGenerationFingerprint!==s&&(o.routesDataMap.clear(),o.collectionsDataMap.clear(),o.searchDataMap.clear(),o.serializedSearchData=null,o.serializedPageSourceData=null);let c=new Map(o.routesDataMap),l=new Map(o.collectionsDataMap),u=new Map(o.searchDataMap);await w(e,t,o);let d={routes:{updated:[],deleted:[]},collections:{updated:[],deleted:[]},search:{updated:[],deleted:[]}};for(let[e,t]of o.routesDataMap){let n=c.get(e);(!n||JSON.stringify(n)!==JSON.stringify(t))&&d.routes.updated.push(f(t))}for(let e of c.keys())o.routesDataMap.has(e)||d.routes.deleted.push(e);for(let[e,t]of o.collectionsDataMap){let n=l.get(e);(!n||JSON.stringify(n)!==JSON.stringify(t))&&d.collections.updated.push(t)}for(let e of l.keys())o.collectionsDataMap.has(e)||d.collections.deleted.push(e);for(let[e,t]of o.searchDataMap){let n=u.get(e);(!n||JSON.stringify(n)!==JSON.stringify(t))&&d.search.updated.push(t)}for(let e of u.keys())o.searchDataMap.has(e)||d.search.deleted.push(e);return d}function F(e,r,o,s,c,l){let u=c?.virtualModuleRegistry??n.h,d=x(l);return{name:`vite-plugin-boltdocs-virtual-modules`,resolveId(e){if(e.includes(`boltdocs-entry`)||e===`virtual:boltdocs-entry`||e===`boltdocs/entry`||e===`boltdocs-entry`||e===`\0virtual:boltdocs-entry`||e===`\0virtual:boltdocs-entry.tsx`)return`\0virtual:boltdocs-entry.tsx`;if(e===`virtual:boltdocs-client-registry`||e===`\0virtual:boltdocs-client-registry`)return`\0virtual:boltdocs-client-registry`;if(e.includes(`boltdocs-client`)||e===`virtual:boltdocs-client`||e===`boltdocs/client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.mjs`)return`\0virtual:boltdocs-client.mjs`;if(e.startsWith(`\0`)){let t=e.slice(1);if(!t.startsWith(`virtual:boltdocs-`)&&u?.has(t))return e}else if(!e.startsWith(`virtual:boltdocs-`)&&u?.has(e))return`\0${e}`;return e.startsWith(`virtual:boltdocs-`)?`\0${e}`:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(c,l){let p=r(),m=c.startsWith(`\0`)?c.slice(1):c;if(!m.includes(`boltdocs-entry.tsx`)&&!m.includes(`boltdocs-client.mjs`)&&!m.startsWith(`virtual:boltdocs-`)&&u?.has(m)){let e=u?.get(m);if(!e)return null;try{let t=await e.loader();if(typeof t!=`string`)throw Error(`[boltdocs] Plugin virtual module '${m}' loader must return a string source code, got ${typeof t}.`);return t}catch(e){throw Error(`[boltdocs] Plugin virtual module '${m}' failed to load: ${e instanceof Error?e.message:String(e)}`)}}if(c.includes(`boltdocs-entry.tsx`)||c===`\0virtual:boltdocs-entry`){let t=this.environment?.config?.consumer,r=o(),i=t===void 0?!!r?.build?.ssr:t!==`client`;return n.g({...e,ssr:i,useCompiledPages:r?.command===`build`},p)}if(c.includes(`boltdocs-client.mjs`)||c===`\0virtual:boltdocs-client.ts`||c===`virtual:boltdocs-client`){let e=__dirname,n=e;for(;e!==i.default.parse(e).root;){if(a.default.existsSync(i.default.join(e,`package.json`))&&JSON.parse(a.default.readFileSync(i.default.join(e,`package.json`),`utf-8`)).name===`boltdocs`){n=e;break}e=i.default.dirname(e)}let r=i.default.join(n,`src/client/index.ts`),o=i.default.join(n,`dist/client/index.js`);return`export * from '${t.u(a.default.existsSync(r)?r:o)}';`}if(!c.startsWith(`\0virtual:boltdocs-`))return;let h=c.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(h===`routes`)return await E(s,p,d),O(d.routesDataMap,f);if(h===`client-registry`)return v(p?.plugins??[]);if(h===`collections`)return await E(s,p,d),N(D(d));if(h===`config`){await E(s,p,d);let e=d.routeCacheVariant?.directoryMeta||{};d.directoryMetaCache=e;let t=[...new Set(Array.from(d.routesDataMap.values()).map(e=>e.collection).filter(e=>!!e))].sort((e,t)=>e.localeCompare(t)),n=p?.collections,r=n?{...n,labels:{...n.labels||{},...Object.fromEntries(t.map(e=>[e,n.labels?.[e]??e]))}}:t.length>0?t:void 0,i={base:p?.base,theme:p?.theme,i18n:p?.i18n,versions:p?.versions,siteUrl:p?.siteUrl,integrations:p?.integrations,collections:r,seo:p?.seo,experimental:p?.experimental,plugins:p?.plugins?.map(g),directoryMeta:e};return`export default ${JSON.stringify(i)};`}if(h===`entry`){let t=this,r=o(),i=t.environment?.config?.consumer,a=i===void 0?!!(l?.ssr??r?.build?.ssr):i!==`client`;return n.g({...e,ssr:a,useCompiledPages:r?.command===`build`},p)}if(h===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],n=null;for(let t of e){let e=i.default.resolve(s,`mdx-components.${t}`);if(a.default.existsSync(e)){n=e;break}}let r={};if(p?.plugins)for(let e of p.plugins)e.components&&Object.assign(r,e.components);let o=Object.entries(r),c=o.map(([e,t],n)=>`import * as _pluginCompMod_${n} from '${t}';`).join(`
8
+ `),l=o.map(([e],t)=>`${JSON.stringify(e)}: _pluginCompMod_${t}[${JSON.stringify(e)}] || Reflect.get(_pluginCompMod_${t}, "default") || _pluginCompMod_${t}`).join(`,
9
+ `);if(n){let e=t.u(n);return`${c}
10
+ import * as components from '${e}';
11
+ const userMdxComponents = components.default || components;
12
+ const mdxComponents = {
13
+ ${l}${l?`,`:``}
14
+ ...userMdxComponents,
15
+ };
16
+ export default mdxComponents;
17
+ export * from '${e}';`}return`${c}
18
+ const mdxComponents = {
19
+ ${l}
20
+ };
21
+ export default mdxComponents;`}if(h===`layout`){let e=[`tsx`,`jsx`],n=null;for(let t of e){let e=i.default.resolve(s,`layout.${t}`);if(a.default.existsSync(e)){n=e;break}}if(n)return`import UserLayout from '${t.u(n)}';
22
+ 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(h===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],n=null;for(let t of e){let e=i.default.resolve(s,`icons.${t}`);if(a.default.existsSync(e)){n=e;break}}return n?`import * as icons from '${t.u(n)}';\nexport default icons;`:`export default {};`}if(h===`search`)return await E(s,p,d),`export default async function fetchSearchData(options = {}) {
23
+ const base = import.meta.env.BASE_URL || '/';
24
+ const origin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';
25
+ const basePath = base.endsWith('/') ? base : base + '/';
26
+ const url = new URL('search.json', new URL(basePath, origin));
27
+ if (options.bustCache) url.searchParams.set('t', String(Date.now()));
28
+ const res = await fetch(url, { cache: options.bustCache ? 'no-store' : 'default' });
29
+ if (!res.ok) throw new Error('Failed to fetch search index');
30
+ return res.json();
31
+ }`;if(h===`page-source`){await E(s,p,d);let e={};for(let t of d.routesDataMap.values())t.path&&t._rawContent&&(e[t.path]=t._rawContent);return`export default async function fetchPageSource(options = {}) {
32
+ const base = import.meta.env.BASE_URL || '/';
33
+ const origin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';
34
+ const basePath = base.endsWith('/') ? base : base + '/';
35
+ const url = new URL('page-source.json', new URL(basePath, origin));
36
+ if (options.bustCache) url.searchParams.set('t', String(Date.now()));
37
+ const res = await fetch(url, { cache: options.bustCache ? 'no-store' : 'default' });
38
+ if (!res.ok) throw new Error('Failed to fetch page source');
39
+ return res.json();
40
+ }`}if(h===`client`){let e=__dirname,n=``;for(;e&&e!==i.default.parse(e).root;){let r=i.default.join(e,`src/client/index.ts`),o=i.default.join(e,`dist/client/index.mjs`),s=i.default.join(e,`client/index.ts`);if(a.default.existsSync(r)){n=t.u(r);break}if(a.default.existsSync(o)){n=t.u(o);break}if(a.default.existsSync(s)){n=t.u(s);break}e=i.default.dirname(e)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${__dirname}`);return`export * from '${n}';`}}}}exports.computeFrontmatterDelta=P,exports.createVirtualModuleState=y,exports.createVirtualModulesPlugin=F,exports.getPageSourceJsonExport=M,exports.getSearchJsonExport=j,exports.invalidateDirectoryMetaCache=S;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import{_ as e,g as t,h as n}from"./plugin-context-b5qVVQSU.mjs";import{u as r}from"./utils-8lzafE49.mjs";import{d as i,f as a,p as o,t as s}from"./routes-Dw6g0bfF.mjs";import c from"node:path";import l from"node:fs";const u=1200;function d(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(d):e&&typeof e==`object`?Object.values(e).flatMap(d):[]}const f=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function p(e,t){let n=e.replace(/\s+/g,` `).trim();return n.length>t?n.slice(0,t).trim():n}function m(e,t){let n=[],r=e.toLocaleLowerCase(),i=0;for(let e of t.slice(0,100)){let t=e.text.trim();if(!t)continue;let a=r.indexOf(t.toLocaleLowerCase(),i);if(a<0){n.push({heading:e,body:``});continue}let o=a+t.length;n.push({heading:e,start:o,body:``}),i=o}return n.map((t,r)=>{if(t.start===void 0)return t;let i=n[r+1]?.start??e.length;return{heading:t.heading,body:p(e.slice(t.start,i),Math.max(0,u-t.heading.text.length-4))}})}function h(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=d(Object.entries(n.frontmatter).filter(([e])=>!f.has(e)).map(([e,t])=>t)).join(` `));let r=n._content||``,i=p(e?`${r} ${e}`:r,2e3),a=n.headings?m(r,n.headings):[];if(t.push({id:n.path,title:n.title,content:i,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings){let e=6e3;for(let r of a){let{heading:i}=r,a=`${i.text} in ${n.title}`,o=p(r.body?`${a} ${r.body}`:a,Math.min(u,e));if(o&&(t.push({id:`${n.path}#${i.id}`,title:i.text,content:o,url:`${n.path}#${i.id}`,display:`${n.title} > ${i.text}`,locale:n.locale,version:n.version}),e=Math.max(0,e-o.length)),e===0)break}}}return t}function g(e){return{path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],frontmatter:e.frontmatter,locale:e.locale,version:e.version,tab:e.tab,collection:e.collection,tags:e.tags,author:e.author,draft:e.draft,excerpt:e.excerpt,coverImage:e.coverImage,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo,date:e.date,lastUpdated:e.lastUpdated,category:e.category,order:e.order,sidebarLabel:e.sidebarLabel,sidebarHidden:e.sidebarHidden,slugParts:e.slugParts}}const _=new Set([`apikey`,`authorization`,`credential`,`credentials`,`password`,`privatekey`,`secret`,`secretkey`,`token`]);function v(e){return _.has(e.toLowerCase().replace(/[^a-z0-9]/g,``))}function y(e,t=0){return t>10||typeof e!=`object`||!e?e:Array.isArray(e)?e.map(e=>y(e,t+1)):Object.fromEntries(Object.entries(e).filter(([e])=>!v(e)).map(([e,n])=>[e,y(n,t+1)]))}function b(e){return{name:e.name,...e.metadata?{metadata:y(e.metadata)}:{}}}function x(e){let t=e.lastIndexOf(`#`);return t===-1?{modulePath:e,exportName:`default`}:{modulePath:e.slice(0,t),exportName:e.slice(t+1)||`default`}}function S(e){let t={};for(let n of e)for(let[e,r]of Object.entries(n.client?.slots??{}))t[e]??=[],t[e].push(r);return`const slots = {\n${Object.entries(t).map(([e,t])=>{let n=t.map((t,n)=>{let{modulePath:r,exportName:i}=x(t);return`{ id: ${JSON.stringify(`${e}:${n}`)}, load: () => import(${JSON.stringify(r)}).then(module => ({ default: module[${JSON.stringify(i)}] || module.default })) }`});return` ${JSON.stringify(e)}: [${n.join(`, `)}]`}).join(`,
7
+ `)}\n};\nexport default slots;\n`}function C(e){return{routeCacheContext:e,routeGenerationFingerprint:void 0,directoryMetaCache:null,routesDataMap:new Map,collectionsDataMap:new Map,searchDataMap:new Map,serializedSearchData:null,serializedPageSourceData:null}}const w=C();function T(e){return e??w}function E(e){let t=T(e);t.directoryMetaCache=null,t.routeGenerationFingerprint=void 0,t.routeCacheVariant=void 0,t.routesDataMap.clear(),t.collectionsDataMap.clear(),t.searchDataMap.clear(),t.serializedSearchData=null,t.serializedPageSourceData=null}function D(e,t){return(!t.routeCacheContext||t.routeCacheContext.disposed)&&(t.routeCacheContext=i(e),t.routeCacheVariant=void 0,t.routeGenerationFingerprint=void 0,t.routesDataMap.clear(),t.collectionsDataMap.clear(),t.searchDataMap.clear(),t.serializedSearchData=null,t.serializedPageSourceData=null),t.routeCacheContext}async function O(e,t,n,r){let i=T(n),c=D(e,i),l=o(t),u=(r?.fingerprint===l&&c.variants.get(l)===r?r:void 0)??a(c,l);i.routeCacheVariant=u,i.routeGenerationFingerprint=l;let d=await s(e,t,void 0,!1,c,u);i.routesDataMap.clear();for(let e of d)i.routesDataMap.set(e.path,e);k(i)}function k(e){let t=T(e),n=Array.from(t.routesDataMap.values()),r=h(n);t.searchDataMap.clear(),t.serializedSearchData=null,t.serializedPageSourceData=null;for(let e of r)t.searchDataMap.set(e.id,e);t.collectionsDataMap.clear();for(let e of n)if(e.collection){let n={path:e.path,title:e.title,date:e.date,excerpt:e.excerpt,tags:e.tags,author:e.author,coverImage:e.coverImage,filePath:e.filePath,locale:e.locale,version:e.version,frontmatter:e.frontmatter,draft:e.frontmatter?.draft===!0,collection:e.collection};t.collectionsDataMap.set(e.filePath,n)}t.serializedSearchData=JSON.stringify(N(t)),t.serializedPageSourceData=JSON.stringify(P(t))}async function A(e,t,n){let r=T(n);D(e,r);let i=o(t);(r.routesDataMap.size===0||r.routeGenerationFingerprint!==i)&&(r.routesDataMap.clear(),r.collectionsDataMap.clear(),r.searchDataMap.clear(),r.serializedSearchData=null,r.serializedPageSourceData=null,await O(e,t,r))}function j(e){let t=T(e),n={},r=Array.from(t.collectionsDataMap.values()).sort((e,t)=>{let n=e=>{if(!e)return-1/0;let t=new Date(e).getTime();return Number.isFinite(t)?t:-1/0},r=n(e.date),i=n(t.date)-r;return i===0?e.path.localeCompare(t.path):i});for(let e of r){let t=e.collection;t&&(n[t]||(n[t]=[]),n[t].push(e))}return n}function M(e,t=e=>e){let n=Array.from(e.values(),t).sort((e,t)=>{let n=e=>{if(typeof e!=`object`||!e)return String(e);let t=e;return`${String(t.path||``)}\u0000${String(t.id||``)}\u0000${String(t.filePath||``)}`};return n(e).localeCompare(n(t))});return`export default ${JSON.stringify(n)};`}function N(e){return Array.from(T(e).searchDataMap.values()).sort((e,t)=>e.id.localeCompare(t.id))}function P(e){let t=T(e),n={};for(let e of t.routesDataMap.values()){let t=e;t.path&&t._rawContent&&(n[t.path]=t._rawContent)}return Object.fromEntries(Object.entries(n).sort(([e],[t])=>e.localeCompare(t)))}function F(e){let t=T(e);return t.serializedSearchData===null&&(t.serializedSearchData=JSON.stringify(N(t))),t.serializedSearchData}function I(e){let t=T(e);return t.serializedPageSourceData===null&&(t.serializedPageSourceData=JSON.stringify(P(t))),t.serializedPageSourceData}function L(e){return`export default ${JSON.stringify(e)};`}async function R(e,t,n,r,i){let a=T(n);r&&(a.routeCacheContext=r),i&&(a.routeCacheVariant=i);let s=o(t);a.routeGenerationFingerprint!==s&&(a.routesDataMap.clear(),a.collectionsDataMap.clear(),a.searchDataMap.clear(),a.serializedSearchData=null,a.serializedPageSourceData=null);let c=new Map(a.routesDataMap),l=new Map(a.collectionsDataMap),u=new Map(a.searchDataMap);await O(e,t,a);let d={routes:{updated:[],deleted:[]},collections:{updated:[],deleted:[]},search:{updated:[],deleted:[]}};for(let[e,t]of a.routesDataMap){let n=c.get(e);(!n||JSON.stringify(n)!==JSON.stringify(t))&&d.routes.updated.push(g(t))}for(let e of c.keys())a.routesDataMap.has(e)||d.routes.deleted.push(e);for(let[e,t]of a.collectionsDataMap){let n=l.get(e);(!n||JSON.stringify(n)!==JSON.stringify(t))&&d.collections.updated.push(t)}for(let e of l.keys())a.collectionsDataMap.has(e)||d.collections.deleted.push(e);for(let[e,t]of a.searchDataMap){let n=u.get(e);(!n||JSON.stringify(n)!==JSON.stringify(t))&&d.search.updated.push(t)}for(let e of u.keys())a.searchDataMap.has(e)||d.search.deleted.push(e);return d}function z(i,a,o,s,u,d){let f=u?.virtualModuleRegistry??n,p=T(d);return{name:`vite-plugin-boltdocs-virtual-modules`,resolveId(e){if(e.includes(`boltdocs-entry`)||e===`virtual:boltdocs-entry`||e===`boltdocs/entry`||e===`boltdocs-entry`||e===`\0virtual:boltdocs-entry`||e===`\0virtual:boltdocs-entry.tsx`)return`\0virtual:boltdocs-entry.tsx`;if(e===`virtual:boltdocs-client-registry`||e===`\0virtual:boltdocs-client-registry`)return`\0virtual:boltdocs-client-registry`;if(e.includes(`boltdocs-client`)||e===`virtual:boltdocs-client`||e===`boltdocs/client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.mjs`)return`\0virtual:boltdocs-client.mjs`;if(e.startsWith(`\0`)){let t=e.slice(1);if(!t.startsWith(`virtual:boltdocs-`)&&f?.has(t))return e}else if(!e.startsWith(`virtual:boltdocs-`)&&f?.has(e))return`\0${e}`;return e.startsWith(`virtual:boltdocs-`)?`\0${e}`:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(n,u){let d=a(),m=n.startsWith(`\0`)?n.slice(1):n;if(!m.includes(`boltdocs-entry.tsx`)&&!m.includes(`boltdocs-client.mjs`)&&!m.startsWith(`virtual:boltdocs-`)&&f?.has(m)){let e=f?.get(m);if(!e)return null;try{let t=await e.loader();if(typeof t!=`string`)throw Error(`[boltdocs] Plugin virtual module '${m}' loader must return a string source code, got ${typeof t}.`);return t}catch(e){throw Error(`[boltdocs] Plugin virtual module '${m}' failed to load: ${e instanceof Error?e.message:String(e)}`)}}if(n.includes(`boltdocs-entry.tsx`)||n===`\0virtual:boltdocs-entry`){let e=this.environment?.config?.consumer,n=o(),r=e===void 0?!!n?.build?.ssr:e!==`client`;return t({...i,ssr:r,useCompiledPages:n?.command===`build`},d)}if(n.includes(`boltdocs-client.mjs`)||n===`\0virtual:boltdocs-client.ts`||n===`virtual:boltdocs-client`){let t=e,n=t;for(;t!==c.parse(t).root;){if(l.existsSync(c.join(t,`package.json`))&&JSON.parse(l.readFileSync(c.join(t,`package.json`),`utf-8`)).name===`boltdocs`){n=t;break}t=c.dirname(t)}let i=c.join(n,`src/client/index.ts`),a=c.join(n,`dist/client/index.js`);return`export * from '${r(l.existsSync(i)?i:a)}';`}if(!n.startsWith(`\0virtual:boltdocs-`))return;let h=n.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(h===`routes`)return await A(s,d,p),M(p.routesDataMap,g);if(h===`client-registry`)return S(d?.plugins??[]);if(h===`collections`)return await A(s,d,p),L(j(p));if(h===`config`){await A(s,d,p);let e=p.routeCacheVariant?.directoryMeta||{};p.directoryMetaCache=e;let t=[...new Set(Array.from(p.routesDataMap.values()).map(e=>e.collection).filter(e=>!!e))].sort((e,t)=>e.localeCompare(t)),n=d?.collections,r=n?{...n,labels:{...n.labels||{},...Object.fromEntries(t.map(e=>[e,n.labels?.[e]??e]))}}:t.length>0?t:void 0,i={base:d?.base,theme:d?.theme,i18n:d?.i18n,versions:d?.versions,siteUrl:d?.siteUrl,integrations:d?.integrations,collections:r,seo:d?.seo,experimental:d?.experimental,plugins:d?.plugins?.map(b),directoryMeta:e};return`export default ${JSON.stringify(i)};`}if(h===`entry`){let e=this,n=o(),r=e.environment?.config?.consumer,a=r===void 0?!!(u?.ssr??n?.build?.ssr):r!==`client`;return t({...i,ssr:a,useCompiledPages:n?.command===`build`},d)}if(h===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],t=null;for(let n of e){let e=c.resolve(s,`mdx-components.${n}`);if(l.existsSync(e)){t=e;break}}let n={};if(d?.plugins)for(let e of d.plugins)e.components&&Object.assign(n,e.components);let i=Object.entries(n),a=i.map(([e,t],n)=>`import * as _pluginCompMod_${n} from '${t}';`).join(`
8
+ `),o=i.map(([e],t)=>`${JSON.stringify(e)}: _pluginCompMod_${t}[${JSON.stringify(e)}] || Reflect.get(_pluginCompMod_${t}, "default") || _pluginCompMod_${t}`).join(`,
9
+ `);if(t){let e=r(t);return`${a}
10
+ import * as components from '${e}';
11
+ const userMdxComponents = components.default || components;
12
+ const mdxComponents = {
13
+ ${o}${o?`,`:``}
14
+ ...userMdxComponents,
15
+ };
16
+ export default mdxComponents;
17
+ export * from '${e}';`}return`${a}
18
+ const mdxComponents = {
19
+ ${o}
20
+ };
21
+ export default mdxComponents;`}if(h===`layout`){let e=[`tsx`,`jsx`],t=null;for(let n of e){let e=c.resolve(s,`layout.${n}`);if(l.existsSync(e)){t=e;break}}if(t)return`import UserLayout from '${r(t)}';
22
+ 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(h===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let n of e){let e=c.resolve(s,`icons.${n}`);if(l.existsSync(e)){t=e;break}}return t?`import * as icons from '${r(t)}';\nexport default icons;`:`export default {};`}if(h===`search`)return await A(s,d,p),`export default async function fetchSearchData(options = {}) {
23
+ const base = import.meta.env.BASE_URL || '/';
24
+ const origin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';
25
+ const basePath = base.endsWith('/') ? base : base + '/';
26
+ const url = new URL('search.json', new URL(basePath, origin));
27
+ if (options.bustCache) url.searchParams.set('t', String(Date.now()));
28
+ const res = await fetch(url, { cache: options.bustCache ? 'no-store' : 'default' });
29
+ if (!res.ok) throw new Error('Failed to fetch search index');
30
+ return res.json();
31
+ }`;if(h===`page-source`){await A(s,d,p);let e={};for(let t of p.routesDataMap.values())t.path&&t._rawContent&&(e[t.path]=t._rawContent);return`export default async function fetchPageSource(options = {}) {
32
+ const base = import.meta.env.BASE_URL || '/';
33
+ const origin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';
34
+ const basePath = base.endsWith('/') ? base : base + '/';
35
+ const url = new URL('page-source.json', new URL(basePath, origin));
36
+ if (options.bustCache) url.searchParams.set('t', String(Date.now()));
37
+ const res = await fetch(url, { cache: options.bustCache ? 'no-store' : 'default' });
38
+ if (!res.ok) throw new Error('Failed to fetch page source');
39
+ return res.json();
40
+ }`}if(h===`client`){let t=e,n=``;for(;t&&t!==c.parse(t).root;){let e=c.join(t,`src/client/index.ts`),i=c.join(t,`dist/client/index.mjs`),a=c.join(t,`client/index.ts`);if(l.existsSync(e)){n=r(e);break}if(l.existsSync(i)){n=r(i);break}if(l.existsSync(a)){n=r(a);break}t=c.dirname(t)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${e}`);return`export * from '${n}';`}}}}export{R as computeFrontmatterDelta,C as createVirtualModuleState,z as createVirtualModulesPlugin,I as getPageSourceJsonExport,F as getSearchJsonExport,E as invalidateDirectoryMetaCache};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boltdocs",
3
- "version": "3.3.4",
3
+ "version": "3.3.6",
4
4
  "description": "A lightweight documentation generator for React projects.",
5
5
  "main": "dist/node/index.mjs",
6
6
  "module": "dist/node/index.mjs",
@@ -101,6 +101,7 @@
101
101
  "lru-cache": "^11.3.6",
102
102
  "picomatch": "^4.0.4",
103
103
  "react-helmet-async": "^2.0.1",
104
+ "react-refresh": "^0.17.0",
104
105
  "scroll-into-view-if-needed": "3.1.0",
105
106
  "semver": "^7.7.4",
106
107
  "shiki": "3.23.0",
@@ -109,8 +110,8 @@
109
110
  "zod": "4.3.6",
110
111
  "@bdocs/parser": "1.2.0",
111
112
  "@bdocs/plugin-image-optimizer": "0.2.2",
112
- "@bdocs/processor-satteri": "0.3.3",
113
- "@bdocs/ssg": "0.4.2",
113
+ "@bdocs/processor-satteri": "0.3.4",
114
+ "@bdocs/ssg": "0.4.4",
114
115
  "@bdocs/unist-utils": "0.2.1"
115
116
  },
116
117
  "peerDependencies": {
@@ -1,7 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./errors-vKw8CkiX.cjs`),n=require(`./config-files-ph2ZtHWl.cjs`);let r=require(`node:path`);r=e.r(r);let i=require(`node:fs`);i=e.r(i);let a=require(`node:crypto`);a=e.r(a);let o=require(`zod`),s=require(`@bdocs/dui`);function c(e){return e}const l=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()}),u=o.z.object({processor:o.z.enum([`satteri`]).default(`satteri`)}),d=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),clientEntry:o.z.string().optional(),remarkPlugins:o.z.array(o.z.unknown()).optional(),rehypePlugins:o.z.array(o.z.unknown()).optional(),vitePlugins:o.z.array(o.z.unknown()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),codeHighlighter:o.z.unknown().optional(),metadata:o.z.record(o.z.string(),o.z.unknown()).optional(),css:o.z.object({cssFiles:o.z.array(o.z.string()).optional(),headStyles:o.z.array(o.z.string()).optional(),postcssPlugins:o.z.array(o.z.unknown()).optional(),preprocessorOptions:o.z.record(o.z.string(),o.z.unknown()).optional()}).optional(),middleware:o.z.array(o.z.object({name:o.z.string().optional(),enforce:o.z.enum([`pre`,`post`]).optional()}).passthrough()).optional(),hooks:o.z.record(o.z.string(),o.z.unknown()).optional()}),f=o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),description:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),logo:o.z.union([o.z.string(),o.z.object({dark:o.z.string(),light:o.z.string(),alt:o.z.string().optional(),width:o.z.number().optional(),height:o.z.number().optional()})]).optional(),navbar:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string(),items:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string()})).optional()})).optional(),sidebar:o.z.record(o.z.string(),o.z.array(o.z.object({text:o.z.string(),link:o.z.string()}))).optional(),sidebarGroups:o.z.record(o.z.string(),o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),icon:o.z.string().optional()})).optional(),socialLinks:o.z.array(l).optional(),editLink:o.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.z.string().url().optional(),version:o.z.string().max(50).optional(),githubRepo:o.z.string().max(100).optional(),favicon:o.z.string().optional(),tabs:o.z.array(o.z.object({id:o.z.string(),text:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),icon:o.z.string().optional()})).optional(),codeTheme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional(),codeHighlighting:o.z.union([o.z.string(),o.z.object({engine:o.z.union([o.z.string(),o.z.unknown(),o.z.function()]).optional(),theme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional(),options:o.z.record(o.z.string(),o.z.unknown()).optional()})]).optional()}),p=o.z.union([o.z.string(),o.z.object({rules:o.z.array(o.z.object({userAgent:o.z.string(),allow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional(),disallow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional()})).optional(),sitemaps:o.z.array(o.z.string().url()).optional()})]),m=o.z.object({defaultLocale:o.z.string(),locales:o.z.union([o.z.record(o.z.string(),o.z.string()),o.z.array(o.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.z.record(o.z.string(),o.z.object({label:o.z.string().optional(),direction:o.z.enum([`ltr`,`rtl`]).optional(),htmlLang:o.z.string().optional(),calendar:o.z.string().optional()})).optional()}),h=o.z.object({defaultVersion:o.z.string(),prefix:o.z.string().optional(),versions:o.z.array(o.z.object({label:o.z.string(),path:o.z.string()}))}),g=o.z.object({headers:o.z.record(o.z.string(),o.z.string()).optional(),enableCSP:o.z.boolean().optional(),customHeaders:o.z.record(o.z.string(),o.z.string()).optional()}),_=o.z.object({google:o.z.string().optional(),bing:o.z.string().optional(),yandex:o.z.string().optional(),pinterest:o.z.string().optional(),facebook:o.z.string().optional()}),v=o.z.lazy(()=>o.z.union([o.z.string(),o.z.number(),o.z.boolean(),o.z.null(),o.z.array(v),o.z.record(o.z.string(),v)])),y=o.z.union([o.z.record(o.z.string(),v),o.z.array(o.z.record(o.z.string(),v))]),b=o.z.object({metatags:o.z.record(o.z.string(),o.z.string()).optional(),indexing:o.z.enum([`all`,`public`]).optional(),thumbnails:o.z.object({background:o.z.string().optional()}).optional(),verification:_.optional(),structuredData:y.optional()}),x=o.z.object({viewTransitions:o.z.union([o.z.boolean(),o.z.object({enabled:o.z.boolean().optional(),types:o.z.array(o.z.string()).optional()})]).optional(),fileRouting:o.z.boolean().optional()}),S=o.z.object({measurementId:o.z.string().min(1,`Measurement ID is required for GA4`),debug:o.z.boolean().optional(),anonymizeIp:o.z.boolean().optional(),sendPageView:o.z.boolean().optional(),cookieFlags:o.z.string().optional(),autoTrack:o.z.object({pageViews:o.z.boolean().optional(),downloads:o.z.boolean().optional(),externalLinks:o.z.boolean().optional(),search:o.z.boolean().optional()}).optional()}),C=o.z.object({tagId:o.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.z.string().optional(),preview:o.z.string().optional()}),w=o.z.object({appId:o.z.string().min(1,`Algolia App ID is required`),apiKey:o.z.string().min(1,`Algolia API Key is required`),indexName:o.z.string().min(1,`Algolia Index Name is required`)}),T=o.z.object({repo:o.z.string().min(1,`Giscus repository is required`),repoId:o.z.string().min(1,`Giscus repository ID is required`),category:o.z.string().optional(),categoryId:o.z.string().optional(),mapping:o.z.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),reactionsEnabled:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),emitMetadata:o.z.union([o.z.enum([`0`,`1`]),o.z.boolean()]).optional(),inputPosition:o.z.enum([`top`,`bottom`]).optional(),theme:o.z.string().optional(),darkTheme:o.z.string().optional(),lang:o.z.string().optional(),loading:o.z.enum([`lazy`,`eager`]).optional()}),E=o.z.object({enabled:o.z.boolean(),owner:o.z.string().min(1,`GitHub owner is required`),repo:o.z.string().min(1,`GitHub repository name is required`),categorySlug:o.z.string().optional(),endpoint:o.z.string().optional()}),D=o.z.object({analytics:o.z.boolean().optional(),speedInsights:o.z.boolean().optional()}),O=o.z.object({apiKey:o.z.string().min(1,`API key is required for PostHog`),host:o.z.string().url().optional(),capturePageview:o.z.boolean().optional(),capturePageleave:o.z.boolean().optional(),sessionRecording:o.z.boolean().optional(),autocapture:o.z.boolean().optional()}),k=o.z.object({ga4:S.optional(),gtm:C.optional(),vercel:D.optional(),posthog:O.optional()}),A=o.z.object({algolia:w.optional()}),j=o.z.object({giscus:T.optional(),custom:E.optional()}),M=o.z.object({analytics:k.optional(),search:A.optional(),feedback:j.optional()}),N=o.z.object({criticalCss:o.z.enum([`zig-critters`,`beasties`,`none`]).optional(),criticalCssMaxSize:o.z.number().int().min(0).optional()}),P=o.z.object({labels:o.z.record(o.z.string(),o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())])).optional(),positions:o.z.record(o.z.string(),o.z.number()).optional(),postsPerPage:o.z.number().int().positive().optional(),defaultCollection:o.z.string().optional(),dateFormat:o.z.string().optional(),sortBy:o.z.enum([`date`,`title`,`sidebarPosition`]).optional()}),F=o.z.object({visible:o.z.boolean().optional(),environments:o.z.array(o.z.string()).optional()}),I=o.z.object({turbo:o.z.boolean().optional(),siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:f.optional(),i18n:m.optional(),versions:h.optional(),mdx:u.optional(),ssg:N.optional(),plugins:o.z.array(d).optional(),collections:P.optional(),robots:p.optional(),security:g.optional(),seo:b.optional(),integrations:M.optional(),drafts:F.optional(),experimental:x.optional(),aliases:o.z.custom().optional(),featureFlags:o.z.record(o.z.string(),o.z.union([o.z.boolean(),o.z.string()])).optional(),vite:o.z.custom().optional()}),L=new Map;function R(e,t,n,r){return`${e}::${t}::${n}::${r}`}function z(e){return r.default.join(e,`.boltdocs`,`cache`,`config.json`)}function B(e,t,n,r,i){return a.default.createHash(`sha256`).update(`${e}:${t}:${n}:${r}:${i}`).digest(`hex`)}function V(e,t,n){let a=z(e);if(!i.default.existsSync(a))return null;try{let o=i.default.readFileSync(a,`utf-8`),s=JSON.parse(o),c=r.default.resolve(e,s.filename);if(!i.default.existsSync(c))return null;let l=i.default.statSync(c);if(B(s.filename,l.mtimeMs,l.size,t,n)!==B(s.filename,s.mtimeMs,s.size,s.command,s.mode))return null;let u=I.safeParse(s.config);return u.success?{config:u.data,configFile:c}:null}catch{return null}}function H(e,t,n,a,o,s,c){try{let l=z(e);i.default.mkdirSync(r.default.dirname(l),{recursive:!0});let u={filename:t,mtimeMs:n,size:a,command:o,mode:s,config:{...c,plugins:[]}};i.default.writeFileSync(l,JSON.stringify(u),`utf-8`)}catch(e){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] Failed to write config cache:`,e)}}async function U(e,t){let{createJiti:n}=await import(`jiti`),r=await n(t,{interopDefault:!0}).import(e);return r.default??r.config??r}async function W(e,a=process.cwd(),o=`serve`,c=`development`){let l=a,u=R(e,l,o,c);{let e=L.get(u);if(e)return e}let d=V(l,o,c);if(d){try{let e=await U(d.configFile,l);e?.plugins&&(d.config.plugins=e.plugins)}catch{}return L.set(u,d.config),d.config}let f={docsDir:r.default.resolve(l,e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},p={},m=null;for(let e of n.t){let t=r.default.resolve(l,e);if(i.default.existsSync(t))try{let n;try{n=await U(t,l)}catch(r){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] jiti config load failed for ${e}, falling back to Vite: ${r instanceof Error?r.message:String(r)}`);let{loadConfigFromFile:i}=await import(`vite`);n=(await i({command:o,mode:c},t,l))?.config}if(n){p=n;let r=i.default.statSync(t);m={filename:e,mtimeMs:r.mtimeMs,size:r.size};break}}catch(t){t instanceof Error&&(console.error(`\x1b[31m[boltdocs] ✖ Failed to load config from ${e}: ${t.message}\x1b[0m`),(0,s.warn)(`Failed to load config from ${e}: ${t.message}`))}}let h={title:p.title,description:p.description,logo:p.logo,favicon:p.favicon,navbar:p.navbar,sidebar:p.sidebar,sidebarGroups:p.theme?.sidebarGroups,socialLinks:p.socialLinks,githubRepo:p.githubRepo,tabs:p.tabs,codeTheme:p.codeTheme,codeHighlighting:p.theme?.codeHighlighting,communityHelp:p.communityHelp,version:p.version,editLink:p.editLink,...p.theme||{}},g=Object.fromEntries(Object.entries(h).filter(([e,t])=>t!==void 0));g.navbar&&=g.navbar.map(e=>({label:e.label||``,href:e.href||``,items:e.items}));let _={docsDir:r.default.resolve(l,p.docsDir||e),theme:{...f.theme,...g},i18n:p.i18n?{...p.i18n,locales:Array.isArray(p.i18n.locales)?Object.fromEntries(p.i18n.locales.map(e=>[e,e])):p.i18n.locales}:void 0,versions:p.versions,siteUrl:p.siteUrl,base:p.base,ssg:p.ssg,seo:p.seo,plugins:p.plugins||[],robots:p.robots,security:p.security,integrations:p.integrations,experimental:p.experimental,featureFlags:p.featureFlags,aliases:p.aliases,drafts:p.drafts,collections:p.collections,vite:p.vite},v=I.safeParse(_);if(!v.success)throw new t.r(`Invalid Boltdocs configuration:\n${v.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
- `)}`);let y=v.data;return m&&H(l,m.filename,m.mtimeMs,m.size,o,c,y),L.set(u,y),y}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return W}});
@@ -1,7 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{t as e}from"./chunk-BFSpntXv.mjs";import{r as t}from"./errors-N-b6Sn2G.mjs";import{t as n}from"./config-files-DfwZ3Wot.mjs";import r from"node:path";import i from"node:fs";import a from"node:crypto";import{z as o}from"zod";import{warn as s}from"@bdocs/dui";function c(e){return e}const l=o.object({icon:o.string().max(50),link:o.string().url()}),u=o.object({processor:o.enum([`satteri`]).default(`satteri`)}),d=o.object({name:o.string(),enforce:o.enum([`pre`,`post`]).optional(),version:o.string().optional(),boltdocsVersion:o.string().optional(),clientEntry:o.string().optional(),remarkPlugins:o.array(o.unknown()).optional(),rehypePlugins:o.array(o.unknown()).optional(),vitePlugins:o.array(o.unknown()).optional(),components:o.record(o.string(),o.string()).optional(),codeHighlighter:o.unknown().optional(),metadata:o.record(o.string(),o.unknown()).optional(),css:o.object({cssFiles:o.array(o.string()).optional(),headStyles:o.array(o.string()).optional(),postcssPlugins:o.array(o.unknown()).optional(),preprocessorOptions:o.record(o.string(),o.unknown()).optional()}).optional(),middleware:o.array(o.object({name:o.string().optional(),enforce:o.enum([`pre`,`post`]).optional()}).passthrough()).optional(),hooks:o.record(o.string(),o.unknown()).optional()}),f=o.object({title:o.union([o.string(),o.record(o.string(),o.string())]).optional(),description:o.union([o.string(),o.record(o.string(),o.string())]).optional(),logo:o.union([o.string(),o.object({dark:o.string(),light:o.string(),alt:o.string().optional(),width:o.number().optional(),height:o.number().optional()})]).optional(),navbar:o.array(o.object({label:o.union([o.string(),o.record(o.string(),o.string())]),href:o.string(),items:o.array(o.object({label:o.union([o.string(),o.record(o.string(),o.string())]),href:o.string()})).optional()})).optional(),sidebar:o.record(o.string(),o.array(o.object({text:o.string(),link:o.string()}))).optional(),sidebarGroups:o.record(o.string(),o.object({title:o.union([o.string(),o.record(o.string(),o.string())]).optional(),icon:o.string().optional()})).optional(),socialLinks:o.array(l).optional(),editLink:o.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.string().url().optional(),version:o.string().max(50).optional(),githubRepo:o.string().max(100).optional(),favicon:o.string().optional(),tabs:o.array(o.object({id:o.string(),text:o.union([o.string(),o.record(o.string(),o.string())]),icon:o.string().optional()})).optional(),codeTheme:o.union([o.string(),o.object({light:o.string(),dark:o.string()})]).optional(),codeHighlighting:o.union([o.string(),o.object({engine:o.union([o.string(),o.unknown(),o.function()]).optional(),theme:o.union([o.string(),o.object({light:o.string(),dark:o.string()})]).optional(),options:o.record(o.string(),o.unknown()).optional()})]).optional()}),p=o.union([o.string(),o.object({rules:o.array(o.object({userAgent:o.string(),allow:o.union([o.string(),o.array(o.string())]).optional(),disallow:o.union([o.string(),o.array(o.string())]).optional()})).optional(),sitemaps:o.array(o.string().url()).optional()})]),m=o.object({defaultLocale:o.string(),locales:o.union([o.record(o.string(),o.string()),o.array(o.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.record(o.string(),o.object({label:o.string().optional(),direction:o.enum([`ltr`,`rtl`]).optional(),htmlLang:o.string().optional(),calendar:o.string().optional()})).optional()}),h=o.object({defaultVersion:o.string(),prefix:o.string().optional(),versions:o.array(o.object({label:o.string(),path:o.string()}))}),g=o.object({headers:o.record(o.string(),o.string()).optional(),enableCSP:o.boolean().optional(),customHeaders:o.record(o.string(),o.string()).optional()}),_=o.object({google:o.string().optional(),bing:o.string().optional(),yandex:o.string().optional(),pinterest:o.string().optional(),facebook:o.string().optional()}),v=o.lazy(()=>o.union([o.string(),o.number(),o.boolean(),o.null(),o.array(v),o.record(o.string(),v)])),y=o.union([o.record(o.string(),v),o.array(o.record(o.string(),v))]),b=o.object({metatags:o.record(o.string(),o.string()).optional(),indexing:o.enum([`all`,`public`]).optional(),thumbnails:o.object({background:o.string().optional()}).optional(),verification:_.optional(),structuredData:y.optional()}),x=o.object({viewTransitions:o.union([o.boolean(),o.object({enabled:o.boolean().optional(),types:o.array(o.string()).optional()})]).optional(),fileRouting:o.boolean().optional()}),S=o.object({measurementId:o.string().min(1,`Measurement ID is required for GA4`),debug:o.boolean().optional(),anonymizeIp:o.boolean().optional(),sendPageView:o.boolean().optional(),cookieFlags:o.string().optional(),autoTrack:o.object({pageViews:o.boolean().optional(),downloads:o.boolean().optional(),externalLinks:o.boolean().optional(),search:o.boolean().optional()}).optional()}),C=o.object({tagId:o.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.string().optional(),preview:o.string().optional()}),w=o.object({appId:o.string().min(1,`Algolia App ID is required`),apiKey:o.string().min(1,`Algolia API Key is required`),indexName:o.string().min(1,`Algolia Index Name is required`)}),T=o.object({repo:o.string().min(1,`Giscus repository is required`),repoId:o.string().min(1,`Giscus repository ID is required`),category:o.string().optional(),categoryId:o.string().optional(),mapping:o.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),reactionsEnabled:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),emitMetadata:o.union([o.enum([`0`,`1`]),o.boolean()]).optional(),inputPosition:o.enum([`top`,`bottom`]).optional(),theme:o.string().optional(),darkTheme:o.string().optional(),lang:o.string().optional(),loading:o.enum([`lazy`,`eager`]).optional()}),E=o.object({enabled:o.boolean(),owner:o.string().min(1,`GitHub owner is required`),repo:o.string().min(1,`GitHub repository name is required`),categorySlug:o.string().optional(),endpoint:o.string().optional()}),D=o.object({analytics:o.boolean().optional(),speedInsights:o.boolean().optional()}),O=o.object({apiKey:o.string().min(1,`API key is required for PostHog`),host:o.string().url().optional(),capturePageview:o.boolean().optional(),capturePageleave:o.boolean().optional(),sessionRecording:o.boolean().optional(),autocapture:o.boolean().optional()}),k=o.object({ga4:S.optional(),gtm:C.optional(),vercel:D.optional(),posthog:O.optional()}),A=o.object({algolia:w.optional()}),j=o.object({giscus:T.optional(),custom:E.optional()}),M=o.object({analytics:k.optional(),search:A.optional(),feedback:j.optional()}),N=o.object({criticalCss:o.enum([`zig-critters`,`beasties`,`none`]).optional(),criticalCssMaxSize:o.number().int().min(0).optional()}),P=o.object({labels:o.record(o.string(),o.union([o.string(),o.record(o.string(),o.string())])).optional(),positions:o.record(o.string(),o.number()).optional(),postsPerPage:o.number().int().positive().optional(),defaultCollection:o.string().optional(),dateFormat:o.string().optional(),sortBy:o.enum([`date`,`title`,`sidebarPosition`]).optional()}),F=o.object({visible:o.boolean().optional(),environments:o.array(o.string()).optional()}),I=o.object({turbo:o.boolean().optional(),siteUrl:o.string().url().optional(),docsDir:o.string().optional(),base:o.string().optional(),theme:f.optional(),i18n:m.optional(),versions:h.optional(),mdx:u.optional(),ssg:N.optional(),plugins:o.array(d).optional(),collections:P.optional(),robots:p.optional(),security:g.optional(),seo:b.optional(),integrations:M.optional(),drafts:F.optional(),experimental:x.optional(),aliases:o.custom().optional(),featureFlags:o.record(o.string(),o.union([o.boolean(),o.string()])).optional(),vite:o.custom().optional()});var L=e({resolveConfig:()=>G});const R=new Map;function z(e,t,n,r){return`${e}::${t}::${n}::${r}`}function B(e){return r.join(e,`.boltdocs`,`cache`,`config.json`)}function V(e,t,n,r,i){return a.createHash(`sha256`).update(`${e}:${t}:${n}:${r}:${i}`).digest(`hex`)}function H(e,t,n){let a=B(e);if(!i.existsSync(a))return null;try{let o=i.readFileSync(a,`utf-8`),s=JSON.parse(o),c=r.resolve(e,s.filename);if(!i.existsSync(c))return null;let l=i.statSync(c);if(V(s.filename,l.mtimeMs,l.size,t,n)!==V(s.filename,s.mtimeMs,s.size,s.command,s.mode))return null;let u=I.safeParse(s.config);return u.success?{config:u.data,configFile:c}:null}catch{return null}}function U(e,t,n,a,o,s,c){try{let l=B(e);i.mkdirSync(r.dirname(l),{recursive:!0});let u={filename:t,mtimeMs:n,size:a,command:o,mode:s,config:{...c,plugins:[]}};i.writeFileSync(l,JSON.stringify(u),`utf-8`)}catch(e){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] Failed to write config cache:`,e)}}async function W(e,t){let{createJiti:n}=await import(`jiti`),r=await n(t,{interopDefault:!0}).import(e);return r.default??r.config??r}async function G(e,a=process.cwd(),o=`serve`,c=`development`){let l=a,u=z(e,l,o,c);{let e=R.get(u);if(e)return e}let d=H(l,o,c);if(d){try{let e=await W(d.configFile,l);e?.plugins&&(d.config.plugins=e.plugins)}catch{}return R.set(u,d.config),d.config}let f={docsDir:r.resolve(l,e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},p={},m=null;for(let e of n){let t=r.resolve(l,e);if(i.existsSync(t))try{let n;try{n=await W(t,l)}catch(r){process.env.BOLTDOCS_DEBUG===`true`&&console.warn(`[boltdocs] jiti config load failed for ${e}, falling back to Vite: ${r instanceof Error?r.message:String(r)}`);let{loadConfigFromFile:i}=await import(`vite`);n=(await i({command:o,mode:c},t,l))?.config}if(n){p=n;let r=i.statSync(t);m={filename:e,mtimeMs:r.mtimeMs,size:r.size};break}}catch(t){t instanceof Error&&(console.error(`\x1b[31m[boltdocs] ✖ Failed to load config from ${e}: ${t.message}\x1b[0m`),s(`Failed to load config from ${e}: ${t.message}`))}}let h={title:p.title,description:p.description,logo:p.logo,favicon:p.favicon,navbar:p.navbar,sidebar:p.sidebar,sidebarGroups:p.theme?.sidebarGroups,socialLinks:p.socialLinks,githubRepo:p.githubRepo,tabs:p.tabs,codeTheme:p.codeTheme,codeHighlighting:p.theme?.codeHighlighting,communityHelp:p.communityHelp,version:p.version,editLink:p.editLink,...p.theme||{}},g=Object.fromEntries(Object.entries(h).filter(([e,t])=>t!==void 0));g.navbar&&=g.navbar.map(e=>({label:e.label||``,href:e.href||``,items:e.items}));let _={docsDir:r.resolve(l,p.docsDir||e),theme:{...f.theme,...g},i18n:p.i18n?{...p.i18n,locales:Array.isArray(p.i18n.locales)?Object.fromEntries(p.i18n.locales.map(e=>[e,e])):p.i18n.locales}:void 0,versions:p.versions,siteUrl:p.siteUrl,base:p.base,ssg:p.ssg,seo:p.seo,plugins:p.plugins||[],robots:p.robots,security:p.security,integrations:p.integrations,experimental:p.experimental,featureFlags:p.featureFlags,aliases:p.aliases,drafts:p.drafts,collections:p.collections,vite:p.vite},v=I.safeParse(_);if(!v.success)throw new t(`Invalid Boltdocs configuration:\n${v.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
7
- `)}`);let y=v.data;return m&&U(l,m.filename,m.mtimeMs,m.size,o,c,y),R.set(u,y),y}export{c as i,G as n,d as r,L as t};
@@ -1,23 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./utils-ej6_SjIZ.cjs`),n=require(`./pages-external-DPiPFxxP.cjs`),r=require(`./plugin-context-BxF88sW4.cjs`),i=require(`./node/cache.cjs`),a=require(`./routes-C0kb4ue6.cjs`),o=require(`./config-CrsQJHQz.cjs`),s=require(`./registry-DLJIooEu.cjs`),c=require(`./types-generator-C83Iy6X5.cjs`),l=require(`./resolve-C9jGArE_.cjs`),u=require(`./handler-Ch-Q9NAB.cjs`),d=require(`./adapters-DwDTQoCG.cjs`);let f=require(`node:path`);f=e.r(f);let p=require(`node:fs`);p=e.r(p);let m=require(`node:crypto`);m=e.r(m);let h=require(`zod`),g=require(`@bdocs/dui`);g=e.r(g);let _=require(`semver`);_=e.r(_);let v=require(`@bdocs/ssg/node`),y=require(`@bdocs/unist-utils`);function b(){return{name:`boltdocs-ssr-dirname-polyfill`,config:(e,{isSsrBuild:t})=>t?{define:{__dirname:`import.meta.dirname`}}:{}}}const x=new Set([`boltdocs/entry`,`boltdocs/client`,`boltdocs/primitives`,`boltdocs/mdx`,`boltdocs/client/router`,`use-sync-external-store/shim/index.js`,`use-sync-external-store/shim`,`use-sync-external-store`]);function S(e){return e?Array.isArray(e)?[...e]:Object.entries(e).map(([e,t])=>({find:e,replacement:t})):[]}function C(e,t){typeof t.find==`string`&&x.has(t.find)&&e.some(e=>e.find===t.find)||e.push({...t,...typeof t.replacement==`string`?{replacement:t.replacement}:{}})}function ee({root:e,clientSourceRoot:t,aliases:n}){let r=[{find:`boltdocs/entry`,replacement:f.default.resolve(e,`boltdocs-entry.tsx`)},{find:`boltdocs/client`,replacement:f.default.resolve(e,`boltdocs-client.mjs`)},...t?[{find:`boltdocs/primitives`,replacement:f.default.join(t,`primitives.ts`)},{find:`boltdocs/mdx`,replacement:f.default.join(t,`mdx.ts`)},{find:`boltdocs/client/router`,replacement:f.default.join(t,`router/index.ts`)}]:[],{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`}].map(e=>({...e,replacement:e.replacement}));for(let t of S(n))C(r,{...t,replacement:typeof t.replacement==`string`&&t.replacement.startsWith(`.`)?f.default.resolve(e,t.replacement):t.replacement});return r}function w(e){return e}function T(e){let t=[];if(e.website&&t.push(E(e.website)),e.article&&t.push(O(e.article)),e.breadcrumbs?.length&&t.push(k(e.breadcrumbs)),e.additional&&t.push(...Array.isArray(e.additional)?e.additional:[e.additional]),t.length===0)throw Error(`createStructuredData() requires at least one of website, article, breadcrumbs, or additional`);return t.length===1?t[0]:t}function E(e){let t={"@context":`https://schema.org`,"@type":`WebSite`,name:e.name,url:e.url};return e.description&&(t.description=e.description),e.searchUrl&&(t.potentialAction={"@type":`SearchAction`,target:`${e.searchUrl}{search_term_string}`,"query-input":`required name=search_term_string`}),t}function D(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))throw TypeError(`Invalid ${t} value: ${String(e)}`);return n.toISOString()}function O(e){let t={"@context":`https://schema.org`,"@type":`Article`,headline:e.headline,url:e.url};return e.description&&(t.description=e.description),e.datePublished&&(t.datePublished=D(e.datePublished,`datePublished`)),e.dateModified&&(t.dateModified=D(e.dateModified,`dateModified`)),e.image&&(t.image=e.image),e.author&&(t.author=typeof e.author==`string`?{"@type":`Person`,name:e.author}:{"@type":`Person`,...e.author}),t}function k(e){return{"@context":`https://schema.org`,"@type":`BreadcrumbList`,itemListElement:e.map((e,t)=>({"@type":`ListItem`,position:t+1,name:e.name,item:e.url}))}}var A=class extends Error{name=this.constructor.name;constructor(e,t,n){super(`[plugin:${e}] ${t}`,n),this.pluginName=e}},j=class extends A{constructor(e,t){super(e,`Validation failed: ${t}`)}},M=class extends A{constructor(e,t){super(e,`Compatibility error: ${t}`)}},N=class extends A{constructor(e,t,n){super(e,`Error in hook '${t}': ${n.message}`,{cause:n}),this.hookName=t}},P=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 te=o.n.extend({version:h.z.string().optional(),boltdocsVersion:h.z.string().optional(),css:h.z.object({cssFiles:h.z.array(h.z.string()).optional(),headStyles:h.z.array(h.z.string()).optional(),postcssPlugins:h.z.array(h.z.any()).optional(),preprocessorOptions:h.z.record(h.z.string(),h.z.any()).optional()}).optional(),hooks:h.z.object({beforeBuild:h.z.custom(e=>typeof e==`function`).optional(),afterBuild:h.z.custom(e=>typeof e==`function`).optional(),beforeDev:h.z.custom(e=>typeof e==`function`).optional(),afterDev:h.z.custom(e=>typeof e==`function`).optional(),buildEnd:h.z.custom(e=>typeof e==`function`).optional(),transformSource:h.z.custom(e=>typeof e==`function`).optional(),transformMdx:h.z.custom(e=>typeof e==`function`).optional(),transformHtml:h.z.custom(e=>typeof e==`function`).optional()}).passthrough().optional()});function F(e,t){let n=[],r=new Set;for(let i of e){let e=te.safeParse(i);if(!e.success)throw new j(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 j(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!_.default.satisfies(t,a.boltdocsVersion))throw new M(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(`..`))throw new j(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`);if(f.default.isAbsolute(t))throw new j(a.name,`Component '${e}' has an invalid path: absolute paths are not allowed.`)}a.codeHighlighter&&s.l(a.name,a.codeHighlighter),n.push(a)}return n}const I=new Map;function L(e,t=process.cwd()){let n=e.plugins||[];for(let e of n)if(e.name&&!I.has(e.name))try{let n=l.t(e.name,t)?.pkg,r=n&&typeof n.scripts==`object`?n.scripts:{},i=!!(r.preinstall||r.postinstall||r.install);i&&(0,g.warn)(`💡 ${g.colors.yellow(g.colors.bold(`Nota de seguridad:`))} El plugin ${g.colors.cyan(e.name)} ejecuta scripts nativos al instalarse. Corre ${g.colors.bold(`boltdocs audit`)} para un análisis detallado.`),I.set(e.name,i)}catch{I.set(e.name,!1)}}var R=class{name=`ConfigResolve`;async execute(e){e.config=await o.t(`docs`,e.root,`build`,`production`),e.allCached||L(e.config,e.root);let t=f.default.resolve(e.root,e.config.docsDir||`docs`);e.docsDir=t;let r=await a.t(t,e.config,void 0,!1);e.routes=r;let i=r.map(e=>e.path),s=(e.config.base||`/docs`).replace(/\/$/,``);i.includes(s)||i.push(s);let c=n.n(t,e.config);for(let e of c)i.includes(e)||i.push(e);e.routePaths=i,e.viteConfig=await $(e.root,`production`,e.config,{routes:r,skipTypes:!0,skipLinkTree:!0})}},z=class{name=`RouteGenerate`;async execute(e){if(!e.routes)throw Error(`Routes not generated by ConfigResolveStep. Verify pipeline order.`)}};const B=h.z.object({title:h.z.string().optional(),description:h.z.string().optional(),canonical:h.z.string().url().optional(),robots:h.z.string().optional(),noindex:h.z.boolean().optional(),"og:title":h.z.string().optional(),"og:description":h.z.string().optional(),"og:image":h.z.string().optional(),"og:type":h.z.string().optional(),"og:url":h.z.string().url().optional()});var V=class{name=`SEOValidate`;async execute(e){if(!e.routes||!e.config)throw Error(`Routes or Config not initialized.`);let t=e.config?.siteUrl,n=e.routes;for(let r of n){let n=r.seo||{},i=n.canonical||(t?`${t.replace(/\/$/,``)}${r.path}`:void 0),a=n[`og:url`]||i||void 0,o=e.config?.seo?.thumbnails?.background??void 0,s=n[`og:image`]||r.coverImage||o;s&&t&&!/^https?:\/\/|^\/\//.test(s)&&(s=`${t.endsWith(`/`)?t.slice(0,-1):t}${s.startsWith(`/`)?s:`/${s}`}`);let c={...n};i&&(c.canonical=i),a&&(c[`og:url`]=a),s&&(c[`og:image`]=s),!c[`og:title`]&&r.title&&(c[`og:title`]=String(r.title)),!c[`og:description`]&&r.description&&(c[`og:description`]=String(r.description));let l=B.safeParse(c);l.success||(0,g.warn)(`[SEOValidate] Validation issues on route "${r.path}": ${l.error.message}`),r.title||(0,g.warn)(`[SEOValidate] Route "${r.path}" is missing a title.`),r.seo=c}e.ssgRoutes=n}},H=class{name=`TypeGenerate`;async execute(e){if(!e.config||!e.docsDir||!e.routePaths)throw Error(`Config, docs directory, or route paths not initialized. Verify pipeline order.`);c.t(e.config,`docs`,e.root,e.routePaths),c.r(e.routePaths,e.root),e.typesGenerated=!0}},U=class{name=`SSGBuild`;async execute(e){if(!e.routes||!e.viteConfig)throw Error(`Routes or ViteConfig not initialized.`);let t={};for(let n of e.routes)if(n.path&&n.componentPath){t[n.path]=n.componentPath;let e=n.path.replace(/\/$/,``);t[e]=n.componentPath}let n=[];await(0,v.build)({entry:`boltdocs/entry`,routeToSourceFileMap:t,cacheDir:f.default.resolve(e.root,`.boltdocs/build`),onStep:e=>{n.push(e)}},e.viteConfig),e.ssgSubSteps=n,e.outDir=e.viteConfig.build?.outDir||`dist`}};function W(e,n){let r=(n.siteUrl||``).replace(/\/$/,``);if(!r)return``;let i=n.seo?.indexing!==`all`&&n.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
7
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
8
- ${e.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(i&&e.seo?.index,!0)).map(e=>`${r}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`).sort((e,t)=>e<t?-1:e>t?1:0).map(e=>` <url>
9
- <loc>${t.r(e)}</loc>
10
- <changefreq>weekly</changefreq>
11
- <priority>0.7</priority>
12
- </url>`).join(`
13
- `)}
14
- </urlset>`}function ne(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(`
15
- `);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(`
16
- `)+`
17
- `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
18
- `)+`
19
- `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
20
-
21
- `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
22
- `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
23
- `)}var re=class{name=`SEOWrite`;async execute(e){if(!e.ssgRoutes||!e.config||!e.outDir)throw Error(`SSG Routes, Config, or OutDir not initialized.`);let t=W(e.ssgRoutes,e.config),n=e.docsDir||f.default.resolve(e.root,`docs`),r=f.default.resolve(e.root,e.outDir);t&&p.default.writeFileSync(f.default.join(r,`sitemap.xml`),t,`utf-8`);let i=ne(e.config);if(p.default.writeFileSync(f.default.join(r,`robots.txt`),i,`utf-8`),e.config.plugins&&e.config.plugins.length>0){let{PluginLifecycleManager:t}=await Promise.resolve().then(()=>require(`./plugin-lifecycle-BjMclfc3.cjs`));await new t(e.config.plugins,e.config,n,e.root,e.routes??[],r).runHook(`build:generate`,{routes:e.routes??[],outDir:r,siteUrl:e.config.siteUrl})}}};function ie(){return new G().addStep(new R).addStep(new z).addParallelSteps([new V,new H]).addStep(new U).addStep(new re)}var G=class{steps=[];addStep(e){return this.steps.push(e),this}addParallelSteps(e){return this.steps.push(e),this}async run(e){let t=[],n=performance.now(),r={...e,timing:{}};for(let e of this.steps){let i=Array.isArray(e),a=i?e:[e],o=performance.now();try{i?await Promise.all(a.map(e=>e.execute(r))):await a[0].execute(r);let e=performance.now()-o;for(let n of a){let i=r.stepDetails?.[n.name];t.push({name:n.name,duration:e,success:!0,details:i}),r.timing[n.name]=e}if(r.ssgSubSteps){for(let e of r.ssgSubSteps)t.push(e);delete r.ssgSubSteps}}catch(e){let i=performance.now()-o,s=a.find(e=>!t.some(t=>t.name===e.name&&t.success))?.name||a.map(e=>e.name).join(` | `);t.push({name:s,duration:i,success:!1,error:e instanceof Error?e:Error(String(e))});for(let e of t.filter(e=>e.success).reverse()){let t=this.steps.flat().find(t=>t.name===e.name);if(t?.rollback)try{await t.rollback(r)}catch(t){console.error(`[pipeline] rollback failed for step "${e.name}":`,t)}}let c=performance.now()-n;return{success:!1,failedStep:s,error:e instanceof Error?e:Error(String(e)),timing:{total:c,steps:r.timing},stepResults:t}}}return{success:!0,timing:{total:performance.now()-n,steps:r.timing},stepResults:t}}};const ae={"build:before":`beforeBuild`,"build:after":`afterBuild`,"build:end":`buildEnd`,"dev:before":`beforeDev`,"dev:after":`afterDev`,"transform:source":`transformSource`,"transform:mdx":`transformMdx`,"transform:html":`transformHtml`,beforeBuild:`build:before`,afterBuild:`build:after`,buildEnd:`build:end`,beforeDev:`dev:before`,afterDev:`dev:after`,transformSource:`transform:source`,transformMdx:`transform:mdx`,transformHtml:`transform:html`};function K(e,t){if(!e.hooks)return;let n=e.hooks[t];if(typeof n==`function`)return n;let r=ae[t];if(r){let t=e.hooks[r];if(typeof t==`function`)return t}}var q=class{plugins;config;store;docsDir;rootDir;routes;outDir;runtime;routeCacheContext;routeCacheVariant;constructor(e,t,n,i,o,s,c,l,u){this.plugins=e,this.config=t,this.store=new P,this.docsDir=n||process.cwd(),this.rootDir=i||process.cwd(),this.routes=o||[],this.outDir=s||`dist`,this.runtime=c??r.u(),this.routeCacheContext=l??a.s(this.docsDir),this.routeCacheVariant=u??a.c(this.routeCacheContext,a.l(t,t.base))}async runHook(e,...t){let n=this.getSortedPlugins(),r=new G;for(let i of n)K(i,e)&&r.addStep(this.createStep(i,e,t));await r.run({})}async runChain(e,t){let n=this.getSortedPlugins(),r=t;for(let t of n){let n=K(t,e);if(!n)continue;let i=this.createContext(t);try{let e=await n(i,r);if(e!==void 0){let t=e.__signal;if(t===`break`)break;if(t===`skip`){r=e;break}r=e}}catch(n){let r=new N(t.name,e,n instanceof Error?n:Error(String(n)));i.logger.error(r),i.diagnostics.report(`error`,`PLUGIN_HOOK_ERROR`,r.message)}}return r}hasHook(e){return!!(this.plugins.some(t=>K(t,e))||this.plugins.flatMap(e=>e.middleware??[]).some(t=>t[e])||(e===`transformSource`||e===`transformMdx`||e===`transformHtml`)&&[...this.runtime.middlewareRegistry.values()].some(t=>t[e]))}async runMiddlewareChain(e,t){let n=this.plugins.flatMap(e=>e.middleware??[]),r=[...this.runtime.middlewareRegistry.values()],i=[...n,...r],a=[...i.filter(e=>e.enforce===`pre`),...i.filter(e=>!e.enforce),...i.filter(e=>e.enforce===`post`)],o=t;for(let t of a){let n=t[e];if(!n)continue;let r=this.createGenericContext();try{let e=await n(r,o);if(e!==void 0){let t=e.__signal;if(t===`break`)break;if(t===`skip`){o=e;break}o=e}}catch(e){let n=`Middleware '${t.name??`<unnamed>`}' threw: ${e instanceof Error?e.message:String(e)}`;r.logger.error(n),r.diagnostics.report(`error`,`MIDDLEWARE_ERROR`,n)}}return o}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createStep(e,t,n){return{name:`${e.name}:${String(t)}`,execute:async()=>{let r=this.createContext(e);try{let i=K(e,t);i&&await i(r,...n)}catch(n){let i=new N(e.name,t,n instanceof Error?n:Error(String(n)));r.logger.error(i)}},rollback:async()=>{let t=K(e,`build:end`);if(t){let n=this.createContext(e);try{await t(n)}catch{}}}}}createContext(e){return{config:Object.freeze({...this.config}),docsDir:this.docsDir,rootDir:this.rootDir,outDir:this.outDir,routes:this.routes,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),caches:r.n(this.routeCacheContext,this.rootDir,this.routeCacheVariant),diagnostics:r.r(e.name,this.runtime),paths:r.o(this.docsDir,this.rootDir),virtualModules:r.l(this.runtime),middleware:r.a(this.runtime),hmr:r.i(this.runtime),server:r.c(this.runtime)}}createGenericContext(){let e=`<middleware>`;return{config:Object.freeze({...this.config}),docsDir:this.docsDir,rootDir:this.rootDir,outDir:this.outDir,routes:this.routes,meta:{name:e},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),caches:r.n(this.routeCacheContext,this.rootDir,this.routeCacheVariant),diagnostics:r.r(e,this.runtime),paths:r.o(this.docsDir,this.rootDir),virtualModules:r.l(this.runtime),middleware:r.a(this.runtime),hmr:r.i(this.runtime),server:r.c(this.runtime)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>g.info(`${t} ${e}`),warn:e=>g.warn(`${t} ${e}`),error:e=>{g.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>g.debug(`${t} ${e}`)}}};function J(e){return t=>typeof e==`function`?e(t):e}function Y(e){return typeof e==`function`?J(e):e}var oe=e.t({BUILTIN_HIGHLIGHTERS:()=>s.t,BoltdocsPluginStore:()=>P,DEFAULT_HIGHLIGHTER:()=>s.n,PluginCompatibilityError:()=>M,PluginError:()=>A,PluginHookError:()=>N,PluginLifecycleManager:()=>q,PluginValidationError:()=>j,createArticleStructuredData:()=>O,createBreadcrumbStructuredData:()=>k,createPlugin:()=>Y,createStructuredData:()=>T,createViteConfig:()=>$,createWebSiteStructuredData:()=>E,default:()=>Q,defineConfig:()=>o.r,definePlugin:()=>J,defineStructuredData:()=>w,flushCache:()=>i.flushCache,generateEntryCode:()=>r.g,generateRoutes:()=>a.t,getCodeHighlighterAdapter:()=>s.r,getHighlighterNames:()=>s.i,handleAwsFeedback:()=>d.t,handleFeedback:()=>u.t,handleNetlifyFeedback:()=>d.r,handleVercelFeedback:()=>d.i,handleWebFeedback:()=>d.n,invalidateRouteCache:()=>a.i,isHighlighterRegistered:()=>s.a,normalizeCodeHighlightConfig:()=>y.normalizeCodeHighlightConfig,normalizePath:()=>t.u,prewarmCodeHighlighting:()=>s.o,prewarmHighlighter:()=>s.s,registerHighlighter:()=>s.c,registerPluginHighlighter:()=>s.l,resolveConfig:()=>o.t,resolvePluginHook:()=>K,sanitizeFilename:()=>t.f,validatePlugins:()=>F});const X=new Map;function se(){let e=__dirname;for(;e&&e!==f.default.parse(e).root;){let t=f.default.join(e,`package.json`);if(p.default.existsSync(t)){let n=``;try{n=JSON.parse(p.default.readFileSync(t,`utf-8`)).name||``}catch{n=``}if(n===`boltdocs`){let t=f.default.join(e,`src/client`);return p.default.existsSync(t)?t:void 0}}e=f.default.dirname(e)}}const ce=se();function Z(e,t,n){if(n===!1)return!1;if(typeof n==`string`)return f.default.resolve(e,n);let r=t?.vite?.publicDir;if(r===!1)return!1;if(typeof r==`string`)return f.default.resolve(e,r);let i=f.default.resolve(e,`public`),a=f.default.resolve(e,t?.docsDir||`docs`,`public`);return p.default.existsSync(i)||!p.default.existsSync(a)?i:a}function le(e,t,n,r){return`${e}::${t}::${m.default.createHash(`md5`).update(JSON.stringify({root:e,mode:t,routeCount:n.routes?.length??0,skipTypes:n.skipTypes??!1,skipLinkTree:n.skipLinkTree??!1,skipRoutes:n.skipRoutes??!1,hasPreResolved:!!r,docsDir:r?.docsDir||`docs`,aliases:r?.aliases,viteAliases:r?.vite?.resolve?.alias,publicDir:Z(e,r,n.publicDir)})).digest(`hex`)}`}async function Q(e){let{resolveConfig:t}=await Promise.resolve().then(()=>require(`./config-PLvresCv.cjs`)),{generateRoutes:n,getExternalRoutePaths:r}=await Promise.resolve().then(()=>require(`./routes-C3_w9fLX.cjs`)),{generateProjectTypes:i,writeLinkTree:a}=await Promise.resolve().then(()=>require(`./types-generator-C83Iy6X5.cjs`)).then(e=>e.n),{boltdocsPlugin:o}=await Promise.resolve().then(()=>require(`./plugin-BX6TXR8x.cjs`)),s=e?.docsDir||`docs`,c=await t(s),l=await n(s,c),u=l.map(e=>e.path),d=(c.base||`/docs`).replace(/\/$/,``);u.includes(d)||u.push(d);let f=r(s,c);for(let e of f)u.includes(e)||u.push(e);return i(c,s,void 0,u),a(u),o({...e,routes:e?.routes??l},c)}async function $(e,t=`development`,n,r={}){let i=le(e,t,r,n),a=X.get(i);if(a)return a.config;let o=null,s=null,c=null,l=null,u=null;async function d(){if(u)return;let e=[import(`@vitejs/plugin-react`),Promise.resolve().then(()=>require(`./plugin-BX6TXR8x.cjs`)),Promise.resolve().then(()=>require(`./resolve-BelytNYR.cjs`)),import(`vite`).then(e=>({normalizePath:e.normalizePath}))],t=await Promise.all(e);o=t[0].default,s=t[1].boltdocsPlugin,c=t[1].getExternalAbsolutePaths,l=t[2].resolveSecurityHeaders,u=t[3].normalizePath}d();let p=n||await(async()=>{let{resolveConfig:t}=await Promise.resolve().then(()=>require(`./config-PLvresCv.cjs`));return t(`docs`,e)})(),m=f.default.resolve(e,p.docsDir||`docs`),h=r.routes??(r.skipRoutes?[]:await(async()=>{let{generateRoutes:e}=await Promise.resolve().then(()=>require(`./routes-C3_w9fLX.cjs`));return e(m,p,void 0,!1)})()),g=t===`production`,_=(async()=>(await d(),l(p,g)))(),v=!r.skipTypes,y=!r.skipLinkTree;if(v||y){let[{generateRoutes:t,getExternalRoutePaths:n},{generateProjectTypes:r,writeLinkTree:i}]=await Promise.all([Promise.resolve().then(()=>require(`./routes-C3_w9fLX.cjs`)),Promise.resolve().then(()=>require(`./types-generator-C83Iy6X5.cjs`)).then(e=>e.n)]),a=h.map(e=>e.path),o=(p.base||`/docs`).replace(/\/$/,``);a.includes(o)||a.push(o);let s=n(m,p);for(let e of s)a.includes(e)||a.push(e);v&&r(p,m,e,a),y&&i(a)}let x=await _;await d();let C=[],w={};if(p.plugins)for(let e of p.plugins)e.css?.postcssPlugins&&C.push(...e.css.postcssPlugins),e.css?.preprocessorOptions&&Object.assign(w,e.css.preprocessorOptions);let T={root:e,mode:t,experimental:{bundledDev:!g&&process.env.BOLTDOCS_BUNDLED_DEV===`true`},oxc:{jsx:{development:!g,runtime:`automatic`,importSource:`react`}},optimizeDeps:{entries:[`index.html`],include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`react-fast-compare`,`invariant`,`use-sync-external-store/shim`]},css:C.length>0||Object.keys(w).length>0?{postcss:C.length>0?{plugins:C}:void 0,preprocessorOptions:Object.keys(w).length>0?w:void 0}:void 0,build:{},plugins:[b(),o(),...s({docsDir:m,root:e,routes:h},p)],ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`react-router-dom`,`@bdocs/ssg`,`jsdom`,...c()],optimizeDeps:{include:[`react`,`react-dom`,`react-fast-compare`,...p.vite?.ssr?.optimizeDeps?.include??[]]},noExternal:[]},server:{watch:{ignored:[`**/.boltdocs/**`,...p.vite?.server?.watch?.ignored??[]]},headers:{...x,...p.vite?.server?.headers},...p.vite?.server},preview:{headers:{...x,...p.vite?.preview?.headers},...p.vite?.preview},...p.vite??{},resolve:{...p.vite?.resolve??{},alias:ee({root:e,clientSourceRoot:ce,aliases:[...S(p.aliases),...S(p.vite?.resolve?.alias)]}).map(e=>({...e,...typeof e.replacement==`string`?{replacement:u(e.replacement)}:{}})),dedupe:[`react`,`react-dom`,`react-router-dom`,...p.vite?.resolve?.dedupe??[]]},base:p.base||`/`,publicDir:Z(e,p,r.publicDir)};return X.set(i,{config:T}),T.__boltdocsConfig=p,T}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return E}});
@@ -1,23 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{t as e}from"./chunk-BFSpntXv.mjs";import{_ as t,a as n,c as r,i,l as a,n as o,o as s,r as c,u as l}from"./plugin-context-BKK-nfOd.mjs";import{r as u}from"./utils-8lzafE49.mjs";import{n as d}from"./pages-external-BBw8ObVK.mjs";import"./node/cache.mjs";import{c as f,l as p,s as m,t as h}from"./routes-C4wrLWwu.mjs";import{n as g,r as _}from"./config-DC0nMMk7.mjs";import{l as v}from"./registry-CHh8A5as.mjs";import{r as y,t as b}from"./types-generator-BtZ6-ZKx.mjs";import{t as x}from"./resolve-C8AFoOQL.mjs";import"./handler-Lex5DbvG.mjs";import"./adapters-BKzKe2mO.mjs";import S from"node:path";import C from"node:fs";import ee from"node:crypto";import{z as w}from"zod";import*as T from"@bdocs/dui";import{colors as E,warn as D}from"@bdocs/dui";import te from"semver";import{build as ne}from"@bdocs/ssg/node";import{normalizeCodeHighlightConfig as O}from"@bdocs/unist-utils";function re(){return{name:`boltdocs-ssr-dirname-polyfill`,config:(e,{isSsrBuild:t})=>t?{define:{__dirname:`import.meta.dirname`}}:{}}}const ie=new Set([`boltdocs/entry`,`boltdocs/client`,`boltdocs/primitives`,`boltdocs/mdx`,`boltdocs/client/router`,`use-sync-external-store/shim/index.js`,`use-sync-external-store/shim`,`use-sync-external-store`]);function k(e){return e?Array.isArray(e)?[...e]:Object.entries(e).map(([e,t])=>({find:e,replacement:t})):[]}function A(e,t){typeof t.find==`string`&&ie.has(t.find)&&e.some(e=>e.find===t.find)||e.push({...t,...typeof t.replacement==`string`?{replacement:t.replacement}:{}})}function j({root:e,clientSourceRoot:t,aliases:n}){let r=[{find:`boltdocs/entry`,replacement:S.resolve(e,`boltdocs-entry.tsx`)},{find:`boltdocs/client`,replacement:S.resolve(e,`boltdocs-client.mjs`)},...t?[{find:`boltdocs/primitives`,replacement:S.join(t,`primitives.ts`)},{find:`boltdocs/mdx`,replacement:S.join(t,`mdx.ts`)},{find:`boltdocs/client/router`,replacement:S.join(t,`router/index.ts`)}]:[],{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`}].map(e=>({...e,replacement:e.replacement}));for(let t of k(n))A(r,{...t,replacement:typeof t.replacement==`string`&&t.replacement.startsWith(`.`)?S.resolve(e,t.replacement):t.replacement});return r}function ae(e){return e}function oe(e){let t=[];if(e.website&&t.push(M(e.website)),e.article&&t.push(P(e.article)),e.breadcrumbs?.length&&t.push(F(e.breadcrumbs)),e.additional&&t.push(...Array.isArray(e.additional)?e.additional:[e.additional]),t.length===0)throw Error(`createStructuredData() requires at least one of website, article, breadcrumbs, or additional`);return t.length===1?t[0]:t}function M(e){let t={"@context":`https://schema.org`,"@type":`WebSite`,name:e.name,url:e.url};return e.description&&(t.description=e.description),e.searchUrl&&(t.potentialAction={"@type":`SearchAction`,target:`${e.searchUrl}{search_term_string}`,"query-input":`required name=search_term_string`}),t}function N(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))throw TypeError(`Invalid ${t} value: ${String(e)}`);return n.toISOString()}function P(e){let t={"@context":`https://schema.org`,"@type":`Article`,headline:e.headline,url:e.url};return e.description&&(t.description=e.description),e.datePublished&&(t.datePublished=N(e.datePublished,`datePublished`)),e.dateModified&&(t.dateModified=N(e.dateModified,`dateModified`)),e.image&&(t.image=e.image),e.author&&(t.author=typeof e.author==`string`?{"@type":`Person`,name:e.author}:{"@type":`Person`,...e.author}),t}function F(e){return{"@context":`https://schema.org`,"@type":`BreadcrumbList`,itemListElement:e.map((e,t)=>({"@type":`ListItem`,position:t+1,name:e.name,item:e.url}))}}var I=class extends Error{name=this.constructor.name;constructor(e,t,n){super(`[plugin:${e}] ${t}`,n),this.pluginName=e}},L=class extends I{constructor(e,t){super(e,`Validation failed: ${t}`)}},R=class extends I{constructor(e,t){super(e,`Compatibility error: ${t}`)}},z=class extends I{constructor(e,t,n){super(e,`Error in hook '${t}': ${n.message}`,{cause:n}),this.hookName=t}},B=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 se=_.extend({version:w.string().optional(),boltdocsVersion:w.string().optional(),css:w.object({cssFiles:w.array(w.string()).optional(),headStyles:w.array(w.string()).optional(),postcssPlugins:w.array(w.any()).optional(),preprocessorOptions:w.record(w.string(),w.any()).optional()}).optional(),hooks:w.object({beforeBuild:w.custom(e=>typeof e==`function`).optional(),afterBuild:w.custom(e=>typeof e==`function`).optional(),beforeDev:w.custom(e=>typeof e==`function`).optional(),afterDev:w.custom(e=>typeof e==`function`).optional(),buildEnd:w.custom(e=>typeof e==`function`).optional(),transformSource:w.custom(e=>typeof e==`function`).optional(),transformMdx:w.custom(e=>typeof e==`function`).optional(),transformHtml:w.custom(e=>typeof e==`function`).optional()}).passthrough().optional()});function V(e,t){let n=[],r=new Set;for(let i of e){let e=se.safeParse(i);if(!e.success)throw new L(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 L(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!te.satisfies(t,a.boltdocsVersion))throw new R(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(`..`))throw new L(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`);if(S.isAbsolute(t))throw new L(a.name,`Component '${e}' has an invalid path: absolute paths are not allowed.`)}a.codeHighlighter&&v(a.name,a.codeHighlighter),n.push(a)}return n}const H=new Map;function U(e,t=process.cwd()){let n=e.plugins||[];for(let e of n)if(e.name&&!H.has(e.name))try{let n=x(e.name,t)?.pkg,r=n&&typeof n.scripts==`object`?n.scripts:{},i=!!(r.preinstall||r.postinstall||r.install);i&&D(`💡 ${E.yellow(E.bold(`Nota de seguridad:`))} El plugin ${E.cyan(e.name)} ejecuta scripts nativos al instalarse. Corre ${E.bold(`boltdocs audit`)} para un análisis detallado.`),H.set(e.name,i)}catch{H.set(e.name,!1)}}var W=class{name=`ConfigResolve`;async execute(e){e.config=await g(`docs`,e.root,`build`,`production`),e.allCached||U(e.config,e.root);let t=S.resolve(e.root,e.config.docsDir||`docs`);e.docsDir=t;let n=await h(t,e.config,void 0,!1);e.routes=n;let r=n.map(e=>e.path),i=(e.config.base||`/docs`).replace(/\/$/,``);r.includes(i)||r.push(i);let a=d(t,e.config);for(let e of a)r.includes(e)||r.push(e);e.routePaths=r,e.viteConfig=await $(e.root,`production`,e.config,{routes:n,skipTypes:!0,skipLinkTree:!0})}},G=class{name=`RouteGenerate`;async execute(e){if(!e.routes)throw Error(`Routes not generated by ConfigResolveStep. Verify pipeline order.`)}};const ce=w.object({title:w.string().optional(),description:w.string().optional(),canonical:w.string().url().optional(),robots:w.string().optional(),noindex:w.boolean().optional(),"og:title":w.string().optional(),"og:description":w.string().optional(),"og:image":w.string().optional(),"og:type":w.string().optional(),"og:url":w.string().url().optional()});var le=class{name=`SEOValidate`;async execute(e){if(!e.routes||!e.config)throw Error(`Routes or Config not initialized.`);let t=e.config?.siteUrl,n=e.routes;for(let r of n){let n=r.seo||{},i=n.canonical||(t?`${t.replace(/\/$/,``)}${r.path}`:void 0),a=n[`og:url`]||i||void 0,o=e.config?.seo?.thumbnails?.background??void 0,s=n[`og:image`]||r.coverImage||o;s&&t&&!/^https?:\/\/|^\/\//.test(s)&&(s=`${t.endsWith(`/`)?t.slice(0,-1):t}${s.startsWith(`/`)?s:`/${s}`}`);let c={...n};i&&(c.canonical=i),a&&(c[`og:url`]=a),s&&(c[`og:image`]=s),!c[`og:title`]&&r.title&&(c[`og:title`]=String(r.title)),!c[`og:description`]&&r.description&&(c[`og:description`]=String(r.description));let l=ce.safeParse(c);l.success||D(`[SEOValidate] Validation issues on route "${r.path}": ${l.error.message}`),r.title||D(`[SEOValidate] Route "${r.path}" is missing a title.`),r.seo=c}e.ssgRoutes=n}},ue=class{name=`TypeGenerate`;async execute(e){if(!e.config||!e.docsDir||!e.routePaths)throw Error(`Config, docs directory, or route paths not initialized. Verify pipeline order.`);b(e.config,`docs`,e.root,e.routePaths),y(e.routePaths,e.root),e.typesGenerated=!0}},de=class{name=`SSGBuild`;async execute(e){if(!e.routes||!e.viteConfig)throw Error(`Routes or ViteConfig not initialized.`);let t={};for(let n of e.routes)if(n.path&&n.componentPath){t[n.path]=n.componentPath;let e=n.path.replace(/\/$/,``);t[e]=n.componentPath}let n=[];await ne({entry:`boltdocs/entry`,routeToSourceFileMap:t,cacheDir:S.resolve(e.root,`.boltdocs/build`),onStep:e=>{n.push(e)}},e.viteConfig),e.ssgSubSteps=n,e.outDir=e.viteConfig.build?.outDir||`dist`}};function fe(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"?>
7
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
8
- ${e.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(r&&e.seo?.index,!0)).map(e=>`${n}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`).sort((e,t)=>e<t?-1:e>t?1:0).map(e=>` <url>
9
- <loc>${u(e)}</loc>
10
- <changefreq>weekly</changefreq>
11
- <priority>0.7</priority>
12
- </url>`).join(`
13
- `)}
14
- </urlset>`}function pe(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(`
15
- `);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(`
16
- `)+`
17
- `:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
18
- `)+`
19
- `:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
20
-
21
- `),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
22
- `);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
23
- `)}var me=class{name=`SEOWrite`;async execute(e){if(!e.ssgRoutes||!e.config||!e.outDir)throw Error(`SSG Routes, Config, or OutDir not initialized.`);let t=fe(e.ssgRoutes,e.config),n=e.docsDir||S.resolve(e.root,`docs`),r=S.resolve(e.root,e.outDir);t&&C.writeFileSync(S.join(r,`sitemap.xml`),t,`utf-8`);let i=pe(e.config);if(C.writeFileSync(S.join(r,`robots.txt`),i,`utf-8`),e.config.plugins&&e.config.plugins.length>0){let{PluginLifecycleManager:t}=await Promise.resolve().then(()=>q);await new t(e.config.plugins,e.config,n,e.root,e.routes??[],r).runHook(`build:generate`,{routes:e.routes??[],outDir:r,siteUrl:e.config.siteUrl})}}};function he(){return new K().addStep(new W).addStep(new G).addParallelSteps([new le,new ue]).addStep(new de).addStep(new me)}var K=class{steps=[];addStep(e){return this.steps.push(e),this}addParallelSteps(e){return this.steps.push(e),this}async run(e){let t=[],n=performance.now(),r={...e,timing:{}};for(let e of this.steps){let i=Array.isArray(e),a=i?e:[e],o=performance.now();try{i?await Promise.all(a.map(e=>e.execute(r))):await a[0].execute(r);let e=performance.now()-o;for(let n of a){let i=r.stepDetails?.[n.name];t.push({name:n.name,duration:e,success:!0,details:i}),r.timing[n.name]=e}if(r.ssgSubSteps){for(let e of r.ssgSubSteps)t.push(e);delete r.ssgSubSteps}}catch(e){let i=performance.now()-o,s=a.find(e=>!t.some(t=>t.name===e.name&&t.success))?.name||a.map(e=>e.name).join(` | `);t.push({name:s,duration:i,success:!1,error:e instanceof Error?e:Error(String(e))});for(let e of t.filter(e=>e.success).reverse()){let t=this.steps.flat().find(t=>t.name===e.name);if(t?.rollback)try{await t.rollback(r)}catch(t){console.error(`[pipeline] rollback failed for step "${e.name}":`,t)}}let c=performance.now()-n;return{success:!1,failedStep:s,error:e instanceof Error?e:Error(String(e)),timing:{total:c,steps:r.timing},stepResults:t}}}return{success:!0,timing:{total:performance.now()-n,steps:r.timing},stepResults:t}}},q=e({PluginLifecycleManager:()=>Y,resolvePluginHook:()=>J});const ge={"build:before":`beforeBuild`,"build:after":`afterBuild`,"build:end":`buildEnd`,"dev:before":`beforeDev`,"dev:after":`afterDev`,"transform:source":`transformSource`,"transform:mdx":`transformMdx`,"transform:html":`transformHtml`,beforeBuild:`build:before`,afterBuild:`build:after`,buildEnd:`build:end`,beforeDev:`dev:before`,afterDev:`dev:after`,transformSource:`transform:source`,transformMdx:`transform:mdx`,transformHtml:`transform:html`};function J(e,t){if(!e.hooks)return;let n=e.hooks[t];if(typeof n==`function`)return n;let r=ge[t];if(r){let t=e.hooks[r];if(typeof t==`function`)return t}}var Y=class{plugins;config;store;docsDir;rootDir;routes;outDir;runtime;routeCacheContext;routeCacheVariant;constructor(e,t,n,r,i,a,o,s,c){this.plugins=e,this.config=t,this.store=new B,this.docsDir=n||process.cwd(),this.rootDir=r||process.cwd(),this.routes=i||[],this.outDir=a||`dist`,this.runtime=o??l(),this.routeCacheContext=s??m(this.docsDir),this.routeCacheVariant=c??f(this.routeCacheContext,p(t,t.base))}async runHook(e,...t){let n=this.getSortedPlugins(),r=new K;for(let i of n)J(i,e)&&r.addStep(this.createStep(i,e,t));await r.run({})}async runChain(e,t){let n=this.getSortedPlugins(),r=t;for(let t of n){let n=J(t,e);if(!n)continue;let i=this.createContext(t);try{let e=await n(i,r);if(e!==void 0){let t=e.__signal;if(t===`break`)break;if(t===`skip`){r=e;break}r=e}}catch(n){let r=new z(t.name,e,n instanceof Error?n:Error(String(n)));i.logger.error(r),i.diagnostics.report(`error`,`PLUGIN_HOOK_ERROR`,r.message)}}return r}hasHook(e){return!!(this.plugins.some(t=>J(t,e))||this.plugins.flatMap(e=>e.middleware??[]).some(t=>t[e])||(e===`transformSource`||e===`transformMdx`||e===`transformHtml`)&&[...this.runtime.middlewareRegistry.values()].some(t=>t[e]))}async runMiddlewareChain(e,t){let n=this.plugins.flatMap(e=>e.middleware??[]),r=[...this.runtime.middlewareRegistry.values()],i=[...n,...r],a=[...i.filter(e=>e.enforce===`pre`),...i.filter(e=>!e.enforce),...i.filter(e=>e.enforce===`post`)],o=t;for(let t of a){let n=t[e];if(!n)continue;let r=this.createGenericContext();try{let e=await n(r,o);if(e!==void 0){let t=e.__signal;if(t===`break`)break;if(t===`skip`){o=e;break}o=e}}catch(e){let n=`Middleware '${t.name??`<unnamed>`}' threw: ${e instanceof Error?e.message:String(e)}`;r.logger.error(n),r.diagnostics.report(`error`,`MIDDLEWARE_ERROR`,n)}}return o}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createStep(e,t,n){return{name:`${e.name}:${String(t)}`,execute:async()=>{let r=this.createContext(e);try{let i=J(e,t);i&&await i(r,...n)}catch(n){let i=new z(e.name,t,n instanceof Error?n:Error(String(n)));r.logger.error(i)}},rollback:async()=>{let t=J(e,`build:end`);if(t){let n=this.createContext(e);try{await t(n)}catch{}}}}}createContext(e){return{config:Object.freeze({...this.config}),docsDir:this.docsDir,rootDir:this.rootDir,outDir:this.outDir,routes:this.routes,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),caches:o(this.routeCacheContext,this.rootDir,this.routeCacheVariant),diagnostics:c(e.name,this.runtime),paths:s(this.docsDir,this.rootDir),virtualModules:a(this.runtime),middleware:n(this.runtime),hmr:i(this.runtime),server:r(this.runtime)}}createGenericContext(){let e=`<middleware>`;return{config:Object.freeze({...this.config}),docsDir:this.docsDir,rootDir:this.rootDir,outDir:this.outDir,routes:this.routes,meta:{name:e},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),caches:o(this.routeCacheContext,this.rootDir,this.routeCacheVariant),diagnostics:c(e,this.runtime),paths:s(this.docsDir,this.rootDir),virtualModules:a(this.runtime),middleware:n(this.runtime),hmr:i(this.runtime),server:r(this.runtime)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>T.info(`${t} ${e}`),warn:e=>T.warn(`${t} ${e}`),error:e=>{T.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>T.debug(`${t} ${e}`)}}};function X(e){return t=>typeof e==`function`?e(t):e}function _e(e){return typeof e==`function`?X(e):e}const Z=new Map;function ve(){let e=t;for(;e&&e!==S.parse(e).root;){let t=S.join(e,`package.json`);if(C.existsSync(t)){let n=``;try{n=JSON.parse(C.readFileSync(t,`utf-8`)).name||``}catch{n=``}if(n===`boltdocs`){let t=S.join(e,`src/client`);return C.existsSync(t)?t:void 0}}e=S.dirname(e)}}const ye=ve();function Q(e,t,n){if(n===!1)return!1;if(typeof n==`string`)return S.resolve(e,n);let r=t?.vite?.publicDir;if(r===!1)return!1;if(typeof r==`string`)return S.resolve(e,r);let i=S.resolve(e,`public`),a=S.resolve(e,t?.docsDir||`docs`,`public`);return C.existsSync(i)||!C.existsSync(a)?i:a}function be(e,t,n,r){return`${e}::${t}::${ee.createHash(`md5`).update(JSON.stringify({root:e,mode:t,routeCount:n.routes?.length??0,skipTypes:n.skipTypes??!1,skipLinkTree:n.skipLinkTree??!1,skipRoutes:n.skipRoutes??!1,hasPreResolved:!!r,docsDir:r?.docsDir||`docs`,aliases:r?.aliases,viteAliases:r?.vite?.resolve?.alias,publicDir:Q(e,r,n.publicDir)})).digest(`hex`)}`}async function xe(e){let{resolveConfig:t}=await import(`./config-DC0nMMk7.mjs`).then(e=>e.t),{generateRoutes:n,getExternalRoutePaths:r}=await import(`./routes-C4wrLWwu.mjs`).then(e=>e.i),{generateProjectTypes:i,writeLinkTree:a}=await import(`./types-generator-BtZ6-ZKx.mjs`).then(e=>e.n),{boltdocsPlugin:o}=await import(`./plugin-C8UMIA-4.mjs`),s=e?.docsDir||`docs`,c=await t(s),l=await n(s,c),u=l.map(e=>e.path),d=(c.base||`/docs`).replace(/\/$/,``);u.includes(d)||u.push(d);let f=r(s,c);for(let e of f)u.includes(e)||u.push(e);return i(c,s,void 0,u),a(u),o({...e,routes:e?.routes??l},c)}async function $(e,t=`development`,n,r={}){let i=be(e,t,r,n),a=Z.get(i);if(a)return a.config;let o=null,s=null,c=null,l=null,u=null;async function d(){if(u)return;let e=[import(`@vitejs/plugin-react`),import(`./plugin-C8UMIA-4.mjs`),import(`./resolve-C5rT6B21.mjs`),import(`vite`).then(e=>({normalizePath:e.normalizePath}))],t=await Promise.all(e);o=t[0].default,s=t[1].boltdocsPlugin,c=t[1].getExternalAbsolutePaths,l=t[2].resolveSecurityHeaders,u=t[3].normalizePath}d();let f=n||await(async()=>{let{resolveConfig:t}=await import(`./config-DC0nMMk7.mjs`).then(e=>e.t);return t(`docs`,e)})(),p=S.resolve(e,f.docsDir||`docs`),m=r.routes??(r.skipRoutes?[]:await(async()=>{let{generateRoutes:e}=await import(`./routes-C4wrLWwu.mjs`).then(e=>e.i);return e(p,f,void 0,!1)})()),h=t===`production`,g=(async()=>(await d(),l(f,h)))(),_=!r.skipTypes,v=!r.skipLinkTree;if(_||v){let[{generateRoutes:t,getExternalRoutePaths:n},{generateProjectTypes:r,writeLinkTree:i}]=await Promise.all([import(`./routes-C4wrLWwu.mjs`).then(e=>e.i),import(`./types-generator-BtZ6-ZKx.mjs`).then(e=>e.n)]),a=m.map(e=>e.path),o=(f.base||`/docs`).replace(/\/$/,``);a.includes(o)||a.push(o);let s=n(p,f);for(let e of s)a.includes(e)||a.push(e);_&&r(f,p,e,a),v&&i(a)}let y=await g;await d();let b=[],x={};if(f.plugins)for(let e of f.plugins)e.css?.postcssPlugins&&b.push(...e.css.postcssPlugins),e.css?.preprocessorOptions&&Object.assign(x,e.css.preprocessorOptions);let C={root:e,mode:t,experimental:{bundledDev:!h&&process.env.BOLTDOCS_BUNDLED_DEV===`true`},oxc:{jsx:{development:!h,runtime:`automatic`,importSource:`react`}},optimizeDeps:{entries:[`index.html`],include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`react-fast-compare`,`invariant`,`use-sync-external-store/shim`]},css:b.length>0||Object.keys(x).length>0?{postcss:b.length>0?{plugins:b}:void 0,preprocessorOptions:Object.keys(x).length>0?x:void 0}:void 0,build:{},plugins:[re(),o(),...s({docsDir:p,root:e,routes:m},f)],ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`react-router-dom`,`@bdocs/ssg`,`jsdom`,...c()],optimizeDeps:{include:[`react`,`react-dom`,`react-fast-compare`,...f.vite?.ssr?.optimizeDeps?.include??[]]},noExternal:[]},server:{watch:{ignored:[`**/.boltdocs/**`,...f.vite?.server?.watch?.ignored??[]]},headers:{...y,...f.vite?.server?.headers},...f.vite?.server},preview:{headers:{...y,...f.vite?.preview?.headers},...f.vite?.preview},...f.vite??{},resolve:{...f.vite?.resolve??{},alias:j({root:e,clientSourceRoot:ye,aliases:[...k(f.aliases),...k(f.vite?.resolve?.alias)]}).map(e=>({...e,...typeof e.replacement==`string`?{replacement:u(e.replacement)}:{}})),dedupe:[`react`,`react-dom`,`react-router-dom`,...f.vite?.resolve?.dedupe??[]]},base:f.base||`/`,publicDir:Q(e,f,r.publicDir)};return Z.set(i,{config:C}),C.__boltdocsConfig=f,C}export{P as _,X as a,M as b,J as c,V as d,B as f,L as g,z as h,_e as i,he as l,I as m,$ as n,Y as o,R as p,O as r,q as s,xe as t,U as u,F as v,ae as x,oe as y};