@mnaoumov/typescript-dev-toolkit 1.3.0 → 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 (174) 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/linters/markdownlint.cjs +4 -1
  78. package/dist/lib/cjs/package-manager.cjs +2 -2
  79. package/dist/lib/esm/build.d.mts +1 -1
  80. package/dist/lib/esm/build.mjs +1 -1
  81. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
  82. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
  83. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
  84. package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
  85. package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
  86. package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
  87. package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
  88. package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
  89. package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
  90. package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
  91. package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
  92. package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
  93. package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
  94. package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
  95. package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
  96. package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
  97. package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
  98. package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
  99. package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
  100. package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
  101. package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
  102. package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
  103. package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
  104. package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
  105. package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
  106. package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
  107. package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
  108. package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
  109. package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
  110. package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
  111. package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
  112. package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
  113. package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
  114. package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
  115. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
  116. package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
  117. package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
  118. package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
  119. package/dist/lib/esm/docs-site/index.d.mts +26 -0
  120. package/dist/lib/esm/docs-site/index.mjs +58 -0
  121. package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
  122. package/dist/lib/esm/docs-site/link-check.mjs +166 -0
  123. package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
  124. package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
  125. package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
  126. package/dist/lib/esm/docs-site/og-image.mjs +292 -0
  127. package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
  128. package/dist/lib/esm/docs-site/og-images.mjs +156 -0
  129. package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
  130. package/dist/lib/esm/docs-site/route-data.mjs +23 -0
  131. package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
  132. package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
  133. package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
  134. package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
  135. package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
  136. package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
  137. package/dist/lib/esm/index.d.mts +1 -0
  138. package/dist/lib/esm/index.mjs +3 -1
  139. package/dist/lib/esm/library-build.d.mts +2 -2
  140. package/dist/lib/esm/library-build.mjs +1 -1
  141. package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
  142. package/dist/lib/esm/linters/eslint-config.mjs +17 -17
  143. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
  144. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
  145. package/dist/lib/esm/linters/markdownlint.mjs +4 -1
  146. package/dist/lib/esm/package-manager.mjs +2 -2
  147. package/docs-site/api-doc-constants/package.json +6 -0
  148. package/docs-site/api-doc-jsdoc/package.json +6 -0
  149. package/docs-site/api-doc-link-rendering/package.json +6 -0
  150. package/docs-site/api-doc-package-sites/package.json +6 -0
  151. package/docs-site/api-doc-page-generation/package.json +6 -0
  152. package/docs-site/api-doc-route-segments/package.json +6 -0
  153. package/docs-site/api-doc-settings/package.json +6 -0
  154. package/docs-site/api-doc-source-processing/package.json +6 -0
  155. package/docs-site/api-doc-text-utils/package.json +6 -0
  156. package/docs-site/api-doc-type-merging/package.json +6 -0
  157. package/docs-site/api-doc-types/package.json +6 -0
  158. package/docs-site/api-docs/package.json +6 -0
  159. package/docs-site/astro-config/package.json +6 -0
  160. package/docs-site/docs-links/package.json +6 -0
  161. package/docs-site/docs-site-assets/package.json +6 -0
  162. package/docs-site/docs-site-commands/package.json +6 -0
  163. package/docs-site/docs-site-config/package.json +6 -0
  164. package/docs-site/index/package.json +6 -0
  165. package/docs-site/link-check/package.json +6 -0
  166. package/docs-site/og-image/package.json +6 -0
  167. package/docs-site/og-image-page/package.json +6 -0
  168. package/docs-site/og-images/package.json +6 -0
  169. package/docs-site/package.json +6 -0
  170. package/docs-site/route-data/package.json +6 -0
  171. package/docs-site/satteri-github-alerts/package.json +6 -0
  172. package/docs-site/satteri-relative-links/package.json +6 -0
  173. package/docs-site/unrendered-alerts/package.json +6 -0
  174. package/package.json +74 -4
