@mnaoumov/typescript-dev-toolkit 1.3.1 → 2.0.0

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 (172) hide show
  1. package/assets/docs-site/components/ConstructorBlock.astro +16 -0
  2. package/assets/docs-site/components/ImportStatement.astro +12 -0
  3. package/assets/docs-site/components/MemberDetail.astro +101 -0
  4. package/assets/docs-site/components/MethodTable.astro +45 -0
  5. package/assets/docs-site/components/PropertyTable.astro +45 -0
  6. package/assets/docs-site/components/SiteTitle.astro +43 -0
  7. package/assets/docs-site/components/TypeSignature.astro +20 -0
  8. package/assets/docs-site/fonts/inter-latin-400-normal.ttf +0 -0
  9. package/assets/docs-site/fonts/inter-latin-700-normal.ttf +0 -0
  10. package/assets/docs-site/styles/global.css +221 -0
  11. package/dist/lib/cjs/build.cjs +1 -1
  12. package/dist/lib/cjs/build.d.cts +1 -1
  13. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +2 -2
  14. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
  15. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +2 -2
  16. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
  17. package/dist/lib/cjs/docs-site/api-doc-constants.cjs +171 -0
  18. package/dist/lib/cjs/docs-site/api-doc-constants.d.cts +18 -0
  19. package/dist/lib/cjs/docs-site/api-doc-jsdoc.cjs +414 -0
  20. package/dist/lib/cjs/docs-site/api-doc-jsdoc.d.cts +149 -0
  21. package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +377 -0
  22. package/dist/lib/cjs/docs-site/api-doc-link-rendering.d.cts +185 -0
  23. package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +118 -0
  24. package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +36 -0
  25. package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +561 -0
  26. package/dist/lib/cjs/docs-site/api-doc-page-generation.d.cts +159 -0
  27. package/dist/lib/cjs/docs-site/api-doc-route-segments.cjs +42 -0
  28. package/dist/lib/cjs/docs-site/api-doc-route-segments.d.cts +25 -0
  29. package/dist/lib/cjs/docs-site/api-doc-settings.cjs +47 -0
  30. package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +53 -0
  31. package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +288 -0
  32. package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +75 -0
  33. package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +281 -0
  34. package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +178 -0
  35. package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +157 -0
  36. package/dist/lib/cjs/docs-site/api-doc-type-merging.d.cts +51 -0
  37. package/dist/lib/cjs/docs-site/api-doc-types.cjs +22 -0
  38. package/dist/lib/cjs/docs-site/api-doc-types.d.cts +157 -0
  39. package/dist/lib/cjs/docs-site/api-docs.cjs +143 -0
  40. package/dist/lib/cjs/docs-site/api-docs.d.cts +34 -0
  41. package/dist/lib/cjs/docs-site/astro-config.cjs +169 -0
  42. package/dist/lib/cjs/docs-site/astro-config.d.cts +23 -0
  43. package/dist/lib/cjs/docs-site/docs-links.cjs +123 -0
  44. package/dist/lib/cjs/docs-site/docs-links.d.cts +32 -0
  45. package/dist/lib/cjs/docs-site/docs-site-assets.cjs +64 -0
  46. package/dist/lib/cjs/docs-site/docs-site-assets.d.cts +23 -0
  47. package/dist/lib/cjs/docs-site/docs-site-commands.cjs +72 -0
  48. package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +29 -0
  49. package/dist/lib/cjs/docs-site/docs-site-config.cjs +122 -0
  50. package/dist/lib/cjs/docs-site/docs-site-config.d.cts +162 -0
  51. package/dist/lib/cjs/docs-site/index.cjs +116 -0
  52. package/dist/lib/cjs/docs-site/index.d.cts +26 -0
  53. package/dist/lib/cjs/docs-site/link-check.cjs +197 -0
  54. package/dist/lib/cjs/docs-site/link-check.d.cts +163 -0
  55. package/dist/lib/cjs/docs-site/og-image-page.cjs +45 -0
  56. package/dist/lib/cjs/docs-site/og-image-page.d.cts +15 -0
  57. package/dist/lib/cjs/docs-site/og-image.cjs +326 -0
  58. package/dist/lib/cjs/docs-site/og-image.d.cts +70 -0
  59. package/dist/lib/cjs/docs-site/og-images.cjs +170 -0
  60. package/dist/lib/cjs/docs-site/og-images.d.cts +41 -0
  61. package/dist/lib/cjs/docs-site/route-data.cjs +47 -0
  62. package/dist/lib/cjs/docs-site/route-data.d.cts +14 -0
  63. package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +97 -0
  64. package/dist/lib/cjs/docs-site/satteri-github-alerts.d.cts +31 -0
  65. package/dist/lib/cjs/docs-site/satteri-relative-links.cjs +87 -0
  66. package/dist/lib/cjs/docs-site/satteri-relative-links.d.cts +29 -0
  67. package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +51 -0
  68. package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +38 -0
  69. package/dist/lib/cjs/index.cjs +4 -1
  70. package/dist/lib/cjs/index.d.cts +1 -0
  71. package/dist/lib/cjs/library-build.cjs +1 -1
  72. package/dist/lib/cjs/library-build.d.cts +2 -2
  73. package/dist/lib/cjs/linters/eslint-config.cjs +17 -17
  74. package/dist/lib/cjs/linters/eslint-config.d.cts +1 -7
  75. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +2 -2
  76. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +5 -8
  77. package/dist/lib/cjs/package-manager.cjs +2 -2
  78. package/dist/lib/esm/build.d.mts +1 -1
  79. package/dist/lib/esm/build.mjs +1 -1
  80. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
  81. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
  82. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
  83. package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
  84. package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
  85. package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
  86. package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
  87. package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
  88. package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
  89. package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
  90. package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
  91. package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
  92. package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
  93. package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
  94. package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
  95. package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
  96. package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
  97. package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
  98. package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
  99. package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
  100. package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
  101. package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
  102. package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
  103. package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
  104. package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
  105. package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
  106. package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
  107. package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
  108. package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
  109. package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
  110. package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
  111. package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
  112. package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
  113. package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
  114. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
  115. package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
  116. package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
  117. package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
  118. package/dist/lib/esm/docs-site/index.d.mts +26 -0
  119. package/dist/lib/esm/docs-site/index.mjs +58 -0
  120. package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
  121. package/dist/lib/esm/docs-site/link-check.mjs +166 -0
  122. package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
  123. package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
  124. package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
  125. package/dist/lib/esm/docs-site/og-image.mjs +292 -0
  126. package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
  127. package/dist/lib/esm/docs-site/og-images.mjs +156 -0
  128. package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
  129. package/dist/lib/esm/docs-site/route-data.mjs +23 -0
  130. package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
  131. package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
  132. package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
  133. package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
  134. package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
  135. package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
  136. package/dist/lib/esm/index.d.mts +1 -0
  137. package/dist/lib/esm/index.mjs +3 -1
  138. package/dist/lib/esm/library-build.d.mts +2 -2
  139. package/dist/lib/esm/library-build.mjs +1 -1
  140. package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
  141. package/dist/lib/esm/linters/eslint-config.mjs +17 -17
  142. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
  143. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
  144. package/dist/lib/esm/package-manager.mjs +2 -2
  145. package/docs-site/api-doc-constants/package.json +6 -0
  146. package/docs-site/api-doc-jsdoc/package.json +6 -0
  147. package/docs-site/api-doc-link-rendering/package.json +6 -0
  148. package/docs-site/api-doc-package-sites/package.json +6 -0
  149. package/docs-site/api-doc-page-generation/package.json +6 -0
  150. package/docs-site/api-doc-route-segments/package.json +6 -0
  151. package/docs-site/api-doc-settings/package.json +6 -0
  152. package/docs-site/api-doc-source-processing/package.json +6 -0
  153. package/docs-site/api-doc-text-utils/package.json +6 -0
  154. package/docs-site/api-doc-type-merging/package.json +6 -0
  155. package/docs-site/api-doc-types/package.json +6 -0
  156. package/docs-site/api-docs/package.json +6 -0
  157. package/docs-site/astro-config/package.json +6 -0
  158. package/docs-site/docs-links/package.json +6 -0
  159. package/docs-site/docs-site-assets/package.json +6 -0
  160. package/docs-site/docs-site-commands/package.json +6 -0
  161. package/docs-site/docs-site-config/package.json +6 -0
  162. package/docs-site/index/package.json +6 -0
  163. package/docs-site/link-check/package.json +6 -0
  164. package/docs-site/og-image/package.json +6 -0
  165. package/docs-site/og-image-page/package.json +6 -0
  166. package/docs-site/og-images/package.json +6 -0
  167. package/docs-site/package.json +6 -0
  168. package/docs-site/route-data/package.json +6 -0
  169. package/docs-site/satteri-github-alerts/package.json +6 -0
  170. package/docs-site/satteri-relative-links/package.json +6 -0
  171. package/docs-site/unrendered-alerts/package.json +6 -0
  172. package/package.json +74 -4
