boltdocs 2.7.11 → 2.8.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/README.md +2 -54
- package/dist/banner-3N4Jd_L9.d.ts +100 -0
- package/dist/banner-MynZD_Ox.d.cts +100 -0
- package/dist/cache-BMUyNiiA.mjs +6 -0
- package/dist/cache-CKm45d2w.cjs +6 -0
- package/dist/client/index.cjs +782 -443
- package/dist/client/index.d.cts +86 -110
- package/dist/client/index.d.ts +87 -111
- package/dist/client/index.js +773 -439
- package/dist/client/mdx.cjs +8 -3
- package/dist/client/mdx.d.cts +39 -93
- package/dist/client/mdx.d.ts +38 -93
- package/dist/client/mdx.js +3 -3
- package/dist/client/primitives.cjs +7 -7
- package/dist/client/primitives.d.cts +411 -347
- package/dist/client/primitives.d.ts +411 -347
- package/dist/client/primitives.js +4 -4
- package/dist/client/theme/neutral.css +1 -1
- package/dist/{docs-layout-BXHV0xw_.cjs → docs-layout-CwCq42Zt.cjs} +95 -178
- package/dist/{docs-layout-DwFndmj5.js → docs-layout-Dn6S5g59.js} +99 -163
- package/dist/doctor-BArviV8X.cjs +28 -0
- package/dist/doctor-CgLA7_Uv.mjs +28 -0
- package/dist/{doctor-CrytFkqW.cjs → doctor-DyNUVe96.cjs} +1 -1
- package/dist/{routes-DP1vmWRj.cjs → doctor-aN_leTbh.mjs} +1 -1
- package/dist/{generator-ClVanhvi.mjs → generator-BHCrLU6h.mjs} +2 -2
- package/dist/{generator-CHqxiQhF.cjs → generator-CC2yHzhZ.cjs} +2 -2
- package/dist/{icons-dev-3cZMyt8r.cjs → icons-dev-DvJ-hh9x.cjs} +116 -111
- package/dist/{icons-dev-Df8OQ481.js → icons-dev-Oju24Wjp.js} +120 -114
- package/dist/{image-DtrI2cw3.cjs → image-Ch4-GxdO.cjs} +13 -13
- package/dist/{image-jxPb-2iV.js → image-Do8V9PCW.js} +13 -13
- package/dist/{mdx-UTTLFWJq.js → mdx-5oeCOFhH.js} +111 -81
- package/dist/{mdx-BdWkJTeB.cjs → mdx-BGM7LjW5.cjs} +109 -97
- package/dist/node/cli-entry.cjs +3 -1
- package/dist/node/cli-entry.mjs +3 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +258 -152
- package/dist/node/index.d.mts +258 -150
- 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-CefnjllX.cjs +159 -0
- package/dist/node-DruKROCt.mjs +159 -0
- package/dist/package-CmP_9rJ8.cjs +6 -0
- package/dist/{package-K0zsjGIz.mjs → package-DpbnBMR1.mjs} +1 -1
- package/dist/parser-B0YtJPDz.mjs +6 -0
- package/dist/parser-B7-6PyQz.cjs +6 -0
- package/dist/{parser-Aq8LoH-0.cjs → parser-BzB-zCkF.cjs} +1 -1
- package/dist/routes-ChS-zgzh.mjs +6 -0
- package/dist/routes-DJNJ-rTt.cjs +6 -0
- package/dist/routes-DiYC4nD2.cjs +6 -0
- package/dist/routes-rKlxFkqq.mjs +6 -0
- package/dist/{search-dialog-C7xuvyNk.cjs → search-dialog-BXVoecTx.cjs} +175 -78
- package/dist/{search-dialog-BwkDuI9R.cjs → search-dialog-BYhOov4S.cjs} +118 -7
- package/dist/{search-dialog-D-DDN7zJ.js → search-dialog-C09riYmx.js} +113 -8
- package/dist/{search-dialog-CIQg6k8c.cjs → search-dialog-CUeAfy-8.cjs} +1 -1
- package/dist/{search-dialog-BNF10tDl.js → search-dialog-D8gLkhUV.js} +158 -80
- package/dist/{search-dialog-BHuIiUC6.js → search-dialog-DHc_8FFX.js} +1 -1
- package/dist/{sidebar-CyZS9YOm.d.ts → sidebar-DNq4_ZAa.d.ts} +117 -51
- package/dist/{sidebar-CcBkrm06.d.cts → sidebar-Dlkgbxs6.d.cts} +117 -51
- package/dist/utils-BYITg7T5.mjs +7 -0
- package/dist/utils-Cjmx1hhk.cjs +7 -0
- package/dist/worker-pool-CtqklOXq.cjs +6 -0
- package/dist/worker-pool-k0DY6k8T.mjs +6 -0
- package/package.json +3 -3
- package/src/shared/config-utils.ts +4 -0
- package/src/shared/types.ts +52 -6
- package/dist/cache-Ba-DZQNH.cjs +0 -6
- package/dist/cache-BuMZ58L5.mjs +0 -6
- package/dist/cards-BakZPTz9.d.ts +0 -30
- package/dist/cards-CQn9mXZS.d.cts +0 -30
- package/dist/doctor-Be7Ly1oM.mjs +0 -21
- package/dist/doctor-jMxWZyLJ.cjs +0 -21
- package/dist/node-BSM4qcDK.cjs +0 -111
- package/dist/node-BspZN3R2.mjs +0 -111
- package/dist/package-DIIrjuWI.cjs +0 -6
- package/dist/parser-CdNbqN5y.cjs +0 -6
- package/dist/parser-nE792MLO.mjs +0 -6
- package/dist/rolldown-runtime-fkIsjY3S.mjs +0 -6
- package/dist/routes-2k3tbUmC.cjs +0 -6
- package/dist/routes-CpxZIsMM.mjs +0 -6
- package/dist/utils-CG65J0Sc.mjs +0 -7
- package/dist/utils-CKunkU96.cjs +0 -7
- package/dist/worker-pool-CGn7DrLb.mjs +0 -6
- package/dist/worker-pool-Crbqgw5R.cjs +0 -6
- /package/dist/{meta-loader-CWg2gnbY.mjs → meta-loader-DzwDFtdT.mjs} +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
+
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
import e from"node:path";import t from"node:fs";import{fileURLToPath as n}from"node:url";import{Worker as r}from"node:worker_threads";import i from"node:os";const a=e.dirname(n(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,i.cpus().length-1),this.maxQueueSize=t}idleWorkers=[];async parseFile(e,t,n,r){return this.queue.length>=this.maxQueueSize?Promise.reject(Error(`[boltdocs] WorkerPool queue is full (limit: ${this.maxQueueSize}). Too many files enqueued simultaneously. Consider increasing maxQueueSize.`)):new Promise((i,a)=>{this.queue.push({task:{type:`PARSE_FILE`,file:e,docsDir:t,basePath:n,config:r},resolve:i,reject:a}),this.processNext()})}processNext(){if(this.queue.length===0)return;let e=this.idleWorkers.pop();if(!e){if(this.activeWorkers>=this.maxWorkers)return;this.activeWorkers++;let t=this.getWorkerPath(),n=new r(t,{execArgv:t.endsWith(`.ts`)?[`--loader`,`tsx`]:[]});e=n,this.workers.push(n);let i=(e,t)=>{let n=this.workers.indexOf(e);if(n===-1)return;let r=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=>{i(n,e)}),n.on(`exit`,e=>{e!==0&&i(n,Error(`Worker exited with code ${e}`))})}let{task:t,resolve:n,reject:i}=this.queue.shift();this.workerTasks.set(e,{resolve:n,reject:i}),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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "boltdocs",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"description": "A lightweight documentation generator for React projects.",
|
|
5
5
|
"main": "dist/node/index.mjs",
|
|
6
6
|
"module": "dist/node/index.mjs",
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
"vite": "7.0.0 || 8.0.0",
|
|
87
87
|
"vite-plugin-image-optimizer": "2.0.3",
|
|
88
88
|
"zod": "4.3.6",
|
|
89
|
-
"@bdocs/dui": "0.1.
|
|
90
|
-
"@bdocs/ssg": "0.0
|
|
89
|
+
"@bdocs/dui": "0.1.2",
|
|
90
|
+
"@bdocs/ssg": "0.1.0"
|
|
91
91
|
},
|
|
92
92
|
"peerDependencies": {
|
|
93
93
|
"react": "19.0.0",
|
|
@@ -5,6 +5,10 @@ import type { BoltdocsConfig } from './types'
|
|
|
5
5
|
* This is an identity function that provides IntelliSense in both
|
|
6
6
|
* Node.js (config files) and client-side code (MDX examples).
|
|
7
7
|
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* Intended for use in `boltdocs.config.ts` (Node.js context). This function
|
|
10
|
+
* is **not** available as a client-side import from `boltdocs/client`.
|
|
11
|
+
*
|
|
8
12
|
* @param config - The Boltdocs configuration object
|
|
9
13
|
*/
|
|
10
14
|
export function defineConfig(config: BoltdocsConfig): BoltdocsConfig {
|
package/src/shared/types.ts
CHANGED
|
@@ -33,13 +33,16 @@ export interface BoltdocsThemeConfig {
|
|
|
33
33
|
}
|
|
34
34
|
navbar?: Array<{
|
|
35
35
|
label: string | Record<string, string>
|
|
36
|
-
href:
|
|
36
|
+
href: BoltdocsRoutePathWithFallback
|
|
37
37
|
items?: Array<{
|
|
38
38
|
label: string | Record<string, string>
|
|
39
|
-
href:
|
|
39
|
+
href: BoltdocsRoutePathWithFallback
|
|
40
40
|
}>
|
|
41
41
|
}>
|
|
42
|
-
sidebar?: Record<
|
|
42
|
+
sidebar?: Record<
|
|
43
|
+
string,
|
|
44
|
+
Array<{ text: string; link: BoltdocsRoutePathWithFallback }>
|
|
45
|
+
>
|
|
43
46
|
sidebarGroups?: Record<
|
|
44
47
|
string,
|
|
45
48
|
{ title?: string | Record<string, string>; icon?: string }
|
|
@@ -121,25 +124,44 @@ export interface BoltdocsVersionsConfig {
|
|
|
121
124
|
versions: BoltdocsVersionConfig[]
|
|
122
125
|
}
|
|
123
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Shared badge value type used in frontmatter, RouteMeta, and ComponentRoute.
|
|
129
|
+
*/
|
|
130
|
+
export type BadgeValue = string | { text: string; expires?: string }
|
|
131
|
+
|
|
124
132
|
/**
|
|
125
133
|
* Defines a Boltdocs plugin.
|
|
134
|
+
*
|
|
135
|
+
* Use the `createPlugin()` helper from the node API for full type safety and
|
|
136
|
+
* access to lifecycle hooks.
|
|
126
137
|
*/
|
|
127
138
|
export interface BoltdocsPlugin {
|
|
128
139
|
name: string
|
|
129
140
|
enforce?: 'pre' | 'post'
|
|
130
141
|
version?: string
|
|
131
142
|
boltdocsVersion?: string
|
|
132
|
-
permissions?: string[] // simplified for shared types
|
|
133
143
|
remarkPlugins?: unknown[]
|
|
134
144
|
rehypePlugins?: unknown[]
|
|
135
145
|
vitePlugins?: VitePlugin[]
|
|
136
146
|
components?: Record<string, string>
|
|
137
|
-
hooks
|
|
147
|
+
/** Lifecycle hooks — use the `PluginLifecycleHooks` type from the node API. */
|
|
148
|
+
hooks?: Record<string, (ctx: unknown) => Promise<void> | void>
|
|
138
149
|
}
|
|
139
150
|
|
|
140
151
|
/**
|
|
141
|
-
* Configuration for
|
|
152
|
+
* Configuration for the collections (blog) feature.
|
|
142
153
|
*/
|
|
154
|
+
export interface BoltdocsCollectionsConfig {
|
|
155
|
+
/** Number of posts per page in collection listing pages. Defaults to 10. */
|
|
156
|
+
postsPerPage?: number
|
|
157
|
+
/** The name of the default collection used by BlogList when none is specified. */
|
|
158
|
+
defaultCollection?: string
|
|
159
|
+
/** Date format string for rendering post dates (e.g., 'MMMM dd, yyyy'). */
|
|
160
|
+
dateFormat?: string
|
|
161
|
+
/** Field to sort posts by. Defaults to 'date'. */
|
|
162
|
+
sortBy?: 'date' | 'title' | 'sidebarPosition'
|
|
163
|
+
}
|
|
164
|
+
|
|
143
165
|
export interface BoltdocsSecurityConfig {
|
|
144
166
|
headers?: Record<string, string>
|
|
145
167
|
enableCSP?: boolean
|
|
@@ -183,9 +205,19 @@ export interface BoltdocsGTMConfig {
|
|
|
183
205
|
preview?: string
|
|
184
206
|
}
|
|
185
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Configuration for Algolia DocSearch.
|
|
210
|
+
*/
|
|
211
|
+
export interface BoltdocsAlgoliaConfig {
|
|
212
|
+
appId: string
|
|
213
|
+
apiKey: string
|
|
214
|
+
indexName: string
|
|
215
|
+
}
|
|
216
|
+
|
|
186
217
|
export interface BoltdocsIntegrationsConfig {
|
|
187
218
|
ga4?: BoltdocsGA4Config
|
|
188
219
|
gtm?: BoltdocsGTMConfig
|
|
220
|
+
algolia?: BoltdocsAlgoliaConfig
|
|
189
221
|
}
|
|
190
222
|
|
|
191
223
|
/**
|
|
@@ -199,6 +231,7 @@ export interface BoltdocsConfig {
|
|
|
199
231
|
i18n?: BoltdocsI18nConfig
|
|
200
232
|
versions?: BoltdocsVersionsConfig
|
|
201
233
|
plugins?: BoltdocsPlugin[]
|
|
234
|
+
collections?: BoltdocsCollectionsConfig
|
|
202
235
|
robots?: BoltdocsRobotsConfig
|
|
203
236
|
security?: BoltdocsSecurityConfig
|
|
204
237
|
seo?: BoltdocsSeoConfig
|
|
@@ -215,11 +248,24 @@ export interface BoltdocsConfig {
|
|
|
215
248
|
declare global {
|
|
216
249
|
namespace Boltdocs {
|
|
217
250
|
interface Types {}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Marker interface augmented by generated code to provide strict route path typing.
|
|
254
|
+
* When no types have been generated (e.g., before first dev server start),
|
|
255
|
+
* keyof is never, and BoltdocsRoutePath falls back to string.
|
|
256
|
+
*/
|
|
257
|
+
interface RoutePaths {}
|
|
218
258
|
}
|
|
219
259
|
}
|
|
220
260
|
|
|
221
261
|
export type BoltdocsTypes = Boltdocs.Types
|
|
222
262
|
|
|
263
|
+
export type BoltdocsRoutePath = keyof Boltdocs.RoutePaths
|
|
264
|
+
|
|
265
|
+
export type BoltdocsRoutePathWithFallback = BoltdocsRoutePath extends never
|
|
266
|
+
? string
|
|
267
|
+
: BoltdocsRoutePath
|
|
268
|
+
|
|
223
269
|
export type BoltdocsLocale = Boltdocs.Types extends { Locale: infer L }
|
|
224
270
|
? L
|
|
225
271
|
: string
|
package/dist/cache-Ba-DZQNH.cjs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
-
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
const e=require(`./chunk-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`);let n=require(`node:path`);n=e.t(n);let r=require(`node:fs`);r=e.t(r);let i=require(`node:crypto`);i=e.t(i);let a=require(`node:zlib`);a=e.t(a);let o=require(`node:util`),s=require(`lru-cache`);const c=(0,o.promisify)(r.default.writeFile),l=(0,o.promisify)(r.default.readFile),u=(0,o.promisify)(r.default.mkdir),d=(0,o.promisify)(r.default.rename),f=(0,o.promisify)(a.default.gzip),p=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var m=class{entries=new Map;cachePath=null;compress;constructor(e={}){let r=t.a();if(this.compress=e.compress===void 0?r.compress:e.compress,e.name){let t=e.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.default.resolve(t,r.dir,`${e.name}.${i}`)}}async load(){if(!t.a().noCache&&this.cachePath)try{if(!r.default.existsSync(this.cachePath))return;let e=await l(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await(0,o.promisify)(a.default.gunzip)(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch{}}save(){if(t.a().noCache||!this.cachePath)return;let e=Object.fromEntries(this.entries),r=JSON.stringify(e),o=this.cachePath,s=this.compress;p.add(async()=>{try{await u(n.default.dirname(o),{recursive:!0});let e=Buffer.from(r);s&&(e=await new Promise((t,n)=>{a.default.gzip(e,(e,r)=>{e?n(e):t(r)})}));let t=`${o}.${i.default.randomBytes(4).toString(`hex`)}.tmp`;await c(t,e),await d(t,o)}catch{}})}get(e){let n=this.entries.get(e);return!n||t.o(e)!==n.mtime?null:n.data}set(e,n){this.entries.set(e,{data:n,mtime:t.o(e)})}isValid(e){let n=this.entries.get(e);return n?t.o(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await p.flush()}},h=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;constructor(e,r=process.cwd()){let i=t.a();this.baseDir=n.default.resolve(r,i.dir,`transform-${e}`),this.shardsDir=n.default.resolve(this.baseDir,`shards`),this.indexPath=n.default.resolve(this.baseDir,`index.json`),this.memoryCache=new s.LRUCache({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!t.a().noCache)try{if(!r.default.existsSync(this.indexPath))return;let e=await l(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch{}}save(){if(t.a().noCache)return;let e=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;p.add(async()=>{try{await u(n.default.dirname(r),{recursive:!0}),await c(r,e)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.default.resolve(this.shardsDir,`${t}.gz`);try{let t=await l(r),n=await new Promise((e,n)=>{a.default.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),{key:e,val:n}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}get(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.default.resolve(this.shardsDir,`${i}.gz`);if(!r.default.existsSync(o))return null;try{let t=r.default.readFileSync(o),n=a.default.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,n),n}catch{return null}}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.default.resolve(this.shardsDir,`${i}.gz`);try{if(!r.default.existsSync(o))return null;let t=await l(o),n=await new Promise((e,n)=>{a.default.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),n}catch{return null}}set(e,t){let a=i.default.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,a),this.memoryCache.set(e,t);let o=n.default.resolve(this.shardsDir,`${a}.gz`);p.add(async()=>{try{if(r.default.existsSync(o))return;await u(this.shardsDir,{recursive:!0});let e=await f(Buffer.from(t)),n=`${o}.${i.default.randomBytes(4).toString(`hex`)}.tmp`;await c(n,e),await d(n,o)}catch{}})}get size(){return this.index.size}async flush(){await p.flush()}};const g=new Map,_=()=>{let e=t.a();return n.default.resolve(process.cwd(),e.dir,`cache/parser`)},v=`v2.3`;var y=class{static async get(e){if(t.a().noCache)return null;try{let t=g.get(e);if(t)return t.data;let a=await r.default.promises.stat(e),o=_(),s=i.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`);try{let t=await r.default.promises.readFile(c,`utf-8`),n=JSON.parse(t);return n._mtime!==a.mtimeMs||n._v!==v?null:(g.set(e,{data:n.data,mtime:n._mtime}),n.data)}catch{return null}}catch{return null}}static async set(e,a){if(!t.a().noCache)try{let t=await r.default.promises.stat(e);g.set(e,{data:a,mtime:t.mtimeMs});let o=_(),s=i.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`),l={_v:v,_mtime:t.mtimeMs,data:a};p.add(async()=>{try{await r.default.promises.mkdir(o,{recursive:!0}),await r.default.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){g.delete(e)}static clear(){g.clear();let e=_();if(r.default.existsSync(e))try{r.default.rmSync(e,{recursive:!0,force:!0})}catch{}}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return y}});
|
package/dist/cache-BuMZ58L5.mjs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
-
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
import{a as e,o as t}from"./utils-CG65J0Sc.mjs";import n from"node:path";import r from"node:fs";import i from"node:crypto";import a from"node:zlib";import{promisify as o}from"node:util";import{LRUCache as s}from"lru-cache";const c=o(r.writeFile),l=o(r.readFile),u=o(r.mkdir),d=o(r.rename),f=o(a.gzip),p=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var m=class{entries=new Map;cachePath=null;compress;constructor(t={}){let r=e();if(this.compress=t.compress===void 0?r.compress:t.compress,t.name){let e=t.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.resolve(e,r.dir,`${t.name}.${i}`)}}async load(){if(!e().noCache&&this.cachePath)try{if(!r.existsSync(this.cachePath))return;let e=await l(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await o(a.gunzip)(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch{}}save(){if(e().noCache||!this.cachePath)return;let t=Object.fromEntries(this.entries),r=JSON.stringify(t),o=this.cachePath,s=this.compress;p.add(async()=>{try{await u(n.dirname(o),{recursive:!0});let e=Buffer.from(r);s&&(e=await new Promise((t,n)=>{a.gzip(e,(e,r)=>{e?n(e):t(r)})}));let t=`${o}.${i.randomBytes(4).toString(`hex`)}.tmp`;await c(t,e),await d(t,o)}catch{}})}get(e){let n=this.entries.get(e);return!n||t(e)!==n.mtime?null:n.data}set(e,n){this.entries.set(e,{data:n,mtime:t(e)})}isValid(e){let n=this.entries.get(e);return n?t(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await p.flush()}},h=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;constructor(t,r=process.cwd()){let i=e();this.baseDir=n.resolve(r,i.dir,`transform-${t}`),this.shardsDir=n.resolve(this.baseDir,`shards`),this.indexPath=n.resolve(this.baseDir,`index.json`),this.memoryCache=new s({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!e().noCache)try{if(!r.existsSync(this.indexPath))return;let e=await l(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch{}}save(){if(e().noCache)return;let t=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;p.add(async()=>{try{await u(n.dirname(r),{recursive:!0}),await c(r,t)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.resolve(this.shardsDir,`${t}.gz`);try{let t=await l(r),n=await new Promise((e,n)=>{a.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),{key:e,val:n}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}get(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.resolve(this.shardsDir,`${i}.gz`);if(!r.existsSync(o))return null;try{let t=r.readFileSync(o),n=a.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,n),n}catch{return null}}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.resolve(this.shardsDir,`${i}.gz`);try{if(!r.existsSync(o))return null;let t=await l(o),n=await new Promise((e,n)=>{a.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),n}catch{return null}}set(e,t){let a=i.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,a),this.memoryCache.set(e,t);let o=n.resolve(this.shardsDir,`${a}.gz`);p.add(async()=>{try{if(r.existsSync(o))return;await u(this.shardsDir,{recursive:!0});let e=await f(Buffer.from(t)),n=`${o}.${i.randomBytes(4).toString(`hex`)}.tmp`;await c(n,e),await d(n,o)}catch{}})}get size(){return this.index.size}async flush(){await p.flush()}};const g=new Map,_=()=>{let t=e();return n.resolve(process.cwd(),t.dir,`cache/parser`)},v=`v2.3`;var y=class{static async get(t){if(e().noCache)return null;try{let e=g.get(t);if(e)return e.data;let a=await r.promises.stat(t),o=_(),s=i.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`);try{let e=await r.promises.readFile(c,`utf-8`),n=JSON.parse(e);return n._mtime!==a.mtimeMs||n._v!==v?null:(g.set(t,{data:n.data,mtime:n._mtime}),n.data)}catch{return null}}catch{return null}}static async set(t,a){if(!e().noCache)try{let e=await r.promises.stat(t);g.set(t,{data:a,mtime:e.mtimeMs});let o=_(),s=i.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`),l={_v:v,_mtime:e.mtimeMs,data:a};p.add(async()=>{try{await r.promises.mkdir(o,{recursive:!0}),await r.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){g.delete(e)}static clear(){g.clear();let e=_();if(r.existsSync(e))try{r.rmSync(e,{recursive:!0,force:!0})}catch{}}};export{m as n,h as r,y as t};
|
package/dist/cards-BakZPTz9.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/mdx/card.d.ts
|
|
5
|
-
interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
6
|
-
title?: React.ReactNode;
|
|
7
|
-
icon?: React.ReactNode;
|
|
8
|
-
href?: string;
|
|
9
|
-
}
|
|
10
|
-
declare function Card({
|
|
11
|
-
className,
|
|
12
|
-
title,
|
|
13
|
-
icon,
|
|
14
|
-
href,
|
|
15
|
-
children,
|
|
16
|
-
...props
|
|
17
|
-
}: CardProps): _$react_jsx_runtime0.JSX.Element;
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/client/components/mdx/cards.d.ts
|
|
20
|
-
interface CardsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
21
|
-
cols?: 1 | 2 | 3 | 4;
|
|
22
|
-
}
|
|
23
|
-
declare function Cards({
|
|
24
|
-
children,
|
|
25
|
-
className,
|
|
26
|
-
cols,
|
|
27
|
-
...props
|
|
28
|
-
}: CardsProps): _$react_jsx_runtime0.JSX.Element;
|
|
29
|
-
//#endregion
|
|
30
|
-
export { Card as n, Cards as t };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/mdx/card.d.ts
|
|
5
|
-
interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
6
|
-
title?: React.ReactNode;
|
|
7
|
-
icon?: React.ReactNode;
|
|
8
|
-
href?: string;
|
|
9
|
-
}
|
|
10
|
-
declare function Card({
|
|
11
|
-
className,
|
|
12
|
-
title,
|
|
13
|
-
icon,
|
|
14
|
-
href,
|
|
15
|
-
children,
|
|
16
|
-
...props
|
|
17
|
-
}: CardProps): _$react_jsx_runtime0.JSX.Element;
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/client/components/mdx/cards.d.ts
|
|
20
|
-
interface CardsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
21
|
-
cols?: 1 | 2 | 3 | 4;
|
|
22
|
-
}
|
|
23
|
-
declare function Cards({
|
|
24
|
-
children,
|
|
25
|
-
className,
|
|
26
|
-
cols,
|
|
27
|
-
...props
|
|
28
|
-
}: CardsProps): _$react_jsx_runtime0.JSX.Element;
|
|
29
|
-
//#endregion
|
|
30
|
-
export { Card as n, Cards as t };
|
package/dist/doctor-Be7Ly1oM.mjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Boltdocs - https://boltdocs.vercel.app
|
|
3
|
-
* Copyright (c) 2026 Jesus Alcala
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
import{t as e}from"./rolldown-runtime-fkIsjY3S.mjs";import{_ as t,i as n,l as r,u as i,v as a}from"./utils-CG65J0Sc.mjs";import{createRequire as o}from"node:module";import{loadConfigFromFile as s}from"vite";import c from"node:path";import{fdir as l}from"fdir";import u from"fs";import{z as d}from"zod";import*as f from"@bdocs/dui";import{bullet as p,colors as m,confirm as ee,dividerLog as h,double as g,error as _,info as v,round as te,single as ne,success as y,tasks as re,warn as b}from"@bdocs/dui";import x from"node:fs";import S from"path";import ie from"picomatch";import{distance as C}from"fastest-levenshtein";const w=d.object({icon:d.string().max(50),link:d.string().url()});d.object({text:d.string().max(2e3).optional()});const T=d.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),E=d.object({name:d.string(),enforce:d.enum([`pre`,`post`]).optional(),version:d.string().optional(),boltdocsVersion:d.string().optional(),permissions:d.array(T).optional(),remarkPlugins:d.array(d.any()).optional(),rehypePlugins:d.array(d.any()).optional(),vitePlugins:d.array(d.any()).optional(),components:d.record(d.string(),d.string()).optional(),hooks:d.record(d.string(),d.any()).optional()}),D=d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),description:d.union([d.string(),d.record(d.string(),d.string())]).optional(),logo:d.union([d.string(),d.object({dark:d.string(),light:d.string(),alt:d.string().optional(),width:d.number().optional(),height:d.number().optional()})]).optional(),navbar:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string(),items:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string()})).optional()})).optional(),sidebar:d.record(d.string(),d.array(d.object({text:d.string(),link:d.string()}))).optional(),sidebarGroups:d.record(d.string(),d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),icon:d.string().optional()})).optional(),socialLinks:d.array(w).optional(),editLink:d.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:d.string().url().optional(),version:d.string().max(50).optional(),githubRepo:d.string().max(100).optional(),favicon:d.string().optional(),tabs:d.array(d.object({id:d.string(),text:d.union([d.string(),d.record(d.string(),d.string())]),icon:d.string().optional()})).optional(),codeTheme:d.union([d.string(),d.object({light:d.string(),dark:d.string()})]).optional()}),O=d.union([d.string(),d.object({rules:d.array(d.object({userAgent:d.string(),allow:d.union([d.string(),d.array(d.string())]).optional(),disallow:d.union([d.string(),d.array(d.string())]).optional()})).optional(),sitemaps:d.array(d.string().url()).optional()})]),k=d.object({defaultLocale:d.string(),locales:d.union([d.record(d.string(),d.string()),d.array(d.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:d.record(d.string(),d.object({label:d.string().optional(),direction:d.enum([`ltr`,`rtl`]).optional(),htmlLang:d.string().optional(),calendar:d.string().optional()})).optional()}),A=d.object({defaultVersion:d.string(),prefix:d.string().optional(),versions:d.array(d.object({label:d.string(),path:d.string()}))}),j=d.object({headers:d.record(d.string(),d.string()).optional(),enableCSP:d.boolean().optional(),customHeaders:d.record(d.string(),d.string()).optional()}),M=d.object({metatags:d.record(d.string(),d.string()).optional(),indexing:d.enum([`all`,`public`]).optional(),thumbnails:d.object({background:d.string().optional()}).optional()}),N=d.object({measurementId:d.string().min(1,`Measurement ID is required for GA4`),debug:d.boolean().optional(),anonymizeIp:d.boolean().optional(),sendPageView:d.boolean().optional(),cookieFlags:d.string().optional(),autoTrack:d.object({pageViews:d.boolean().optional(),downloads:d.boolean().optional(),externalLinks:d.boolean().optional(),search:d.boolean().optional()}).optional()}),ae=d.object({tagId:d.string().min(1,`Tag ID is required for GTM`),dataLayerName:d.string().optional(),preview:d.string().optional()}),oe=d.object({ga4:N.optional(),gtm:ae.optional()}),se=d.object({siteUrl:d.string().url().optional(),docsDir:d.string().optional(),base:d.string().optional(),theme:D.optional(),i18n:k.optional(),versions:A.optional(),plugins:d.array(E).optional(),robots:O.optional(),security:j.optional(),seo:M.optional(),integrations:oe.optional(),vite:d.record(d.string(),d.unknown()).optional()});function P(e,t,n=process.cwd()){let r=c.resolve(n,`.boltdocs`);x.existsSync(r)||x.mkdirSync(r,{recursive:!0});let i=e.i18n?Object.keys(e.i18n.locales):[],a=e.versions?e.versions.versions.map(e=>e.path):[],o=i.length>0?i.map(e=>`'${e}'`).join(` | `):`string`,s=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=[`tsx`,`ts`,`jsx`,`js`],u=``,d=``;for(let e of l){let i=c.resolve(n,t,`mdx-components.${e}`);if(x.existsSync(i)){let e=c.join(n,t,`mdx-components`),i=c.relative(r,e).replace(/\\/g,`/`);u=`import type * as MdxComponentsModule from '${i.startsWith(`.`)?i:`./${i}`}'\n`,d=` MdxComponents: typeof MdxComponentsModule`;break}}let f=`// This file is automatically generated by Boltdocs.
|
|
7
|
-
// Do not edit this file manually.
|
|
8
|
-
|
|
9
|
-
${u}declare global {
|
|
10
|
-
namespace Boltdocs {
|
|
11
|
-
interface Types {
|
|
12
|
-
Locale: ${o}
|
|
13
|
-
Version: ${s}${d?`\n${d}`:``}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export {}
|
|
19
|
-
`;x.writeFileSync(c.resolve(r,`types.d.ts`),f)}function ce(e){return e}const F=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function I(e,n=process.cwd()){let r=n,i={docsDir:c.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 F){let t=c.resolve(r,e);if(x.existsSync(t))try{let e=await s({command:`serve`,mode:`development`},t,r);if(e){a=e.config;break}}catch(t){b(`Failed to load config from ${e}:`,t)}}let o={title:a.title,description:a.description,logo:a.logo,favicon:a.favicon,navbar:a.navbar,sidebar:a.sidebar,sidebarGroups:a.theme?.sidebarGroups,socialLinks:a.socialLinks,githubRepo:a.githubRepo,tabs:a.tabs,codeTheme:a.codeTheme,communityHelp:a.communityHelp,version:a.version,editLink:a.editLink,...a.theme||{}},l=Object.fromEntries(Object.entries(o).filter(([e,t])=>t!==void 0));l.navbar&&=l.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let u={docsDir:c.resolve(e),theme:{...i.theme,...l},i18n:a.i18n?{...a.i18n,locales:Array.isArray(a.i18n.locales)?Object.fromEntries(a.i18n.locales.map(e=>[e,e])):a.i18n.locales}:void 0,versions:a.versions,siteUrl:a.siteUrl,base:a.base,seo:a.seo,plugins:a.plugins||[],robots:a.robots,security:a.security,integrations:a.integrations,vite:a.vite},d=se.safeParse(u);if(!d.success)throw new t(`Invalid Boltdocs configuration:\n${d.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
|
|
20
|
-
`)}`);return d.data}async function le(e,t=process.cwd()){let n=await I(e,t);return P(n,e,t),n}const ue=o(import.meta.url);let L=0;function de(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 fe(){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 pe(){try{return ue(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function R(){let e=Date.now();if(e-L<864e5)return;L=e;let t=await pe();if(t===`0.0.0`)return;let n=await fe();n&&de(n,t)&&console.log(f.updateAvailable(t,n))}const z={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`},exclude:[]};function B(e,t,n){return e.doctorConfig.severity[t]||n}async function me(e,t){x.existsSync(t)||x.mkdirSync(t,{recursive:!0});let n=c.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=c.join(t,`${n}.${r}.bak`);x.copyFileSync(e,i)}const V=new Map;function H(e){let t=V.get(e);if(t)return t;let n=(async()=>{let t=await i(e,!1);return{raw:t.raw,data:t.data,content:t.content}})();return V.set(e,n),n}const U=new Map;function W(e){if(U.has(e))return U.get(e);let t=!1;try{t=x.existsSync(e)&&x.statSync(e).isFile()}catch{t=!1}return U.set(e,t),t}async function G(e){let t=c.resolve(e,`doctor.json`);if(x.existsSync(t))try{let e=JSON.parse(x.readFileSync(t,`utf-8`));return{...z,...e,checks:{...z.checks,...e.checks,metadata:{...z.checks.metadata,...e.checks?.metadata},links:{...z.checks.links,...e.checks?.links},i18n:{...z.checks.i18n,...e.checks?.i18n}},fix:{...z.fix,...e.fix},reporting:{...z.reporting,...e.reporting},severity:{...z.severity,...e.severity},exclude:[...z.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return z}async function K(e,t=process.cwd(),r,i){let a=c.resolve(t,`.boltdocs`);x.existsSync(a)||x.mkdirSync(a,{recursive:!0});let o=i;o||=await new l().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let s=r?.base||`/docs`,u=[];for(let t=0;t<o.length;t+=100){let r=o.slice(t,t+100),i=await Promise.all(r.map(async t=>{let r=c.isAbsolute(t)?t:c.resolve(e,t),i=c.relative(e,r),{data:a}=await H(r),o;return o=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:n(i),s===`/`?o:(s.endsWith(`/`)?s:s+`/`)+(o.startsWith(`/`)?o.substring(1):o)}));u.push(...i)}u.includes(s)||u.push(s);let d={routes:Array.from(new Set(u)).sort(),timestamp:Date.now()};return x.writeFileSync(c.resolve(a,`link-tree.json`),JSON.stringify(d,null,2)),d}function he(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 q=new Map;function J(e,t){if(q.has(e))return q.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=he(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return q.set(e,a),a}async function Y(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:n,titleMax:i,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let l of e.files){let u=r(c.relative(e.docsDir,l));try{let{raw:r,data:c}=await H(l);if(r.trim().startsWith(`---`)&&r.split(`---`).length>=3&&Object.keys(c).length===0){let n=B(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=a.safeParse(c);if(!d.success){let n=B(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(c[n]===void 0){let r=B(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(c[r]&&isNaN(Date.parse(String(c[r])))){let n=B(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${c[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(c.title){let r=String(c.title);if(r.length<n){let i=B(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,level:i,message:`Title is too short (${r.length} chars).`,suggestion:`Titles should be at least ${n} characters for better SEO.`})}else if(r.length>i){let n=B(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Title is too long (${r.length} chars).`,suggestion:`Titles should be under ${i} characters.`})}let a=s.get(r)||[];a.push(u),s.set(r,a)}if(c.description&&String(c.description).length<o){let n=B(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(n){let r=B(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 s.entries())if(r.length>1){let i=B(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 X(e){let t=[],{internal:n,external:i,ignore:a,timeout:o,concurrency:s}=e.doctorConfig.checks.links;if(!n&&!i&&!e.options.checkExternal)return t;let l=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,u=new Set,d=5e5;for(let o of e.files){let s=r(c.relative(e.docsDir,o)),{content:f}=await H(o),p=[...(f.length>d?f.slice(0,d):f).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(l)];for(let r of p){let l=r[1]||r[2],d=!!r[1];if(!l||a.some(e=>l.includes(e)))continue;if(/^https?:\/\//i.test(l)){(i||e.options.checkExternal)&&u.add({url:l,file:o});continue}if(!n||/^(mailto|tel|#)/i.test(l))continue;let f;try{f=decodeURIComponent(l.split(`#`)[0].split(`?`)[0])}catch{f=l.split(`#`)[0].split(`?`)[0]}if(!f)continue;let p=!1,m=``;if(f.startsWith(`/`))if(e.routeIndex.has(f)||e.routeIndexWithSlash.has(f)||e.routeIndexWithoutSlash.has(f))p=!0;else{let t=e.basePrefix+(f.startsWith(`/`)?f:`/`+f);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))p=!1,m=t;else{let t=e.config.base!==`/`&&f.startsWith(e.config.base||`/`)?f.substring((e.config.base||`/`).length):f,n=t.startsWith(`/`)?t.substring(1):t;m=c.join(e.docsDir,n),p=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>W(m+e))}}else m=c.resolve(c.dirname(o),f),p=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>W(m+e));if(!p){let{bestMatch:n,similarity:r}=J(f,e.linkTree.routes),i=!1,a=e.basePrefix+(f.startsWith(`/`)?f:`/`+f);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(n=a,r=1,i=!0);let c=r>.6||i,u=r>.75&&n!==f||i,p=B(e,`brokenLink`,`high`);p!==`off`&&t.push({file:s,level:p,message:`Broken internal link: "${l}"`,suggestion:c?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:u?async()=>{let e=l.includes(`#`)?`#`+l.split(`#`)[1]:``,t=d?`(${l})`:`href="${l}"`,r=d?`(${n}${e})`:`href="${n}${e}"`,i=x.readFileSync(o,`utf-8`).replace(t,r);x.writeFileSync(o,i),V.delete(o)}:void 0})}}}if(u.size>0){v(m.gray(`Verifying ${u.size} external links...`));let n=new Map;for(let e of u)n.has(e.url)||n.set(e.url,[]),n.get(e.url).push(e.file);let i=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),o),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(n.keys()),l=[];for(let e=0;e<a.length;e+=s){let t=a.slice(e,e+s),n=await Promise.allSettled(t.map(i));l.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of l)if(!i.ok){let a=B(e,`brokenLink`,`warning`);if(a!==`off`){let o=n.get(i.url)||[];for(let n of o)t.push({file:r(c.relative(e.docsDir,n)),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 Z(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:n,locales:i}=e.config.i18n,a=Object.keys(i),o=a.filter(e=>e!==n);for(let i of e.files){let s=r(c.relative(e.docsDir,i)),l=s.split(`/`),u=l[0];if(u===n){let n=l.slice(1).join(`/`);for(let r of o){let a=c.join(e.docsDir,r,n);if(!W(a)){let o=B(e,`missingTranslation`,`warning`);o!==`off`&&t.push({file:s,level:o,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${n}".`,fix:async()=>{let e=c.dirname(a);x.existsSync(e)||x.mkdirSync(e,{recursive:!0}),x.copyFileSync(i,a)}})}}}else if(a.includes(u)){let r=l.slice(1).join(`/`);if(!W(c.join(e.docsDir,n,r))){let a=B(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:s,level:a,message:`Orphaned translation (source missing in "${n}")`,suggestion:`Remove this file or create the source at "${n}/${r}".`,fix:async()=>{x.unlinkSync(i)}})}}}return t}async function Q(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=B(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}=J(r.link,e.linkTree.routes),a=i>.6,o=B(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=B(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}var ge=e({DEFAULT_DOCTOR_CONFIG:()=>z,checkI18n:()=>Z,checkLinks:()=>X,checkMetadata:()=>Y,checkSidebar:()=>Q,doctorAction:()=>_e,doctorInit:()=>$,generateLinkTree:()=>K,loadDoctorConfig:()=>G});async function $(e){let t=S.resolve(e,`doctor.json`);if(u.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{u.writeFileSync(t,JSON.stringify(z,null,2)),y(`Created "doctor.json" with default configuration.`)}catch(e){_(`Failed to create "doctor.json": ${e}`)}}async function _e(e=process.cwd(),t={}){if(t.init){await $(e);return}R();try{let n=await G(e),{format:r}=n.reporting,i=performance.now(),a=await I(`docs`,e),o=S.resolve(e,`docs`);u.existsSync(o)||(r===`pretty`&&_(`Docs dir not found at ${o}`),process.exit(1)),r===`pretty`&&console.log(g(`✦ DOCTOR — Documentation Health Check`,[` ${m.dim(`Docs dir:`)} ${o}`,` ${m.dim(`Reports:`)} ${e}/.boltdocs/`])),r===`pretty`&&v(m.dim(`🔍 Discovering files and routes...`));let s=ie(n.exclude||[]),c=await new l().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=S.relative(o,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!s(t)&&!n}).crawl(o).withPromise();for(let e of c)U.set(e,!0);let d=await K(o,e,a,c),f=a.base||`/`,b=f===`/`?``:f.endsWith(`/`)?f.slice(0,-1):f,x={root:e,docsDir:o,config:a,doctorConfig:n,linkTree:d,files:c,options:t,routeIndex:new Set(d.routes),routeIndexWithSlash:new Set(d.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(d.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:b};r===`pretty`&&v(m.dim(`🧪 Running diagnostic checks in parallel...`));let[C,w,T,E]=await Promise.all([Y(x),X(x),Z(x),Q(x)]),D=[...C,...w,...T,...E];r===`pretty`&&console.log(`\n${re([{label:`Metadata checks ${C.length>0?`— ${C.length} issue${C.length===1?``:`s`}`:`— OK`}`,done:C.length===0},{label:`Link checks ${w.length>0?`— ${w.length} issue${w.length===1?``:`s`}`:`— OK`}`,done:w.length===0},{label:`i18n checks ${T.length>0?`— ${T.length} issue${T.length===1?``:`s`}`:`— OK`}`,done:T.length===0},{label:`Sidebar checks ${E.length>0?`— ${E.length} issue${E.length===1?``:`s`}`:`— OK`}`,done:E.length===0}])}`);let O=0;if(t.fix){for(let e of D)if(e.fix){if(x.doctorConfig.fix.confirmChanges&&!await ee(`Fix issue in "${e.file}": ${e.message}?`))continue;if(x.doctorConfig.fix.backupFiles){let t=S.resolve(x.docsDir,e.file);u.existsSync(t)&&await me(t,S.resolve(x.root,x.doctorConfig.fix.backupPath))}await e.fix(),O++}}let k=((performance.now()-i)/1e3).toFixed(2),A=D.filter(e=>e.level===`high`).length,j=D.filter(e=>e.level===`warning`).length,M=D.filter(e=>e.level===`low`).length,N={summary:{total:D.length,high:A,warning:j,low:M,fixed:O,duration:k},issues:D.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=S.resolve(e,n.reporting.outputFile);u.existsSync(S.dirname(t))||u.mkdirSync(S.dirname(t),{recursive:!0}),u.writeFileSync(t,JSON.stringify(N,null,2))}if(r===`json`)console.log(JSON.stringify(N,null,2));else if(r===`pretty`){let e=D.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(D.length>0){h();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`?m.red:n.level===`warning`?m.yellow:m.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${m.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${m.green(`✅ Fixed automatically`)}`)}console.log(`\n${ne(`📄 ${n}`,e)}`)}h()}if(D.length===0)console.log(te(`✨ Documentation Health Check`,[` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${m.dim(`Scanned ${c.length} file${c.length===1?``:`s`} in ${k}s`)}`]));else{let e=[];A>0&&e.push(m.red(`${A} Critical Error${A===1?``:`s`}`)),j>0&&e.push(m.yellow(`${j} Warning${j===1?``:`s`}`)),M>0&&e.push(m.blue(`${M} Improvement${M===1?``:`s`}`));let t=[...p(e).split(`
|
|
21
|
-
`).map(e=>e.trimStart()),``,m.dim(`Scanned ${c.length} file${c.length===1?``:`s`} in ${k}s`)];console.log(`\n${g(`Diagnosis Results`,t)}\n`),O>0&&y(`Successfully fixed ${O} issues automatically!`),A>0?_(`Please fix the critical errors before building for production.`):y(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&A>0&&process.exit(1),n.reporting.maxWarnings!==-1&&j>n.reporting.maxWarnings&&(r===`pretty`&&_(`Failed: Too many warnings (${j} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){_(`Doctor failed: ${e}`),process.exit(1)}}export{I as a,P as c,F as i,E as l,K as n,le as o,R as r,ce as s,ge as t};
|
package/dist/doctor-jMxWZyLJ.cjs
DELETED
|
@@ -1,21 +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-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`);let n=require(`vite`),r=require(`node:path`);r=e.t(r);let i=require(`fdir`),a=require(`fs`);a=e.t(a);let o=require(`zod`),s=require(`@bdocs/dui`);s=e.t(s);let c=require(`node:fs`);c=e.t(c);let l=require(`path`);l=e.t(l);let u=require(`picomatch`);u=e.t(u);let d=require(`node:module`),f=require(`fastest-levenshtein`);const p=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()});o.z.object({text:o.z.string().max(2e3).optional()});const m=o.z.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),h=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),permissions:o.z.array(m).optional(),remarkPlugins:o.z.array(o.z.any()).optional(),rehypePlugins:o.z.array(o.z.any()).optional(),vitePlugins:o.z.array(o.z.any()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),hooks:o.z.record(o.z.string(),o.z.any()).optional()}),g=o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),description:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),logo:o.z.union([o.z.string(),o.z.object({dark:o.z.string(),light:o.z.string(),alt:o.z.string().optional(),width:o.z.number().optional(),height:o.z.number().optional()})]).optional(),navbar:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string(),items:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string()})).optional()})).optional(),sidebar:o.z.record(o.z.string(),o.z.array(o.z.object({text:o.z.string(),link:o.z.string()}))).optional(),sidebarGroups:o.z.record(o.z.string(),o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),icon:o.z.string().optional()})).optional(),socialLinks:o.z.array(p).optional(),editLink:o.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.z.string().url().optional(),version:o.z.string().max(50).optional(),githubRepo:o.z.string().max(100).optional(),favicon:o.z.string().optional(),tabs:o.z.array(o.z.object({id:o.z.string(),text:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),icon:o.z.string().optional()})).optional(),codeTheme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional()}),_=o.z.union([o.z.string(),o.z.object({rules:o.z.array(o.z.object({userAgent:o.z.string(),allow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional(),disallow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional()})).optional(),sitemaps:o.z.array(o.z.string().url()).optional()})]),v=o.z.object({defaultLocale:o.z.string(),locales:o.z.union([o.z.record(o.z.string(),o.z.string()),o.z.array(o.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.z.record(o.z.string(),o.z.object({label:o.z.string().optional(),direction:o.z.enum([`ltr`,`rtl`]).optional(),htmlLang:o.z.string().optional(),calendar:o.z.string().optional()})).optional()}),y=o.z.object({defaultVersion:o.z.string(),prefix:o.z.string().optional(),versions:o.z.array(o.z.object({label:o.z.string(),path:o.z.string()}))}),b=o.z.object({headers:o.z.record(o.z.string(),o.z.string()).optional(),enableCSP:o.z.boolean().optional(),customHeaders:o.z.record(o.z.string(),o.z.string()).optional()}),x=o.z.object({metatags:o.z.record(o.z.string(),o.z.string()).optional(),indexing:o.z.enum([`all`,`public`]).optional(),thumbnails:o.z.object({background:o.z.string().optional()}).optional()}),S=o.z.object({measurementId:o.z.string().min(1,`Measurement ID is required for GA4`),debug:o.z.boolean().optional(),anonymizeIp:o.z.boolean().optional(),sendPageView:o.z.boolean().optional(),cookieFlags:o.z.string().optional(),autoTrack:o.z.object({pageViews:o.z.boolean().optional(),downloads:o.z.boolean().optional(),externalLinks:o.z.boolean().optional(),search:o.z.boolean().optional()}).optional()}),C=o.z.object({tagId:o.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.z.string().optional(),preview:o.z.string().optional()}),w=o.z.object({ga4:S.optional(),gtm:C.optional()}),T=o.z.object({siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:g.optional(),i18n:v.optional(),versions:y.optional(),plugins:o.z.array(h).optional(),robots:_.optional(),security:b.optional(),seo:x.optional(),integrations:w.optional(),vite:o.z.record(o.z.string(),o.z.unknown()).optional()});function E(e,t,n=process.cwd()){let i=r.default.resolve(n,`.boltdocs`);c.default.existsSync(i)||c.default.mkdirSync(i,{recursive:!0});let a=e.i18n?Object.keys(e.i18n.locales):[],o=e.versions?e.versions.versions.map(e=>e.path):[],s=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=o.length>0?o.map(e=>`'${e}'`).join(` | `):`string`,u=[`tsx`,`ts`,`jsx`,`js`],d=``,f=``;for(let e of u){let a=r.default.resolve(n,t,`mdx-components.${e}`);if(c.default.existsSync(a)){let e=r.default.join(n,t,`mdx-components`),a=r.default.relative(i,e).replace(/\\/g,`/`);d=`import type * as MdxComponentsModule from '${a.startsWith(`.`)?a:`./${a}`}'\n`,f=` MdxComponents: typeof MdxComponentsModule`;break}}let p=`// This file is automatically generated by Boltdocs.
|
|
7
|
-
// Do not edit this file manually.
|
|
8
|
-
|
|
9
|
-
${d}declare global {
|
|
10
|
-
namespace Boltdocs {
|
|
11
|
-
interface Types {
|
|
12
|
-
Locale: ${s}
|
|
13
|
-
Version: ${l}${f?`\n${f}`:``}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export {}
|
|
19
|
-
`;c.default.writeFileSync(r.default.resolve(i,`types.d.ts`),p)}function D(e){return e}const O=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function k(e,i=process.cwd()){let a=i,o={docsDir:r.default.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},l={};for(let e of O){let t=r.default.resolve(a,e);if(c.default.existsSync(t))try{let e=await(0,n.loadConfigFromFile)({command:`serve`,mode:`development`},t,a);if(e){l=e.config;break}}catch(t){(0,s.warn)(`Failed to load config from ${e}:`,t)}}let u={title:l.title,description:l.description,logo:l.logo,favicon:l.favicon,navbar:l.navbar,sidebar:l.sidebar,sidebarGroups:l.theme?.sidebarGroups,socialLinks:l.socialLinks,githubRepo:l.githubRepo,tabs:l.tabs,codeTheme:l.codeTheme,communityHelp:l.communityHelp,version:l.version,editLink:l.editLink,...l.theme||{}},d=Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));d.navbar&&=d.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let f={docsDir:r.default.resolve(e),theme:{...o.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=T.safeParse(f);if(!p.success)throw new t._(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
|
|
20
|
-
`)}`);return p.data}async function A(e,t=process.cwd()){let n=await k(e,t);return E(n,e,t),n}const j=(0,d.createRequire)(require(`url`).pathToFileURL(__filename).href);let M=0;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 P(){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 F(){try{return j(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function I(){let e=Date.now();if(e-M<864e5)return;M=e;let t=await F();if(t===`0.0.0`)return;let n=await P();n&&N(n,t)&&console.log(s.updateAvailable(t,n))}const L={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`},exclude:[]};function R(e,t,n){return e.doctorConfig.severity[t]||n}async function z(e,t){c.default.existsSync(t)||c.default.mkdirSync(t,{recursive:!0});let n=r.default.basename(e),i=new Date().toISOString().replace(/[:.]/g,`-`),a=r.default.join(t,`${n}.${i}.bak`);c.default.copyFileSync(e,a)}const B=new Map;function V(e){let n=B.get(e);if(n)return n;let r=(async()=>{let n=await t.u(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return B.set(e,r),r}const H=new Map;function U(e){if(H.has(e))return H.get(e);let t=!1;try{t=c.default.existsSync(e)&&c.default.statSync(e).isFile()}catch{t=!1}return H.set(e,t),t}async function W(e){let t=r.default.resolve(e,`doctor.json`);if(c.default.existsSync(t))try{let e=JSON.parse(c.default.readFileSync(t,`utf-8`));return{...L,...e,checks:{...L.checks,...e.checks,metadata:{...L.checks.metadata,...e.checks?.metadata},links:{...L.checks.links,...e.checks?.links},i18n:{...L.checks.i18n,...e.checks?.i18n}},fix:{...L.fix,...e.fix},reporting:{...L.reporting,...e.reporting},severity:{...L.severity,...e.severity},exclude:[...L.exclude,...e.exclude||[]]}}catch(e){(0,s.warn)(`Failed to parse doctor.json: ${e}`)}return L}async function G(e,n=process.cwd(),a,o){let s=r.default.resolve(n,`.boltdocs`);c.default.existsSync(s)||c.default.mkdirSync(s,{recursive:!0});let l=o;l||=await new i.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=a?.base||`/docs`,d=[];for(let n=0;n<l.length;n+=100){let i=l.slice(n,n+100),a=await Promise.all(i.map(async n=>{let i=r.default.isAbsolute(n)?n:r.default.resolve(e,n),a=r.default.relative(e,i),{data:o}=await V(i),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.i(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return c.default.writeFileSync(r.default.resolve(s,`link-tree.json`),JSON.stringify(f,null,2)),f}function K(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 q=new Map;function J(e,t){if(q.has(e))return q.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=K(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return q.set(e,a),a}async function Y(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:i,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.l(r.default.relative(e.docsDir,c));try{let{raw:r,data:u}=await V(c);if(r.trim().startsWith(`---`)&&r.split(`---`).length>=3&&Object.keys(u).length===0){let t=R(e,`malformedFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=t.v.safeParse(u);if(!d.success){let t=R(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)n.push({file:l,level:t,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let t of f)if(u[t]===void 0){let r=R(e,`missingMetadata`,`warning`);r!==`off`&&n.push({file:l,level:r,message:`Missing required frontmatter field: "${t}".`,suggestion:`Add the "${t}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let t=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of t)if(u[r]&&isNaN(Date.parse(String(u[r])))){let t=R(e,`invalidFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Invalid date format in field "${r}": "${u[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<i){let r=R(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,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 r=R(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let r=s.get(t)||[];r.push(l),s.set(t,r)}if(u.description&&String(u.description).length<o){let t=R(e,`shortMetadata`,`low`);t!==`off`&&n.push({file:l,level:t,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(t){let r=R(e,`malformedFrontmatter`,`high`);r!==`off`&&n.push({file:l,level:r,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}for(let[t,r]of s.entries())if(r.length>1){let i=R(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)n.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return n}async function X(e){let n=[],{internal:i,external:a,ignore:o,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!i&&!a&&!e.options.checkExternal)return n;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let s of e.files){let l=t.l(r.default.relative(e.docsDir,s)),{content:u}=await V(s),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||o.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(a||e.options.checkExternal)&&f.add({url:u,file:s});continue}if(!i||/^(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=r.default.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>U(h+e))}}else h=r.default.resolve(r.default.dirname(s),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>U(h+e));if(!m){let{bestMatch:t,similarity:r}=J(p,e.linkTree.routes),i=!1,a=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(t=a,r=1,i=!0);let o=r>.6||i,f=r>.75&&t!==p||i,m=R(e,`brokenLink`,`high`);m!==`off`&&n.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:o?`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}"`,r=d?`(${t}${e})`:`href="${t}${e}"`,i=c.default.readFileSync(s,`utf-8`).replace(n,r);c.default.writeFileSync(s,i),B.delete(s)}:void 0})}}}if(f.size>0){(0,s.info)(s.colors.gray(`Verifying ${f.size} external links...`));let i=new Map;for(let e of f)i.has(e.url)||i.set(e.url,[]),i.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(i.keys()),c=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(a));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let a of c)if(!a.ok){let o=R(e,`brokenLink`,`warning`);if(o!==`off`){let s=i.get(a.url)||[];for(let i of s)n.push({file:t.l(r.default.relative(e.docsDir,i)),level:o,message:`Broken external link: "${a.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${a.error||`Status >= 400`}`})}}}return n}async function Z(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:i,locales:a}=e.config.i18n,o=Object.keys(a),s=o.filter(e=>e!==i);for(let a of e.files){let l=t.l(r.default.relative(e.docsDir,a)),u=l.split(`/`),d=u[0];if(d===i){let t=u.slice(1).join(`/`);for(let i of s){let o=r.default.join(e.docsDir,i,t);if(!U(o)){let s=R(e,`missingTranslation`,`warning`);s!==`off`&&n.push({file:l,level:s,message:`Missing translation for locale "${i}"`,suggestion:`Create a version at "${i}/${t}".`,fix:async()=>{let e=r.default.dirname(o);c.default.existsSync(e)||c.default.mkdirSync(e,{recursive:!0}),c.default.copyFileSync(a,o)}})}}}else if(o.includes(d)){let t=u.slice(1).join(`/`);if(!U(r.default.join(e.docsDir,i,t))){let r=R(e,`missingTranslation`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Orphaned translation (source missing in "${i}")`,suggestion:`Remove this file or create the source at "${i}/${t}".`,fix:async()=>{c.default.unlinkSync(a)}})}}}return n}async function Q(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=R(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}=J(r.link,e.linkTree.routes),a=i>.6,o=R(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=R(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 $(e){let t=l.default.resolve(e,`doctor.json`);if(a.default.existsSync(t)){(0,s.warn)(`"doctor.json" already exists at ${e}.`);return}try{a.default.writeFileSync(t,JSON.stringify(L,null,2)),(0,s.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,s.error)(`Failed to create "doctor.json": ${e}`)}}async function ee(e=process.cwd(),t={}){if(t.init){await $(e);return}I();try{let n=await W(e),{format:r}=n.reporting,o=performance.now(),c=await k(`docs`,e),d=l.default.resolve(e,`docs`);a.default.existsSync(d)||(r===`pretty`&&(0,s.error)(`Docs dir not found at ${d}`),process.exit(1)),r===`pretty`&&console.log((0,s.double)(`✦ DOCTOR — Documentation Health Check`,[` ${s.colors.dim(`Docs dir:`)} ${d}`,` ${s.colors.dim(`Reports:`)} ${e}/.boltdocs/`])),r===`pretty`&&(0,s.info)(s.colors.dim(`🔍 Discovering files and routes...`));let f=(0,u.default)(n.exclude||[]),p=await new i.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=l.default.relative(d,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!f(t)&&!n}).crawl(d).withPromise();for(let e of p)H.set(e,!0);let m=await G(d,e,c,p),h=c.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:d,config:c,doctorConfig:n,linkTree:m,files:p,options:t,routeIndex:new Set(m.routes),routeIndexWithSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:g};r===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let[v,y,b,x]=await Promise.all([Y(_),X(_),Z(_),Q(_)]),S=[...v,...y,...b,...x];r===`pretty`&&console.log(`\n${(0,s.tasks)([{label:`Metadata checks ${v.length>0?`— ${v.length} issue${v.length===1?``:`s`}`:`— OK`}`,done:v.length===0},{label:`Link checks ${y.length>0?`— ${y.length} issue${y.length===1?``:`s`}`:`— OK`}`,done:y.length===0},{label:`i18n checks ${b.length>0?`— ${b.length} issue${b.length===1?``:`s`}`:`— OK`}`,done:b.length===0},{label:`Sidebar checks ${x.length>0?`— ${x.length} issue${x.length===1?``:`s`}`:`— OK`}`,done:x.length===0}])}`);let C=0;if(t.fix){for(let e of S)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await(0,s.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=l.default.resolve(_.docsDir,e.file);a.default.existsSync(t)&&await z(t,l.default.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),C++}}let w=((performance.now()-o)/1e3).toFixed(2),T=S.filter(e=>e.level===`high`).length,E=S.filter(e=>e.level===`warning`).length,D=S.filter(e=>e.level===`low`).length,O={summary:{total:S.length,high:T,warning:E,low:D,fixed:C,duration:w},issues:S.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=l.default.resolve(e,n.reporting.outputFile);a.default.existsSync(l.default.dirname(t))||a.default.mkdirSync(l.default.dirname(t),{recursive:!0}),a.default.writeFileSync(t,JSON.stringify(O,null,2))}if(r===`json`)console.log(JSON.stringify(O,null,2));else if(r===`pretty`){let e=S.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(S.length>0){(0,s.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`?s.colors.red:n.level===`warning`?s.colors.yellow:s.colors.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${s.colors.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${s.colors.green(`✅ Fixed automatically`)}`)}console.log(`\n${(0,s.single)(`📄 ${n}`,e)}`)}(0,s.dividerLog)()}if(S.length===0)console.log((0,s.round)(`✨ Documentation Health Check`,[` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${s.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${w}s`)}`]));else{let e=[];T>0&&e.push(s.colors.red(`${T} Critical Error${T===1?``:`s`}`)),E>0&&e.push(s.colors.yellow(`${E} Warning${E===1?``:`s`}`)),D>0&&e.push(s.colors.blue(`${D} Improvement${D===1?``:`s`}`));let t=[...(0,s.bullet)(e).split(`
|
|
21
|
-
`).map(e=>e.trimStart()),``,s.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${w}s`)];console.log(`\n${(0,s.double)(`Diagnosis Results`,t)}\n`),C>0&&(0,s.success)(`Successfully fixed ${C} issues automatically!`),T>0?(0,s.error)(`Please fix the critical errors before building for production.`):(0,s.success)(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&T>0&&process.exit(1),n.reporting.maxWarnings!==-1&&E>n.reporting.maxWarnings&&(r===`pretty`&&(0,s.error)(`Failed: Too many warnings (${E} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,s.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return I}});
|
package/dist/node-BSM4qcDK.cjs
DELETED
|
@@ -1,111 +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-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`),n=require(`./cache-Ba-DZQNH.cjs`),r=require(`./routes-2k3tbUmC.cjs`),i=require(`./doctor-jMxWZyLJ.cjs`);let a=require(`@vitejs/plugin-react`);a=e.t(a);let o=require(`@tailwindcss/vite`);o=e.t(o);let s=require(`vite`),c=require(`node:path`);c=e.t(c);let l=require(`fs`);l=e.t(l);let u=require(`zod`),d=require(`@bdocs/dui`);d=e.t(d);let f=require(`node:fs`);f=e.t(f);let p=require(`node:crypto`);p=e.t(p);let m=require(`vite-plugin-image-optimizer`),h=require(`semver`);h=e.t(h);let g=require(`path`);g=e.t(g);let _=require(`node:module`);_=e.t(_);let v=require(`@mdx-js/rollup`);v=e.t(v);let y=require(`remark-gfm`);y=e.t(y);let b=require(`remark-frontmatter`);b=e.t(b);let x=require(`rehype-slug`);x=e.t(x);let ee=require(`unist-util-visit`),te=require(`shiki/engine/javascript`),ne=require(`shiki/core`),S=require(`@shikijs/themes/github-light`);S=e.t(S);let C=require(`@shikijs/themes/github-dark`);C=e.t(C);let w=require(`@shikijs/themes/tokyo-night`);w=e.t(w);let T=require(`@shikijs/themes/dracula`);T=e.t(T);let E=require(`@shikijs/themes/nord`);E=e.t(E);let D=require(`@shikijs/themes/one-dark-pro`);D=e.t(D);let O=require(`@shikijs/themes/one-light`);O=e.t(O);let k=require(`@shikijs/langs/html`);k=e.t(k);let A=require(`@shikijs/langs/js`);A=e.t(A);let j=require(`@shikijs/langs/ts`);j=e.t(j);let M=require(`@shikijs/langs/tsx`);M=e.t(M);let N=require(`@shikijs/langs/css`);N=e.t(N);let P=require(`@shikijs/langs/json`);P=e.t(P);let F=require(`@shikijs/langs/bash`);F=e.t(F);let I=require(`@shikijs/langs/markdown`);I=e.t(I);let re=require(`@shikijs/langs/mdx`);re=e.t(re);let ie=require(`@shikijs/langs/yaml`);ie=e.t(ie);let ae=require(`@shikijs/langs/rust`);ae=e.t(ae);let oe=require(`@shikijs/langs/toml`);oe=e.t(oe);let L=require(`@shikijs/langs/csv`);L=e.t(L);function se(e){return e.map(e=>({path:e.path,filePath:e.filePath,title:e.title,description:e.description||``,sidebarPosition:e.sidebarPosition,badge:e.badge,icon:e.icon,headings:e.headings||[],_content:e._content||``,_rawContent:e._rawContent||``,locale:e.locale,version:e.version,tab:e.tab,group:e.group,groupTitle:e.groupTitle,groupPosition:e.groupPosition,groupIcon:e.groupIcon,subRouteGroup:e.subRouteGroup,seo:e.seo,date:e.date,lastUpdated:e.lastUpdated,category:e.category,order:e.order,sidebarLabel:e.sidebarLabel,sidebarHidden:e.sidebarHidden,frontmatter:e.frontmatter,slugParts:e.slugParts}))}function ce(e,n){let r=(n.siteUrl||``).replace(/\/$/,``);if(!r)return``;let i=n.seo?.indexing!==`all`&&n.seo?.indexing!==`public`;return`<?xml version="1.0" encoding="UTF-8"?>
|
|
7
|
-
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
8
|
-
${e.filter(e=>e.seo?.noindex||typeof e.seo?.robots==`string`&&e.seo.robots.includes(`noindex`)?!1:(i&&e.seo?.index,!0)).map(e=>` <url>
|
|
9
|
-
<loc>${t.n(`${r}${e.path.startsWith(`/`)?e.path:`/${e.path}`}`)}</loc>
|
|
10
|
-
<changefreq>weekly</changefreq>
|
|
11
|
-
<priority>0.7</priority>
|
|
12
|
-
</url>`).join(`
|
|
13
|
-
`)}
|
|
14
|
-
</urlset>`}function le(e){let t=e.siteUrl||``,n=t?`${t.replace(/\/$/,``)}/sitemap.xml`:``;if(e.seo?.indexing!==`all`&&e.seo?.indexing!==`public`&&e.seo?.indexing)return[`User-agent: *`,`Disallow: /`].filter(Boolean).join(`
|
|
15
|
-
`);if(typeof e.robots==`string`)return e.robots;if(e.robots&&typeof e.robots==`object`){let t=e.robots.rules||[],r=e.robots.sitemaps||[],i=t.map(e=>{let t=`User-agent: ${e.userAgent}\n`;return e.allow&&(Array.isArray(e.allow)?t+=e.allow.map(e=>`Allow: ${e}`).join(`
|
|
16
|
-
`)+`
|
|
17
|
-
`:t+=`Allow: ${e.allow}\n`),e.disallow&&(Array.isArray(e.disallow)?t+=e.disallow.map(e=>`Disallow: ${e}`).join(`
|
|
18
|
-
`)+`
|
|
19
|
-
`:t+=`Disallow: ${e.disallow}\n`),t.trim()}).join(`
|
|
20
|
-
|
|
21
|
-
`),a=[...n?[n]:[],...r].map(e=>`Sitemap: ${e}`).join(`
|
|
22
|
-
`);return`${i}${a?`\n\n${a}`:``}`}return[`User-agent: *`,`Allow: /`,``,n?`Sitemap: ${n}`:``].filter(Boolean).join(`
|
|
23
|
-
`)}function ue(e){return`<!doctype html>
|
|
24
|
-
<html lang="en">
|
|
25
|
-
<head>
|
|
26
|
-
<meta charset="UTF-8" />
|
|
27
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
28
|
-
<title>${e.theme?.title||`Boltdocs`}</title>
|
|
29
|
-
</head>
|
|
30
|
-
<body>
|
|
31
|
-
<div id="root"></div>
|
|
32
|
-
</body>
|
|
33
|
-
</html>`}function de(e,t){(!e||!e.includes(`<body`)||!e.includes(`<head`))&&(e=ue(t));let n=t.theme,r=n?.title||`Boltdocs`;if(typeof r==`object`){let e=t.i18n?.defaultLocale||``;r=r[e]||Object.values(r)[0]||`Boltdocs`}let i=n?.description||``;if(typeof i==`object`){let e=t.i18n?.defaultLocale||``;i=i[e]||Object.values(i)[0]||``}let a=n?.favicon;!a&&n?.logo&&(a=typeof n.logo==`string`?n.logo:n.logo.light||n.logo.dark);let o=[a?`<link rel="icon" href="${a}">`:``,`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,`<meta property="og:type" content="website">`,`<meta name="twitter:card" content="summary_large_image">`,`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,`<meta name="generator" content="Boltdocs">`].filter(Boolean).join(`
|
|
34
|
-
`);e=e.includes(`<title>`)?e.replace(/<title>.*?<\/title>/,`<title>${r}</title>`):e.replace(`</head>`,` <title>${r}</title>\n </head>`);let s=``;if(t.integrations?.ga4){let e=t.integrations.ga4;if(process.env.NODE_ENV===`production`||e.debug){let t=e.anonymizeIp?`gtag('set', 'ip', true);`:``,n=e.sendPageView===!1?`{send_page_view: false}`:`{}`,r=e.cookieFlags?`, {'cookie_flags': '${e.cookieFlags}'}`:``;s=`
|
|
35
|
-
<!-- Google tag (gtag.js) - ${e.measurementId} -->
|
|
36
|
-
<script async src="https://www.googletagmanager.com/gtag/js?id=${e.measurementId}"><\/script>
|
|
37
|
-
<script>
|
|
38
|
-
window.dataLayer = window.dataLayer || [];
|
|
39
|
-
function gtag(){dataLayer.push(arguments);}
|
|
40
|
-
gtag('js', new Date());
|
|
41
|
-
${t}
|
|
42
|
-
gtag('config', '${e.measurementId}', ${n}${r});
|
|
43
|
-
<\/script>
|
|
44
|
-
`}}let c=``,l=``;if(t.integrations?.gtm){let e=t.integrations.gtm;if(process.env.NODE_ENV===`production`){let t=e.dataLayerName||`dataLayer`;c=`
|
|
45
|
-
<!-- Google Tag Manager -->
|
|
46
|
-
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
47
|
-
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
48
|
-
j=d.createElement(s),dl=l!='${t}'?'&l='+l:'';j.async=true;j.src=
|
|
49
|
-
'https://www.googletagmanager.com/gtm.js?id='+i+dl+'${e.preview?`>m_preview=${e.preview}`:``}';f.parentNode.insertBefore(j,f);
|
|
50
|
-
})(window,document,'script','${t}','${e.tagId}');<\/script>
|
|
51
|
-
<!-- End Google Tag Manager -->
|
|
52
|
-
`,l=`
|
|
53
|
-
<!-- Google Tag Manager (noscript) -->
|
|
54
|
-
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=${e.tagId}"
|
|
55
|
-
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
56
|
-
<!-- End Google Tag Manager (noscript) -->
|
|
57
|
-
`}}return e=e.replace(`</head>`,` ${o}\n
|
|
58
|
-
<script>
|
|
59
|
-
(function() {
|
|
60
|
-
try {
|
|
61
|
-
var stored = localStorage.getItem("boltdocs-theme");
|
|
62
|
-
var isDark =
|
|
63
|
-
stored === "dark" ||
|
|
64
|
-
(stored !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
65
|
-
document.documentElement.classList.toggle("dark", isDark);
|
|
66
|
-
document.documentElement.dataset.theme = isDark ? "dark" : "light";
|
|
67
|
-
} catch (e) {}
|
|
68
|
-
})();
|
|
69
|
-
<\/script>
|
|
70
|
-
\n${s}${c} </head>`),l&&(e=e.replace(/<body([^>]*)>/,`<body$1>\n${l}`)),!e.includes(`src/main`)&&!e.includes(`virtual:boltdocs-entry`)&&(e=e.replace(`</body>`,` <script type="module">import "virtual:boltdocs-entry";<\/script>
|
|
71
|
-
</body>`)),e}var R=class e extends Error{pluginName;constructor(t,n){super(`[plugin:${t}] ${n}`),this.name=`PluginError`,this.pluginName=t,Object.setPrototypeOf(this,e.prototype)}},z=class e extends R{constructor(t,n){super(t,`Validation failed: ${n}`),this.name=`PluginValidationError`,Object.setPrototypeOf(this,e.prototype)}},fe=class e extends R{constructor(t,n){super(t,`Compatibility error: ${n}`),this.name=`PluginCompatibilityError`,Object.setPrototypeOf(this,e.prototype)}},B=class e extends R{constructor(t,n){super(t,`Missing required permission: '${n}'`),this.name=`PluginPermissionError`,Object.setPrototypeOf(this,e.prototype)}},pe=class e extends R{hookName;constructor(t,n,r){super(t,`Error in hook '${n}': ${r.message}`),this.name=`PluginHookError`,this.hookName=n,this.stack=r.stack,Object.setPrototypeOf(this,e.prototype)}},me=class{data=new Map;getNamespaceKey(e,t){return`${e}:${t}`}get(e,t){let n=this.getNamespaceKey(e,t),r=this.data.get(n);if(r!==void 0)return typeof r==`object`&&r?JSON.parse(JSON.stringify(r)):r}set(e,t,n){let r=this.getNamespaceKey(e,t),i=typeof n==`object`&&n?JSON.parse(JSON.stringify(n)):n;this.data.set(r,i)}has(e,t){let n=this.getNamespaceKey(e,t);return this.data.has(n)}};const he=i.g.extend({version:u.z.string().optional(),boltdocsVersion:u.z.string().optional(),permissions:u.z.array(u.z.string()).optional(),hooks:u.z.object({beforeBuild:u.z.function().optional(),afterBuild:u.z.function().optional(),beforeDev:u.z.function().optional(),afterDev:u.z.function().optional(),configResolved:u.z.function().optional(),buildEnd:u.z.function().optional()}).optional()});function ge(e,t){let n=[],r=new Set;for(let i of e){let e=he.safeParse(i);if(!e.success)throw new z(i.name||`unknown`,e.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `));let a=e.data;if(r.has(a.name))throw new z(a.name,`Duplicate plugin name detected`);if(r.add(a.name),a.boltdocsVersion&&!h.default.satisfies(t,a.boltdocsVersion))throw new fe(a.name,`Plugin expects Boltdocs version ${a.boltdocsVersion}, but current is ${t}`);if(a.components){for(let[e,t]of Object.entries(a.components))if((t.includes(`..`)||g.default.isAbsolute(t))&&t.includes(`..`))throw new z(a.name,`Component '${e}' has an invalid path: traversal sequences are not allowed.`)}n.push(a)}return n}function V(e,t){return e.permissions?e.permissions.includes(t):!1}var H=class e{static checkPermission(e,t){if(!V(e,t))throw new B(e.name,t)}static getSanitizedCapabilities(e){return{remarkPlugins:V(e,`mdx:remark`)?e.remarkPlugins:[],rehypePlugins:V(e,`mdx:rehype`)?e.rehypePlugins:[],vitePlugins:V(e,`vite:config`)?e.vitePlugins:[],components:V(e,`components`)?e.components:{}}}static async executeWithIsolation(t,n,r,i){try{return e.checkPermission(t,n),await i()}catch(e){if(e instanceof B){(0,d.warn)(`Skipping hook '${r}' for plugin '${t.name}': ${e.message}`);return}throw e}}},_e=class{plugins;config;store;constructor(e,t){this.plugins=e,this.config=t,this.store=new me}async runHook(e,...t){let n=this.getSortedPlugins();for(let r of n){if(!r.hooks?.[e])continue;let n=this.createContext(r),i=e.toLowerCase().includes(`build`),a=e.toLowerCase().includes(`dev`),o=i?`hooks:build`:a?`hooks:dev`:void 0;try{o?await H.executeWithIsolation(r,o,e,()=>r.hooks[e](n,...t)):await r.hooks[e](n,...t)}catch(t){let i=new pe(r.name,e,t instanceof Error?t:Error(String(t)));n.logger.error(i)}}}getSortedPlugins(){let e=this.plugins.filter(e=>e.enforce===`pre`),t=this.plugins.filter(e=>!e.enforce),n=this.plugins.filter(e=>e.enforce===`post`);return[...e,...t,...n]}createContext(e){return{config:Object.freeze({...this.config}),meta:{name:e.name,version:e.version,boltdocsVersion:e.boltdocsVersion},store:{get:(e,t)=>this.store.get(e,t),set:(e,t,n)=>this.store.set(e,t,n),has:(e,t)=>this.store.has(e,t)},logger:this.createLogger(e.name)}}createLogger(e){let t=`[plugin:${e}]`;return{info:e=>d.info(`${t} ${e}`),warn:e=>d.warn(`${t} ${e}`),error:e=>{d.error(`${t} ${e instanceof Error?e.message:e}`)},debug:e=>d.debug(`${t} ${e}`)}}};function ve(e){return e}function U(e){return typeof e==`string`?[e]:Array.isArray(e)?e.flatMap(U):e&&typeof e==`object`?Object.values(e).flatMap(U):[]}const ye=new Set([`title`,`description`,`permalink`,`sidebarPosition`,`sidebarLabel`,`sidebarHidden`,`hidden`,`category`,`order`,`badge`,`icon`,`date`,`lastUpdated`,`groupTitle`,`groupPosition`,`seo`]);function be(e){let t=[];for(let n of e){let e=``;n.frontmatter&&(e=U(Object.entries(n.frontmatter).filter(([e])=>!ye.has(e)).map(([e,t])=>t)).join(` `));let r=e?`${n._content||``} ${e}`:n._content||``;if(t.push({id:n.path,title:n.title,content:r,url:n.path,display:n.groupTitle?`${n.groupTitle} > ${n.title}`:n.title,locale:n.locale,version:n.version}),n.headings)for(let e of n.headings)t.push({id:`${n.path}#${e.id}`,title:e.text,content:`${e.text} in ${n.title}`,url:`${n.path}#${e.id}`,display:`${n.title} > ${e.text}`,locale:n.locale,version:n.version})}return t}function W(e,n,r=!1){let i=g.default.resolve(process.cwd(),`index.css`),a=l.default.existsSync(i)?`import './index.css';`:``,o=n?.plugins?.flatMap(e=>Object.entries(e.components||{}))||[],s=o.map(([e,n])=>`import * as _comp_${e} from '${t.l(n)}';
|
|
72
|
-
const ${e} = _comp_${e}.default || _comp_${e}['${e}'] || _comp_${e};`).join(`
|
|
73
|
-
`),c=o.map(([e])=>e).join(`, `),u=g.default.basename(e.docsDir||`docs`),d=g.default.resolve(process.cwd(),e.docsDir||`docs`),f=[`tsx`,`ts`,`jsx`,`js`].map(e=>g.default.resolve(d,`pages-external/index.${e}`)).find(e=>l.default.existsSync(e));return`
|
|
74
|
-
import { ViteReactSSG, createRoutes } from 'boltdocs/client';
|
|
75
|
-
import _routes from 'virtual:boltdocs-routes.ts';
|
|
76
|
-
import _config from 'virtual:boltdocs-config.ts';
|
|
77
|
-
import _user_mdx_components from 'virtual:boltdocs-mdx-components.tsx';
|
|
78
|
-
import _Layout from 'virtual:boltdocs-layout.tsx';
|
|
79
|
-
${a}
|
|
80
|
-
${s}
|
|
81
|
-
${f?`import * as _external_module from '${t.l(f)}';`:``}
|
|
82
|
-
|
|
83
|
-
const mdxModules = import.meta.glob('/${u}/**/*.{md,mdx}', { eager: true });
|
|
84
|
-
|
|
85
|
-
export const createRoot = ViteReactSSG(
|
|
86
|
-
{
|
|
87
|
-
routes: createRoutes({
|
|
88
|
-
routesData: _routes,
|
|
89
|
-
config: _config,
|
|
90
|
-
mdxModules,
|
|
91
|
-
Layout: _Layout,
|
|
92
|
-
${f?`externalPages: _external_module.pages, externalLayout: _external_module.layout,`:``}
|
|
93
|
-
components: { ${c}${c?`, `:``} ...(_user_mdx_components || {}) },
|
|
94
|
-
}),
|
|
95
|
-
},
|
|
96
|
-
({ isClient }) => {
|
|
97
|
-
// Boltdocs initialization hook
|
|
98
|
-
if (isClient) {
|
|
99
|
-
// Client-side initialization
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
);
|
|
103
|
-
`}let G=null,K=null;function xe(){G=null,K=null}function Se(e,n,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.l(c.default.resolve(n,`boltdocs-entry.tsx`)):e.includes(`boltdocs-client.mjs`)||e===`virtual:boltdocs-client`||e===`boltdocs-client`||e===`\0virtual:boltdocs-client.ts`?t.l(c.default.resolve(n,`boltdocs-client.mjs`)):e.startsWith(`virtual:boltdocs-`)?`\0`+e:e.startsWith(`\0virtual:boltdocs-`)?e:null},async load(o){let s=i()?.command===`build`,l=n();if(o.includes(`boltdocs-entry.tsx`)||o===`\0virtual:boltdocs-entry`)return W(e,l,s);if(o.includes(`boltdocs-client.mjs`)||o===`\0virtual:boltdocs-client.ts`||o===`virtual:boltdocs-client`){let e=__dirname,n=e;for(;e!==c.default.parse(e).root;){if(f.default.existsSync(c.default.join(e,`package.json`))&&JSON.parse(f.default.readFileSync(c.default.join(e,`package.json`),`utf-8`)).name===`boltdocs`){n=e;break}e=c.default.dirname(e)}let r=c.default.join(n,`src/client/index.ts`),i=c.default.join(n,`dist/client/index.js`);return`export * from '${t.l(f.default.existsSync(r)?r:i)}';`}if(!o.startsWith(`\0virtual:boltdocs-`))return;let u=o.replace(`\0virtual:boltdocs-`,``).replace(/\.tsx?$/,``);if(u===`routes`){let e=se(await r.t(a,l));return`export default ${JSON.stringify(e,null,2)};`}if(u===`config`){if(G===null){let{loadDirectoryMeta:e}=await Promise.resolve().then(()=>require(`./meta-loader-Cv9O0Pzl.cjs`));G=await e(a)}let e=G,t={base:l?.base,theme:l?.theme,i18n:l?.i18n,versions:l?.versions,siteUrl:l?.siteUrl,integrations:l?.integrations,plugins:l?.plugins?.map(e=>({name:e.name})),directoryMeta:e};return`export default ${JSON.stringify(t,null,2)};`}if(u===`entry`)return W(e,l,s);if(u===`mdx-components`){let e=[`tsx`,`ts`,`jsx`,`js`],n=null;for(let t of e){let e=c.default.resolve(a,`mdx-components.${t}`);if(f.default.existsSync(e)){n=e;break}}if(n){let e=t.l(n);return`import * as components from '${e}';
|
|
104
|
-
const mdxComponents = components.default || components;
|
|
105
|
-
export default mdxComponents;
|
|
106
|
-
export * from '${e}';`}return`export default {};`}if(u===`layout`){let e=[`tsx`,`jsx`],n=null;for(let t of e){let e=c.default.resolve(a,`layout.${t}`);if(f.default.existsSync(e)){n=e;break}}if(n)return`import UserLayout from '${t.l(n)}';
|
|
107
|
-
export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(u===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],n=null;for(let t of e){let e=c.default.resolve(a,`icons.${t}`);if(f.default.existsSync(e)){n=e;break}}return n?`import * as icons from '${t.l(n)}';\nexport default icons;`:`export default {};`}if(u===`search`){if(!K){let e=be(await r.t(a,l));K=`export default ${JSON.stringify(e,null,2)};`}return K}if(u===`client`){let e=__dirname,n=``;for(;e&&e!==c.default.parse(e).root;){let r=c.default.join(e,`src/client/index.ts`),i=c.default.join(e,`dist/client/index.mjs`),a=c.default.join(e,`client/index.ts`);if(f.default.existsSync(r)){n=t.l(r);break}if(f.default.existsSync(i)){n=t.l(i);break}if(f.default.existsSync(a)){n=t.l(a);break}e=c.default.dirname(e)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${__dirname}`);return`export * from '${n}';`}}}}const Ce={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function we(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}const q=new Map;async function Te(e){try{let{data:n}=await t.u(e),r=JSON.stringify(n);return p.default.createHash(`md5`).update(r).digest(`hex`)}catch{return``}}function Ee(e){return q.get(e)}function De(e,t){q.set(e,t)}function Oe(e){q.delete(e)}function J(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function ke(e,n,a,o,s){let l=new Map;return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(o){let u=s();await u?.runHook(`beforeDev`),i.s(e,process.cwd(),a()).catch(e=>{(0,d.error)(`Failed to generate initial link tree:`,e)}),setTimeout(async()=>{try{let{generateRoutes:t}=await Promise.resolve().then(()=>require(`./routes-DP1vmWRj.cjs`)),n=await t(e,a());for(let e of n)if(e.filePath){let t=c.default.relative(process.cwd(),e.filePath).replace(/\\/g,`/`),n=t.startsWith(`/`)?t:`/${t}`;await o.transformRequest(n).catch(()=>{}),await new Promise(e=>setTimeout(e,50))}}catch{}},1e3),o.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(Ce).forEach(([e,n])=>{t.setHeader(e,n)});let r=a();r.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,we(r)),n()}),o.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),o.middlewares.use(async(e,t,n)=>{let r=e.url?.split(`?`)[0]||`/`,i=e.headers.accept||``,s=a(),c=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(r);if(i.includes(`text/html`)&&!c){let n=ue(s);n=de(n,s),n=await o.transformIndexHtml(e.url||`/`,n),t.statusCode=200,t.setHeader(`Content-Type`,`text/html`),t.end(n);return}n()});let f=i.d.map(e=>c.default.resolve(process.cwd(),e)),p=[`tsx`,`jsx`].map(t=>c.default.resolve(e,`layout.${t}`)),m=[`tsx`,`ts`,`jsx`,`js`],h=m.map(t=>c.default.resolve(e,`mdx-components.${t}`)),g=m.map(t=>c.default.resolve(e,`pages-external/index.${t}`)),_=m.map(t=>c.default.resolve(e,`icons.${t}`));o.watcher.add([...f,...h,...p,...g,..._]);let v=async(s,u)=>{try{let f=t.l(s);if(i.d.some(e=>f.endsWith(e))){o.restart();return}if(m.some(e=>f.endsWith(`mdx-components.${e}`))){i.h(a(),e),J(o,`mdx-components.tsx`),o.ws.send({type:`full-reload`});return}if(m.some(e=>f.endsWith(`icons.${e}`))){J(o,`icons.tsx`),o.ws.send({type:`full-reload`});return}if(f.endsWith(`layout.tsx`)||f.endsWith(`layout.jsx`)){J(o,`layout.tsx`),o.ws.send({type:`full-reload`});return}if(f.includes(`/pages-external/`)||f.includes(`\\pages-external\\`)){J(o,`entry`),o.ws.send({type:`full-reload`});return}if(!f.toLowerCase().startsWith(n.toLowerCase())||!t.s(f))return;if(u===`add`||u===`unlink`){u===`unlink`&&Oe(s),r.n(),xe();let t=a();i.h(t,e),J(o,`config`),J(o,`routes`),J(o,`search`),i.s(e,process.cwd(),t).catch(e=>{(0,d.error)(`Failed to update link tree:`,e)}),o.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:t?.theme,i18n:t?.i18n,versions:t?.versions,siteUrl:t?.siteUrl}}),o.ws.send({type:`full-reload`});return}l.has(f)&&clearTimeout(l.get(f)),l.set(f,setTimeout(async()=>{l.delete(f);try{let n=Ee(s),i=await Te(s);De(s,i),r.r(s),n!==void 0&&n!==i&&(J(o,`routes`),J(o,`search`));let a=t.l(c.default.relative(e,s)),l=o.moduleGraph.getModulesByFile(f);if(l)for(let e of l)o.moduleGraph.invalidateModule(e);o.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:f,relPath:a}})}catch(e){(0,d.error)(`HMR error processing content change:`,e)}},150))}catch(e){(0,d.error)(`HMR error during ${u} event:`,e)}};o.watcher.on(`add`,e=>v(e,`add`)),o.watcher.on(`unlink`,e=>v(e,`unlink`)),o.watcher.on(`change`,e=>v(e,`change`)),await u?.runHook(`afterDev`)},handleHotUpdate({file:e,server:r}){let i=t.l(e);if(i.toLowerCase().startsWith(n.toLowerCase())&&t.s(i))return[]}}}const Y=_.createRequire(require(`url`).pathToFileURL(__filename).href);function Ae(e){let t=c.default.dirname(e);for(;t&&t!==c.default.dirname(t);){let e=c.default.join(t,`package.json`);if(f.default.existsSync(e))return e;t=c.default.dirname(t)}return null}function je(e){let t=e.split(`/`);return e.startsWith(`@`)?{packageName:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}:{packageName:t[0],subpath:t.slice(1).join(`/`)}}function X(e,t=Y){try{let{packageName:n,subpath:r}=je(e),i;try{i=t.resolve(n+`/package.json`)}catch{i=Ae(t.resolve(n))||``}if(!i)throw Error(`Could not find package.json for ${n}`);let a=c.default.dirname(i),o=JSON.parse(f.default.readFileSync(i,`utf-8`)),s=``,l=r?`./`+r:`.`;if(o.exports){let e=o.exports[l]||o.exports[r];e&&(s=typeof e==`string`?e:e.import||e.default||e.require||e)}if(!s&&!r&&(s=o.module||o.main||`index.js`),typeof s==`object`&&(s=s.import||s.default||s.require||``),s){let e=c.default.resolve(a,s);if(f.default.existsSync(e))return e}}catch{}return t.resolve(e)}function Me(){let e=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],n=[],r=Y;try{let e=c.default.join(process.cwd(),`node_modules/boltdocs/package.json`);if(f.default.existsSync(e)){let t=f.default.realpathSync(e);r=_.createRequire(t)}else r=_.createRequire(c.default.join(process.cwd(),`package.json`))}catch{}for(let t of e)try{let e=``;e=t===`@bdocs/ssg`||t===`react-router-dom`||t===`react-helmet-async`?X(t,r):r.resolve(t),e&&n.push(f.default.realpathSync(e))}catch{}if(r!==Y)for(let t of e)try{let e=``;e=t===`@bdocs/ssg`||t===`react-router-dom`||t===`react-helmet-async`?X(t,Y):Y.resolve(t),e&&n.push(f.default.realpathSync(e))}catch{}for(let e of[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]){try{n.push(f.default.realpathSync(r.resolve(e)))}catch{}if(r!==Y)try{n.push(f.default.realpathSync(Y.resolve(e)))}catch{}}return Array.from(new Set(n)).map(e=>t.l(e))}function Ne(e={},n){let a=c.default.resolve(process.cwd(),e.docsDir||`docs`),o=t.l(a),l=n,u,d=!1,p,h=[],g=()=>l;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){d=t.command===`build`;let n=!!(t.ssrBuild||t.ssr||e.build?.ssr),o=e.envDir||process.cwd(),u=(0,s.loadEnv)(t.mode,o,``);Object.assign(process.env,u),l||=await i.p(a);let m=(await Promise.resolve().then(()=>require(`./package-DIIrjuWI.cjs`))).version,g=ge(l.plugins||[],m);return l.plugins=g,p=new _e(g,l),h=g.flatMap(e=>H.getSanitizedCapabilities(e).vitePlugins||[]),d&&await p.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`flat`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=ce(se(await r.t(a,l)),l);t&&f.default.writeFileSync(c.default.join(e,`sitemap.xml`),t);let n=le(l);f.default.writeFileSync(c.default.join(e,`robots.txt`),n)}},build:{ssrManifest:d},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:X(`react-router-dom`)},{find:`react-helmet-async`,replacement:X(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:X(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...n?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Me()],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[]}}},configResolved(e){u=e,p?.runHook(`configResolved`,l)},resolveId(e,t,n){let r=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`].find(t=>e===t||e.startsWith(t+`/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,c.default.sep)}/`));if(r&&n?.ssr){let t=e;if(!c.default.isAbsolute(e)){let n=Y;try{let e=c.default.join(process.cwd(),`node_modules/boltdocs/package.json`);if(f.default.existsSync(e)){let t=f.default.realpathSync(e);n=_.createRequire(t)}else n=_.createRequire(c.default.join(process.cwd(),`package.json`))}catch{}try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?X(e,n):n.resolve(e)}catch{try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?X(e,Y):Y.resolve(e)}catch{}}}try{t=f.default.realpathSync(t)}catch{}return{id:t,external:!0}}return null},transformIndexHtml:{order:`pre`,handler(e){return de(e,l)}},async buildEnd(){let{pool:e}=await Promise.resolve().then(()=>require(`./worker-pool-Crbqgw5R.cjs`));await e.terminate()},async closeBundle(){!d||u?.build?.ssr||(await p?.runHook(`afterBuild`),await p?.runHook(`buildEnd`))},configurePreviewServer(e){let t=u?.build?.outDir?c.default.resolve(u.root||process.cwd(),u.build.outDir):c.default.resolve(process.cwd(),`dist`);e.middlewares.use((e,n,r)=>{let i=e.url||`/`,a=i.split(`?`)[0].split(`#`)[0];if(c.default.extname(a))return r();let o=a.replace(/\/$/,``)||`/`,s=c.default.join(t,o,`index.html`);o!==`/`&&f.default.existsSync(s)&&(e.url=`${o}/index.html${i.includes(`?`)?`?${i.split(`?`)[1]}`:``}`),r()})}},Se(e,g,()=>u,a),ke(a,o,g,e=>{l=e},()=>p),{...(0,m.ViteImageOptimizer)({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),apply:`build`},...h]}const Z=new n.r(`mdx`),Pe=[S.default.default||S.default,C.default.default||C.default,w.default.default||w.default,T.default.default||T.default,E.default.default||E.default,D.default.default||D.default,O.default.default||O.default],Fe=[k.default,A.default,j.default,M.default,N.default,P.default,F.default,I.default,re.default,ie.default,ae.default,oe.default,L.default];let Ie=null,Le=null;const Re=()=>(Ie??=(0,te.createJavaScriptRegexEngine)(),Ie),ze=async e=>Le||(Le=(0,ne.createHighlighterCore)({themes:Pe,langs:Fe,engine:Re()}),Le),Be={JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,ELEMENT:`element`,TEXT:`text`,CODE:`code`},Ve={PRE:`pre`,CODE:`code`},Q={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},$={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},He={LIGHT:`github-light`,DARK:`github-dark`},Ue={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},We=(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,$.LINE_NUMBERS)}}},Ge=(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,$.WORD_WRAP)}}},Ke=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[Q.TITLE]=t)}}),qe=()=>({name:`AddLanguageProperty`,pre(e){e.properties[Q.LANG]=this.options.lang||Ue.LANG}});function Je(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 Ye=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:He.LIGHT,dark:He.DARK}}async getHighlighter(){return await ze(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=Je(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||Ue.LANG,meta:{__raw:i,...r},transformers:[We(),Ge(),Ke(),qe()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,t,n){try{let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}catch(t){return console.error(`[ShikiAdapter] Failed to render code:`,t),`<pre class="${$.FALLBACK}"><code>${Xe(e)}</code></pre>`}}};function Xe(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}let Ze=null,Qe;function $e(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(Ze===null||Qe!==t)&&(Ze=new Ye(e),Qe=t),Ze}function et(e){let t=$e(e);return async e=>{let n=await t.getHighlighter();(0,ee.visit)(e,Be.ELEMENT,e=>{if(e.tagName===Ve.PRE&&e.children?.[0]?.type===Be.ELEMENT&&e.children[0].tagName===Ve.CODE){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):Ue.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=r.children?.[0]?.value||``,s=Je(r.properties?.metastring||r.data?.meta||``),c=t.getOptions(a,s),l=``;try{l=n.codeToHtml(o,c)}catch(e){console.error(`[rehypeShiki] Failed to highlight code block:`,e),l=`<pre class="${$.FALLBACK}"><code>${Xe(o)}</code></pre>`}e.properties=e.properties||{},s.title&&(e.properties[Q.TITLE]=s.title),e.properties[Q.HIGHLIGHTED]=`true`,e.properties[Q.HIGHLIGHTED_HTML]=l,e.properties[Q.LANG]=a,e.children=[]}})}}function tt(){return e=>{(0,ee.visit)(e,Be.CODE,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let nt=!1;function rt(e,t=v.default){let n=e?.plugins?.flatMap(e=>H.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>H.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[y.default,b.default,tt,...n],rehypePlugins:[x.default,[et,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){nt||=(await Z.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){let[r]=t.split(`?`);if(!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let a=`${r}:${p.default.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,o=await Z.getAsync(a);if(o)return{code:o,map:null};let s=await i.transform.call(this,e,r,n);return s&&typeof s==`object`&&s.code&&(process.env.NODE_ENV!==`production`&&(s.code+=`
|
|
108
|
-
if (import.meta.hot) {
|
|
109
|
-
import.meta.hot.accept();
|
|
110
|
-
}
|
|
111
|
-
`),Z.set(a,s.code)),s},async buildEnd(){Z.save(),await Z.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}(0,_.createRequire)(require(`url`).pathToFileURL(__filename).href);async function it(e){let t=await i.p(e?.docsDir||`docs`);return[...Ne({...e},t),rt(t)]}async function at(e,t=`development`){let n=await i.p(`docs`,e),r=t===`production`,l=r?{...Ce}:{};return n.security?.enableCSP&&(l[`Content-Security-Policy`]=we(n)),{root:e,mode:t,oxc:{jsx:{development:!r,runtime:`automatic`,importSource:`react`}},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-helmet-async`,`react-router-dom`,`react-fast-compare`,`invariant`,`use-sync-external-store/shim`]},build:{},plugins:[(0,a.default)(),(0,o.default)(),...Ne({docsDir:`docs`,root:e},n),rt(n)],resolve:{alias:[{find:`boltdocs/entry`,replacement:(0,s.normalizePath)(c.default.resolve(e,`boltdocs-entry.tsx`))},{find:`boltdocs/client`,replacement:(0,s.normalizePath)(c.default.resolve(e,`boltdocs-client.mjs`))},{find:`use-sync-external-store/shim/index.js`,replacement:`react`},{find:`use-sync-external-store/shim`,replacement:`react`},{find:`use-sync-external-store`,replacement:`react`}],dedupe:[`react`,`react-dom`]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Me()],optimizeDeps:{include:[`react-fast-compare`,`invariant`,...n.vite?.ssr?.optimizeDeps?.include||[]]},noExternal:[`boltdocs`,/@bdocs\/(?!ssg).*/,`react-aria-components`,`@react-aria/collections`,`@react-aria/utils`]},server:{headers:{...l,...n.vite?.server?.headers},...n.vite?.server},preview:{headers:{...l,...n.vite?.preview?.headers},...n.vite?.preview},...n.vite}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return me}});
|