@@ -0,0 +1,414 @@
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
+ "use strict";
40
+ var __defProp = Object.defineProperty;
41
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
42
+ var __getOwnPropNames = Object.getOwnPropertyNames;
43
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
44
+ var __export = (target, all) => {
45
+ for (var name in all)
46
+ __defProp(target, name, { get: all[name], enumerable: true });
47
+ };
48
+ var __copyProps = (to, from, except, desc) => {
49
+ if (from && typeof from === "object" || typeof from === "function") {
50
+ for (let key of __getOwnPropNames(from))
51
+ if (!__hasOwnProp.call(to, key) && key !== except)
52
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
53
+ }
54
+ return to;
55
+ };
56
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
57
+ var api_doc_jsdoc_exports = {};
58
+ __export(api_doc_jsdoc_exports, {
59
+ extractClassInfo: () => extractClassInfo,
60
+ extractConstructorInfo: () => extractConstructorInfo,
61
+ extractEnumInfo: () => extractEnumInfo,
62
+ extractFileOverview: () => extractFileOverview,
63
+ extractInterfaceInfo: () => extractInterfaceInfo,
64
+ extractMethodInfo: () => extractMethodInfo,
65
+ extractMethodSignatureInfo: () => extractMethodSignatureInfo,
66
+ extractPropertyInfo: () => extractPropertyInfo,
67
+ extractPropertySignatureInfo: () => extractPropertySignatureInfo,
68
+ extractTypeAliasInfo: () => extractTypeAliasInfo,
69
+ getDeclaredReturnType: () => getDeclaredReturnType,
70
+ getDescription: () => getDescription,
71
+ getExamples: () => getExamples,
72
+ getParameterDescriptions: () => getParameterDescriptions,
73
+ getPropertyType: () => getPropertyType,
74
+ getRemarks: () => getRemarks,
75
+ getReturnDescription: () => getReturnDescription,
76
+ getSince: () => getSince,
77
+ resolveTypeofAliases: () => resolveTypeofAliases
78
+ });
79
+ module.exports = __toCommonJS(api_doc_jsdoc_exports);
80
+ var import_reg_exp = require('@mnaoumov/typescript-lib/reg-exp');
81
+ var import_ts_morph = require('ts-morph');
82
+ var import_api_doc_text_utils = require('./api-doc-text-utils.cjs');
83
+ function extractClassInfo(cls, namespace) {
84
+ const name = cls.getNameOrThrow();
85
+ const constructor = cls.getConstructors().find((c) => c.getScope() !== import_ts_morph.Scope.Private);
86
+ const extendsClause = cls.getExtends();
87
+ return {
88
+ baseTypes: extendsClause ? [extendsClause.getText()] : [],
89
+ constructorInfo: constructor ? extractConstructorInfo(constructor) : void 0,
90
+ description: getDescription(cls),
91
+ enumMembers: [],
92
+ examples: getExamples(cls),
93
+ implementsTypes: cls.getImplements().map((index) => index.getText()),
94
+ kind: "class",
95
+ methods: cls.getMethods().filter((m) => m.getScope() !== import_ts_morph.Scope.Private).map((m) => extractMethodInfo(m)),
96
+ name,
97
+ namespace,
98
+ properties: cls.getProperties().filter((p) => p.getScope() !== import_ts_morph.Scope.Private).map((p) => extractPropertyInfo(p)),
99
+ remarks: getRemarks(cls),
100
+ typeParameters: cls.getTypeParameters().map((tp) => tp.getText())
101
+ };
102
+ }
103
+ function extractConstructorInfo(ctor) {
104
+ const parameterDescriptions = getParameterDescriptions(ctor);
105
+ const params = ctor.getParameters().map((p) => {
106
+ const isOptional = p.isOptional();
107
+ const optionalSuffix = isOptional ? "?" : "";
108
+ return {
109
+ description: parameterDescriptions.get(p.getName()) ?? (isOptional ? "*(Optional)*" : ""),
110
+ name: `${p.getName()}${optionalSuffix}`,
111
+ type: (0, import_api_doc_text_utils.simplifyType)(p.getType().getText())
112
+ };
113
+ });
114
+ const parameterString = params.map((p) => `${p.name}: ${p.type}`).join(", ");
115
+ return {
116
+ description: getDescription(ctor),
117
+ examples: getExamples(ctor),
118
+ inheritedFrom: "",
119
+ isStatic: false,
120
+ name: "constructor",
121
+ overloadKey: "constructor",
122
+ parameters: params,
123
+ remarks: getRemarks(ctor),
124
+ returnDescription: "",
125
+ returnType: "",
126
+ signature: `(${parameterString})`,
127
+ since: getSince(ctor),
128
+ type: ""
129
+ };
130
+ }
131
+ function extractEnumInfo(enumDeclaration, namespace) {
132
+ const members = enumDeclaration.getMembers().map((m) => {
133
+ const initializer = m.getInitializer()?.getText() ?? "";
134
+ return {
135
+ description: getDescription(m),
136
+ name: m.getName(),
137
+ value: initializer
138
+ };
139
+ });
140
+ return {
141
+ baseTypes: [],
142
+ description: getDescription(enumDeclaration),
143
+ enumMembers: members,
144
+ examples: getExamples(enumDeclaration),
145
+ implementsTypes: [],
146
+ kind: "enum",
147
+ methods: [],
148
+ name: enumDeclaration.getName(),
149
+ namespace,
150
+ properties: [],
151
+ remarks: getRemarks(enumDeclaration),
152
+ typeParameters: []
153
+ };
154
+ }
155
+ function extractFileOverview(src) {
156
+ const text = src.getFullText();
157
+ const blockMatch = /\/\*\*(?<body>[\s\S]*?)\*\//.exec(text);
158
+ if (!blockMatch) {
159
+ return "";
160
+ }
161
+ const body = (0, import_reg_exp.getMandatoryNamedGroup)(blockMatch, "body");
162
+ if (!/@file\b/.test(body)) {
163
+ return "";
164
+ }
165
+ const stripped = body.split("\n").map((line) => line.replace(/^\s*\*?\s?/, "")).join("\n");
166
+ const afterFileTag = stripped.replace(/[\s\S]*?@file[ \t]*\r?\n?/, "");
167
+ return (0, import_api_doc_text_utils.foldTsDocParagraphs)(afterFileTag.trim());
168
+ }
169
+ function extractInterfaceInfo(iface, namespace) {
170
+ return {
171
+ baseTypes: iface.getExtends().map((error) => error.getText()),
172
+ description: getDescription(iface),
173
+ enumMembers: [],
174
+ examples: getExamples(iface),
175
+ implementsTypes: [],
176
+ kind: "interface",
177
+ methods: iface.getMethods().map((m) => extractMethodSignatureInfo(m)),
178
+ name: iface.getName(),
179
+ namespace,
180
+ properties: iface.getProperties().map((p) => extractPropertySignatureInfo(p)),
181
+ remarks: getRemarks(iface),
182
+ typeParameters: iface.getTypeParameters().map((tp) => tp.getText())
183
+ };
184
+ }
185
+ function extractMethodInfo(method) {
186
+ const name = method.getName();
187
+ const parameterDescriptions = getParameterDescriptions(method);
188
+ const params = method.getParameters().map((p) => {
189
+ const isOptional = p.isOptional();
190
+ const optionalSuffix = isOptional ? "?" : "";
191
+ return {
192
+ description: parameterDescriptions.get(p.getName()) ?? (isOptional ? "*(Optional)*" : ""),
193
+ name: `${p.getName()}${optionalSuffix}`,
194
+ type: (0, import_api_doc_text_utils.simplifyType)(p.getType().getText())
195
+ };
196
+ });
197
+ const parameterString = params.map((p) => `${p.name}: ${p.type}`).join(", ");
198
+ const info = {
199
+ description: getDescription(method),
200
+ examples: getExamples(method),
201
+ inheritedFrom: "",
202
+ isStatic: method.isStatic(),
203
+ name,
204
+ overloadKey: "",
205
+ parameters: params,
206
+ remarks: getRemarks(method),
207
+ returnDescription: getReturnDescription(method),
208
+ returnType: getDeclaredReturnType(method),
209
+ signature: `${name}(${parameterString})`,
210
+ since: getSince(method),
211
+ type: ""
212
+ };
213
+ info.overloadKey = (0, import_api_doc_text_utils.computeOverloadKey)(info);
214
+ return info;
215
+ }
216
+ function extractMethodSignatureInfo(method) {
217
+ const name = method.getName();
218
+ const parameterDescriptions = getParameterDescriptions(method);
219
+ const params = method.getParameters().map((p) => {
220
+ const isOptional = p.isOptional();
221
+ const optionalSuffix = isOptional ? "?" : "";
222
+ return {
223
+ description: parameterDescriptions.get(p.getName()) ?? (isOptional ? "*(Optional)*" : ""),
224
+ name: `${p.getName()}${optionalSuffix}`,
225
+ type: (0, import_api_doc_text_utils.simplifyType)(p.getType().getText())
226
+ };
227
+ });
228
+ const parameterString = params.map((p) => `${p.name}: ${p.type}`).join(", ");
229
+ const info = {
230
+ description: getDescription(method),
231
+ examples: getExamples(method),
232
+ inheritedFrom: "",
233
+ isStatic: false,
234
+ name,
235
+ overloadKey: "",
236
+ parameters: params,
237
+ remarks: getRemarks(method),
238
+ returnDescription: getReturnDescription(method),
239
+ returnType: getDeclaredReturnType(method),
240
+ signature: `${name}(${parameterString})`,
241
+ since: getSince(method),
242
+ type: ""
243
+ };
244
+ info.overloadKey = (0, import_api_doc_text_utils.computeOverloadKey)(info);
245
+ return info;
246
+ }
247
+ function extractPropertyInfo(property) {
248
+ const name = property.getName();
249
+ const isOptional = property.hasQuestionToken();
250
+ const optionalSuffix = isOptional ? "?" : "";
251
+ return {
252
+ description: getDescription(property),
253
+ examples: getExamples(property),
254
+ inheritedFrom: "",
255
+ isStatic: property.isStatic(),
256
+ name: `${name}${optionalSuffix}`,
257
+ overloadKey: "",
258
+ parameters: [],
259
+ remarks: getRemarks(property),
260
+ returnDescription: "",
261
+ returnType: "",
262
+ signature: `${name}${optionalSuffix}`,
263
+ since: getSince(property),
264
+ type: getPropertyType(property)
265
+ };
266
+ }
267
+ function extractPropertySignatureInfo(property) {
268
+ const name = property.getName();
269
+ const isOptional = property.hasQuestionToken();
270
+ const optionalSuffix = isOptional ? "?" : "";
271
+ return {
272
+ description: getDescription(property),
273
+ examples: getExamples(property),
274
+ inheritedFrom: "",
275
+ isStatic: false,
276
+ name: `${name}${optionalSuffix}`,
277
+ overloadKey: "",
278
+ parameters: [],
279
+ remarks: getRemarks(property),
280
+ returnDescription: "",
281
+ returnType: "",
282
+ signature: `${name}${optionalSuffix}`,
283
+ since: getSince(property),
284
+ type: getPropertyType(property)
285
+ };
286
+ }
287
+ function extractTypeAliasInfo(alias, namespace) {
288
+ return {
289
+ baseTypes: [],
290
+ description: getDescription(alias),
291
+ enumMembers: [],
292
+ examples: getExamples(alias),
293
+ implementsTypes: [],
294
+ kind: "type",
295
+ methods: [],
296
+ name: alias.getName(),
297
+ namespace,
298
+ properties: [],
299
+ remarks: getRemarks(alias),
300
+ typeAliasText: (0, import_api_doc_text_utils.simplifyType)(alias.getTypeNodeOrThrow().getText()),
301
+ typeParameters: alias.getTypeParameters().map((tp) => tp.getText())
302
+ };
303
+ }
304
+ function getDeclaredReturnType(method) {
305
+ const annotation = method.getReturnTypeNode?.()?.getText();
306
+ return (0, import_api_doc_text_utils.simplifyType)(annotation ?? method.getReturnType().getText());
307
+ }
308
+ function getDescription(node) {
309
+ const lastDoc = node.getJsDocs().at(-1);
310
+ return lastDoc ? (0, import_api_doc_text_utils.foldTsDocParagraphs)(lastDoc.getDescription().trim()) : "";
311
+ }
312
+ function getExamples(node) {
313
+ const examples = [];
314
+ for (const doc of node.getJsDocs()) {
315
+ for (const tag of doc.getTags()) {
316
+ if (tag.getTagName() !== "example") {
317
+ continue;
318
+ }
319
+ const text = tag.getCommentText()?.trim() ?? "";
320
+ if (text) {
321
+ examples.push(text);
322
+ }
323
+ }
324
+ }
325
+ return examples;
326
+ }
327
+ function getParameterDescriptions(node) {
328
+ const result = /* @__PURE__ */ new Map();
329
+ const docs = node.getJsDocs();
330
+ for (const doc of docs) {
331
+ for (const tag of doc.getTags()) {
332
+ if (tag.getTagName() !== "param") {
333
+ continue;
334
+ }
335
+ const comment = (0, import_api_doc_text_utils.foldTsDocParagraphs)(tag.getCommentText()?.trim().replaceAll(/\s*\*\s*$/g, "").replace(/^-\s*/, "").trim() ?? "");
336
+ const tagText = tag.getText();
337
+ const nameMatch = /@param\s+(?:\{[^}]*\}\s+)?(?<paramName>\w+)/.exec(tagText);
338
+ if (nameMatch) {
339
+ result.set((0, import_reg_exp.getMandatoryNamedGroup)(nameMatch, "paramName"), comment);
340
+ }
341
+ }
342
+ }
343
+ return result;
344
+ }
345
+ function getPropertyType(property) {
346
+ const typeNode = property.getTypeNode();
347
+ return typeNode ? resolveTypeofAliases((0, import_api_doc_text_utils.simplifyType)(typeNode.getText()), property.getSourceFile()) : (0, import_api_doc_text_utils.simplifyType)(property.getType().getText());
348
+ }
349
+ function getRemarks(node) {
350
+ for (const doc of node.getJsDocs()) {
351
+ for (const tag of doc.getTags()) {
352
+ if (tag.getTagName() === "remarks" || tag.getTagName() === "remark") {
353
+ return (0, import_api_doc_text_utils.foldTsDocParagraphs)(tag.getCommentText()?.trim().replaceAll(/\s*\*\s*$/g, "").trim() ?? "");
354
+ }
355
+ }
356
+ }
357
+ return "";
358
+ }
359
+ function getReturnDescription(node) {
360
+ for (const doc of node.getJsDocs()) {
361
+ for (const tag of doc.getTags()) {
362
+ if (tag.getTagName() === "returns") {
363
+ return (0, import_api_doc_text_utils.foldTsDocParagraphs)(tag.getCommentText()?.trim().replace(/^-\s*/, "").replaceAll(/\s*\*\s*$/g, "").trim() ?? "");
364
+ }
365
+ }
366
+ }
367
+ return "";
368
+ }
369
+ function getSince(node) {
370
+ for (const doc of node.getJsDocs()) {
371
+ for (const tag of doc.getTags()) {
372
+ if (tag.getTagName() === "since") {
373
+ return tag.getCommentText()?.trim().replaceAll(/\s*\*\s*$/g, "").trim() ?? "";
374
+ }
375
+ }
376
+ }
377
+ return "";
378
+ }
379
+ function resolveTypeofAliases(typeText, sourceFile) {
380
+ return (0, import_api_doc_text_utils.replaceRegExpMatches)(typeText, /\btypeof (?<alias>[a-zA-Z][a-zA-Z0-9]*)\b/g, (match) => {
381
+ const alias = (0, import_reg_exp.getMandatoryNamedGroup)(match, "alias");
382
+ for (const importDeclaration of sourceFile.getImportDeclarations()) {
383
+ for (const namedImport of importDeclaration.getNamedImports()) {
384
+ if (namedImport.getAliasNode()?.getText() === alias) {
385
+ return `typeof ${namedImport.getName()}`;
386
+ }
387
+ }
388
+ }
389
+ return match[0];
390
+ });
391
+ }
392
+ // Annotate the CommonJS export names for ESM import in node:
393
+ 0 && (module.exports = {
394
+ extractClassInfo,
395
+ extractConstructorInfo,
396
+ extractEnumInfo,
397
+ extractFileOverview,
398
+ extractInterfaceInfo,
399
+ extractMethodInfo,
400
+ extractMethodSignatureInfo,
401
+ extractPropertyInfo,
402
+ extractPropertySignatureInfo,
403
+ extractTypeAliasInfo,
404
+ getDeclaredReturnType,
405
+ getDescription,
406
+ getExamples,
407
+ getParameterDescriptions,
408
+ getPropertyType,
409
+ getRemarks,
410
+ getReturnDescription,
411
+ getSince,
412
+ resolveTypeofAliases
413
+ });
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1qc2RvYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogSlNEb2MvZGVjbGFyYXRpb24gZXh0cmFjdGlvbjogdHVybnMgdHMtbW9ycGggZGVjbGFyYXRpb25zIGludG8gdGhlIGdlbmVyYXRvcidzIGBUeXBlSW5mb2AvYE1lbWJlckluZm9gLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2xhc3NEZWNsYXJhdGlvbixcbiAgQ29uc3RydWN0b3JEZWNsYXJhdGlvbixcbiAgRW51bURlY2xhcmF0aW9uLFxuICBJbnRlcmZhY2VEZWNsYXJhdGlvbixcbiAgSlNEb2NhYmxlTm9kZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgUHJvcGVydHlTaWduYXR1cmUsXG4gIFNvdXJjZUZpbGUsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uXG59IGZyb20gJ3RzLW1vcnBoJztcblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAndHMtbW9ycGgnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVudW1NZW1iZXJJbmZvLFxuICBNZW1iZXJJbmZvLFxuICBSZXR1cm5UeXBlUHJvdmlkZXIsXG4gIFR5cGVJbmZvXG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIGNvbXB1dGVPdmVybG9hZEtleSxcbiAgZm9sZFRzRG9jUGFyYWdyYXBocyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNpbXBsaWZ5VHlwZVxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuICogRXh0cmFjdHMgYSBjbGFzcydzIG1vZGVsOiBpdHMgY29uc3RydWN0b3IsIG5vbi1wcml2YXRlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMsIGFuZCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjbHMgLSBUaGUgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgY2xhc3MncyBtb2RlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDbGFzc0luZm8oY2xzOiBDbGFzc0RlY2xhcmF0aW9uLCBuYW1lc3BhY2U6IHN0cmluZyk6IFR5cGVJbmZvIHtcbiAgY29uc3QgbmFtZSA9IGNscy5nZXROYW1lT3JUaHJvdygpO1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IGNscy5nZXRDb25zdHJ1Y3RvcnMoKS5maW5kKChjKSA9PiBjLmdldFNjb3BlKCkgIT09IFNjb3BlLlByaXZhdGUpO1xuICBjb25zdCBleHRlbmRzQ2xhdXNlID0gY2xzLmdldEV4dGVuZHMoKTtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVHlwZXM6IGV4dGVuZHNDbGF1c2UgPyBbZXh0ZW5kc0NsYXVzZS5nZXRUZXh0KCldIDogW10sXG4gICAgY29uc3RydWN0b3JJbmZvOiBjb25zdHJ1Y3RvciA/IGV4dHJhY3RDb25zdHJ1Y3RvckluZm8oY29uc3RydWN0b3IpIDogdW5kZWZpbmVkLFxuICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbihjbHMpLFxuICAgIGVudW1NZW1iZXJzOiBbXSxcbiAgICBleGFtcGxlczogZ2V0RXhhbXBsZXMoY2xzKSxcbiAgICBpbXBsZW1lbnRzVHlwZXM6IGNscy5nZXRJbXBsZW1lbnRzKCkubWFwKChpbmRleCkgPT4gaW5kZXguZ2V0VGV4dCgpKSxcbiAgICBraW5kOiAnY2xhc3MnLFxuICAgIG1ldGhvZHM6IGNscy5nZXRNZXRob2RzKCkuZmlsdGVyKChtKSA9PiBtLmdldFNjb3BlKCkgIT09IFNjb3BlLlByaXZhdGUpLm1hcCgobSkgPT4gZXh0cmFjdE1ldGhvZEluZm8obSkpLFxuICAgIG5hbWUsXG4gICAgbmFtZXNwYWNlLFxuICAgIHByb3BlcnRpZXM6IGNscy5nZXRQcm9wZXJ0aWVzKCkuZmlsdGVyKChwKSA9PiBwLmdldFNjb3BlKCkgIT09IFNjb3BlLlByaXZhdGUpLm1hcCgocCkgPT4gZXh0cmFjdFByb3BlcnR5SW5mbyhwKSksXG4gICAgcmVtYXJrczogZ2V0UmVtYXJrcyhjbHMpLFxuICAgIHR5cGVQYXJhbWV0ZXJzOiBjbHMuZ2V0VHlwZVBhcmFtZXRlcnMoKS5tYXAoKHRwKSA9PiB0cC5nZXRUZXh0KCkpXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBjb25zdHJ1Y3RvcidzIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBjdG9yIC0gVGhlIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMgVGhlIGNvbnN0cnVjdG9yJ3MgbW9kZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q29uc3RydWN0b3JJbmZvKGN0b3I6IENvbnN0cnVjdG9yRGVjbGFyYXRpb24pOiBNZW1iZXJJbmZvIHtcbiAgY29uc3QgcGFyYW1ldGVyRGVzY3JpcHRpb25zID0gZ2V0UGFyYW1ldGVyRGVzY3JpcHRpb25zKGN0b3IpO1xuICBjb25zdCBwYXJhbXMgPSBjdG9yLmdldFBhcmFtZXRlcnMoKS5tYXAoKHApID0+IHtcbiAgICBjb25zdCBpc09wdGlvbmFsID0gcC5pc09wdGlvbmFsKCk7XG4gICAgY29uc3Qgb3B0aW9uYWxTdWZmaXggPSBpc09wdGlvbmFsID8gJz8nIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMuZ2V0KHAuZ2V0TmFtZSgpKSA/PyAoaXNPcHRpb25hbCA/ICcqKE9wdGlvbmFsKSonIDogJycpLFxuICAgICAgbmFtZTogYCR7cC5nZXROYW1lKCl9JHtvcHRpb25hbFN1ZmZpeH1gLFxuICAgICAgdHlwZTogc2ltcGxpZnlUeXBlKHAuZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICB9O1xuICB9KTtcbiAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1zLm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHtwLnR5cGV9YCkuam9pbignLCAnKTtcbiAgcmV0dXJuIHtcbiAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24oY3RvciksXG4gICAgZXhhbXBsZXM6IGdldEV4YW1wbGVzKGN0b3IpLFxuICAgIGluaGVyaXRlZEZyb206ICcnLFxuICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICBuYW1lOiAnY29uc3RydWN0b3InLFxuICAgIG92ZXJsb2FkS2V5OiAnY29uc3RydWN0b3InLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtcyxcbiAgICByZW1hcmtzOiBnZXRSZW1hcmtzKGN0b3IpLFxuICAgIHJldHVybkRlc2NyaXB0aW9uOiAnJyxcbiAgICByZXR1cm5UeXBlOiAnJyxcbiAgICBzaWduYXR1cmU6IGAoJHtwYXJhbWV0ZXJTdHJpbmd9KWAsXG4gICAgc2luY2U6IGdldFNpbmNlKGN0b3IpLFxuICAgIHR5cGU6ICcnXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYW4gZW51bSdzIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBlbnVtRGVjbGFyYXRpb24gLSBUaGUgZW51bSBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEByZXR1cm5zIFRoZSBlbnVtJ3MgbW9kZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RW51bUluZm8oZW51bURlY2xhcmF0aW9uOiBFbnVtRGVjbGFyYXRpb24sIG5hbWVzcGFjZTogc3RyaW5nKTogVHlwZUluZm8ge1xuICBjb25zdCBtZW1iZXJzOiBFbnVtTWVtYmVySW5mb1tdID0gZW51bURlY2xhcmF0aW9uLmdldE1lbWJlcnMoKS5tYXAoKG0pID0+IHtcbiAgICBjb25zdCBpbml0aWFsaXplciA9IG0uZ2V0SW5pdGlhbGl6ZXIoKT8uZ2V0VGV4dCgpID8/ICcnO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24obSksXG4gICAgICBuYW1lOiBtLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlOiBpbml0aWFsaXplclxuICAgIH07XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGJhc2VUeXBlczogW10sXG4gICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKGVudW1EZWNsYXJhdGlvbiksXG4gICAgZW51bU1lbWJlcnM6IG1lbWJlcnMsXG4gICAgZXhhbXBsZXM6IGdldEV4YW1wbGVzKGVudW1EZWNsYXJhdGlvbiksXG4gICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICBraW5kOiAnZW51bScsXG4gICAgbWV0aG9kczogW10sXG4gICAgbmFtZTogZW51bURlY2xhcmF0aW9uLmdldE5hbWUoKSxcbiAgICBuYW1lc3BhY2UsXG4gICAgcHJvcGVydGllczogW10sXG4gICAgcmVtYXJrczogZ2V0UmVtYXJrcyhlbnVtRGVjbGFyYXRpb24pLFxuICAgIHR5cGVQYXJhbWV0ZXJzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIG1vZHVsZS1sZXZlbCBgQGZpbGVgIGRlc2NyaXB0aW9uIHRleHQsIGlmIGFueS5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHJldHVybnMgVGhlIG92ZXJ2aWV3LCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgZmlsZSBoYXMgbm8gYEBmaWxlYCBibG9jay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGaWxlT3ZlcnZpZXcoc3JjOiBTb3VyY2VGaWxlKTogc3RyaW5nIHtcbiAgY29uc3QgdGV4dCA9IHNyYy5nZXRGdWxsVGV4dCgpO1xuICBjb25zdCBibG9ja01hdGNoID0gL1xcL1xcKlxcKig/PGJvZHk+W1xcc1xcU10qPylcXCpcXC8vLmV4ZWModGV4dCk7XG4gIGlmICghYmxvY2tNYXRjaCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBib2R5ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChibG9ja01hdGNoLCAnYm9keScpO1xuICBpZiAoIS9AZmlsZVxcYi8udGVzdChib2R5KSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBzdHJpcHBlZCA9IGJvZHlcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKC9eXFxzKlxcKj9cXHM/LywgJycpKVxuICAgIC5qb2luKCdcXG4nKTtcbiAgY29uc3QgYWZ0ZXJGaWxlVGFnID0gc3RyaXBwZWQucmVwbGFjZSgvW1xcc1xcU10qP0BmaWxlWyBcXHRdKlxccj9cXG4/LywgJycpO1xuICByZXR1cm4gZm9sZFRzRG9jUGFyYWdyYXBocyhhZnRlckZpbGVUYWcudHJpbSgpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhbiBpbnRlcmZhY2UncyBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gaWZhY2UgLSBUaGUgaW50ZXJmYWNlIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHJldHVybnMgVGhlIGludGVyZmFjZSdzIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEludGVyZmFjZUluZm8oaWZhY2U6IEludGVyZmFjZURlY2xhcmF0aW9uLCBuYW1lc3BhY2U6IHN0cmluZyk6IFR5cGVJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVHlwZXM6IGlmYWNlLmdldEV4dGVuZHMoKS5tYXAoKGVycm9yKSA9PiBlcnJvci5nZXRUZXh0KCkpLFxuICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbihpZmFjZSksXG4gICAgZW51bU1lbWJlcnM6IFtdLFxuICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyhpZmFjZSksXG4gICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICBraW5kOiAnaW50ZXJmYWNlJyxcbiAgICBtZXRob2RzOiBpZmFjZS5nZXRNZXRob2RzKCkubWFwKChtKSA9PiBleHRyYWN0TWV0aG9kU2lnbmF0dXJlSW5mbyhtKSksXG4gICAgbmFtZTogaWZhY2UuZ2V0TmFtZSgpLFxuICAgIG5hbWVzcGFjZSxcbiAgICBwcm9wZXJ0aWVzOiBpZmFjZS5nZXRQcm9wZXJ0aWVzKCkubWFwKChwKSA9PiBleHRyYWN0UHJvcGVydHlTaWduYXR1cmVJbmZvKHApKSxcbiAgICByZW1hcmtzOiBnZXRSZW1hcmtzKGlmYWNlKSxcbiAgICB0eXBlUGFyYW1ldGVyczogaWZhY2UuZ2V0VHlwZVBhcmFtZXRlcnMoKS5tYXAoKHRwKSA9PiB0cC5nZXRUZXh0KCkpXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBjbGFzcyBtZXRob2QncyBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZC5cbiAqIEByZXR1cm5zIFRoZSBtZXRob2QncyBtb2RlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNZXRob2RJbmZvKG1ldGhvZDogTWV0aG9kRGVjbGFyYXRpb24pOiBNZW1iZXJJbmZvIHtcbiAgY29uc3QgbmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7XG4gIGNvbnN0IHBhcmFtZXRlckRlc2NyaXB0aW9ucyA9IGdldFBhcmFtZXRlckRlc2NyaXB0aW9ucyhtZXRob2QpO1xuICBjb25zdCBwYXJhbXMgPSBtZXRob2QuZ2V0UGFyYW1ldGVycygpLm1hcCgocCkgPT4ge1xuICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwLmlzT3B0aW9uYWwoKTtcbiAgICBjb25zdCBvcHRpb25hbFN1ZmZpeCA9IGlzT3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpcHRpb246IHBhcmFtZXRlckRlc2NyaXB0aW9ucy5nZXQocC5nZXROYW1lKCkpID8/IChpc09wdGlvbmFsID8gJyooT3B0aW9uYWwpKicgOiAnJyksXG4gICAgICBuYW1lOiBgJHtwLmdldE5hbWUoKX0ke29wdGlvbmFsU3VmZml4fWAsXG4gICAgICB0eXBlOiBzaW1wbGlmeVR5cGUocC5nZXRUeXBlKCkuZ2V0VGV4dCgpKVxuICAgIH07XG4gIH0pO1xuICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbXMubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke3AudHlwZX1gKS5qb2luKCcsICcpO1xuICBjb25zdCBpbmZvOiBNZW1iZXJJbmZvID0ge1xuICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbihtZXRob2QpLFxuICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyhtZXRob2QpLFxuICAgIGluaGVyaXRlZEZyb206ICcnLFxuICAgIGlzU3RhdGljOiBtZXRob2QuaXNTdGF0aWMoKSxcbiAgICBuYW1lLFxuICAgIG92ZXJsb2FkS2V5OiAnJyxcbiAgICBwYXJhbWV0ZXJzOiBwYXJhbXMsXG4gICAgcmVtYXJrczogZ2V0UmVtYXJrcyhtZXRob2QpLFxuICAgIHJldHVybkRlc2NyaXB0aW9uOiBnZXRSZXR1cm5EZXNjcmlwdGlvbihtZXRob2QpLFxuICAgIHJldHVyblR5cGU6IGdldERlY2xhcmVkUmV0dXJuVHlwZShtZXRob2QpLFxuICAgIHNpZ25hdHVyZTogYCR7bmFtZX0oJHtwYXJhbWV0ZXJTdHJpbmd9KWAsXG4gICAgc2luY2U6IGdldFNpbmNlKG1ldGhvZCksXG4gICAgdHlwZTogJydcbiAgfTtcbiAgaW5mby5vdmVybG9hZEtleSA9IGNvbXB1dGVPdmVybG9hZEtleShpbmZvKTtcbiAgcmV0dXJuIGluZm87XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYW4gaW50ZXJmYWNlIG1ldGhvZCdzIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kLlxuICogQHJldHVybnMgVGhlIG1ldGhvZCdzIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1ldGhvZFNpZ25hdHVyZUluZm8obWV0aG9kOiBNZXRob2RTaWduYXR1cmUpOiBNZW1iZXJJbmZvIHtcbiAgY29uc3QgbmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7XG4gIGNvbnN0IHBhcmFtZXRlckRlc2NyaXB0aW9ucyA9IGdldFBhcmFtZXRlckRlc2NyaXB0aW9ucyhtZXRob2QpO1xuICBjb25zdCBwYXJhbXMgPSBtZXRob2QuZ2V0UGFyYW1ldGVycygpLm1hcCgocCkgPT4ge1xuICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwLmlzT3B0aW9uYWwoKTtcbiAgICBjb25zdCBvcHRpb25hbFN1ZmZpeCA9IGlzT3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpcHRpb246IHBhcmFtZXRlckRlc2NyaXB0aW9ucy5nZXQocC5nZXROYW1lKCkpID8/IChpc09wdGlvbmFsID8gJyooT3B0aW9uYWwpKicgOiAnJyksXG4gICAgICBuYW1lOiBgJHtwLmdldE5hbWUoKX0ke29wdGlvbmFsU3VmZml4fWAsXG4gICAgICB0eXBlOiBzaW1wbGlmeVR5cGUocC5nZXRUeXBlKCkuZ2V0VGV4dCgpKVxuICAgIH07XG4gIH0pO1xuICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbXMubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke3AudHlwZX1gKS5qb2luKCcsICcpO1xuICBjb25zdCBpbmZvOiBNZW1iZXJJbmZvID0ge1xuICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbihtZXRob2QpLFxuICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyhtZXRob2QpLFxuICAgIGluaGVyaXRlZEZyb206ICcnLFxuICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICBuYW1lLFxuICAgIG92ZXJsb2FkS2V5OiAnJyxcbiAgICBwYXJhbWV0ZXJzOiBwYXJhbXMsXG4gICAgcmVtYXJrczogZ2V0UmVtYXJrcyhtZXRob2QpLFxuICAgIHJldHVybkRlc2NyaXB0aW9uOiBnZXRSZXR1cm5EZXNjcmlwdGlvbihtZXRob2QpLFxuICAgIHJldHVyblR5cGU6IGdldERlY2xhcmVkUmV0dXJuVHlwZShtZXRob2QpLFxuICAgIHNpZ25hdHVyZTogYCR7bmFtZX0oJHtwYXJhbWV0ZXJTdHJpbmd9KWAsXG4gICAgc2luY2U6IGdldFNpbmNlKG1ldGhvZCksXG4gICAgdHlwZTogJydcbiAgfTtcbiAgaW5mby5vdmVybG9hZEtleSA9IGNvbXB1dGVPdmVybG9hZEtleShpbmZvKTtcbiAgcmV0dXJuIGluZm87XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBjbGFzcyBwcm9wZXJ0eSdzIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSdzIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFByb3BlcnR5SW5mbyhwcm9wZXJ0eTogUHJvcGVydHlEZWNsYXJhdGlvbik6IE1lbWJlckluZm8ge1xuICBjb25zdCBuYW1lID0gcHJvcGVydHkuZ2V0TmFtZSgpO1xuICBjb25zdCBpc09wdGlvbmFsID0gcHJvcGVydHkuaGFzUXVlc3Rpb25Ub2tlbigpO1xuICBjb25zdCBvcHRpb25hbFN1ZmZpeCA9IGlzT3B0aW9uYWwgPyAnPycgOiAnJztcbiAgcmV0dXJuIHtcbiAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24ocHJvcGVydHkpLFxuICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyhwcm9wZXJ0eSksXG4gICAgaW5oZXJpdGVkRnJvbTogJycsXG4gICAgaXNTdGF0aWM6IHByb3BlcnR5LmlzU3RhdGljKCksXG4gICAgbmFtZTogYCR7bmFtZX0ke29wdGlvbmFsU3VmZml4fWAsXG4gICAgb3ZlcmxvYWRLZXk6ICcnLFxuICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgIHJlbWFya3M6IGdldFJlbWFya3MocHJvcGVydHkpLFxuICAgIHJldHVybkRlc2NyaXB0aW9uOiAnJyxcbiAgICByZXR1cm5UeXBlOiAnJyxcbiAgICBzaWduYXR1cmU6IGAke25hbWV9JHtvcHRpb25hbFN1ZmZpeH1gLFxuICAgIHNpbmNlOiBnZXRTaW5jZShwcm9wZXJ0eSksXG4gICAgdHlwZTogZ2V0UHJvcGVydHlUeXBlKHByb3BlcnR5KVxuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGFuIGludGVyZmFjZSBwcm9wZXJ0eSdzIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSdzIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFByb3BlcnR5U2lnbmF0dXJlSW5mbyhwcm9wZXJ0eTogUHJvcGVydHlTaWduYXR1cmUpOiBNZW1iZXJJbmZvIHtcbiAgY29uc3QgbmFtZSA9IHByb3BlcnR5LmdldE5hbWUoKTtcbiAgY29uc3QgaXNPcHRpb25hbCA9IHByb3BlcnR5Lmhhc1F1ZXN0aW9uVG9rZW4oKTtcbiAgY29uc3Qgb3B0aW9uYWxTdWZmaXggPSBpc09wdGlvbmFsID8gJz8nIDogJyc7XG4gIHJldHVybiB7XG4gICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKHByb3BlcnR5KSxcbiAgICBleGFtcGxlczogZ2V0RXhhbXBsZXMocHJvcGVydHkpLFxuICAgIGluaGVyaXRlZEZyb206ICcnLFxuICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICBuYW1lOiBgJHtuYW1lfSR7b3B0aW9uYWxTdWZmaXh9YCxcbiAgICBvdmVybG9hZEtleTogJycsXG4gICAgcGFyYW1ldGVyczogW10sXG4gICAgcmVtYXJrczogZ2V0UmVtYXJrcyhwcm9wZXJ0eSksXG4gICAgcmV0dXJuRGVzY3JpcHRpb246ICcnLFxuICAgIHJldHVyblR5cGU6ICcnLFxuICAgIHNpZ25hdHVyZTogYCR7bmFtZX0ke29wdGlvbmFsU3VmZml4fWAsXG4gICAgc2luY2U6IGdldFNpbmNlKHByb3BlcnR5KSxcbiAgICB0eXBlOiBnZXRQcm9wZXJ0eVR5cGUocHJvcGVydHkpXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSB0eXBlIGFsaWFzJ3MgbW9kZWwuXG4gKlxuICogQHBhcmFtIGFsaWFzIC0gVGhlIHR5cGUgYWxpYXMgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhbGlhcydzIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFR5cGVBbGlhc0luZm8oYWxpYXM6IFR5cGVBbGlhc0RlY2xhcmF0aW9uLCBuYW1lc3BhY2U6IHN0cmluZyk6IFR5cGVJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVHlwZXM6IFtdLFxuICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbihhbGlhcyksXG4gICAgZW51bU1lbWJlcnM6IFtdLFxuICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyhhbGlhcyksXG4gICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICBraW5kOiAndHlwZScsXG4gICAgbWV0aG9kczogW10sXG4gICAgbmFtZTogYWxpYXMuZ2V0TmFtZSgpLFxuICAgIG5hbWVzcGFjZSxcbiAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICByZW1hcmtzOiBnZXRSZW1hcmtzKGFsaWFzKSxcbiAgICB0eXBlQWxpYXNUZXh0OiBzaW1wbGlmeVR5cGUoYWxpYXMuZ2V0VHlwZU5vZGVPclRocm93KCkuZ2V0VGV4dCgpKSxcbiAgICB0eXBlUGFyYW1ldGVyczogYWxpYXMuZ2V0VHlwZVBhcmFtZXRlcnMoKS5tYXAoKHRwKSA9PiB0cC5nZXRUZXh0KCkpXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHRoZSByZXR1cm4gdHlwZSBhcyBkZWNsYXJlZCBpbiBzb3VyY2UgKHByZXNlcnZlcyB1bmlvbiBvcmRlciksIGZhbGxpbmcgYmFjayB0byByZXNvbHZlZCB0eXBlXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2Qgb3IgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNsYXJlZFJldHVyblR5cGUobWV0aG9kOiBSZXR1cm5UeXBlUHJvdmlkZXIpOiBzdHJpbmcge1xuICBjb25zdCBhbm5vdGF0aW9uID0gbWV0aG9kLmdldFJldHVyblR5cGVOb2RlPy4oKT8uZ2V0VGV4dCgpO1xuICByZXR1cm4gc2ltcGxpZnlUeXBlKGFubm90YXRpb24gPz8gbWV0aG9kLmdldFJldHVyblR5cGUoKS5nZXRUZXh0KCkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBKU0RvYyBkZXNjcmlwdGlvbiBvZiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZS5cbiAqIEByZXR1cm5zIFRoZSBkZXNjcmlwdGlvbiwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24obm9kZTogSlNEb2NhYmxlTm9kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGxhc3REb2MgPSBub2RlLmdldEpzRG9jcygpLmF0KC0xKTtcbiAgcmV0dXJuIGxhc3REb2MgPyBmb2xkVHNEb2NQYXJhZ3JhcGhzKGxhc3REb2MuZ2V0RGVzY3JpcHRpb24oKS50cmltKCkpIDogJyc7XG59XG5cbi8qKlxuICogRXh0cmFjdFxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUuXG4gKiBAcmV0dXJucyBUaGUgZXhhbXBsZXMnIHRleHRzLlxuICogQGV4YW1wbGUgYmxvY2tzIGZyb20gSlNEb2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4YW1wbGVzKG5vZGU6IEpTRG9jYWJsZU5vZGUpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4YW1wbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGRvYyBvZiBub2RlLmdldEpzRG9jcygpKSB7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgZG9jLmdldFRhZ3MoKSkge1xuICAgICAgaWYgKHRhZy5nZXRUYWdOYW1lKCkgIT09ICdleGFtcGxlJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGV4dCA9IHRhZy5nZXRDb21tZW50VGV4dCgpPy50cmltKCkgPz8gJyc7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBleGFtcGxlcy5wdXNoKHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhhbXBsZXM7XG59XG5cbi8qKlxuICogRXh0cmFjdFxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUuXG4gKiBAcmV0dXJucyBFYWNoIHBhcmFtZXRlcidzIG5hbWUgbWFwcGVkIHRvIGl0cyBkZXNjcmlwdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtZXRlckRlc2NyaXB0aW9ucyhub2RlOiBKU0RvY2FibGVOb2RlKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGRvY3MgPSBub2RlLmdldEpzRG9jcygpO1xuICBmb3IgKGNvbnN0IGRvYyBvZiBkb2NzKSB7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgZG9jLmdldFRhZ3MoKSkge1xuICAgICAgaWYgKHRhZy5nZXRUYWdOYW1lKCkgIT09ICdwYXJhbScpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRhZy5nZXRDb21tZW50VGV4dCgpPy50cmltKCkucmVwbGFjZUFsbCgvXFxzKlxcKlxccyokL2csICcnKS5yZXBsYWNlKC9eLVxccyovLCAnJykudHJpbSgpID8/ICcnKTtcbiAgICAgIGNvbnN0IHRhZ1RleHQgPSB0YWcuZ2V0VGV4dCgpO1xuICAgICAgY29uc3QgbmFtZU1hdGNoID0gL0BwYXJhbVxccysoPzpcXHtbXn1dKlxcfVxccyspPyg/PHBhcmFtTmFtZT5cXHcrKS8uZXhlYyh0YWdUZXh0KTtcbiAgICAgIGlmIChuYW1lTWF0Y2gpIHtcbiAgICAgICAgcmVzdWx0LnNldChnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG5hbWVNYXRjaCwgJ3BhcmFtTmFtZScpLCBjb21tZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBTdHJpcCBgfCB1bmRlZmluZWRgIG9ubHkgd2hlbiBpdCB3YXMgaW1wbGljaXRseSBhZGRlZCBieSB0cy1tb3JwaCBmb3Igb3B0aW9uYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSB0eXBlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eVR5cGUocHJvcGVydHk6IFByb3BlcnR5RGVjbGFyYXRpb24gfCBQcm9wZXJ0eVNpZ25hdHVyZSk6IHN0cmluZyB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcHJvcGVydHkuZ2V0VHlwZU5vZGUoKTtcbiAgcmV0dXJuIHR5cGVOb2RlID8gcmVzb2x2ZVR5cGVvZkFsaWFzZXMoc2ltcGxpZnlUeXBlKHR5cGVOb2RlLmdldFRleHQoKSksIHByb3BlcnR5LmdldFNvdXJjZUZpbGUoKSkgOiBzaW1wbGlmeVR5cGUocHJvcGVydHkuZ2V0VHlwZSgpLmdldFRleHQoKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdFxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUuXG4gKiBAcmV0dXJucyBUaGUgcmVtYXJrcywgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICogQHJlbWFya3MgdGV4dCBmcm9tIEpTRG9jXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW1hcmtzKG5vZGU6IEpTRG9jYWJsZU5vZGUpOiBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGRvYyBvZiBub2RlLmdldEpzRG9jcygpKSB7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgZG9jLmdldFRhZ3MoKSkge1xuICAgICAgaWYgKHRhZy5nZXRUYWdOYW1lKCkgPT09ICdyZW1hcmtzJyB8fCB0YWcuZ2V0VGFnTmFtZSgpID09PSAncmVtYXJrJykge1xuICAgICAgICByZXR1cm4gZm9sZFRzRG9jUGFyYWdyYXBocyh0YWcuZ2V0Q29tbWVudFRleHQoKT8udHJpbSgpLnJlcGxhY2VBbGwoL1xccypcXCpcXHMqJC9nLCAnJykudHJpbSgpID8/ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEV4dHJhY3RcbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlLlxuICogQHJldHVybnMgZGVzY3JpcHRpb24gZnJvbSBKU0RvY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmV0dXJuRGVzY3JpcHRpb24obm9kZTogSlNEb2NhYmxlTm9kZSk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgZG9jIG9mIG5vZGUuZ2V0SnNEb2NzKCkpIHtcbiAgICBmb3IgKGNvbnN0IHRhZyBvZiBkb2MuZ2V0VGFncygpKSB7XG4gICAgICBpZiAodGFnLmdldFRhZ05hbWUoKSA9PT0gJ3JldHVybnMnKSB7XG4gICAgICAgIHJldHVybiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRhZy5nZXRDb21tZW50VGV4dCgpPy50cmltKCkucmVwbGFjZSgvXi1cXHMqLywgJycpLnJlcGxhY2VBbGwoL1xccypcXCpcXHMqJC9nLCAnJykudHJpbSgpID8/ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHZlcnNpb24gYSBKU0RvYyBgc2luY2VgIHRhZyBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlLlxuICogQHJldHVybnMgVGhlIHZlcnNpb24sIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpbmNlKG5vZGU6IEpTRG9jYWJsZU5vZGUpOiBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGRvYyBvZiBub2RlLmdldEpzRG9jcygpKSB7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgZG9jLmdldFRhZ3MoKSkge1xuICAgICAgaWYgKHRhZy5nZXRUYWdOYW1lKCkgPT09ICdzaW5jZScpIHtcbiAgICAgICAgcmV0dXJuIHRhZy5nZXRDb21tZW50VGV4dCgpPy50cmltKCkucmVwbGFjZUFsbCgvXFxzKlxcKlxccyokL2csICcnKS50cmltKCkgPz8gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGB0eXBlb2YgYWxpYXNOYW1lYCBwYXR0ZXJucyB3aGVyZSBhbGlhc05hbWUgaXMgYW4gaW1wb3J0IGFsaWFzLlxuICogRS5nLiwgYHR5cGVvZiBtb21lbnRJbnN0YW5jZWAg4oaSIGB0eXBlb2YgbW9tZW50YCB3aGVuIGBpbXBvcnQgeyBtb21lbnQgYXMgbW9tZW50SW5zdGFuY2UgfWAuXG4gKlxuICogQHBhcmFtIHR5cGVUZXh0IC0gVGhlIHR5cGUgdGV4dC5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIC0gVGhlIHNvdXJjZSBmaWxlIGhvbGRpbmcgdGhlIGltcG9ydHMuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSB0ZXh0IHdpdGggdGhlIG9yaWdpbmFsIG5hbWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVR5cGVvZkFsaWFzZXModHlwZVRleHQ6IHN0cmluZywgc291cmNlRmlsZTogU291cmNlRmlsZSk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlUmVnRXhwTWF0Y2hlcyh0eXBlVGV4dCwgL1xcYnR5cGVvZiAoPzxhbGlhcz5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgYWxpYXMgPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnYWxpYXMnKTtcbiAgICBmb3IgKGNvbnN0IGltcG9ydERlY2xhcmF0aW9uIG9mIHNvdXJjZUZpbGUuZ2V0SW1wb3J0RGVjbGFyYXRpb25zKCkpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgaW1wb3J0RGVjbGFyYXRpb24uZ2V0TmFtZWRJbXBvcnRzKCkpIHtcbiAgICAgICAgaWYgKG5hbWVkSW1wb3J0LmdldEFsaWFzTm9kZSgpPy5nZXRUZXh0KCkgPT09IGFsaWFzKSB7XG4gICAgICAgICAgcmV0dXJuIGB0eXBlb2YgJHtuYW1lZEltcG9ydC5nZXROYW1lKCl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hbMF07XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQkEscUJBQXVDO0FBQ3ZDLHNCQUFzQjtBQVN0QixnQ0FLTztBQVNBLFNBQVMsaUJBQWlCLEtBQXVCLFdBQTZCO0FBQ25GLFFBQU0sT0FBTyxJQUFJLGVBQWU7QUFDaEMsUUFBTSxjQUFjLElBQUksZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLE1BQU0sc0JBQU0sT0FBTztBQUNwRixRQUFNLGdCQUFnQixJQUFJLFdBQVc7QUFDckMsU0FBTztBQUFBLElBQ0wsV0FBVyxnQkFBZ0IsQ0FBQyxjQUFjLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFBQSxJQUN4RCxpQkFBaUIsY0FBYyx1QkFBdUIsV0FBVyxJQUFJO0FBQUEsSUFDckUsYUFBYSxlQUFlLEdBQUc7QUFBQSxJQUMvQixhQUFhLENBQUM7QUFBQSxJQUNkLFVBQVUsWUFBWSxHQUFHO0FBQUEsSUFDekIsaUJBQWlCLElBQUksY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLE1BQU0sUUFBUSxDQUFDO0FBQUEsSUFDbkUsTUFBTTtBQUFBLElBQ04sU0FBUyxJQUFJLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsTUFBTSxzQkFBTSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sa0JBQWtCLENBQUMsQ0FBQztBQUFBLElBQ3ZHO0FBQUEsSUFDQTtBQUFBLElBQ0EsWUFBWSxJQUFJLGNBQWMsRUFB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
@@ -0,0 +1,149 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * JSDoc/declaration extraction: turns ts-morph declarations into the generator's `TypeInfo`/`MemberInfo`.
6
+ */
7
+ import type { ClassDeclaration, ConstructorDeclaration, EnumDeclaration, InterfaceDeclaration, JSDocableNode, MethodDeclaration, MethodSignature, PropertyDeclaration, PropertySignature, SourceFile, TypeAliasDeclaration } from 'ts-morph' with { 'resolution-mode': 'import' };
8
+ import type { MemberInfo, ReturnTypeProvider, TypeInfo } from './api-doc-types.cjs';
9
+ /**
10
+ * Extracts a class's model: its constructor, non-private properties and methods, and documentation.
11
+ *
12
+ * @param cls - The class declaration.
13
+ * @param namespace - The type's namespace.
14
+ * @returns The class's model.
15
+ */
16
+ export declare function extractClassInfo(cls: ClassDeclaration, namespace: string): TypeInfo;
17
+ /**
18
+ * Extracts a constructor's model.
19
+ *
20
+ * @param ctor - The constructor declaration.
21
+ * @returns The constructor's model.
22
+ */
23
+ export declare function extractConstructorInfo(ctor: ConstructorDeclaration): MemberInfo;
24
+ /**
25
+ * Extracts an enum's model.
26
+ *
27
+ * @param enumDeclaration - The enum declaration.
28
+ * @param namespace - The type's namespace.
29
+ * @returns The enum's model.
30
+ */
31
+ export declare function extractEnumInfo(enumDeclaration: EnumDeclaration, namespace: string): TypeInfo;
32
+ /**
33
+ * Extract the module-level `@file` description text, if any.
34
+ *
35
+ * @param src - The source file.
36
+ * @returns The overview, or an empty string when the file has no `@file` block.
37
+ */
38
+ export declare function extractFileOverview(src: SourceFile): string;
39
+ /**
40
+ * Extracts an interface's model.
41
+ *
42
+ * @param iface - The interface declaration.
43
+ * @param namespace - The type's namespace.
44
+ * @returns The interface's model.
45
+ */
46
+ export declare function extractInterfaceInfo(iface: InterfaceDeclaration, namespace: string): TypeInfo;
47
+ /**
48
+ * Extracts a class method's model.
49
+ *
50
+ * @param method - The method.
51
+ * @returns The method's model.
52
+ */
53
+ export declare function extractMethodInfo(method: MethodDeclaration): MemberInfo;
54
+ /**
55
+ * Extracts an interface method's model.
56
+ *
57
+ * @param method - The method.
58
+ * @returns The method's model.
59
+ */
60
+ export declare function extractMethodSignatureInfo(method: MethodSignature): MemberInfo;
61
+ /**
62
+ * Extracts a class property's model.
63
+ *
64
+ * @param property - The property.
65
+ * @returns The property's model.
66
+ */
67
+ export declare function extractPropertyInfo(property: PropertyDeclaration): MemberInfo;
68
+ /**
69
+ * Extracts an interface property's model.
70
+ *
71
+ * @param property - The property.
72
+ * @returns The property's model.
73
+ */
74
+ export declare function extractPropertySignatureInfo(property: PropertySignature): MemberInfo;
75
+ /**
76
+ * Extracts a type alias's model.
77
+ *
78
+ * @param alias - The type alias declaration.
79
+ * @param namespace - The type's namespace.
80
+ * @returns The type alias's model.
81
+ */
82
+ export declare function extractTypeAliasInfo(alias: TypeAliasDeclaration, namespace: string): TypeInfo;
83
+ /**
84
+ * Get the return type as declared in source (preserves union order), falling back to resolved type
85
+ *
86
+ * @param method - The method or function.
87
+ * @returns The return type.
88
+ */
89
+ export declare function getDeclaredReturnType(method: ReturnTypeProvider): string;
90
+ /**
91
+ * Extracts the JSDoc description of a node.
92
+ *
93
+ * @param node - The node.
94
+ * @returns The description, or an empty string.
95
+ */
96
+ export declare function getDescription(node: JSDocableNode): string;
97
+ /**
98
+ * Extract
99
+ *
100
+ * @param node - The node.
101
+ * @returns The examples' texts.
102
+ * @example blocks from JSDoc
103
+ */
104
+ export declare function getExamples(node: JSDocableNode): string[];
105
+ /**
106
+ * Extract
107
+ *
108
+ * @param node - The node.
109
+ * @returns Each parameter's name mapped to its description.
110
+ */
111
+ export declare function getParameterDescriptions(node: JSDocableNode): Map<string, string>;
112
+ /**
113
+ * Strip `| undefined` only when it was implicitly added by ts-morph for optional properties
114
+ *
115
+ * @param property - The property.
116
+ * @returns The type text.
117
+ */
118
+ export declare function getPropertyType(property: PropertyDeclaration | PropertySignature): string;
119
+ /**
120
+ * Extract
121
+ *
122
+ * @param node - The node.
123
+ * @returns The remarks, or an empty string.
124
+ * @remarks text from JSDoc
125
+ */
126
+ export declare function getRemarks(node: JSDocableNode): string;
127
+ /**
128
+ * Extract
129
+ *
130
+ * @param node - The node.
131
+ * @returns description from JSDoc
132
+ */
133
+ export declare function getReturnDescription(node: JSDocableNode): string;
134
+ /**
135
+ * Extract the version a JSDoc `since` tag names.
136
+ *
137
+ * @param node - The node.
138
+ * @returns The version, or an empty string.
139
+ */
140
+ export declare function getSince(node: JSDocableNode): string;
141
+ /**
142
+ * Resolve `typeof aliasName` patterns where aliasName is an import alias.
143
+ * E.g., `typeof momentInstance` → `typeof moment` when `import { moment as momentInstance }`.
144
+ *
145
+ * @param typeText - The type text.
146
+ * @param sourceFile - The source file holding the imports.
147
+ * @returns The type text with the original names.
148
+ */
149
+ export declare function resolveTypeofAliases(typeText: string, sourceFile: SourceFile): string;