@mnaoumov/typescript-dev-toolkit 1.3.1 → 2.1.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.
- package/README.md +4 -0
- package/assets/docs-site/components/ConstructorBlock.astro +16 -0
- package/assets/docs-site/components/ImportStatement.astro +12 -0
- package/assets/docs-site/components/MemberDetail.astro +101 -0
- package/assets/docs-site/components/MethodTable.astro +45 -0
- package/assets/docs-site/components/PropertyTable.astro +45 -0
- package/assets/docs-site/components/SiteTitle.astro +43 -0
- package/assets/docs-site/components/TypeSignature.astro +20 -0
- package/assets/docs-site/fonts/inter-latin-400-normal.ttf +0 -0
- package/assets/docs-site/fonts/inter-latin-700-normal.ttf +0 -0
- package/assets/docs-site/styles/global.css +221 -0
- package/dist/lib/cjs/build.cjs +1 -1
- package/dist/lib/cjs/build.d.cts +1 -1
- package/dist/lib/cjs/commitlint-config.cjs +18 -3
- package/dist/lib/cjs/commitlint-config.d.cts +6 -0
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +2 -2
- package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +2 -2
- package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
- package/dist/lib/cjs/docs-site/api-doc-constants.cjs +171 -0
- package/dist/lib/cjs/docs-site/api-doc-constants.d.cts +18 -0
- package/dist/lib/cjs/docs-site/api-doc-jsdoc.cjs +414 -0
- package/dist/lib/cjs/docs-site/api-doc-jsdoc.d.cts +149 -0
- package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +377 -0
- package/dist/lib/cjs/docs-site/api-doc-link-rendering.d.cts +185 -0
- package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +118 -0
- package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +36 -0
- package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +561 -0
- package/dist/lib/cjs/docs-site/api-doc-page-generation.d.cts +159 -0
- package/dist/lib/cjs/docs-site/api-doc-route-segments.cjs +42 -0
- package/dist/lib/cjs/docs-site/api-doc-route-segments.d.cts +25 -0
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +47 -0
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +53 -0
- package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +288 -0
- package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +75 -0
- package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +281 -0
- package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +178 -0
- package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +157 -0
- package/dist/lib/cjs/docs-site/api-doc-type-merging.d.cts +51 -0
- package/dist/lib/cjs/docs-site/api-doc-types.cjs +22 -0
- package/dist/lib/cjs/docs-site/api-doc-types.d.cts +157 -0
- package/dist/lib/cjs/docs-site/api-docs.cjs +143 -0
- package/dist/lib/cjs/docs-site/api-docs.d.cts +34 -0
- package/dist/lib/cjs/docs-site/astro-config.cjs +169 -0
- package/dist/lib/cjs/docs-site/astro-config.d.cts +23 -0
- package/dist/lib/cjs/docs-site/docs-links.cjs +123 -0
- package/dist/lib/cjs/docs-site/docs-links.d.cts +32 -0
- package/dist/lib/cjs/docs-site/docs-site-assets.cjs +64 -0
- package/dist/lib/cjs/docs-site/docs-site-assets.d.cts +23 -0
- package/dist/lib/cjs/docs-site/docs-site-commands.cjs +72 -0
- package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +29 -0
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +122 -0
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +162 -0
- package/dist/lib/cjs/docs-site/index.cjs +116 -0
- package/dist/lib/cjs/docs-site/index.d.cts +26 -0
- package/dist/lib/cjs/docs-site/link-check.cjs +197 -0
- package/dist/lib/cjs/docs-site/link-check.d.cts +163 -0
- package/dist/lib/cjs/docs-site/og-image-page.cjs +45 -0
- package/dist/lib/cjs/docs-site/og-image-page.d.cts +15 -0
- package/dist/lib/cjs/docs-site/og-image.cjs +326 -0
- package/dist/lib/cjs/docs-site/og-image.d.cts +70 -0
- package/dist/lib/cjs/docs-site/og-images.cjs +170 -0
- package/dist/lib/cjs/docs-site/og-images.d.cts +41 -0
- package/dist/lib/cjs/docs-site/route-data.cjs +47 -0
- package/dist/lib/cjs/docs-site/route-data.d.cts +14 -0
- package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +97 -0
- package/dist/lib/cjs/docs-site/satteri-github-alerts.d.cts +31 -0
- package/dist/lib/cjs/docs-site/satteri-relative-links.cjs +87 -0
- package/dist/lib/cjs/docs-site/satteri-relative-links.d.cts +29 -0
- package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +51 -0
- package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +38 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library-build.cjs +1 -1
- package/dist/lib/cjs/library-build.d.cts +2 -2
- package/dist/lib/cjs/linters/eslint-config.cjs +17 -17
- package/dist/lib/cjs/linters/eslint-config.d.cts +1 -7
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +2 -2
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +5 -8
- package/dist/lib/cjs/package-manager.cjs +2 -2
- package/dist/lib/esm/build.d.mts +1 -1
- package/dist/lib/esm/build.mjs +1 -1
- package/dist/lib/esm/commitlint-config.d.mts +6 -0
- package/dist/lib/esm/commitlint-config.mjs +7 -3
- package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
- package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
- package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
- package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
- package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
- package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
- package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
- package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
- package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
- package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
- package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
- package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
- package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
- package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
- package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
- package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
- package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
- package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
- package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
- package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
- package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
- package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
- package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
- package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
- package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
- package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
- package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
- package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
- package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
- package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
- package/dist/lib/esm/docs-site/index.d.mts +26 -0
- package/dist/lib/esm/docs-site/index.mjs +58 -0
- package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
- package/dist/lib/esm/docs-site/link-check.mjs +166 -0
- package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
- package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
- package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
- package/dist/lib/esm/docs-site/og-image.mjs +292 -0
- package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
- package/dist/lib/esm/docs-site/og-images.mjs +156 -0
- package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
- package/dist/lib/esm/docs-site/route-data.mjs +23 -0
- package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
- package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
- package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
- package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
- package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
- package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library-build.d.mts +2 -2
- package/dist/lib/esm/library-build.mjs +1 -1
- package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
- package/dist/lib/esm/linters/eslint-config.mjs +17 -17
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
- package/dist/lib/esm/package-manager.mjs +2 -2
- package/docs-site/api-doc-constants/package.json +6 -0
- package/docs-site/api-doc-jsdoc/package.json +6 -0
- package/docs-site/api-doc-link-rendering/package.json +6 -0
- package/docs-site/api-doc-package-sites/package.json +6 -0
- package/docs-site/api-doc-page-generation/package.json +6 -0
- package/docs-site/api-doc-route-segments/package.json +6 -0
- package/docs-site/api-doc-settings/package.json +6 -0
- package/docs-site/api-doc-source-processing/package.json +6 -0
- package/docs-site/api-doc-text-utils/package.json +6 -0
- package/docs-site/api-doc-type-merging/package.json +6 -0
- package/docs-site/api-doc-types/package.json +6 -0
- package/docs-site/api-docs/package.json +6 -0
- package/docs-site/astro-config/package.json +6 -0
- package/docs-site/docs-links/package.json +6 -0
- package/docs-site/docs-site-assets/package.json +6 -0
- package/docs-site/docs-site-commands/package.json +6 -0
- package/docs-site/docs-site-config/package.json +6 -0
- package/docs-site/index/package.json +6 -0
- package/docs-site/link-check/package.json +6 -0
- package/docs-site/og-image/package.json +6 -0
- package/docs-site/og-image-page/package.json +6 -0
- package/docs-site/og-images/package.json +6 -0
- package/docs-site/package.json +6 -0
- package/docs-site/route-data/package.json +6 -0
- package/docs-site/satteri-github-alerts/package.json +6 -0
- package/docs-site/satteri-relative-links/package.json +6 -0
- package/docs-site/unrendered-alerts/package.json +6 -0
- package/package.json +75 -5
|
@@ -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;
|