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
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** —
|
|
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}});
|