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.
Files changed (123) hide show
  1. package/README.md +9 -19
  2. package/dist/DocPage-CIBiCAxZ.js +1010 -0
  3. package/dist/DocPage-CIBiCAxZ.js.map +1 -0
  4. package/dist/assets/src/ui/Breadcrumb.css.ts.vanilla-Dpgq-C_p.css +20 -0
  5. package/dist/assets/src/ui/DocPage.css.ts.vanilla-CXKuz4U-.css +34 -0
  6. package/dist/assets/src/ui/Footer.css.ts.vanilla-BSzPIPt4.css +100 -0
  7. package/dist/assets/src/ui/Header.css.ts.vanilla-8QL0Jzgk.css +156 -0
  8. package/dist/assets/src/ui/Layout.css.ts.vanilla-Bpx_-gJt.css +67 -0
  9. package/dist/assets/src/ui/Nav.css.ts.vanilla-CsAQjogy.css +51 -0
  10. package/dist/assets/src/ui/Sidebar.css.ts.vanilla-D70qXTEr.css +115 -0
  11. package/dist/assets/src/ui/Toc.css.ts.vanilla-CYqcWgvD.css +52 -0
  12. package/dist/assets/src/ui/components/ApiItem.css.ts.vanilla-B_DW-1iJ.css +218 -0
  13. package/dist/assets/src/ui/components/CodeBlock.css.ts.vanilla-lNKqskjQ.css +182 -0
  14. package/dist/assets/src/ui/components/Container.css.ts.vanilla-CUhRUA9t.css +80 -0
  15. package/dist/assets/src/ui/components/CopyButton.css.ts.vanilla-DZZ5jgTM.css +24 -0
  16. package/dist/assets/src/ui/components/Features.css.ts.vanilla-D-pNXM9Q.css +129 -0
  17. package/dist/assets/src/ui/components/Hero.css.ts.vanilla-DHJVZ6GX.css +134 -0
  18. package/dist/assets/src/ui/components/Search.css.ts.vanilla-BYpWHzky.css +135 -0
  19. package/dist/assets/src/ui/components/Steps.css.ts.vanilla-CisaxeNj.css +59 -0
  20. package/dist/assets/src/ui/components/Tabs.css.ts.vanilla-C4-vJSnf.css +30 -0
  21. package/dist/assets/src/ui/components/ThemeToggle.css.ts.vanilla---sSUELC.css +22 -0
  22. package/dist/assets/src/ui/content.css.ts.vanilla-O_RaSPXm.css +106 -0
  23. package/dist/assets/src/ui/theme/animations.css.ts.vanilla-D6ImVUKy.css +10 -0
  24. package/dist/assets/src/ui/theme/dark.css.ts.vanilla-2iJgcpbU.css +87 -0
  25. package/dist/assets/src/ui/theme/light.css.ts.vanilla-CwinfWSf.css +87 -0
  26. package/dist/assets/src/ui/theme/reset.css.ts.vanilla-0Q3pLjfC.css +34 -0
  27. package/dist/brand-icons-DLJKqTun.js +59 -0
  28. package/dist/brand-icons-DLJKqTun.js.map +1 -0
  29. package/dist/config/index.d.ts +5 -5
  30. package/dist/config/index.d.ts.map +1 -0
  31. package/dist/config/index.js +54 -11
  32. package/dist/config/index.js.map +1 -1
  33. package/dist/contract.css-DYvFVCFE.d.ts +105 -0
  34. package/dist/contract.css-DYvFVCFE.d.ts.map +1 -0
  35. package/dist/generator-DPtRXxM_.js +1194 -0
  36. package/dist/generator-DPtRXxM_.js.map +1 -0
  37. package/dist/icons/index.d.ts +22 -1
  38. package/dist/icons/index.d.ts.map +1 -0
  39. package/dist/icons/index.js +2 -2
  40. package/dist/index-BTeHvysI.d.ts +807 -0
  41. package/dist/index-BTeHvysI.d.ts.map +1 -0
  42. package/dist/index-DySzkJlC.d.ts +78 -0
  43. package/dist/index-DySzkJlC.d.ts.map +1 -0
  44. package/dist/index.d.ts +5 -8
  45. package/dist/index.js +6 -100
  46. package/dist/mdx/provider.d.ts +61 -4
  47. package/dist/mdx/provider.d.ts.map +1 -0
  48. package/dist/mdx/provider.js +89 -117
  49. package/dist/mdx/provider.js.map +1 -1
  50. package/dist/runtime/index.d.ts +2 -41
  51. package/dist/runtime/index.js +2 -28
  52. package/dist/sidebar-utils-1Skqle1Q.js +109 -0
  53. package/dist/sidebar-utils-1Skqle1Q.js.map +1 -0
  54. package/dist/theme/index.d.ts +201 -182
  55. package/dist/theme/index.d.ts.map +1 -0
  56. package/dist/theme/index.js +288 -128
  57. package/dist/theme/index.js.map +1 -1
  58. package/dist/typedoc/components/index.d.ts +55 -0
  59. package/dist/typedoc/components/index.d.ts.map +1 -0
  60. package/dist/typedoc/components/index.js +339 -0
  61. package/dist/typedoc/components/index.js.map +1 -0
  62. package/dist/typedoc/index.d.ts +36 -305
  63. package/dist/typedoc/index.d.ts.map +1 -0
  64. package/dist/typedoc/index.js +97 -268
  65. package/dist/typedoc/index.js.map +1 -1
  66. package/dist/types-BCuJBsJu.d.ts +182 -0
  67. package/dist/types-BCuJBsJu.d.ts.map +1 -0
  68. package/dist/types-CTd_mkrv.d.ts +175 -0
  69. package/dist/types-CTd_mkrv.d.ts.map +1 -0
  70. package/dist/ui/index.d.ts +2 -178
  71. package/dist/ui/index.js +3 -95
  72. package/dist/ui/styles.css +1401 -1335
  73. package/dist/ui/styles.d.ts +1 -2
  74. package/dist/ui/styles.js +23 -4
  75. package/dist/ui-3grzJSsq.js +1314 -0
  76. package/dist/ui-3grzJSsq.js.map +1 -0
  77. package/dist/vite/index.d.ts +78 -86
  78. package/dist/vite/index.d.ts.map +1 -0
  79. package/dist/vite/index.js +2931 -1282
  80. package/dist/vite/index.js.map +1 -1
  81. package/package.json +30 -19
  82. package/dist/Features-D_Pt7zpA.d.ts +0 -615
  83. package/dist/Search-DOJMNI2T.css +0 -193
  84. package/dist/Search-DOJMNI2T.css.map +0 -1
  85. package/dist/Search-VYYG3D43.js +0 -10
  86. package/dist/Search-VYYG3D43.js.map +0 -1
  87. package/dist/chunk-4YQE3TNM.js +0 -1
  88. package/dist/chunk-4YQE3TNM.js.map +0 -1
  89. package/dist/chunk-AXLJDGQL.js +0 -1
  90. package/dist/chunk-AXLJDGQL.js.map +0 -1
  91. package/dist/chunk-CZM5NX27.js +0 -909
  92. package/dist/chunk-CZM5NX27.js.map +0 -1
  93. package/dist/chunk-FZP2AVJL.js +0 -43
  94. package/dist/chunk-FZP2AVJL.js.map +0 -1
  95. package/dist/chunk-IEPSORG5.js +0 -444
  96. package/dist/chunk-IEPSORG5.js.map +0 -1
  97. package/dist/chunk-KUWEUO37.js +0 -1
  98. package/dist/chunk-KUWEUO37.js.map +0 -1
  99. package/dist/chunk-NBRHGTR2.js +0 -79
  100. package/dist/chunk-NBRHGTR2.js.map +0 -1
  101. package/dist/chunk-PGHUPTGL.js +0 -1035
  102. package/dist/chunk-PGHUPTGL.js.map +0 -1
  103. package/dist/chunk-PMS3P4MA.js +0 -43
  104. package/dist/chunk-PMS3P4MA.js.map +0 -1
  105. package/dist/chunk-QELSOHIY.js +0 -46
  106. package/dist/chunk-QELSOHIY.js.map +0 -1
  107. package/dist/chunk-R2QKY6G3.js +0 -1
  108. package/dist/chunk-R2QKY6G3.js.map +0 -1
  109. package/dist/chunk-ZPYQQZ7J.js +0 -210
  110. package/dist/chunk-ZPYQQZ7J.js.map +0 -1
  111. package/dist/icons/index.js.map +0 -1
  112. package/dist/index.css +0 -1290
  113. package/dist/index.css.map +0 -1
  114. package/dist/index.js.map +0 -1
  115. package/dist/mdx/provider.css +0 -403
  116. package/dist/mdx/provider.css.map +0 -1
  117. package/dist/runtime/index.js.map +0 -1
  118. package/dist/types-CLkHwCch.d.ts +0 -248
  119. package/dist/ui/index.css +0 -1290
  120. package/dist/ui/index.css.map +0 -1
  121. package/dist/ui/index.js.map +0 -1
  122. package/dist/ui/styles.css.map +0 -1
  123. package/dist/ui/styles.js.map +0 -1