@@ -0,0 +1,157 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Shared data-model types for the API documentation generator.
6
+ */
7
+ /**
8
+ * A fenced code block of a markdown text, with the language its fence names (empty when none).
9
+ */
10
+ export interface CodeSegment {
11
+ lang: string;
12
+ text: string;
13
+ type: 'code';
14
+ }
15
+ /**
16
+ * A documented enum member.
17
+ */
18
+ export interface EnumMemberInfo {
19
+ description: string;
20
+ name: string;
21
+ value: string;
22
+ }
23
+ /**
24
+ * A run of a markdown text: prose, or a fenced code block.
25
+ */
26
+ export type MarkdownSegment = CodeSegment | ProseSegment;
27
+ /**
28
+ * A documented property, method, constructor or function signature.
29
+ */
30
+ export interface MemberInfo {
31
+ description: string;
32
+ examples: string[];
33
+ inheritedFrom: string;
34
+ isStatic: boolean;
35
+ name: string;
36
+ overloadKey: string;
37
+ parameters: ParameterInfo[];
38
+ remarks: string;
39
+ returnDescription: string;
40
+ returnType: string;
41
+ signature: string;
42
+ since: string;
43
+ type: string;
44
+ }
45
+ /**
46
+ * A generated page's content and the path it is written to.
47
+ */
48
+ export interface PageContent {
49
+ content: string;
50
+ filePath: string;
51
+ }
52
+ /**
53
+ Frontmatter shared by every generated page. `description` and `signature` are optional because not
54
+ every page has them, but a page that HAS one must emit it: both feed the page's OG card.
55
+ */
56
+ export interface PageFrontMatter {
57
+ description?: string | undefined;
58
+ sidebarLabel: string;
59
+ signature?: string | undefined;
60
+ slug: string;
61
+ title: string;
62
+ }
63
+ /**
64
+ * A documented parameter.
65
+ */
66
+ export interface ParameterInfo {
67
+ description: string;
68
+ name: string;
69
+ type: string;
70
+ }
71
+ /**
72
+ * A run of markdown prose between code blocks.
73
+ */
74
+ export interface ProseSegment {
75
+ text: string;
76
+ type: 'prose';
77
+ }
78
+ /**
79
+ * The part of a ts-morph method or function the declared return type is read from.
80
+ */
81
+ export interface ReturnTypeProvider {
82
+ getReturnType: () => TextProvider;
83
+ getReturnTypeNode?: () => TextProvider | undefined;
84
+ }
85
+ /**
86
+ * A collapsible Starlight sidebar group.
87
+ */
88
+ export interface SidebarEntry {
89
+ collapsed: boolean;
90
+ items: (SidebarEntry | SidebarLink)[];
91
+ label: string;
92
+ }
93
+ /**
94
+ * A Starlight sidebar link.
95
+ */
96
+ export interface SidebarLink {
97
+ label: string;
98
+ link: string;
99
+ }
100
+ /**
101
+ Recursive tree node for building the sidebar
102
+ */
103
+ export interface SidebarTreeNode {
104
+ children: Map<string, SidebarTreeNode>;
105
+ types: TypeInfo[];
106
+ }
107
+ /**
108
+ * A ts-morph node or type whose text can be printed.
109
+ */
110
+ export interface TextProvider {
111
+ getText: () => string;
112
+ }
113
+ /**
114
+ * A documented export: a class, interface, enum, type alias, function or variable.
115
+ */
116
+ export interface TypeInfo {
117
+ baseTypes: string[];
118
+ /**
119
+ For classes: the constructor (public/protected), if any
120
+ */
121
+ constructorInfo?: MemberInfo | undefined;
122
+ description: string;
123
+ /**
124
+ For enums: the enum members
125
+ */
126
+ enumMembers: EnumMemberInfo[];
127
+ examples: string[];
128
+ /**
129
+ For classes: types in the `implements` clause
130
+ */
131
+ implementsTypes: string[];
132
+ kind: 'class' | 'enum' | 'function' | 'interface' | 'type' | 'variable';
133
+ methods: MemberInfo[];
134
+ name: string;
135
+ namespace: string;
136
+ properties: MemberInfo[];
137
+ remarks: string;
138
+ /**
139
+ For type aliases: the right-hand-side type text
140
+ */
141
+ typeAliasText?: string;
142
+ typeParameters: string[];
143
+ /**
144
+ For variables: the declaration keyword (let/const/var)
145
+ */
146
+ variableKeyword?: string;
147
+ /**
148
+ For variables: the type annotation
149
+ */
150
+ variableType?: string;
151
+ }
152
+ /**
153
+ * An object entry of the `typedoc-plugin-mdn-links` Web API data.
154
+ */
155
+ export interface WebApiEntry {
156
+ url: string;
157
+ }
@@ -0,0 +1,6 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,34 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The API documentation generator: walks a package's `src`, extracts every documentable exported declaration via
6
+ * ts-morph, and writes Starlight-compatible MDX pages plus a sidebar JSON. The output tree mirrors the package's
7
+ * module structure: a type's namespace is its source path relative to `src`, which is also its import subpath.
8
+ */
9
+ import type { ApiDocSettings } from './api-doc-settings.mjs';
10
+ /**
11
+ * Options for {@link generateApiDocs}.
12
+ */
13
+ export interface GenerateApiDocsParams {
14
+ /**
15
+ * The repository root: the folder holding `tsconfig.json` and `node_modules`.
16
+ */
17
+ readonly rootDirectory: string;
18
+ /**
19
+ * The settings every page and link is rendered with.
20
+ */
21
+ readonly settings: ApiDocSettings;
22
+ /**
23
+ * The folder whose modules are documented, normally `<root>/src`.
24
+ */
25
+ readonly sourceDirectory: string;
26
+ }
27
+ /**
28
+ * Generates the API reference pages and the sidebar.
29
+ *
30
+ * Skips the work when neither the sources, the settings nor the generator changed since the last run.
31
+ *
32
+ * @param options - The options.
33
+ */
34
+ export declare function generateApiDocs(options: GenerateApiDocsParams): Promise<void>;
@@ -0,0 +1,139 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import {
40
+ existsSync,
41
+ readFileSync
42
+ } from "node:fs";
43
+ import {
44
+ mkdir,
45
+ rm,
46
+ writeFile
47
+ } from "node:fs/promises";
48
+ import {
49
+ dirname,
50
+ join,
51
+ normalize
52
+ } from "node:path";
53
+ import { fileURLToPath } from "node:url";
54
+ import { Project } from "ts-morph";
55
+ import { extractFileOverview } from "./api-doc-jsdoc.mjs";
56
+ import {
57
+ loadExternalTypeMaps,
58
+ registerMemberPages,
59
+ registerRouteSegments
60
+ } from "./api-doc-link-rendering.mjs";
61
+ import { clearPackageDeclarations } from "./api-doc-package-sites.mjs";
62
+ import {
63
+ appendBacklinksAndWrite,
64
+ generateMemberPages,
65
+ generateNamespaceIndexPages,
66
+ generateOverviewPage,
67
+ generateSidebarJson
68
+ } from "./api-doc-page-generation.mjs";
69
+ import { configureApiDocs } from "./api-doc-settings.mjs";
70
+ import {
71
+ collectFunctions,
72
+ collectPackageDeclarations,
73
+ collectVariables,
74
+ computeCacheHash,
75
+ computeNamespace,
76
+ findEntryFiles,
77
+ processSourceFile,
78
+ registerGenericTypeParams
79
+ } from "./api-doc-source-processing.mjs";
80
+ import { resolveInheritedMembers } from "./api-doc-type-merging.mjs";
81
+ const CACHE_FILE_NAME = ".cache-hash";
82
+ async function generateApiDocs(options) {
83
+ const { rootDirectory, settings, sourceDirectory } = options;
84
+ configureApiDocs(settings);
85
+ loadExternalTypeMaps(rootDirectory);
86
+ const entryFiles = findEntryFiles(sourceDirectory);
87
+ console.warn(`Found ${String(entryFiles.length)} entry source files`);
88
+ const cacheFile = join(settings.outputDirectory, CACHE_FILE_NAME);
89
+ const currentHash = computeCacheHash(entryFiles, dirname(fileURLToPath(import.meta.url)));
90
+ if (existsSync(cacheFile) && existsSync(settings.sidebarFile) && readFileSync(cacheFile, "utf-8").trim() === currentHash) {
91
+ console.warn("Source files and generator unchanged \u2014 skipping generation.");
92
+ return;
93
+ }
94
+ const project = new Project({
95
+ skipAddingFilesFromTsConfig: true,
96
+ tsConfigFilePath: join(rootDirectory, "tsconfig.json")
97
+ });
98
+ const sourceFiles = project.addSourceFilesAtPaths(entryFiles);
99
+ const types = /* @__PURE__ */ new Map();
100
+ const moduleOverviews = /* @__PURE__ */ new Map();
101
+ clearPackageDeclarations();
102
+ for (const src of sourceFiles) {
103
+ const namespace = computeNamespace(sourceDirectory, normalize(src.getFilePath()));
104
+ const overview = extractFileOverview(src);
105
+ if (overview) {
106
+ moduleOverviews.set(namespace, overview);
107
+ }
108
+ collectPackageDeclarations(src);
109
+ processSourceFile(src, types, namespace);
110
+ collectFunctions(src, types, namespace);
111
+ collectVariables(src, types, namespace);
112
+ }
113
+ resolveInheritedMembers(types);
114
+ for (const info of types.values()) {
115
+ info.properties.sort((a, b) => a.name.localeCompare(b.name));
116
+ info.methods.sort((a, b) => a.name.localeCompare(b.name));
117
+ }
118
+ registerGenericTypeParams(types);
119
+ registerRouteSegments(types);
120
+ registerMemberPages(types);
121
+ await rm(settings.outputDirectory, { force: true, recursive: true });
122
+ await mkdir(settings.outputDirectory, { recursive: true });
123
+ await generateNamespaceIndexPages(types, types, moduleOverviews);
124
+ const pageContents = /* @__PURE__ */ new Map();
125
+ for (const [key, info] of types) {
126
+ pageContents.set(key, await generateOverviewPage(info.name, info, types));
127
+ if (info.kind === "class" || info.kind === "interface") {
128
+ await generateMemberPages(info.name, info, types);
129
+ }
130
+ }
131
+ await appendBacklinksAndWrite(pageContents, types);
132
+ await generateSidebarJson(types);
133
+ await writeFile(cacheFile, currentHash, "utf-8");
134
+ console.warn(`Generated docs for ${String(types.size)} types across ${String(moduleOverviews.size)} documented modules`);
135
+ }
136
+ export {
137
+ generateApiDocs
138
+ };
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGguXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJtLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICBub3JtYWxpemVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAndHMtbW9ycGgnO1xuXG5pbXBvcnQgdHlwZSB7IEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFnZUNvbnRlbnQsXG4gIFR5cGVJbmZvXG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7IGV4dHJhY3RGaWxlT3ZlcnZpZXcgfSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMsXG4gIHJlZ2lzdGVyTWVtYmVyUGFnZXMsXG4gIHJlZ2lzdGVyUm91dGVTZWdtZW50c1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgY2xlYXJQYWNrYWdlRGVjbGFyYXRpb25zIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuaW1wb3J0IHtcbiAgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUsXG4gIGdlbmVyYXRlTWVtYmVyUGFnZXMsXG4gIGdlbmVyYXRlTmFtZXNwYWNlSW5kZXhQYWdlcyxcbiAgZ2VuZXJhdGVPdmVydmlld1BhZ2UsXG4gIGdlbmVyYXRlU2lkZWJhckpzb25cbn0gZnJvbSAnLi9hcGktZG9jLXBhZ2UtZ2VuZXJhdGlvbi50cyc7XG5pbXBvcnQgeyBjb25maWd1cmVBcGlEb2NzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGdW5jdGlvbnMsXG4gIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zLFxuICBjb2xsZWN0VmFyaWFibGVzLFxuICBjb21wdXRlQ2FjaGVIYXNoLFxuICBjb21wdXRlTmFtZXNwYWNlLFxuICBmaW5kRW50cnlGaWxlcyxcbiAgcHJvY2Vzc1NvdXJjZUZpbGUsXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXNcbn0gZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmltcG9ydCB7IHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzIH0gZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlQXBpRG9jc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBcGlEb2NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHJvb3Q6IHRoZSBmb2xkZXIgaG9sZGluZyBgdHNjb25maWcuanNvbmAgYW5kIGBub2RlX21vZHVsZXNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgZXZlcnkgcGFnZSBhbmQgbGluayBpcyByZW5kZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IEFwaURvY1NldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgYXJlIGRvY3VtZW50ZWQsIG5vcm1hbGx5IGA8cm9vdD4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG5jb25zdCBDQUNIRV9GSUxFX05BTUUgPSAnLmNhY2hlLWhhc2gnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQVBJIHJlZmVyZW5jZSBwYWdlcyBhbmQgdGhlIHNpZGViYXIuXG4gKlxuICogU2tpcHMgdGhlIHdvcmsgd2hlbiBuZWl0aGVyIHRoZSBzb3VyY2VzLCB0aGUgc2V0dGluZ3Mgbm9yIHRoZSBnZW5lcmF0b3IgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBydW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQXBpRG9jcyhvcHRpb25zOiBHZW5lcmF0ZUFwaURvY3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyByb290RGlyZWN0b3J5LCBzZXR0aW5ncywgc291cmNlRGlyZWN0b3J5IH0gPSBvcHRpb25zO1xuICBjb25maWd1cmVBcGlEb2NzKHNldHRpbmdzKTtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMocm9vdERpcmVjdG9yeSk7XG5cbiAgY29uc3QgZW50cnlGaWxlcyA9IGZpbmRFbnRyeUZpbGVzKHNvdXJjZURpcmVjdG9yeSk7XG4gIGNvbnNvbGUud2FybihgRm91bmQgJHtTdHJpbmcoZW50cnlGaWxlcy5sZW5ndGgpfSBlbnRyeSBzb3VyY2UgZmlsZXNgKTtcblxuICBjb25zdCBjYWNoZUZpbGUgPSBqb2luKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgQ0FDSEVfRklMRV9OQU1FKTtcbiAgY29uc3QgY3VycmVudEhhc2ggPSBjb21wdXRlQ2FjaGVIYXNoKGVudHJ5RmlsZXMsIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSk7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlRmlsZSkgJiYgZXhpc3RzU3luYyhzZXR0aW5ncy5zaWRlYmFyRmlsZSkgJiYgcmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykudHJpbSgpID09PSBjdXJyZW50SGFzaCkge1xuICAgIGNvbnNvbGUud2FybignU291cmNlIGZpbGVzIGFuZCBnZW5lcmF0b3IgdW5jaGFuZ2VkIOKAlCBza2lwcGluZyBnZW5lcmF0aW9uLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIExvYWQgdmlhIHRoZSByZXBvJ3MgdHNjb25maWcgc28gaW5mZXJyZWQgdHlwZXMgcmVzb2x2ZS5cbiAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcbiAgICBza2lwQWRkaW5nRmlsZXNGcm9tVHNDb25maWc6IHRydWUsXG4gICAgdHNDb25maWdGaWxlUGF0aDogam9pbihyb290RGlyZWN0b3J5LCAndHNjb25maWcuanNvbicpXG4gIH0pO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKGVudHJ5RmlsZXMpO1xuXG4gIGNvbnN0IHR5cGVzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvPigpO1xuICBjb25zdCBtb2R1bGVPdmVydmlld3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjbGVhclBhY2thZ2VEZWNsYXJhdGlvbnMoKTtcblxuICBmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2VGaWxlcykge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbXB1dGVOYW1lc3BhY2Uoc291cmNlRGlyZWN0b3J5LCBub3JtYWxpemUoc3JjLmdldEZpbGVQYXRoKCkpKTtcbiAgICBjb25zdCBvdmVydmlldyA9IGV4dHJhY3RGaWxlT3ZlcnZpZXcoc3JjKTtcbiAgICBpZiAob3ZlcnZpZXcpIHtcbiAgICAgIG1vZHVsZU92ZXJ2aWV3cy5zZXQobmFtZXNwYWNlLCBvdmVydmlldyk7XG4gICAgfVxuICAgIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYyk7XG4gICAgcHJvY2Vzc1NvdXJjZUZpbGUoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0RnVuY3Rpb25zKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gICAgY29sbGVjdFZhcmlhYmxlcyhzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgcmVzb2x2ZUluaGVyaXRlZE1lbWJlcnModHlwZXMpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGluZm8ucHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICBpbmZvLm1ldGhvZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zKHR5cGVzKTtcbiAgcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzKTtcbiAgcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlcyk7XG5cbiAgYXdhaXQgcm0oc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IG1rZGlyKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKHR5cGVzLCB0eXBlcywgbW9kdWxlT3ZlcnZpZXdzKTtcblxuICAvLyBQYXNzIDE6IGdlbmVyYXRlIGFsbCBwYWdlcyB3aXRob3V0IGJhY2tsaW5rcywgY29sbGVjdCBjb250ZW50IChrZXllZCBieSBxdWFsaWZpZWQgaWQpXG4gIGNvbnN0IHBhZ2VDb250ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlQ29udGVudD4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBpbmZvXSBvZiB0eXBlcykge1xuICAgIHBhZ2VDb250ZW50cy5zZXQoa2V5LCBhd2FpdCBnZW5lcmF0ZU92ZXJ2aWV3UGFnZShpbmZvLm5hbWUsIGluZm8sIHR5cGVzKSk7XG4gICAgaWYgKGluZm8ua2luZCA9PT0gJ2NsYXNzJyB8fCBpbmZvLmtpbmQgPT09ICdpbnRlcmZhY2UnKSB7XG4gICAgICBhd2FpdCBnZW5lcmF0ZU1lbWJlclBhZ2VzKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhc3MgMjogc2NhbiBjb250ZW50IGZvciBsaW5rcywgYXBwZW5kIGJhY2tsaW5rcywgd3JpdGUgZmlsZXNcbiAgYXdhaXQgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUocGFnZUNvbnRlbnRzLCB0eXBlcyk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVTaWRlYmFySnNvbih0eXBlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShjYWNoZUZpbGUsIGN1cnJlbnRIYXNoLCAndXRmLTgnKTtcblxuICBjb25zb2xlLndhcm4oYEdlbmVyYXRlZCBkb2NzIGZvciAke1N0cmluZyh0eXBlcy5zaXplKX0gdHlwZXMgYWNyb3NzICR7U3RyaW5nKG1vZHVsZU92ZXJ2aWV3cy5zaXplKX0gZG9jdW1lbnRlZCBtb2R1bGVzYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxF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
@@ -0,0 +1,23 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The Astro + Starlight configuration every documentation site is built with.
6
+ *
7
+ * A site's own `astro.config.ts` is one call, `export default defineDocsSiteConfig({ repo, title })`: the base path,
8
+ * the edit and GitHub links, the sidebar, the shared components and stylesheet, the Open Graph metadata and the
9
+ * Markdown plugins all follow from the repository's name.
10
+ */
11
+ import type { AstroUserConfig } from 'astro';
12
+ import type { DocsSiteConfig } from './docs-site-config.mjs';
13
+ /**
14
+ * Builds a documentation site's Astro configuration.
15
+ *
16
+ * The site's source lives under `<docs>/src` (`srcDir`), so it never collides with the package's own `src/` and
17
+ * `dist/`. The API reference is generated into `<docs>/src/content/docs/api` with a matching
18
+ * `<docs>/src/generated-sidebar.json`, which this reads; run the generator first.
19
+ *
20
+ * @param config - The site's configuration.
21
+ * @returns The Astro configuration.
22
+ */
23
+ export declare function defineDocsSiteConfig(config: DocsSiteConfig): AstroUserConfig;
@@ -0,0 +1,135 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { satteri } from "@astrojs/markdown-satteri";
40
+ import starlight from "@astrojs/starlight";
41
+ import {
42
+ extname,
43
+ join,
44
+ toPosixPath
45
+ } from "@mnaoumov/typescript-lib/path";
46
+ import { defineConfig } from "astro/config";
47
+ import {
48
+ existsSync,
49
+ readFileSync
50
+ } from "node:fs";
51
+ import { fileURLToPath } from "node:url";
52
+ import {
53
+ API_COMPONENTS_IMPORT_PREFIX,
54
+ getDocsSiteAssetsDirectory
55
+ } from "./docs-site-assets.mjs";
56
+ import { resolveDocsSiteConfig } from "./docs-site-config.mjs";
57
+ import { satteriGitHubAlerts } from "./satteri-github-alerts.mjs";
58
+ import { satteriRelativeLinks } from "./satteri-relative-links.mjs";
59
+ function defineDocsSiteConfig(config) {
60
+ const resolved = resolveDocsSiteConfig(config);
61
+ const assetsDirectory = toPosixPath(getDocsSiteAssetsDirectory());
62
+ return defineConfig({
63
+ base: resolved.basePath,
64
+ integrations: [
65
+ starlight({
66
+ components: {
67
+ SiteTitle: join(assetsDirectory, "components", "SiteTitle.astro")
68
+ },
69
+ customCss: [
70
+ join(assetsDirectory, "styles", "global.css")
71
+ ],
72
+ editLink: {
73
+ baseUrl: resolved.editLinkBaseUrl
74
+ },
75
+ favicon: "/favicon.svg",
76
+ routeMiddleware: getRouteDataModulePath(),
77
+ sidebar: [
78
+ {
79
+ items: [{ autogenerate: { directory: resolved.guidesDirectory } }],
80
+ label: "Guides"
81
+ },
82
+ ...readApiSidebar(resolved.apiDocSettings.sidebarFile)
83
+ ],
84
+ social: [
85
+ { href: resolved.githubUrl, icon: "github", label: "GitHub" }
86
+ ],
87
+ title: resolved.title
88
+ })
89
+ ],
90
+ markdown: {
91
+ // Astro 7.3 made Sätteri the default Markdown processor; `markdown.remarkPlugins` now runs only on the
92
+ // `unified` processor from `@astrojs/markdown-remark`, which Astro no longer installs. Naming the
93
+ // Sätteri processor here keeps the pipeline on it, carrying the link rewrite as one of its mdast plugins.
94
+ // The GitHub-alert conversion rides here too, ahead of the asides plugin Starlight appends after these:
95
+ // `starlight-github-alerts` cannot find that plugin on Starlight 0.42 and silently skipped every page.
96
+ processor: satteri({ mdastPlugins: [satteriGitHubAlerts(), satteriRelativeLinks(resolved.basePath)] })
97
+ },
98
+ // eslint-disable-next-line unicorn/name-replacements -- `outDir` is an Astro config key.
99
+ outDir: resolved.distDirectory,
100
+ // eslint-disable-next-line unicorn/name-replacements -- `publicDir` is an Astro config key.
101
+ publicDir: resolved.publicDirectory,
102
+ root: resolved.rootDirectory,
103
+ site: resolved.siteOrigin,
104
+ // eslint-disable-next-line unicorn/name-replacements -- `srcDir` is an Astro config key.
105
+ srcDir: resolved.docsSourceDirectory,
106
+ trailingSlash: "always",
107
+ vite: {
108
+ define: {
109
+ // The site title shows the documented package's version; `SiteTitle.astro` reads it from here.
110
+ "import.meta.env.DOCS_SITE_PACKAGE_VERSION": JSON.stringify(resolved.packageVersion)
111
+ },
112
+ resolve: {
113
+ alias: [
114
+ { find: API_COMPONENTS_IMPORT_PREFIX, replacement: join(assetsDirectory, "components") }
115
+ ]
116
+ }
117
+ }
118
+ });
119
+ }
120
+ function getRouteDataModulePath() {
121
+ const thisModulePath = toPosixPath(fileURLToPath(import.meta.url));
122
+ return join(thisModulePath, "..", `route-data${extname(thisModulePath)}`);
123
+ }
124
+ function readApiSidebar(sidebarFile) {
125
+ if (!existsSync(sidebarFile)) {
126
+ console.warn(`[astro.config] ${sidebarFile} not found. Generate the API reference first (npm run docs:build).`);
127
+ return [];
128
+ }
129
+ const parsed = JSON.parse(readFileSync(sidebarFile, "utf-8"));
130
+ return Array.isArray(parsed) ? parsed : [];
131
+ }
132
+ export {
133
+ defineDocsSiteConfig
134
+ };
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXN0cm8tY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgQXN0cm8gKyBTdGFybGlnaHQgY29uZmlndXJhdGlvbiBldmVyeSBkb2N1bWVudGF0aW9uIHNpdGUgaXMgYnVpbHQgd2l0aC5cbiAqXG4gKiBBIHNpdGUncyBvd24gYGFzdHJvLmNvbmZpZy50c2AgaXMgb25lIGNhbGwsIGBleHBvcnQgZGVmYXVsdCBkZWZpbmVEb2NzU2l0ZUNvbmZpZyh7IHJlcG8sIHRpdGxlIH0pYDogdGhlIGJhc2UgcGF0aCxcbiAqIHRoZSBlZGl0IGFuZCBHaXRIdWIgbGlua3MsIHRoZSBzaWRlYmFyLCB0aGUgc2hhcmVkIGNvbXBvbmVudHMgYW5kIHN0eWxlc2hlZXQsIHRoZSBPcGVuIEdyYXBoIG1ldGFkYXRhIGFuZCB0aGVcbiAqIE1hcmtkb3duIHBsdWdpbnMgYWxsIGZvbGxvdyBmcm9tIHRoZSByZXBvc2l0b3J5J3MgbmFtZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YXJsaWdodFVzZXJDb25maWcgfSBmcm9tICdAYXN0cm9qcy9zdGFybGlnaHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBc3Ryb1VzZXJDb25maWcgfSBmcm9tICdhc3Rybyc7XG5cbmltcG9ydCB7IHNhdHRlcmkgfSBmcm9tICdAYXN0cm9qcy9tYXJrZG93bi1zYXR0ZXJpJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgU3RhcmxpZ2h0SW50ZWdyYXRpb25gIGlzIHRvbyB2ZXJib3NlLlxuaW1wb3J0IHN0YXJsaWdodCBmcm9tICdAYXN0cm9qcy9zdGFybGlnaHQnO1xuaW1wb3J0IHtcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAnYXN0cm8vY29uZmlnJztcbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB0eXBlIHsgRG9jc1NpdGVDb25maWcgfSBmcm9tICcuL2RvY3Mtc2l0ZS1jb25maWcudHMnO1xuXG5pbXBvcnQge1xuICBBUElfQ09NUE9ORU5UU19JTVBPUlRfUFJFRklYLFxuICBnZXREb2NzU2l0ZUFzc2V0c0RpcmVjdG9yeVxufSBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZURvY3NTaXRlQ29uZmlnIH0gZnJvbSAnLi9kb2NzLXNpdGUtY29uZmlnLnRzJztcbmltcG9ydCB7IHNhdHRlcmlHaXRIdWJBbGVydHMgfSBmcm9tICcuL3NhdHRlcmktZ2l0aHViLWFsZXJ0cy50cyc7XG5pbXBvcnQgeyBzYXR0ZXJpUmVsYXRpdmVMaW5rcyB9IGZyb20gJy4vc2F0dGVyaS1yZWxhdGl2ZS1saW5rcy50cyc7XG5cbnR5cGUgU2lkZWJhckl0ZW1zID0gTm9uTnVsbGFibGU8U3RhcmxpZ2h0VXNlckNvbmZpZ1snc2lkZWJhciddPjtcblxuLyoqXG4gKiBCdWlsZHMgYSBkb2N1bWVudGF0aW9uIHNpdGUncyBBc3RybyBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoZSBzaXRlJ3Mgc291cmNlIGxpdmVzIHVuZGVyIGA8ZG9jcz4vc3JjYCAoYHNyY0RpcmApLCBzbyBpdCBuZXZlciBjb2xsaWRlcyB3aXRoIHRoZSBwYWNrYWdlJ3Mgb3duIGBzcmMvYCBhbmRcbiAqIGBkaXN0L2AuIFRoZSBBUEkgcmVmZXJlbmNlIGlzIGdlbmVyYXRlZCBpbnRvIGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jcy9hcGlgIHdpdGggYSBtYXRjaGluZ1xuICogYDxkb2NzPi9zcmMvZ2VuZXJhdGVkLXNpZGViYXIuanNvbmAsIHdoaWNoIHRoaXMgcmVhZHM7IHJ1biB0aGUgZ2VuZXJhdG9yIGZpcnN0LlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBUaGUgc2l0ZSdzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBUaGUgQXN0cm8gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZURvY3NTaXRlQ29uZmlnKGNvbmZpZzogRG9jc1NpdGVDb25maWcpOiBBc3Ryb1VzZXJDb25maWcge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVEb2NzU2l0ZUNvbmZpZyhjb25maWcpO1xuICBjb25zdCBhc3NldHNEaXJlY3RvcnkgPSB0b1Bvc2l4UGF0aChnZXREb2NzU2l0ZUFzc2V0c0RpcmVjdG9yeSgpKTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKHtcbiAgICBiYXNlOiByZXNvbHZlZC5iYXNlUGF0aCxcbiAgICBpbnRlZ3JhdGlvbnM6IFtcbiAgICAgIHN0YXJsaWdodCh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBTaXRlVGl0bGU6IGpvaW4oYXNzZXRzRGlyZWN0b3J5LCAnY29tcG9uZW50cycsICdTaXRlVGl0bGUuYXN0cm8nKVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21Dc3M6IFtcbiAgICAgICAgICBqb2luKGFzc2V0c0RpcmVjdG9yeSwgJ3N0eWxlcycsICdnbG9iYWwuY3NzJylcbiAgICAgICAgXSxcbiAgICAgICAgZWRpdExpbms6IHtcbiAgICAgICAgICBiYXNlVXJsOiByZXNvbHZlZC5lZGl0TGlua0Jhc2VVcmxcbiAgICAgICAgfSxcbiAgICAgICAgZmF2aWNvbjogJy9mYXZpY29uLnN2ZycsXG4gICAgICAgIHJvdXRlTWlkZGxld2FyZTogZ2V0Um91dGVEYXRhTW9kdWxlUGF0aCgpLFxuICAgICAgICBzaWRlYmFyOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXRlbXM6IFt7IGF1dG9nZW5lcmF0ZTogeyBkaXJlY3Rvcnk6IHJlc29sdmVkLmd1aWRlc0RpcmVjdG9yeSB9IH1dLFxuICAgICAgICAgICAgbGFiZWw6ICdHdWlkZXMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5yZWFkQXBpU2lkZWJhcihyZXNvbHZlZC5hcGlEb2NTZXR0aW5ncy5zaWRlYmFyRmlsZSlcbiAgICAgICAgXSxcbiAgICAgICAgc29jaWFsOiBbXG4gICAgICAgICAgeyBocmVmOiByZXNvbHZlZC5naXRodWJVcmwsIGljb246ICdnaXRodWInLCBsYWJlbDogJ0dpdEh1YicgfVxuICAgICAgICBdLFxuICAgICAgICB0aXRsZTogcmVzb2x2ZWQudGl0bGVcbiAgICAgIH0pXG4gICAgXSxcbiAgICBtYXJrZG93bjoge1xuICAgICAgLy8gQXN0cm8gNy4zIG1hZGUgU8OkdHRlcmkgdGhlIGRlZmF1bHQgTWFya2Rvd24gcHJvY2Vzc29yOyBgbWFya2Rvd24ucmVtYXJrUGx1Z2luc2Agbm93IHJ1bnMgb25seSBvbiB0aGVcbiAgICAgIC8vIGB1bmlmaWVkYCBwcm9jZXNzb3IgZnJvbSBgQGFzdHJvanMvbWFya2Rvd24tcmVtYXJrYCwgd2hpY2ggQXN0cm8gbm8gbG9uZ2VyIGluc3RhbGxzLiBOYW1pbmcgdGhlXG4gICAgICAvLyBTw6R0dGVyaSBwcm9jZXNzb3IgaGVyZSBrZWVwcyB0aGUgcGlwZWxpbmUgb24gaXQsIGNhcnJ5aW5nIHRoZSBsaW5rIHJld3JpdGUgYXMgb25lIG9mIGl0cyBtZGFzdCBwbHVnaW5zLlxuICAgICAgLy8gVGhlIEdpdEh1Yi1hbGVydCBjb252ZXJzaW9uIHJpZGVzIGhlcmUgdG9vLCBhaGVhZCBvZiB0aGUgYXNpZGVzIHBsdWdpbiBTdGFybGlnaHQgYXBwZW5kcyBhZnRlciB0aGVzZTpcbiAgICAgIC8vIGBzdGFybGlnaHQtZ2l0aHViLWFsZXJ0c2AgY2Fubm90IGZpbmQgdGhhdCBwbHVnaW4gb24gU3RhcmxpZ2h0IDAuNDIgYW5kIHNpbGVudGx5IHNraXBwZWQgZXZlcnkgcGFnZS5cbiAgICAgIHByb2Nlc3Nvcjogc2F0dGVyaSh7IG1kYXN0UGx1Z2luczogW3NhdHRlcmlHaXRIdWJBbGVydHMoKSwgc2F0dGVyaVJlbGF0aXZlTGlua3MocmVzb2x2ZWQuYmFzZVBhdGgpXSB9KVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYG91dERpcmAgaXMgYW4gQXN0cm8gY29uZmlnIGtleS5cbiAgICBvdXREaXI6IHJlc29sdmVkLmRpc3REaXJlY3RvcnksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHB1YmxpY0RpcmAgaXMgYW4gQXN0cm8gY29uZmlnIGtleS5cbiAgICBwdWJsaWNEaXI6IHJlc29sdmVkLnB1YmxpY0RpcmVjdG9yeSxcbiAgICByb290OiByZXNvbHZlZC5yb290RGlyZWN0b3J5LFxuICAgIHNpdGU6IHJlc29sdmVkLnNpdGVPcmlnaW4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHNyY0RpcmAgaXMgYW4gQXN0cm8gY29uZmlnIGtleS5cbiAgICBzcmNEaXI6IHJlc29sdmVkLmRvY3NTb3VyY2VEaXJlY3RvcnksXG4gICAgdHJhaWxpbmdTbGFzaDogJ2Fsd2F5cycsXG4gICAgdml0ZToge1xuICAgICAgZGVmaW5lOiB7XG4gICAgICAgIC8vIFRoZSBzaXRlIHRpdGxlIHNob3dzIHRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyB2ZXJzaW9uOyBgU2l0ZVRpdGxlLmFzdHJvYCByZWFkcyBpdCBmcm9tIGhlcmUuXG4gICAgICAgICdpbXBvcnQubWV0YS5lbnYuRE9DU19TSVRFX1BBQ0tBR0VfVkVSU0lPTic6IEpTT04uc3RyaW5naWZ5KHJlc29sdmVkLnBhY2thZ2VWZXJzaW9uKVxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgYWxpYXM6IFtcbiAgICAgICAgICB7IGZpbmQ6IEFQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVgsIHJlcGxhY2VtZW50OiBqb2luKGFzc2V0c0RpcmVjdG9yeSwgJ2NvbXBvbmVudHMnKSB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vLyBgcm91dGUtZGF0YWAgc2l0cyBiZXNpZGUgdGhpcyBtb2R1bGUgaW4gZXZlcnkgYnVpbGQgb2YgaXQsIHdpdGggdGhlIHNhbWUgZXh0ZW5zaW9uOiBgLnRzYCBpbiB0aGlzIHJlcG9zaXRvcnksXG4vLyBgLm1qc2AgLyBgLmNqc2Agb25jZSBpbnN0YWxsZWQuXG5mdW5jdGlvbiBnZXRSb3V0ZURhdGFNb2R1bGVQYXRoKCk6IHN0cmluZyB7XG4gIGNvbnN0IHRoaXNNb2R1bGVQYXRoID0gdG9Qb3NpeFBhdGgoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbiAgcmV0dXJuIGpvaW4odGhpc01vZHVsZVBhdGgsICcuLicsIGByb3V0ZS1kYXRhJHtleHRuYW1lKHRoaXNNb2R1bGVQYXRoKX1gKTtcbn1cblxuZnVuY3Rpb24gcmVhZEFwaVNpZGViYXIoc2lkZWJhckZpbGU6IHN0cmluZyk6IFNpZGViYXJJdGVtcyB7XG4gIGlmICghZXhpc3RzU3luYyhzaWRlYmFyRmlsZSkpIHtcbiAgICBjb25zb2xlLndhcm4oYFthc3Ryby5jb25maWddICR7c2lkZWJhckZpbGV9IG5vdCBmb3VuZC4gR2VuZXJhdGUgdGhlIEFQSSByZWZlcmVuY2UgZmlyc3QgKG5wbSBydW4gZG9jczpidWlsZCkuYCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoc2lkZWJhckZpbGUsICd1dGYtOCcpKTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCBhcyBTaWRlYmFySXRlbXMgOiBbXTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxTQUFTLGVBQWU7QUFFeEIsT0FBTyxlQUFlO0FBQ3RCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsb0JBQW9CO0FBQzdCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxxQkFBcUI7QUFJOUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLDRCQUE0QjtBQWM5QixTQUFTLHFCQUFxQixRQUF5QztBQUM1RSxRQUFNLFdBQVcsc0JBQXNCLE1BQU07QUFDN0MsUUFBTSxrQkFBa0IsWUFBWSwyQkFBMkIsQ0FBQztBQUVoRSxTQUFPLGFBQWE7QUFBQSxJQUNsQixNQUFNLFNBQVM7QUFBQSxJQUNmLGNBQWM7QUFBQSxNQUNaLFVBQVU7QUFBQSxRQUNSLFlBQVk7QUFBQSxVQUNWLFdBQVcsS0FBSyxpQkFBaUIsY0FBYyxpQkFBaUI7QUFBQSxRQUNsRTtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1QsS0FBSyxpQkFBaUIsVUFBVSxZQUFZO0FBQUEsUUFDOUM7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNSLFNBQVMsU0FBUztBQUFBLFFBQ3BCO0FBQUEsUUFDQSxTQUFTO0FBQUEsUUFDVCxpQkFBaUIsdUJBQXVCO0FBQUEsUUFDeEMsU0FBUztBQUFBLFVBQ1A7QUFBQSxZQUNFLE9BQU8sQ0FBQyxFQUFFLGNBQWMsRUFBRSxXQUFXLFNBQVMsZ0JBQWdCLEVBQUUsQ0FBQztBQUFBLFlBQ2pFLE9BQU87QUFBQSxVQUNUO0FBQUEsVUFDQSxHQUFHLGVBQWUsU0FBUyxlQUFlLFdBQVc7QUFBQSxRQUN2RDtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ04sRUFBRSxNQUFNLFNBQVMsV0FBVyxNQUFNLFVBQVUsT0FBTyxTQUFTO0FBQUEsUUFDOUQ7QUFBQSxRQUNBLE9BQU8sU0FBUztBQUFBLE1BQ2xCLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFDQSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTVIsV0FBVyxRQUFRLEVBQUUsY0FBYyxDQUFDLG9CQUFvQixHQUFHLHFCQUFxQixTQUFTLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFBQSxJQUN2RztBQUFBO0FBQUEsSUFFQSxRQUFRLFNBQVM7QUFBQTtBQUFBLElBRWpCLFdBQVcsU0FBUztBQUFBLElBQ3BCLE1BQU0sU0FBUztBQUFBLElBQ2YsTUFBTSxTQUFTO0FBQUE7QUFBQSxJQUVmLFFBQVEsU0FBUztBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLE1BQU07QUFBQSxNQUNKLFFBQVE7QUFBQTtBQUFBLFFBRU4sNkNBQTZDLEtBQUssVUFBVSxTQUFTLGNBQWM7QUFBQSxNQUNyRjtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLFVBQ0wsRUFBRSxNQUFNLDhCQUE4QixhQUFhLEtBQUssaUJBQWlCLFlBQVksRUFBRTtBQUFBLFFBQ3pGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUlBLFNBQVMseUJBQWlDO0FBQ3hDLFFBQU0saUJBQWlCLFlBQVksY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNqRSxTQUFPLEtBQUssZ0JBQWdCLE1BQU0sYUFBYSxRQUFRLGNBQWMsQ0FBQyxFQUFFO0FBQzFFO0FBRUEsU0FBUyxlQUFlLGFBQW1DO0FBQ3pELE1BQUksQ0FBQyxXQUFXLFdBQVcsR0FBRztBQUM1QixZQUFRLEtBQUssa0JBQWtCLFdBQVcsb0VBQW9FO0FBQzlHLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxRQUFNLFNBQWtCLEtBQUssTUFBTSxhQUFhLGFBQWEsT0FBTyxDQUFDO0FBQ3JFLFNBQU8sTUFBTSxRQUFRLE1BQU0sSUFBSSxTQUF5QixDQUFDO0FBQzNEOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,32 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Validates the links emitted by a built documentation site.
6
+ *
7
+ * Internal links are resolved offline against the build output; external links are validated over the network,
8
+ * deduplicated so each unique URL is fetched at most once. See {@link ./link-check.ts} for the decision logic.
9
+ *
10
+ * It also fails on a GitHub alert that reached a page as a plain blockquote (see {@link ./unrendered-alerts.ts}),
11
+ * since nothing else notices when the conversion stops.
12
+ */
13
+ /**
14
+ * Options for {@link assertDocsLinksResolve}.
15
+ */
16
+ export interface AssertDocsLinksResolveParams {
17
+ /**
18
+ * The build output folder, normally `<docs>/dist`.
19
+ */
20
+ readonly outputDirectory: string;
21
+ /**
22
+ * The absolute URL the site is served from, with a trailing slash, e.g. `https://mnaoumov.dev/typescript-lib/`.
23
+ */
24
+ readonly siteBaseUrl: string;
25
+ }
26
+ /**
27
+ * Checks every link of the built site, and that every GitHub alert rendered as an aside.
28
+ *
29
+ * @param options - The options.
30
+ * @throws If an alert rendered as a plain blockquote, or a link does not resolve.
31
+ */
32
+ export declare function assertDocsLinksResolve(options: AssertDocsLinksResolveParams): Promise<void>;