boltdocs 2.9.0 → 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cache-C2PiGyg8.cjs → cache-B19MLTpN.cjs} +1 -1
- package/dist/{cache-DFW4R3S0.mjs → cache-CfhOTR3Q.mjs} +1 -1
- package/dist/config-BqZUYono.cjs +7 -0
- package/dist/config-DBKBEj3j.mjs +7 -0
- package/dist/config-GPVEdeon.mjs +6 -0
- package/dist/config-kIQOJHXC.cjs +6 -0
- package/dist/csp-CBysWlAf.cjs +6 -0
- package/dist/csp-RJyh0nHV.mjs +6 -0
- package/dist/doctor-C19DsI1e.mjs +7 -0
- package/dist/{parser-DJoEF96Y.cjs → doctor-D8fl3Sbg.cjs} +1 -1
- package/dist/doctor-DzEgMMRo.cjs +7 -0
- package/dist/errors-C0Hx15Ag.mjs +6 -0
- package/dist/errors-Dx6JHoKE.cjs +6 -0
- package/dist/{doctor-wsPTzt8Y.mjs → handler-eNNcucnf.mjs} +1 -1
- package/dist/headers-BJ4jJAhU.cjs +6 -0
- package/dist/headers-HD_qTVVW.mjs +6 -0
- package/dist/{meta-loader-D0V6oOQt.cjs → meta-loader-C9MKjAs0.cjs} +1 -1
- package/dist/{meta-loader-By22EnYa.mjs → meta-loader-CxAoQthW.mjs} +1 -1
- package/dist/node/cli-entry.cjs +9 -3
- package/dist/node/cli-entry.mjs +9 -3
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +7 -7
- package/dist/node/index.d.mts +8 -8
- 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-B7qbjtLl.mjs +105 -0
- package/dist/node-Dj3-2YYP.cjs +105 -0
- package/dist/package-ByXh2JHp.cjs +6 -0
- package/dist/{package-BK_82QLX.mjs → package-DQBAV8uo.mjs} +1 -1
- package/dist/{doctor-Bknon8f5.cjs → parser-B8naUXl2.cjs} +1 -1
- package/dist/parser-D4oEyuP-.cjs +6 -0
- package/dist/parser-IR9tfyGE.mjs +6 -0
- package/dist/plugin-BkquLpOI.mjs +61 -0
- package/dist/plugin-CL1LsQXk.cjs +61 -0
- package/dist/routes-DR13Y1em.mjs +6 -0
- package/dist/routes-DX8ryKjs.cjs +6 -0
- package/dist/{routes-C6Kr2HFN.cjs → routes-DgTQxpZi.cjs} +1 -1
- package/dist/{routes-CKgGAy8P.mjs → routes-TUSK5wD7.mjs} +1 -1
- package/dist/{shiki-adapter-CUtj-xKv.cjs → shiki-adapter-BB71nVsG.cjs} +1 -1
- package/dist/{handler-B31cxNw0.mjs → shiki-adapter-CL-IQwKI.cjs} +1 -1
- package/dist/shiki-adapter-CxTLkjew.mjs +6 -0
- package/dist/{shiki-adapter-F-P-lDon.mjs → shiki-adapter-rQ087Lx3.mjs} +1 -1
- package/dist/types-generator-BRyf4o9F.mjs +26 -0
- package/dist/types-generator-BqNKCbrx.cjs +26 -0
- package/dist/types-generator-Cu2jQP-V.mjs +6 -0
- package/dist/utils-BWy_8ASj.cjs +7 -0
- package/dist/utils-DexBrwiP.mjs +7 -0
- package/dist/{worker-pool-DRv8ef4z.mjs → worker-pool-C6r6V05j.mjs} +1 -1
- package/package.json +1 -1
- package/dist/doctor-BY1tSmQd.mjs +0 -34
- package/dist/doctor-DcFLi4t1.cjs +0 -34
- package/dist/node-DV-EPtMU.mjs +0 -160
- package/dist/node-vOVNRABe.cjs +0 -160
- package/dist/package-OxKE0p6j.cjs +0 -6
- package/dist/parser-C2Pw18LY.cjs +0 -6
- package/dist/parser-DScG_PTs.mjs +0 -6
- package/dist/routes--LYHSHT7.cjs +0 -6
- package/dist/routes-BAsfsn_e.mjs +0 -6
- package/dist/shiki-adapter-EZptJAmW.mjs +0 -6
- package/dist/shiki-adapter-PQBl32AN.cjs +0 -6
- package/dist/utils-DC4Wq-S2.mjs +0 -7
- package/dist/utils-wHud9ny5.cjs +0 -7
- /package/dist/{generator-DILs0EFN.mjs → generator-B6lrnDZ-.mjs} +0 -0
- /package/dist/{generator-BEIF6MOx.cjs → generator-DtUU3Cfk.cjs} +0 -0
- /package/dist/{handler-Djy0HfsI.cjs → handler-1LRMYeI4.cjs} +0 -0
- /package/dist/{handler-DfhH9D1b.mjs → handler-CyIBbZdb.mjs} +0 -0
- /package/dist/{worker-pool-BS1LX67P.cjs → worker-pool-m81xuM5v.cjs} +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`),n=require(`./node-Dj3-2YYP.cjs`),r=require(`./config-BqZUYono.cjs`),i=require(`./types-generator-BqNKCbrx.cjs`),a=require(`./cache-B19MLTpN.cjs`),o=require(`./routes-DgTQxpZi.cjs`),s=require(`./shiki-adapter-BB71nVsG.cjs`),c=require(`./doctor-DzEgMMRo.cjs`),l=require(`./headers-BJ4jJAhU.cjs`),u=require(`./csp-CBysWlAf.cjs`);let d=require(`node:path`);d=e.n(d);let f=require(`node:fs`);f=e.n(f);let p=require(`@bdocs/dui`),m=require(`vite`),h=require(`node:module`);h=e.n(h);let g=require(`node:crypto`);g=e.n(g);let ee=require(`@bdocs/plugin-image-optimizer`),_=require(`@mdx-js/rollup`);_=e.n(_);let v=require(`remark-gfm`);v=e.n(v);let y=require(`remark-frontmatter`);y=e.n(y);let b=require(`rehype-slug`);b=e.n(b);let x=require(`unist-util-visit`);function S(e){return`<!doctype html>
|
|
7
|
+
<html lang="en">
|
|
8
|
+
<head>
|
|
9
|
+
<meta charset="UTF-8" />
|
|
10
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
11
|
+
<title>${e.theme?.title||`Boltdocs`}</title>
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="root"></div>
|
|
15
|
+
</body>
|
|
16
|
+
</html>`}function C(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=S(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">`,t.siteUrl?`<meta property="og:url" content="${t.siteUrl}">`:``,t.siteUrl?`<link rel="canonical" href="${t.siteUrl}">`:``,`<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(`
|
|
17
|
+
`);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=`
|
|
18
|
+
<!-- Google tag (gtag.js) - ${e.measurementId} -->
|
|
19
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=${e.measurementId}"><\/script>
|
|
20
|
+
<script>
|
|
21
|
+
window.dataLayer = window.dataLayer || [];
|
|
22
|
+
function gtag(){dataLayer.push(arguments);}
|
|
23
|
+
gtag('js', new Date());
|
|
24
|
+
${t}
|
|
25
|
+
gtag('config', '${e.measurementId}', ${n}${r});
|
|
26
|
+
<\/script>
|
|
27
|
+
`}}let c=``,l=``;if(t.integrations?.gtm){let e=t.integrations.gtm;if(process.env.NODE_ENV===`production`){let t=e.dataLayerName||`dataLayer`;c=`
|
|
28
|
+
<!-- Google Tag Manager -->
|
|
29
|
+
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
30
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
31
|
+
j=d.createElement(s),dl=l!='${t}'?'&l='+l:'';j.async=true;j.src=
|
|
32
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl+'${e.preview?`>m_preview=${e.preview}`:``}';f.parentNode.insertBefore(j,f);
|
|
33
|
+
})(window,document,'script','${t}','${e.tagId}');<\/script>
|
|
34
|
+
<!-- End Google Tag Manager -->
|
|
35
|
+
`,l=`
|
|
36
|
+
<!-- Google Tag Manager (noscript) -->
|
|
37
|
+
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=${e.tagId}"
|
|
38
|
+
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
39
|
+
<!-- End Google Tag Manager (noscript) -->
|
|
40
|
+
`}}return e=e.replace(`<head>`,`<head>
|
|
41
|
+
|
|
42
|
+
<script>
|
|
43
|
+
(function() {
|
|
44
|
+
try {
|
|
45
|
+
var stored = localStorage.getItem("boltdocs-theme");
|
|
46
|
+
var isDark =
|
|
47
|
+
stored === "dark" ||
|
|
48
|
+
(stored !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
49
|
+
document.documentElement.classList.toggle("dark", isDark);
|
|
50
|
+
document.documentElement.dataset.theme = isDark ? "dark" : "light";
|
|
51
|
+
} catch (e) {
|
|
52
|
+
// Ignore localStorage errors (e.g. if cookies/storage are disabled)
|
|
53
|
+
}
|
|
54
|
+
})();
|
|
55
|
+
<\/script>
|
|
56
|
+
`),e=e.replace(`</head>`,` ${o}\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>
|
|
57
|
+
</body>`)),e}function w(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(w):e&&typeof e==`object`?Object.values(e).flatMap(w):[]}const te=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function ne(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=w(Object.entries(n.frontmatter).filter(([e])=>!te.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}let T=null,E=null;function D(){T=null,E=null}function re(e,r,i,a){return{name:`vite-plugin-boltdocs-virtual-modules`,resolveId(e){let n=i()?.root||process.cwd();return e.includes(`boltdocs-entry.tsx`)||e===`virtual:boltdocs-entry`||e===`boltdocs-entry`||e===`\0virtual:boltdocs-entry`?t.u(d.default.resolve(n,`boltdocs-entry.tsx`)):e.includes(`boltdocs-client.mjs`)||e===`virtual:boltdocs-client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.ts`?t.u(d.default.resolve(n,`boltdocs-client.mjs`)):e.startsWith(`virtual:boltdocs-`)?`\0`+e:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(i){let s=r();if(i.includes(`boltdocs-entry.tsx`)||i===`\0virtual:boltdocs-entry`)return n.j(e,s);if(i.includes(`boltdocs-client.mjs`)||i===`\0virtual:boltdocs-client.ts`||i===`virtual:boltdocs-client`){let e=__dirname,n=e;for(;e!==d.default.parse(e).root;){if(f.default.existsSync(d.default.join(e,`package.json`))&&JSON.parse(f.default.readFileSync(d.default.join(e,`package.json`),`utf-8`)).name===`boltdocs`){n=e;break}e=d.default.dirname(e)}let r=d.default.join(n,`src/client/index.ts`),i=d.default.join(n,`dist/client/index.js`);return`export * from '${t.u(f.default.existsSync(r)?r:i)}';`}if(!i.startsWith(`\0virtual:boltdocs-`))return;let c=i.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(c===`routes`){let e=n.C(await o.t(a,s));return`export default ${JSON.stringify(e,null,2)};`}if(c===`collections`){let e=n.C(await o.t(a,s)),t={};for(let n of e)n.collection&&(t[n.collection]||(t[n.collection]=[]),t[n.collection].push({path:n.path,title:n.title,date:n.date,excerpt:n.excerpt,tags:n.tags,author:n.author,coverImage:n.coverImage,filePath:n.filePath,frontmatter:n.frontmatter}));return`export default ${JSON.stringify(t,null,2)};`}if(c===`config`){if(T===null){let{loadDirectoryMeta:e}=await Promise.resolve().then(()=>require(`./meta-loader-C9MKjAs0.cjs`));T=await e(a)}let e=T,t={base:s?.base,theme:s?.theme,i18n:s?.i18n,versions:s?.versions,siteUrl:s?.siteUrl,integrations:s?.integrations,plugins:s?.plugins?.map(e=>({name:e.name})),directoryMeta:e};return`export default ${JSON.stringify(t,null,2)};`}if(c===`entry`)return n.j(e,s);if(c===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],n=null;for(let t of e){let e=d.default.resolve(a,`mdx-components.${t}`);if(f.default.existsSync(e)){n=e;break}}if(n){let e=t.u(n);return`import * as components from '${e}';
|
|
58
|
+
const mdxComponents = components.default || components;
|
|
59
|
+
export default mdxComponents;
|
|
60
|
+
export * from '${e}';`}return`export default {};`}if(c===`layout`){let e=[`tsx`,`jsx`],n=null;for(let t of e){let e=d.default.resolve(a,`layout.${t}`);if(f.default.existsSync(e)){n=e;break}}if(n)return`import UserLayout from '${t.u(n)}';
|
|
61
|
+
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(c===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],n=null;for(let t of e){let e=d.default.resolve(a,`icons.${t}`);if(f.default.existsSync(e)){n=e;break}}return n?`import * as icons from '${t.u(n)}';\nexport default icons;`:`export default {};`}if(c===`search`){if(!E){let e=ne(await o.t(a,s));E=`export default ${JSON.stringify(e,null,2)};`}return E}if(c===`client`){let e=__dirname,n=``;for(;e&&e!==d.default.parse(e).root;){let r=d.default.join(e,`src/client/index.ts`),i=d.default.join(e,`dist/client/index.mjs`),a=d.default.join(e,`client/index.ts`);if(f.default.existsSync(r)){n=t.u(r);break}if(f.default.existsSync(i)){n=t.u(i);break}if(f.default.existsSync(a)){n=t.u(a);break}e=d.default.dirname(e)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${__dirname}`);return`export * from '${n}';`}}}}function O(e){return(t,n,r)=>{let i=e().integrations?.feedback?.custom,a=i?.endpoint||`/api/feedback`;if(!i?.enabled||t.method!==`POST`||t.url?.split(`?`)[0]!==a)return r();let o=``;t.on(`data`,e=>{o+=e}),t.on(`end`,async()=>{n.setHeader(`Content-Type`,`application/json`);try{let{handleFeedback:e}=await Promise.resolve().then(()=>require(`./handler-1LRMYeI4.cjs`)).then(e=>e.n),t=await e(JSON.parse(o),process.env,{owner:i.owner,repo:i.repo,categorySlug:i.categorySlug});n.statusCode=200,n.end(JSON.stringify(t))}catch(e){n.statusCode=500;let t=e instanceof Error?e.message:`Failed to submit feedback`;n.end(JSON.stringify({error:t}))}})}}function k(e){return(t,n,r)=>{let i=t.url||`/`,a=i.split(`?`)[0].split(`#`)[0];if(d.default.extname(a))return r();let o=e(),s=d.default.resolve(o?.root||process.cwd(),o?.build?.outDir||`dist`),c=a.replace(/\/$/,``)||`/`,l=d.default.join(s,c,`index.html`);c!==`/`&&f.default.existsSync(l)&&(t.url=`${c}/index.html${i.includes(`?`)?`?${i.split(`?`)[1]}`:``}`),r()}}const A=/\.(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;function j(e,t,n){let r=process.env.NODE_ENV===`production`;e.middlewares.use(O(n)),e.middlewares.use((e,t,i)=>{r&&Object.entries(l.t).forEach(([e,n])=>{t.setHeader(e,n)});let a=n();a.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,u.n(a)),i()}),e.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),e.middlewares.use(async(t,r,i)=>{let a=t.url?.split(`?`)[0]||`/`,o=t.headers.accept||``,s=n();if(o.includes(`text/html`)&&!A.test(a)){let n=S(s);n=C(n,s),n=await e.transformIndexHtml(t.url||`/`,n),r.statusCode=200,r.setHeader(`Content-Type`,`text/html`),r.end(n);return}i()})}function M(e,t,n){setTimeout(async()=>{try{let{generateRoutes:r}=await Promise.resolve().then(()=>require(`./routes-DX8ryKjs.cjs`)),i=(await r(t,n())).filter(e=>e.filePath).map(e=>e.filePath);for(let t=0;t<i.length;t+=32){let n=i.slice(t,t+32);await Promise.allSettled(n.map(t=>{let n=d.default.relative(process.cwd(),t).replace(/\\/g,`/`),r=n.startsWith(`/`)?n:`/${n}`;return e.transformRequest(r)}))}}catch{}},0)}const N=[`tsx`,`jsx`],P=[`tsx`,`ts`,`jsx`,`js`];function ie(e,t){let n=r.t.map(e=>d.default.resolve(process.cwd(),e)),i=N.map(e=>d.default.resolve(t,`layout.${e}`)),a=P.map(e=>d.default.resolve(t,`mdx-components.${e}`)),o=P.map(e=>d.default.resolve(t,`pages-external/index.${e}`)),s=P.map(e=>d.default.resolve(t,`icons.${e}`));e.watcher.add([...n,...a,...i,...o,...s])}const F=new Map;function I(e){let{lastUpdated:t,...n}=e;return g.default.createHash(`md5`).update(JSON.stringify(n)).digest(`hex`)}async function L(e){try{let{data:n}=await t.d(e);return I(n)}catch{return``}}function R(e){let t=F.get(e);if(t===void 0){let n=o.r.getStale(e);n?.route?.frontmatter&&(t=I(n.route.frontmatter),F.set(e,t))}return t}function z(e,t){F.set(e,t)}function B(e){F.delete(e)}const V=[`tsx`,`ts`,`jsx`,`js`];function H(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function U(e,n,a,s){let l=new Map,u=a.toLowerCase(),f=async(a,f)=>{try{let m=t.u(a);if(r.t.some(e=>m.endsWith(e))){e.restart();return}if(V.some(e=>m.endsWith(`mdx-components.${e}`))){i.t(s(),n),H(e,`mdx-components.tsx`),e.ws.send({type:`full-reload`});return}if(V.some(e=>m.endsWith(`icons.${e}`))){H(e,`icons.tsx`),e.ws.send({type:`full-reload`});return}if(m.endsWith(`layout.tsx`)||m.endsWith(`layout.jsx`)){H(e,`layout.tsx`),e.ws.send({type:`full-reload`});return}if(m.includes(`/pages-external/`)||m.includes(`\\pages-external\\`)){H(e,`entry`),e.ws.send({type:`full-reload`});return}if(!m.toLowerCase().startsWith(u))return;let h=m.endsWith(`meta.json`)||m.endsWith(`_meta.json`);if(!h&&!t.c(m))return;if(f===`add`||f===`unlink`||h){f===`unlink`&&B(a),o.n(),D();let t=s();i.t(t,n),H(e,`config`),H(e,`routes`),H(e,`search`),H(e,`collections`),c.c(n,process.cwd(),t).catch(e=>{(0,p.error)(`Failed to update link tree:`,e)}),e.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:t?.theme,i18n:t?.i18n,versions:t?.versions,siteUrl:t?.siteUrl}}),e.ws.send({type:`full-reload`});return}l.has(m)&&clearTimeout(l.get(m)),l.set(m,setTimeout(async()=>{l.delete(m);try{let r=R(a),i=await L(a);if(z(a,i),o.i(a),r!==void 0&&r!==i){H(e,`routes`),H(e,`search`),H(e,`collections`),e.ws.send({type:`full-reload`});return}let s=t.u(d.default.relative(n,a)),c=e.moduleGraph.getModulesByFile(m);if(c&&c.size>0)for(let t of c)e.moduleGraph.invalidateModule(t);else{e.ws.send({type:`full-reload`});return}e.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:m,relPath:s}})}catch(e){(0,p.error)(`HMR error processing content change:`,e)}},150))}catch(e){(0,p.error)(`HMR error during ${f} event:`,e)}};e.watcher.on(`add`,e=>f(e,`add`)),e.watcher.on(`unlink`,e=>f(e,`unlink`)),e.watcher.on(`change`,e=>f(e,`change`))}function W(e){let n=e.toLowerCase();return({file:e})=>{let r=e.toLowerCase();if(r.startsWith(n)&&(t.c(e)||r.endsWith(`meta.json`)))return[]}}function G(e,t,n,r,i){return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(r){let a=i();await a?.runHook(`beforeDev`),c.c(e,process.cwd(),n()).catch(e=>{(0,p.error)(`Failed to generate initial link tree:`,e)}),M(r,e,n),j(r,e,n),ie(r,e),U(r,e,t,n),await a?.runHook(`afterDev`)},hotUpdate:W(t)}}const K=new a.i(`mdx`);function q(e){let t=s.n(e);return async e=>{let r=await t.getHighlighter();n._(e,s.o.ELEMENT,e=>{if(e.tagName!==`pre`)return;let n=e.children?.[0];if(!n||n.type!==s.o.ELEMENT||n.tagName!==`code`)return;let i=(n.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):s.a.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=s.r(n.properties?.metastring||n.data?.meta||``),c=t.getOptions(a,o),l=n.children?.[0]?.value||``;try{let t=r.codeToHast(l,c),n=t.type===`root`?t.children[0]:t;e.children=n.children,e.properties={...e.properties,...n.properties,[s.i.HIGHLIGHTED]:`true`,[s.i.LANG]:a}}catch(t){(0,p.error)(`[rehypeShiki] Failed to highlight code block:`,t),e.properties=e.properties||{},e.properties.className=[...e.properties.className||[],s.s.FALLBACK],e.properties[s.i.HIGHLIGHTED]=`false`,e.properties[s.i.LANG]=a}return o.title&&(e.properties[s.i.TITLE]=o.title),x.SKIP})}}function J(){return e=>{n._(e,s.o.CODE,e=>{e.meta&&n.h(e,`metastring`,e.meta)})}}let ae=!1;function oe(e,t,n=_.default){let r=e?.plugins?.flatMap(e=>e.remarkPlugins||[])||[],i=e?.plugins?.flatMap(e=>e.rehypePlugins||[])||[],a=n({remarkPlugins:[v.default,y.default,J,...r],rehypePlugins:[b.default,[q,e],...i],jsxRuntime:`automatic`});return{...a,name:`vite-plugin-boltdocs-mdx`,async buildStart(){ae||=(await K.load(),!0),a.buildStart&&await a.buildStart.call(this)},async load(e,n){if(e.endsWith(`.md`)||e.endsWith(`.mdx`))try{let n=f.default.readFileSync(e,`utf-8`),r=t?.();return r&&(n=(await r.runChain(`transformSource`,{code:n,filePath:e})).code),n}catch{return null}return a.load?a.load.call(this,e,n):null},async transform(e,n,r){let[i]=n.split(`?`);if(!i.endsWith(`.md`)&&!i.endsWith(`.mdx`))return a.transform?.call(this,e,n,r);let o=`${i}:${g.default.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,s=await K.getAsync(o);if(s)return{code:s,map:null};let c=await a.transform.call(this,e,i,r);if(c&&typeof c==`object`&&c.code){let e=c.code,n=t?.();return n&&(e=(await n.runChain(`transformMdx`,{code:e,filePath:i})).code),K.set(o,e),{code:e,map:null}}return c},async buildEnd(){K.save(),await K.flush(),a.buildEnd&&await a.buildEnd.call(this)}}}const Y=h.createRequire(require(`url`).pathToFileURL(__filename).href),se=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],ce=[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`];function X(e=Y){try{let e=d.default.join(process.cwd(),`node_modules/boltdocs/package.json`);return f.default.existsSync(e)?h.createRequire(f.default.realpathSync(e)):h.createRequire(d.default.join(process.cwd(),`package.json`))}catch{return e}}function Z(e,t=Y){try{let n=e.split(`/`),r=e.startsWith(`@`)?n.slice(0,2).join(`/`):n[0],i=e.startsWith(`@`)?n.slice(2).join(`/`):n.slice(1).join(`/`),a=``;try{a=t.resolve(`${r}/package.json`)}catch{let e=t.resolve(r),n=d.default.dirname(e);for(;n&&n!==d.default.dirname(n);){let e=d.default.join(n,`package.json`);if(f.default.existsSync(e)){a=e;break}n=d.default.dirname(n)}}if(!a)throw Error();let o=d.default.dirname(a),s=JSON.parse(f.default.readFileSync(a,`utf-8`)),c=i?`./${i}`:`.`,l=s.exports?.[c]||s.exports?.[i]||``;typeof l==`object`&&l&&(l=l.import||l.default||l.require||``),!l&&!i&&(l=s.module||s.main||`index.js`);let u=d.default.resolve(o,l);if(f.default.existsSync(u))return u}catch{}return t.resolve(e)}function Q(e=Y){let n=[],r=X(e),i=new Set([r,e]);for(let e of i){for(let t of se)try{let r=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(t)?Z(t,e):e.resolve(t);r&&n.push(f.default.realpathSync(r))}catch{}for(let t of ce)try{n.push(f.default.realpathSync(e.resolve(t)))}catch{}}return Array.from(new Set(n)).map(e=>t.u(e))}const $=h.createRequire(require(`url`).pathToFileURL(__filename).href),le=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`];function ue(e={},a){let s=d.default.resolve(process.cwd(),e.docsDir||`docs`),c=t.u(s),l=a,u,p=!1,h,g=[],_=()=>l,v=e=>{l=e},y=()=>u,b=()=>h;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){p=t.command===`build`;let a=!!(t.isSsrBuild||e.build?.ssr);if(Object.assign(process.env,(0,m.loadEnv)(t.mode,e.envDir||process.cwd(),``)),!l){l=await r.n(s);let e=(await o.t(s,l)).map(e=>e.path),t=(l.base||`/docs`).replace(/\/$/,``);e.includes(t)||e.push(t),i.t(l,s,void 0,e),i.r(e)}Promise.resolve().then(()=>require(`./shiki-adapter-CL-IQwKI.cjs`)).then(({getShikiAdapter:e})=>{e(l).getHighlighter().catch(()=>{})}).catch(()=>{});let{version:c}=await Promise.resolve().then(()=>require(`./package-ByXh2JHp.cjs`)),u=n.T(l.plugins||[],c);return l.plugins=u,h=new n.x(u,l),g=u.flatMap(e=>e.vitePlugins||[]),p&&await h.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`flat`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`}},build:{ssrManifest:p},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:Z(`react-router-dom`)},{find:`react-helmet-async`,replacement:Z(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:Z(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...a?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Q($)],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[`react-router-dom`]}}},configResolved(e){u=e},resolveId(e,t,n){let r=le.find(t=>e===t||e.startsWith(`${t}/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,d.default.sep)}/`));if(r&&n?.ssr&&!d.default.isAbsolute(e)&&r!==`react`&&r!==`react-dom`){let t=X($),n=e;try{n=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(r)?Z(e,t):t.resolve(e)}catch{try{n=[`@bdocs/ssg`,`react-router-dom`,`react-helmet-async`].includes(r)?Z(e,$):$.resolve(e)}catch{}}try{n=f.default.realpathSync(n)}catch{}return{id:n,external:!0}}return null},transformIndexHtml:{order:`pre`,handler:e=>C(e,l)},async buildEnd(){let{pool:e}=await Promise.resolve().then(()=>require(`./worker-pool-m81xuM5v.cjs`));await e.terminate()},async closeBundle(){!p||u?.build?.ssr||(await h?.runHook(`afterBuild`),await h?.runHook(`buildEnd`))},configurePreviewServer(e){e.middlewares.use(O(_)),e.middlewares.use(k(y))}},re(e,_,y,s),G(s,c,_,v,b),oe(l,b),(0,ee.ViteImageOptimizer)({includePublic:!0}),...g]}exports.boltdocsPlugin=ue,exports.getBaseRequire=X,exports.getExternalAbsolutePaths=Q,exports.resolveEsm=Z;
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-
|
|
6
|
+
const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`),n=require(`./cache-B19MLTpN.cjs`);let r=require(`node:path`);r=e.n(r);let i=require(`fdir`);const a=new n.r({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)=>{let n=e.group?e.groupPosition??999:e.sidebarPosition??999,r=t.group?t.groupPosition??999:t.sidebarPosition??999;return n===r?!e.group&&t.group?-1:e.group&&!t.group?1:e.group&&t.group&&e.group!==t.group?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):l(e,t):n-r})}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}let u=null;const d=new Map;let f=null;function p(){u=null,d.clear(),o()}async function m(e,n,o,s=!1){if(f)return f;let l=(async()=>{let l=o||n?.base||`/docs`;await a.load(),d.clear();let f;if(!s&&u)f=u;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),f=a.map(e=>e.f),u=f}a.pruneStale(new Set(f));let p=process.env.NODE_ENV===`test`||process.env.VITEST===`true`,m;if(p){let{parseDocFile:t}=await Promise.resolve().then(()=>require(`./parser-B8naUXl2.cjs`));m=await Promise.all(f.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-m81xuM5v.cjs`)),r=n?{i18n:n.i18n,versions:n.versions}:void 0;m=await Promise.all(f.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 g=[],_=new Map;for(let e of m)if(!(process.env.NODE_ENV===`production`&&e.route.draft))if(e.inferredCollection){let t=e.inferredCollection;_.has(t)||_.set(t,[]),_.get(t).push(e)}else g.push(e);let v=new Map,y=[],b=n?.i18n?.defaultLocale||``;for(let e of g)if(e.isGroupIndex&&e.relativeDir&&y.push(e),e.relativeDir){let n=`${e.route.locale||b}:${e.relativeDir}`,r=v.get(n);r?r.position===void 0&&e.inferredGroupPosition!==void 0&&(r.position=e.inferredGroupPosition):(r={title:t.t(e.relativeDir),position:e.inferredGroupPosition},v.set(n,r))}for(let e of y){let t=`${e.route.locale||b}:${e.relativeDir}`,n=v.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):[b];for(let[r,i]of Object.entries(n.theme.sidebarGroups))for(let n of e){let e=`${n}:${r}`,a=v.get(e),o;typeof i.title==`string`?o=i.title:i.title&&(o=i.title[n]||i.title[b]),a?(o&&(a.title=o),i.icon&&(a.icon=i.icon)):v.set(e,{title:o||t.t(r),icon:i.icon})}}let x=Array(g.length);for(let e=0;e<g.length;e++){let n=g[e],r=n.relativeDir,i=n.route.locale||b,a=r?`${i}:${r}`:void 0,o=a?v.get(a):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[i]||o.title[b]),x[e]={...n.route,group:r,groupTitle:s||(r?t.t(r):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let S=[];for(let[,e]of _)for(let t of e)S.push({...t.route,collection:t.inferredCollection});S.sort((e,t)=>{let n=e.date?new Date(e.date).getTime():0;return(t.date?new Date(t.date).getTime():0)-n});let C=x;if(n?.i18n){let e=h(x,n,l);C=[...x,...e]}return[...c(C),...S]})();f=l;try{return await l}finally{f=null}}function h(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=g(o.path,r,e,n,t);s!==o.path&&(i.has(s)||a.push({...o,path:s,locale:e}))}}return a}function g(e,t,n,r,i){let a=`${e}:${n}`,o=d.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 f=c+l;return d.size>2e3&&d.clear(),d.set(a,f),f}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
import{t as e}from"./utils-
|
|
6
|
+
import{t as e}from"./utils-DexBrwiP.mjs";import{r as t,t as n}from"./cache-CfhOTR3Q.mjs";import r from"node:path";import{fdir as i}from"fdir";const a=new t({name:`routes`});function o(){a.invalidateAll(),n.clear()}function s(e){a.invalidate(e),n.invalidate(e)}function c(e){return e.sort((e,t)=>{let n=e.group?e.groupPosition??999:e.sidebarPosition??999,r=t.group?t.groupPosition??999:t.sidebarPosition??999;return n===r?!e.group&&t.group?-1:e.group&&!t.group?1:e.group&&t.group&&e.group!==t.group?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):l(e,t):n-r})}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}let u=null;const d=new Map;let f=null;function p(){u=null,d.clear(),o()}async function m(t,n,o,s=!1){if(f)return f;let l=(async()=>{let l=o||n?.base||`/docs`;await a.load(),d.clear();let f;if(!s&&u)f=u;else{let e=await new i().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)?!r.relative(t,e).replace(/\\/g,`/`).split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`):!1).crawl(t).withPromise(),n=[/index\./i,/intro/i,/getting-started/i,/readme/i],a=e.map(e=>{let t=r.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),f=a.map(e=>e.f),u=f}a.pruneStale(new Set(f));let p=process.env.NODE_ENV===`test`||process.env.VITEST===`true`,m;if(p){let{parseDocFile:e}=await import(`./parser-IR9tfyGE.mjs`).then(e=>e.t);m=await Promise.all(f.map(async r=>{let i=a.get(r);if(i)return i;let o=await e(r,t,l,n);return a.set(r,o),o}))}else{let{pool:e}=await import(`./worker-pool-C6r6V05j.mjs`),r=n?{i18n:n.i18n,versions:n.versions}:void 0;m=await Promise.all(f.map(async n=>{let i=a.get(n);if(i)return i;let o=await e.parseFile(n,t,l,r);return a.set(n,o),o}))}a.save();let g=[],_=new Map;for(let e of m)if(!(process.env.NODE_ENV===`production`&&e.route.draft))if(e.inferredCollection){let t=e.inferredCollection;_.has(t)||_.set(t,[]),_.get(t).push(e)}else g.push(e);let v=new Map,y=[],b=n?.i18n?.defaultLocale||``;for(let t of g)if(t.isGroupIndex&&t.relativeDir&&y.push(t),t.relativeDir){let n=`${t.route.locale||b}:${t.relativeDir}`,r=v.get(n);r?r.position===void 0&&t.inferredGroupPosition!==void 0&&(r.position=t.inferredGroupPosition):(r={title:e(t.relativeDir),position:t.inferredGroupPosition},v.set(n,r))}for(let e of y){let t=`${e.route.locale||b}:${e.relativeDir}`,n=v.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 t=n.i18n?Object.keys(n.i18n.locales):[b];for(let[r,i]of Object.entries(n.theme.sidebarGroups))for(let n of t){let t=`${n}:${r}`,a=v.get(t),o;typeof i.title==`string`?o=i.title:i.title&&(o=i.title[n]||i.title[b]),a?(o&&(a.title=o),i.icon&&(a.icon=i.icon)):v.set(t,{title:o||e(r),icon:i.icon})}}let x=Array(g.length);for(let t=0;t<g.length;t++){let n=g[t],r=n.relativeDir,i=n.route.locale||b,a=r?`${i}:${r}`:void 0,o=a?v.get(a):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[i]||o.title[b]),x[t]={...n.route,group:r,groupTitle:s||(r?e(r):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let S=[];for(let[,e]of _)for(let t of e)S.push({...t.route,collection:t.inferredCollection});S.sort((e,t)=>{let n=e.date?new Date(e.date).getTime():0;return(t.date?new Date(t.date).getTime():0)-n});let C=x;if(n?.i18n){let e=h(x,n,l);C=[...x,...e]}return[...c(C),...S]})();f=l;try{return await l}finally{f=null}}function h(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=g(o.path,r,e,n,t);s!==o.path&&(i.has(s)||a.push({...o,path:s,locale:e}))}}return a}function g(e,t,n,r,i){let a=`${e}:${n}`,o=d.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 f=c+l;return d.size>2e3&&d.clear(),d.set(a,f),f}export{s as i,p as n,a as r,m as t};
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-
|
|
6
|
+
const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./utils-BWy_8ASj.cjs`);let n=require(`@bdocs/dui`),r=require(`shiki/engine/javascript`),i=require(`shiki/core`),a=require(`@shikijs/themes/github-light`);a=e.n(a);let o=require(`@shikijs/themes/github-dark`);o=e.n(o);let s=require(`@shikijs/themes/tokyo-night`);s=e.n(s);let c=require(`@shikijs/themes/dracula`);c=e.n(c);let l=require(`@shikijs/themes/nord`);l=e.n(l);let u=require(`@shikijs/themes/one-dark-pro`);u=e.n(u);let d=require(`@shikijs/themes/one-light`);d=e.n(d);let f=require(`@shikijs/langs/html`);f=e.n(f);let p=require(`@shikijs/langs/js`);p=e.n(p);let m=require(`@shikijs/langs/ts`);m=e.n(m);let h=require(`@shikijs/langs/tsx`);h=e.n(h);let g=require(`@shikijs/langs/css`);g=e.n(g);let _=require(`@shikijs/langs/json`);_=e.n(_);let v=require(`@shikijs/langs/bash`);v=e.n(v);let y=require(`@shikijs/langs/markdown`);y=e.n(y);let b=require(`@shikijs/langs/mdx`);b=e.n(b);let x=require(`@shikijs/langs/yaml`);x=e.n(x);let S=require(`@shikijs/langs/rust`);S=e.n(S);let C=require(`@shikijs/langs/toml`);C=e.n(C);let w=require(`@shikijs/langs/csv`);w=e.n(w);const T={ROOT:`root`,ELEMENT:`element`,TEXT:`text`,COMMENT:`comment`,CODE:`code`,INLINE_CODE:`inlineCode`,HEADING:`heading`,PARAGRAPH:`paragraph`,LINK:`link`,IMAGE:`image`,LIST:`list`,LIST_ITEM:`listItem`,JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,FLOW_EXPRESSION:`mdxFlowExpression`,TEXT_EXPRESSION:`mdxTextExpression`,ESM:`mdxjsEsm`},E={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},D={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},O={LIGHT:`github-light`,DARK:`github-dark`},k={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},A=[a.default.default||a.default,o.default.default||o.default,s.default.default||s.default,c.default.default||c.default,l.default.default||l.default,u.default.default||u.default,d.default.default||d.default],j=[f.default,p.default,m.default,h.default,g.default,_.default,v.default,y.default,b.default,x.default,S.default,C.default,w.default];let M=null,N=null;const P=()=>(M??=(0,r.createJavaScriptRegexEngine)(),M),F=async e=>N||(N=(0,i.createHighlighterCore)({themes:A,langs:j,engine:P()}),N),I=(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,D.LINE_NUMBERS)}}},L=(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,D.WORD_WRAP)}}},R=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[E.TITLE]=t)}}),z=()=>({name:`AddLanguageProperty`,pre(e){e.properties[E.LANG]=this.options.lang||k.LANG}});function B(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 V=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:O.LIGHT,dark:O.DARK}}async getHighlighter(){return await F(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=B(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||k.LANG,meta:{__raw:i,...r},transformers:[I(),L(),R(),z()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,r,i){try{let t=await this.getHighlighter(),n=this.getOptions(r,i);return t.codeToHtml(e,n)}catch(r){return(0,n.error)(`[ShikiAdapter] Failed to render code:`,r),`<pre class="${D.FALLBACK}"><code>${t.n(e)}</code></pre>`}}};let H=null,U;function W(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(H===null||U!==t)&&(H=new V(e),U=t),H}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return V}});
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
import{n as e}from"./utils-
|
|
6
|
+
import{n as e}from"./utils-DexBrwiP.mjs";import{error as t}from"@bdocs/dui";import{createJavaScriptRegexEngine as n}from"shiki/engine/javascript";import{createHighlighterCore as r}from"shiki/core";import i from"@shikijs/themes/github-light";import a from"@shikijs/themes/github-dark";import o from"@shikijs/themes/tokyo-night";import s from"@shikijs/themes/dracula";import c from"@shikijs/themes/nord";import l from"@shikijs/themes/one-dark-pro";import u from"@shikijs/themes/one-light";import d from"@shikijs/langs/html";import f from"@shikijs/langs/js";import p from"@shikijs/langs/ts";import m from"@shikijs/langs/tsx";import h from"@shikijs/langs/css";import g from"@shikijs/langs/json";import _ from"@shikijs/langs/bash";import v from"@shikijs/langs/markdown";import y from"@shikijs/langs/mdx";import b from"@shikijs/langs/yaml";import x from"@shikijs/langs/rust";import S from"@shikijs/langs/toml";import C from"@shikijs/langs/csv";const w={ROOT:`root`,ELEMENT:`element`,TEXT:`text`,COMMENT:`comment`,CODE:`code`,INLINE_CODE:`inlineCode`,HEADING:`heading`,PARAGRAPH:`paragraph`,LINK:`link`,IMAGE:`image`,LIST:`list`,LIST_ITEM:`listItem`,JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,FLOW_EXPRESSION:`mdxFlowExpression`,TEXT_EXPRESSION:`mdxTextExpression`,ESM:`mdxjsEsm`},T={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},E={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},D={LIGHT:`github-light`,DARK:`github-dark`},O={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},k=[i.default||i,a.default||a,o.default||o,s.default||s,c.default||c,l.default||l,u.default||u],A=[d,f,p,m,h,g,_,v,y,b,x,S,C];let j=null,M=null;const N=()=>(j??=n(),j),P=async e=>M||(M=r({themes:k,langs:A,engine:N()}),M),F=(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,E.LINE_NUMBERS)}}},I=(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,E.WORD_WRAP)}}},L=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[T.TITLE]=t)}}),R=()=>({name:`AddLanguageProperty`,pre(e){e.properties[T.LANG]=this.options.lang||O.LANG}});function z(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 B=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:D.LIGHT,dark:D.DARK}}async getHighlighter(){return await P(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=z(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||O.LANG,meta:{__raw:i,...r},transformers:[F(),I(),L(),R()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(n,r,i){try{let e=await this.getHighlighter(),t=this.getOptions(r,i);return e.codeToHtml(n,t)}catch(r){return t(`[ShikiAdapter] Failed to render code:`,r),`<pre class="${E.FALLBACK}"><code>${e(n)}</code></pre>`}}};let V=null,H;function U(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(V===null||H!==t)&&(V=new B(e),H=t),V}export{O as a,T as i,U as n,w as o,z as r,E as s,B as t};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import e from"node:path";import t from"node:fs";function n(n,r,i=process.cwd(),a){let o=e.resolve(i,`.boltdocs`,`generated`);t.existsSync(o)||t.mkdirSync(o,{recursive:!0});let s=n.i18n?Object.keys(n.i18n.locales):[],c=n.versions?n.versions.versions.map(e=>e.path):[],l=s.length>0?s.map(e=>`'${e}'`).join(` | `):`string`,u=c.length>0?c.map(e=>`'${e}'`).join(` | `):`string`,d=[`tsx`,`ts`,`jsx`,`js`],f=``,p=``;for(let n of d){let a=e.resolve(i,r,`mdx-components.${n}`);if(t.existsSync(a)){let t=e.join(i,r,`mdx-components`),n=e.relative(o,t).replace(/\\/g,`/`);f=`import type * as MdxComponentsModule from '${n.startsWith(`.`)?n:`./${n}`}'\n`,p=` MdxComponents: typeof MdxComponentsModule`;break}}let m=a&&a.length>0?`\ndeclare global {
|
|
7
|
+
namespace Boltdocs {
|
|
8
|
+
interface RoutePaths {
|
|
9
|
+
${a.map(e=>` '${e}': void`).join(`
|
|
10
|
+
`)}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}`:``,h=`// This file is automatically generated by Boltdocs.
|
|
14
|
+
// Do not edit this file manually.
|
|
15
|
+
|
|
16
|
+
${f}declare global {
|
|
17
|
+
namespace Boltdocs {
|
|
18
|
+
interface Types {
|
|
19
|
+
Locale: ${l}
|
|
20
|
+
Version: ${u}${p?`\n${p}`:``}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}${m}
|
|
24
|
+
|
|
25
|
+
export {}
|
|
26
|
+
`;t.writeFileSync(e.resolve(o,`types.d.ts`),h)}function r(n,r=process.cwd()){let i=e.resolve(r,`.boltdocs`,`generated`);t.existsSync(i)||t.mkdirSync(i,{recursive:!0});let a={routes:Array.from(new Set(n)).sort(),timestamp:Date.now()};t.writeFileSync(e.resolve(i,`link-tree.json`),JSON.stringify(a,null,2))}export{r as n,n as t};
|
|
@@ -0,0 +1,26 @@
|
|
|
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`);let t=require(`node:path`);t=e.n(t);let n=require(`node:fs`);n=e.n(n);var r=e.t({generateProjectTypes:()=>i,writeLinkTree:()=>a});function i(e,r,i=process.cwd(),a){let o=t.default.resolve(i,`.boltdocs`,`generated`);n.default.existsSync(o)||n.default.mkdirSync(o,{recursive:!0});let s=e.i18n?Object.keys(e.i18n.locales):[],c=e.versions?e.versions.versions.map(e=>e.path):[],l=s.length>0?s.map(e=>`'${e}'`).join(` | `):`string`,u=c.length>0?c.map(e=>`'${e}'`).join(` | `):`string`,d=[`tsx`,`ts`,`jsx`,`js`],f=``,p=``;for(let e of d){let a=t.default.resolve(i,r,`mdx-components.${e}`);if(n.default.existsSync(a)){let e=t.default.join(i,r,`mdx-components`),n=t.default.relative(o,e).replace(/\\/g,`/`);f=`import type * as MdxComponentsModule from '${n.startsWith(`.`)?n:`./${n}`}'\n`,p=` MdxComponents: typeof MdxComponentsModule`;break}}let m=a&&a.length>0?`\ndeclare global {
|
|
7
|
+
namespace Boltdocs {
|
|
8
|
+
interface RoutePaths {
|
|
9
|
+
${a.map(e=>` '${e}': void`).join(`
|
|
10
|
+
`)}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}`:``,h=`// This file is automatically generated by Boltdocs.
|
|
14
|
+
// Do not edit this file manually.
|
|
15
|
+
|
|
16
|
+
${f}declare global {
|
|
17
|
+
namespace Boltdocs {
|
|
18
|
+
interface Types {
|
|
19
|
+
Locale: ${l}
|
|
20
|
+
Version: ${u}${p?`\n${p}`:``}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}${m}
|
|
24
|
+
|
|
25
|
+
export {}
|
|
26
|
+
`;n.default.writeFileSync(t.default.resolve(o,`types.d.ts`),h)}function a(e,r=process.cwd()){let i=t.default.resolve(r,`.boltdocs`,`generated`);n.default.existsSync(i)||n.default.mkdirSync(i,{recursive:!0});let a={routes:Array.from(new Set(e)).sort(),timestamp:Date.now()};n.default.writeFileSync(t.default.resolve(i,`link-tree.json`),JSON.stringify(a,null,2))}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
const e=require(`./chunk-Ds5LZdWN.cjs`),t=require(`./errors-Dx6JHoKE.cjs`);let n=require(`node:fs`);n=e.n(n);let r=require(`isomorphic-dompurify`);r=e.n(r);let i=require(`zod`),a=require(`@bdocs/dui`);const o=/^[a-zA-Z0-9\-_/.()[\]]+$/,s=i.z.looseObject({title:i.z.string().max(200).optional(),description:i.z.string().max(500).optional(),permalink:i.z.string().optional(),sidebarPosition:i.z.number().optional(),sidebarLabel:i.z.string().max(100).optional(),sidebarHidden:i.z.boolean().optional(),hidden:i.z.boolean().optional(),category:i.z.string().max(50).optional(),order:i.z.number().optional(),badge:i.z.union([i.z.string().max(50),i.z.object({text:i.z.string().max(50),expires:i.z.string().optional()})]).optional(),icon:i.z.string().max(50).optional(),date:i.z.union([i.z.string(),i.z.date()]).optional(),lastUpdated:i.z.union([i.z.string(),i.z.date()]).optional(),groupTitle:i.z.string().max(100).optional(),groupPosition:i.z.number().optional(),seo:i.z.record(i.z.string(),i.z.any()).optional(),tags:i.z.array(i.z.string().max(50)).optional(),author:i.z.union([i.z.string().max(100),i.z.object({name:i.z.string().max(100),avatar:i.z.string().optional(),url:i.z.string().optional(),image:i.z.string().optional()})]).optional(),draft:i.z.boolean().optional(),excerpt:i.z.string().max(500).optional(),coverImage:i.z.string().nullable().optional()});function c(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 l(r)?{data:{},content:i,rawMatter:r}:{data:u(r),content:i,rawMatter:r}}function l(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 u(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=d(t.slice(r+1),e.search(/\S|$/));i.value===void 0?r++:(n[o]=i.value,r+=i.linesConsumed+1)}else n[o]=f(s),r++}else r++}return n}function d(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]=f(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]=f(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]=f(o.slice(s+1).trim())}r++}return{value:Object.keys(n).length>0?n:void 0,linesConsumed:r}}function f(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();return e?e.split(/,\s*/).map(e=>f(e.trim())):[]}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]=f(e.slice(t+1).trim())}}return n}return t}function p(e){return e.replace(/\\/g,`/`)}function m(e){return e.replace(/^\d+\./,``)}function h(e){let t=e.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function g(e){return/\.mdx?$/.test(e)}function _(e){try{return n.default.statSync(e).mtimeMs}catch{return 0}}function v(e,n,r){let{data:i,content:a,rawMatter:o}=c(n);if(o&&o.length>10240)throw D(`FRONTMATTER_TOO_LARGE`,`Frontmatter block exceeds size limit`,{size:o.length,file:e}),new t.r(`Security breach: Frontmatter size exceeds limit of 10240 bytes`);if(!r)return{data:i,content:a};let l=s.safeParse(i),u={...l.success?l.data:{}};return u.title&&=w(u.title).trim(),u.description&&=w(u.description).trim(),{data:u,content:a}}async function y(e,r=!0){let i=``;try{i=await n.default.promises.readFile(e,`utf-8`);let{data:t,content:a}=v(e,i,r);if(r&&!t.lastUpdated)try{t.lastUpdated=(await n.default.promises.stat(e)).mtimeMs}catch{t.lastUpdated=0}return{data:t,content:a,raw:i}}catch(e){if(e instanceof t.r)throw e;return{data:{},content:i,raw:i}}}function b(e){return e.replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function x(e){return b(e)}function S(e){let t=p(e).split(`/`).map(e=>E(m(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 C(e){return r.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})}r.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 w(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 T(e){return e.charAt(0).toUpperCase()+e.slice(1)}function E(e){return e.replace(/[^a-zA-Z0-9\-_/.]/g,``).split(`/`).filter(e=>e!==`..`&&e!==`.`).map(e=>e.replace(/\.\.+/g,`.`)).join(`/`)}function D(e,t,n={}){let r=new Date().toISOString(),i={...n};for(let e in i)typeof i[e]==`string`&&i[e].includes(`:`)&&(i[e]=i[e].split(/[\\/]/).pop()||i[e]);(0,a.error)(`[SECURITY][${r}] TYPE: ${e} | MESSAGE: ${t} | DETAILS: ${JSON.stringify(i)}`)}function O(){return{dir:process.env.BOLTDOCS_CACHE_DIR||`.boltdocs/cache`,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 o}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return p}});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import{r as e}from"./errors-C0Hx15Ag.mjs";import t from"node:fs";import n from"isomorphic-dompurify";import{z as r}from"zod";import{error as i}from"@bdocs/dui";const a=/^[a-zA-Z0-9\-_/.()[\]]+$/,o=r.looseObject({title:r.string().max(200).optional(),description:r.string().max(500).optional(),permalink:r.string().optional(),sidebarPosition:r.number().optional(),sidebarLabel:r.string().max(100).optional(),sidebarHidden:r.boolean().optional(),hidden:r.boolean().optional(),category:r.string().max(50).optional(),order:r.number().optional(),badge:r.union([r.string().max(50),r.object({text:r.string().max(50),expires:r.string().optional()})]).optional(),icon:r.string().max(50).optional(),date:r.union([r.string(),r.date()]).optional(),lastUpdated:r.union([r.string(),r.date()]).optional(),groupTitle:r.string().max(100).optional(),groupPosition:r.number().optional(),seo:r.record(r.string(),r.any()).optional(),tags:r.array(r.string().max(50)).optional(),author:r.union([r.string().max(100),r.object({name:r.string().max(100),avatar:r.string().optional(),url:r.string().optional(),image:r.string().optional()})]).optional(),draft:r.boolean().optional(),excerpt:r.string().max(500).optional(),coverImage:r.string().nullable().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+1)}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();return e?e.split(/,\s*/).map(e=>d(e.trim())):[]}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}function f(e){return e.replace(/\\/g,`/`)}function p(e){return e.replace(/^\d+\./,``)}function m(e){let t=e.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function h(e){return/\.mdx?$/.test(e)}function g(e){try{return t.statSync(e).mtimeMs}catch{return 0}}function _(t,n,r){let{data:i,content:a,rawMatter:c}=s(n);if(c&&c.length>10240)throw E(`FRONTMATTER_TOO_LARGE`,`Frontmatter block exceeds size limit`,{size:c.length,file:t}),new e(`Security breach: Frontmatter size exceeds limit of 10240 bytes`);if(!r)return{data:i,content:a};let l=o.safeParse(i),u={...l.success?l.data:{}};return u.title&&=C(u.title).trim(),u.description&&=C(u.description).trim(),{data:u,content:a}}async function v(n,r=!0){let i=``;try{i=await t.promises.readFile(n,`utf-8`);let{data:e,content:a}=_(n,i,r);if(r&&!e.lastUpdated)try{e.lastUpdated=(await t.promises.stat(n)).mtimeMs}catch{e.lastUpdated=0}return{data:e,content:a,raw:i}}catch(t){if(t instanceof e)throw t;return{data:{},content:i,raw:i}}}function y(e){return e.replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function b(e){return y(e)}function x(e){let t=f(e).split(`/`).map(e=>T(p(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 S(e){return n.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.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 C(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 w(e){return e.charAt(0).toUpperCase()+e.slice(1)}function T(e){return e.replace(/[^a-zA-Z0-9\-_/.]/g,``).split(`/`).filter(e=>e!==`..`&&e!==`.`).map(e=>e.replace(/\.\.+/g,`.`)).join(`/`)}function E(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]);i(`[SECURITY][${r}] TYPE: ${e} | MESSAGE: ${t} | DETAILS: ${JSON.stringify(a)}`)}function D(){return{dir:process.env.BOLTDOCS_CACHE_DIR||`.boltdocs/cache`,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{a as _,x as a,h as c,v as d,T as f,o as g,p as h,m as i,E as l,C as m,y as n,D as o,S as p,b as r,g as s,w as t,f as u};
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2026 Jesus Alcala
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
import e from"node:path";import t from"node:fs";import
|
|
6
|
+
import e from"node:path";import t from"node:fs";import n from"node:os";import{fileURLToPath as r}from"node:url";import{Worker as i}from"node:worker_threads";const a=e.dirname(r(import.meta.url)),o=new class{workers=[];workerTasks=new WeakMap;queue=[];activeWorkers=0;maxWorkers;maxQueueSize;constructor(e,t=2e3){this.maxWorkers=e||Math.max(1,n.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 i(t,{execArgv:t.endsWith(`.ts`)?[`--loader`,`tsx`,`--no-deprecation`]:[`--no-deprecation`]});e=n,this.workers.push(n);let r=(e,t)=>{let n=this.workers.indexOf(e);if(n===-1)return;let r=this.workerTasks.get(e);r&&(this.workerTasks.delete(e),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=this.workerTasks.get(n);t&&(this.workerTasks.delete(n),e.type===`SUCCESS`?t.resolve(e.result):t.reject(Error(e.error))),this.idleWorkers.push(n),this.processNext()}),n.on(`error`,e=>{r(n,e)}),n.on(`exit`,e=>{e!==0&&r(n,Error(`Worker exited with code ${e}`))})}let{task:t,resolve:n,reject:r}=this.queue.shift();this.workerTasks.set(e,{resolve:n,reject:r}),e.postMessage(t)}getWorkerPath(){if(import.meta.url.includes(`/dist/`)||e.extname(import.meta.url)===`.mjs`){let n=[e.resolve(a,`node/routes/worker.mjs`),e.resolve(a,`worker.mjs`),e.resolve(a,`./node/routes/worker.mjs`)];for(let e of n)if(t.existsSync(e))return e;return e.resolve(a,`node/routes/worker.mjs`)}return e.resolve(a,`worker.ts`)}async terminate(){let e=[...this.workers];await Promise.all(e.map(e=>e.terminate())),this.idleWorkers=[],this.workers=[],this.activeWorkers=0}};export{o as pool};
|
package/package.json
CHANGED
package/dist/doctor-BY1tSmQd.mjs
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
-
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
import{a as e,d as t,u as n,v as r,y as i}from"./utils-DC4Wq-S2.mjs";import{createRequire as a}from"node:module";import o from"node:path";import s from"node:fs";import{loadConfigFromFile as c}from"vite";import{fdir as l}from"fdir";import{z as u}from"zod";import{bullet as d,colors as f,confirm as p,dividerLog as m,double as h,error as g,info as _,padCenter as v,round as ee,single as te,success as y,tasks as ne,warn as b}from"@bdocs/dui";import{fileURLToPath as x}from"node:url";import re from"picomatch";import S from"node:os";import{distance as C}from"fastest-levenshtein";const w=u.object({icon:u.string().max(50),link:u.string().url()});u.object({text:u.string().max(2e3).optional()});const T=u.object({name:u.string(),enforce:u.enum([`pre`,`post`]).optional(),version:u.string().optional(),boltdocsVersion:u.string().optional(),remarkPlugins:u.array(u.unknown()).optional(),rehypePlugins:u.array(u.unknown()).optional(),vitePlugins:u.array(u.unknown()).optional(),components:u.record(u.string(),u.string()).optional(),hooks:u.record(u.string(),u.unknown()).optional()}),E=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(w).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()}),D=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()})]),O=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()}),k=u.object({defaultVersion:u.string(),prefix:u.string().optional(),versions:u.array(u.object({label:u.string(),path:u.string()}))}),A=u.object({headers:u.record(u.string(),u.string()).optional(),enableCSP:u.boolean().optional(),customHeaders:u.record(u.string(),u.string()).optional()}),j=u.object({metatags:u.record(u.string(),u.string()).optional(),indexing:u.enum([`all`,`public`]).optional(),thumbnails:u.object({background:u.string().optional()}).optional()}),M=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()}),N=u.object({tagId:u.string().min(1,`Tag ID is required for GTM`),dataLayerName:u.string().optional(),preview:u.string().optional()}),P=u.object({appId:u.string().min(1,`Algolia App ID is required`),apiKey:u.string().min(1,`Algolia API Key is required`),indexName:u.string().min(1,`Algolia Index Name is required`)}),F=u.object({repo:u.string().min(1,`Giscus repository is required`),repoId:u.string().min(1,`Giscus repository ID is required`),category:u.string().optional(),categoryId:u.string().optional(),mapping:u.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:u.union([u.enum([`0`,`1`]),u.boolean()]).optional(),reactionsEnabled:u.union([u.enum([`0`,`1`]),u.boolean()]).optional(),emitMetadata:u.union([u.enum([`0`,`1`]),u.boolean()]).optional(),inputPosition:u.enum([`top`,`bottom`]).optional(),theme:u.string().optional(),darkTheme:u.string().optional(),lang:u.string().optional(),loading:u.enum([`lazy`,`eager`]).optional()}),I=u.object({enabled:u.boolean(),owner:u.string().min(1,`GitHub owner is required`),repo:u.string().min(1,`GitHub repository name is required`),categorySlug:u.string().optional(),endpoint:u.string().optional()}),L=u.object({ga4:M.optional(),gtm:N.optional(),algolia:P.optional(),feedback:u.object({giscus:F.optional(),custom:I.optional()}).optional()}),ie=u.object({siteUrl:u.string().url().optional(),docsDir:u.string().optional(),base:u.string().optional(),theme:E.optional(),i18n:O.optional(),versions:k.optional(),plugins:u.array(T).optional(),robots:D.optional(),security:A.optional(),seo:j.optional(),integrations:L.optional(),vite:u.record(u.string(),u.unknown()).optional()});function ae(e,t,n=process.cwd(),r){let i=o.resolve(n,`.boltdocs`,`generated`);s.existsSync(i)||s.mkdirSync(i,{recursive:!0});let a=e.i18n?Object.keys(e.i18n.locales):[],c=e.versions?e.versions.versions.map(e=>e.path):[],l=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,u=c.length>0?c.map(e=>`'${e}'`).join(` | `):`string`,d=[`tsx`,`ts`,`jsx`,`js`],f=``,p=``;for(let e of d){let r=o.resolve(n,t,`mdx-components.${e}`);if(s.existsSync(r)){let e=o.join(n,t,`mdx-components`),r=o.relative(i,e).replace(/\\/g,`/`);f=`import type * as MdxComponentsModule from '${r.startsWith(`.`)?r:`./${r}`}'\n`,p=` MdxComponents: typeof MdxComponentsModule`;break}}let m=r&&r.length>0?`\ndeclare global {
|
|
7
|
-
namespace Boltdocs {
|
|
8
|
-
interface RoutePaths {
|
|
9
|
-
${r.map(e=>` '${e}': void`).join(`
|
|
10
|
-
`)}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}`:``,h=`// This file is automatically generated by Boltdocs.
|
|
14
|
-
// Do not edit this file manually.
|
|
15
|
-
|
|
16
|
-
${f}declare global {
|
|
17
|
-
namespace Boltdocs {
|
|
18
|
-
interface Types {
|
|
19
|
-
Locale: ${l}
|
|
20
|
-
Version: ${u}${p?`\n${p}`:``}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}${m}
|
|
24
|
-
|
|
25
|
-
export {}
|
|
26
|
-
`;s.writeFileSync(o.resolve(i,`types.d.ts`),h)}function oe(e,t=process.cwd()){let n=o.resolve(t,`.boltdocs`,`generated`);s.existsSync(n)||s.mkdirSync(n,{recursive:!0});let r={routes:Array.from(new Set(e)).sort(),timestamp:Date.now()};s.writeFileSync(o.resolve(n,`link-tree.json`),JSON.stringify(r,null,2))}function se(e){return e}const R=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function z(e,t=process.cwd()){let n=t,i={docsDir:o.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},a={};for(let e of R){let t=o.resolve(n,e);if(s.existsSync(t))try{let e=await c({command:`serve`,mode:`development`},t,n);if(e){a=e.config;break}}catch(t){b(`Failed to load config from ${e}:`,t)}}let l={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||{}},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:o.resolve(e),theme:{...i.theme,...u},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=ie.safeParse(d);if(!f.success)throw new r(`Invalid Boltdocs configuration:\n${f.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
|
|
27
|
-
`)}`);return f.data}function ce(e,t){let n=t?` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.cyan(t)}`:` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.gray(`use --host to expose`)}`;return`
|
|
28
|
-
`+h([` ${f.green(`➜`)} ${f.green(`Local:`)} ${f.cyan(e)}`,n,``,` ${f.dim(`press h + enter for help`)}`],{title:`boltdocs dev server`})+`
|
|
29
|
-
`}function le(e,t){let n=t?` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.cyan(t)}`:` ${f.green(`➜`)} ${f.green(`Network:`)} ${f.gray(`use --host to expose`)}`;return`
|
|
30
|
-
`+h([` ${f.green(`➜`)} ${f.green(`Local:`)} ${f.cyan(e)}`,n],{title:`boltdocs preview server`})+`
|
|
31
|
-
`}function ue(e,t){return`
|
|
32
|
-
`+h([v(`🚀 Update available!`,50),``,` ${f.dim(`Current:`)} ${f.red(e)} ${f.gray(`→`)} ${f.green(t)}`,``,` ${f.dim(`Run:`)} ${f.bold(`npm install boltdocs@latest`)}`])+`
|
|
33
|
-
`}const de=a(import.meta.url);function fe(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 pe(){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 me(){try{let e=x(import.meta.url),t=o.dirname(e);for(let e=0;e<5;e++){let e=o.join(t,`package.json`);if(s.existsSync(e)){let t=JSON.parse(s.readFileSync(e,`utf-8`));if(t.name===`boltdocs`)return t.version}t=o.dirname(t)}}catch{}try{return de(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function B(){let e=``;try{e=o.join(S.homedir(),`.boltdocs`,`update-check.json`)}catch{return}let t=0;try{if(s.existsSync(e)){let n=JSON.parse(s.readFileSync(e,`utf-8`));t=Number(n.lastCheck)||0}}catch{}let n=Date.now();if(n-t<864e5)return;try{s.mkdirSync(o.dirname(e),{recursive:!0}),s.writeFileSync(e,JSON.stringify({lastCheck:n}),`utf-8`)}catch{}let r=await me();if(r===`0.0.0`)return;let i=await pe();i&&fe(i,r)&&console.log(ue(r,i))}const V={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0},performance:{enabled:!0,budgets:{maxJSBundleSize:`200kb`,maxCSSBundleSize:`30kb`,maxPageHTMLSize:`80kb`,maxImagesKB:500,maxBuildTime:3e4,maxFontCount:3}}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/reports/doctor.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`,budgetExceeded:`warning`},exclude:[]};function H(e,t){if(e==null)return t;if(typeof e==`number`)return e;let n=e.toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/);if(!n)return t;let r=Number.parseFloat(n[1]),i=n[2]||`b`;return Math.round(r*({b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024}[i]||1))}function U(e,t,n){return e.doctorConfig.severity[t]||n}async function he(e,t){s.existsSync(t)||s.mkdirSync(t,{recursive:!0});let n=o.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=o.join(t,`${n}.${r}.bak`);s.copyFileSync(e,i)}const W=new Map;function G(e){let n=W.get(e);if(n)return n;let r=(async()=>{let n=await t(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.existsSync(e)&&s.statSync(e).isFile()}catch{t=!1}return K.set(e,t),t}async function J(e){let t=o.resolve(e,`doctor.json`);if(s.existsSync(t))try{let e=JSON.parse(s.readFileSync(t,`utf-8`));return{...V,...e,checks:{...V.checks,...e.checks,metadata:{...V.checks.metadata,...e.checks?.metadata},links:{...V.checks.links,...e.checks?.links},i18n:{...V.checks.i18n,...e.checks?.i18n},performance:{...V.checks.performance,...e.checks?.performance,budgets:{...V.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...V.fix,...e.fix},reporting:{...V.reporting,...e.reporting},severity:{...V.severity,...e.severity},exclude:[...V.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return V}async function Y(t,n=process.cwd(),r,i){let a=o.resolve(n,`.boltdocs`,`generated`);s.existsSync(a)||s.mkdirSync(a,{recursive:!0});let c=i;c||=await new l().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(t).withPromise();let u=r?.base||`/docs`,d=[];for(let n=0;n<c.length;n+=100){let r=c.slice(n,n+100),i=await Promise.all(r.map(async n=>{let r=o.isAbsolute(n)?n:o.resolve(t,n),i=o.relative(t,r),{data:a}=await G(r),s;return s=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:e(i),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...i)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return s.writeFileSync(o.resolve(a,`link-tree.json`),JSON.stringify(f,null,2)),f}function ge(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-C(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-C(e,t)/Math.max(e.length,t.length)}const 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=ge(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 t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:r,titleMax:a,descriptionMin:s}=e.doctorConfig.checks.metadata,c=new Map;for(let l of e.files){let u=n(o.relative(e.docsDir,l));try{let{raw:n,data:o}=await G(l);if(n.trim().startsWith(`---`)&&n.split(`---`).length>=3&&Object.keys(o).length===0){let n=U(e,`malformedFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=i.safeParse(o);if(!d.success){let n=U(e,`invalidFrontmatter`,`high`);if(n!==`off`)for(let e of d.error.issues)t.push({file:u,level:n,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let n of f)if(o[n]===void 0){let r=U(e,`missingMetadata`,`warning`);r!==`off`&&t.push({file:u,level:r,message:`Missing required frontmatter field: "${n}".`,suggestion:`Add the "${n}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let n=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of n)if(o[r]&&Number.isNaN(Date.parse(String(o[r])))){let n=U(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${o[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(o.title){let n=String(o.title);if(n.length<r){let i=U(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,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=U(e,`shortMetadata`,`low`);r!==`off`&&t.push({file:u,level:r,message:`Title is too long (${n.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let i=c.get(n)||[];i.push(u),c.set(n,i)}if(o.description&&String(o.description).length<s){let n=U(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${s} characters.`})}}catch(n){if(n instanceof Error){let r=U(e,`malformedFrontmatter`,`high`);r!==`off`&&t.push({file:u,level:r,message:`Malformed frontmatter (YAML error): ${n.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[n,r]of c.entries())if(r.length>1){let i=U(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 $(e){let t=[],{internal:r,external:i,ignore:a,timeout:c,concurrency:l}=e.doctorConfig.checks.links;if(!r&&!i&&!e.options.checkExternal)return t;let u=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,d=new Set,p=5e5;for(let c of e.files){let l=n(o.relative(e.docsDir,c)),{content:f}=await G(c),m=[...(f.length>p?f.slice(0,p):f).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(u)];for(let n of m){let u=n[1]||n[2],f=!!n[1];if(!u||a.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(i||e.options.checkExternal)&&d.add({url:u,file:c});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=o.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>q(h+e))}}else h=o.resolve(o.dirname(c),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>q(h+e));if(!m){let{bestMatch:n,similarity:r}=Z(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 o=r>.6||i,d=r>.75&&n!==p||i,m=U(e,`brokenLink`,`high`);m!==`off`&&t.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:o?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:d?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,t=f?`(${u})`:`href="${u}"`,r=f?`(${n}${e})`:`href="${n}${e}"`,i=s.readFileSync(c,`utf-8`).replace(t,r);s.writeFileSync(c,i),W.delete(c)}:void 0})}}}if(d.size>0){_(f.gray(`Verifying ${d.size} external links...`));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(),c),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()),s=[];for(let e=0;e<a.length;e+=l){let t=a.slice(e,e+l),n=await Promise.allSettled(t.map(i));s.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of s)if(!i.ok){let a=U(e,`brokenLink`,`warning`);if(a!==`off`){let s=r.get(i.url)||[];for(let r of s)t.push({file:n(o.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 _e(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),c=a.filter(e=>e!==r);for(let i of e.files){let l=n(o.relative(e.docsDir,i)),u=l.split(`/`),d=u[0];if(d===r){let n=u.slice(1).join(`/`);for(let r of c){let a=o.join(e.docsDir,r,n);if(!q(a)){let c=U(e,`missingTranslation`,`warning`);c!==`off`&&t.push({file:l,level:c,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${n}".`,fix:async()=>{let e=o.dirname(a);s.existsSync(e)||s.mkdirSync(e,{recursive:!0}),s.copyFileSync(i,a)}})}}}else if(a.includes(d)){let n=u.slice(1).join(`/`);if(!q(o.join(e.docsDir,r,n))){let a=U(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:l,level:a,message:`Orphaned translation (source missing in "${r}")`,suggestion:`Remove this file or create the source at "${r}/${n}".`,fix:async()=>{s.unlinkSync(i)}})}}}return t}async function ve(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 ye(e){let t=[],n=e.doctorConfig.checks.performance;if(!n?.enabled)return t;let r=o.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!s.existsSync(r))return t.push({file:`(build)`,level:U(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let i;try{i=JSON.parse(s.readFileSync(r,`utf-8`))}catch{return t.push({file:`(build)`,level:U(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let a=n.budgets,c=U(e,`budgetExceeded`,`warning`),l=H(a?.maxJSBundleSize,1/0),u=H(a?.maxCSSBundleSize,1/0),d=H(a?.maxPageHTMLSize,1/0),f=a?.maxImagesKB??1/0,p=a?.maxBuildTime??1/0,m=a?.maxFontCount??1/0;if(l!==1/0&&i.totalJSBundleSize>l){let e=(i.totalJSBundleSize/1024).toFixed(0),n=(l/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`JS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Code-split large dependencies or lazy-load route components.`})}if(u!==1/0&&i.totalCSSBundleSize>u){let e=(i.totalCSSBundleSize/1024).toFixed(0),n=(u/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`CSS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Remove unused styles or split CSS by route.`})}if(d!==1/0){for(let e of i.pages)if(e.htmlSize>d){let n=(e.htmlSize/1024).toFixed(0),r=(d/1024).toFixed(0);t.push({file:e.route,level:c,message:`Page HTML size exceeds budget: ${n}kb > ${r}kb`,suggestion:`Reduce the amount of inline content or split into sub-pages.`})}}let h=f*1024;if(f!==1/0&&i.totalImagesSize>h){let e=(i.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`Image assets exceed budget: ${e}kb > ${f}kb`,suggestion:`Optimize images with lossy compression or use next-gen formats (webp/avif).`})}if(p!==1/0&&i.buildTime>p){let e=(i.buildTime/1e3).toFixed(1),n=(p/1e3).toFixed(1);t.push({file:`(build)`,level:c,message:`Build time exceeds budget: ${e}s > ${n}s`,suggestion:"Check for large unoptimized assets or increase `concurrency` in SSG options."})}return m!==1/0&&i.fontCount>m&&t.push({file:`(build)`,level:c,message:`Font files exceed budget: ${i.fontCount} > ${m}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function be(e){let t=o.resolve(e,`doctor.json`);if(s.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{s.writeFileSync(t,JSON.stringify(V,null,2)),y(`Created "doctor.json" with default configuration.`)}catch(e){g(`Failed to create "doctor.json": ${e}`)}}async function xe(e=process.cwd(),t={}){if(t.init){await be(e);return}B();try{let n=await J(e),{format:r}=n.reporting,i=performance.now(),a=await z(`docs`,e),c=o.resolve(e,`docs`);s.existsSync(c)||(r===`pretty`&&g(`Docs dir not found at ${c}`),process.exit(1)),r===`pretty`&&console.log(h([` ${f.dim(`Docs dir:`)} ${c}`,` ${f.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),r===`pretty`&&_(f.dim(`🔍 Discovering files and routes...`));let u=re(n.exclude||[]),v=await new l().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=o.relative(c,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!u(t)&&!n}).crawl(c).withPromise();for(let e of v)K.set(e,!0);let b=await Y(c,e,a,v),x=a.base||`/`,S=x===`/`?``:x.endsWith(`/`)?x.slice(0,-1):x,C={root:e,docsDir:c,config:a,doctorConfig:n,linkTree:b,files:v,options:t,routeIndex:new Set(b.routes),routeIndexWithSlash:new Set(b.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(b.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:S};r===`pretty`&&_(f.dim(`🧪 Running diagnostic checks in parallel...`));let w=[Q(C),$(C),_e(C),ve(C)];t.budget&&w.push(ye(C));let[T,E,D,O,...k]=await Promise.all(w),A=t.budget?k[0]:[],j=[...T,...E,...D,...O,...A];if(r===`pretty`){let e=[{label:`Metadata checks ${T.length>0?`— ${T.length} issue${T.length===1?``:`s`}`:`— OK`}`,done:T.length===0},{label:`Link checks ${E.length>0?`— ${E.length} issue${E.length===1?``:`s`}`:`— OK`}`,done:E.length===0},{label:`i18n checks ${D.length>0?`— ${D.length} issue${D.length===1?``:`s`}`:`— OK`}`,done:D.length===0},{label:`Sidebar checks ${O.length>0?`— ${O.length} issue${O.length===1?``:`s`}`:`— OK`}`,done:O.length===0}];t.budget&&e.push({label:`Performance budget ${A.length>0?`— ${A.length} issue${A.length===1?``:`s`}`:`— OK`}`,done:A.length===0}),console.log(`\n${ne(e)}`)}let M=0;if(t.fix){for(let e of j)if(e.fix){if(C.doctorConfig.fix.confirmChanges&&!await p(`Fix issue in "${e.file}": ${e.message}?`))continue;if(C.doctorConfig.fix.backupFiles){let t=o.resolve(C.docsDir,e.file);s.existsSync(t)&&await he(t,o.resolve(C.root,C.doctorConfig.fix.backupPath))}await e.fix(),M++}}let N=((performance.now()-i)/1e3).toFixed(2),P=j.filter(e=>e.level===`high`).length,F=j.filter(e=>e.level===`warning`).length,I=j.filter(e=>e.level===`low`).length,L={summary:{total:j.length,high:P,warning:F,low:I,fixed:M,duration:N},issues:j.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=o.resolve(e,n.reporting.outputFile);s.existsSync(o.dirname(t))||s.mkdirSync(o.dirname(t),{recursive:!0}),s.writeFileSync(t,JSON.stringify(L,null,2))}if(r===`json`)console.log(JSON.stringify(L,null,2));else if(r===`pretty`){let e=j.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(j.length>0){m();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?f.red:n.level===`warning`?f.yellow:f.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${f.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${f.green(`✅ Fixed automatically`)}`)}console.log(`\n${te(e,{title:`📄 ${n}`})}`)}m()}if(j.length===0)console.log(ee([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${f.dim(`Scanned ${v.length} file${v.length===1?``:`s`} in ${N}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];P>0&&e.push(f.red(`${P} Critical Error${P===1?``:`s`}`)),F>0&&e.push(f.yellow(`${F} Warning${F===1?``:`s`}`)),I>0&&e.push(f.blue(`${I} Improvement${I===1?``:`s`}`));let t=[...d(e).split(`
|
|
34
|
-
`).map(e=>e.trimStart()),``,f.dim(`Scanned ${v.length} file${v.length===1?``:`s`} in ${N}s`)];console.log(`\n${h(t,{title:`Diagnosis Results`})}\n`),M>0&&y(`Successfully fixed ${M} issues automatically!`),P>0?g(`Please fix the critical errors before building for production.`):y(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&P>0&&process.exit(1),n.reporting.maxWarnings!==-1&&F>n.reporting.maxWarnings&&(r===`pretty`&&g(`Failed: Too many warnings (${F} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){g(`Doctor failed: ${e}`),process.exit(1)}}export{ae as _,Q as a,Y as c,B as d,ce as f,se as g,z as h,$ as i,J as l,R as m,be as n,ye as o,le as p,_e as r,ve as s,xe as t,V as u,oe as v,T as y};
|
package/dist/doctor-DcFLi4t1.cjs
DELETED
|
@@ -1,34 +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-wHud9ny5.cjs`);let n=require(`node:path`);n=e.n(n);let r=require(`node:fs`);r=e.n(r);let i=require(`node:module`),a=require(`vite`),o=require(`fdir`),s=require(`zod`),c=require(`@bdocs/dui`),l=require(`picomatch`);l=e.n(l);let u=require(`node:os`);u=e.n(u);let d=require(`node:url`),f=require(`fastest-levenshtein`);const p=s.z.object({icon:s.z.string().max(50),link:s.z.string().url()});s.z.object({text:s.z.string().max(2e3).optional()});const m=s.z.object({name:s.z.string(),enforce:s.z.enum([`pre`,`post`]).optional(),version:s.z.string().optional(),boltdocsVersion:s.z.string().optional(),remarkPlugins:s.z.array(s.z.unknown()).optional(),rehypePlugins:s.z.array(s.z.unknown()).optional(),vitePlugins:s.z.array(s.z.unknown()).optional(),components:s.z.record(s.z.string(),s.z.string()).optional(),hooks:s.z.record(s.z.string(),s.z.unknown()).optional()}),h=s.z.object({title:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]).optional(),description:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]).optional(),logo:s.z.union([s.z.string(),s.z.object({dark:s.z.string(),light:s.z.string(),alt:s.z.string().optional(),width:s.z.number().optional(),height:s.z.number().optional()})]).optional(),navbar:s.z.array(s.z.object({label:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]),href:s.z.string(),items:s.z.array(s.z.object({label:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]),href:s.z.string()})).optional()})).optional(),sidebar:s.z.record(s.z.string(),s.z.array(s.z.object({text:s.z.string(),link:s.z.string()}))).optional(),sidebarGroups:s.z.record(s.z.string(),s.z.object({title:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]).optional(),icon:s.z.string().optional()})).optional(),socialLinks:s.z.array(p).optional(),editLink:s.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:s.z.string().url().optional(),version:s.z.string().max(50).optional(),githubRepo:s.z.string().max(100).optional(),favicon:s.z.string().optional(),tabs:s.z.array(s.z.object({id:s.z.string(),text:s.z.union([s.z.string(),s.z.record(s.z.string(),s.z.string())]),icon:s.z.string().optional()})).optional(),codeTheme:s.z.union([s.z.string(),s.z.object({light:s.z.string(),dark:s.z.string()})]).optional()}),g=s.z.union([s.z.string(),s.z.object({rules:s.z.array(s.z.object({userAgent:s.z.string(),allow:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional(),disallow:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional()})).optional(),sitemaps:s.z.array(s.z.string().url()).optional()})]),_=s.z.object({defaultLocale:s.z.string(),locales:s.z.union([s.z.record(s.z.string(),s.z.string()),s.z.array(s.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:s.z.record(s.z.string(),s.z.object({label:s.z.string().optional(),direction:s.z.enum([`ltr`,`rtl`]).optional(),htmlLang:s.z.string().optional(),calendar:s.z.string().optional()})).optional()}),v=s.z.object({defaultVersion:s.z.string(),prefix:s.z.string().optional(),versions:s.z.array(s.z.object({label:s.z.string(),path:s.z.string()}))}),y=s.z.object({headers:s.z.record(s.z.string(),s.z.string()).optional(),enableCSP:s.z.boolean().optional(),customHeaders:s.z.record(s.z.string(),s.z.string()).optional()}),b=s.z.object({metatags:s.z.record(s.z.string(),s.z.string()).optional(),indexing:s.z.enum([`all`,`public`]).optional(),thumbnails:s.z.object({background:s.z.string().optional()}).optional()}),x=s.z.object({measurementId:s.z.string().min(1,`Measurement ID is required for GA4`),debug:s.z.boolean().optional(),anonymizeIp:s.z.boolean().optional(),sendPageView:s.z.boolean().optional(),cookieFlags:s.z.string().optional(),autoTrack:s.z.object({pageViews:s.z.boolean().optional(),downloads:s.z.boolean().optional(),externalLinks:s.z.boolean().optional(),search:s.z.boolean().optional()}).optional()}),S=s.z.object({tagId:s.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:s.z.string().optional(),preview:s.z.string().optional()}),C=s.z.object({appId:s.z.string().min(1,`Algolia App ID is required`),apiKey:s.z.string().min(1,`Algolia API Key is required`),indexName:s.z.string().min(1,`Algolia Index Name is required`)}),w=s.z.object({repo:s.z.string().min(1,`Giscus repository is required`),repoId:s.z.string().min(1,`Giscus repository ID is required`),category:s.z.string().optional(),categoryId:s.z.string().optional(),mapping:s.z.enum([`pathname`,`url`,`title`,`og:title`,`specific`,`number`]).optional(),strict:s.z.union([s.z.enum([`0`,`1`]),s.z.boolean()]).optional(),reactionsEnabled:s.z.union([s.z.enum([`0`,`1`]),s.z.boolean()]).optional(),emitMetadata:s.z.union([s.z.enum([`0`,`1`]),s.z.boolean()]).optional(),inputPosition:s.z.enum([`top`,`bottom`]).optional(),theme:s.z.string().optional(),darkTheme:s.z.string().optional(),lang:s.z.string().optional(),loading:s.z.enum([`lazy`,`eager`]).optional()}),T=s.z.object({enabled:s.z.boolean(),owner:s.z.string().min(1,`GitHub owner is required`),repo:s.z.string().min(1,`GitHub repository name is required`),categorySlug:s.z.string().optional(),endpoint:s.z.string().optional()}),E=s.z.object({ga4:x.optional(),gtm:S.optional(),algolia:C.optional(),feedback:s.z.object({giscus:w.optional(),custom:T.optional()}).optional()}),D=s.z.object({siteUrl:s.z.string().url().optional(),docsDir:s.z.string().optional(),base:s.z.string().optional(),theme:h.optional(),i18n:_.optional(),versions:v.optional(),plugins:s.z.array(m).optional(),robots:g.optional(),security:y.optional(),seo:b.optional(),integrations:E.optional(),vite:s.z.record(s.z.string(),s.z.unknown()).optional()});function O(e,t,i=process.cwd(),a){let o=n.default.resolve(i,`.boltdocs`,`generated`);r.default.existsSync(o)||r.default.mkdirSync(o,{recursive:!0});let s=e.i18n?Object.keys(e.i18n.locales):[],c=e.versions?e.versions.versions.map(e=>e.path):[],l=s.length>0?s.map(e=>`'${e}'`).join(` | `):`string`,u=c.length>0?c.map(e=>`'${e}'`).join(` | `):`string`,d=[`tsx`,`ts`,`jsx`,`js`],f=``,p=``;for(let e of d){let a=n.default.resolve(i,t,`mdx-components.${e}`);if(r.default.existsSync(a)){let e=n.default.join(i,t,`mdx-components`),r=n.default.relative(o,e).replace(/\\/g,`/`);f=`import type * as MdxComponentsModule from '${r.startsWith(`.`)?r:`./${r}`}'\n`,p=` MdxComponents: typeof MdxComponentsModule`;break}}let m=a&&a.length>0?`\ndeclare global {
|
|
7
|
-
namespace Boltdocs {
|
|
8
|
-
interface RoutePaths {
|
|
9
|
-
${a.map(e=>` '${e}': void`).join(`
|
|
10
|
-
`)}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}`:``,h=`// This file is automatically generated by Boltdocs.
|
|
14
|
-
// Do not edit this file manually.
|
|
15
|
-
|
|
16
|
-
${f}declare global {
|
|
17
|
-
namespace Boltdocs {
|
|
18
|
-
interface Types {
|
|
19
|
-
Locale: ${l}
|
|
20
|
-
Version: ${u}${p?`\n${p}`:``}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}${m}
|
|
24
|
-
|
|
25
|
-
export {}
|
|
26
|
-
`;r.default.writeFileSync(n.default.resolve(o,`types.d.ts`),h)}function k(e,t=process.cwd()){let i=n.default.resolve(t,`.boltdocs`,`generated`);r.default.existsSync(i)||r.default.mkdirSync(i,{recursive:!0});let a={routes:Array.from(new Set(e)).sort(),timestamp:Date.now()};r.default.writeFileSync(n.default.resolve(i,`link-tree.json`),JSON.stringify(a,null,2))}function A(e){return e}const j=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function M(e,i=process.cwd()){let o=i,s={docsDir:n.default.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},l={};for(let e of j){let t=n.default.resolve(o,e);if(r.default.existsSync(t))try{let e=await(0,a.loadConfigFromFile)({command:`serve`,mode:`development`},t,o);if(e){l=e.config;break}}catch(t){(0,c.warn)(`Failed to load config from ${e}:`,t)}}let u={title:l.title,description:l.description,logo:l.logo,favicon:l.favicon,navbar:l.navbar,sidebar:l.sidebar,sidebarGroups:l.theme?.sidebarGroups,socialLinks:l.socialLinks,githubRepo:l.githubRepo,tabs:l.tabs,codeTheme:l.codeTheme,communityHelp:l.communityHelp,version:l.version,editLink:l.editLink,...l.theme||{}},d=Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));d.navbar&&=d.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let f={docsDir:n.default.resolve(e),theme:{...s.theme,...d},i18n:l.i18n?{...l.i18n,locales:Array.isArray(l.i18n.locales)?Object.fromEntries(l.i18n.locales.map(e=>[e,e])):l.i18n.locales}:void 0,versions:l.versions,siteUrl:l.siteUrl,base:l.base,seo:l.seo,plugins:l.plugins||[],robots:l.robots,security:l.security,integrations:l.integrations,vite:l.vite},p=D.safeParse(f);if(!p.success)throw new t.v(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
|
|
27
|
-
`)}`);return p.data}function ee(e,t){let n=t?` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.cyan(t)}`:` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.gray(`use --host to expose`)}`;return`
|
|
28
|
-
`+(0,c.double)([` ${c.colors.green(`➜`)} ${c.colors.green(`Local:`)} ${c.colors.cyan(e)}`,n,``,` ${c.colors.dim(`press h + enter for help`)}`],{title:`boltdocs dev server`})+`
|
|
29
|
-
`}function te(e,t){let n=t?` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.cyan(t)}`:` ${c.colors.green(`➜`)} ${c.colors.green(`Network:`)} ${c.colors.gray(`use --host to expose`)}`;return`
|
|
30
|
-
`+(0,c.double)([` ${c.colors.green(`➜`)} ${c.colors.green(`Local:`)} ${c.colors.cyan(e)}`,n],{title:`boltdocs preview server`})+`
|
|
31
|
-
`}function ne(e,t){return`
|
|
32
|
-
`+(0,c.double)([(0,c.padCenter)(`🚀 Update available!`,50),``,` ${c.colors.dim(`Current:`)} ${c.colors.red(e)} ${c.colors.gray(`→`)} ${c.colors.green(t)}`,``,` ${c.colors.dim(`Run:`)} ${c.colors.bold(`npm install boltdocs@latest`)}`])+`
|
|
33
|
-
`}const re=(0,i.createRequire)(require(`url`).pathToFileURL(__filename).href);function N(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function 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{let e=(0,d.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),t=n.default.dirname(e);for(let e=0;e<5;e++){let e=n.default.join(t,`package.json`);if(r.default.existsSync(e)){let t=JSON.parse(r.default.readFileSync(e,`utf-8`));if(t.name===`boltdocs`)return t.version}t=n.default.dirname(t)}}catch{}try{return re(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function P(){let e=``;try{e=n.default.join(u.default.homedir(),`.boltdocs`,`update-check.json`)}catch{return}let t=0;try{if(r.default.existsSync(e)){let n=JSON.parse(r.default.readFileSync(e,`utf-8`));t=Number(n.lastCheck)||0}}catch{}let i=Date.now();if(i-t<864e5)return;try{r.default.mkdirSync(n.default.dirname(e),{recursive:!0}),r.default.writeFileSync(e,JSON.stringify({lastCheck:i}),`utf-8`)}catch{}let a=await ae();if(a===`0.0.0`)return;let o=await ie();o&&N(o,a)&&console.log(ne(a,o))}const F={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0},performance:{enabled:!0,budgets:{maxJSBundleSize:`200kb`,maxCSSBundleSize:`30kb`,maxPageHTMLSize:`80kb`,maxImagesKB:500,maxBuildTime:3e4,maxFontCount:3}}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/reports/doctor.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`,budgetExceeded:`warning`},exclude:[]};function I(e,t){if(e==null)return t;if(typeof e==`number`)return e;let n=e.toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/);if(!n)return t;let r=Number.parseFloat(n[1]),i=n[2]||`b`;return Math.round(r*({b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024}[i]||1))}function L(e,t,n){return e.doctorConfig.severity[t]||n}async function R(e,t){r.default.existsSync(t)||r.default.mkdirSync(t,{recursive:!0});let i=n.default.basename(e),a=new Date().toISOString().replace(/[:.]/g,`-`),o=n.default.join(t,`${i}.${a}.bak`);r.default.copyFileSync(e,o)}const z=new Map;function B(e){let n=z.get(e);if(n)return n;let r=(async()=>{let n=await t.d(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return z.set(e,r),r}const V=new Map;function H(e){if(V.has(e))return V.get(e);let t=!1;try{t=r.default.existsSync(e)&&r.default.statSync(e).isFile()}catch{t=!1}return V.set(e,t),t}async function U(e){let t=n.default.resolve(e,`doctor.json`);if(r.default.existsSync(t))try{let e=JSON.parse(r.default.readFileSync(t,`utf-8`));return{...F,...e,checks:{...F.checks,...e.checks,metadata:{...F.checks.metadata,...e.checks?.metadata},links:{...F.checks.links,...e.checks?.links},i18n:{...F.checks.i18n,...e.checks?.i18n},performance:{...F.checks.performance,...e.checks?.performance,budgets:{...F.checks.performance?.budgets,...e.checks?.performance?.budgets}}},fix:{...F.fix,...e.fix},reporting:{...F.reporting,...e.reporting},severity:{...F.severity,...e.severity},exclude:[...F.exclude,...e.exclude||[]]}}catch(e){(0,c.warn)(`Failed to parse doctor.json: ${e}`)}return F}async function W(e,i=process.cwd(),a,s){let c=n.default.resolve(i,`.boltdocs`,`generated`);r.default.existsSync(c)||r.default.mkdirSync(c,{recursive:!0});let l=s;l||=await new o.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=a?.base||`/docs`,d=[];for(let r=0;r<l.length;r+=100){let i=l.slice(r,r+100),a=await Promise.all(i.map(async r=>{let i=n.default.isAbsolute(r)?r:n.default.resolve(e,r),a=n.default.relative(e,i),{data:o}=await B(i),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.a(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return r.default.writeFileSync(n.default.resolve(c,`link-tree.json`),JSON.stringify(f,null,2)),f}function G(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 K=new Map;function q(e,t){if(K.has(e))return K.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=G(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return K.set(e,a),a}async function J(e){let r=[];if(!e.doctorConfig.checks.metadata.enabled)return r;let{titleMin:i,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.u(n.default.relative(e.docsDir,c));try{let{raw:n,data:u}=await B(c);if(n.trim().startsWith(`---`)&&n.split(`---`).length>=3&&Object.keys(u).length===0){let t=L(e,`malformedFrontmatter`,`high`);t!==`off`&&r.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.y.safeParse(u);if(!d.success){let t=L(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)r.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 n=L(e,`missingMetadata`,`warning`);n!==`off`&&r.push({file:l,level:n,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 n of t)if(u[n]&&Number.isNaN(Date.parse(String(u[n])))){let t=L(e,`invalidFrontmatter`,`high`);t!==`off`&&r.push({file:l,level:t,message:`Invalid date format in field "${n}": "${u[n]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<i){let n=L(e,`shortMetadata`,`low`);n!==`off`&&r.push({file:l,level:n,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${i} characters for better SEO.`})}else if(t.length>a){let n=L(e,`shortMetadata`,`low`);n!==`off`&&r.push({file:l,level:n,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let n=s.get(t)||[];n.push(l),s.set(t,n)}if(u.description&&String(u.description).length<o){let t=L(e,`shortMetadata`,`low`);t!==`off`&&r.push({file:l,level:t,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(t){if(t instanceof Error){let n=L(e,`malformedFrontmatter`,`high`);n!==`off`&&r.push({file:l,level:n,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}}for(let[t,n]of s.entries())if(n.length>1){let i=L(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of n)r.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${n.filter(t=>t!==e).join(`, `)}`})}return r}async function Y(e){let i=[],{internal:a,external:o,ignore:s,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!a&&!o&&!e.options.checkExternal)return i;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let c of e.files){let l=t.u(n.default.relative(e.docsDir,c)),{content:u}=await B(c),m=[...(u.length>p?u.slice(0,p):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let t of m){let u=t[1]||t[2],d=!!t[1];if(!u||s.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(o||e.options.checkExternal)&&f.add({url:u,file:c});continue}if(!a||/^(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,r=t.startsWith(`/`)?t.substring(1):t;h=n.default.join(e.docsDir,r),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>H(h+e))}}else h=n.default.resolve(n.default.dirname(c),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>H(h+e));if(!m){let{bestMatch:t,similarity:n}=q(p,e.linkTree.routes),a=!1,o=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(o)||e.routeIndexWithSlash.has(o))&&(t=o,n=1,a=!0);let s=n>.6||a,f=n>.75&&t!==p||a,m=L(e,`brokenLink`,`high`);m!==`off`&&i.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:s?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=d?`(${u})`:`href="${u}"`,i=d?`(${t}${e})`:`href="${t}${e}"`,a=r.default.readFileSync(c,`utf-8`).replace(n,i);r.default.writeFileSync(c,a),z.delete(c)}:void 0})}}}if(f.size>0){(0,c.info)(c.colors.gray(`Verifying ${f.size} external links...`));let r=new Map;for(let e of f)r.has(e.url)||r.set(e.url,[]),r.get(e.url).push(e.file);let a=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),l),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},o=Array.from(r.keys()),s=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(a));s.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let a of s)if(!a.ok){let o=L(e,`brokenLink`,`warning`);if(o!==`off`){let s=r.get(a.url)||[];for(let r of s)i.push({file:t.u(n.default.relative(e.docsDir,r)),level:o,message:`Broken external link: "${a.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${a.error||`Status >= 400`}`})}}}return i}async function X(e){let i=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return i;let{defaultLocale:a,locales:o}=e.config.i18n,s=Object.keys(o),c=s.filter(e=>e!==a);for(let o of e.files){let l=t.u(n.default.relative(e.docsDir,o)),u=l.split(`/`),d=u[0];if(d===a){let t=u.slice(1).join(`/`);for(let a of c){let s=n.default.join(e.docsDir,a,t);if(!H(s)){let c=L(e,`missingTranslation`,`warning`);c!==`off`&&i.push({file:l,level:c,message:`Missing translation for locale "${a}"`,suggestion:`Create a version at "${a}/${t}".`,fix:async()=>{let e=n.default.dirname(s);r.default.existsSync(e)||r.default.mkdirSync(e,{recursive:!0}),r.default.copyFileSync(o,s)}})}}}else if(s.includes(d)){let t=u.slice(1).join(`/`);if(!H(n.default.join(e.docsDir,a,t))){let n=L(e,`missingTranslation`,`low`);n!==`off`&&i.push({file:l,level:n,message:`Orphaned translation (source missing in "${a}")`,suggestion:`Remove this file or create the source at "${a}/${t}".`,fix:async()=>{r.default.unlinkSync(o)}})}}}return i}async function Z(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=L(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}=q(r.link,e.linkTree.routes),a=i>.6,o=L(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=L(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 Q(e){let t=[],i=e.doctorConfig.checks.performance;if(!i?.enabled)return t;let a=n.default.resolve(e.root,`.boltdocs`,`reports`,`performance.json`);if(!r.default.existsSync(a))return t.push({file:`(build)`,level:L(e,`budgetExceeded`,`warning`),message:"Performance metrics not found. Run `boltdocs build` first."}),t;let o;try{o=JSON.parse(r.default.readFileSync(a,`utf-8`))}catch{return t.push({file:`(build)`,level:L(e,`budgetExceeded`,`warning`),message:`Failed to parse performance metrics file.`}),t}let s=i.budgets,c=L(e,`budgetExceeded`,`warning`),l=I(s?.maxJSBundleSize,1/0),u=I(s?.maxCSSBundleSize,1/0),d=I(s?.maxPageHTMLSize,1/0),f=s?.maxImagesKB??1/0,p=s?.maxBuildTime??1/0,m=s?.maxFontCount??1/0;if(l!==1/0&&o.totalJSBundleSize>l){let e=(o.totalJSBundleSize/1024).toFixed(0),n=(l/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`JS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Code-split large dependencies or lazy-load route components.`})}if(u!==1/0&&o.totalCSSBundleSize>u){let e=(o.totalCSSBundleSize/1024).toFixed(0),n=(u/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`CSS bundle size exceeds budget: ${e}kb > ${n}kb`,suggestion:`Remove unused styles or split CSS by route.`})}if(d!==1/0){for(let e of o.pages)if(e.htmlSize>d){let n=(e.htmlSize/1024).toFixed(0),r=(d/1024).toFixed(0);t.push({file:e.route,level:c,message:`Page HTML size exceeds budget: ${n}kb > ${r}kb`,suggestion:`Reduce the amount of inline content or split into sub-pages.`})}}let h=f*1024;if(f!==1/0&&o.totalImagesSize>h){let e=(o.totalImagesSize/1024).toFixed(0);t.push({file:`(build)`,level:c,message:`Image assets exceed budget: ${e}kb > ${f}kb`,suggestion:`Optimize images with lossy compression or use next-gen formats (webp/avif).`})}if(p!==1/0&&o.buildTime>p){let e=(o.buildTime/1e3).toFixed(1),n=(p/1e3).toFixed(1);t.push({file:`(build)`,level:c,message:`Build time exceeds budget: ${e}s > ${n}s`,suggestion:"Check for large unoptimized assets or increase `concurrency` in SSG options."})}return m!==1/0&&o.fontCount>m&&t.push({file:`(build)`,level:c,message:`Font files exceed budget: ${o.fontCount} > ${m}`,suggestion:`Reduce the number of font families or use variable fonts.`}),t}async function $(e){let t=n.default.resolve(e,`doctor.json`);if(r.default.existsSync(t)){(0,c.warn)(`"doctor.json" already exists at ${e}.`);return}try{r.default.writeFileSync(t,JSON.stringify(F,null,2)),(0,c.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,c.error)(`Failed to create "doctor.json": ${e}`)}}async function oe(e=process.cwd(),t={}){if(t.init){await $(e);return}P();try{let i=await U(e),{format:a}=i.reporting,s=performance.now(),u=await M(`docs`,e),d=n.default.resolve(e,`docs`);r.default.existsSync(d)||(a===`pretty`&&(0,c.error)(`Docs dir not found at ${d}`),process.exit(1)),a===`pretty`&&console.log((0,c.double)([` ${c.colors.dim(`Docs dir:`)} ${d}`,` ${c.colors.dim(`Reports:`)} ${e}/.boltdocs/reports/`],{title:`✦ DOCTOR — Documentation Health Check`})),a===`pretty`&&(0,c.info)(c.colors.dim(`🔍 Discovering files and routes...`));let f=(0,l.default)(i.exclude||[]),p=await new o.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=n.default.relative(d,e).replace(/\\/g,`/`),r=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!f(t)&&!r}).crawl(d).withPromise();for(let e of p)V.set(e,!0);let m=await W(d,e,u,p),h=u.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:d,config:u,doctorConfig:i,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};a===`pretty`&&(0,c.info)(c.colors.dim(`🧪 Running diagnostic checks in parallel...`));let v=[J(_),Y(_),X(_),Z(_)];t.budget&&v.push(Q(_));let[y,b,x,S,...C]=await Promise.all(v),w=t.budget?C[0]:[],T=[...y,...b,...x,...S,...w];if(a===`pretty`){let e=[{label:`Metadata checks ${y.length>0?`— ${y.length} issue${y.length===1?``:`s`}`:`— OK`}`,done:y.length===0},{label:`Link checks ${b.length>0?`— ${b.length} issue${b.length===1?``:`s`}`:`— OK`}`,done:b.length===0},{label:`i18n checks ${x.length>0?`— ${x.length} issue${x.length===1?``:`s`}`:`— OK`}`,done:x.length===0},{label:`Sidebar checks ${S.length>0?`— ${S.length} issue${S.length===1?``:`s`}`:`— OK`}`,done:S.length===0}];t.budget&&e.push({label:`Performance budget ${w.length>0?`— ${w.length} issue${w.length===1?``:`s`}`:`— OK`}`,done:w.length===0}),console.log(`\n${(0,c.tasks)(e)}`)}let E=0;if(t.fix){for(let e of T)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await(0,c.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=n.default.resolve(_.docsDir,e.file);r.default.existsSync(t)&&await R(t,n.default.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),E++}}let D=((performance.now()-s)/1e3).toFixed(2),O=T.filter(e=>e.level===`high`).length,k=T.filter(e=>e.level===`warning`).length,A=T.filter(e=>e.level===`low`).length,j={summary:{total:T.length,high:O,warning:k,low:A,fixed:E,duration:D},issues:T.map(e=>({...e,fix:void 0}))};if(i.reporting.outputFile){let t=n.default.resolve(e,i.reporting.outputFile);r.default.existsSync(n.default.dirname(t))||r.default.mkdirSync(n.default.dirname(t),{recursive:!0}),r.default.writeFileSync(t,JSON.stringify(j,null,2))}if(a===`json`)console.log(JSON.stringify(j,null,2));else if(a===`pretty`){let e=T.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(T.length>0){(0,c.dividerLog)();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?c.colors.red:n.level===`warning`?c.colors.yellow:c.colors.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${c.colors.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${c.colors.green(`✅ Fixed automatically`)}`)}console.log(`\n${(0,c.single)(e,{title:`📄 ${n}`})}`)}(0,c.dividerLog)()}if(T.length===0)console.log((0,c.round)([` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${c.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${D}s`)}`],{title:`✨ Documentation Health Check`}));else{let e=[];O>0&&e.push(c.colors.red(`${O} Critical Error${O===1?``:`s`}`)),k>0&&e.push(c.colors.yellow(`${k} Warning${k===1?``:`s`}`)),A>0&&e.push(c.colors.blue(`${A} Improvement${A===1?``:`s`}`));let t=[...(0,c.bullet)(e).split(`
|
|
34
|
-
`).map(e=>e.trimStart()),``,c.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${D}s`)];console.log(`\n${(0,c.double)(t,{title:`Diagnosis Results`})}\n`),E>0&&(0,c.success)(`Successfully fixed ${E} issues automatically!`),O>0?(0,c.error)(`Please fix the critical errors before building for production.`):(0,c.success)(`No critical issues found. You are ready to go!`)}}i.reporting.failOnError&&O>0&&process.exit(1),i.reporting.maxWarnings!==-1&&k>i.reporting.maxWarnings&&(a===`pretty`&&(0,c.error)(`Failed: Too many warnings (${k} > ${i.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,c.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return m}});
|