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.
Files changed (85) hide show
  1. package/README.md +2 -54
  2. package/dist/banner-3N4Jd_L9.d.ts +100 -0
  3. package/dist/banner-MynZD_Ox.d.cts +100 -0
  4. package/dist/cache-BMUyNiiA.mjs +6 -0
  5. package/dist/cache-CKm45d2w.cjs +6 -0
  6. package/dist/client/index.cjs +782 -443
  7. package/dist/client/index.d.cts +86 -110
  8. package/dist/client/index.d.ts +87 -111
  9. package/dist/client/index.js +773 -439
  10. package/dist/client/mdx.cjs +8 -3
  11. package/dist/client/mdx.d.cts +39 -93
  12. package/dist/client/mdx.d.ts +38 -93
  13. package/dist/client/mdx.js +3 -3
  14. package/dist/client/primitives.cjs +7 -7
  15. package/dist/client/primitives.d.cts +411 -347
  16. package/dist/client/primitives.d.ts +411 -347
  17. package/dist/client/primitives.js +4 -4
  18. package/dist/client/theme/neutral.css +1 -1
  19. package/dist/{docs-layout-BXHV0xw_.cjs → docs-layout-CwCq42Zt.cjs} +95 -178
  20. package/dist/{docs-layout-DwFndmj5.js → docs-layout-Dn6S5g59.js} +99 -163
  21. package/dist/doctor-BArviV8X.cjs +28 -0
  22. package/dist/doctor-CgLA7_Uv.mjs +28 -0
  23. package/dist/{doctor-CrytFkqW.cjs → doctor-DyNUVe96.cjs} +1 -1
  24. package/dist/{routes-DP1vmWRj.cjs → doctor-aN_leTbh.mjs} +1 -1
  25. package/dist/{generator-ClVanhvi.mjs → generator-BHCrLU6h.mjs} +2 -2
  26. package/dist/{generator-CHqxiQhF.cjs → generator-CC2yHzhZ.cjs} +2 -2
  27. package/dist/{icons-dev-3cZMyt8r.cjs → icons-dev-DvJ-hh9x.cjs} +116 -111
  28. package/dist/{icons-dev-Df8OQ481.js → icons-dev-Oju24Wjp.js} +120 -114
  29. package/dist/{image-DtrI2cw3.cjs → image-Ch4-GxdO.cjs} +13 -13
  30. package/dist/{image-jxPb-2iV.js → image-Do8V9PCW.js} +13 -13
  31. package/dist/{mdx-UTTLFWJq.js → mdx-5oeCOFhH.js} +111 -81
  32. package/dist/{mdx-BdWkJTeB.cjs → mdx-BGM7LjW5.cjs} +109 -97
  33. package/dist/node/cli-entry.cjs +3 -1
  34. package/dist/node/cli-entry.mjs +3 -1
  35. package/dist/node/index.cjs +1 -1
  36. package/dist/node/index.d.cts +258 -152
  37. package/dist/node/index.d.mts +258 -150
  38. package/dist/node/index.mjs +1 -1
  39. package/dist/node/routes/worker.cjs +1 -1
  40. package/dist/node/routes/worker.mjs +1 -1
  41. package/dist/node-CefnjllX.cjs +159 -0
  42. package/dist/node-DruKROCt.mjs +159 -0
  43. package/dist/package-CmP_9rJ8.cjs +6 -0
  44. package/dist/{package-K0zsjGIz.mjs → package-DpbnBMR1.mjs} +1 -1
  45. package/dist/parser-B0YtJPDz.mjs +6 -0
  46. package/dist/parser-B7-6PyQz.cjs +6 -0
  47. package/dist/{parser-Aq8LoH-0.cjs → parser-BzB-zCkF.cjs} +1 -1
  48. package/dist/routes-ChS-zgzh.mjs +6 -0
  49. package/dist/routes-DJNJ-rTt.cjs +6 -0
  50. package/dist/routes-DiYC4nD2.cjs +6 -0
  51. package/dist/routes-rKlxFkqq.mjs +6 -0
  52. package/dist/{search-dialog-C7xuvyNk.cjs → search-dialog-BXVoecTx.cjs} +175 -78
  53. package/dist/{search-dialog-BwkDuI9R.cjs → search-dialog-BYhOov4S.cjs} +118 -7
  54. package/dist/{search-dialog-D-DDN7zJ.js → search-dialog-C09riYmx.js} +113 -8
  55. package/dist/{search-dialog-CIQg6k8c.cjs → search-dialog-CUeAfy-8.cjs} +1 -1
  56. package/dist/{search-dialog-BNF10tDl.js → search-dialog-D8gLkhUV.js} +158 -80
  57. package/dist/{search-dialog-BHuIiUC6.js → search-dialog-DHc_8FFX.js} +1 -1
  58. package/dist/{sidebar-CyZS9YOm.d.ts → sidebar-DNq4_ZAa.d.ts} +117 -51
  59. package/dist/{sidebar-CcBkrm06.d.cts → sidebar-Dlkgbxs6.d.cts} +117 -51
  60. package/dist/utils-BYITg7T5.mjs +7 -0
  61. package/dist/utils-Cjmx1hhk.cjs +7 -0
  62. package/dist/worker-pool-CtqklOXq.cjs +6 -0
  63. package/dist/worker-pool-k0DY6k8T.mjs +6 -0
  64. package/package.json +3 -3
  65. package/src/shared/config-utils.ts +4 -0
  66. package/src/shared/types.ts +52 -6
  67. package/dist/cache-Ba-DZQNH.cjs +0 -6
  68. package/dist/cache-BuMZ58L5.mjs +0 -6
  69. package/dist/cards-BakZPTz9.d.ts +0 -30
  70. package/dist/cards-CQn9mXZS.d.cts +0 -30
  71. package/dist/doctor-Be7Ly1oM.mjs +0 -21
  72. package/dist/doctor-jMxWZyLJ.cjs +0 -21
  73. package/dist/node-BSM4qcDK.cjs +0 -111
  74. package/dist/node-BspZN3R2.mjs +0 -111
  75. package/dist/package-DIIrjuWI.cjs +0 -6
  76. package/dist/parser-CdNbqN5y.cjs +0 -6
  77. package/dist/parser-nE792MLO.mjs +0 -6
  78. package/dist/rolldown-runtime-fkIsjY3S.mjs +0 -6
  79. package/dist/routes-2k3tbUmC.cjs +0 -6
  80. package/dist/routes-CpxZIsMM.mjs +0 -6
  81. package/dist/utils-CG65J0Sc.mjs +0 -7
  82. package/dist/utils-CKunkU96.cjs +0 -7
  83. package/dist/worker-pool-CGn7DrLb.mjs +0 -6
  84. package/dist/worker-pool-Crbqgw5R.cjs +0 -6
  85. /package/dist/{meta-loader-CWg2gnbY.mjs → meta-loader-DzwDFtdT.mjs} +0 -0