@@ -1,276 +1,105 @@
1
- import {
2
- TypeDocGenerator,
3
- generateApiDocs
4
- } from "../chunk-PGHUPTGL.js";
5
-
6
- // src/typedoc/vite-plugin.ts
7
- import path from "path";
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
- const {
11
- contentDir = "./content",
12
- runOnBuild,
13
- runOnStart = true,
14
- // TypeDoc config with defaults
15
- enabled = true,
16
- entryPoints = ["./src/index.ts"],
17
- out = "api-reference",
18
- excludePrivate = true,
19
- excludeInternal = true,
20
- ...restConfig
21
- } = options;
22
- const config = {
23
- enabled,
24
- entryPoints,
25
- out,
26
- excludePrivate,
27
- excludeInternal,
28
- ...restConfig
29
- };
30
- let isBuilding = false;
31
- let hasGenerated = false;
32
- async function generate() {
33
- if (!config.enabled) return;
34
- console.log("[ardo] Generating API documentation with TypeDoc...");
35
- const startTime = Date.now();
36
- try {
37
- const docs = await generateApiDocs(config, contentDir);
38
- const duration = Date.now() - startTime;
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 ApiParametersTable({ parameters }) {
125
- if (!parameters.length) return null;
126
- return /* @__PURE__ */ jsxs("div", { className: "ardo-api-parameters", children: [
127
- /* @__PURE__ */ jsx("h4", { className: "ardo-api-section-title", children: "Parameters" }),
128
- /* @__PURE__ */ jsxs("table", { className: "ardo-api-table", children: [
129
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
130
- /* @__PURE__ */ jsx("th", { children: "Name" }),
131
- /* @__PURE__ */ jsx("th", { children: "Type" }),
132
- /* @__PURE__ */ jsx("th", { children: "Description" })
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 ApiReturns({ returns }) {
152
- return /* @__PURE__ */ jsxs("div", { className: "ardo-api-returns", children: [
153
- /* @__PURE__ */ jsx("h4", { className: "ardo-api-section-title", children: "Returns" }),
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
- // src/typedoc/components/ApiItem.tsx
165
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
166
- function ApiItem({ item, level = 2 }) {
167
- const HeadingTag = `h${Math.min(level, 6)}`;
168
- return /* @__PURE__ */ jsxs2("div", { className: `ardo-api-item ardo-api-item-${item.kind}`, id: item.id, children: [
169
- /* @__PURE__ */ jsxs2(HeadingTag, { className: "ardo-api-item-title", children: [
170
- /* @__PURE__ */ jsx2(ApiKindBadge, { kind: item.kind }),
171
- /* @__PURE__ */ jsx2("span", { className: "ardo-api-item-name", children: item.name }),
172
- /* @__PURE__ */ jsx2("a", { href: `#${item.id}`, className: "ardo-api-anchor", children: "#" })
173
- ] }),
174
- item.description && /* @__PURE__ */ jsx2("p", { className: "ardo-api-item-description", children: item.description }),
175
- item.signature && /* @__PURE__ */ jsx2(
176
- ApiSignature,
177
- {
178
- name: item.name,
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 ApiKindBadge({ kind }) {
203
- const kindLabels = {
204
- module: "Module",
205
- namespace: "Namespace",
206
- class: "Class",
207
- interface: "Interface",
208
- type: "Type",
209
- enum: "Enum",
210
- function: "Function",
211
- variable: "Variable",
212
- property: "Property",
213
- method: "Method",
214
- accessor: "Accessor",
215
- constructor: "Constructor",
216
- parameter: "Parameter",
217
- typeParameter: "Type Parameter",
218
- enumMember: "Enum Member"
219
- };
220
- const kindColors = {
221
- class: "ardo-api-badge-class",
222
- interface: "ardo-api-badge-interface",
223
- type: "ardo-api-badge-type",
224
- enum: "ardo-api-badge-enum",
225
- function: "ardo-api-badge-function",
226
- method: "ardo-api-badge-method",
227
- property: "ardo-api-badge-property"
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 ApiHierarchy({ hierarchy }) {
232
- if (!hierarchy) return null;
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
- export {
265
- ApiHierarchy,
266
- ApiItem,
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"}