boltdocs 2.7.9 → 2.7.10
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.
- package/dist/{cache-DorPMFgW.cjs → cache-Ba-DZQNH.cjs} +1 -1
- package/dist/{cache-CQKlT4fI.mjs → cache-BuMZ58L5.mjs} +1 -1
- package/dist/chunk-CU-zTemE.cjs +6 -0
- package/dist/doctor-Be7Ly1oM.mjs +21 -0
- package/dist/{doctor-D4_Y7M4p.cjs → doctor-CrytFkqW.cjs} +1 -1
- package/dist/doctor-jMxWZyLJ.cjs +21 -0
- package/dist/generator-CHqxiQhF.cjs +21 -0
- package/dist/generator-ClVanhvi.mjs +21 -0
- package/dist/meta-loader-CWg2gnbY.mjs +6 -0
- package/dist/meta-loader-Cv9O0Pzl.cjs +6 -0
- package/dist/node/cli-entry.cjs +1 -1
- package/dist/node/cli-entry.mjs +1 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.mjs +1 -1
- package/dist/node/routes/worker.cjs +1 -1
- package/dist/node/routes/worker.mjs +1 -1
- package/dist/node-DtEDyN1u.cjs +111 -0
- package/dist/node-_1jhMGYx.mjs +111 -0
- package/dist/{package-B4MD00N3.mjs → package--0Yf0t1N.mjs} +1 -1
- package/dist/{package-VfQM94VL.cjs → package-DrwtlXfk.cjs} +1 -1
- package/dist/{parser-Bh11BsdA.cjs → parser-Aq8LoH-0.cjs} +1 -1
- package/dist/{parser-DYRzXWmA.cjs → parser-CdNbqN5y.cjs} +1 -1
- package/dist/parser-nE792MLO.mjs +6 -0
- package/dist/rolldown-runtime-fkIsjY3S.mjs +6 -0
- package/dist/{routes-Co1mRM58.cjs → routes-2k3tbUmC.cjs} +1 -1
- package/dist/routes-CpxZIsMM.mjs +6 -0
- package/dist/{routes-CHf76Ye4.cjs → routes-DP1vmWRj.cjs} +1 -1
- package/dist/utils-CG65J0Sc.mjs +7 -0
- package/dist/utils-CKunkU96.cjs +7 -0
- package/dist/{worker-pool-BwU8ckrg.cjs → worker-pool-Crbqgw5R.cjs} +1 -1
- package/package.json +3 -2
- package/dist/chunk-Ds5LZdWN.cjs +0 -6
- package/dist/doctor-BD1BSB03.mjs +0 -23
- package/dist/doctor-BHc9ua6r.cjs +0 -23
- package/dist/generator-DGW6pkCC.cjs +0 -22
- package/dist/generator-Dv3wEmhZ.mjs +0 -22
- package/dist/meta-loader-0gJ4PtBC.cjs +0 -6
- package/dist/meta-loader-9IpAHWDS.mjs +0 -6
- package/dist/node-DBaH7kat.mjs +0 -111
- package/dist/node-t5C3Q85p.cjs +0 -111
- package/dist/parser-9cVdK7w9.mjs +0 -6
- package/dist/routes-DwrMa5-z.mjs +0 -6
- package/dist/utils-BxNAXhZZ.mjs +0 -7
- package/dist/utils-Clzu7jvb.cjs +0 -7
- /package/dist/{worker-pool-Bd8Y9KDv.mjs → worker-pool-CGn7DrLb.mjs} +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import{l as e,n as t,s as n,u as r}from"./utils-CG65J0Sc.mjs";import{r as i}from"./cache-BuMZ58L5.mjs";import{i as a,n as o,t as s}from"./routes-CpxZIsMM.mjs";import{c,i as l,l as u,n as d,o as f}from"./doctor-Be7Ly1oM.mjs";import*as p from"node:module";import{createRequire as m}from"node:module";import ee from"@vitejs/plugin-react";import h from"@tailwindcss/vite";import{loadEnv as te,normalizePath as g}from"vite";import _ from"node:path";import v from"fs";import{z as y}from"zod";import*as b from"@bdocs/dui";import{error as x,warn as ne}from"@bdocs/dui";import S from"node:fs";import re from"node:crypto";import{ViteImageOptimizer as ie}from"vite-plugin-image-optimizer";import ae from"semver";import C from"path";import{fileURLToPath as oe}from"node:url";import se from"@mdx-js/rollup";import ce from"remark-gfm";import le from"remark-frontmatter";import ue from"rehype-slug";import{visit as w}from"unist-util-visit";import{createJavaScriptRegexEngine as de}from"shiki/engine/javascript";import{createHighlighterCore as fe}from"shiki/core";import pe from"@shikijs/themes/github-light";import me from"@shikijs/themes/github-dark";import T from"@shikijs/themes/tokyo-night";import E from"@shikijs/themes/dracula";import D from"@shikijs/themes/nord";import O from"@shikijs/themes/one-dark-pro";import he from"@shikijs/themes/one-light";import ge from"@shikijs/langs/html";import _e from"@shikijs/langs/js";import ve from"@shikijs/langs/ts";import ye from"@shikijs/langs/tsx";import be from"@shikijs/langs/css";import xe from"@shikijs/langs/json";import Se from"@shikijs/langs/bash";import Ce from"@shikijs/langs/markdown";import we from"@shikijs/langs/mdx";import Te from"@shikijs/langs/yaml";import Ee from"@shikijs/langs/rust";import De from"@shikijs/langs/toml";import Oe from"@shikijs/langs/csv";function ke(e){return e.map(e=>({path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],_content:e._content||``,_rawContent:e._rawContent||``,locale:e.locale,version:e.version,tab:e.tab,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo,date:e.date,lastUpdated:e.lastUpdated,category:e.category,order:e.order,sidebarLabel:e.sidebarLabel,sidebarHidden:e.sidebarHidden,frontmatter:e.frontmatter,slugParts:e.slugParts}))}function Ae(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=>` <url>
|
|
9
|
+
<loc>${t(`${r}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`)}</loc>
|
|
10
|
+
<changefreq>weekly</changefreq>
|
|
11
|
+
<priority>0.7</priority>
|
|
12
|
+
</url>`).join(`
|
|
13
|
+
`)}
|
|
14
|
+
</urlset>`}function je(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
|
+
`)}function Me(e){return`<!doctype html>
|
|
24
|
+
<html lang="en">
|
|
25
|
+
<head>
|
|
26
|
+
<meta charset="UTF-8" />
|
|
27
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
28
|
+
<title>${e.theme?.title||`Boltdocs`}</title>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="root"></div>
|
|
32
|
+
</body>
|
|
33
|
+
</html>`}function Ne(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=Me(t));let n=t.theme,r=n?.title||`Boltdocs`;if(typeof r==`object`){let e=t.i18n?.defaultLocale||``;r=r[e]||Object.values(r)[0]||`Boltdocs`}let i=n?.description||``;if(typeof i==`object`){let e=t.i18n?.defaultLocale||``;i=i[e]||Object.values(i)[0]||``}let a=n?.favicon;!a&&n?.logo&&(a=typeof n.logo==`string`?n.logo:n.logo.light||n.logo.dark);let o=[a?`<link rel="icon" href="${a}">`:``,`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,`<meta property="og:type" content="website">`,`<meta name="twitter:card" content="summary_large_image">`,`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,`<meta name="generator" content="Boltdocs">`].filter(Boolean).join(`
|
|
34
|
+
`);e=e.includes(`<title>`)?e.replace(/<title>.*?<\/title>/,`<title>${r}</title>`):e.replace(`</head>`,` <title>${r}</title>\n </head>`);let s=``;if(t.integrations?.ga4){let e=t.integrations.ga4;if(process.env.NODE_ENV===`production`||e.debug){let t=e.anonymizeIp?`gtag('set', 'ip', true);`:``,n=e.sendPageView===!1?`{send_page_view: false}`:`{}`,r=e.cookieFlags?`, {'cookie_flags': '${e.cookieFlags}'}`:``;s=`
|
|
35
|
+
<!-- Google tag (gtag.js) - ${e.measurementId} -->
|
|
36
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=${e.measurementId}"><\/script>
|
|
37
|
+
<script>
|
|
38
|
+
window.dataLayer = window.dataLayer || [];
|
|
39
|
+
function gtag(){dataLayer.push(arguments);}
|
|
40
|
+
gtag('js', new Date());
|
|
41
|
+
${t}
|
|
42
|
+
gtag('config', '${e.measurementId}', ${n}${r});
|
|
43
|
+
<\/script>
|
|
44
|
+
`}}let c=``,l=``;if(t.integrations?.gtm){let e=t.integrations.gtm;if(process.env.NODE_ENV===`production`){let t=e.dataLayerName||`dataLayer`;c=`
|
|
45
|
+
<!-- Google Tag Manager -->
|
|
46
|
+
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
47
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
48
|
+
j=d.createElement(s),dl=l!='${t}'?'&l='+l:'';j.async=true;j.src=
|
|
49
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl+'${e.preview?`>m_preview=${e.preview}`:``}';f.parentNode.insertBefore(j,f);
|
|
50
|
+
})(window,document,'script','${t}','${e.tagId}');<\/script>
|
|
51
|
+
<!-- End Google Tag Manager -->
|
|
52
|
+
`,l=`
|
|
53
|
+
<!-- Google Tag Manager (noscript) -->
|
|
54
|
+
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=${e.tagId}"
|
|
55
|
+
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
56
|
+
<!-- End Google Tag Manager (noscript) -->
|
|
57
|
+
`}}return e=e.replace(`</head>`,` ${o}\n
|
|
58
|
+
<script>
|
|
59
|
+
(function() {
|
|
60
|
+
try {
|
|
61
|
+
var stored = localStorage.getItem("boltdocs-theme");
|
|
62
|
+
var isDark =
|
|
63
|
+
stored === "dark" ||
|
|
64
|
+
(stored !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
65
|
+
document.documentElement.classList.toggle("dark", isDark);
|
|
66
|
+
document.documentElement.dataset.theme = isDark ? "dark" : "light";
|
|
67
|
+
} catch (e) {}
|
|
68
|
+
})();
|
|
69
|
+
<\/script>
|
|
70
|
+
\n${s}${c} </head>`),l&&(e=e.replace(/<body([^>]*)>/,`<body$1>\n${l}`)),!e.includes(`src/main`)&&!e.includes(`virtual:boltdocs-entry`)&&(e=e.replace(`</body>`,` <script type="module">import "virtual:boltdocs-entry";<\/script>
|
|
71
|
+
</body>`)),e}var k=class e extends Error{pluginName;constructor(t,n){super(`[plugin:${t}] ${n}`),this.name=`PluginError`,this.pluginName=t,Object.setPrototypeOf(this,e.prototype)}},A=class e extends k{constructor(t,n){super(t,`Validation failed: ${n}`),this.name=`PluginValidationError`,Object.setPrototypeOf(this,e.prototype)}},Pe=class e extends k{constructor(t,n){super(t,`Compatibility error: ${n}`),this.name=`PluginCompatibilityError`,Object.setPrototypeOf(this,e.prototype)}},j=class e extends k{constructor(t,n){super(t,`Missing required permission: '${n}'`),this.name=`PluginPermissionError`,Object.setPrototypeOf(this,e.prototype)}},Fe=class e extends k{hookName;constructor(t,n,r){super(t,`Error in hook '${n}': ${r.message}`),this.name=`PluginHookError`,this.hookName=n,this.stack=r.stack,Object.setPrototypeOf(this,e.prototype)}},Ie=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 M=u.extend({version:y.string().optional(),boltdocsVersion:y.string().optional(),permissions:y.array(y.string()).optional(),hooks:y.object({beforeBuild:y.function().optional(),afterBuild:y.function().optional(),beforeDev:y.function().optional(),afterDev:y.function().optional(),configResolved:y.function().optional(),buildEnd:y.function().optional()}).optional()});function N(e,t){let n=[],r=new Set;for(let i of e){let e=M.safeParse(i);if(!e.success)throw new A(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 A(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!ae.satisfies(t,a.boltdocsVersion))throw new Pe(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(`..`)||C.isAbsolute(t))&&t.includes(`..`))throw new A(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function P(e,t){return e.permissions?e.permissions.includes(t):!1}var F=class e{static checkPermission(e,t){if(!P(e,t))throw new j(e.name,t)}static getSanitizedCapabilities(e){return{remarkPlugins:P(e,`mdx:remark`)?e.remarkPlugins:[],rehypePlugins:P(e,`mdx:rehype`)?e.rehypePlugins:[],vitePlugins:P(e,`vite:config`)?e.vitePlugins:[],components:P(e,`components`)?e.components:{}}}static async executeWithIsolation(t,n,r,i){try{return e.checkPermission(t,n),await i()}catch(e){if(e instanceof j){ne(`Skipping hook '${r}' for plugin '${t.name}': ${e.message}`);return}throw e}}},I=class{plugins;config;store;constructor(e,t){this.plugins=e,this.config=t,this.store=new Ie}async runHook(e,...t){let n=this.getSortedPlugins();for(let r of n){if(!r.hooks?.[e])continue;let n=this.createContext(r),i=e.toLowerCase().includes(`build`),a=e.toLowerCase().includes(`dev`),o=i?`hooks:build`:a?`hooks:dev`:void 0;try{o?await F.executeWithIsolation(r,o,e,()=>r.hooks[e](n,...t)):await r.hooks[e](n,...t)}catch(t){let i=new Fe(r.name,e,t instanceof Error?t:Error(String(t)));n.logger.error(i)}}}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createContext(e){return{config:Object.freeze({...this.config}),meta:{name:e.name,version:e.version,boltdocsVersion:e.boltdocsVersion},store:{get:(e,t)=>this.store.get(e,t),set:(e,t,n)=>this.store.set(e,t,n),has:(e,t)=>this.store.has(e,t)},logger:this.createLogger(e.name)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>b.info(`${t} ${e}`),warn:e=>b.warn(`${t} ${e}`),error:e=>{b.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>b.debug(`${t} ${e}`)}}};function Le(e){return e}const L=_.dirname(oe(import.meta.url));function R(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(R):e&&typeof e==`object`?Object.values(e).flatMap(R):[]}const Re=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function ze(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=R(Object.entries(n.frontmatter).filter(([e])=>!Re.has(e)).map(([e,t])=>t)).join(` `));let r=e?`${n._content||``} ${e}`:n._content||``;if(t.push({id:n.path,title:n.title,content:r,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings)for(let e of n.headings)t.push({id:`${n.path}#${e.id}`,title:e.text,content:`${e.text} in ${n.title}`,url:`${n.path}#${e.id}`,display:`${n.title} > ${e.text}`,locale:n.locale,version:n.version})}return t}function z(t,n,r=!1){let i=C.resolve(process.cwd(),`index.css`),a=v.existsSync(i)?`import './index.css';`:``,o=n?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],s=o.map(([t,n])=>`import * as _comp_${t} from '${e(n)}';
|
|
72
|
+
const ${t} = _comp_${t}.default || _comp_${t}['${t}'] || _comp_${t};`).join(`
|
|
73
|
+
`),c=o.map(([e])=>e).join(`, `),l=C.basename(t.docsDir||`docs`),u=C.resolve(process.cwd(),t.docsDir||`docs`),d=[`tsx`,`ts`,`jsx`,`js`].map(e=>C.resolve(u,`pages-external/index.${e}`)).find(e=>v.existsSync(e));return`
|
|
74
|
+
import { ViteReactSSG, createRoutes } from 'boltdocs/client';
|
|
75
|
+
import _routes from 'virtual:boltdocs-routes.ts';
|
|
76
|
+
import _config from 'virtual:boltdocs-config.ts';
|
|
77
|
+
import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx';
|
|
78
|
+
import _Layout from 'virtual:boltdocs-layout.tsx';
|
|
79
|
+
${a}
|
|
80
|
+
${s}
|
|
81
|
+
${d?`import * as _external_module from '${e(d)}';`:``}
|
|
82
|
+
|
|
83
|
+
const mdxModules = import.meta.glob('/${l}/**/*.{md,mdx}', { eager: true });
|
|
84
|
+
|
|
85
|
+
export const createRoot = ViteReactSSG(
|
|
86
|
+
{
|
|
87
|
+
routes: createRoutes({
|
|
88
|
+
routesData: _routes,
|
|
89
|
+
config: _config,
|
|
90
|
+
mdxModules,
|
|
91
|
+
Layout: _Layout,
|
|
92
|
+
${d?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``}
|
|
93
|
+
components: { ${c}${c?`, `:``} ...(_user_mdx_components || {}) },
|
|
94
|
+
}),
|
|
95
|
+
},
|
|
96
|
+
({ isClient }) => {
|
|
97
|
+
// Boltdocs initialization hook
|
|
98
|
+
if (isClient) {
|
|
99
|
+
// Client-side initialization
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
);
|
|
103
|
+
`}let B=null,V=null;function Be(){B=null,V=null}function Ve(t,n,r,i){return{name:`vite-plugin-boltdocs-virtual-modules`,resolveId(t){let n=r()?.root||process.cwd();return t.includes(`boltdocs-entry.tsx`)||t===`virtual:boltdocs-entry`||t===`boltdocs-entry`||t===`\0virtual:boltdocs-entry`?e(_.resolve(n,`boltdocs-entry.tsx`)):t.includes(`boltdocs-client.mjs`)||t===`virtual:boltdocs-client`||t===`boltdocs-client`||t===`\0virtual:boltdocs-client.ts`?e(_.resolve(n,`boltdocs-client.mjs`)):t.startsWith(`virtual:boltdocs-`)?`\0`+t:t.startsWith(`\0virtual:boltdocs-`)?t:null},async load(a){let o=r()?.command===`build`,c=n();if(a.includes(`boltdocs-entry.tsx`)||a===`\0virtual:boltdocs-entry`)return z(t,c,o);if(a.includes(`boltdocs-client.mjs`)||a===`\0virtual:boltdocs-client.ts`||a===`virtual:boltdocs-client`){let t=L,n=t;for(;t!==_.parse(t).root;){if(S.existsSync(_.join(t,`package.json`))&&JSON.parse(S.readFileSync(_.join(t,`package.json`),`utf-8`)).name===`boltdocs`){n=t;break}t=_.dirname(t)}let r=_.join(n,`src/client/index.ts`),i=_.join(n,`dist/client/index.js`);return`export * from '${e(S.existsSync(r)?r:i)}';`}if(!a.startsWith(`\0virtual:boltdocs-`))return;let l=a.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(l===`routes`){let e=ke(await s(i,c));return`export default ${JSON.stringify(e,null,2)};`}if(l===`config`){if(B===null){let{loadDirectoryMeta:e}=await import(`./meta-loader-CWg2gnbY.mjs`);B=await e(i)}let e=B,t={base:c?.base,theme:c?.theme,i18n:c?.i18n,versions:c?.versions,siteUrl:c?.siteUrl,integrations:c?.integrations,plugins:c?.plugins?.map(e=>({name:e.name})),directoryMeta:e};return`export default ${JSON.stringify(t,null,2)};`}if(l===`entry`)return z(t,c,o);if(l===`mdx-components`){let t=[`tsx`,`ts`,`jsx`,`js`],n=null;for(let e of t){let t=_.resolve(i,`mdx-components.${e}`);if(S.existsSync(t)){n=t;break}}if(n){let t=e(n);return`import * as components from '${t}';
|
|
104
|
+
const mdxComponents = components.default || components;
|
|
105
|
+
export default mdxComponents;
|
|
106
|
+
export * from '${t}';`}return`export default {};`}if(l===`layout`){let t=[`tsx`,`jsx`],n=null;for(let e of t){let t=_.resolve(i,`layout.${e}`);if(S.existsSync(t)){n=t;break}}if(n)return`import UserLayout from '${e(n)}';
|
|
107
|
+
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(l===`icons`){let t=[`tsx`,`jsx`,`ts`,`js`],n=null;for(let e of t){let t=_.resolve(i,`icons.${e}`);if(S.existsSync(t)){n=t;break}}return n?`import * as icons from '${e(n)}';\nexport default icons;`:`export default {};`}if(l===`search`){if(!V){let e=ze(await s(i,c));V=`export default ${JSON.stringify(e,null,2)};`}return V}if(l===`client`){let t=L,n=``;for(;t&&t!==_.parse(t).root;){let r=_.join(t,`src/client/index.ts`),i=_.join(t,`dist/client/index.mjs`),a=_.join(t,`client/index.ts`);if(S.existsSync(r)){n=e(r);break}if(S.existsSync(i)){n=e(i);break}if(S.existsSync(a)){n=e(a);break}t=_.dirname(t)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${L}`);return`export * from '${n}';`}}}}const He={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function Ue(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}const H=new Map;async function We(e){try{let{data:t}=await r(e),n=JSON.stringify(t);return re.createHash(`md5`).update(n).digest(`hex`)}catch{return``}}function Ge(e){return H.get(e)}function Ke(e,t){H.set(e,t)}function qe(e){H.delete(e)}function U(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function Je(t,r,i,s,u){let f=new Map;return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(s){let p=u();await p?.runHook(`beforeDev`),d(t,process.cwd(),i()).catch(e=>{x(`Failed to generate initial link tree:`,e)}),setTimeout(async()=>{try{let{generateRoutes:e}=await import(`./routes-CpxZIsMM.mjs`).then(e=>e.r),n=await e(t,i());for(let e of n)if(e.filePath){let t=_.relative(process.cwd(),e.filePath).replace(/\\/g,`/`),n=t.startsWith(`/`)?t:`/${t}`;await s.transformRequest(n).catch(()=>{}),await new Promise(e=>setTimeout(e,50))}}catch{}},1e3),s.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(He).forEach(([e,n])=>{t.setHeader(e,n)});let r=i();r.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,Ue(r)),n()}),s.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),s.middlewares.use(async(e,t,n)=>{let r=e.url?.split(`?`)[0]||`/`,a=e.headers.accept||``,o=i(),c=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(r);if(a.includes(`text/html`)&&!c){let n=Me(o);n=Ne(n,o),n=await s.transformIndexHtml(e.url||`/`,n),t.statusCode=200,t.setHeader(`Content-Type`,`text/html`),t.end(n);return}n()});let m=l.map(e=>_.resolve(process.cwd(),e)),ee=[`tsx`,`jsx`].map(e=>_.resolve(t,`layout.${e}`)),h=[`tsx`,`ts`,`jsx`,`js`],te=h.map(e=>_.resolve(t,`mdx-components.${e}`)),g=h.map(e=>_.resolve(t,`pages-external/index.${e}`)),v=h.map(e=>_.resolve(t,`icons.${e}`));s.watcher.add([...m,...te,...ee,...g,...v]);let y=async(u,p)=>{try{let m=e(u);if(l.some(e=>m.endsWith(e))){s.restart();return}if(h.some(e=>m.endsWith(`mdx-components.${e}`))){c(i(),t),U(s,`mdx-components.tsx`),s.ws.send({type:`full-reload`});return}if(h.some(e=>m.endsWith(`icons.${e}`))){U(s,`icons.tsx`),s.ws.send({type:`full-reload`});return}if(m.endsWith(`layout.tsx`)||m.endsWith(`layout.jsx`)){U(s,`layout.tsx`),s.ws.send({type:`full-reload`});return}if(m.includes(`/pages-external/`)||m.includes(`\\pages-external\\`)){U(s,`entry`),s.ws.send({type:`full-reload`});return}if(!m.toLowerCase().startsWith(r.toLowerCase())||!n(m))return;if(p===`add`||p===`unlink`){p===`unlink`&&qe(u),o(),Be();let e=i();c(e,t),U(s,`config`),U(s,`routes`),U(s,`search`),d(t,process.cwd(),e).catch(e=>{x(`Failed to update link tree:`,e)}),s.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:e?.theme,i18n:e?.i18n,versions:e?.versions,siteUrl:e?.siteUrl}}),s.ws.send({type:`full-reload`});return}f.has(m)&&clearTimeout(f.get(m)),f.set(m,setTimeout(async()=>{f.delete(m);try{let n=Ge(u),r=await We(u);Ke(u,r),a(u),n!==void 0&&n!==r&&(U(s,`routes`),U(s,`search`));let i=e(_.relative(t,u)),o=s.moduleGraph.getModulesByFile(m);if(o)for(let e of o)s.moduleGraph.invalidateModule(e);s.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:m,relPath:i}})}catch(e){x(`HMR error processing content change:`,e)}},150))}catch(e){x(`HMR error during ${p} event:`,e)}};s.watcher.on(`add`,e=>y(e,`add`)),s.watcher.on(`unlink`,e=>y(e,`unlink`)),s.watcher.on(`change`,e=>y(e,`change`)),await p?.runHook(`afterDev`)},handleHotUpdate({file:t,server:i}){let a=e(t);if(a.toLowerCase().startsWith(r.toLowerCase())&&n(a))return[]}}}const W=p.createRequire(import.meta.url);function Ye(e){let t=_.dirname(e);for(;t&&t!==_.dirname(t);){let e=_.join(t,`package.json`);if(S.existsSync(e))return e;t=_.dirname(t)}return null}function Xe(e){let t=e.split(`/`);return e.startsWith(`@`)?{packageName:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}:{packageName:t[0],subpath:t.slice(1).join(`/`)}}function G(e,t=W){try{let{packageName:n,subpath:r}=Xe(e),i;try{i=t.resolve(n+`/package.json`)}catch{i=Ye(t.resolve(n))||``}if(!i)throw Error(`Could not find package.json for ${n}`);let a=_.dirname(i),o=JSON.parse(S.readFileSync(i,`utf-8`)),s=``,c=r?`./`+r:`.`;if(o.exports){let e=o.exports[c]||o.exports[r];e&&(s=typeof e==`string`?e:e.import||e.default||e.require||e)}if(!s&&!r&&(s=o.module||o.main||`index.js`),typeof s==`object`&&(s=s.import||s.default||s.require||``),s){let e=_.resolve(a,s);if(S.existsSync(e))return e}}catch{}return t.resolve(e)}function Ze(){let t=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],n=[],r=W;try{let e=_.join(process.cwd(),`node_modules/boltdocs/package.json`);if(S.existsSync(e)){let t=S.realpathSync(e);r=p.createRequire(t)}else r=p.createRequire(_.join(process.cwd(),`package.json`))}catch{}for(let e of t)try{let t=``;t=e===`@bdocs/ssg`||e===`react-router-dom`||e===`react-helmet-async`?G(e,r):r.resolve(e),t&&n.push(S.realpathSync(t))}catch{}if(r!==W)for(let e of t)try{let t=``;t=e===`@bdocs/ssg`||e===`react-router-dom`||e===`react-helmet-async`?G(e,W):W.resolve(e),t&&n.push(S.realpathSync(t))}catch{}for(let e of[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]){try{n.push(S.realpathSync(r.resolve(e)))}catch{}if(r!==W)try{n.push(S.realpathSync(W.resolve(e)))}catch{}}return Array.from(new Set(n)).map(t=>e(t))}function Qe(t={},n){let r=_.resolve(process.cwd(),t.docsDir||`docs`),i=e(r),a=n,o,c=!1,l,u=[],d=()=>a;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){c=t.command===`build`;let n=!!(t.ssrBuild||t.ssr||e.build?.ssr),i=e.envDir||process.cwd(),o=te(t.mode,i,``);Object.assign(process.env,o),a||=await f(r);let d=(await import(`./package--0Yf0t1N.mjs`)).version,p=N(a.plugins||[],d);return a.plugins=p,l=new I(p,a),u=p.flatMap(e=>F.getSanitizedCapabilities(e).vitePlugins||[]),c&&await l.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`flat`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=Ae(ke(await s(r,a)),a);t&&S.writeFileSync(_.join(e,`sitemap.xml`),t);let n=je(a);S.writeFileSync(_.join(e,`robots.txt`),n)}},build:{ssrManifest:c},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`,`react-fast-compare`,`invariant`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{alias:[{find:`react-router-dom`,replacement:G(`react-router-dom`)},{find:`react-helmet-async`,replacement:G(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:G(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...n?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Ze()],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[]}}},configResolved(e){o=e,l?.runHook(`configResolved`,a)},resolveId(e,t,n){let r=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`].find(t=>e===t||e.startsWith(t+`/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,_.sep)}/`));if(r&&n?.ssr){let t=e;if(!_.isAbsolute(e)){let n=W;try{let e=_.join(process.cwd(),`node_modules/boltdocs/package.json`);if(S.existsSync(e)){let t=S.realpathSync(e);n=p.createRequire(t)}else n=p.createRequire(_.join(process.cwd(),`package.json`))}catch{}try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(e,n):n.resolve(e)}catch{try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(e,W):W.resolve(e)}catch{}}}try{t=S.realpathSync(t)}catch{}return{id:t,external:!0}}return null},transformIndexHtml:{order:`pre`,handler(e){return Ne(e,a)}},async buildEnd(){let{pool:e}=await import(`./worker-pool-CGn7DrLb.mjs`);await e.terminate()},async closeBundle(){!c||o?.build?.ssr||(await l?.runHook(`afterBuild`),await l?.runHook(`buildEnd`))},configurePreviewServer(e){let t=o?.build?.outDir?_.resolve(o.root||process.cwd(),o.build.outDir):_.resolve(process.cwd(),`dist`);e.middlewares.use((e,n,r)=>{let i=e.url||`/`,a=i.split(`?`)[0].split(`#`)[0];if(_.extname(a))return r();let o=a.replace(/\/$/,``)||`/`,s=_.join(t,o,`index.html`);o!==`/`&&S.existsSync(s)&&(e.url=`${o}/index.html${i.includes(`?`)?`?${i.split(`?`)[1]}`:``}`),r()})}},Ve(t,d,()=>o,r),Je(r,i,d,e=>{a=e},()=>l),{...ie({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),apply:`build`},...u]}const K=new i(`mdx`),$e=[pe.default||pe,me.default||me,T.default||T,E.default||E,D.default||D,O.default||O,he.default||he],et=[ge,_e,ve,ye,be,xe,Se,Ce,we,Te,Ee,De,Oe];let q=null,J=null;const tt=()=>(q??=de(),q),nt=async e=>J||(J=fe({themes:$e,langs:et,engine:tt()}),J),Y={JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,ELEMENT:`element`,TEXT:`text`,CODE:`code`},rt={PRE:`pre`,CODE:`code`},X={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},Z={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},it={LIGHT:`github-light`,DARK:`github-dark`},Q={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},at=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.lineNumbers===!0;(t||n)&&this.addClassToHast(e,Z.LINE_NUMBERS)}}},ot=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.wordWrap===!0;(t||n)&&this.addClassToHast(e,Z.WORD_WRAP)}}},st=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[X.TITLE]=t)}}),ct=()=>({name:`AddLanguageProperty`,pre(e){e.properties[X.LANG]=this.options.lang||Q.LANG}});function lt(e){let t={};if(!e)return t;/lineNumbers|showLineNumbers/.test(e)&&(t.lineNumbers=!0),/wordWrap|word-wrap/.test(e)&&(t.wordWrap=!0);let n=e.match(/title=(["'])(.*?)\1/);return n&&(t.title=n[2]),t}var ut=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:it.LIGHT,dark:it.DARK}}async getHighlighter(){return await nt(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=lt(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||Q.LANG,meta:{__raw:i,...r},transformers:[at(),ot(),st(),ct()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,t,n){try{let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}catch(t){return console.error(`[ShikiAdapter] Failed to render code:`,t),`<pre class="${Z.FALLBACK}"><code>${dt(e)}</code></pre>`}}};function dt(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}let $=null,ft;function pt(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return($===null||ft!==t)&&($=new ut(e),ft=t),$}function mt(e){let t=pt(e);return async e=>{let n=await t.getHighlighter();w(e,Y.ELEMENT,e=>{if(e.tagName===rt.PRE&&e.children?.[0]?.type===Y.ELEMENT&&e.children[0].tagName===rt.CODE){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):Q.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=r.children?.[0]?.value||``,s=lt(r.properties?.metastring||r.data?.meta||``),c=t.getOptions(a,s),l=``;try{l=n.codeToHtml(o,c)}catch(e){console.error(`[rehypeShiki] Failed to highlight code block:`,e),l=`<pre class="${Z.FALLBACK}"><code>${dt(o)}</code></pre>`}e.properties=e.properties||{},s.title&&(e.properties[X.TITLE]=s.title),e.properties[X.HIGHLIGHTED]=`true`,e.properties[X.HIGHLIGHTED_HTML]=l,e.properties[X.LANG]=a,e.children=[]}})}}function ht(){return e=>{w(e,Y.CODE,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let gt=!1;function _t(e,t=se){let n=e?.plugins?.flatMap(e=>F.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>F.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[ce,le,ht,...n],rehypePlugins:[ue,[mt,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){gt||=(await K.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){let[r]=t.split(`?`);if(!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let a=`${r}:${re.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,o=await K.getAsync(a);if(o)return{code:o,map:null};let s=await i.transform.call(this,e,r,n);return s&&typeof s==`object`&&s.code&&(process.env.NODE_ENV!==`production`&&(s.code+=`
|
|
108
|
+
if (import.meta.hot) {
|
|
109
|
+
import.meta.hot.accept();
|
|
110
|
+
}
|
|
111
|
+
`),K.set(a,s.code)),s},async buildEnd(){K.save(),await K.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}m(import.meta.url);async function vt(e){let t=await f(e?.docsDir||`docs`);return[...Qe({...e},t),_t(t)]}async function yt(e,t=`development`){let n=await f(`docs`,e),r=t===`production`,i=r?{...He}:{};return n.security?.enableCSP&&(i[`Content-Security-Policy`]=Ue(n)),{root:e,mode:t,oxc:{jsx:{development:!r,runtime:`automatic`,importSource:`react`}},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`react-fast-compare`,`invariant`,`use-sync-external-store/shim`]},build:{},plugins:[ee(),h(),...Qe({docsDir:`docs`,root:e},n),_t(n)],resolve:{alias:[{find:`boltdocs/entry`,replacement:g(_.resolve(e,`boltdocs-entry.tsx`))},{find:`boltdocs/client`,replacement:g(_.resolve(e,`boltdocs-client.mjs`))},{find:`use-sync-external-store/shim/index.js`,replacement:`react`},{find:`use-sync-external-store/shim`,replacement:`react`},{find:`use-sync-external-store`,replacement:`react`}],dedupe:[`react`,`react-dom`]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Ze()],optimizeDeps:{include:[`react-fast-compare`,`invariant`,...n.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`]},server:{headers:{...i,...n.vite?.server?.headers},...n.vite?.server},preview:{headers:{...i,...n.vite?.preview?.headers},...n.vite?.preview},...n.vite}}export{I as a,P as c,Pe as d,k as f,A as h,Le as i,N as l,j as m,yt as n,F as o,Fe as p,z as r,M as s,vt as t,Ie as u};
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
var e=`2.7.
|
|
6
|
+
var e=`2.7.10`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
const e=require(`./chunk-
|
|
6
|
+
const e=require(`./chunk-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`),n=require(`./cache-Ba-DZQNH.cjs`);let r=require(`node:path`);r=e.t(r);let i=require(`github-slugger`);i=e.t(i);function a(e,n,i,a,o){let s=r.default.relative(n,e).replace(/\\/g,`/`),c=s.split(`/`),l,u,d;if(a?.versions&&c.length>0){let e=c[0],t=a.versions.prefix||``,n=a.versions.versions.find(n=>e===t+n.path||e===n.path);n&&(u=n.path,c=c.slice(1))}if(a?.i18n&&c.length>0){let e=c[0];(Array.isArray(a.i18n.locales)?a.i18n.locales.includes(e):a.i18n.locales[e])&&(l=e,c=c.slice(1))}if(c.length>0){let e=c[0].match(/^\((.+)\)$/);e&&(d=e[1].toLowerCase(),c=c.slice(1))}let f=[...c],p=c.map(e=>t.m(e)).join(`/`),m=o?o.startsWith(`/`)?o:`/${o}`:t.i(p||`index.md`),h=[i,u,l,o?void 0:d,m].filter(Boolean).join(`/`).replace(/\/+/g,`/`).replace(/\/$/,``)||`/`;return{relativePath:s,finalPath:h.startsWith(`/`)?h:`/${h}`,remainingParts:f,locale:l,version:u,inferredTab:d,subRouteGroup:void 0}}const o=/^(#{2,4})\s+(.+)$/gm,s=/\[([^\]]+)\]\([^)]+\)/g,c=/[_*`]/g,l=/\s+/g,u=/[[\]_*`]|#+.*$|\{[^}]+\}/gm,d=/\((?:[^)]+)\)/g;function f(e,n){let r=new i.default,a=[];for(let n of e.matchAll(o)){let e=n[1].length,i=t.f(n[2].replace(s,`$1`).replace(c,``).trim()).trim(),o=r.slug(i);a.push({level:e,text:i,id:o})}let f=t.p(e.replace(u,``).replace(d,``).replace(l,` `)).trim(),p=n?t.f(n).trim():``;return!p&&e&&(p=f.substring(0,160)),{headings:a,description:p,plainText:f}}const p=[`og:`,`twitter:`,`article:`,`music:`,`video:`,`profile:`,`book:`],m=[`noindex`,`robots`,`canonical`,`keywords`,`author`];function h(e){let t={};e.seo&&typeof e.seo==`object`&&Object.assign(t,e.seo);for(let n of Object.keys(e))(m.includes(n)||p.some(e=>n.startsWith(e)))&&(t[n]=e[n]);return e.hidden===!0&&t.noindex===void 0&&(t.noindex=!0),Object.keys(t).length>0?t:void 0}function g(e){return{title:e.title?t.f(String(e.title)):void 0,badge:e.badge?t.f(String(e.badge)):void 0,description:e.description?t.f(String(e.description)):void 0}}async function _(e,i,o,s){let c=await n.t.get(e);if(c)return c;let l=e.replace(/\\/g,`/`),u=i.replace(/\\/g,`/`),d=v(l),p=r.default.resolve(d),m=r.default.resolve(u);if(r.default.sep===`/`){let e=e=>{let t=e.replace(/\\/g,`/`);return/^[a-zA-Z]:/.test(t)&&(t=t.replace(/^[a-zA-Z]:/,``)),r.default.resolve(t)};p=e(d),m=e(u)}let _=r.default.relative(m,p).replace(/\\/g,`/`);if(_.startsWith(`../`)||_!==`.`&&!t.y.test(_))throw new t.g(`Security breach: File is outside of docs directory, contains null bytes, or invalid path characters: ${r.default.basename(d)}`);let{data:y,content:b}=await t.u(e),x=a(p,m,o,s,y.permalink),S=f(b,y.description),C=g(y),w=h(y),T=r.default.basename(x.relativePath),E=t.m(T),D=x.remainingParts.map(e=>t.m(e)).slice(0,-1),O=/^index\.mdx?$/.test(E),k=y.sidebarPosition??t.r(T),A=D.join(`/`),j={route:{path:x.finalPath,componentPath:e,filePath:x.relativePath,title:C.title||t.m(r.default.basename(l,r.default.extname(l))),description:S.description,sidebarPosition:k,headings:S.headings,locale:x.locale,version:x.version,badge:C.badge,icon:y.icon?String(y.icon):void 0,tab:x.inferredTab,subRouteGroup:x.subRouteGroup,slugParts:D,_content:S.plainText,_rawContent:b,date:y.date,lastUpdated:y.lastUpdated,category:y.category,order:y.order,sidebarLabel:y.sidebarLabel,sidebarHidden:y.sidebarHidden||y.hidden,seo:w,frontmatter:y},relativeDir:A||void 0,isGroupIndex:O,inferredTab:x.inferredTab,groupMeta:O?{title:y.groupTitle||C.title||(D.length>0?t.t(D[D.length-1]):``),position:y.groupPosition??y.sidebarPosition??(x.remainingParts.length>1?t.r(x.remainingParts[x.remainingParts.length-2]):void 0),icon:y.icon?String(y.icon):void 0}:void 0,inferredGroupPosition:x.remainingParts.length>1?t.r(x.remainingParts[x.remainingParts.length-2]):void 0};return await n.t.set(e,j),j}function v(e){let n;try{n=decodeURIComponent(e)}catch{throw t.c(`SECURITY_ERROR`,`Invalid encoding in path`,{file:e}),new t.h(`Security breach: Invalid characters or encoding in path`)}if(n.length>260)throw new t.g(`Path length exceeds limit`);return n}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _}});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import{t as e}from"./rolldown-runtime-fkIsjY3S.mjs";import{c as t,f as n,g as r,h as i,i as a,m as o,p as s,r as c,t as l,u,y as d}from"./utils-CG65J0Sc.mjs";import{t as f}from"./cache-BuMZ58L5.mjs";import p from"node:path";import m from"github-slugger";function h(e,t,n,r,i){let s=p.relative(t,e).replace(/\\/g,`/`),c=s.split(`/`),l,u,d;if(r?.versions&&c.length>0){let e=c[0],t=r.versions.prefix||``,n=r.versions.versions.find(n=>e===t+n.path||e===n.path);n&&(u=n.path,c=c.slice(1))}if(r?.i18n&&c.length>0){let e=c[0];(Array.isArray(r.i18n.locales)?r.i18n.locales.includes(e):r.i18n.locales[e])&&(l=e,c=c.slice(1))}if(c.length>0){let e=c[0].match(/^\((.+)\)$/);e&&(d=e[1].toLowerCase(),c=c.slice(1))}let f=[...c],m=c.map(e=>o(e)).join(`/`),h=i?i.startsWith(`/`)?i:`/${i}`:a(m||`index.md`),g=[n,u,l,i?void 0:d,h].filter(Boolean).join(`/`).replace(/\/+/g,`/`).replace(/\/$/,``)||`/`;return{relativePath:s,finalPath:g.startsWith(`/`)?g:`/${g}`,remainingParts:f,locale:l,version:u,inferredTab:d,subRouteGroup:void 0}}const g=/^(#{2,4})\s+(.+)$/gm,_=/\[([^\]]+)\]\([^)]+\)/g,v=/[_*`]/g,y=/\s+/g,b=/[[\]_*`]|#+.*$|\{[^}]+\}/gm,x=/\((?:[^)]+)\)/g;function S(e,t){let r=new m,i=[];for(let t of e.matchAll(g)){let e=t[1].length,a=n(t[2].replace(_,`$1`).replace(v,``).trim()).trim(),o=r.slug(a);i.push({level:e,text:a,id:o})}let a=s(e.replace(b,``).replace(x,``).replace(y,` `)).trim(),o=t?n(t).trim():``;return!o&&e&&(o=a.substring(0,160)),{headings:i,description:o,plainText:a}}const C=[`og:`,`twitter:`,`article:`,`music:`,`video:`,`profile:`,`book:`],w=[`noindex`,`robots`,`canonical`,`keywords`,`author`];function T(e){let t={};e.seo&&typeof e.seo==`object`&&Object.assign(t,e.seo);for(let n of Object.keys(e))(w.includes(n)||C.some(e=>n.startsWith(e)))&&(t[n]=e[n]);return e.hidden===!0&&t.noindex===void 0&&(t.noindex=!0),Object.keys(t).length>0?t:void 0}function E(e){return{title:e.title?n(String(e.title)):void 0,badge:e.badge?n(String(e.badge)):void 0,description:e.description?n(String(e.description)):void 0}}async function D(e,t,n,i){let a=await f.get(e);if(a)return a;let s=e.replace(/\\/g,`/`),m=t.replace(/\\/g,`/`),g=O(s),_=p.resolve(g),v=p.resolve(m);if(p.sep===`/`){let e=e=>{let t=e.replace(/\\/g,`/`);return/^[a-zA-Z]:/.test(t)&&(t=t.replace(/^[a-zA-Z]:/,``)),p.resolve(t)};_=e(g),v=e(m)}let y=p.relative(v,_).replace(/\\/g,`/`);if(y.startsWith(`../`)||y!==`.`&&!d.test(y))throw new r(`Security breach: File is outside of docs directory, contains null bytes, or invalid path characters: ${p.basename(g)}`);let{data:b,content:x}=await u(e),C=h(_,v,n,i,b.permalink),w=S(x,b.description),D=E(b),k=T(b),A=p.basename(C.relativePath),j=o(A),M=C.remainingParts.map(e=>o(e)).slice(0,-1),N=/^index\.mdx?$/.test(j),P=b.sidebarPosition??c(A),F=M.join(`/`),I={route:{path:C.finalPath,componentPath:e,filePath:C.relativePath,title:D.title||o(p.basename(s,p.extname(s))),description:w.description,sidebarPosition:P,headings:w.headings,locale:C.locale,version:C.version,badge:D.badge,icon:b.icon?String(b.icon):void 0,tab:C.inferredTab,subRouteGroup:C.subRouteGroup,slugParts:M,_content:w.plainText,_rawContent:x,date:b.date,lastUpdated:b.lastUpdated,category:b.category,order:b.order,sidebarLabel:b.sidebarLabel,sidebarHidden:b.sidebarHidden||b.hidden,seo:k,frontmatter:b},relativeDir:F||void 0,isGroupIndex:N,inferredTab:C.inferredTab,groupMeta:N?{title:b.groupTitle||D.title||(M.length>0?l(M[M.length-1]):``),position:b.groupPosition??b.sidebarPosition??(C.remainingParts.length>1?c(C.remainingParts[C.remainingParts.length-2]):void 0),icon:b.icon?String(b.icon):void 0}:void 0,inferredGroupPosition:C.remainingParts.length>1?c(C.remainingParts[C.remainingParts.length-2]):void 0};return await f.set(e,I),I}function O(e){let n;try{n=decodeURIComponent(e)}catch{throw t(`SECURITY_ERROR`,`Invalid encoding in path`,{file:e}),new i(`Security breach: Invalid characters or encoding in path`)}if(n.length>260)throw new r(`Path length exceeds limit`);return n}var k=e({parseDocFile:()=>D});export{D as n,k as t};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import"node:module";var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};export{t};
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
const e=require(`./chunk-
|
|
6
|
+
const e=require(`./chunk-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`),n=require(`./cache-Ba-DZQNH.cjs`);let r=require(`node:path`);r=e.t(r);let i=require(`fdir`);const a=new n.n({name:`routes`});function o(){a.invalidateAll(),n.t.clear()}function s(e){a.invalidate(e),n.t.invalidate(e)}function c(e){return e.sort((e,t)=>!e.group&&!t.group?l(e,t):e.group?t.group?e.group===t.group?l(e,t):u(e,t):1:-1)}function l(e,t){return e.sidebarPosition!==void 0&&t.sidebarPosition!==void 0?e.sidebarPosition-t.sidebarPosition:e.sidebarPosition===void 0?t.sidebarPosition===void 0?e.title.localeCompare(t.title):1:-1}function u(e,t){return e.groupPosition!==void 0&&t.groupPosition!==void 0?e.groupPosition-t.groupPosition:e.groupPosition===void 0?t.groupPosition===void 0?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):1:-1}let d=null;const f=new Map;let p=null;function m(){d=null,f.clear(),o()}async function h(e,n,o,s=!1){if(p)return p;let l=(async()=>{let l=o||n?.base||`/docs`;await a.load(),f.clear();let u;if(!s&&d)u=d;else{let t=await new i.fdir().withFullPaths().filter(t=>t.endsWith(`.md`)||t.endsWith(`.mdx`)?!r.default.relative(e,t).replace(/\\/g,`/`).split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`):!1).crawl(e).withPromise(),n=[/index\./i,/intro/i,/getting-started/i,/readme/i],a=t.map(e=>{let t=r.default.basename(e),i=n.findIndex(e=>e.test(t));return{f:e,score:i===-1?2**53-1:i}});a.sort((e,t)=>e.score-t.score),u=a.map(e=>e.f),d=u}a.pruneStale(new Set(u));let p=process.env.NODE_ENV===`test`||process.env.VITEST===`true`,m;if(p){let{parseDocFile:t}=await Promise.resolve().then(()=>require(`./parser-Aq8LoH-0.cjs`));m=await Promise.all(u.map(async r=>{let i=a.get(r);if(i)return i;let o=await t(r,e,l,n);return a.set(r,o),o}))}else{let{pool:t}=await Promise.resolve().then(()=>require(`./worker-pool-Crbqgw5R.cjs`)),r=n?{i18n:n.i18n,versions:n.versions}:void 0;m=await Promise.all(u.map(async n=>{let i=a.get(n);if(i)return i;let o=await t.parseFile(n,e,l,r);return a.set(n,o),o}))}a.save();let h=new Map,_=[],v=n?.i18n?.defaultLocale||``;for(let e of m)if(e.isGroupIndex&&e.relativeDir&&_.push(e),e.relativeDir){let n=`${e.route.locale||v}:${e.relativeDir}`,r=h.get(n);r?r.position===void 0&&e.inferredGroupPosition!==void 0&&(r.position=e.inferredGroupPosition):(r={title:t.t(e.relativeDir),position:e.inferredGroupPosition},h.set(n,r))}for(let e of _){let t=`${e.route.locale||v}:${e.relativeDir}`,n=h.get(t);e.groupMeta&&(n.title=e.groupMeta.title,e.groupMeta.position!==void 0&&(n.position=e.groupMeta.position),e.groupMeta.icon&&(n.icon=e.groupMeta.icon))}if(n?.theme?.sidebarGroups){let e=n.i18n?Object.keys(n.i18n.locales):[v];for(let[r,i]of Object.entries(n.theme.sidebarGroups))for(let n of e){let e=`${n}:${r}`,a=h.get(e),o;typeof i.title==`string`?o=i.title:i.title&&(o=i.title[n]||i.title[v]),a?(o&&(a.title=o),i.icon&&(a.icon=i.icon)):h.set(e,{title:o||t.t(r),icon:i.icon})}}let y=Array(m.length);for(let e=0;e<m.length;e++){let n=m[e],r=n.relativeDir,i=n.route.locale||v,a=r?`${i}:${r}`:void 0,o=a?h.get(a):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[i]||o.title[v]),y[e]={...n.route,group:r,groupTitle:s||(r?t.t(r):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let b=y;if(n?.i18n){let e=g(y,n,l);b=[...y,...e]}return c(b)})();p=l;try{return await l}finally{p=null}}function g(e,t,n){let r=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),a=[],o=new Map,s=[];for(let t of e){let e=t.locale||r;o.has(e)||o.set(e,new Set),o.get(e).add(t.path),e===r&&s.push(t)}for(let e of i){let i=o.get(e)||new Set;for(let o of s){let s=_(o.path,r,e,n,t);s!==o.path&&(i.has(s)||a.push({...o,path:s,locale:e}))}}return a}function _(e,t,n,r,i){let a=`${e}:${n}`,o=f.get(a);if(o)return o;let s=r.startsWith(`/`)?r:`/`+r,c=s;if(i?.versions){let t=i.versions.prefix||``;for(let n of i.versions.versions){let r=`${s}/${t+n.path}`;if(e.startsWith(r)){c=r;break}let i=`${s}/${n.path}`;if(e.startsWith(i)){c=i;break}}}let l=e.substring(c.length),u=`/${t}`;if(l.startsWith(u+`/`))l=`/`+n+`/`+l.substring(u.length+1);else if(l===u)l=`/`+n;else if(l===`/`||l===``)l=`/`+n;else{let e=l.startsWith(`/`)?``:`/`;l=`/`+n+e+l}let d=c+l;return f.size>2e3&&f.clear(),f.set(a,d),d}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import{t as e}from"./rolldown-runtime-fkIsjY3S.mjs";import{t}from"./utils-CG65J0Sc.mjs";import{n,t as r}from"./cache-BuMZ58L5.mjs";import i from"node:path";import{fdir as a}from"fdir";const o=new n({name:`routes`});function s(){o.invalidateAll(),r.clear()}function c(e){o.invalidate(e),r.invalidate(e)}function l(e){return e.sort((e,t)=>!e.group&&!t.group?u(e,t):e.group?t.group?e.group===t.group?u(e,t):d(e,t):1:-1)}function u(e,t){return e.sidebarPosition!==void 0&&t.sidebarPosition!==void 0?e.sidebarPosition-t.sidebarPosition:e.sidebarPosition===void 0?t.sidebarPosition===void 0?e.title.localeCompare(t.title):1:-1}function d(e,t){return e.groupPosition!==void 0&&t.groupPosition!==void 0?e.groupPosition-t.groupPosition:e.groupPosition===void 0?t.groupPosition===void 0?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):1:-1}var f=e({generateRoutes:()=>_,invalidateRouteCache:()=>g});let p=null;const m=new Map;let h=null;function g(){p=null,m.clear(),s()}async function _(e,n,r,s=!1){if(h)return h;let c=(async()=>{let c=r||n?.base||`/docs`;await o.load(),m.clear();let u;if(!s&&p)u=p;else{let t=await new a().withFullPaths().filter(t=>t.endsWith(`.md`)||t.endsWith(`.mdx`)?!i.relative(e,t).replace(/\\/g,`/`).split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`):!1).crawl(e).withPromise(),n=[/index\./i,/intro/i,/getting-started/i,/readme/i],r=t.map(e=>{let t=i.basename(e),r=n.findIndex(e=>e.test(t));return{f:e,score:r===-1?2**53-1:r}});r.sort((e,t)=>e.score-t.score),u=r.map(e=>e.f),p=u}o.pruneStale(new Set(u));let d=process.env.NODE_ENV===`test`||process.env.VITEST===`true`,f;if(d){let{parseDocFile:t}=await import(`./parser-nE792MLO.mjs`).then(e=>e.t);f=await Promise.all(u.map(async r=>{let i=o.get(r);if(i)return i;let a=await t(r,e,c,n);return o.set(r,a),a}))}else{let{pool:t}=await import(`./worker-pool-CGn7DrLb.mjs`),r=n?{i18n:n.i18n,versions:n.versions}:void 0;f=await Promise.all(u.map(async n=>{let i=o.get(n);if(i)return i;let a=await t.parseFile(n,e,c,r);return o.set(n,a),a}))}o.save();let h=new Map,g=[],_=n?.i18n?.defaultLocale||``;for(let e of f)if(e.isGroupIndex&&e.relativeDir&&g.push(e),e.relativeDir){let n=`${e.route.locale||_}:${e.relativeDir}`,r=h.get(n);r?r.position===void 0&&e.inferredGroupPosition!==void 0&&(r.position=e.inferredGroupPosition):(r={title:t(e.relativeDir),position:e.inferredGroupPosition},h.set(n,r))}for(let e of g){let t=`${e.route.locale||_}:${e.relativeDir}`,n=h.get(t);e.groupMeta&&(n.title=e.groupMeta.title,e.groupMeta.position!==void 0&&(n.position=e.groupMeta.position),e.groupMeta.icon&&(n.icon=e.groupMeta.icon))}if(n?.theme?.sidebarGroups){let e=n.i18n?Object.keys(n.i18n.locales):[_];for(let[r,i]of Object.entries(n.theme.sidebarGroups))for(let n of e){let e=`${n}:${r}`,a=h.get(e),o;typeof i.title==`string`?o=i.title:i.title&&(o=i.title[n]||i.title[_]),a?(o&&(a.title=o),i.icon&&(a.icon=i.icon)):h.set(e,{title:o||t(r),icon:i.icon})}}let y=Array(f.length);for(let e=0;e<f.length;e++){let n=f[e],r=n.relativeDir,i=n.route.locale||_,a=r?`${i}:${r}`:void 0,o=a?h.get(a):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[i]||o.title[_]),y[e]={...n.route,group:r,groupTitle:s||(r?t(r):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let b=y;if(n?.i18n){let e=v(y,n,c);b=[...y,...e]}return l(b)})();h=c;try{return await c}finally{h=null}}function v(e,t,n){let r=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),a=[],o=new Map,s=[];for(let t of e){let e=t.locale||r;o.has(e)||o.set(e,new Set),o.get(e).add(t.path),e===r&&s.push(t)}for(let e of i){let i=o.get(e)||new Set;for(let o of s){let s=y(o.path,r,e,n,t);s!==o.path&&(i.has(s)||a.push({...o,path:s,locale:e}))}}return a}function y(e,t,n,r,i){let a=`${e}:${n}`,o=m.get(a);if(o)return o;let s=r.startsWith(`/`)?r:`/`+r,c=s;if(i?.versions){let t=i.versions.prefix||``;for(let n of i.versions.versions){let r=`${s}/${t+n.path}`;if(e.startsWith(r)){c=r;break}let i=`${s}/${n.path}`;if(e.startsWith(i)){c=i;break}}}let l=e.substring(c.length),u=`/${t}`;if(l.startsWith(u+`/`))l=`/`+n+`/`+l.substring(u.length+1);else if(l===u)l=`/`+n;else if(l===`/`||l===``)l=`/`+n;else{let e=l.startsWith(`/`)?``:`/`;l=`/`+n+e+l}let d=c+l;return m.size>2e3&&m.clear(),m.set(a,d),d}export{c as i,g as n,f as r,_ as t};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import e from"fs";import t from"isomorphic-dompurify";import{z as n}from"zod";import{error as r}from"@bdocs/dui";const i=/^[a-zA-Z0-9\-_/.()]+$/,a=n.looseObject({title:n.string().max(200).optional(),description:n.string().max(500).optional(),permalink:n.string().optional(),sidebarPosition:n.number().optional(),sidebarLabel:n.string().max(100).optional(),sidebarHidden:n.boolean().optional(),hidden:n.boolean().optional(),category:n.string().max(50).optional(),order:n.number().optional(),badge:n.union([n.string().max(50),n.object({text:n.string().max(50),expires:n.string().optional()})]).optional(),icon:n.string().max(50).optional(),date:n.union([n.string(),n.date()]).optional(),lastUpdated:n.union([n.string(),n.date()]).optional(),groupTitle:n.string().max(100).optional(),groupPosition:n.number().optional(),seo:n.record(n.any()).optional()});function o(e){let t=e.trim();if(!t.startsWith(`---`))return{data:{},content:e,rawMatter:``};let n=t.indexOf(`---`,3);if(n===-1||n===3)return{data:{},content:e,rawMatter:``};let r=t.slice(3,n).trim(),i=t.slice(n+3).trim();return s(r)?{data:{},content:i,rawMatter:r}:{data:c(r),content:i,rawMatter:r}}function s(e){let t=!1,n=!1;for(let r=0;r<e.length;r++){let i=e[r],a=r>0?e[r-1]:``;i===`'`&&!n&&a!==`\\`?t=!t:i===`"`&&!t&&a!==`\\`&&(n=!n)}return t||n}function c(e){let t=e.split(`
|
|
7
|
+
`),n={},r=0;for(;r<t.length;){let e=t[r],i=e.trim();if(!i||i.startsWith(`#`)){r++;continue}let a=i.indexOf(`:`);if(a!==-1){let o=i.slice(0,a).trim(),s=i.slice(a+1).trim();if(s===``){let i=l(t.slice(r+1),e.search(/\S|$/));i.value===void 0?r++:(n[o]=i.value,r+=i.linesConsumed)}else n[o]=u(s),r++}else r++}return n}function l(e,t){if(e.length===0)return{value:void 0,linesConsumed:0};if(e[0].trim().startsWith(`-`)){let n=[],r=0;for(;r<e.length;){let i=e[r],a=i.search(/\S|$/),o=i.trim();if(!o||o.startsWith(`#`)){r++;continue}if(o.startsWith(`-`)){let e=o.slice(1).trim();if(e.includes(`:`)){let t={},r=e.split(/,\s*/);for(let e of r){let n=e.indexOf(`:`);if(n!==-1){let r=e.slice(0,n).trim();t[r]=u(e.slice(n+1).trim())}}n.push(t)}else n.push(e)}else if(a>t&&n.length>0){let e=n[n.length-1];if(typeof e==`object`&&e){let t=e,n=o.indexOf(`:`);if(n!==-1){let e=o.slice(0,n).trim();t[e]=u(o.slice(n+1).trim())}}}else break;r++}return{value:n.length>0?n:void 0,linesConsumed:r}}let n={},r=0;for(;r<e.length;){let i=e[r],a=i.search(/\S|$/),o=i.trim();if(!o||o.startsWith(`#`)){r++;continue}if(a<=t)break;let s=o.indexOf(`:`);if(s!==-1){let e=o.slice(0,s).trim();n[e]=u(o.slice(s+1).trim())}r++}return{value:Object.keys(n).length>0?n:void 0,linesConsumed:r}}function u(e){let t=e.trim();if(t===`true`)return!0;if(t===`false`)return!1;if(t===`null`||t===`~`)return null;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(t.startsWith(`{`)&&t.endsWith(`}`)){let e=t.slice(1,-1).trim(),n={},r=e.split(/,\s*/);for(let e of r){let t=e.indexOf(`:`);if(t!==-1){let r=e.slice(0,t).trim();n[r]=u(e.slice(t+1).trim())}}return n}return t}var d=class e extends Error{constructor(t){super(t),this.name=`SecurityViolationError`,Object.setPrototypeOf(this,e.prototype)}},f=class e extends d{constructor(t){super(t),this.name=`PathTraversalError`,Object.setPrototypeOf(this,e.prototype)}},p=class e extends d{constructor(t){super(t),this.name=`EncodingSecurityError`,Object.setPrototypeOf(this,e.prototype)}},m=class e extends d{constructor(t){super(t),this.name=`ValidationError`,Object.setPrototypeOf(this,e.prototype)}};function h(e){return e.replace(/\\/g,`/`)}function g(e){return e.replace(/^\d+\./,``)}function _(e){let t=e.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function v(e){return/\.mdx?$/.test(e)}function y(t){try{return e.statSync(t).mtimeMs}catch{return 0}}async function b(t,n=!0){let r=``;try{r=await e.promises.readFile(t,`utf-8`);let{data:i,content:s,rawMatter:c}=o(r);if(c&&c.length>10240)throw O(`FRONTMATTER_TOO_LARGE`,`Frontmatter block exceeds size limit`,{size:c.length,file:t}),new m(`Security breach: Frontmatter size exceeds limit of 10240 bytes`);if(!n)return{data:i,content:s,raw:r};let l=a.safeParse(i),u={...l.success?l.data:{}};return u.lastUpdated||=(await e.promises.stat(t)).mtimeMs,u.title&&=T(u.title).trim(),u.description&&=T(u.description).trim(),{data:u,content:s,raw:r}}catch(e){if(e instanceof m)throw e;return{data:{},content:r,raw:r}}}function x(e){return e.replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function S(e){return x(e)}function C(e){let t=h(e).split(`/`).map(e=>D(g(e))).join(`/`).replace(/\/$/,``);return t=t.replace(/\.mdx?$/,``),(t===`index`||t.endsWith(`/index`))&&(t=t.replace(/index$/,``)),t.startsWith(`/`)||(t=`/`+t),t.length>1&&t.endsWith(`/`)&&(t=t.slice(0,-1)),t}function w(e){return t.sanitize(e,{ALLOWED_TAGS:`b.i.em.strong.a.p.br.code.pre.span.div.h1.h2.h3.h4.h5.h6.ul.ol.li.table.thead.tbody.tr.th.td.blockquote.hr`.split(`.`),ALLOWED_ATTR:[`href`,`title`,`target`,`class`,`id`,`src`,`alt`,`width`,`height`],FORCE_BODY:!0})}t.addHook(`afterSanitizeAttributes`,e=>{if(e.hasAttribute(`href`)){let t=e.getAttribute(`href`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`href`)}if(e.hasAttribute(`src`)){let t=e.getAttribute(`src`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`src`)}});function T(e){return e?e.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,``).replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,``).replace(/<!--[\s\S]*?-->/g,``).replace(/<[^>]+>/g,` `).replace(/\s+/g,` `).trim():``}function E(e){return e.charAt(0).toUpperCase()+e.slice(1)}function D(e){return e.replace(/[^a-zA-Z0-9\-_/.]/g,``).split(`/`).filter(e=>e!==`..`&&e!==`.`).map(e=>e.replace(/\.\.+/g,`.`)).join(`/`)}function O(e,t,n={}){let i=new Date().toISOString(),a={...n};for(let e in a)typeof a[e]==`string`&&a[e].includes(`:`)&&(a[e]=a[e].split(/[\\/]/).pop()||a[e]);r(`[SECURITY][${i}] TYPE: ${e} | MESSAGE: ${t} | DETAILS: ${JSON.stringify(a)}`)}function k(){return{dir:process.env.BOLTDOCS_CACHE_DIR||`.boltdocs`,noCache:process.env.BOLTDOCS_NO_CACHE===`1`,lruLimit:parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||`2000`,10),lruTTL:parseInt(process.env.BOLTDOCS_CACHE_LRU_TTL||`14400000`,10),compress:process.env.BOLTDOCS_CACHE_COMPRESS!==`0`}}export{m as _,k as a,O as c,D as d,w as f,f as g,p as h,C as i,h as l,g as m,S as n,y as o,T as p,_ as r,v as s,E as t,b as u,a as v,i as y};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
const e=require(`./chunk-CU-zTemE.cjs`);let t=require(`fs`);t=e.t(t);let n=require(`isomorphic-dompurify`);n=e.t(n);let r=require(`zod`),i=require(`@bdocs/dui`);const a=/^[a-zA-Z0-9\-_/.()]+$/,o=r.z.looseObject({title:r.z.string().max(200).optional(),description:r.z.string().max(500).optional(),permalink:r.z.string().optional(),sidebarPosition:r.z.number().optional(),sidebarLabel:r.z.string().max(100).optional(),sidebarHidden:r.z.boolean().optional(),hidden:r.z.boolean().optional(),category:r.z.string().max(50).optional(),order:r.z.number().optional(),badge:r.z.union([r.z.string().max(50),r.z.object({text:r.z.string().max(50),expires:r.z.string().optional()})]).optional(),icon:r.z.string().max(50).optional(),date:r.z.union([r.z.string(),r.z.date()]).optional(),lastUpdated:r.z.union([r.z.string(),r.z.date()]).optional(),groupTitle:r.z.string().max(100).optional(),groupPosition:r.z.number().optional(),seo:r.z.record(r.z.any()).optional()});function s(e){let t=e.trim();if(!t.startsWith(`---`))return{data:{},content:e,rawMatter:``};let n=t.indexOf(`---`,3);if(n===-1||n===3)return{data:{},content:e,rawMatter:``};let r=t.slice(3,n).trim(),i=t.slice(n+3).trim();return c(r)?{data:{},content:i,rawMatter:r}:{data:l(r),content:i,rawMatter:r}}function c(e){let t=!1,n=!1;for(let r=0;r<e.length;r++){let i=e[r],a=r>0?e[r-1]:``;i===`'`&&!n&&a!==`\\`?t=!t:i===`"`&&!t&&a!==`\\`&&(n=!n)}return t||n}function l(e){let t=e.split(`
|
|
7
|
+
`),n={},r=0;for(;r<t.length;){let e=t[r],i=e.trim();if(!i||i.startsWith(`#`)){r++;continue}let a=i.indexOf(`:`);if(a!==-1){let o=i.slice(0,a).trim(),s=i.slice(a+1).trim();if(s===``){let i=u(t.slice(r+1),e.search(/\S|$/));i.value===void 0?r++:(n[o]=i.value,r+=i.linesConsumed)}else n[o]=d(s),r++}else r++}return n}function u(e,t){if(e.length===0)return{value:void 0,linesConsumed:0};if(e[0].trim().startsWith(`-`)){let n=[],r=0;for(;r<e.length;){let i=e[r],a=i.search(/\S|$/),o=i.trim();if(!o||o.startsWith(`#`)){r++;continue}if(o.startsWith(`-`)){let e=o.slice(1).trim();if(e.includes(`:`)){let t={},r=e.split(/,\s*/);for(let e of r){let n=e.indexOf(`:`);if(n!==-1){let r=e.slice(0,n).trim();t[r]=d(e.slice(n+1).trim())}}n.push(t)}else n.push(e)}else if(a>t&&n.length>0){let e=n[n.length-1];if(typeof e==`object`&&e){let t=e,n=o.indexOf(`:`);if(n!==-1){let e=o.slice(0,n).trim();t[e]=d(o.slice(n+1).trim())}}}else break;r++}return{value:n.length>0?n:void 0,linesConsumed:r}}let n={},r=0;for(;r<e.length;){let i=e[r],a=i.search(/\S|$/),o=i.trim();if(!o||o.startsWith(`#`)){r++;continue}if(a<=t)break;let s=o.indexOf(`:`);if(s!==-1){let e=o.slice(0,s).trim();n[e]=d(o.slice(s+1).trim())}r++}return{value:Object.keys(n).length>0?n:void 0,linesConsumed:r}}function d(e){let t=e.trim();if(t===`true`)return!0;if(t===`false`)return!1;if(t===`null`||t===`~`)return null;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(t.startsWith(`{`)&&t.endsWith(`}`)){let e=t.slice(1,-1).trim(),n={},r=e.split(/,\s*/);for(let e of r){let t=e.indexOf(`:`);if(t!==-1){let r=e.slice(0,t).trim();n[r]=d(e.slice(t+1).trim())}}return n}return t}var f=class e extends Error{constructor(t){super(t),this.name=`SecurityViolationError`,Object.setPrototypeOf(this,e.prototype)}},p=class e extends f{constructor(t){super(t),this.name=`PathTraversalError`,Object.setPrototypeOf(this,e.prototype)}},m=class e extends f{constructor(t){super(t),this.name=`EncodingSecurityError`,Object.setPrototypeOf(this,e.prototype)}},h=class e extends f{constructor(t){super(t),this.name=`ValidationError`,Object.setPrototypeOf(this,e.prototype)}};function g(e){return e.replace(/\\/g,`/`)}function _(e){return e.replace(/^\d+\./,``)}function v(e){let t=e.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function y(e){return/\.mdx?$/.test(e)}function b(e){try{return t.default.statSync(e).mtimeMs}catch{return 0}}async function x(e,n=!0){let r=``;try{r=await t.default.promises.readFile(e,`utf-8`);let{data:i,content:a,rawMatter:c}=s(r);if(c&&c.length>10240)throw k(`FRONTMATTER_TOO_LARGE`,`Frontmatter block exceeds size limit`,{size:c.length,file:e}),new h(`Security breach: Frontmatter size exceeds limit of 10240 bytes`);if(!n)return{data:i,content:a,raw:r};let l=o.safeParse(i),u={...l.success?l.data:{}};return u.lastUpdated||=(await t.default.promises.stat(e)).mtimeMs,u.title&&=E(u.title).trim(),u.description&&=E(u.description).trim(),{data:u,content:a,raw:r}}catch(e){if(e instanceof h)throw e;return{data:{},content:r,raw:r}}}function S(e){return e.replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function C(e){return S(e)}function w(e){let t=g(e).split(`/`).map(e=>O(_(e))).join(`/`).replace(/\/$/,``);return t=t.replace(/\.mdx?$/,``),(t===`index`||t.endsWith(`/index`))&&(t=t.replace(/index$/,``)),t.startsWith(`/`)||(t=`/`+t),t.length>1&&t.endsWith(`/`)&&(t=t.slice(0,-1)),t}function T(e){return n.default.sanitize(e,{ALLOWED_TAGS:`b.i.em.strong.a.p.br.code.pre.span.div.h1.h2.h3.h4.h5.h6.ul.ol.li.table.thead.tbody.tr.th.td.blockquote.hr`.split(`.`),ALLOWED_ATTR:[`href`,`title`,`target`,`class`,`id`,`src`,`alt`,`width`,`height`],FORCE_BODY:!0})}n.default.addHook(`afterSanitizeAttributes`,e=>{if(e.hasAttribute(`href`)){let t=e.getAttribute(`href`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`href`)}if(e.hasAttribute(`src`)){let t=e.getAttribute(`src`)?.toLowerCase()||``;(t.startsWith(`javascript:`)||t.startsWith(`data:`)||t.startsWith(`vbscript:`))&&e.removeAttribute(`src`)}});function E(e){return e?e.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,``).replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,``).replace(/<!--[\s\S]*?-->/g,``).replace(/<[^>]+>/g,` `).replace(/\s+/g,` `).trim():``}function D(e){return e.charAt(0).toUpperCase()+e.slice(1)}function O(e){return e.replace(/[^a-zA-Z0-9\-_/.]/g,``).split(`/`).filter(e=>e!==`..`&&e!==`.`).map(e=>e.replace(/\.\.+/g,`.`)).join(`/`)}function k(e,t,n={}){let r=new Date().toISOString(),a={...n};for(let e in a)typeof a[e]==`string`&&a[e].includes(`:`)&&(a[e]=a[e].split(/[\\/]/).pop()||a[e]);(0,i.error)(`[SECURITY][${r}] TYPE: ${e} | MESSAGE: ${t} | DETAILS: ${JSON.stringify(a)}`)}function A(){return{dir:process.env.BOLTDOCS_CACHE_DIR||`.boltdocs`,noCache:process.env.BOLTDOCS_NO_CACHE===`1`,lruLimit:parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||`2000`,10),lruTTL:parseInt(process.env.BOLTDOCS_CACHE_LRU_TTL||`14400000`,10),compress:process.env.BOLTDOCS_CACHE_COMPRESS!==`0`}}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return a}});
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
const e=require(`./chunk-
|
|
6
|
+
const e=require(`./chunk-CU-zTemE.cjs`);let t=require(`node:path`);t=e.t(t);let n=require(`node:fs`);n=e.t(n);let r=require(`node:worker_threads`),i=require(`node:os`);i=e.t(i);let a=require(`node:url`);const o=t.default.dirname((0,a.fileURLToPath)(require(`url`).pathToFileURL(__filename).href)),s=new class{workers=[];queue=[];activeWorkers=0;maxWorkers;maxQueueSize;constructor(e,t=2e3){this.maxWorkers=e||Math.max(1,i.default.cpus().length-1),this.maxQueueSize=t}idleWorkers=[];async parseFile(e,t,n,r){return this.queue.length>=this.maxQueueSize?Promise.reject(Error(`[boltdocs] WorkerPool queue is full (limit: ${this.maxQueueSize}). Too many files enqueued simultaneously. Consider increasing maxQueueSize.`)):new Promise((i,a)=>{this.queue.push({task:{type:`PARSE_FILE`,file:e,docsDir:t,basePath:n,config:r},resolve:i,reject:a}),this.processNext()})}processNext(){if(this.queue.length===0)return;let e=this.idleWorkers.pop();if(!e){if(this.activeWorkers>=this.maxWorkers)return;this.activeWorkers++;let t=this.getWorkerPath(),n=new r.Worker(t,{execArgv:t.endsWith(`.ts`)?[`--loader`,`tsx`]:[]});e=n,this.workers.push(n);let i=(e,t)=>{let n=this.workers.indexOf(e);if(n===-1)return;let r=e.currentTask;r&&(e.currentTask=null,r.reject(t||Error(`Worker terminated unexpectedly`))),this.activeWorkers--;let i=this.idleWorkers.indexOf(e);i>-1&&this.idleWorkers.splice(i,1),this.workers.splice(n,1),e.terminate(),this.processNext()};n.on(`message`,e=>{let t=n.currentTask;t&&(n.currentTask=null,e.type===`SUCCESS`?t.resolve(e.result):t.reject(Error(e.error))),this.idleWorkers.push(n),this.processNext()}),n.on(`error`,e=>{i(n,e)}),n.on(`exit`,e=>{e!==0&&i(n,Error(`Worker exited with code ${e}`))})}let{task:t,resolve:n,reject:i}=this.queue.shift();e.currentTask={resolve:n,reject:i},e.postMessage(t)}getWorkerPath(){if(require(`url`).pathToFileURL(__filename).href.includes(`/dist/`)||t.default.extname(require(`url`).pathToFileURL(__filename).href)===`.mjs`){let e=[t.default.resolve(o,`node/routes/worker.mjs`),t.default.resolve(o,`worker.mjs`),t.default.resolve(o,`./node/routes/worker.mjs`)];for(let t of e)if(n.default.existsSync(t))return t;return t.default.resolve(o,`node/routes/worker.mjs`)}return t.default.resolve(o,`worker.ts`)}async terminate(){let e=[...this.workers];await Promise.all(e.map(e=>e.terminate())),this.idleWorkers=[],this.workers=[],this.activeWorkers=0}};exports.pool=s;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "boltdocs",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.10",
|
|
4
4
|
"description": "A lightweight documentation generator for React projects.",
|
|
5
5
|
"main": "dist/node/index.mjs",
|
|
6
6
|
"module": "dist/node/index.mjs",
|
|
@@ -87,7 +87,8 @@
|
|
|
87
87
|
"vite": "7.0.0 || 8.0.0",
|
|
88
88
|
"vite-plugin-image-optimizer": "2.0.3",
|
|
89
89
|
"zod": "4.3.6",
|
|
90
|
-
"@bdocs/
|
|
90
|
+
"@bdocs/dui": "0.1.1",
|
|
91
|
+
"@bdocs/ssg": "0.0.7"
|
|
91
92
|
},
|
|
92
93
|
"peerDependencies": {
|
|
93
94
|
"react": "19.0.0",
|
package/dist/chunk-Ds5LZdWN.cjs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
-
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
|
package/dist/doctor-BD1BSB03.mjs
DELETED
|
@@ -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{_ as e,i as t,l as n,u as r,v as i}from"./utils-BxNAXhZZ.mjs";import{createRequire as a}from"node:module";import{loadConfigFromFile as o}from"vite";import s from"node:path";import{fdir as c}from"fdir";import l from"fs";import{z as u}from"zod";import d from"node:fs";import f from"path";import p from"picomatch";import m from"node:readline";import{distance as h}from"fastest-levenshtein";var g=Object.defineProperty,_=(e,t)=>{let n={};for(var r in e)g(n,r,{get:e[r],enumerable:!0});return t||g(n,Symbol.toStringTag,{value:`Module`}),n};const v=u.object({icon:u.string().max(50),link:u.string().url()});u.object({text:u.string().max(2e3).optional()});const y=u.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),b=u.object({name:u.string(),enforce:u.enum([`pre`,`post`]).optional(),version:u.string().optional(),boltdocsVersion:u.string().optional(),permissions:u.array(y).optional(),remarkPlugins:u.array(u.any()).optional(),rehypePlugins:u.array(u.any()).optional(),vitePlugins:u.array(u.any()).optional(),components:u.record(u.string(),u.string()).optional(),hooks:u.record(u.string(),u.any()).optional()}),x=u.object({title:u.union([u.string(),u.record(u.string(),u.string())]).optional(),description:u.union([u.string(),u.record(u.string(),u.string())]).optional(),logo:u.union([u.string(),u.object({dark:u.string(),light:u.string(),alt:u.string().optional(),width:u.number().optional(),height:u.number().optional()})]).optional(),navbar:u.array(u.object({label:u.union([u.string(),u.record(u.string(),u.string())]),href:u.string(),items:u.array(u.object({label:u.union([u.string(),u.record(u.string(),u.string())]),href:u.string()})).optional()})).optional(),sidebar:u.record(u.string(),u.array(u.object({text:u.string(),link:u.string()}))).optional(),sidebarGroups:u.record(u.string(),u.object({title:u.union([u.string(),u.record(u.string(),u.string())]).optional(),icon:u.string().optional()})).optional(),socialLinks:u.array(v).optional(),editLink:u.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:u.string().url().optional(),version:u.string().max(50).optional(),githubRepo:u.string().max(100).optional(),favicon:u.string().optional(),tabs:u.array(u.object({id:u.string(),text:u.union([u.string(),u.record(u.string(),u.string())]),icon:u.string().optional()})).optional(),codeTheme:u.union([u.string(),u.object({light:u.string(),dark:u.string()})]).optional()}),S=u.union([u.string(),u.object({rules:u.array(u.object({userAgent:u.string(),allow:u.union([u.string(),u.array(u.string())]).optional(),disallow:u.union([u.string(),u.array(u.string())]).optional()})).optional(),sitemaps:u.array(u.string().url()).optional()})]),C=u.object({defaultLocale:u.string(),locales:u.union([u.record(u.string(),u.string()),u.array(u.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:u.record(u.string(),u.object({label:u.string().optional(),direction:u.enum([`ltr`,`rtl`]).optional(),htmlLang:u.string().optional(),calendar:u.string().optional()})).optional()}),w=u.object({defaultVersion:u.string(),prefix:u.string().optional(),versions:u.array(u.object({label:u.string(),path:u.string()}))}),T=u.object({headers:u.record(u.string(),u.string()).optional(),enableCSP:u.boolean().optional(),customHeaders:u.record(u.string(),u.string()).optional()}),E=u.object({metatags:u.record(u.string(),u.string()).optional(),indexing:u.enum([`all`,`public`]).optional(),thumbnails:u.object({background:u.string().optional()}).optional()}),D=u.object({measurementId:u.string().min(1,`Measurement ID is required for GA4`),debug:u.boolean().optional(),anonymizeIp:u.boolean().optional(),sendPageView:u.boolean().optional(),cookieFlags:u.string().optional(),autoTrack:u.object({pageViews:u.boolean().optional(),downloads:u.boolean().optional(),externalLinks:u.boolean().optional(),search:u.boolean().optional()}).optional()}),O=u.object({tagId:u.string().min(1,`Tag ID is required for GTM`),dataLayerName:u.string().optional(),preview:u.string().optional()}),ee=u.object({ga4:D.optional(),gtm:O.optional()}),te=u.object({siteUrl:u.string().url().optional(),docsDir:u.string().optional(),base:u.string().optional(),theme:x.optional(),i18n:C.optional(),versions:w.optional(),plugins:u.array(b).optional(),robots:S.optional(),security:T.optional(),seo:E.optional(),integrations:ee.optional(),vite:u.record(u.string(),u.unknown()).optional()});function k(e,t,n=process.cwd()){let r=s.resolve(n,`.boltdocs`);d.existsSync(r)||d.mkdirSync(r,{recursive:!0});let i=e.i18n?Object.keys(e.i18n.locales):[],a=e.versions?e.versions.versions.map(e=>e.path):[],o=i.length>0?i.map(e=>`'${e}'`).join(` | `):`string`,c=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=[`tsx`,`ts`,`jsx`,`js`],u=``,f=``;for(let e of l){let i=s.resolve(n,t,`mdx-components.${e}`);if(d.existsSync(i)){let e=s.join(n,t,`mdx-components`),i=s.relative(r,e).replace(/\\/g,`/`);u=`import type * as MdxComponentsModule from '${i.startsWith(`.`)?i:`./${i}`}'\n`,f=` MdxComponents: typeof MdxComponentsModule`;break}}let p=`// This file is automatically generated by Boltdocs.
|
|
7
|
-
// Do not edit this file manually.
|
|
8
|
-
|
|
9
|
-
${u}declare global {
|
|
10
|
-
namespace Boltdocs {
|
|
11
|
-
interface Types {
|
|
12
|
-
Locale: ${o}
|
|
13
|
-
Version: ${c}${f?`\n${f}`:``}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export {}
|
|
19
|
-
`;d.writeFileSync(s.resolve(r,`types.d.ts`),p)}function ne(e){return e}const A=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function j(t,n=process.cwd()){let r=n,i={docsDir:s.resolve(t),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},a={};for(let e of A){let t=s.resolve(r,e);if(d.existsSync(t))try{let e=await o({command:`serve`,mode:`development`},t,r);if(e){a=e.config;break}}catch(t){console.warn(`[boltdocs] Failed to load config from ${e}:`,t)}}let c={title:a.title,description:a.description,logo:a.logo,favicon:a.favicon,navbar:a.navbar,sidebar:a.sidebar,sidebarGroups:a.theme?.sidebarGroups,socialLinks:a.socialLinks,githubRepo:a.githubRepo,tabs:a.tabs,codeTheme:a.codeTheme,communityHelp:a.communityHelp,version:a.version,editLink:a.editLink,...a.theme||{}},l=Object.fromEntries(Object.entries(c).filter(([e,t])=>t!==void 0));l.navbar&&=l.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let u={docsDir:s.resolve(t),theme:{...i.theme,...l},i18n:a.i18n?{...a.i18n,locales:Array.isArray(a.i18n.locales)?Object.fromEntries(a.i18n.locales.map(e=>[e,e])):a.i18n.locales}:void 0,versions:a.versions,siteUrl:a.siteUrl,base:a.base,seo:a.seo,plugins:a.plugins||[],robots:a.robots,security:a.security,integrations:a.integrations,vite:a.vite},f=te.safeParse(u);if(!f.success)throw new e(`Invalid Boltdocs configuration:\n${f.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
|
|
20
|
-
`)}`);return f.data}async function re(e,t=process.cwd()){let n=await j(e,t);return k(n,e,t),n}var ie=_({box:()=>B,colors:()=>M,confirm:()=>N,divider:()=>z,error:()=>L,formatLog:()=>P,info:()=>F,success:()=>R,warn:()=>I});const M={reset:`\x1B[0m`,bold:`\x1B[1m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`,dim:`\x1B[2m`,magenta:`\x1B[35m`};function N(e){let t=m.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{t.question(`${P(e,M.yellow)} (y/N): `,e=>{t.close(),n(e.toLowerCase()===`y`||e.toLowerCase()===`yes`)})})}function P(e,t=``){return`${t}${M.bold}[boltdocs]${M.reset} ${e}${M.reset}`}function F(e){console.log(P(e))}function I(e){console.log(P(e,M.yellow))}function L(e,t){console.error(P(e,M.red)),t&&console.error(t)}function R(e){console.log(P(e,M.green))}function z(){console.log(M.gray+`─`.repeat(50)+M.reset)}function B(e){let t=`━`.repeat(e.length+4);console.log(`\n${M.cyan}┏${t}┓`),console.log(`┃ ${M.bold}${e}${M.reset}${M.cyan} ┃`),console.log(`┗${t}┛${M.reset}\n`)}const ae=a(import.meta.url);let V=0;function oe(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function se(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function ce(){try{return ae(`boltdocs/package.json`).version}catch{return`0.0.0`}}function le(e,t){let n=Math.max(0,t-e.length);return` `.repeat(Math.floor(n/2))+e+` `.repeat(Math.ceil(n/2))}function H(e,t){return e+` `.repeat(Math.max(0,t-e.length))}function ue(e,t){let n=`═`.repeat(54),r=[];r.push(`${M.cyan}╔${n}╗${M.reset}`),r.push(`${M.cyan}║${M.reset}${le(`🚀 Update available!`,54)}${M.cyan}║${M.reset}`),r.push(`${M.cyan}║${M.reset}${` `.repeat(54)}${M.cyan}║${M.reset}`);let i=`Current: ${e} → ${t}`,a=`${M.dim}Current:${M.reset} ${M.red}${e}${M.reset} ${M.gray}→${M.reset} ${M.green}${t}${M.reset}`;r.push(`${M.cyan}║${M.reset} ${a}${H(``,52-i.length)}${M.cyan}║${M.reset}`),r.push(`${M.cyan}║${M.reset}${` `.repeat(54)}${M.cyan}║${M.reset}`);let o=`${M.dim}Run:${M.reset} ${M.bold}npm install boltdocs@latest${M.reset}`;return r.push(`${M.cyan}║${M.reset} ${o}${H(``,19)}${M.cyan}║${M.reset}`),r.push(`${M.cyan}╚${n}╝${M.reset}`),`
|
|
21
|
-
`+r.join(`
|
|
22
|
-
`)+`
|
|
23
|
-
`}async function U(){let e=Date.now();if(e-V<864e5)return;V=e;let t=await ce();if(t===`0.0.0`)return;let n=await se();n&&oe(n,t)&&console.log(ue(t,n))}const W={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`},exclude:[]};function G(e,t,n){return e.doctorConfig.severity[t]||n}async function de(e,t){d.existsSync(t)||d.mkdirSync(t,{recursive:!0});let n=s.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=s.join(t,`${n}.${r}.bak`);d.copyFileSync(e,i)}const K=new Map;function q(e){let t=K.get(e);if(t)return t;let n=(async()=>{let t=await r(e,!1);return{raw:t.raw,data:t.data,content:t.content}})();return K.set(e,n),n}const J=new Map;function Y(e){if(J.has(e))return J.get(e);let t=!1;try{t=d.existsSync(e)&&d.statSync(e).isFile()}catch{t=!1}return J.set(e,t),t}async function X(e){let t=s.resolve(e,`doctor.json`);if(d.existsSync(t))try{let e=JSON.parse(d.readFileSync(t,`utf-8`));return{...W,...e,checks:{...W.checks,...e.checks,metadata:{...W.checks.metadata,...e.checks?.metadata},links:{...W.checks.links,...e.checks?.links},i18n:{...W.checks.i18n,...e.checks?.i18n}},fix:{...W.fix,...e.fix},reporting:{...W.reporting,...e.reporting},severity:{...W.severity,...e.severity},exclude:[...W.exclude,...e.exclude||[]]}}catch(e){I(`Failed to parse doctor.json: ${e}`)}return W}async function Z(e,n=process.cwd(),r,i){let a=s.resolve(n,`.boltdocs`);d.existsSync(a)||d.mkdirSync(a,{recursive:!0});let o=i;o||=await new c().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let l=r?.base||`/docs`,u=[];for(let n=0;n<o.length;n+=100){let r=o.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=s.isAbsolute(n)?n:s.resolve(e,n),i=s.relative(e,r),{data:a}=await q(r),o;return o=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:t(i),l===`/`?o:(l.endsWith(`/`)?l:l+`/`)+(o.startsWith(`/`)?o.substring(1):o)}));u.push(...i)}u.includes(l)||u.push(l);let f={routes:Array.from(new Set(u)).sort(),timestamp:Date.now()};return d.writeFileSync(s.resolve(a,`link-tree.json`),JSON.stringify(f,null,2)),f}function fe(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-h(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-h(e,t)/Math.max(e.length,t.length)}const Q=new Map;function $(e,t){if(Q.has(e))return Q.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=fe(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return Q.set(e,a),a}async function pe(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:r,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=n(f.relative(e.docsDir,c));try{let{raw:n,data:u}=await q(c);if(n.trim().startsWith(`---`)&&n.split(`---`).length>=3&&Object.keys(u).length===0){let n=G(e,`malformedFrontmatter`,`high`);n!==`off`&&t.push({file:l,level:n,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=i.safeParse(u);if(!d.success){let n=G(e,`invalidFrontmatter`,`high`);if(n!==`off`)for(let e of d.error.issues)t.push({file:l,level:n,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let n of f)if(u[n]===void 0){let r=G(e,`missingMetadata`,`warning`);r!==`off`&&t.push({file:l,level:r,message:`Missing required frontmatter field: "${n}".`,suggestion:`Add the "${n}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let n=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of n)if(u[r]&&isNaN(Date.parse(String(u[r])))){let n=G(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:l,level:n,message:`Invalid date format in field "${r}": "${u[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let n=String(u.title);if(n.length<r){let i=G(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:l,level:i,message:`Title is too short (${n.length} chars).`,suggestion:`Titles should be at least ${r} characters for better SEO.`})}else if(n.length>a){let r=G(e,`shortMetadata`,`low`);r!==`off`&&t.push({file:l,level:r,message:`Title is too long (${n.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let i=s.get(n)||[];i.push(l),s.set(n,i)}if(u.description&&String(u.description).length<o){let n=G(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:l,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(n){let r=G(e,`malformedFrontmatter`,`high`);r!==`off`&&t.push({file:l,level:r,message:`Malformed frontmatter (YAML error): ${n.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}for(let[n,r]of s.entries())if(r.length>1){let i=G(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)t.push({file:e,level:i,message:`Duplicate title found: "${n}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return t}async function me(e){let t=[],{internal:r,external:i,ignore:a,timeout:o,concurrency:s}=e.doctorConfig.checks.links;if(!r&&!i&&!e.options.checkExternal)return t;let c=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,u=new Set,d=5e5;for(let o of e.files){let s=n(f.relative(e.docsDir,o)),{content:p}=await q(o),m=[...(p.length>d?p.slice(0,d):p).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(c)];for(let n of m){let c=n[1]||n[2],d=!!n[1];if(!c||a.some(e=>c.includes(e)))continue;if(/^https?:\/\//i.test(c)){(i||e.options.checkExternal)&&u.add({url:c,file:o});continue}if(!r||/^(mailto|tel|#)/i.test(c))continue;let p;try{p=decodeURIComponent(c.split(`#`)[0].split(`?`)[0])}catch{p=c.split(`#`)[0].split(`?`)[0]}if(!p)continue;let m=!1,h=``;if(p.startsWith(`/`))if(e.routeIndex.has(p)||e.routeIndexWithSlash.has(p)||e.routeIndexWithoutSlash.has(p))m=!0;else{let t=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))m=!1,h=t;else{let t=e.config.base!==`/`&&p.startsWith(e.config.base||`/`)?p.substring((e.config.base||`/`).length):p,n=t.startsWith(`/`)?t.substring(1):t;h=f.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>Y(h+e))}}else h=f.resolve(f.dirname(o),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>Y(h+e));if(!m){let{bestMatch:n,similarity:r}=$(p,e.linkTree.routes),i=!1,a=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(n=a,r=1,i=!0);let u=r>.6||i,f=r>.75&&n!==p||i,m=G(e,`brokenLink`,`high`);m!==`off`&&t.push({file:s,level:m,message:`Broken internal link: "${c}"`,suggestion:u?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=c.includes(`#`)?`#`+c.split(`#`)[1]:``,t=d?`(${c})`:`href="${c}"`,r=d?`(${n}${e})`:`href="${n}${e}"`,i=l.readFileSync(o,`utf-8`).replace(t,r);l.writeFileSync(o,i),K.delete(o)}:void 0})}}}if(u.size>0){F(`${M.gray}Verifying ${u.size} external links...${M.reset}`);let r=new Map;for(let e of u)r.has(e.url)||r.set(e.url,[]),r.get(e.url).push(e.file);let i=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),o),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(r.keys()),c=[];for(let e=0;e<a.length;e+=s){let t=a.slice(e,e+s),n=await Promise.allSettled(t.map(i));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of c)if(!i.ok){let a=G(e,`brokenLink`,`warning`);if(a!==`off`){let o=r.get(i.url)||[];for(let r of o)t.push({file:n(f.relative(e.docsDir,r)),level:a,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return t}async function he(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:r,locales:i}=e.config.i18n,a=Object.keys(i),o=a.filter(e=>e!==r);for(let i of e.files){let s=n(f.relative(e.docsDir,i)),c=s.split(`/`),u=c[0];if(u===r){let n=c.slice(1).join(`/`);for(let r of o){let a=f.join(e.docsDir,r,n);if(!Y(a)){let o=G(e,`missingTranslation`,`warning`);o!==`off`&&t.push({file:s,level:o,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${n}".`,fix:async()=>{let e=f.dirname(a);l.existsSync(e)||l.mkdirSync(e,{recursive:!0}),l.copyFileSync(i,a)}})}}}else if(a.includes(u)){let n=c.slice(1).join(`/`);if(!Y(f.join(e.docsDir,r,n))){let a=G(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:s,level:a,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${n}".`,fix:async()=>{l.unlinkSync(i)}})}}}return t}async function ge(e){let t=[];if(!e.config.theme.sidebar)return t;let n=new Set,r=e.config.theme.sidebar;for(let[i,a]of Object.entries(r))for(let r of a){if(!r.text){let n=G(e,`invalidFrontmatter`,`warning`);n!==`off`&&t.push({file:`boltdocs.config.ts`,level:n,message:`Sidebar item in group "${i}" is missing a label.`,suggestion:`Add a "text" property to the sidebar item.`})}if(r.link&&(n.add(r.link),!e.routeIndex.has(r.link))){let{bestMatch:n,similarity:i}=$(r.link,e.linkTree.routes),a=i>.6,o=G(e,`brokenLink`,`high`);o!==`off`&&t.push({file:`boltdocs.config.ts`,level:o,message:`Broken sidebar link: "${r.link}"`,suggestion:a?`Did you mean "${n}"?`:`Ensure the route exists and is correctly formatted.`})}}for(let r of e.linkTree.routes)if(!(r===`/`||r===``)&&!n.has(r)){let n=G(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}var _e=_({DEFAULT_DOCTOR_CONFIG:()=>W,checkI18n:()=>he,checkLinks:()=>me,checkMetadata:()=>pe,checkSidebar:()=>ge,doctorAction:()=>ye,doctorInit:()=>ve,generateLinkTree:()=>Z,loadDoctorConfig:()=>X});async function ve(e){let t=f.resolve(e,`doctor.json`);if(l.existsSync(t)){I(`"doctor.json" already exists at ${e}.`);return}try{l.writeFileSync(t,JSON.stringify(W,null,2)),R(`Created "doctor.json" with default configuration.`)}catch(e){L(`Failed to create "doctor.json": ${e}`)}}async function ye(e=process.cwd(),t={}){if(t.init){await ve(e);return}U();try{let n=await X(e),{format:r}=n.reporting,{colors:i}=ie;r===`pretty`&&B(`DOCTOR - Documentation Health Check`);let a=performance.now(),o=await j(`docs`,e),s=f.resolve(e,`docs`);l.existsSync(s)||(r===`pretty`&&L(`Docs dir not found at ${s}`),process.exit(1)),r===`pretty`&&F(`${M.dim}🔍 Discovering files and routes...${M.reset}`);let u=p(n.exclude||[]),d=await new c().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=f.relative(s,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!u(t)&&!n}).crawl(s).withPromise();for(let e of d)J.set(e,!0);let m=await Z(s,e,o,d),h=o.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:s,config:o,doctorConfig:n,linkTree:m,files:d,options:t,routeIndex:new Set(m.routes),routeIndexWithSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:g};r===`pretty`&&F(`${M.dim}🧪 Running diagnostic checks in parallel...${M.reset}`);let[v,y,b,x]=await Promise.all([pe(_),me(_),he(_),ge(_)]),S=[...v,...y,...b,...x],C=0;if(t.fix){for(let e of S)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await N(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=f.resolve(_.docsDir,e.file);l.existsSync(t)&&await de(t,f.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),C++}}let w=((performance.now()-a)/1e3).toFixed(2),T=S.filter(e=>e.level===`high`).length,E=S.filter(e=>e.level===`warning`).length,D=S.filter(e=>e.level===`low`).length,O={summary:{total:S.length,high:T,warning:E,low:D,fixed:C,duration:w},issues:S.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=f.resolve(e,n.reporting.outputFile);l.existsSync(f.dirname(t))||l.mkdirSync(f.dirname(t),{recursive:!0}),l.writeFileSync(t,JSON.stringify(O,null,2))}if(r===`json`)console.log(JSON.stringify(O,null,2));else if(r===`pretty`){let e=S.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(S.length>0){z();for(let[n,r]of Object.entries(e)){console.log(`\n${i.bold}${i.cyan}📄 ${n}${i.reset}`);for(let e of r){let n=e.level===`high`?`❌`:e.level===`warning`?`⚠️`:`ℹ️`,r=e.level===`high`?i.red:e.level===`warning`?i.yellow:i.blue;console.log(` ${n} ${r}${e.level.toUpperCase()}${i.reset}: ${e.message}`),e.suggestion&&console.log(` ${i.dim}💡 Suggestion: ${e.suggestion}${i.reset}`),t.fix&&e.fix&&console.log(` ${i.green}✅ Fixed automatically${i.reset}`)}}z()}S.length===0?R(`Everything looks perfect! Your documentation is in great shape. ✨`):(console.log(`\n${i.bold}Diagnosis Results (${w}s):${i.reset}`),T>0&&console.log(` ${i.red}● ${T} Critical Errors${i.reset}`),E>0&&console.log(` ${i.yellow}● ${E} Warnings${i.reset}`),D>0&&console.log(` ${i.blue}● ${D} Improvements${i.reset}`),C>0&&R(`Successfully fixed ${C} issues automatically!`),T>0?console.log(`\n${i.red}${i.bold}[boltdocs] Please fix the critical errors before building for production.${i.reset}`):R(`[boltdocs] No critical issues found. You are ready to go!`))}n.reporting.failOnError&&T>0&&process.exit(1),n.reporting.maxWarnings!==-1&&E>n.reporting.maxWarnings&&(r===`pretty`&&L(`Failed: Too many warnings (${E} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){L(`Doctor failed: ${e}`),process.exit(1)}}export{R as a,re as c,b as d,_ as f,L as i,ne as l,Z as n,A as o,U as r,j as s,_e as t,k as u};
|
package/dist/doctor-BHc9ua6r.cjs
DELETED
|
@@ -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-Ds5LZdWN.cjs`),t=require(`./utils-Clzu7jvb.cjs`);let n=require(`vite`),r=require(`node:path`);r=e.n(r);let i=require(`fdir`),a=require(`fs`);a=e.n(a);let o=require(`zod`),s=require(`node:fs`);s=e.n(s);let c=require(`path`);c=e.n(c);let l=require(`picomatch`);l=e.n(l);let u=require(`node:readline`);u=e.n(u);let d=require(`node:module`),f=require(`fastest-levenshtein`);const p=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()});o.z.object({text:o.z.string().max(2e3).optional()});const m=o.z.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),h=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),permissions:o.z.array(m).optional(),remarkPlugins:o.z.array(o.z.any()).optional(),rehypePlugins:o.z.array(o.z.any()).optional(),vitePlugins:o.z.array(o.z.any()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),hooks:o.z.record(o.z.string(),o.z.any()).optional()}),g=o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),description:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),logo:o.z.union([o.z.string(),o.z.object({dark:o.z.string(),light:o.z.string(),alt:o.z.string().optional(),width:o.z.number().optional(),height:o.z.number().optional()})]).optional(),navbar:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string(),items:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string()})).optional()})).optional(),sidebar:o.z.record(o.z.string(),o.z.array(o.z.object({text:o.z.string(),link:o.z.string()}))).optional(),sidebarGroups:o.z.record(o.z.string(),o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),icon:o.z.string().optional()})).optional(),socialLinks:o.z.array(p).optional(),editLink:o.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.z.string().url().optional(),version:o.z.string().max(50).optional(),githubRepo:o.z.string().max(100).optional(),favicon:o.z.string().optional(),tabs:o.z.array(o.z.object({id:o.z.string(),text:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),icon:o.z.string().optional()})).optional(),codeTheme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional()}),_=o.z.union([o.z.string(),o.z.object({rules:o.z.array(o.z.object({userAgent:o.z.string(),allow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional(),disallow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional()})).optional(),sitemaps:o.z.array(o.z.string().url()).optional()})]),v=o.z.object({defaultLocale:o.z.string(),locales:o.z.union([o.z.record(o.z.string(),o.z.string()),o.z.array(o.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.z.record(o.z.string(),o.z.object({label:o.z.string().optional(),direction:o.z.enum([`ltr`,`rtl`]).optional(),htmlLang:o.z.string().optional(),calendar:o.z.string().optional()})).optional()}),y=o.z.object({defaultVersion:o.z.string(),prefix:o.z.string().optional(),versions:o.z.array(o.z.object({label:o.z.string(),path:o.z.string()}))}),b=o.z.object({headers:o.z.record(o.z.string(),o.z.string()).optional(),enableCSP:o.z.boolean().optional(),customHeaders:o.z.record(o.z.string(),o.z.string()).optional()}),x=o.z.object({metatags:o.z.record(o.z.string(),o.z.string()).optional(),indexing:o.z.enum([`all`,`public`]).optional(),thumbnails:o.z.object({background:o.z.string().optional()}).optional()}),S=o.z.object({measurementId:o.z.string().min(1,`Measurement ID is required for GA4`),debug:o.z.boolean().optional(),anonymizeIp:o.z.boolean().optional(),sendPageView:o.z.boolean().optional(),cookieFlags:o.z.string().optional(),autoTrack:o.z.object({pageViews:o.z.boolean().optional(),downloads:o.z.boolean().optional(),externalLinks:o.z.boolean().optional(),search:o.z.boolean().optional()}).optional()}),C=o.z.object({tagId:o.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.z.string().optional(),preview:o.z.string().optional()}),w=o.z.object({ga4:S.optional(),gtm:C.optional()}),T=o.z.object({siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:g.optional(),i18n:v.optional(),versions:y.optional(),plugins:o.z.array(h).optional(),robots:_.optional(),security:b.optional(),seo:x.optional(),integrations:w.optional(),vite:o.z.record(o.z.string(),o.z.unknown()).optional()});function E(e,t,n=process.cwd()){let i=r.default.resolve(n,`.boltdocs`);s.default.existsSync(i)||s.default.mkdirSync(i,{recursive:!0});let a=e.i18n?Object.keys(e.i18n.locales):[],o=e.versions?e.versions.versions.map(e=>e.path):[],c=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=o.length>0?o.map(e=>`'${e}'`).join(` | `):`string`,u=[`tsx`,`ts`,`jsx`,`js`],d=``,f=``;for(let e of u){let a=r.default.resolve(n,t,`mdx-components.${e}`);if(s.default.existsSync(a)){let e=r.default.join(n,t,`mdx-components`),a=r.default.relative(i,e).replace(/\\/g,`/`);d=`import type * as MdxComponentsModule from '${a.startsWith(`.`)?a:`./${a}`}'\n`,f=` MdxComponents: typeof MdxComponentsModule`;break}}let p=`// This file is automatically generated by Boltdocs.
|
|
7
|
-
// Do not edit this file manually.
|
|
8
|
-
|
|
9
|
-
${d}declare global {
|
|
10
|
-
namespace Boltdocs {
|
|
11
|
-
interface Types {
|
|
12
|
-
Locale: ${c}
|
|
13
|
-
Version: ${l}${f?`\n${f}`:``}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export {}
|
|
19
|
-
`;s.default.writeFileSync(r.default.resolve(i,`types.d.ts`),p)}function D(e){return e}const O=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function k(e,i=process.cwd()){let a=i,o={docsDir:r.default.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},c={};for(let e of O){let t=r.default.resolve(a,e);if(s.default.existsSync(t))try{let e=await(0,n.loadConfigFromFile)({command:`serve`,mode:`development`},t,a);if(e){c=e.config;break}}catch(t){console.warn(`[boltdocs] Failed to load config from ${e}:`,t)}}let l={title:c.title,description:c.description,logo:c.logo,favicon:c.favicon,navbar:c.navbar,sidebar:c.sidebar,sidebarGroups:c.theme?.sidebarGroups,socialLinks:c.socialLinks,githubRepo:c.githubRepo,tabs:c.tabs,codeTheme:c.codeTheme,communityHelp:c.communityHelp,version:c.version,editLink:c.editLink,...c.theme||{}},u=Object.fromEntries(Object.entries(l).filter(([e,t])=>t!==void 0));u.navbar&&=u.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let d={docsDir:r.default.resolve(e),theme:{...o.theme,...u},i18n:c.i18n?{...c.i18n,locales:Array.isArray(c.i18n.locales)?Object.fromEntries(c.i18n.locales.map(e=>[e,e])):c.i18n.locales}:void 0,versions:c.versions,siteUrl:c.siteUrl,base:c.base,seo:c.seo,plugins:c.plugins||[],robots:c.robots,security:c.security,integrations:c.integrations,vite:c.vite},f=T.safeParse(d);if(!f.success)throw new t._(`Invalid Boltdocs configuration:\n${f.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
|
|
20
|
-
`)}`);return f.data}async function ee(e,t=process.cwd()){let n=await k(e,t);return E(n,e,t),n}var te=e.t({box:()=>R,colors:()=>A,confirm:()=>j,divider:()=>L,error:()=>F,formatLog:()=>M,info:()=>N,success:()=>I,warn:()=>P});const A={reset:`\x1B[0m`,bold:`\x1B[1m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,cyan:`\x1B[36m`,gray:`\x1B[90m`,dim:`\x1B[2m`,magenta:`\x1B[35m`};function j(e){let t=u.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{t.question(`${M(e,A.yellow)} (y/N): `,e=>{t.close(),n(e.toLowerCase()===`y`||e.toLowerCase()===`yes`)})})}function M(e,t=``){return`${t}${A.bold}[boltdocs]${A.reset} ${e}${A.reset}`}function N(e){console.log(M(e))}function P(e){console.log(M(e,A.yellow))}function F(e,t){console.error(M(e,A.red)),t&&console.error(t)}function I(e){console.log(M(e,A.green))}function L(){console.log(A.gray+`─`.repeat(50)+A.reset)}function R(e){let t=`━`.repeat(e.length+4);console.log(`\n${A.cyan}┏${t}┓`),console.log(`┃ ${A.bold}${e}${A.reset}${A.cyan} ┃`),console.log(`┗${t}┛${A.reset}\n`)}const ne=(0,d.createRequire)(require(`url`).pathToFileURL(__filename).href);let z=0;function re(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function ie(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function ae(){try{return ne(`boltdocs/package.json`).version}catch{return`0.0.0`}}function oe(e,t){let n=Math.max(0,t-e.length);return` `.repeat(Math.floor(n/2))+e+` `.repeat(Math.ceil(n/2))}function B(e,t){return e+` `.repeat(Math.max(0,t-e.length))}function se(e,t){let n=`═`.repeat(54),r=[];r.push(`${A.cyan}╔${n}╗${A.reset}`),r.push(`${A.cyan}║${A.reset}${oe(`🚀 Update available!`,54)}${A.cyan}║${A.reset}`),r.push(`${A.cyan}║${A.reset}${` `.repeat(54)}${A.cyan}║${A.reset}`);let i=`Current: ${e} → ${t}`,a=`${A.dim}Current:${A.reset} ${A.red}${e}${A.reset} ${A.gray}→${A.reset} ${A.green}${t}${A.reset}`;r.push(`${A.cyan}║${A.reset} ${a}${B(``,52-i.length)}${A.cyan}║${A.reset}`),r.push(`${A.cyan}║${A.reset}${` `.repeat(54)}${A.cyan}║${A.reset}`);let o=`${A.dim}Run:${A.reset} ${A.bold}npm install boltdocs@latest${A.reset}`;return r.push(`${A.cyan}║${A.reset} ${o}${B(``,19)}${A.cyan}║${A.reset}`),r.push(`${A.cyan}╚${n}╝${A.reset}`),`
|
|
21
|
-
`+r.join(`
|
|
22
|
-
`)+`
|
|
23
|
-
`}async function V(){let e=Date.now();if(e-z<864e5)return;z=e;let t=await ae();if(t===`0.0.0`)return;let n=await ie();n&&re(n,t)&&console.log(se(t,n))}const H={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`},exclude:[]};function U(e,t,n){return e.doctorConfig.severity[t]||n}async function ce(e,t){s.default.existsSync(t)||s.default.mkdirSync(t,{recursive:!0});let n=r.default.basename(e),i=new Date().toISOString().replace(/[:.]/g,`-`),a=r.default.join(t,`${n}.${i}.bak`);s.default.copyFileSync(e,a)}const W=new Map;function G(e){let n=W.get(e);if(n)return n;let r=(async()=>{let n=await t.u(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return W.set(e,r),r}const K=new Map;function q(e){if(K.has(e))return K.get(e);let t=!1;try{t=s.default.existsSync(e)&&s.default.statSync(e).isFile()}catch{t=!1}return K.set(e,t),t}async function J(e){let t=r.default.resolve(e,`doctor.json`);if(s.default.existsSync(t))try{let e=JSON.parse(s.default.readFileSync(t,`utf-8`));return{...H,...e,checks:{...H.checks,...e.checks,metadata:{...H.checks.metadata,...e.checks?.metadata},links:{...H.checks.links,...e.checks?.links},i18n:{...H.checks.i18n,...e.checks?.i18n}},fix:{...H.fix,...e.fix},reporting:{...H.reporting,...e.reporting},severity:{...H.severity,...e.severity},exclude:[...H.exclude,...e.exclude||[]]}}catch(e){P(`Failed to parse doctor.json: ${e}`)}return H}async function Y(e,n=process.cwd(),a,o){let c=r.default.resolve(n,`.boltdocs`);s.default.existsSync(c)||s.default.mkdirSync(c,{recursive:!0});let l=o;l||=await new i.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=a?.base||`/docs`,d=[];for(let n=0;n<l.length;n+=100){let i=l.slice(n,n+100),a=await Promise.all(i.map(async n=>{let i=r.default.isAbsolute(n)?n:r.default.resolve(e,n),a=r.default.relative(e,i),{data:o}=await G(i),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.i(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return s.default.writeFileSync(r.default.resolve(c,`link-tree.json`),JSON.stringify(f,null,2)),f}function le(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-(0,f.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,f.distance)(e,t)/Math.max(e.length,t.length)}const X=new Map;function Z(e,t){if(X.has(e))return X.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=le(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return X.set(e,a),a}async function Q(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:r,titleMax:i,descriptionMin:a}=e.doctorConfig.checks.metadata,o=new Map;for(let s of e.files){let l=t.l(c.default.relative(e.docsDir,s));try{let{raw:c,data:u}=await G(s);if(c.trim().startsWith(`---`)&&c.split(`---`).length>=3&&Object.keys(u).length===0){let t=U(e,`malformedFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=t.v.safeParse(u);if(!d.success){let t=U(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)n.push({file:l,level:t,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let t of f)if(u[t]===void 0){let r=U(e,`missingMetadata`,`warning`);r!==`off`&&n.push({file:l,level:r,message:`Missing required frontmatter field: "${t}".`,suggestion:`Add the "${t}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let t=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of t)if(u[r]&&isNaN(Date.parse(String(u[r])))){let t=U(e,`invalidFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Invalid date format in field "${r}": "${u[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<r){let i=U(e,`shortMetadata`,`low`);i!==`off`&&n.push({file:l,level:i,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${r} characters for better SEO.`})}else if(t.length>i){let r=U(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${i} characters.`})}let a=o.get(t)||[];a.push(l),o.set(t,a)}if(u.description&&String(u.description).length<a){let t=U(e,`shortMetadata`,`low`);t!==`off`&&n.push({file:l,level:t,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${a} characters.`})}}catch(t){let r=U(e,`malformedFrontmatter`,`high`);r!==`off`&&n.push({file:l,level:r,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}for(let[t,r]of o.entries())if(r.length>1){let i=U(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)n.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return n}async function $(e){let n=[],{internal:r,external:i,ignore:o,timeout:s,concurrency:l}=e.doctorConfig.checks.links;if(!r&&!i&&!e.options.checkExternal)return n;let u=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,d=new Set,f=5e5;for(let s of e.files){let l=t.l(c.default.relative(e.docsDir,s)),{content:p}=await G(s),m=[...(p.length>f?p.slice(0,f):p).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(u)];for(let t of m){let u=t[1]||t[2],f=!!t[1];if(!u||o.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(i||e.options.checkExternal)&&d.add({url:u,file:s});continue}if(!r||/^(mailto|tel|#)/i.test(u))continue;let p;try{p=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{p=u.split(`#`)[0].split(`?`)[0]}if(!p)continue;let m=!1,h=``;if(p.startsWith(`/`))if(e.routeIndex.has(p)||e.routeIndexWithSlash.has(p)||e.routeIndexWithoutSlash.has(p))m=!0;else{let t=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))m=!1,h=t;else{let t=e.config.base!==`/`&&p.startsWith(e.config.base||`/`)?p.substring((e.config.base||`/`).length):p,n=t.startsWith(`/`)?t.substring(1):t;h=c.default.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>q(h+e))}}else h=c.default.resolve(c.default.dirname(s),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>q(h+e));if(!m){let{bestMatch:t,similarity:r}=Z(p,e.linkTree.routes),i=!1,o=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(o)||e.routeIndexWithSlash.has(o))&&(t=o,r=1,i=!0);let c=r>.6||i,d=r>.75&&t!==p||i,m=U(e,`brokenLink`,`high`);m!==`off`&&n.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:c?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:d?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=f?`(${u})`:`href="${u}"`,r=f?`(${t}${e})`:`href="${t}${e}"`,i=a.default.readFileSync(s,`utf-8`).replace(n,r);a.default.writeFileSync(s,i),W.delete(s)}:void 0})}}}if(d.size>0){N(`${A.gray}Verifying ${d.size} external links...${A.reset}`);let r=new Map;for(let e of d)r.has(e.url)||r.set(e.url,[]),r.get(e.url).push(e.file);let i=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),s),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(r.keys()),o=[];for(let e=0;e<a.length;e+=l){let t=a.slice(e,e+l),n=await Promise.allSettled(t.map(i));o.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of o)if(!i.ok){let a=U(e,`brokenLink`,`warning`);if(a!==`off`){let o=r.get(i.url)||[];for(let r of o)n.push({file:t.l(c.default.relative(e.docsDir,r)),level:a,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return n}async function ue(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:r,locales:i}=e.config.i18n,o=Object.keys(i),s=o.filter(e=>e!==r);for(let i of e.files){let l=t.l(c.default.relative(e.docsDir,i)),u=l.split(`/`),d=u[0];if(d===r){let t=u.slice(1).join(`/`);for(let r of s){let o=c.default.join(e.docsDir,r,t);if(!q(o)){let s=U(e,`missingTranslation`,`warning`);s!==`off`&&n.push({file:l,level:s,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${t}".`,fix:async()=>{let e=c.default.dirname(o);a.default.existsSync(e)||a.default.mkdirSync(e,{recursive:!0}),a.default.copyFileSync(i,o)}})}}}else if(o.includes(d)){let t=u.slice(1).join(`/`);if(!q(c.default.join(e.docsDir,r,t))){let o=U(e,`missingTranslation`,`low`);o!==`off`&&n.push({file:l,level:o,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${t}".`,fix:async()=>{a.default.unlinkSync(i)}})}}}return n}async function de(e){let t=[];if(!e.config.theme.sidebar)return t;let n=new Set,r=e.config.theme.sidebar;for(let[i,a]of Object.entries(r))for(let r of a){if(!r.text){let n=U(e,`invalidFrontmatter`,`warning`);n!==`off`&&t.push({file:`boltdocs.config.ts`,level:n,message:`Sidebar item in group "${i}" is missing a label.`,suggestion:`Add a "text" property to the sidebar item.`})}if(r.link&&(n.add(r.link),!e.routeIndex.has(r.link))){let{bestMatch:n,similarity:i}=Z(r.link,e.linkTree.routes),a=i>.6,o=U(e,`brokenLink`,`high`);o!==`off`&&t.push({file:`boltdocs.config.ts`,level:o,message:`Broken sidebar link: "${r.link}"`,suggestion:a?`Did you mean "${n}"?`:`Ensure the route exists and is correctly formatted.`})}}for(let r of e.linkTree.routes)if(!(r===`/`||r===``)&&!n.has(r)){let n=U(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}async function fe(e){let t=c.default.resolve(e,`doctor.json`);if(a.default.existsSync(t)){P(`"doctor.json" already exists at ${e}.`);return}try{a.default.writeFileSync(t,JSON.stringify(H,null,2)),I(`Created "doctor.json" with default configuration.`)}catch(e){F(`Failed to create "doctor.json": ${e}`)}}async function pe(e=process.cwd(),t={}){if(t.init){await fe(e);return}V();try{let n=await J(e),{format:r}=n.reporting,{colors:o}=te;r===`pretty`&&R(`DOCTOR - Documentation Health Check`);let s=performance.now(),u=await k(`docs`,e),d=c.default.resolve(e,`docs`);a.default.existsSync(d)||(r===`pretty`&&F(`Docs dir not found at ${d}`),process.exit(1)),r===`pretty`&&N(`${A.dim}🔍 Discovering files and routes...${A.reset}`);let f=(0,l.default)(n.exclude||[]),p=await new i.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=c.default.relative(d,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!f(t)&&!n}).crawl(d).withPromise();for(let e of p)K.set(e,!0);let m=await Y(d,e,u,p),h=u.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:d,config:u,doctorConfig:n,linkTree:m,files:p,options:t,routeIndex:new Set(m.routes),routeIndexWithSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:g};r===`pretty`&&N(`${A.dim}🧪 Running diagnostic checks in parallel...${A.reset}`);let[v,y,b,x]=await Promise.all([Q(_),$(_),ue(_),de(_)]),S=[...v,...y,...b,...x],C=0;if(t.fix){for(let e of S)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await j(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=c.default.resolve(_.docsDir,e.file);a.default.existsSync(t)&&await ce(t,c.default.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),C++}}let w=((performance.now()-s)/1e3).toFixed(2),T=S.filter(e=>e.level===`high`).length,E=S.filter(e=>e.level===`warning`).length,D=S.filter(e=>e.level===`low`).length,O={summary:{total:S.length,high:T,warning:E,low:D,fixed:C,duration:w},issues:S.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=c.default.resolve(e,n.reporting.outputFile);a.default.existsSync(c.default.dirname(t))||a.default.mkdirSync(c.default.dirname(t),{recursive:!0}),a.default.writeFileSync(t,JSON.stringify(O,null,2))}if(r===`json`)console.log(JSON.stringify(O,null,2));else if(r===`pretty`){let e=S.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(S.length>0){L();for(let[n,r]of Object.entries(e)){console.log(`\n${o.bold}${o.cyan}📄 ${n}${o.reset}`);for(let e of r){let n=e.level===`high`?`❌`:e.level===`warning`?`⚠️`:`ℹ️`,r=e.level===`high`?o.red:e.level===`warning`?o.yellow:o.blue;console.log(` ${n} ${r}${e.level.toUpperCase()}${o.reset}: ${e.message}`),e.suggestion&&console.log(` ${o.dim}💡 Suggestion: ${e.suggestion}${o.reset}`),t.fix&&e.fix&&console.log(` ${o.green}✅ Fixed automatically${o.reset}`)}}L()}S.length===0?I(`Everything looks perfect! Your documentation is in great shape. ✨`):(console.log(`\n${o.bold}Diagnosis Results (${w}s):${o.reset}`),T>0&&console.log(` ${o.red}● ${T} Critical Errors${o.reset}`),E>0&&console.log(` ${o.yellow}● ${E} Warnings${o.reset}`),D>0&&console.log(` ${o.blue}● ${D} Improvements${o.reset}`),C>0&&I(`Successfully fixed ${C} issues automatically!`),T>0?console.log(`\n${o.red}${o.bold}[boltdocs] Please fix the critical errors before building for production.${o.reset}`):I(`[boltdocs] No critical issues found. You are ready to go!`))}n.reporting.failOnError&&T>0&&process.exit(1),n.reporting.maxWarnings!==-1&&E>n.reporting.maxWarnings&&(r===`pretty`&&F(`Failed: Too many warnings (${E} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){F(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return h}});
|