package/README.md CHANGED
@@ -1,7 +1,3 @@
1
- <p align="center">
2
- <img src="assets/light.svg" width="20%" alt="Boltdocs" />
3
- </p>
4
-
5
1
  <h1 align="center">Boltdocs</h1>
6
2
 
7
3
  <p align="center">
@@ -127,7 +123,7 @@ boltdocs doctor --check-external # Verify external links too
127
123
  - **Broken internal link detection** — finds links pointing to non-existent files
128
124
  - **Missing metadata warnings** — flags pages without titles in frontmatter
129
125
  - **Orphaned translation detection** — identifies missing locale counterparts
130
- - **Performance budgets** — upcoming: set thresholds for build time and bundle size
126
+ - **Performance budgets** — `boltdocs doctor --budget` checks JS/CSS/HTML size, image assets, and build time against configurable thresholds in `doctor.json`
131
127
 
132
128
  ### 🔌 Plugin System
133
129
 
@@ -180,25 +176,6 @@ export default defineConfig({
180
176
 
181
177
  ---
182
178
 
183
- ## Tech Stack
184
-
185
- | Layer | Technology |
186
- |-------|------------|
187
- | **Runtime** | Node.js 18+ |
188
- | **Language** | TypeScript 5.9 |
189
- | **UI Library** | React 19 |
190
- | **Bundler** | Vite 7 / 8 |
191
- | **Styling** | Tailwind CSS v4 |
192
- | **SSG** | `@bdocs/ssg` (built on React Router 7) |
193
- | **MDX** | `@mdx-js/rollup` 3.1 |
194
- | **Syntax Highlighting** | Shiki 3.23 |
195
- | **Search** | FlexSearch 0.8 |
196
- | **CLI** | cac 7 (command-line parser) |
197
- | **Testing** | Vitest |
198
- | **Build System** | Turborepo + pnpm workspaces |
199
-
200
- ---
201
-
202
179
  ## CLI Commands
203
180
 
204
181
  | Command | Description |
@@ -208,36 +185,7 @@ export default defineConfig({
208
185
  | `boltdocs preview` | Preview the production build locally |
209
186
  | `boltdocs doctor` | Run health checks on your documentation |
210
187
  | `boltdocs changelog <file>` | Generate versioned changelog pages from CHANGELOG.md |
211
-
212
- ---
213
-
214
- ## Ecosystem
215
-
216
- | Package | npm | Description |
217
- |---------|-----|-------------|
218
- | **boltdocs** | [npm](https://www.npmjs.com/package/boltdocs) | Core framework (this package) |
219
- | **@bdocs/ssg** | [npm](https://www.npmjs.com/package/@bdocs/ssg) | Standalone SSG engine for React Router |
220
- | **@bdocs/plugin-mermaid** | [npm](https://www.npmjs.com/package/@bdocs/plugin-mermaid) | Mermaid diagram plugin |
221
- | **create-boltdocs** | [npm](https://www.npmjs.com/package/create-boltdocs) | Project scaffolding tool |
222
-
223
- ---
224
-
225
- ## Roadmap
226
-
227
- - [x] Incremental builds
228
- - [ ] RSS / Atom feed
229
- - [ ] Blog (posts, tags, authors, pagination)
230
- - [ ] Drafts / preview mode
231
- - [ ] AI search (semantic RAG)
232
- - [ ] Partial hydration / islands architecture
233
- - [ ] Streaming SSR in dev
234
- - [ ] OpenAPI / Swagger with interactive playground
235
- - [ ] Multi-instance docs
236
- - [ ] Performance budgets in Doctor
237
- - [ ] Preconnect / DNS-prefetch automation
238
- - [ ] Distributed build farm
239
-
240
- See [ROADMAP.md](ROADMAP.md) for details.
188
+ | `boltdocs audit` | Audit plugin dependencies for security warnings |
241
189
 
242
190
  ---
243
191
 
@@ -0,0 +1,100 @@
1
+
2
+ import { T as BoltdocsConfig, a as SidebarItem, d as SidebarMobile, f as SidebarRoot, i as SidebarHeader, l as SidebarLink, n as SidebarContent, p as SidebarSubGroup, r as SidebarGroup, s as SidebarItems, v as ComponentRoute, x as OnThisPageProps } from "./sidebar-DNq4_ZAa.js";
3
+ import { ReactNode } from "react";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/client/components/ui-base/navbar.d.ts
7
+ declare function Navbar(): _$react_jsx_runtime0.JSX.Element;
8
+ //#endregion
9
+ //#region src/client/components/ui-base/sidebar.d.ts
10
+ interface SidebarProps {
11
+ routes: ComponentRoute[];
12
+ config: BoltdocsConfig;
13
+ }
14
+ declare function SidebarMain({
15
+ routes,
16
+ config
17
+ }: SidebarProps): _$react_jsx_runtime0.JSX.Element;
18
+ declare const Sidebar: typeof SidebarMain & {
19
+ Root: typeof SidebarRoot;
20
+ Mobile: typeof SidebarMobile;
21
+ Header: typeof SidebarHeader;
22
+ Content: typeof SidebarContent;
23
+ Group: typeof SidebarGroup;
24
+ Link: typeof SidebarLink;
25
+ SubGroup: typeof SidebarSubGroup;
26
+ Item: typeof SidebarItem;
27
+ Items: typeof SidebarItems;
28
+ };
29
+ //#endregion
30
+ //#region src/client/components/ui-base/on-this-page.d.ts
31
+ declare function OnThisPage({
32
+ headings,
33
+ editLink,
34
+ communityHelp,
35
+ filePath
36
+ }: OnThisPageProps): _$react_jsx_runtime0.JSX.Element | null;
37
+ //#endregion
38
+ //#region src/client/components/ui-base/breadcrumbs.d.ts
39
+ declare function Breadcrumbs(): _$react_jsx_runtime0.JSX.Element | null;
40
+ //#endregion
41
+ //#region src/client/components/ui-base/page-nav.d.ts
42
+ /**
43
+ * Component to display the previous and next page navigation buttons.
44
+ * Enhanced with subtle entrance animations, modern card layout, and hover highlights.
45
+ */
46
+ declare function PageNav(): _$react_jsx_runtime0.JSX.Element | null;
47
+ //#endregion
48
+ //#region src/client/components/ui-base/error-boundary.d.ts
49
+ interface ErrorBoundaryProps {
50
+ children?: ReactNode;
51
+ fallback?: ReactNode;
52
+ }
53
+ declare function ErrorBoundary({
54
+ children,
55
+ fallback
56
+ }: ErrorBoundaryProps): _$react_jsx_runtime0.JSX.Element;
57
+ //#endregion
58
+ //#region src/client/components/ui-base/copy-markdown.d.ts
59
+ interface CopyMarkdownProps {
60
+ content?: string;
61
+ mdxRaw?: string;
62
+ route?: ComponentRoute;
63
+ }
64
+ declare function CopyMarkdown({
65
+ content,
66
+ mdxRaw
67
+ }: CopyMarkdownProps): _$react_jsx_runtime0.JSX.Element | null;
68
+ //#endregion
69
+ //#region src/client/components/ui-base/search-dialog.d.ts
70
+ declare function SearchDialog({
71
+ routes
72
+ }: {
73
+ routes: ComponentRoute[];
74
+ }): _$react_jsx_runtime0.JSX.Element;
75
+ //#endregion
76
+ //#region src/client/components/ui-base/not-found.d.ts
77
+ declare function NotFound(): _$react_jsx_runtime0.JSX.Element;
78
+ //#endregion
79
+ //#region src/client/components/ui-base/banner.d.ts
80
+ interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {
81
+ /**
82
+ * If true, shows a close button to dismiss the banner.
83
+ */
84
+ dismissible?: boolean;
85
+ /**
86
+ * Unique identifier for the banner. If provided and dismissible is true,
87
+ * the dismissed state will be saved in localStorage so it doesn't reappear
88
+ * on subsequent visits.
89
+ */
90
+ id?: string;
91
+ }
92
+ declare function Banner({
93
+ children,
94
+ className,
95
+ dismissible,
96
+ id,
97
+ ...props
98
+ }: BannerProps): _$react_jsx_runtime0.JSX.Element | null;
99
+ //#endregion
100
+ export { ErrorBoundary as a, OnThisPage as c, CopyMarkdown as i, Sidebar as l, NotFound as n, PageNav as o, SearchDialog as r, Breadcrumbs as s, Banner as t, Navbar as u };
@@ -0,0 +1,100 @@
1
+
2
+ import { T as BoltdocsConfig, a as SidebarItem, d as SidebarMobile, f as SidebarRoot, i as SidebarHeader, l as SidebarLink, n as SidebarContent, p as SidebarSubGroup, r as SidebarGroup, s as SidebarItems, v as ComponentRoute, x as OnThisPageProps } from "./sidebar-Dlkgbxs6.cjs";
3
+ import { ReactNode } from "react";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/client/components/ui-base/navbar.d.ts
7
+ declare function Navbar(): _$react_jsx_runtime0.JSX.Element;
8
+ //#endregion
9
+ //#region src/client/components/ui-base/sidebar.d.ts
10
+ interface SidebarProps {
11
+ routes: ComponentRoute[];
12
+ config: BoltdocsConfig;
13
+ }
14
+ declare function SidebarMain({
15
+ routes,
16
+ config
17
+ }: SidebarProps): _$react_jsx_runtime0.JSX.Element;
18
+ declare const Sidebar: typeof SidebarMain & {
19
+ Root: typeof SidebarRoot;
20
+ Mobile: typeof SidebarMobile;
21
+ Header: typeof SidebarHeader;
22
+ Content: typeof SidebarContent;
23
+ Group: typeof SidebarGroup;
24
+ Link: typeof SidebarLink;
25
+ SubGroup: typeof SidebarSubGroup;
26
+ Item: typeof SidebarItem;
27
+ Items: typeof SidebarItems;
28
+ };
29
+ //#endregion
30
+ //#region src/client/components/ui-base/on-this-page.d.ts
31
+ declare function OnThisPage({
32
+ headings,
33
+ editLink,
34
+ communityHelp,
35
+ filePath
36
+ }: OnThisPageProps): _$react_jsx_runtime0.JSX.Element | null;
37
+ //#endregion
38
+ //#region src/client/components/ui-base/breadcrumbs.d.ts
39
+ declare function Breadcrumbs(): _$react_jsx_runtime0.JSX.Element | null;
40
+ //#endregion
41
+ //#region src/client/components/ui-base/page-nav.d.ts
42
+ /**
43
+ * Component to display the previous and next page navigation buttons.
44
+ * Enhanced with subtle entrance animations, modern card layout, and hover highlights.
45
+ */
46
+ declare function PageNav(): _$react_jsx_runtime0.JSX.Element | null;
47
+ //#endregion
48
+ //#region src/client/components/ui-base/error-boundary.d.ts
49
+ interface ErrorBoundaryProps {
50
+ children?: ReactNode;
51
+ fallback?: ReactNode;
52
+ }
53
+ declare function ErrorBoundary({
54
+ children,
55
+ fallback
56
+ }: ErrorBoundaryProps): _$react_jsx_runtime0.JSX.Element;
57
+ //#endregion
58
+ //#region src/client/components/ui-base/copy-markdown.d.ts
59
+ interface CopyMarkdownProps {
60
+ content?: string;
61
+ mdxRaw?: string;
62
+ route?: ComponentRoute;
63
+ }
64
+ declare function CopyMarkdown({
65
+ content,
66
+ mdxRaw
67
+ }: CopyMarkdownProps): _$react_jsx_runtime0.JSX.Element | null;
68
+ //#endregion
69
+ //#region src/client/components/ui-base/search-dialog.d.ts
70
+ declare function SearchDialog({
71
+ routes
72
+ }: {
73
+ routes: ComponentRoute[];
74
+ }): _$react_jsx_runtime0.JSX.Element;
75
+ //#endregion
76
+ //#region src/client/components/ui-base/not-found.d.ts
77
+ declare function NotFound(): _$react_jsx_runtime0.JSX.Element;
78
+ //#endregion
79
+ //#region src/client/components/ui-base/banner.d.ts
80
+ interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {
81
+ /**
82
+ * If true, shows a close button to dismiss the banner.
83
+ */
84
+ dismissible?: boolean;
85
+ /**
86
+ * Unique identifier for the banner. If provided and dismissible is true,
87
+ * the dismissed state will be saved in localStorage so it doesn't reappear
88
+ * on subsequent visits.
89
+ */
90
+ id?: string;
91
+ }
92
+ declare function Banner({
93
+ children,
94
+ className,
95
+ dismissible,
96
+ id,
97
+ ...props
98
+ }: BannerProps): _$react_jsx_runtime0.JSX.Element | null;
99
+ //#endregion
100
+ export { ErrorBoundary as a, OnThisPage as c, CopyMarkdown as i, Sidebar as l, NotFound as n, PageNav as o, SearchDialog as r, Breadcrumbs as s, Banner as t, Navbar as u };
@@ -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{o as e,s as t}from"./utils-BYITg7T5.mjs";import n from"node:path";import r from"node:fs";import i from"node:fs/promises";import a from"node:crypto";import o from"node:zlib";import{promisify as s}from"node:util";import{LRUCache as c}from"lru-cache";const l=i.writeFile,u=i.readFile,d=i.mkdir,f=i.rename,p=s(o.gzip),m=s(o.gunzip),h=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 g=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{let e=await u(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await m(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch(e){if(e.code===`ENOENT`)return}}save(){if(e().noCache||!this.cachePath)return;let t=Object.fromEntries(this.entries),r=JSON.stringify(t),i=this.cachePath,o=this.compress;h.add(async()=>{try{await d(n.dirname(i),{recursive:!0});let e=Buffer.from(r);o&&(e=await p(e));let t=`${i}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(t,e),await f(t,i)}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 h.flush()}},_=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 c({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!e().noCache)try{let e=await u(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch(e){if(e.code===`ENOENT`)return}}save(){if(e().noCache)return;let t=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;h.add(async()=>{try{await d(n.dirname(r),{recursive:!0}),await l(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 m(await u(r))).toString(`utf-8`);return this.memoryCache.set(e,t),{key:e,val:t}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let r=this.index.get(e);if(!r)return null;let i=n.resolve(this.shardsDir,`${r}.gz`);try{let t=(await m(await u(i))).toString(`utf-8`);return this.memoryCache.set(e,t),t}catch(e){return e.code,null}}set(e,t){let r=a.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,r),this.memoryCache.set(e,t);let o=n.resolve(this.shardsDir,`${r}.gz`);h.add(async()=>{try{try{await i.access(o);return}catch{}await d(this.shardsDir,{recursive:!0});let e=await p(Buffer.from(t)),n=`${o}.${a.randomBytes(4).toString(`hex`)}.tmp`;await l(n,e),await f(n,o)}catch{}})}get size(){return this.index.size}async flush(){await h.flush()}};const v=new Map,y=()=>{let t=e();return n.resolve(process.cwd(),t.dir,`cache/parser`)},b=`v2.3`;var x=class{static async get(t){if(e().noCache)return null;try{let e=v.get(t);if(e)return e.data;let i=await r.promises.stat(t),o=y(),s=a.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!==i.mtimeMs||n._v!==b?null:(v.set(t,{data:n.data,mtime:n._mtime}),n.data)}catch{return null}}catch{return null}}static async set(t,i){if(!e().noCache)try{let e=await r.promises.stat(t);v.set(t,{data:i,mtime:e.mtimeMs});let o=y(),s=a.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`),l={_v:b,_mtime:e.mtimeMs,data:i};h.add(async()=>{try{await r.promises.mkdir(o,{recursive:!0}),await r.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){v.delete(e)}static clear(){v.clear();let e=y();if(r.existsSync(e))try{r.rmSync(e,{recursive:!0,force:!0})}catch{}}};export{g as n,_ as r,x as t};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./chunk-CU-zTemE.cjs`),t=require(`./utils-Cjmx1hhk.cjs`);let n=require(`node:path`);n=e.t(n);let r=require(`node:fs`);r=e.t(r);let i=require(`node:fs/promises`);i=e.t(i);let a=require(`node:crypto`);a=e.t(a);let o=require(`node:zlib`);o=e.t(o);let s=require(`node:util`),c=require(`lru-cache`);const l=i.default.writeFile,u=i.default.readFile,d=i.default.mkdir,f=i.default.rename,p=(0,s.promisify)(o.default.gzip),m=(0,s.promisify)(o.default.gunzip),h=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 g=class{entries=new Map;cachePath=null;compress;constructor(e={}){let r=t.o();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.o().noCache&&this.cachePath)try{let e=await u(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await m(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch(e){if(e.code===`ENOENT`)return}}save(){if(t.o().noCache||!this.cachePath)return;let e=Object.fromEntries(this.entries),r=JSON.stringify(e),i=this.cachePath,o=this.compress;h.add(async()=>{try{await d(n.default.dirname(i),{recursive:!0});let e=Buffer.from(r);o&&(e=await p(e));let t=`${i}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(t,e),await f(t,i)}catch{}})}get(e){let n=this.entries.get(e);return!n||t.s(e)!==n.mtime?null:n.data}set(e,n){this.entries.set(e,{data:n,mtime:t.s(e)})}isValid(e){let n=this.entries.get(e);return n?t.s(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 h.flush()}},_=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;constructor(e,r=process.cwd()){let i=t.o();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 c.LRUCache({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!t.o().noCache)try{let e=await u(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch(e){if(e.code===`ENOENT`)return}}save(){if(t.o().noCache)return;let e=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;h.add(async()=>{try{await d(n.default.dirname(r),{recursive:!0}),await l(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 m(await u(r))).toString(`utf-8`);return this.memoryCache.set(e,t),{key:e,val:t}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let r=this.index.get(e);if(!r)return null;let i=n.default.resolve(this.shardsDir,`${r}.gz`);try{let t=(await m(await u(i))).toString(`utf-8`);return this.memoryCache.set(e,t),t}catch(e){return e.code,null}}set(e,t){let r=a.default.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,r),this.memoryCache.set(e,t);let o=n.default.resolve(this.shardsDir,`${r}.gz`);h.add(async()=>{try{try{await i.default.access(o);return}catch{}await d(this.shardsDir,{recursive:!0});let e=await p(Buffer.from(t)),n=`${o}.${a.default.randomBytes(4).toString(`hex`)}.tmp`;await l(n,e),await f(n,o)}catch{}})}get size(){return this.index.size}async flush(){await h.flush()}};const v=new Map,y=()=>{let e=t.o();return n.default.resolve(process.cwd(),e.dir,`cache/parser`)},b=`v2.3`;var x=class{static async get(e){if(t.o().noCache)return null;try{let t=v.get(e);if(t)return t.data;let i=await r.default.promises.stat(e),o=y(),s=a.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!==i.mtimeMs||n._v!==b?null:(v.set(e,{data:n.data,mtime:n._mtime}),n.data)}catch{return null}}catch{return null}}static async set(e,i){if(!t.o().noCache)try{let t=await r.default.promises.stat(e);v.set(e,{data:i,mtime:t.mtimeMs});let o=y(),s=a.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`),l={_v:b,_mtime:t.mtimeMs,data:i};h.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){v.delete(e)}static clear(){v.clear();let e=y();if(r.default.existsSync(e))try{r.default.rmSync(e,{recursive:!0,force:!0})}catch{}}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return x}});