ardo 3.1.0 → 3.2.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 +9 -19
- package/dist/DocPage-CIBiCAxZ.js +1010 -0
- package/dist/DocPage-CIBiCAxZ.js.map +1 -0
- package/dist/assets/src/ui/Breadcrumb.css.ts.vanilla-Dpgq-C_p.css +20 -0
- package/dist/assets/src/ui/DocPage.css.ts.vanilla-CXKuz4U-.css +34 -0
- package/dist/assets/src/ui/Footer.css.ts.vanilla-BSzPIPt4.css +100 -0
- package/dist/assets/src/ui/Header.css.ts.vanilla-8QL0Jzgk.css +156 -0
- package/dist/assets/src/ui/Layout.css.ts.vanilla-Bpx_-gJt.css +67 -0
- package/dist/assets/src/ui/Nav.css.ts.vanilla-CsAQjogy.css +51 -0
- package/dist/assets/src/ui/Sidebar.css.ts.vanilla-D70qXTEr.css +115 -0
- package/dist/assets/src/ui/Toc.css.ts.vanilla-CYqcWgvD.css +52 -0
- package/dist/assets/src/ui/components/ApiItem.css.ts.vanilla-B_DW-1iJ.css +218 -0
- package/dist/assets/src/ui/components/CodeBlock.css.ts.vanilla-lNKqskjQ.css +182 -0
- package/dist/assets/src/ui/components/Container.css.ts.vanilla-CUhRUA9t.css +80 -0
- package/dist/assets/src/ui/components/CopyButton.css.ts.vanilla-DZZ5jgTM.css +24 -0
- package/dist/assets/src/ui/components/Features.css.ts.vanilla-D-pNXM9Q.css +129 -0
- package/dist/assets/src/ui/components/Hero.css.ts.vanilla-DHJVZ6GX.css +134 -0
- package/dist/assets/src/ui/components/Search.css.ts.vanilla-BYpWHzky.css +135 -0
- package/dist/assets/src/ui/components/Steps.css.ts.vanilla-CisaxeNj.css +59 -0
- package/dist/assets/src/ui/components/Tabs.css.ts.vanilla-C4-vJSnf.css +30 -0
- package/dist/assets/src/ui/components/ThemeToggle.css.ts.vanilla---sSUELC.css +22 -0
- package/dist/assets/src/ui/content.css.ts.vanilla-O_RaSPXm.css +106 -0
- package/dist/assets/src/ui/theme/animations.css.ts.vanilla-D6ImVUKy.css +10 -0
- package/dist/assets/src/ui/theme/dark.css.ts.vanilla-2iJgcpbU.css +87 -0
- package/dist/assets/src/ui/theme/light.css.ts.vanilla-CwinfWSf.css +87 -0
- package/dist/assets/src/ui/theme/reset.css.ts.vanilla-0Q3pLjfC.css +34 -0
- package/dist/brand-icons-DLJKqTun.js +59 -0
- package/dist/brand-icons-DLJKqTun.js.map +1 -0
- package/dist/config/index.d.ts +5 -5
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +54 -11
- package/dist/config/index.js.map +1 -1
- package/dist/contract.css-DYvFVCFE.d.ts +105 -0
- package/dist/contract.css-DYvFVCFE.d.ts.map +1 -0
- package/dist/generator-DPtRXxM_.js +1194 -0
- package/dist/generator-DPtRXxM_.js.map +1 -0
- package/dist/icons/index.d.ts +22 -1
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +2 -2
- package/dist/index-BTeHvysI.d.ts +807 -0
- package/dist/index-BTeHvysI.d.ts.map +1 -0
- package/dist/index-DySzkJlC.d.ts +78 -0
- package/dist/index-DySzkJlC.d.ts.map +1 -0
- package/dist/index.d.ts +5 -8
- package/dist/index.js +6 -100
- package/dist/mdx/provider.d.ts +61 -4
- package/dist/mdx/provider.d.ts.map +1 -0
- package/dist/mdx/provider.js +89 -117
- package/dist/mdx/provider.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -41
- package/dist/runtime/index.js +2 -28
- package/dist/sidebar-utils-1Skqle1Q.js +109 -0
- package/dist/sidebar-utils-1Skqle1Q.js.map +1 -0
- package/dist/theme/index.d.ts +201 -182
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +288 -128
- package/dist/theme/index.js.map +1 -1
- package/dist/typedoc/components/index.d.ts +55 -0
- package/dist/typedoc/components/index.d.ts.map +1 -0
- package/dist/typedoc/components/index.js +339 -0
- package/dist/typedoc/components/index.js.map +1 -0
- package/dist/typedoc/index.d.ts +36 -305
- package/dist/typedoc/index.d.ts.map +1 -0
- package/dist/typedoc/index.js +97 -268
- package/dist/typedoc/index.js.map +1 -1
- package/dist/types-BCuJBsJu.d.ts +182 -0
- package/dist/types-BCuJBsJu.d.ts.map +1 -0
- package/dist/types-CTd_mkrv.d.ts +175 -0
- package/dist/types-CTd_mkrv.d.ts.map +1 -0
- package/dist/ui/index.d.ts +2 -178
- package/dist/ui/index.js +3 -95
- package/dist/ui/styles.css +1401 -1335
- package/dist/ui/styles.d.ts +1 -2
- package/dist/ui/styles.js +23 -4
- package/dist/ui-3grzJSsq.js +1314 -0
- package/dist/ui-3grzJSsq.js.map +1 -0
- package/dist/vite/index.d.ts +78 -86
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +2931 -1282
- package/dist/vite/index.js.map +1 -1
- package/package.json +30 -19
- package/dist/Features-D_Pt7zpA.d.ts +0 -615
- package/dist/Search-DOJMNI2T.css +0 -193
- package/dist/Search-DOJMNI2T.css.map +0 -1
- package/dist/Search-VYYG3D43.js +0 -10
- package/dist/Search-VYYG3D43.js.map +0 -1
- package/dist/chunk-4YQE3TNM.js +0 -1
- package/dist/chunk-4YQE3TNM.js.map +0 -1
- package/dist/chunk-AXLJDGQL.js +0 -1
- package/dist/chunk-AXLJDGQL.js.map +0 -1
- package/dist/chunk-CZM5NX27.js +0 -909
- package/dist/chunk-CZM5NX27.js.map +0 -1
- package/dist/chunk-FZP2AVJL.js +0 -43
- package/dist/chunk-FZP2AVJL.js.map +0 -1
- package/dist/chunk-IEPSORG5.js +0 -444
- package/dist/chunk-IEPSORG5.js.map +0 -1
- package/dist/chunk-KUWEUO37.js +0 -1
- package/dist/chunk-KUWEUO37.js.map +0 -1
- package/dist/chunk-NBRHGTR2.js +0 -79
- package/dist/chunk-NBRHGTR2.js.map +0 -1
- package/dist/chunk-PGHUPTGL.js +0 -1035
- package/dist/chunk-PGHUPTGL.js.map +0 -1
- package/dist/chunk-PMS3P4MA.js +0 -43
- package/dist/chunk-PMS3P4MA.js.map +0 -1
- package/dist/chunk-QELSOHIY.js +0 -46
- package/dist/chunk-QELSOHIY.js.map +0 -1
- package/dist/chunk-R2QKY6G3.js +0 -1
- package/dist/chunk-R2QKY6G3.js.map +0 -1
- package/dist/chunk-ZPYQQZ7J.js +0 -210
- package/dist/chunk-ZPYQQZ7J.js.map +0 -1
- package/dist/icons/index.js.map +0 -1
- package/dist/index.css +0 -1290
- package/dist/index.css.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mdx/provider.css +0 -403
- package/dist/mdx/provider.css.map +0 -1
- package/dist/runtime/index.js.map +0 -1
- package/dist/types-CLkHwCch.d.ts +0 -248
- package/dist/ui/index.css +0 -1290
- package/dist/ui/index.css.map +0 -1
- package/dist/ui/index.js.map +0 -1
- package/dist/ui/styles.css.map +0 -1
- package/dist/ui/styles.js.map +0 -1
package/dist/typedoc/index.js
CHANGED
|
@@ -1,276 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import fsSync from "fs";
|
|
1
|
+
import { n as generateApiDocs, t as TypeDocGenerator } from "../generator-DPtRXxM_.js";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fsSync from "node:fs";
|
|
4
|
+
//#region src/typedoc/vite-plugin.ts
|
|
5
|
+
/**
|
|
6
|
+
* Vite plugin for generating API documentation with TypeDoc.
|
|
7
|
+
*/
|
|
9
8
|
function typedocPlugin(options = {}) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
console.log(`[ardo] Generated ${docs.length} API documentation pages in ${duration}ms`);
|
|
40
|
-
hasGenerated = true;
|
|
41
|
-
} catch (error) {
|
|
42
|
-
console.error("[ardo] TypeDoc generation failed:", error);
|
|
43
|
-
throw error;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
name: "ardo:typedoc",
|
|
48
|
-
async buildStart() {
|
|
49
|
-
if (runOnStart && !hasGenerated) {
|
|
50
|
-
await generate();
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
async buildEnd() {
|
|
54
|
-
if (isBuilding && runOnBuild !== false) {
|
|
55
|
-
await generate();
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
configResolved(config2) {
|
|
59
|
-
isBuilding = config2.command === "build";
|
|
60
|
-
},
|
|
61
|
-
async handleHotUpdate({ file }) {
|
|
62
|
-
if (config.watch && config.entryPoints.some((ep) => file.includes(ep))) {
|
|
63
|
-
await generate();
|
|
64
|
-
return [];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
function createTypedocWatcher(config, contentDir, onChange) {
|
|
70
|
-
let watcher = null;
|
|
71
|
-
return {
|
|
72
|
-
async start() {
|
|
73
|
-
if (!config.watch || !config.entryPoints.length) return;
|
|
74
|
-
const entryDir = path.dirname(config.entryPoints[0]);
|
|
75
|
-
try {
|
|
76
|
-
watcher = fsSync.watch(entryDir, { recursive: true }, async (event, filename) => {
|
|
77
|
-
if (filename?.endsWith(".ts") || filename?.endsWith(".tsx")) {
|
|
78
|
-
console.log(`[ardo] Source file changed: ${filename}`);
|
|
79
|
-
await generateApiDocs(config, contentDir);
|
|
80
|
-
onChange?.();
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
} catch {
|
|
84
|
-
console.warn("[ardo] Could not start TypeDoc watcher");
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
stop() {
|
|
88
|
-
if (watcher) {
|
|
89
|
-
watcher.close();
|
|
90
|
-
watcher = null;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// src/typedoc/components/ApiSignature.tsx
|
|
97
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
98
|
-
function ApiSignature({
|
|
99
|
-
name,
|
|
100
|
-
typeParameters,
|
|
101
|
-
parameters,
|
|
102
|
-
returns,
|
|
103
|
-
className = ""
|
|
104
|
-
}) {
|
|
105
|
-
const typeParamsStr = typeParameters?.length ? `<${typeParameters.map((tp) => tp.name).join(", ")}>` : "";
|
|
106
|
-
const paramsStr = parameters?.map((p) => {
|
|
107
|
-
const optional = p.optional ? "?" : "";
|
|
108
|
-
return `${p.name}${optional}: ${p.type}`;
|
|
109
|
-
}).join(", ");
|
|
110
|
-
const returnStr = returns?.type ? `: ${returns.type}` : "";
|
|
111
|
-
return /* @__PURE__ */ jsx("div", { className: `ardo-api-signature ${className}`, children: /* @__PURE__ */ jsx("pre", { className: "ardo-api-signature-code", children: /* @__PURE__ */ jsxs("code", { children: [
|
|
112
|
-
/* @__PURE__ */ jsx("span", { className: "ardo-api-keyword", children: "function" }),
|
|
113
|
-
" ",
|
|
114
|
-
/* @__PURE__ */ jsx("span", { className: "ardo-api-function-name", children: name }),
|
|
115
|
-
typeParamsStr && /* @__PURE__ */ jsx("span", { className: "ardo-api-type-params", children: typeParamsStr }),
|
|
116
|
-
/* @__PURE__ */ jsxs("span", { className: "ardo-api-params", children: [
|
|
117
|
-
"(",
|
|
118
|
-
paramsStr,
|
|
119
|
-
")"
|
|
120
|
-
] }),
|
|
121
|
-
returnStr && /* @__PURE__ */ jsx("span", { className: "ardo-api-return-type", children: returnStr })
|
|
122
|
-
] }) }) });
|
|
9
|
+
const { contentDir = "./content", runOnBuild, runOnStart = true } = options;
|
|
10
|
+
const typedocConfig = createTypedocConfig(options);
|
|
11
|
+
let isBuilding = false;
|
|
12
|
+
let hasGenerated = false;
|
|
13
|
+
const generate = createGenerator({
|
|
14
|
+
contentDir,
|
|
15
|
+
onGenerated() {
|
|
16
|
+
hasGenerated = true;
|
|
17
|
+
},
|
|
18
|
+
typedocConfig
|
|
19
|
+
});
|
|
20
|
+
return {
|
|
21
|
+
name: "ardo:typedoc",
|
|
22
|
+
async buildStart() {
|
|
23
|
+
if (runOnStart && !hasGenerated) await generate();
|
|
24
|
+
},
|
|
25
|
+
async buildEnd() {
|
|
26
|
+
if (isBuilding && runOnBuild !== false) await generate();
|
|
27
|
+
},
|
|
28
|
+
configResolved(resolvedConfig) {
|
|
29
|
+
isBuilding = resolvedConfig.command === "build";
|
|
30
|
+
},
|
|
31
|
+
async handleHotUpdate({ file }) {
|
|
32
|
+
if (shouldRegenerateForFile(file, typedocConfig)) {
|
|
33
|
+
await generate();
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
123
38
|
}
|
|
124
|
-
function
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
/* @__PURE__ */ jsx("tbody", { children: parameters.map((param) => /* @__PURE__ */ jsxs("tr", { children: [
|
|
135
|
-
/* @__PURE__ */ jsxs("td", { children: [
|
|
136
|
-
/* @__PURE__ */ jsx("code", { children: param.name }),
|
|
137
|
-
param.optional && /* @__PURE__ */ jsx("span", { className: "ardo-api-optional", children: "(optional)" })
|
|
138
|
-
] }),
|
|
139
|
-
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("code", { children: param.type }) }),
|
|
140
|
-
/* @__PURE__ */ jsxs("td", { children: [
|
|
141
|
-
param.description,
|
|
142
|
-
param.defaultValue && /* @__PURE__ */ jsxs("span", { className: "ardo-api-default", children: [
|
|
143
|
-
"Default: ",
|
|
144
|
-
/* @__PURE__ */ jsx("code", { children: param.defaultValue })
|
|
145
|
-
] })
|
|
146
|
-
] })
|
|
147
|
-
] }, param.name)) })
|
|
148
|
-
] })
|
|
149
|
-
] });
|
|
39
|
+
function createTypedocConfig(options) {
|
|
40
|
+
const { enabled = true, entryPoints = ["./src/index.ts"], out = "api-reference", excludePrivate = true, excludeInternal = true, ...restConfig } = options;
|
|
41
|
+
return {
|
|
42
|
+
...restConfig,
|
|
43
|
+
enabled,
|
|
44
|
+
entryPoints,
|
|
45
|
+
excludeInternal,
|
|
46
|
+
excludePrivate,
|
|
47
|
+
out
|
|
48
|
+
};
|
|
150
49
|
}
|
|
151
|
-
function
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
/* @__PURE__ */ jsxs("p", { children: [
|
|
155
|
-
/* @__PURE__ */ jsx("code", { children: returns.type }),
|
|
156
|
-
returns.description && /* @__PURE__ */ jsxs("span", { children: [
|
|
157
|
-
" - ",
|
|
158
|
-
returns.description
|
|
159
|
-
] })
|
|
160
|
-
] })
|
|
161
|
-
] });
|
|
50
|
+
function shouldRegenerateForFile(file, config) {
|
|
51
|
+
if (!config.watch) return false;
|
|
52
|
+
return config.entryPoints.some((entryPoint) => file.includes(entryPoint));
|
|
162
53
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
typeParameters: item.typeParameters,
|
|
180
|
-
parameters: item.parameters,
|
|
181
|
-
returns: item.returns
|
|
182
|
-
}
|
|
183
|
-
),
|
|
184
|
-
item.parameters && item.parameters.length > 0 && /* @__PURE__ */ jsx2(ApiParametersTable, { parameters: item.parameters }),
|
|
185
|
-
item.returns && /* @__PURE__ */ jsx2(ApiReturns, { returns: item.returns }),
|
|
186
|
-
item.examples && item.examples.length > 0 && /* @__PURE__ */ jsxs2("div", { className: "ardo-api-examples", children: [
|
|
187
|
-
/* @__PURE__ */ jsx2("h4", { className: "ardo-api-section-title", children: "Examples" }),
|
|
188
|
-
item.examples.map((example, i) => /* @__PURE__ */ jsx2("pre", { className: "ardo-api-example", children: /* @__PURE__ */ jsx2("code", { children: example }) }, i))
|
|
189
|
-
] }),
|
|
190
|
-
item.source && /* @__PURE__ */ jsx2("div", { className: "ardo-api-source", children: item.source.url ? /* @__PURE__ */ jsxs2("a", { href: item.source.url, target: "_blank", rel: "noopener noreferrer", children: [
|
|
191
|
-
item.source.file,
|
|
192
|
-
":",
|
|
193
|
-
item.source.line
|
|
194
|
-
] }) : /* @__PURE__ */ jsxs2("span", { children: [
|
|
195
|
-
item.source.file,
|
|
196
|
-
":",
|
|
197
|
-
item.source.line
|
|
198
|
-
] }) }),
|
|
199
|
-
item.children && item.children.length > 0 && /* @__PURE__ */ jsx2("div", { className: "ardo-api-children", children: item.children.map((child) => /* @__PURE__ */ jsx2(ApiItem, { item: child, level: level + 1 }, child.id)) })
|
|
200
|
-
] });
|
|
54
|
+
function createGenerator(params) {
|
|
55
|
+
const { contentDir, onGenerated, typedocConfig } = params;
|
|
56
|
+
return async () => {
|
|
57
|
+
if (!typedocConfig.enabled) return;
|
|
58
|
+
console.log("[ardo] Generating API documentation with TypeDoc...");
|
|
59
|
+
const startTime = Date.now();
|
|
60
|
+
try {
|
|
61
|
+
const docs = await generateApiDocs(typedocConfig, contentDir);
|
|
62
|
+
const duration = Date.now() - startTime;
|
|
63
|
+
console.log(`[ardo] Generated ${docs.length} API documentation pages in ${duration}ms`);
|
|
64
|
+
onGenerated();
|
|
65
|
+
} catch (error) {
|
|
66
|
+
console.error("[ardo] TypeDoc generation failed:", error);
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
201
70
|
}
|
|
202
|
-
function
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
return /* @__PURE__ */ jsx2("span", { className: `ardo-api-badge ${kindColors[kind] || ""}`, children: kindLabels[kind] });
|
|
71
|
+
function createTypedocWatcher(config, contentDir, onChange) {
|
|
72
|
+
let watcher = null;
|
|
73
|
+
async function regenerateForChangedFile(filename) {
|
|
74
|
+
if (!isSupportedTypedocFile(filename)) return;
|
|
75
|
+
console.log(`[ardo] Source file changed: ${filename}`);
|
|
76
|
+
await generateApiDocs(config, contentDir);
|
|
77
|
+
onChange?.();
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
start() {
|
|
81
|
+
if (!config.watch || config.entryPoints.length === 0) return;
|
|
82
|
+
const entryDir = path.dirname(config.entryPoints[0]);
|
|
83
|
+
try {
|
|
84
|
+
watcher = fsSync.watch(entryDir, { recursive: true }, (_event, filename) => {
|
|
85
|
+
if (filename != null) regenerateForChangedFile(filename);
|
|
86
|
+
});
|
|
87
|
+
} catch {
|
|
88
|
+
console.warn("[ardo] Could not start TypeDoc watcher");
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
stop() {
|
|
92
|
+
if (watcher != null) {
|
|
93
|
+
watcher.close();
|
|
94
|
+
watcher = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
230
98
|
}
|
|
231
|
-
function
|
|
232
|
-
|
|
233
|
-
const {
|
|
234
|
-
extends: extendsTypes,
|
|
235
|
-
implements: implementsTypes,
|
|
236
|
-
extendedBy,
|
|
237
|
-
implementedBy
|
|
238
|
-
} = hierarchy;
|
|
239
|
-
if (!extendsTypes?.length && !implementsTypes?.length && !extendedBy?.length && !implementedBy?.length) {
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
return /* @__PURE__ */ jsxs2("div", { className: "ardo-api-hierarchy", children: [
|
|
243
|
-
/* @__PURE__ */ jsx2("h4", { className: "ardo-api-section-title", children: "Hierarchy" }),
|
|
244
|
-
/* @__PURE__ */ jsxs2("ul", { className: "ardo-api-hierarchy-list", children: [
|
|
245
|
-
extendsTypes?.map((type) => /* @__PURE__ */ jsxs2("li", { children: [
|
|
246
|
-
/* @__PURE__ */ jsx2("span", { className: "ardo-api-hierarchy-label", children: "extends" }),
|
|
247
|
-
/* @__PURE__ */ jsx2("code", { children: type })
|
|
248
|
-
] }, type)),
|
|
249
|
-
implementsTypes?.map((type) => /* @__PURE__ */ jsxs2("li", { children: [
|
|
250
|
-
/* @__PURE__ */ jsx2("span", { className: "ardo-api-hierarchy-label", children: "implements" }),
|
|
251
|
-
/* @__PURE__ */ jsx2("code", { children: type })
|
|
252
|
-
] }, type)),
|
|
253
|
-
extendedBy?.map((type) => /* @__PURE__ */ jsxs2("li", { children: [
|
|
254
|
-
/* @__PURE__ */ jsx2("span", { className: "ardo-api-hierarchy-label", children: "extended by" }),
|
|
255
|
-
/* @__PURE__ */ jsx2("code", { children: type })
|
|
256
|
-
] }, type)),
|
|
257
|
-
implementedBy?.map((type) => /* @__PURE__ */ jsxs2("li", { children: [
|
|
258
|
-
/* @__PURE__ */ jsx2("span", { className: "ardo-api-hierarchy-label", children: "implemented by" }),
|
|
259
|
-
/* @__PURE__ */ jsx2("code", { children: type })
|
|
260
|
-
] }, type))
|
|
261
|
-
] })
|
|
262
|
-
] });
|
|
99
|
+
function isSupportedTypedocFile(filename) {
|
|
100
|
+
return filename.endsWith(".ts") || filename.endsWith(".tsx");
|
|
263
101
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
ApiKindBadge,
|
|
268
|
-
ApiParametersTable,
|
|
269
|
-
ApiReturns,
|
|
270
|
-
ApiSignature,
|
|
271
|
-
TypeDocGenerator,
|
|
272
|
-
createTypedocWatcher,
|
|
273
|
-
generateApiDocs,
|
|
274
|
-
typedocPlugin
|
|
275
|
-
};
|
|
102
|
+
//#endregion
|
|
103
|
+
export { TypeDocGenerator, createTypedocWatcher, generateApiDocs, typedocPlugin };
|
|
104
|
+
|
|
276
105
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/typedoc/vite-plugin.ts","../../src/typedoc/components/ApiSignature.tsx","../../src/typedoc/components/ApiItem.tsx"],"sourcesContent":["import type { Plugin } from \"vite\"\nimport type { TypeDocConfig } from \"./types\"\nimport { generateApiDocs } from \"./generator\"\nimport path from \"path\"\nimport fsSync from \"fs\"\nimport type { FSWatcher } from \"fs\"\n\nexport interface TypeDocPluginOptions extends Partial<TypeDocConfig> {\n /**\n * Content directory where markdown files are stored\n * @default './content'\n */\n contentDir?: string\n\n /**\n * Run TypeDoc on every build\n * @default false in dev, true in build\n */\n runOnBuild?: boolean\n\n /**\n * Run TypeDoc on startup\n * @default true\n */\n runOnStart?: boolean\n}\n\n/**\n * Vite plugin for generating API documentation with TypeDoc.\n *\n * @example\n * ```ts\n * // Minimal config (uses ./src/index.ts as entry point)\n * typedocPlugin()\n *\n * // Custom entry point\n * typedocPlugin({ entryPoints: ['./lib/index.ts'] })\n *\n * // Full config\n * typedocPlugin({\n * entryPoints: ['./src/index.ts'],\n * out: 'api-reference',\n * excludePrivate: true,\n * })\n * ```\n */\nexport function typedocPlugin(options: TypeDocPluginOptions = {}): Plugin {\n const {\n contentDir = \"./content\",\n runOnBuild,\n runOnStart = true,\n // TypeDoc config with defaults\n enabled = true,\n entryPoints = [\"./src/index.ts\"],\n out = \"api-reference\",\n excludePrivate = true,\n excludeInternal = true,\n ...restConfig\n } = options\n\n const config: TypeDocConfig = {\n enabled,\n entryPoints,\n out,\n excludePrivate,\n excludeInternal,\n ...restConfig,\n }\n\n let isBuilding = false\n let hasGenerated = false\n\n async function generate() {\n if (!config.enabled) return\n\n console.log(\"[ardo] Generating API documentation with TypeDoc...\")\n const startTime = Date.now()\n\n try {\n const docs = await generateApiDocs(config, contentDir)\n const duration = Date.now() - startTime\n console.log(`[ardo] Generated ${docs.length} API documentation pages in ${duration}ms`)\n hasGenerated = true\n } catch (error) {\n console.error(\"[ardo] TypeDoc generation failed:\", error)\n throw error\n }\n }\n\n return {\n name: \"ardo:typedoc\",\n\n async buildStart() {\n if (runOnStart && !hasGenerated) {\n await generate()\n }\n },\n\n async buildEnd() {\n if (isBuilding && runOnBuild !== false) {\n await generate()\n }\n },\n\n configResolved(config) {\n isBuilding = config.command === \"build\"\n },\n\n async handleHotUpdate({ file }) {\n // Regenerate on source file changes in watch mode\n if (config.watch && config.entryPoints.some((ep) => file.includes(ep))) {\n await generate()\n return []\n }\n },\n }\n}\n\nexport function createTypedocWatcher(\n config: TypeDocConfig,\n contentDir: string,\n onChange?: () => void\n): { start: () => Promise<void>; stop: () => void } {\n let watcher: FSWatcher | null = null\n\n return {\n async start() {\n if (!config.watch || !config.entryPoints.length) return\n\n const entryDir = path.dirname(config.entryPoints[0])\n\n try {\n watcher = fsSync.watch(entryDir, { recursive: true }, async (event, filename) => {\n if (filename?.endsWith(\".ts\") || filename?.endsWith(\".tsx\")) {\n console.log(`[ardo] Source file changed: ${filename}`)\n await generateApiDocs(config, contentDir)\n onChange?.()\n }\n })\n } catch {\n console.warn(\"[ardo] Could not start TypeDoc watcher\")\n }\n },\n\n stop() {\n if (watcher) {\n watcher.close()\n watcher = null\n }\n },\n }\n}\n","import type { ApiDocParameter, ApiDocReturn, ApiDocTypeParameter } from \"../types\"\n\ninterface ApiSignatureProps {\n name: string\n typeParameters?: ApiDocTypeParameter[]\n parameters?: ApiDocParameter[]\n returns?: ApiDocReturn\n className?: string\n}\n\nexport function ApiSignature({\n name,\n typeParameters,\n parameters,\n returns,\n className = \"\",\n}: ApiSignatureProps) {\n const typeParamsStr = typeParameters?.length\n ? `<${typeParameters.map((tp) => tp.name).join(\", \")}>`\n : \"\"\n\n const paramsStr = parameters\n ?.map((p) => {\n const optional = p.optional ? \"?\" : \"\"\n return `${p.name}${optional}: ${p.type}`\n })\n .join(\", \")\n\n const returnStr = returns?.type ? `: ${returns.type}` : \"\"\n\n return (\n <div className={`ardo-api-signature ${className}`}>\n <pre className=\"ardo-api-signature-code\">\n <code>\n <span className=\"ardo-api-keyword\">function</span>{\" \"}\n <span className=\"ardo-api-function-name\">{name}</span>\n {typeParamsStr && <span className=\"ardo-api-type-params\">{typeParamsStr}</span>}\n <span className=\"ardo-api-params\">({paramsStr})</span>\n {returnStr && <span className=\"ardo-api-return-type\">{returnStr}</span>}\n </code>\n </pre>\n </div>\n )\n}\n\ninterface ApiParametersTableProps {\n parameters: ApiDocParameter[]\n}\n\nexport function ApiParametersTable({ parameters }: ApiParametersTableProps) {\n if (!parameters.length) return null\n\n return (\n <div className=\"ardo-api-parameters\">\n <h4 className=\"ardo-api-section-title\">Parameters</h4>\n <table className=\"ardo-api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n {parameters.map((param) => (\n <tr key={param.name}>\n <td>\n <code>{param.name}</code>\n {param.optional && <span className=\"ardo-api-optional\">(optional)</span>}\n </td>\n <td>\n <code>{param.type}</code>\n </td>\n <td>\n {param.description}\n {param.defaultValue && (\n <span className=\"ardo-api-default\">\n Default: <code>{param.defaultValue}</code>\n </span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\ninterface ApiReturnsProps {\n returns: ApiDocReturn\n}\n\nexport function ApiReturns({ returns }: ApiReturnsProps) {\n return (\n <div className=\"ardo-api-returns\">\n <h4 className=\"ardo-api-section-title\">Returns</h4>\n <p>\n <code>{returns.type}</code>\n {returns.description && <span> - {returns.description}</span>}\n </p>\n </div>\n )\n}\n","import type { ApiDocItem, ApiDocKind } from \"../types\"\nimport { ApiSignature, ApiParametersTable, ApiReturns } from \"./ApiSignature\"\nimport type { JSX } from \"react\"\n\ninterface ApiItemProps {\n item: ApiDocItem\n level?: number\n}\n\nexport function ApiItem({ item, level = 2 }: ApiItemProps) {\n const HeadingTag = `h${Math.min(level, 6)}` as keyof JSX.IntrinsicElements\n\n return (\n <div className={`ardo-api-item ardo-api-item-${item.kind}`} id={item.id}>\n <HeadingTag className=\"ardo-api-item-title\">\n <ApiKindBadge kind={item.kind} />\n <span className=\"ardo-api-item-name\">{item.name}</span>\n <a href={`#${item.id}`} className=\"ardo-api-anchor\">\n #\n </a>\n </HeadingTag>\n\n {item.description && <p className=\"ardo-api-item-description\">{item.description}</p>}\n\n {item.signature && (\n <ApiSignature\n name={item.name}\n typeParameters={item.typeParameters}\n parameters={item.parameters}\n returns={item.returns}\n />\n )}\n\n {item.parameters && item.parameters.length > 0 && (\n <ApiParametersTable parameters={item.parameters} />\n )}\n\n {item.returns && <ApiReturns returns={item.returns} />}\n\n {item.examples && item.examples.length > 0 && (\n <div className=\"ardo-api-examples\">\n <h4 className=\"ardo-api-section-title\">Examples</h4>\n {item.examples.map((example, i) => (\n <pre key={i} className=\"ardo-api-example\">\n <code>{example}</code>\n </pre>\n ))}\n </div>\n )}\n\n {item.source && (\n <div className=\"ardo-api-source\">\n {item.source.url ? (\n <a href={item.source.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {item.source.file}:{item.source.line}\n </a>\n ) : (\n <span>\n {item.source.file}:{item.source.line}\n </span>\n )}\n </div>\n )}\n\n {item.children && item.children.length > 0 && (\n <div className=\"ardo-api-children\">\n {item.children.map((child) => (\n <ApiItem key={child.id} item={child} level={level + 1} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\ninterface ApiKindBadgeProps {\n kind: ApiDocKind\n}\n\nexport function ApiKindBadge({ kind }: ApiKindBadgeProps) {\n const kindLabels: Record<ApiDocKind, string> = {\n module: \"Module\",\n namespace: \"Namespace\",\n class: \"Class\",\n interface: \"Interface\",\n type: \"Type\",\n enum: \"Enum\",\n function: \"Function\",\n variable: \"Variable\",\n property: \"Property\",\n method: \"Method\",\n accessor: \"Accessor\",\n constructor: \"Constructor\",\n parameter: \"Parameter\",\n typeParameter: \"Type Parameter\",\n enumMember: \"Enum Member\",\n }\n\n const kindColors: Record<string, string> = {\n class: \"ardo-api-badge-class\",\n interface: \"ardo-api-badge-interface\",\n type: \"ardo-api-badge-type\",\n enum: \"ardo-api-badge-enum\",\n function: \"ardo-api-badge-function\",\n method: \"ardo-api-badge-method\",\n property: \"ardo-api-badge-property\",\n }\n\n return <span className={`ardo-api-badge ${kindColors[kind] || \"\"}`}>{kindLabels[kind]}</span>\n}\n\ninterface ApiHierarchyProps {\n hierarchy: ApiDocItem[\"hierarchy\"]\n}\n\nexport function ApiHierarchy({ hierarchy }: ApiHierarchyProps) {\n if (!hierarchy) return null\n\n const {\n extends: extendsTypes,\n implements: implementsTypes,\n extendedBy,\n implementedBy,\n } = hierarchy\n\n if (\n !extendsTypes?.length &&\n !implementsTypes?.length &&\n !extendedBy?.length &&\n !implementedBy?.length\n ) {\n return null\n }\n\n return (\n <div className=\"ardo-api-hierarchy\">\n <h4 className=\"ardo-api-section-title\">Hierarchy</h4>\n <ul className=\"ardo-api-hierarchy-list\">\n {extendsTypes?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">extends</span>\n <code>{type}</code>\n </li>\n ))}\n {implementsTypes?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">implements</span>\n <code>{type}</code>\n </li>\n ))}\n {extendedBy?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">extended by</span>\n <code>{type}</code>\n </li>\n ))}\n {implementedBy?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">implemented by</span>\n <code>{type}</code>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n"],"mappings":"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","names":["config","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/typedoc/vite-plugin.ts"],"sourcesContent":["import type { Plugin } from \"vite\"\n\nimport fsSync, { type FSWatcher } from \"node:fs\"\nimport path from \"node:path\"\n\nimport type { TypeDocConfig } from \"./types\"\n\nimport { generateApiDocs } from \"./generator\"\n\nexport type TypeDocPluginOptions = {\n /**\n * Content directory where markdown files are stored\n * @default './content'\n */\n contentDir?: string\n\n /**\n * Run TypeDoc on every build\n * @default false in dev, true in build\n */\n runOnBuild?: boolean\n\n /**\n * Run TypeDoc on startup\n * @default true\n */\n runOnStart?: boolean\n} & Partial<TypeDocConfig>\n\n/**\n * Vite plugin for generating API documentation with TypeDoc.\n */\nexport function typedocPlugin(options: TypeDocPluginOptions = {}): Plugin {\n const { contentDir = \"./content\", runOnBuild, runOnStart = true } = options\n const typedocConfig = createTypedocConfig(options)\n\n let isBuilding = false\n let hasGenerated = false\n const generate = createGenerator({\n contentDir,\n onGenerated() {\n hasGenerated = true\n },\n typedocConfig,\n })\n\n return {\n name: \"ardo:typedoc\",\n\n async buildStart() {\n if (runOnStart && !hasGenerated) {\n await generate()\n }\n },\n\n async buildEnd() {\n if (isBuilding && runOnBuild !== false) {\n await generate()\n }\n },\n\n configResolved(resolvedConfig) {\n isBuilding = resolvedConfig.command === \"build\"\n },\n\n async handleHotUpdate({ file }) {\n if (shouldRegenerateForFile(file, typedocConfig)) {\n await generate()\n return []\n }\n },\n }\n}\n\nfunction createTypedocConfig(options: TypeDocPluginOptions): TypeDocConfig {\n const {\n enabled = true,\n entryPoints = [\"./src/index.ts\"],\n out = \"api-reference\",\n excludePrivate = true,\n excludeInternal = true,\n ...restConfig\n } = options\n\n return {\n ...restConfig,\n enabled,\n entryPoints,\n excludeInternal,\n excludePrivate,\n out,\n }\n}\n\nfunction shouldRegenerateForFile(file: string, config: TypeDocConfig): boolean {\n if (!config.watch) {\n return false\n }\n\n return config.entryPoints.some((entryPoint) => file.includes(entryPoint))\n}\n\nfunction createGenerator(params: {\n contentDir: string\n onGenerated: () => void\n typedocConfig: TypeDocConfig\n}): () => Promise<void> {\n const { contentDir, onGenerated, typedocConfig } = params\n\n return async () => {\n if (!typedocConfig.enabled) {\n return\n }\n\n console.log(\"[ardo] Generating API documentation with TypeDoc...\")\n const startTime = Date.now()\n\n try {\n const docs = await generateApiDocs(typedocConfig, contentDir)\n const duration = Date.now() - startTime\n console.log(`[ardo] Generated ${docs.length} API documentation pages in ${duration}ms`)\n onGenerated()\n } catch (error) {\n console.error(\"[ardo] TypeDoc generation failed:\", error)\n throw error\n }\n }\n}\n\nexport function createTypedocWatcher(\n config: TypeDocConfig,\n contentDir: string,\n onChange?: () => void\n): { start: () => void; stop: () => void } {\n let watcher: FSWatcher | null = null\n\n async function regenerateForChangedFile(filename: string): Promise<void> {\n if (!isSupportedTypedocFile(filename)) {\n return\n }\n\n console.log(`[ardo] Source file changed: ${filename}`)\n await generateApiDocs(config, contentDir)\n onChange?.()\n }\n\n return {\n start() {\n if (!config.watch || config.entryPoints.length === 0) {\n return\n }\n\n const entryDir = path.dirname(config.entryPoints[0])\n try {\n watcher = fsSync.watch(entryDir, { recursive: true }, (_event, filename) => {\n if (filename != null) {\n void regenerateForChangedFile(filename)\n }\n })\n } catch {\n console.warn(\"[ardo] Could not start TypeDoc watcher\")\n }\n },\n\n stop() {\n if (watcher != null) {\n watcher.close()\n watcher = null\n }\n },\n }\n}\n\nfunction isSupportedTypedocFile(filename: string): boolean {\n return filename.endsWith(\".ts\") || filename.endsWith(\".tsx\")\n}\n"],"mappings":";;;;;;;AAgCA,SAAgB,cAAc,UAAgC,EAAE,EAAU;CACxE,MAAM,EAAE,aAAa,aAAa,YAAY,aAAa,SAAS;CACpE,MAAM,gBAAgB,oBAAoB,QAAQ;CAElD,IAAI,aAAa;CACjB,IAAI,eAAe;CACnB,MAAM,WAAW,gBAAgB;EAC/B;EACA,cAAc;GACZ,eAAe;;EAEjB;EACD,CAAC;CAEF,OAAO;EACL,MAAM;EAEN,MAAM,aAAa;GACjB,IAAI,cAAc,CAAC,cACjB,MAAM,UAAU;;EAIpB,MAAM,WAAW;GACf,IAAI,cAAc,eAAe,OAC/B,MAAM,UAAU;;EAIpB,eAAe,gBAAgB;GAC7B,aAAa,eAAe,YAAY;;EAG1C,MAAM,gBAAgB,EAAE,QAAQ;GAC9B,IAAI,wBAAwB,MAAM,cAAc,EAAE;IAChD,MAAM,UAAU;IAChB,OAAO,EAAE;;;EAGd;;AAGH,SAAS,oBAAoB,SAA8C;CACzE,MAAM,EACJ,UAAU,MACV,cAAc,CAAC,iBAAiB,EAChC,MAAM,iBACN,iBAAiB,MACjB,kBAAkB,MAClB,GAAG,eACD;CAEJ,OAAO;EACL,GAAG;EACH;EACA;EACA;EACA;EACA;EACD;;AAGH,SAAS,wBAAwB,MAAc,QAAgC;CAC7E,IAAI,CAAC,OAAO,OACV,OAAO;CAGT,OAAO,OAAO,YAAY,MAAM,eAAe,KAAK,SAAS,WAAW,CAAC;;AAG3E,SAAS,gBAAgB,QAID;CACtB,MAAM,EAAE,YAAY,aAAa,kBAAkB;CAEnD,OAAO,YAAY;EACjB,IAAI,CAAC,cAAc,SACjB;EAGF,QAAQ,IAAI,sDAAsD;EAClE,MAAM,YAAY,KAAK,KAAK;EAE5B,IAAI;GACF,MAAM,OAAO,MAAM,gBAAgB,eAAe,WAAW;GAC7D,MAAM,WAAW,KAAK,KAAK,GAAG;GAC9B,QAAQ,IAAI,oBAAoB,KAAK,OAAO,8BAA8B,SAAS,IAAI;GACvF,aAAa;WACN,OAAO;GACd,QAAQ,MAAM,qCAAqC,MAAM;GACzD,MAAM;;;;AAKZ,SAAgB,qBACd,QACA,YACA,UACyC;CACzC,IAAI,UAA4B;CAEhC,eAAe,yBAAyB,UAAiC;EACvE,IAAI,CAAC,uBAAuB,SAAS,EACnC;EAGF,QAAQ,IAAI,+BAA+B,WAAW;EACtD,MAAM,gBAAgB,QAAQ,WAAW;EACzC,YAAY;;CAGd,OAAO;EACL,QAAQ;GACN,IAAI,CAAC,OAAO,SAAS,OAAO,YAAY,WAAW,GACjD;GAGF,MAAM,WAAW,KAAK,QAAQ,OAAO,YAAY,GAAG;GACpD,IAAI;IACF,UAAU,OAAO,MAAM,UAAU,EAAE,WAAW,MAAM,GAAG,QAAQ,aAAa;KAC1E,IAAI,YAAY,MACd,yBAA8B,SAAS;MAEzC;WACI;IACN,QAAQ,KAAK,yCAAyC;;;EAI1D,OAAO;GACL,IAAI,WAAW,MAAM;IACnB,QAAQ,OAAO;IACf,UAAU;;;EAGf;;AAGH,SAAS,uBAAuB,UAA2B;CACzD,OAAO,SAAS,SAAS,MAAM,IAAI,SAAS,SAAS,OAAO"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
//#region src/typedoc/types.d.ts
|
|
2
|
+
type TypeDocConfig = {
|
|
3
|
+
/**
|
|
4
|
+
* Enable TypeDoc API documentation generation
|
|
5
|
+
* @default false
|
|
6
|
+
*/
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Entry points for TypeDoc (source files or directories)
|
|
10
|
+
*/
|
|
11
|
+
entryPoints: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Path to tsconfig.json
|
|
14
|
+
*/
|
|
15
|
+
tsconfig?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Output directory for generated markdown files (relative to srcDir)
|
|
18
|
+
* @default 'api'
|
|
19
|
+
*/
|
|
20
|
+
out?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Include README in the API docs
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
readme?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Plugin options passed to TypeDoc
|
|
28
|
+
*/
|
|
29
|
+
plugin?: string[];
|
|
30
|
+
/**
|
|
31
|
+
* Exclude patterns
|
|
32
|
+
*/
|
|
33
|
+
exclude?: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Exclude external modules
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
excludeExternals?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Exclude private members
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
excludePrivate?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Exclude protected members
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
excludeProtected?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Exclude internal members (marked with \@internal)
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
excludeInternal?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Sort order for members
|
|
56
|
+
* @default ['source-order']
|
|
57
|
+
*/
|
|
58
|
+
sort?: Array<"alphabetical" | "enum-value-ascending" | "enum-value-descending" | "required-first" | "source-order" | "visibility">;
|
|
59
|
+
/**
|
|
60
|
+
* Category order for organizing API docs
|
|
61
|
+
*/
|
|
62
|
+
categoryOrder?: string[];
|
|
63
|
+
/**
|
|
64
|
+
* Group order for organizing API docs
|
|
65
|
+
*/
|
|
66
|
+
groupOrder?: string[];
|
|
67
|
+
/**
|
|
68
|
+
* Watch mode for development
|
|
69
|
+
* @default false
|
|
70
|
+
*/
|
|
71
|
+
watch?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Custom sidebar configuration for API docs
|
|
74
|
+
*/
|
|
75
|
+
sidebar?: {
|
|
76
|
+
/**
|
|
77
|
+
* Title for the API section in sidebar
|
|
78
|
+
* @default 'API Reference'
|
|
79
|
+
*/
|
|
80
|
+
title?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Position in sidebar (lower = higher in list)
|
|
83
|
+
* @default 100
|
|
84
|
+
*/
|
|
85
|
+
position?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Whether the API section should be collapsed by default
|
|
88
|
+
* @default false
|
|
89
|
+
*/
|
|
90
|
+
collapsed?: boolean;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Transform options for generated markdown
|
|
94
|
+
*/
|
|
95
|
+
markdown?: {
|
|
96
|
+
/**
|
|
97
|
+
* Include breadcrumbs in generated pages
|
|
98
|
+
* @default true
|
|
99
|
+
*/
|
|
100
|
+
breadcrumbs?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Include type hierarchy for classes/interfaces
|
|
103
|
+
* @default true
|
|
104
|
+
*/
|
|
105
|
+
hierarchy?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Include source links to GitHub/GitLab
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
110
|
+
sourceLinks?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Base URL for source links
|
|
113
|
+
*/
|
|
114
|
+
sourceBaseUrl?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Use code blocks for type signatures
|
|
117
|
+
* @default true
|
|
118
|
+
*/
|
|
119
|
+
codeBlocks?: boolean;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
type ApiDocItem = {
|
|
123
|
+
id: string;
|
|
124
|
+
name: string;
|
|
125
|
+
kind: ApiDocKind;
|
|
126
|
+
description?: string;
|
|
127
|
+
signature?: string;
|
|
128
|
+
parameters?: ApiDocParameter[];
|
|
129
|
+
returns?: ApiDocReturn;
|
|
130
|
+
examples?: string[];
|
|
131
|
+
tags?: ApiDocTag[];
|
|
132
|
+
children?: ApiDocItem[];
|
|
133
|
+
source?: ApiDocSource;
|
|
134
|
+
typeParameters?: ApiDocTypeParameter[];
|
|
135
|
+
hierarchy?: ApiDocHierarchy;
|
|
136
|
+
};
|
|
137
|
+
type ApiDocKind = "accessor" | "class" | "constructor" | "enum" | "enumMember" | "function" | "interface" | "method" | "module" | "namespace" | "parameter" | "property" | "type" | "typeParameter" | "variable";
|
|
138
|
+
type ApiDocParameter = {
|
|
139
|
+
name: string;
|
|
140
|
+
type: string;
|
|
141
|
+
description?: string;
|
|
142
|
+
optional?: boolean;
|
|
143
|
+
defaultValue?: string;
|
|
144
|
+
};
|
|
145
|
+
type ApiDocReturn = {
|
|
146
|
+
type: string;
|
|
147
|
+
description?: string;
|
|
148
|
+
};
|
|
149
|
+
type ApiDocTag = {
|
|
150
|
+
name: string;
|
|
151
|
+
value?: string;
|
|
152
|
+
};
|
|
153
|
+
type ApiDocSource = {
|
|
154
|
+
file: string;
|
|
155
|
+
line: number;
|
|
156
|
+
url?: string;
|
|
157
|
+
};
|
|
158
|
+
type ApiDocTypeParameter = {
|
|
159
|
+
name: string;
|
|
160
|
+
constraint?: string;
|
|
161
|
+
default?: string;
|
|
162
|
+
description?: string;
|
|
163
|
+
};
|
|
164
|
+
type ApiDocHierarchy = {
|
|
165
|
+
extends?: string[];
|
|
166
|
+
implements?: string[];
|
|
167
|
+
extendedBy?: string[];
|
|
168
|
+
implementedBy?: string[];
|
|
169
|
+
};
|
|
170
|
+
type GeneratedApiDoc = {
|
|
171
|
+
path: string;
|
|
172
|
+
content: string;
|
|
173
|
+
frontmatter: {
|
|
174
|
+
title: string;
|
|
175
|
+
description?: string;
|
|
176
|
+
sidebar_position?: number;
|
|
177
|
+
sidebar?: boolean;
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
//#endregion
|
|
181
|
+
export { ApiDocReturn as a, ApiDocTypeParameter as c, ApiDocParameter as i, GeneratedApiDoc as l, ApiDocItem as n, ApiDocSource as o, ApiDocKind as r, ApiDocTag as s, ApiDocHierarchy as t, TypeDocConfig as u };
|
|
182
|
+
//# sourceMappingURL=types-BCuJBsJu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-BCuJBsJu.d.ts","names":[],"sources":["../src/typedoc/types.ts"],"mappings":";KAAY,aAAA;EAAA;;;;EAKV,OAAA;EAKA;;;EAAA,WAAA;EAsBA;;;EAjBA,QAAA;EAwCA;;;;EAlCA,GAAA;EA+DA;;;;EAzDA,MAAA;EAqFE;;;EAhFF,MAAA;EAuGE;;;EAlGF,OAAA;EA6GY;AAId;;;EA3GE,gBAAA;EAiHa;;;;EA3Gb,cAAA;EAiHiB;;;;EA3GjB,gBAAA;EAiGA;;;;EA3FA,eAAA;EA+FA;;;;EAzFA,IAAA,GAAO,KAAA;EA4FP;;;EAhFA,aAAA;EAkFA;;;EA7EA,UAAA;EA+EA;;;;EAzEA,KAAA;EA4EoB;;;EAvEpB,OAAA;IAwFU;;;;IAnFR,KAAA;IAqFF;;;;IA/EE,QAAA;IAkFU;AAGd;;;IA/EI,SAAA;EAAA;EAoFQ;;;EA9EV,QAAA;IAgFK;AAGP;;;IA9EI,WAAA;IA+EF;;;;IAzEE,SAAA;IA8EQ;;;;IAxER,WAAA;IA0EF;;;IArEE,aAAA;IAuES;AAGb;;;IApEI,UAAA;EAAA;AAAA;AAAA,KAIQ,UAAA;EACV,EAAA;EACA,IAAA;EACA,IAAA,EAAM,UAAA;EACN,WAAA;EACA,SAAA;EACA,UAAA,GAAa,eAAA;EACb,OAAA,GAAU,YAAA;EACV,QAAA;EACA,IAAA,GAAO,SAAA;EACP,QAAA,GAAW,UAAA;EACX,MAAA,GAAS,YAAA;EACT,cAAA,GAAiB,mBAAA;EACjB,SAAA,GAAY,eAAA;AAAA;AAAA,KAGF,UAAA;AAAA,KAiBA,eAAA;EACV,IAAA;EACA,IAAA;EACA,WAAA;EACA,QAAA;EACA,YAAA;AAAA;AAAA,KAGU,YAAA;EACV,IAAA;EACA,WAAA;AAAA;AAAA,KAGU,SAAA;EACV,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,YAAA;EACV,IAAA;EACA,IAAA;EACA,GAAA;AAAA;AAAA,KAGU,mBAAA;EACV,IAAA;EACA,UAAA;EACA,OAAA;EACA,WAAA;AAAA;AAAA,KAGU,eAAA;EACV,OAAA;EACA,UAAA;EACA,UAAA;EACA,aAAA;AAAA;AAAA,KAGU,eAAA;EACV,IAAA;EACA,OAAA;EACA,WAAA;IACE,KAAA;IACA,WAAA;IACA,gBAAA;IACA,OAAA;EAAA;AAAA"}
|