@mnaoumov/typescript-dev-toolkit 3.7.4 → 3.9.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/dist/lib/cjs/docs-site/api-doc-documented-files.cjs +3 -3
- package/dist/lib/cjs/docs-site/api-doc-documented-files.d.cts +3 -2
- package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +11 -4
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +73 -1
- package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +57 -4
- package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +43 -3
- package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +18 -5
- package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +5 -4
- package/dist/lib/cjs/docs-site/api-docs.cjs +9 -3
- package/dist/lib/cjs/docs-site/api-docs.d.cts +2 -1
- package/dist/lib/cjs/docs-site/docs-links.cjs +7 -2
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +11 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +38 -1
- package/dist/lib/esm/docs-site/api-doc-documented-files.d.mts +3 -2
- package/dist/lib/esm/docs-site/api-doc-documented-files.mjs +3 -3
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +11 -4
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +73 -1
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
- package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +43 -3
- package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +65 -5
- package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +5 -4
- package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +18 -5
- package/dist/lib/esm/docs-site/api-docs.d.mts +2 -1
- package/dist/lib/esm/docs-site/api-docs.mjs +11 -3
- package/dist/lib/esm/docs-site/docs-links.mjs +7 -2
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +38 -1
- package/dist/lib/esm/docs-site/docs-site-config.mjs +11 -1
- package/package.json +1 -1
|
@@ -62,7 +62,9 @@ __export(api_doc_source_processing_exports, {
|
|
|
62
62
|
computeCacheHash: () => computeCacheHash,
|
|
63
63
|
computeNamespace: () => computeNamespace,
|
|
64
64
|
findEntryFiles: () => findEntryFiles,
|
|
65
|
+
keepPublicApi: () => keepPublicApi,
|
|
65
66
|
processSourceFile: () => processSourceFile,
|
|
67
|
+
readPublicApiBarrel: () => readPublicApiBarrel,
|
|
66
68
|
registerGenericTypeParams: () => registerGenericTypeParams
|
|
67
69
|
});
|
|
68
70
|
module.exports = __toCommonJS(api_doc_source_processing_exports);
|
|
@@ -70,6 +72,7 @@ var import_node_crypto = require('node:crypto');
|
|
|
70
72
|
var import_node_fs = require('node:fs');
|
|
71
73
|
var import_node_path = require('node:path');
|
|
72
74
|
var import_ts_morph = require('ts-morph');
|
|
75
|
+
var import_typescript = require('typescript');
|
|
73
76
|
var import_api_doc_constants = require('./api-doc-constants.cjs');
|
|
74
77
|
var import_api_doc_documented_files = require('./api-doc-documented-files.cjs');
|
|
75
78
|
var import_api_doc_jsdoc = require('./api-doc-jsdoc.cjs');
|
|
@@ -183,6 +186,8 @@ function computeCacheHash(entryFiles, generatorDirectory) {
|
|
|
183
186
|
hash.update(JSON.stringify({
|
|
184
187
|
...settings,
|
|
185
188
|
externalTypeLinks: [...settings.externalTypeLinks],
|
|
189
|
+
importStatement: settings.importStatement && String(settings.importStatement),
|
|
190
|
+
memberRouteSegment: settings.memberRouteSegment && String(settings.memberRouteSegment),
|
|
186
191
|
packageSites: [...settings.packageSites]
|
|
187
192
|
}));
|
|
188
193
|
for (const filePath of [...entryFiles].sort()) {
|
|
@@ -194,21 +199,28 @@ function computeCacheHash(entryFiles, generatorDirectory) {
|
|
|
194
199
|
function computeNamespace(srcDirectory, filePath) {
|
|
195
200
|
return (0, import_node_path.relative)(srcDirectory, filePath).replaceAll("\\", "/").replace(/\.ts$/, "");
|
|
196
201
|
}
|
|
197
|
-
function findEntryFiles(directory) {
|
|
202
|
+
function findEntryFiles(directory, excludedDirectories = []) {
|
|
198
203
|
const results = [];
|
|
199
204
|
for (const entry of (0, import_node_fs.readdirSync)(directory, { withFileTypes: true })) {
|
|
200
205
|
const fullPath = (0, import_node_path.join)(directory, entry.name);
|
|
201
206
|
if (entry.isDirectory()) {
|
|
202
|
-
if (!(0, import_api_doc_documented_files.isDocumentedDirectoryName)(entry.name)) {
|
|
207
|
+
if (!(0, import_api_doc_documented_files.isDocumentedDirectoryName)(entry.name, excludedDirectories)) {
|
|
203
208
|
continue;
|
|
204
209
|
}
|
|
205
|
-
results.push(...findEntryFiles(fullPath));
|
|
210
|
+
results.push(...findEntryFiles(fullPath, excludedDirectories));
|
|
206
211
|
} else if ((0, import_api_doc_documented_files.isDocumentedFileName)(entry.name)) {
|
|
207
212
|
results.push(fullPath);
|
|
208
213
|
}
|
|
209
214
|
}
|
|
210
215
|
return results;
|
|
211
216
|
}
|
|
217
|
+
function keepPublicApi(types, barrel) {
|
|
218
|
+
for (const [key, info] of types) {
|
|
219
|
+
if (!barrel.wholeNamespaces.has(info.namespace) && !barrel.publicKeys.has(key)) {
|
|
220
|
+
types.delete(key);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
212
224
|
function processSourceFile(src, types, namespace) {
|
|
213
225
|
for (const alias of src.getTypeAliases()) {
|
|
214
226
|
if (!alias.isExported()) {
|
|
@@ -251,7 +263,46 @@ function processSourceFile(src, types, namespace) {
|
|
|
251
263
|
}
|
|
252
264
|
}
|
|
253
265
|
}
|
|
266
|
+
function readPublicApiBarrel(entryFile, sourceDirectory) {
|
|
267
|
+
const sourceFile = (0, import_typescript.createSourceFile)(entryFile, (0, import_node_fs.readFileSync)(entryFile, "utf-8"), import_typescript.ScriptTarget.Latest);
|
|
268
|
+
const files = /* @__PURE__ */ new Set();
|
|
269
|
+
const publicKeys = /* @__PURE__ */ new Set();
|
|
270
|
+
const wholeNamespaces = /* @__PURE__ */ new Set();
|
|
271
|
+
for (const statement of sourceFile.statements) {
|
|
272
|
+
if (!(0, import_typescript.isExportDeclaration)(statement) || statement.moduleSpecifier === void 0 || !(0, import_typescript.isStringLiteral)(statement.moduleSpecifier)) {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const moduleSpecifier = statement.moduleSpecifier.text;
|
|
276
|
+
if (!moduleSpecifier.startsWith(".")) {
|
|
277
|
+
throw new Error(`${entryFile} re-exports '${moduleSpecifier}', which is not a module of this package.`);
|
|
278
|
+
}
|
|
279
|
+
const filePath = (0, import_node_path.resolve)((0, import_node_path.dirname)(entryFile), moduleSpecifier);
|
|
280
|
+
if (!(0, import_node_fs.existsSync)(filePath)) {
|
|
281
|
+
throw new Error(`${entryFile} re-exports '${moduleSpecifier}', which does not exist.`);
|
|
282
|
+
}
|
|
283
|
+
files.add(filePath);
|
|
284
|
+
const namespace = computeNamespace(sourceDirectory, filePath);
|
|
285
|
+
const { exportClause } = statement;
|
|
286
|
+
if (exportClause === void 0) {
|
|
287
|
+
wholeNamespaces.add(namespace);
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if ((0, import_typescript.isNamespaceExport)(exportClause)) {
|
|
291
|
+
throw new Error(`${entryFile} re-exports '${moduleSpecifier}' as a namespace, which the API reference cannot document.`);
|
|
292
|
+
}
|
|
293
|
+
for (const element of exportClause.elements) {
|
|
294
|
+
if (element.propertyName !== void 0) {
|
|
295
|
+
throw new Error(`${entryFile} renames '${element.propertyName.text}' to '${element.name.text}', which the API reference cannot document.`);
|
|
296
|
+
}
|
|
297
|
+
publicKeys.add(qualifiedKey(namespace, element.name.text));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return { files: [...files], publicKeys, wholeNamespaces };
|
|
301
|
+
}
|
|
254
302
|
function registerGenericTypeParams(types) {
|
|
303
|
+
for (const name of (0, import_api_doc_settings.getApiDocSettings)().genericTypeParameters ?? []) {
|
|
304
|
+
import_api_doc_constants.GENERIC_TYPE_PARAMS.add(name);
|
|
305
|
+
}
|
|
255
306
|
const knownNames = /* @__PURE__ */ new Set();
|
|
256
307
|
for (const [, info] of types) {
|
|
257
308
|
knownNames.add(info.name);
|
|
@@ -279,7 +330,9 @@ function qualifiedKey(namespace, name) {
|
|
|
279
330
|
computeCacheHash,
|
|
280
331
|
computeNamespace,
|
|
281
332
|
findEntryFiles,
|
|
333
|
+
keepPublicApi,
|
|
282
334
|
processSourceFile,
|
|
335
|
+
readPublicApiBarrel,
|
|
283
336
|
registerGenericTypeParams
|
|
284
337
|
});
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU291cmNlIGRpc2NvdmVyeSArIGV4dHJhY3Rpb246IHdhbGtzIGBzcmNgLCBmaWx0ZXJzIHRvIGRvY3VtZW50YWJsZSBlbnRyeSBmaWxlcywgYW5kIHR1cm5zIGVhY2hcbiAqIGZpbGUncyBleHBvcnRlZCBkZWNsYXJhdGlvbnMgaW50byBgVHlwZUluZm9gIGVudHJpZXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge1xuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB0eXBlIHsgVHlwZUluZm8gfSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBHRU5FUklDX1RZUEVfUEFSQU1TIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lLFxuICBpc0RvY3VtZW50ZWRGaWxlTmFtZVxufSBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0Q2xhc3NJbmZvLFxuICBleHRyYWN0RW51bUluZm8sXG4gIGV4dHJhY3RJbnRlcmZhY2VJbmZvLFxuICBleHRyYWN0VHlwZUFsaWFzSW5mbyxcbiAgZ2V0RGVzY3JpcHRpb24sXG4gIGdldEV4YW1wbGVzLFxuICBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMsXG4gIGdldFJlbWFya3MsXG4gIGdldFJldHVybkRlc2NyaXB0aW9uLFxuICBnZXRTaW5jZVxufSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYWNrYWdlRGVjbGFyYXRpb24gfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQgeyBnZXRBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgeyBzaW1wbGlmeVR5cGUgfSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuICogQ29sbGVjdCB0b3AtbGV2ZWwgZXhwb3J0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBzcmMgLSBUaGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEZ1bmN0aW9ucyhzcmM6IFNvdXJjZUZpbGUsIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIG5hbWVzcGFjZTogc3RyaW5nKTogdm9pZCB7XG4gIGZvciAoY29uc3QgJGZ1bmN0aW9uIG9mIHNyYy5nZXRGdW5jdGlvbnMoKSkge1xuICAgIGlmICghJGZ1bmN0aW9uLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSAkZnVuY3Rpb24uZ2V0TmFtZSgpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIG5hbWUpO1xuICAgIGlmICh0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlckRlc2NyaXB0aW9ucyA9IGdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygkZnVuY3Rpb24pO1xuICAgIGNvbnN0IHBhcmFtcyA9ICRmdW5jdGlvbi5nZXRQYXJhbWV0ZXJzKCkubWFwKChwKSA9PiAoe1xuICAgICAgZGVzY3JpcHRpb246IHBhcmFtZXRlckRlc2NyaXB0aW9ucy5nZXQocC5nZXROYW1lKCkpID8/ICcnLFxuICAgICAgbmFtZTogcC5nZXROYW1lKCksXG4gICAgICB0eXBlOiBzaW1wbGlmeVR5cGUocC5nZXRUeXBlKCkuZ2V0VGV4dCgpKVxuICAgIH0pKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbXMubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke3AudHlwZX1gKS5qb2luKCcsICcpO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBzaW1wbGlmeVR5cGUoJGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRUZXh0KCkpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGAke25hbWV9KCR7cGFyYW1ldGVyU3RyaW5nfSlgO1xuICAgIHR5cGVzLnNldChrZXksIHtcbiAgICAgIGJhc2VUeXBlczogW10sXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24oJGZ1bmN0aW9uKSxcbiAgICAgIGVudW1NZW1iZXJzOiBbXSxcbiAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcygkZnVuY3Rpb24pLFxuICAgICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICAgIGtpbmQ6ICdmdW5jdGlvbicsXG4gICAgICBtZXRob2RzOiBbe1xuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24oJGZ1bmN0aW9uKSxcbiAgICAgICAgZXhhbXBsZXM6IGdldEV4YW1wbGVzKCRmdW5jdGlvbiksXG4gICAgICAgIGluaGVyaXRlZEZyb206ICcnLFxuICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG92ZXJsb2FkS2V5OiBuYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbXMsXG4gICAgICAgIHJlbWFya3M6IGdldFJlbWFya3MoJGZ1bmN0aW9uKSxcbiAgICAgICAgcmV0dXJuRGVzY3JpcHRpb246IGdldFJldHVybkRlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICAgIHJldHVyblR5cGUsXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgc2luY2U6IGdldFNpbmNlKCRmdW5jdGlvbiksXG4gICAgICAgIHR5cGU6ICcnXG4gICAgICB9XSxcbiAgICAgIG5hbWUsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgIHJlbWFya3M6IGdldFJlbWFya3MoJGZ1bmN0aW9uKSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiAkZnVuY3Rpb24uZ2V0VHlwZVBhcmFtZXRlcnMoKS5tYXAoKHRwKSA9PiB0cC5nZXRUZXh0KCkpXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmRzIHdoZXJlIGV2ZXJ5IHN5bWJvbCBhIHNvdXJjZSBmaWxlIGltcG9ydHMgaXMgZGVjbGFyZWQsIHNvIGEgdHlwZSBhbm90aGVyIGRvY3VtZW50ZWQgcGFja2FnZSBkZWNsYXJlc1xuICogbGlua3MgdG8gdGhhdCBwYWNrYWdlJ3Mgc2l0ZS5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhY2thZ2VEZWNsYXJhdGlvbnMoc3JjOiBTb3VyY2VGaWxlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgaW1wb3J0RGVjbGFyYXRpb24gb2Ygc3JjLmdldEltcG9ydERlY2xhcmF0aW9ucygpKSB7XG4gICAgZm9yIChjb25zdCBuYW1lZEltcG9ydCBvZiBpbXBvcnREZWNsYXJhdGlvbi5nZXROYW1lZEltcG9ydHMoKSkge1xuICAgICAgLy8gQW4gdW5yZXNvbHZlZCBpbXBvcnQgYWxpYXNlcyB0aGUgY2hlY2tlcidzIHVua25vd24gc3ltYm9sLCB3aGljaCBoYXMgbm8gZGVjbGFyYXRpb25zLlxuICAgICAgLy8gQSByZW5hbWVkIGltcG9ydCBjYXJyaWVzIGl0cyBzeW1ib2wgb24gdGhlIGxvY2FsIG5hbWUuXG4gICAgICBjb25zdCBsb2NhbE5hbWVOb2RlID0gbmFtZWRJbXBvcnQuZ2V0QWxpYXNOb2RlKCkgPz8gbmFtZWRJbXBvcnQuZ2V0TmFtZU5vZGUoKTtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IGxvY2FsTmFtZU5vZGUuZ2V0U3ltYm9sT3JUaHJvdygpLmdldEFsaWFzZWRTeW1ib2xPclRocm93KCkuZ2V0RGVjbGFyYXRpb25zKCk7XG4gICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuICAgICAgICAvLyBPbmx5IGEgdHlwZSBpcyBsaW5rZWQgZnJvbSB0eXBlIHRleHQ7IGEgZnVuY3Rpb24ncyBuYW1lIGFsc28gbWF0Y2hlcyB3b3JkcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlcyB0byBpdC5cbiAgICAgICAgaWYgKGlzVHlwZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHJlZ2lzdGVyUGFja2FnZURlY2xhcmF0aW9uKG5hbWVkSW1wb3J0LmdldE5hbWUoKSwgZGVjbGFyYXRpb24uZ2V0U291cmNlRmlsZSgpLmdldEZpbGVQYXRoKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCB0b3AtbGV2ZWwgZXhwb3J0ZWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIChlLmcuIGBleHBvcnQgY29uc3QgRU1QVFkgPSAnJ2ApLlxuICpcbiAqIEBwYXJhbSBzcmMgLSBUaGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFZhcmlhYmxlcyhzcmM6IFNvdXJjZUZpbGUsIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIG5hbWVzcGFjZTogc3RyaW5nKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdmFyaWFibGVTdGF0ZW1lbnQgb2Ygc3JjLmdldFZhcmlhYmxlU3RhdGVtZW50cygpKSB7XG4gICAgaWYgKCF2YXJpYWJsZVN0YXRlbWVudC5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbktpbmQgPSB2YXJpYWJsZVN0YXRlbWVudC5nZXREZWNsYXJhdGlvbktpbmQoKTtcbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlU3RhdGVtZW50LmdldERlY2xhcmF0aW9ucygpKSB7XG4gICAgICBjb25zdCBuYW1lID0gZGVjbGFyYXRpb24uZ2V0TmFtZSgpO1xuICAgICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgbmFtZSk7XG4gICAgICBpZiAodHlwZXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0eXBlcy5zZXQoa2V5LCB7XG4gICAgICAgIGJhc2VUeXBlczogW10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbih2YXJpYWJsZVN0YXRlbWVudCksXG4gICAgICAgIGVudW1NZW1iZXJzOiBbXSxcbiAgICAgICAgZXhhbXBsZXM6IGdldEV4YW1wbGVzKHZhcmlhYmxlU3RhdGVtZW50KSxcbiAgICAgICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICAgICAga2luZDogJ3ZhcmlhYmxlJyxcbiAgICAgICAgbWV0aG9kczogW10sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgIHJlbWFya3M6IGdldFJlbWFya3ModmFyaWFibGVTdGF0ZW1lbnQpLFxuICAgICAgICB0eXBlUGFyYW1ldGVyczogW10sXG4gICAgICAgIHZhcmlhYmxlS2V5d29yZDogZGVjbGFyYXRpb25LaW5kLFxuICAgICAgICB2YXJpYWJsZVR5cGU6IHNpbXBsaWZ5VHlwZShkZWNsYXJhdGlvbi5nZXRUeXBlKCkuZ2V0VGV4dCgpKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIGhhc2ggb2YgZXZlcnkgaW5wdXQgdGhhdCBkZWNpZGVzIHRoZSBnZW5lcmF0ZWQgcGFnZXM6IHRoZSBnZW5lcmF0b3IncyBvd24gbW9kdWxlcywgdGhlIHNldHRpbmdzIGFuZFxuICogdGhlIGVudHJ5IHNvdXJjZSBmaWxlcy4gQW4gdW5jaGFuZ2VkIGhhc2ggbGV0cyBhIHJ1biBza2lwIHRoZSBnZW5lcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBlbnRyeUZpbGVzIC0gVGhlIGVudHJ5IHNvdXJjZSBmaWxlcy5cbiAqIEBwYXJhbSBnZW5lcmF0b3JEaXJlY3RvcnkgLSBUaGUgZm9sZGVyIGhvbGRpbmcgdGhlIGdlbmVyYXRvcidzIG1vZHVsZXMuXG4gKiBAcmV0dXJucyBUaGUgaGFzaCwgYXMgaGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhY2hlSGFzaChlbnRyeUZpbGVzOiBzdHJpbmdbXSwgZ2VuZXJhdG9yRGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG5cbiAgLy8gVGhlIGdlbmVyYXRvciBpdHNlbGZcbiAgY29uc3QgZ2VuZXJhdG9yRmlsZXMgPSByZWFkZGlyU3luYyhnZW5lcmF0b3JEaXJlY3RvcnkpLmZpbHRlcigobmFtZSkgPT4gIW5hbWUuZW5kc1dpdGgoJy50ZXN0LnRzJykpLnNvcnQoKTtcbiAgZm9yIChjb25zdCBnZW5lcmF0b3JGaWxlIG9mIGdlbmVyYXRvckZpbGVzKSB7XG4gICAgaGFzaC51cGRhdGUoZ2VuZXJhdG9yRmlsZSk7XG4gICAgaGFzaC51cGRhdGUocmVhZEZpbGVTeW5jKGpvaW4oZ2VuZXJhdG9yRGlyZWN0b3J5LCBnZW5lcmF0b3JGaWxlKSwgJ3V0Zi04JykpO1xuICB9XG5cbiAgLy8gVGhlIHNldHRpbmdzLCB3aGljaCBldmVyeSBsaW5rIGFuZCBwYXRoIGRlcGVuZHMgb25cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBoYXNoLnVwZGF0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgLi4uc2V0dGluZ3MsXG4gICAgZXh0ZXJuYWxUeXBlTGlua3M6IFsuLi5zZXR0aW5ncy5leHRlcm5hbFR5cGVMaW5rc10sXG4gICAgcGFja2FnZVNpdGVzOiBbLi4uc2V0dGluZ3MucGFja2FnZVNpdGVzXVxuICB9KSk7XG5cbiAgLy8gSGFzaCBhbGwgZW50cnkgc291cmNlIGZpbGVzXG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgWy4uLmVudHJ5RmlsZXNdLnNvcnQoKSkge1xuICAgIGhhc2gudXBkYXRlKGZpbGVQYXRoKTtcbiAgICBoYXNoLnVwZGF0ZShyZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbmFtZXNwYWNlIChQT1NJWCBwYXRoIHJlbGF0aXZlIHRvIGBzcmNgLCBubyBleHRlbnNpb24pIGZvciBhIHNvdXJjZSBmaWxlLlxuICpcbiAqIEBwYXJhbSBzcmNEaXJlY3RvcnkgLSBUaGUgc291cmNlIGZvbGRlciB0aGUgbmFtZXNwYWNlIGlzIHJlbGF0aXZlIHRvLlxuICogQHBhcmFtIGZpbGVQYXRoIC0gVGhlIGZpbGUncyBwYXRoLlxuICogQHJldHVybnMgVGhlIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVOYW1lc3BhY2Uoc3JjRGlyZWN0b3J5OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVsYXRpdmUoc3JjRGlyZWN0b3J5LCBmaWxlUGF0aCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykucmVwbGFjZSgvXFwudHMkLywgJycpO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZpbmQgYWxsIGRvY3VtZW50YWJsZSBgKi50c2AgZW50cnkgZmlsZXMgdW5kZXIgYHNyY2AuXG4gKlxuICogRXhjbHVkZXM6IGAqLnRlc3QudHNgIChpbmNsLiBgKi5icm93c2VyLnRlc3QudHNgIC8gYCouaW50ZWdyYXRpb24udGVzdC50c2ApLCBgKi5kLnRzYCxcbiAqIGBpbmRleC50c2AsIGBfX21lcmdlZC50c2AsIGBzZXR1cC50c2AsIGAqLXNldHVwLnRzYCwgYW5kIGFueSBzdWJ0cmVlIHVuZGVyIGEgYEB0eXBlc2AsXG4gKiBgc3R5bGVzYCwgb3IgYHRlc3QtaGVscGVyc2AgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSBkaXJlY3RvcnkgLSBUaGUgZm9sZGVyIHRvIHNlYXJjaC5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSBmaWxlcycgcGF0aHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW50cnlGaWxlcyhkaXJlY3Rvcnk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihkaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBpZiAoIWlzRG9jdW1lbnRlZERpcmVjdG9yeU5hbWUoZW50cnkubmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHRzLnB1c2goLi4uZmluZEVudHJ5RmlsZXMoZnVsbFBhdGgpKTtcbiAgICB9IGVsc2UgaWYgKGlzRG9jdW1lbnRlZEZpbGVOYW1lKGVudHJ5Lm5hbWUpKSB7XG4gICAgICByZXN1bHRzLnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBhIHNvdXJjZSBmaWxlJ3MgZXhwb3J0ZWQgdHlwZSBhbGlhc2VzLCBlbnVtcywgaW50ZXJmYWNlcyBhbmQgY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTb3VyY2VGaWxlKHNyYzogU291cmNlRmlsZSwgdHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhbGlhcyBvZiBzcmMuZ2V0VHlwZUFsaWFzZXMoKSkge1xuICAgIGlmICghYWxpYXMuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgYWxpYXMuZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0VHlwZUFsaWFzSW5mbyhhbGlhcywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtRGVjbGFyYXRpb24gb2Ygc3JjLmdldEVudW1zKCkpIHtcbiAgICBpZiAoIWVudW1EZWNsYXJhdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBlbnVtRGVjbGFyYXRpb24uZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0RW51bUluZm8oZW51bURlY2xhcmF0aW9uLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGlmYWNlIG9mIHNyYy5nZXRJbnRlcmZhY2VzKCkpIHtcbiAgICBpZiAoIWlmYWNlLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGlmYWNlLmdldE5hbWUoKSk7XG4gICAgaWYgKCF0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgdHlwZXMuc2V0KGtleSwgZXh0cmFjdEludGVyZmFjZUluZm8oaWZhY2UsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2xzIG9mIHNyYy5nZXRDbGFzc2VzKCkpIHtcbiAgICBpZiAoIWNscy5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gY2xzLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0Q2xhc3NJbmZvKGNscywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIHR5cGUgcGFyYW1ldGVyIG5hbWVzIHNvIHJlbmRlclR5cGVXaXRoTGlua3Mgd29uJ3QgaHlwZXJsaW5rIHRoZW0uXG4gKiBTa2lwIG5hbWVzIHRoYXQgYXJlIGFsc28ga25vd24gdHlwZXMg4oCUIHRob3NlIHNob3VsZCBzdGlsbCBiZSBsaW5rYWJsZS5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJHZW5lcmljVHlwZVBhcmFtcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IGtub3duTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGtub3duTmFtZXMuYWRkKGluZm8ubmFtZSk7XG4gIH1cbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGZvciAoY29uc3QgdHAgb2YgaW5mby50eXBlUGFyYW1ldGVycykge1xuICAgICAgY29uc3QgYmFyZVBhcmFtZXRlciA9IHRwLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICAgIGlmICgha25vd25OYW1lcy5oYXMoYmFyZVBhcmFtZXRlcikpIHtcbiAgICAgICAgR0VORVJJQ19UWVBFX1BBUkFNUy5hZGQoYmFyZVBhcmFtZXRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVHlwZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiBOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBOb2RlLmlzQ2xhc3NEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHwgTm9kZS5pc0ludGVyZmFjZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSB8fCBOb2RlLmlzVHlwZUFsaWFzRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHx8IE5vZGUuaXNFbnVtRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pO1xufVxuXG5mdW5jdGlvbiBxdWFsaWZpZWRLZXkobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FB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
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU291cmNlIGRpc2NvdmVyeSArIGV4dHJhY3Rpb246IHdhbGtzIGBzcmNgLCBmaWx0ZXJzIHRvIGRvY3VtZW50YWJsZSBlbnRyeSBmaWxlcywgYW5kIHR1cm5zIGVhY2hcbiAqIGZpbGUncyBleHBvcnRlZCBkZWNsYXJhdGlvbnMgaW50byBgVHlwZUluZm9gIGVudHJpZXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICd0cy1tb3JwaCc7XG5pbXBvcnQge1xuICBjcmVhdGVTb3VyY2VGaWxlLFxuICBpc0V4cG9ydERlY2xhcmF0aW9uLFxuICBpc05hbWVzcGFjZUV4cG9ydCxcbiAgaXNTdHJpbmdMaXRlcmFsLFxuICBTY3JpcHRUYXJnZXRcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB0eXBlIHsgVHlwZUluZm8gfSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBHRU5FUklDX1RZUEVfUEFSQU1TIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lLFxuICBpc0RvY3VtZW50ZWRGaWxlTmFtZVxufSBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0Q2xhc3NJbmZvLFxuICBleHRyYWN0RW51bUluZm8sXG4gIGV4dHJhY3RJbnRlcmZhY2VJbmZvLFxuICBleHRyYWN0VHlwZUFsaWFzSW5mbyxcbiAgZ2V0RGVzY3JpcHRpb24sXG4gIGdldEV4YW1wbGVzLFxuICBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMsXG4gIGdldFJlbWFya3MsXG4gIGdldFJldHVybkRlc2NyaXB0aW9uLFxuICBnZXRTaW5jZVxufSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYWNrYWdlRGVjbGFyYXRpb24gfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQgeyBnZXRBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgeyBzaW1wbGlmeVR5cGUgfSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuICogQSBwYWNrYWdlJ3MgcHVibGljIEFQSSBiYXJyZWwsIHJlYWQgYnkge0BsaW5rIHJlYWRQdWJsaWNBcGlCYXJyZWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0FwaUJhcnJlbCB7XG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlcyB0aGUgYmFycmVsIHJlLWV4cG9ydHMgZnJvbSwgaW4gYmFycmVsIG9yZGVyOiB0aGUgZW50cnkgZmlsZXMgb2YgdGhlIEFQSSByZWZlcmVuY2UuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBxdWFsaWZpZWQgaWRzIChgPG5hbWVzcGFjZT4jPG5hbWU+YCkgb2YgdGhlIGV4cG9ydHMgdGhlIGJhcnJlbCBmb3J3YXJkcyBieSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljS2V5czogUmVhZG9ubHlTZXQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZXMgb2YgdGhlIG1vZHVsZXMgdGhlIGJhcnJlbCByZS1leHBvcnRzIHdob2xlIChgZXhwb3J0ICogZnJvbWApLlxuICAgKi9cbiAgcmVhZG9ubHkgd2hvbGVOYW1lc3BhY2VzOiBSZWFkb25seVNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIENvbGxlY3QgdG9wLWxldmVsIGV4cG9ydGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RGdW5jdGlvbnMoc3JjOiBTb3VyY2VGaWxlLCB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lc3BhY2U6IHN0cmluZyk6IHZvaWQge1xuICBmb3IgKGNvbnN0ICRmdW5jdGlvbiBvZiBzcmMuZ2V0RnVuY3Rpb25zKCkpIHtcbiAgICBpZiAoISRmdW5jdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gJGZ1bmN0aW9uLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAodHlwZXMuaGFzKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMgPSBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMoJGZ1bmN0aW9uKTtcbiAgICBjb25zdCBwYXJhbXMgPSAkZnVuY3Rpb24uZ2V0UGFyYW1ldGVycygpLm1hcCgocCkgPT4gKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMuZ2V0KHAuZ2V0TmFtZSgpKSA/PyAnJyxcbiAgICAgIG5hbWU6IHAuZ2V0TmFtZSgpLFxuICAgICAgdHlwZTogc2ltcGxpZnlUeXBlKHAuZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICB9KSk7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1zLm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHtwLnR5cGV9YCkuam9pbignLCAnKTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gc2ltcGxpZnlUeXBlKCRmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0VGV4dCgpKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBgJHtuYW1lfSgke3BhcmFtZXRlclN0cmluZ30pYDtcbiAgICB0eXBlcy5zZXQoa2V5LCB7XG4gICAgICBiYXNlVHlwZXM6IFtdLFxuICAgICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICBlbnVtTWVtYmVyczogW10sXG4gICAgICBleGFtcGxlczogZ2V0RXhhbXBsZXMoJGZ1bmN0aW9uKSxcbiAgICAgIGltcGxlbWVudHNUeXBlczogW10sXG4gICAgICBraW5kOiAnZnVuY3Rpb24nLFxuICAgICAgbWV0aG9kczogW3tcbiAgICAgICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcygkZnVuY3Rpb24pLFxuICAgICAgICBpbmhlcml0ZWRGcm9tOiAnJyxcbiAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBvdmVybG9hZEtleTogbmFtZSxcbiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1zLFxuICAgICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKCRmdW5jdGlvbiksXG4gICAgICAgIHJldHVybkRlc2NyaXB0aW9uOiBnZXRSZXR1cm5EZXNjcmlwdGlvbigkZnVuY3Rpb24pLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIHNpbmNlOiBnZXRTaW5jZSgkZnVuY3Rpb24pLFxuICAgICAgICB0eXBlOiAnJ1xuICAgICAgfV0sXG4gICAgICBuYW1lLFxuICAgICAgbmFtZXNwYWNlLFxuICAgICAgcHJvcGVydGllczogW10sXG4gICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKCRmdW5jdGlvbiksXG4gICAgICB0eXBlUGFyYW1ldGVyczogJGZ1bmN0aW9uLmdldFR5cGVQYXJhbWV0ZXJzKCkubWFwKCh0cCkgPT4gdHAuZ2V0VGV4dCgpKVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVjb3JkcyB3aGVyZSBldmVyeSBzeW1ib2wgYSBzb3VyY2UgZmlsZSBpbXBvcnRzIGlzIGRlY2xhcmVkLCBzbyBhIHR5cGUgYW5vdGhlciBkb2N1bWVudGVkIHBhY2thZ2UgZGVjbGFyZXNcbiAqIGxpbmtzIHRvIHRoYXQgcGFja2FnZSdzIHNpdGUuXG4gKlxuICogQHBhcmFtIHNyYyAtIFRoZSBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYzogU291cmNlRmlsZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGltcG9ydERlY2xhcmF0aW9uIG9mIHNyYy5nZXRJbXBvcnREZWNsYXJhdGlvbnMoKSkge1xuICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgaW1wb3J0RGVjbGFyYXRpb24uZ2V0TmFtZWRJbXBvcnRzKCkpIHtcbiAgICAgIC8vIEFuIHVucmVzb2x2ZWQgaW1wb3J0IGFsaWFzZXMgdGhlIGNoZWNrZXIncyB1bmtub3duIHN5bWJvbCwgd2hpY2ggaGFzIG5vIGRlY2xhcmF0aW9ucy5cbiAgICAgIC8vIEEgcmVuYW1lZCBpbXBvcnQgY2FycmllcyBpdHMgc3ltYm9sIG9uIHRoZSBsb2NhbCBuYW1lLlxuICAgICAgY29uc3QgbG9jYWxOYW1lTm9kZSA9IG5hbWVkSW1wb3J0LmdldEFsaWFzTm9kZSgpID8/IG5hbWVkSW1wb3J0LmdldE5hbWVOb2RlKCk7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBsb2NhbE5hbWVOb2RlLmdldFN5bWJvbE9yVGhyb3coKS5nZXRBbGlhc2VkU3ltYm9sT3JUaHJvdygpLmdldERlY2xhcmF0aW9ucygpO1xuICAgICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgLy8gT25seSBhIHR5cGUgaXMgbGlua2VkIGZyb20gdHlwZSB0ZXh0OyBhIGZ1bmN0aW9uJ3MgbmFtZSBhbHNvIG1hdGNoZXMgd29yZHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZXMgdG8gaXQuXG4gICAgICAgIGlmIChpc1R5cGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpIHtcbiAgICAgICAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihuYW1lZEltcG9ydC5nZXROYW1lKCksIGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKS5nZXRGaWxlUGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgdG9wLWxldmVsIGV4cG9ydGVkIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyAoZS5nLiBgZXhwb3J0IGNvbnN0IEVNUFRZID0gJydgKS5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RWYXJpYWJsZXMoc3JjOiBTb3VyY2VGaWxlLCB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lc3BhY2U6IHN0cmluZyk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHZhcmlhYmxlU3RhdGVtZW50IG9mIHNyYy5nZXRWYXJpYWJsZVN0YXRlbWVudHMoKSkge1xuICAgIGlmICghdmFyaWFibGVTdGF0ZW1lbnQuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyYXRpb25LaW5kID0gdmFyaWFibGVTdGF0ZW1lbnQuZ2V0RGVjbGFyYXRpb25LaW5kKCk7XG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZVN0YXRlbWVudC5nZXREZWNsYXJhdGlvbnMoKSkge1xuICAgICAgY29uc3QgbmFtZSA9IGRlY2xhcmF0aW9uLmdldE5hbWUoKTtcbiAgICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIG5hbWUpO1xuICAgICAgaWYgKHR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHlwZXMuc2V0KGtleSwge1xuICAgICAgICBiYXNlVHlwZXM6IFtdLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24odmFyaWFibGVTdGF0ZW1lbnQpLFxuICAgICAgICBlbnVtTWVtYmVyczogW10sXG4gICAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyh2YXJpYWJsZVN0YXRlbWVudCksXG4gICAgICAgIGltcGxlbWVudHNUeXBlczogW10sXG4gICAgICAgIGtpbmQ6ICd2YXJpYWJsZScsXG4gICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKHZhcmlhYmxlU3RhdGVtZW50KSxcbiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IFtdLFxuICAgICAgICB2YXJpYWJsZUtleXdvcmQ6IGRlY2xhcmF0aW9uS2luZCxcbiAgICAgICAgdmFyaWFibGVUeXBlOiBzaW1wbGlmeVR5cGUoZGVjbGFyYXRpb24uZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbXB1dGUgYSBoYXNoIG9mIGV2ZXJ5IGlucHV0IHRoYXQgZGVjaWRlcyB0aGUgZ2VuZXJhdGVkIHBhZ2VzOiB0aGUgZ2VuZXJhdG9yJ3Mgb3duIG1vZHVsZXMsIHRoZSBzZXR0aW5ncyBhbmRcbiAqIHRoZSBlbnRyeSBzb3VyY2UgZmlsZXMuIEFuIHVuY2hhbmdlZCBoYXNoIGxldHMgYSBydW4gc2tpcCB0aGUgZ2VuZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW50cnlGaWxlcyAtIFRoZSBlbnRyeSBzb3VyY2UgZmlsZXMuXG4gKiBAcGFyYW0gZ2VuZXJhdG9yRGlyZWN0b3J5IC0gVGhlIGZvbGRlciBob2xkaW5nIHRoZSBnZW5lcmF0b3IncyBtb2R1bGVzLlxuICogQHJldHVybnMgVGhlIGhhc2gsIGFzIGhleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWNoZUhhc2goZW50cnlGaWxlczogc3RyaW5nW10sIGdlbmVyYXRvckRpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuXG4gIC8vIFRoZSBnZW5lcmF0b3IgaXRzZWxmXG4gIGNvbnN0IGdlbmVyYXRvckZpbGVzID0gcmVhZGRpclN5bmMoZ2VuZXJhdG9yRGlyZWN0b3J5KS5maWx0ZXIoKG5hbWUpID0+ICFuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpKS5zb3J0KCk7XG4gIGZvciAoY29uc3QgZ2VuZXJhdG9yRmlsZSBvZiBnZW5lcmF0b3JGaWxlcykge1xuICAgIGhhc2gudXBkYXRlKGdlbmVyYXRvckZpbGUpO1xuICAgIGhhc2gudXBkYXRlKHJlYWRGaWxlU3luYyhqb2luKGdlbmVyYXRvckRpcmVjdG9yeSwgZ2VuZXJhdG9yRmlsZSksICd1dGYtOCcpKTtcbiAgfVxuXG4gIC8vIFRoZSBzZXR0aW5ncywgd2hpY2ggZXZlcnkgbGluayBhbmQgcGF0aCBkZXBlbmRzIG9uLiBBIGhvb2sgaXMgaGFzaGVkIGJ5IGl0cyBzb3VyY2UsIHdoaWNoIGBKU09OLnN0cmluZ2lmeWAgZHJvcHMuXG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgaGFzaC51cGRhdGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLnNldHRpbmdzLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzOiBbLi4uc2V0dGluZ3MuZXh0ZXJuYWxUeXBlTGlua3NdLFxuICAgIGltcG9ydFN0YXRlbWVudDogc2V0dGluZ3MuaW1wb3J0U3RhdGVtZW50ICYmIFN0cmluZyhzZXR0aW5ncy5pbXBvcnRTdGF0ZW1lbnQpLFxuICAgIG1lbWJlclJvdXRlU2VnbWVudDogc2V0dGluZ3MubWVtYmVyUm91dGVTZWdtZW50ICYmIFN0cmluZyhzZXR0aW5ncy5tZW1iZXJSb3V0ZVNlZ21lbnQpLFxuICAgIHBhY2thZ2VTaXRlczogWy4uLnNldHRpbmdzLnBhY2thZ2VTaXRlc11cbiAgfSkpO1xuXG4gIC8vIEhhc2ggYWxsIGVudHJ5IHNvdXJjZSBmaWxlc1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIFsuLi5lbnRyeUZpbGVzXS5zb3J0KCkpIHtcbiAgICBoYXNoLnVwZGF0ZShmaWxlUGF0aCk7XG4gICAgaGFzaC51cGRhdGUocmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKSk7XG4gIH1cblxuICByZXR1cm4gaGFzaC5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIG5hbWVzcGFjZSAoUE9TSVggcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgbm8gZXh0ZW5zaW9uKSBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqXG4gKiBAcGFyYW0gc3JjRGlyZWN0b3J5IC0gVGhlIHNvdXJjZSBmb2xkZXIgdGhlIG5hbWVzcGFjZSBpcyByZWxhdGl2ZSB0by5cbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBmaWxlJ3MgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTmFtZXNwYWNlKHNyY0RpcmVjdG9yeTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbGF0aXZlKHNyY0RpcmVjdG9yeSwgZmlsZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpLnJlcGxhY2UoL1xcLnRzJC8sICcnKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBmaW5kIGFsbCBkb2N1bWVudGFibGUgYCoudHNgIGVudHJ5IGZpbGVzIHVuZGVyIGBzcmNgLlxuICpcbiAqIEV4Y2x1ZGVzOiBgKi50ZXN0LnRzYCAoaW5jbC4gYCouYnJvd3Nlci50ZXN0LnRzYCAvIGAqLmludGVncmF0aW9uLnRlc3QudHNgKSwgYCouZC50c2AsXG4gKiBgaW5kZXgudHNgLCBgX19tZXJnZWQudHNgLCBgc2V0dXAudHNgLCBgKi1zZXR1cC50c2AsIGFuZCBhbnkgc3VidHJlZSB1bmRlciBhIGBAdHlwZXNgLFxuICogYHN0eWxlc2AsIG9yIGB0ZXN0LWhlbHBlcnNgIGRpcmVjdG9yeSwgb3Igb25lIG9mIGBleGNsdWRlZERpcmVjdG9yaWVzYC5cbiAqXG4gKiBAcGFyYW0gZGlyZWN0b3J5IC0gVGhlIGZvbGRlciB0byBzZWFyY2guXG4gKiBAcGFyYW0gZXhjbHVkZWREaXJlY3RvcmllcyAtIERpcmVjdG9yeSBuYW1lcyBleGNsdWRlZCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdHMuXG4gKiBAcmV0dXJucyBUaGUgZW50cnkgZmlsZXMnIHBhdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVudHJ5RmlsZXMoZGlyZWN0b3J5OiBzdHJpbmcsIGV4Y2x1ZGVkRGlyZWN0b3JpZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZGRpclN5bmMoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKCFpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lKGVudHJ5Lm5hbWUsIGV4Y2x1ZGVkRGlyZWN0b3JpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0cy5wdXNoKC4uLmZpbmRFbnRyeUZpbGVzKGZ1bGxQYXRoLCBleGNsdWRlZERpcmVjdG9yaWVzKSk7XG4gICAgfSBlbHNlIGlmIChpc0RvY3VtZW50ZWRGaWxlTmFtZShlbnRyeS5uYW1lKSkge1xuICAgICAgcmVzdWx0cy5wdXNoKGZ1bGxQYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogRHJvcHMgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIHRoZSBwdWJsaWMgQVBJIGJhcnJlbCBkb2VzIG5vdCByZS1leHBvcnQuIFJ1biBpdCBhZnRlciBgcmVzb2x2ZUluaGVyaXRlZE1lbWJlcnNgLCBzb1xuICogYSBwdWJsaWMgY2xhc3Mgc3RpbGwgaW5oZXJpdHMgdGhlIG1lbWJlcnMgb2YgYW4gaW50ZXJuYWwgYmFzZSBjbGFzcy5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIGJhcnJlbCAtIFRoZSBiYXJyZWwsIHJlYWQgYnkge0BsaW5rIHJlYWRQdWJsaWNBcGlCYXJyZWx9LlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcFB1YmxpY0FwaSh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBiYXJyZWw6IFB1YmxpY0FwaUJhcnJlbCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtrZXksIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgaWYgKCFiYXJyZWwud2hvbGVOYW1lc3BhY2VzLmhhcyhpbmZvLm5hbWVzcGFjZSkgJiYgIWJhcnJlbC5wdWJsaWNLZXlzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5kZWxldGUoa2V5KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBhIHNvdXJjZSBmaWxlJ3MgZXhwb3J0ZWQgdHlwZSBhbGlhc2VzLCBlbnVtcywgaW50ZXJmYWNlcyBhbmQgY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTb3VyY2VGaWxlKHNyYzogU291cmNlRmlsZSwgdHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhbGlhcyBvZiBzcmMuZ2V0VHlwZUFsaWFzZXMoKSkge1xuICAgIGlmICghYWxpYXMuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgYWxpYXMuZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0VHlwZUFsaWFzSW5mbyhhbGlhcywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtRGVjbGFyYXRpb24gb2Ygc3JjLmdldEVudW1zKCkpIHtcbiAgICBpZiAoIWVudW1EZWNsYXJhdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBlbnVtRGVjbGFyYXRpb24uZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0RW51bUluZm8oZW51bURlY2xhcmF0aW9uLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGlmYWNlIG9mIHNyYy5nZXRJbnRlcmZhY2VzKCkpIHtcbiAgICBpZiAoIWlmYWNlLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGlmYWNlLmdldE5hbWUoKSk7XG4gICAgaWYgKCF0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgdHlwZXMuc2V0KGtleSwgZXh0cmFjdEludGVyZmFjZUluZm8oaWZhY2UsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2xzIG9mIHNyYy5nZXRDbGFzc2VzKCkpIHtcbiAgICBpZiAoIWNscy5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gY2xzLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0Q2xhc3NJbmZvKGNscywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYSBwYWNrYWdlJ3MgcHVibGljIEFQSSBiYXJyZWw6IHRoZSBtb2R1bGVzIGl0IHJlLWV4cG9ydHMgZnJvbSBhbmQgdGhlIG5hbWVzIGl0IGZvcndhcmRzLlxuICpcbiAqIEl0IGlzIHBhcnNlZCBvbiBpdHMgb3duIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHRzLW1vcnBoIHByb2plY3QsIGJlY2F1c2UgdGhlIGNhY2hlIGNoZWNrIG5lZWRzIHRoZSBlbnRyeSBmaWxlc1xuICogYmVmb3JlIHRoYXQgcHJvamVjdCBleGlzdHMsIGFuZCBhIGNhY2hlIGhpdCBtdXN0IG5vdCBwYXkgZm9yIGxvYWRpbmcgaXQuXG4gKlxuICogQHBhcmFtIGVudHJ5RmlsZSAtIFRoZSBiYXJyZWwsIGUuZy4gYDxyb290Pi9zcmMvaW5kZXgudHNgLlxuICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSAtIFRoZSBmb2xkZXIgbmFtZXNwYWNlcyBhcmUgcmVsYXRpdmUgdG8uXG4gKiBAcmV0dXJucyBUaGUgYmFycmVsLlxuICogQHRocm93cyBJZiB0aGUgYmFycmVsIHJlLWV4cG9ydHMgYSBtb2R1bGUgdGhhdCBkb2VzIG5vdCBleGlzdCBvciBiZWxvbmdzIHRvIGFub3RoZXIgcGFja2FnZSwgcmVuYW1lcyBhbiBleHBvcnQsXG4gKiBvciByZS1leHBvcnRzIGEgbW9kdWxlIGFzIGEgbmFtZXNwYWNlOiBub25lIG9mIHRoZXNlIGNhbiBiZSBkb2N1bWVudGVkIHVuZGVyIHRoZSBuYW1lIGEgY29uc3VtZXIgaW1wb3J0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQdWJsaWNBcGlCYXJyZWwoZW50cnlGaWxlOiBzdHJpbmcsIHNvdXJjZURpcmVjdG9yeTogc3RyaW5nKTogUHVibGljQXBpQmFycmVsIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IGNyZWF0ZVNvdXJjZUZpbGUoZW50cnlGaWxlLCByZWFkRmlsZVN5bmMoZW50cnlGaWxlLCAndXRmLTgnKSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCk7XG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHB1YmxpY0tleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgd2hvbGVOYW1lc3BhY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFpc0V4cG9ydERlY2xhcmF0aW9uKHN0YXRlbWVudCkgfHwgc3RhdGVtZW50Lm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkIHx8ICFpc1N0cmluZ0xpdGVyYWwoc3RhdGVtZW50Lm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBzdGF0ZW1lbnQubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gICAgaWYgKCFtb2R1bGVTcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlGaWxlfSByZS1leHBvcnRzICcke21vZHVsZVNwZWNpZmllcn0nLCB3aGljaCBpcyBub3QgYSBtb2R1bGUgb2YgdGhpcyBwYWNrYWdlLmApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoZGlybmFtZShlbnRyeUZpbGUpLCBtb2R1bGVTcGVjaWZpZXIpO1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeUZpbGV9IHJlLWV4cG9ydHMgJyR7bW9kdWxlU3BlY2lmaWVyfScsIHdoaWNoIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBmaWxlcy5hZGQoZmlsZVBhdGgpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbXB1dGVOYW1lc3BhY2Uoc291cmNlRGlyZWN0b3J5LCBmaWxlUGF0aCk7XG5cbiAgICBjb25zdCB7IGV4cG9ydENsYXVzZSB9ID0gc3RhdGVtZW50O1xuICAgIGlmIChleHBvcnRDbGF1c2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgd2hvbGVOYW1lc3BhY2VzLmFkZChuYW1lc3BhY2UpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc05hbWVzcGFjZUV4cG9ydChleHBvcnRDbGF1c2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlGaWxlfSByZS1leHBvcnRzICcke21vZHVsZVNwZWNpZmllcn0nIGFzIGEgbmFtZXNwYWNlLCB3aGljaCB0aGUgQVBJIHJlZmVyZW5jZSBjYW5ub3QgZG9jdW1lbnQuYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBleHBvcnRDbGF1c2UuZWxlbWVudHMpIHtcbiAgICAgIGlmIChlbGVtZW50LnByb3BlcnR5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeUZpbGV9IHJlbmFtZXMgJyR7ZWxlbWVudC5wcm9wZXJ0eU5hbWUudGV4dH0nIHRvICcke2VsZW1lbnQubmFtZS50ZXh0fScsIHdoaWNoIHRoZSBBUEkgcmVmZXJlbmNlIGNhbm5vdCBkb2N1bWVudC5gKTtcbiAgICAgIH1cbiAgICAgIHB1YmxpY0tleXMuYWRkKHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGVsZW1lbnQubmFtZS50ZXh0KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZmlsZXM6IFsuLi5maWxlc10sIHB1YmxpY0tleXMsIHdob2xlTmFtZXNwYWNlcyB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGFsbCB0eXBlIHBhcmFtZXRlciBuYW1lcyBzbyByZW5kZXJUeXBlV2l0aExpbmtzIHdvbid0IGh5cGVybGluayB0aGVtLlxuICogU2tpcCBuYW1lcyB0aGF0IGFyZSBhbHNvIGtub3duIHR5cGVzIOKAlCB0aG9zZSBzaG91bGQgc3RpbGwgYmUgbGlua2FibGUuIFRoZSBzaXRlJ3MgYGdlbmVyaWNUeXBlUGFyYW1ldGVyc2BcbiAqIGFyZSByZWdpc3RlcmVkIGFzIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGdldEFwaURvY1NldHRpbmdzKCkuZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzID8/IFtdKSB7XG4gICAgR0VORVJJQ19UWVBFX1BBUkFNUy5hZGQobmFtZSk7XG4gIH1cbiAgY29uc3Qga25vd25OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFssIGluZm9dIG9mIHR5cGVzKSB7XG4gICAga25vd25OYW1lcy5hZGQoaW5mby5uYW1lKTtcbiAgfVxuICBmb3IgKGNvbnN0IFssIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgZm9yIChjb25zdCB0cCBvZiBpbmZvLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpO1xuICAgICAgaWYgKCFrbm93bk5hbWVzLmhhcyhiYXJlUGFyYW1ldGVyKSkge1xuICAgICAgICBHRU5FUklDX1RZUEVfUEFSQU1TLmFkZChiYXJlUGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUeXBlRGVjbGFyYXRpb24oZGVjbGFyYXRpb246IE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIE5vZGUuaXNDbGFzc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSB8fCBOb2RlLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHx8IE5vZGUuaXNUeXBlQWxpYXNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHwgTm9kZS5pc0VudW1EZWNsYXJhdGlvbihkZWNsYXJhdGlvbik7XG59XG5cbmZ1bmN0aW9uIHF1YWxpZmllZEtleShuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke25hbWVzcGFjZX0jJHtuYW1lfWA7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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
|
|
@@ -7,6 +7,23 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { SourceFile } from 'ts-morph' with { 'resolution-mode': 'import' };
|
|
9
9
|
import type { TypeInfo } from './api-doc-types.cjs';
|
|
10
|
+
/**
|
|
11
|
+
* A package's public API barrel, read by {@link readPublicApiBarrel}.
|
|
12
|
+
*/
|
|
13
|
+
export interface PublicApiBarrel {
|
|
14
|
+
/**
|
|
15
|
+
* The modules the barrel re-exports from, in barrel order: the entry files of the API reference.
|
|
16
|
+
*/
|
|
17
|
+
readonly files: readonly string[];
|
|
18
|
+
/**
|
|
19
|
+
* The qualified ids (`<namespace>#<name>`) of the exports the barrel forwards by name.
|
|
20
|
+
*/
|
|
21
|
+
readonly publicKeys: ReadonlySet<string>;
|
|
22
|
+
/**
|
|
23
|
+
* The namespaces of the modules the barrel re-exports whole (`export * from`).
|
|
24
|
+
*/
|
|
25
|
+
readonly wholeNamespaces: ReadonlySet<string>;
|
|
26
|
+
}
|
|
10
27
|
/**
|
|
11
28
|
* Collect top-level exported functions.
|
|
12
29
|
*
|
|
@@ -52,12 +69,21 @@ export declare function computeNamespace(srcDirectory: string, filePath: string)
|
|
|
52
69
|
*
|
|
53
70
|
* Excludes: `*.test.ts` (incl. `*.browser.test.ts` / `*.integration.test.ts`), `*.d.ts`,
|
|
54
71
|
* `index.ts`, `__merged.ts`, `setup.ts`, `*-setup.ts`, and any subtree under a `@types`,
|
|
55
|
-
* `styles`, or `test-helpers` directory
|
|
72
|
+
* `styles`, or `test-helpers` directory, or one of `excludedDirectories`.
|
|
56
73
|
*
|
|
57
74
|
* @param directory - The folder to search.
|
|
75
|
+
* @param excludedDirectories - Directory names excluded in addition to the defaults.
|
|
58
76
|
* @returns The entry files' paths.
|
|
59
77
|
*/
|
|
60
|
-
export declare function findEntryFiles(directory: string): string[];
|
|
78
|
+
export declare function findEntryFiles(directory: string, excludedDirectories?: readonly string[]): string[];
|
|
79
|
+
/**
|
|
80
|
+
* Drops every documented type the public API barrel does not re-export. Run it after `resolveInheritedMembers`, so
|
|
81
|
+
* a public class still inherits the members of an internal base class.
|
|
82
|
+
*
|
|
83
|
+
* @param types - The documented types, keyed by qualified id.
|
|
84
|
+
* @param barrel - The barrel, read by {@link readPublicApiBarrel}.
|
|
85
|
+
*/
|
|
86
|
+
export declare function keepPublicApi(types: Map<string, TypeInfo>, barrel: PublicApiBarrel): void;
|
|
61
87
|
/**
|
|
62
88
|
* Collects a source file's exported type aliases, enums, interfaces and classes.
|
|
63
89
|
*
|
|
@@ -66,9 +92,23 @@ export declare function findEntryFiles(directory: string): string[];
|
|
|
66
92
|
* @param namespace - The type's namespace.
|
|
67
93
|
*/
|
|
68
94
|
export declare function processSourceFile(src: SourceFile, types: Map<string, TypeInfo>, namespace: string): void;
|
|
95
|
+
/**
|
|
96
|
+
* Reads a package's public API barrel: the modules it re-exports from and the names it forwards.
|
|
97
|
+
*
|
|
98
|
+
* It is parsed on its own rather than through the ts-morph project, because the cache check needs the entry files
|
|
99
|
+
* before that project exists, and a cache hit must not pay for loading it.
|
|
100
|
+
*
|
|
101
|
+
* @param entryFile - The barrel, e.g. `<root>/src/index.ts`.
|
|
102
|
+
* @param sourceDirectory - The folder namespaces are relative to.
|
|
103
|
+
* @returns The barrel.
|
|
104
|
+
* @throws If the barrel re-exports a module that does not exist or belongs to another package, renames an export,
|
|
105
|
+
* or re-exports a module as a namespace: none of these can be documented under the name a consumer imports.
|
|
106
|
+
*/
|
|
107
|
+
export declare function readPublicApiBarrel(entryFile: string, sourceDirectory: string): PublicApiBarrel;
|
|
69
108
|
/**
|
|
70
109
|
* Register all type parameter names so renderTypeWithLinks won't hyperlink them.
|
|
71
|
-
* Skip names that are also known types — those should still be linkable.
|
|
110
|
+
* Skip names that are also known types — those should still be linkable. The site's `genericTypeParameters`
|
|
111
|
+
* are registered as given.
|
|
72
112
|
*
|
|
73
113
|
* @param types - The documented types, keyed by qualified id.
|
|
74
114
|
*/
|
|
@@ -152,7 +152,10 @@ function getDisplayName(name, info) {
|
|
|
152
152
|
function getImportStatement(info) {
|
|
153
153
|
const isTypeOnly = ["enum", "interface", "type"].includes(info.kind);
|
|
154
154
|
const importKeyword = isTypeOnly ? "import type" : "import";
|
|
155
|
-
|
|
155
|
+
const settings = (0, import_api_doc_settings.getApiDocSettings)();
|
|
156
|
+
const moduleSpecifier = settings.publicApiEntry === void 0 ? `${settings.packageName}/${info.namespace}` : settings.packageName;
|
|
157
|
+
const defaultImportStatement = `${importKeyword} { ${info.name} } from '${moduleSpecifier}';`;
|
|
158
|
+
return settings.importStatement === void 0 ? defaultImportStatement : settings.importStatement({ defaultImportStatement, isTypeOnly, kind: info.kind, name: info.name, namespace: info.namespace });
|
|
156
159
|
}
|
|
157
160
|
function getNamespaceDirectory(namespace) {
|
|
158
161
|
return namespace;
|
|
@@ -231,13 +234,23 @@ function truncateSignature(signature) {
|
|
|
231
234
|
const collapsed = signature.replaceAll(/\s+/g, " ").trim();
|
|
232
235
|
return collapsed.length <= SIGNATURE_MAX_LENGTH ? collapsed : `${collapsed.slice(0, SIGNATURE_MAX_LENGTH - 1).trimEnd()}\u2026`;
|
|
233
236
|
}
|
|
237
|
+
function avoidIndexSlug(slug) {
|
|
238
|
+
return slug === "index" ? "index-member" : slug;
|
|
239
|
+
}
|
|
240
|
+
function getCustomMemberRouteSegment(nameOrOverloadKey) {
|
|
241
|
+
return (0, import_api_doc_settings.getApiDocSettings)().memberRouteSegment?.(nameOrOverloadKey);
|
|
242
|
+
}
|
|
243
|
+
function keepTrailingUnderscores(slug, name) {
|
|
244
|
+
return slug ? `${slug}${name.slice(name.replace(/_+$/, "").length)}` : slug;
|
|
245
|
+
}
|
|
234
246
|
function slugifyMemberName(name) {
|
|
235
|
-
const
|
|
236
|
-
|
|
247
|
+
const unquoted = name.replaceAll(/^["']|["']$/g, "");
|
|
248
|
+
const cleaned = unquoted.replaceAll(/[^a-zA-Z0-9]/g, "-").replaceAll(/-+/g, "-").replaceAll(/^-|-$/g, "");
|
|
249
|
+
return avoidIndexSlug(getCustomMemberRouteSegment(name) ?? (keepTrailingUnderscores(cleaned, unquoted) || "unnamed"));
|
|
237
250
|
}
|
|
238
251
|
function slugifyOverloadKey(overloadKey) {
|
|
239
252
|
const slug = overloadKey.replaceAll(/["'()]/g, " ").replaceAll(/[^a-zA-Z0-9\s]/g, "").trim().replaceAll(/\s+/g, "-");
|
|
240
|
-
return
|
|
253
|
+
return avoidIndexSlug(getCustomMemberRouteSegment(overloadKey) ?? keepTrailingUnderscores(slug, overloadKey));
|
|
241
254
|
}
|
|
242
255
|
const OG_DESCRIPTION_MAX_LENGTH = 160;
|
|
243
256
|
function stripMarkdown(text) {
|
|
@@ -282,4 +295,4 @@ function escapeMdxProseChars(chunk) {
|
|
|
282
295
|
stripMarkdown,
|
|
283
296
|
truncateSignature
|
|
284
297
|
});
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgYmFyZSBge0BsaW5rIFRhcmdldH1gIHJlYWRzIGFzIGl0cyB0YXJnZXQsIGFzIGByZXNvbHZlTGlua3NgIHJlbmRlcnMgaXQ7IGRyb3BwaW5nIGl0IGxlYXZlcyBhIGhvbGUgaW4gdGhlIHNlbnRlbmNlLlxuICBjb25zdCBwbGFpbiA9IHJlcGxhY2VSZWdFeHBNYXRjaGVzKFxuICAgIHRleHQsXG4gICAgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXHMqXFx9L2csXG4gICAgKG1hdGNoKSA9PiBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdkaXNwbGF5JykgPz8gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpXG4gIClcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC4gQSBwYWNrYWdlIHB1Ymxpc2hpbmcgaXRzIEFQSSBmcm9tIG9uZSBiYXJyZWxcbiAqIChgcHVibGljQXBpRW50cnlgKSBpcyBpbXBvcnRlZCBmcm9tIGl0cyByb290IGluc3RlYWQuXG4gKlxuICogSW50ZXJmYWNlcyAvIHR5cGUgYWxpYXNlcyAvIGVudW1zIGFyZSBpbXBvcnRlZCB3aXRoIGBpbXBvcnQgdHlwZWA7IGNsYXNzZXMgLyBmdW5jdGlvbnMgL1xuICogdmFyaWFibGVzIHdpdGggYSB2YWx1ZSBgaW1wb3J0YC4gQSBzaXRlJ3MgYGltcG9ydFN0YXRlbWVudGAgc2V0dGluZyByZXBsYWNlcyB0aGF0IHN0YXRlbWVudC5cbiAqXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgaW1wb3J0IHN0YXRlbWVudCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgc2l0ZSdzIGBpbXBvcnRTdGF0ZW1lbnRgIHNob3dzIG5vbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRTdGF0ZW1lbnQoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBpc1R5cGVPbmx5ID0gWydlbnVtJywgJ2ludGVyZmFjZScsICd0eXBlJ10uaW5jbHVkZXMoaW5mby5raW5kKTtcbiAgY29uc3QgaW1wb3J0S2V5d29yZCA9IGlzVHlwZU9ubHkgPyAnaW1wb3J0IHR5cGUnIDogJ2ltcG9ydCc7XG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gc2V0dGluZ3MucHVibGljQXBpRW50cnkgPT09IHVuZGVmaW5lZCA/IGAke3NldHRpbmdzLnBhY2thZ2VOYW1lfS8ke2luZm8ubmFtZXNwYWNlfWAgOiBzZXR0aW5ncy5wYWNrYWdlTmFtZTtcbiAgY29uc3QgZGVmYXVsdEltcG9ydFN0YXRlbWVudCA9IGAke2ltcG9ydEtleXdvcmR9IHsgJHtpbmZvLm5hbWV9IH0gZnJvbSAnJHttb2R1bGVTcGVjaWZpZXJ9JztgO1xuICByZXR1cm4gc2V0dGluZ3MuaW1wb3J0U3RhdGVtZW50ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SW1wb3J0U3RhdGVtZW50IDogc2V0dGluZ3MuaW1wb3J0U3RhdGVtZW50KHsgZGVmYXVsdEltcG9ydFN0YXRlbWVudCwgaXNUeXBlT25seSwga2luZDogaW5mby5raW5kLCBuYW1lOiBpbmZvLm5hbWUsIG5hbWVzcGFjZTogaW5mby5uYW1lc3BhY2UgfSk7XG59XG5cbi8qKlxuICogVGhlIGZvbGRlciBhIG5hbWVzcGFjZSdzIHBhZ2VzIGFyZSB3cml0dGVuIHRvLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIFNhbml0aXplIGEgbWVtYmVyIG5hbWUgZm9yIHVzZSBpbiBhIGNhc2UtUFJFU0VSVkVEIFVSTC9yb3V0ZSBzZWdtZW50IChlLmcuIGBzaG93Tm90aWNlYCkuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbWVtYmVyJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBjYXNlLXByZXNlcnZlZCBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyUm91dGVTZWdtZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgYXMgYW4gb24tZGlzayBGSUxFTkFNRSAobG93ZXJjYXNlZCwgY29sbGlzaW9uLXNhZmUpLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgbG93ZXJjYXNlZCBmaWxlIG5hbWUgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclNsdWcobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvUm91dGVTZWdtZW50KHNsdWdpZnlNZW1iZXJOYW1lKG5hbWUpKTtcbn1cblxuLyoqXG4gKiBTbHVnaWZ5IGFuIG92ZXJsb2FkIGtleSBmb3IgYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudDogb24oXCJjaGFuZ2VkXCIpIC0+IG9uLWNoYW5nZWQuXG4gKlxuICogQHBhcmFtIG92ZXJsb2FkS2V5IC0gVGhlIG92ZXJsb2FkIGtleSwgZS5nLiBgb24oJ2NoYW5nZWQnKWAuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KTtcbn1cblxuLyoqXG4gKiBTbHVnaWZ5IGFuIG92ZXJsb2FkIGtleSBmb3IgYW4gb24tZGlzayBGSUxFTkFNRTogb24oXCJjaGFuZ2VkXCIpIC0+IG9uLWNoYW5nZWQgKGxvd2VyY2FzZWQpLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFNsdWcob3ZlcmxvYWRLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5T3ZlcmxvYWRLZXkob3ZlcmxvYWRLZXkpKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGV2ZXJ5IG1hdGNoIG9mIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIHdoYXQgYSByZXBsYWNlciBidWlsZHMgZnJvbSB0aGUgbWF0Y2guIFRoZSB0eXBlZFxuICogY291bnRlcnBhcnQgb2YgYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAgd2l0aCBhIGNhbGxiYWNrLCB3aG9zZSBhcmd1bWVudHMgYXJlIHR5cGVkIG9ubHkgcG9zaXRpb25hbGx5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcGFyYW0gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjsgaXQgbXVzdCBjYXJyeSB0aGUgYGdgIGZsYWcuXG4gKiBAcGFyYW0gcmVwbGFjZXIgLSBCdWlsZHMgdGhlIHJlcGxhY2VtZW50IG9mIG9uZSBtYXRjaC5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggZXZlcnkgbWF0Y2ggcmVwbGFjZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUmVnRXhwTWF0Y2hlcyh0ZXh0OiBzdHJpbmcsIHJlZ0V4cDogUmVnRXhwLCByZXBsYWNlcjogKG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5KSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwocmVnRXhwKSkge1xuICAgIHJlc3VsdCArPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpICsgcmVwbGFjZXIobWF0Y2gpO1xuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQgKyB0ZXh0LnNsaWNlKGxhc3RJbmRleCk7XG59XG5cbi8qKlxuICogU3BsaXQgbWFya2Rvd24gdGV4dCBpbnRvIGFuIG9yZGVyZWQgbGlzdCBvZiBwcm9zZSBhbmQgZmVuY2VkLWNvZGUgc2VnbWVudHMuXG4gKiBBIGZlbmNlZC1jb2RlIHNlZ21lbnQgaXMgZGVsaW1pdGVkIGJ5IGEgbGluZSBvZiAzKyBiYWNrdGlja3Mgb3IgdGlsZGVzOyBpdHMgY29udGVudCBpcyBjYXB0dXJlZFxuICogcmF3IChuZXZlciBlc2NhcGVkKSBzbyBpdCBjYW4gYmUgcmUtZW1pdHRlZCBhcyBhIGxpdGVyYWwgTURYIGNvZGUgZmVuY2UuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50cywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWdtZW50TWFya2Rvd24odGV4dDogc3RyaW5nKTogTWFya2Rvd25TZWdtZW50W10ge1xuICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBzZWdtZW50czogTWFya2Rvd25TZWdtZW50W10gPSBbXTtcbiAgbGV0IHByb3NlQnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY29kZUxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgb3BlbkZlbmNlOiBudWxsIHwgT3BlbkZlbmNlID0gbnVsbDtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKG9wZW5GZW5jZSkge1xuICAgICAgaWYgKG9wZW5GZW5jZS5jbG9zZVJlLnRlc3QobGluZSkpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaCh7IGxhbmc6IG9wZW5GZW5jZS5sYW5nLCB0ZXh0OiBjb2RlTGluZXMuam9pbignXFxuJyksIHR5cGU6ICdjb2RlJyB9KTtcbiAgICAgICAgb3BlbkZlbmNlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGVMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgb3Blbk1hdGNoID0gL15cXHMqKD88ZmVuY2U+KD88ZmVuY2VDaGFyPltgfl0pXFxrPGZlbmNlQ2hhcj57Mix9KSg/PGxhbmc+LiopJC8uZXhlYyhsaW5lKTtcbiAgICBpZiAob3Blbk1hdGNoKSB7XG4gICAgICBjb25zdCBmZW5jZUNoYXJzID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChvcGVuTWF0Y2gsICdmZW5jZScpO1xuICAgICAgY29uc3QgZmVuY2VDaGFyID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChvcGVuTWF0Y2gsICdmZW5jZUNoYXInKTtcbiAgICAgIGZsdXNoUHJvc2UoKTtcbiAgICAgIGNvZGVMaW5lcyA9IFtdO1xuICAgICAgb3BlbkZlbmNlID0ge1xuICAgICAgICBjbG9zZVJlOiBuZXcgUmVnRXhwKGBeXFxcXHMqXFxcXCR7ZmVuY2VDaGFyfXske1N0cmluZyhmZW5jZUNoYXJzLmxlbmd0aCl9LH1cXFxccyokYCksXG4gICAgICAgIGxhbmc6IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnbGFuZycpLnRyaW0oKVxuICAgICAgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwcm9zZUJ1ZmZlci5wdXNoKGxpbmUpO1xuICB9XG4gIC8vIEFuIHVuY2xvc2VkIGZlbmNlIHJ1bnMgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dC5cbiAgaWYgKG9wZW5GZW5jZSkge1xuICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gIH1cbiAgZmx1c2hQcm9zZSgpO1xuICByZXR1cm4gc2VnbWVudHM7XG5cbiAgZnVuY3Rpb24gZmx1c2hQcm9zZSgpOiB2b2lkIHtcbiAgICBpZiAocHJvc2VCdWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VnbWVudHMucHVzaCh7IHRleHQ6IHByb3NlQnVmZmVyLmpvaW4oJ1xcbicpLCB0eXBlOiAncHJvc2UnIH0pO1xuICAgIHByb3NlQnVmZmVyID0gW107XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpcCB0aGUgYGltcG9ydChcIuKAplwiKWAgcXVhbGlmaWVycyB0cy1tb3JwaCBwcmludHMgYmVmb3JlIGEgdHlwZSB0aGF0IGlzIG5vdCBpbiBzY29wZSwgcmVjb3JkaW5nIGVhY2ggb25lJ3NcbiAqIGRlY2xhcmF0aW9uIGZpbGUgZmlyc3QsIHNpbmNlIGl0IGlzIHRoZSBvbmUgcGxhY2UgYSBwcmludGVkIHR5cGUgbmFtZXMgd2hlcmUgaXQgd2FzIGRlY2xhcmVkLlxuICpcbiAqIEBwYXJhbSB0eXBlVGV4dCAtIFRoZSBwcmludGVkIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSB3aXRob3V0IGl0cyBpbXBvcnQgcXVhbGlmaWVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5VHlwZSh0eXBlVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0eXBlVGV4dC5tYXRjaEFsbChJTVBPUlRfVFlQRV9SRUdfRVhQKSkge1xuICAgIHJlZ2lzdGVyUGFja2FnZURlY2xhcmF0aW9uKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdOYW1lJyksIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdQYXRoJykpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVUZXh0LnJlcGxhY2VBbGwoSU1QT1JUX1FVQUxJRklFUl9SRUdfRVhQLCAnJyk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgY29kZSBzaWduYXR1cmUgZm9yIHRoZSBgc2lnbmF0dXJlOmAgZnJvbnRtYXR0ZXIgLyBPRyBjYXJkOiBjb2xsYXBzZSB3aGl0ZXNwYWNlIHRvXG4gKiBzaW5nbGUgc3BhY2VzIGFuZCB0cnVuY2F0ZSB0byBhIGNhcmQtZnJpZW5kbHkgbGVuZ3RoIHdpdGggYW4gZWxsaXBzaXMuXG4gKlxuICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBzaWduYXR1cmUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZVNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IHNpZ25hdHVyZS5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpO1xuICByZXR1cm4gY29sbGFwc2VkLmxlbmd0aCA8PSBTSUdOQVRVUkVfTUFYX0xFTkdUSCA/IGNvbGxhcHNlZCA6IGAke2NvbGxhcHNlZC5zbGljZSgwLCBTSUdOQVRVUkVfTUFYX0xFTkdUSCAtIDEpLnRyaW1FbmQoKX3igKZgO1xufVxuXG5mdW5jdGlvbiBhdm9pZEluZGV4U2x1ZyhzbHVnOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBBIG1lbWJlciBsaXRlcmFsbHkgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCwgY29sbGlkaW5nIHdpdGggdGhlIHR5cGUtb3ZlcnZpZXdcbiAgLy8gYGluZGV4Lm1keGAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IChvbmUgc2lsZW50bHkgb3ZlcndyaXRlcyB0aGUgb3RoZXIsIDQwNC1pbmcgdGhlIGxvc2VyKS5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbU1lbWJlclJvdXRlU2VnbWVudChuYW1lT3JPdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldEFwaURvY1NldHRpbmdzKCkubWVtYmVyUm91dGVTZWdtZW50Py4obmFtZU9yT3ZlcmxvYWRLZXkpO1xufVxuXG4vKipcbiAqIEtlZXBzIGEgbmFtZSdzIHRyYWlsaW5nIHVuZGVyc2NvcmVzIG9uIGl0cyBzbHVnLCBzbyBgY3JlYXRlX19gIGFuZCBgY3JlYXRlYCBnZXQgYSBwYWdlIGVhY2ggaW5zdGVhZCBvZiBvbmVcbiAqIHNpbGVudGx5IG92ZXJ3cml0aW5nIHRoZSBvdGhlci4gQSBzbHVnIHdpdGggbm90aGluZyBlbHNlIGluIGl0IGtlZXBzIG5vbmU6IGEgZmlsZSBuYW1lZCBgXyoubWR4YCBpcyBza2lwcGVkIGJ5XG4gKiBBc3RybydzIGNvbnRlbnQgbG9hZGVyLlxuICpcbiAqIEBwYXJhbSBzbHVnIC0gVGhlIHNsdWcsIHdpdGhvdXQgdGhlIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBpdCB3YXMgYnVpbHQgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBzbHVnIHdpdGggdGhlIG5hbWUncyB0cmFpbGluZyB1bmRlcnNjb3Jlcy5cbiAqL1xuZnVuY3Rpb24ga2VlcFRyYWlsaW5nVW5kZXJzY29yZXMoc2x1Zzogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1ZyA/IGAke3NsdWd9JHtuYW1lLnNsaWNlKG5hbWUucmVwbGFjZSgvXyskLywgJycpLmxlbmd0aCl9YCA6IHNsdWc7XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnlNZW1iZXJOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVucXVvdGVkID0gbmFtZS5yZXBsYWNlQWxsKC9eW1wiJ118W1wiJ10kL2csICcnKTtcbiAgY29uc3QgY2xlYW5lZCA9IHVucXVvdGVkXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XS9nLCAnLScpXG4gICAgLnJlcGxhY2VBbGwoLy0rL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvXi18LSQvZywgJycpO1xuICByZXR1cm4gYXZvaWRJbmRleFNsdWcoZ2V0Q3VzdG9tTWVtYmVyUm91dGVTZWdtZW50KG5hbWUpID8/IChrZWVwVHJhaWxpbmdVbmRlcnNjb3JlcyhjbGVhbmVkLCB1bnF1b3RlZCkgfHwgJ3VubmFtZWQnKSk7XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2x1ZyA9IG92ZXJsb2FkS2V5XG4gICAgLnJlcGxhY2VBbGwoL1tcIicoKV0vZywgJyAnKVxuICAgIC5yZXBsYWNlQWxsKC9bXmEtekEtWjAtOVxcc10vZywgJycpXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICctJyk7XG4gIC8vIEEgbWV0aG9kIG5hbWVkIGBpbmRleGAgd291bGQgd3JpdGUgYGluZGV4Lm1keGAgb3ZlciB0aGUgdHlwZS1vdmVydmlldyBwYWdlLCBleGFjdGx5IGFzIGEgcHJvcGVydHkgd291bGQuXG4gIHJldHVybiBhdm9pZEluZGV4U2x1ZyhnZXRDdXN0b21NZW1iZXJSb3V0ZVNlZ21lbnQob3ZlcmxvYWRLZXkpID8/IGtlZXBUcmFpbGluZ1VuZGVyc2NvcmVzKHNsdWcsIG92ZXJsb2FkS2V5KSk7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgYmFyZSBge0BsaW5rIFRhcmdldH1gIHJlYWRzIGFzIGl0cyB0YXJnZXQsIGFzIGByZXNvbHZlTGlua3NgIHJlbmRlcnMgaXQ7IGRyb3BwaW5nIGl0IGxlYXZlcyBhIGhvbGUgaW4gdGhlIHNlbnRlbmNlLlxuICBjb25zdCBwbGFpbiA9IHJlcGxhY2VSZWdFeHBNYXRjaGVzKFxuICAgIHRleHQsXG4gICAgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXHMqXFx9L2csXG4gICAgKG1hdGNoKSA9PiBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdkaXNwbGF5JykgPz8gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpXG4gIClcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFHTztBQUNQLHNCQUFzQjtBQUN0Qix1QkFBd0I7QUFReEIsK0JBQThCO0FB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
|
|
@@ -90,15 +90,16 @@ export declare function getDisplayName(name: string, info: TypeInfo): string;
|
|
|
90
90
|
* Emit the import statement for a documented export.
|
|
91
91
|
*
|
|
92
92
|
* The subpath equals the type's namespace (its source path relative to `src`), so `src/string.ts` of
|
|
93
|
-
* `@mnaoumov/typescript-lib` is `@mnaoumov/typescript-lib/string`.
|
|
93
|
+
* `@mnaoumov/typescript-lib` is `@mnaoumov/typescript-lib/string`. A package publishing its API from one barrel
|
|
94
|
+
* (`publicApiEntry`) is imported from its root instead.
|
|
94
95
|
*
|
|
95
96
|
* Interfaces / type aliases / enums are imported with `import type`; classes / functions /
|
|
96
|
-
* variables with a value `import`.
|
|
97
|
+
* variables with a value `import`. A site's `importStatement` setting replaces that statement.
|
|
97
98
|
*
|
|
98
99
|
* @param info - The documented type.
|
|
99
|
-
* @returns The import statement.
|
|
100
|
+
* @returns The import statement, or `undefined` when the site's `importStatement` shows none.
|
|
100
101
|
*/
|
|
101
|
-
export declare function getImportStatement(info: TypeInfo): string;
|
|
102
|
+
export declare function getImportStatement(info: TypeInfo): string | undefined;
|
|
102
103
|
/**
|
|
103
104
|
* The folder a namespace's pages are written to.
|
|
104
105
|
*
|
|
@@ -86,10 +86,13 @@ async function generateApiDocs(options) {
|
|
|
86
86
|
const { rootDirectory, settings, sourceDirectory } = options;
|
|
87
87
|
(0, import_api_doc_settings.configureApiDocs)(settings);
|
|
88
88
|
(0, import_api_doc_link_rendering.loadExternalTypeMaps)(rootDirectory);
|
|
89
|
-
const
|
|
89
|
+
const { publicApiEntry } = settings;
|
|
90
|
+
const barrel = publicApiEntry === void 0 ? void 0 : (0, import_api_doc_source_processing.readPublicApiBarrel)(publicApiEntry, sourceDirectory);
|
|
91
|
+
const entryFiles = barrel === void 0 ? (0, import_api_doc_source_processing.findEntryFiles)(sourceDirectory, settings.excludedDirectories) : [...barrel.files];
|
|
90
92
|
console.warn(`Found ${String(entryFiles.length)} entry source files`);
|
|
91
93
|
const cacheFile = (0, import_node_path.join)(settings.outputDirectory, CACHE_FILE_NAME);
|
|
92
|
-
const
|
|
94
|
+
const hashedFiles = publicApiEntry === void 0 ? entryFiles : [...entryFiles, publicApiEntry];
|
|
95
|
+
const currentHash = (0, import_api_doc_source_processing.computeCacheHash)(hashedFiles, (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__import_meta_url)));
|
|
93
96
|
if ((0, import_node_fs.existsSync)(cacheFile) && (0, import_node_fs.existsSync)(settings.sidebarFile) && (0, import_node_fs.readFileSync)(cacheFile, "utf-8").trim() === currentHash) {
|
|
94
97
|
console.warn("Source files and generator unchanged \u2014 skipping generation.");
|
|
95
98
|
return;
|
|
@@ -114,6 +117,9 @@ async function generateApiDocs(options) {
|
|
|
114
117
|
(0, import_api_doc_source_processing.collectVariables)(src, types, namespace);
|
|
115
118
|
}
|
|
116
119
|
(0, import_api_doc_type_merging.resolveInheritedMembers)(types);
|
|
120
|
+
if (barrel !== void 0) {
|
|
121
|
+
(0, import_api_doc_source_processing.keepPublicApi)(types, barrel);
|
|
122
|
+
}
|
|
117
123
|
for (const info of types.values()) {
|
|
118
124
|
info.properties.sort((a, b) => a.name.localeCompare(b.name));
|
|
119
125
|
info.methods.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -140,4 +146,4 @@ async function generateApiDocs(options) {
|
|
|
140
146
|
0 && (module.exports = {
|
|
141
147
|
generateApiDocs
|
|
142
148
|
});
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKGZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKSB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGguXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJtLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICBub3JtYWxpemVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAndHMtbW9ycGgnO1xuXG5pbXBvcnQgdHlwZSB7IEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFnZUNvbnRlbnQsXG4gIFR5cGVJbmZvXG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7IGV4dHJhY3RGaWxlT3ZlcnZpZXcgfSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMsXG4gIHJlZ2lzdGVyTWVtYmVyUGFnZXMsXG4gIHJlZ2lzdGVyUm91dGVTZWdtZW50c1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgY2xlYXJQYWNrYWdlRGVjbGFyYXRpb25zIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuaW1wb3J0IHtcbiAgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUsXG4gIGdlbmVyYXRlTWVtYmVyUGFnZXMsXG4gIGdlbmVyYXRlTmFtZXNwYWNlSW5kZXhQYWdlcyxcbiAgZ2VuZXJhdGVPdmVydmlld1BhZ2UsXG4gIGdlbmVyYXRlU2lkZWJhckpzb25cbn0gZnJvbSAnLi9hcGktZG9jLXBhZ2UtZ2VuZXJhdGlvbi50cyc7XG5pbXBvcnQgeyBjb25maWd1cmVBcGlEb2NzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGdW5jdGlvbnMsXG4gIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zLFxuICBjb2xsZWN0VmFyaWFibGVzLFxuICBjb21wdXRlQ2FjaGVIYXNoLFxuICBjb21wdXRlTmFtZXNwYWNlLFxuICBmaW5kRW50cnlGaWxlcyxcbiAgcHJvY2Vzc1NvdXJjZUZpbGUsXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXNcbn0gZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmltcG9ydCB7IHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzIH0gZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlQXBpRG9jc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBcGlEb2NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHJvb3Q6IHRoZSBmb2xkZXIgaG9sZGluZyBgdHNjb25maWcuanNvbmAgYW5kIGBub2RlX21vZHVsZXNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgZXZlcnkgcGFnZSBhbmQgbGluayBpcyByZW5kZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IEFwaURvY1NldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgYXJlIGRvY3VtZW50ZWQsIG5vcm1hbGx5IGA8cm9vdD4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG5jb25zdCBDQUNIRV9GSUxFX05BTUUgPSAnLmNhY2hlLWhhc2gnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQVBJIHJlZmVyZW5jZSBwYWdlcyBhbmQgdGhlIHNpZGViYXIuXG4gKlxuICogU2tpcHMgdGhlIHdvcmsgd2hlbiBuZWl0aGVyIHRoZSBzb3VyY2VzLCB0aGUgc2V0dGluZ3Mgbm9yIHRoZSBnZW5lcmF0b3IgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBydW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQXBpRG9jcyhvcHRpb25zOiBHZW5lcmF0ZUFwaURvY3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyByb290RGlyZWN0b3J5LCBzZXR0aW5ncywgc291cmNlRGlyZWN0b3J5IH0gPSBvcHRpb25zO1xuICBjb25maWd1cmVBcGlEb2NzKHNldHRpbmdzKTtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMocm9vdERpcmVjdG9yeSk7XG5cbiAgY29uc3QgZW50cnlGaWxlcyA9IGZpbmRFbnRyeUZpbGVzKHNvdXJjZURpcmVjdG9yeSk7XG4gIGNvbnNvbGUud2FybihgRm91bmQgJHtTdHJpbmcoZW50cnlGaWxlcy5sZW5ndGgpfSBlbnRyeSBzb3VyY2UgZmlsZXNgKTtcblxuICBjb25zdCBjYWNoZUZpbGUgPSBqb2luKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgQ0FDSEVfRklMRV9OQU1FKTtcbiAgY29uc3QgY3VycmVudEhhc2ggPSBjb21wdXRlQ2FjaGVIYXNoKGVudHJ5RmlsZXMsIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSk7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlRmlsZSkgJiYgZXhpc3RzU3luYyhzZXR0aW5ncy5zaWRlYmFyRmlsZSkgJiYgcmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykudHJpbSgpID09PSBjdXJyZW50SGFzaCkge1xuICAgIGNvbnNvbGUud2FybignU291cmNlIGZpbGVzIGFuZCBnZW5lcmF0b3IgdW5jaGFuZ2VkIOKAlCBza2lwcGluZyBnZW5lcmF0aW9uLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIExvYWQgdmlhIHRoZSByZXBvJ3MgdHNjb25maWcgc28gaW5mZXJyZWQgdHlwZXMgcmVzb2x2ZS5cbiAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcbiAgICBza2lwQWRkaW5nRmlsZXNGcm9tVHNDb25maWc6IHRydWUsXG4gICAgdHNDb25maWdGaWxlUGF0aDogam9pbihyb290RGlyZWN0b3J5LCAndHNjb25maWcuanNvbicpXG4gIH0pO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKGVudHJ5RmlsZXMpO1xuXG4gIGNvbnN0IHR5cGVzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvPigpO1xuICBjb25zdCBtb2R1bGVPdmVydmlld3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjbGVhclBhY2thZ2VEZWNsYXJhdGlvbnMoKTtcblxuICBmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2VGaWxlcykge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbXB1dGVOYW1lc3BhY2Uoc291cmNlRGlyZWN0b3J5LCBub3JtYWxpemUoc3JjLmdldEZpbGVQYXRoKCkpKTtcbiAgICBjb25zdCBvdmVydmlldyA9IGV4dHJhY3RGaWxlT3ZlcnZpZXcoc3JjKTtcbiAgICBpZiAob3ZlcnZpZXcpIHtcbiAgICAgIG1vZHVsZU92ZXJ2aWV3cy5zZXQobmFtZXNwYWNlLCBvdmVydmlldyk7XG4gICAgfVxuICAgIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYyk7XG4gICAgcHJvY2Vzc1NvdXJjZUZpbGUoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0RnVuY3Rpb25zKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gICAgY29sbGVjdFZhcmlhYmxlcyhzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgcmVzb2x2ZUluaGVyaXRlZE1lbWJlcnModHlwZXMpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGluZm8ucHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICBpbmZvLm1ldGhvZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zKHR5cGVzKTtcbiAgcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzKTtcbiAgcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlcyk7XG5cbiAgYXdhaXQgcm0oc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IG1rZGlyKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKHR5cGVzLCB0eXBlcywgbW9kdWxlT3ZlcnZpZXdzKTtcblxuICAvLyBQYXNzIDE6IGdlbmVyYXRlIGFsbCBwYWdlcyB3aXRob3V0IGJhY2tsaW5rcywgY29sbGVjdCBjb250ZW50IChrZXllZCBieSBxdWFsaWZpZWQgaWQpXG4gIGNvbnN0IHBhZ2VDb250ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlQ29udGVudD4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBpbmZvXSBvZiB0eXBlcykge1xuICAgIHBhZ2VDb250ZW50cy5zZXQoa2V5LCBhd2FpdCBnZW5lcmF0ZU92ZXJ2aWV3UGFnZShpbmZvLm5hbWUsIGluZm8sIHR5cGVzKSk7XG4gICAgaWYgKGluZm8ua2luZCA9PT0gJ2NsYXNzJyB8fCBpbmZvLmtpbmQgPT09ICdpbnRlcmZhY2UnKSB7XG4gICAgICBhd2FpdCBnZW5lcmF0ZU1lbWJlclBhZ2VzKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhc3MgMjogc2NhbiBjb250ZW50IGZvciBsaW5rcywgYXBwZW5kIGJhY2tsaW5rcywgd3JpdGUgZmlsZXNcbiAgYXdhaXQgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUocGFnZUNvbnRlbnRzLCB0eXBlcyk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVTaWRlYmFySnNvbih0eXBlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShjYWNoZUZpbGUsIGN1cnJlbnRIYXNoLCAndXRmLTgnKTtcblxuICBjb25zb2xlLndhcm4oYEdlbmVyYXRlZCBkb2NzIGZvciAke1N0cmluZyh0eXBlcy5zaXplKX0gdHlwZXMgYWNyb3NzICR7U3RyaW5nKG1vZHVsZU92ZXJ2aWV3cy5zaXplKX0gZG9jdW1lbnRlZCBtb2R1bGVzYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxxQkFHTztBQUNQLHNCQUlPO0FBQ1AsdUJBSU87QUFDUCxzQkFBOEI7QUFDOUIsc0JBQXdCO0FBUXhCLDJCQUFvQztBQUNwQyxvQ0FJTztBQUNQLG1DQUF5QztBQUN6QyxxQ0FNTztBQUNQLDhCQUFpQztBQUNqQyx1Q0FTTztBQUNQLGtDQUF3QztBQXBFeEMsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxTQUFTLHNCQUFzQjtBQUN2RixNQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLFVBQU0sZUFBZTtBQUNyQixVQUFNLE1BQU0sYUFBYSxVQUFVO0FBQ25DLFFBQUksT0FBTyxJQUFJLGtCQUFrQixZQUFZO0FBQzNDLGFBQU8sSUFBSSxjQUFjLFVBQVUsRUFBRTtBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUdBLFNBQU8sV0FBVyxVQUFVLFFBQVE7QUFDdEMsR0FBRztBQStFSCxNQUFNLGtCQUFrQjtBQVN4QixlQUFzQixnQkFBZ0IsU0FBK0M7QUFDbkYsUUFBTSxFQUFFLGVBQWUsVUFBVSxnQkFBZ0IsSUFBSTtBQUNyRCxnREFBaUIsUUFBUTtBQUN6QiwwREFBcUIsYUFBYTtB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
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKGZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKSB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGgsIHVubGVzc1xuICogdGhlIHBhY2thZ2UgcHVibGlzaGVzIGl0cyBBUEkgZnJvbSBvbmUgYmFycmVsIChgcHVibGljQXBpRW50cnlgKSwgd2hvc2UgcmUtZXhwb3J0cyBhcmUgdGhlbiBhbGwgdGhhdCBpcyBkb2N1bWVudGVkLlxuICovXG5cbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJ3RzLW1vcnBoJztcblxuaW1wb3J0IHR5cGUgeyBBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhZ2VDb250ZW50LFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBleHRyYWN0RmlsZU92ZXJ2aWV3IH0gZnJvbSAnLi9hcGktZG9jLWpzZG9jLnRzJztcbmltcG9ydCB7XG4gIGxvYWRFeHRlcm5hbFR5cGVNYXBzLFxuICByZWdpc3Rlck1lbWJlclBhZ2VzLFxuICByZWdpc3RlclJvdXRlU2VnbWVudHNcbn0gZnJvbSAnLi9hcGktZG9jLWxpbmstcmVuZGVyaW5nLnRzJztcbmltcG9ydCB7IGNsZWFyUGFja2FnZURlY2xhcmF0aW9ucyB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7XG4gIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlLFxuICBnZW5lcmF0ZU1lbWJlclBhZ2VzLFxuICBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXMsXG4gIGdlbmVyYXRlT3ZlcnZpZXdQYWdlLFxuICBnZW5lcmF0ZVNpZGViYXJKc29uXG59IGZyb20gJy4vYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMnO1xuaW1wb3J0IHsgY29uZmlndXJlQXBpRG9jcyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBjb2xsZWN0RnVuY3Rpb25zLFxuICBjb2xsZWN0UGFja2FnZURlY2xhcmF0aW9ucyxcbiAgY29sbGVjdFZhcmlhYmxlcyxcbiAgY29tcHV0ZUNhY2hlSGFzaCxcbiAgY29tcHV0ZU5hbWVzcGFjZSxcbiAgZmluZEVudHJ5RmlsZXMsXG4gIGtlZXBQdWJsaWNBcGksXG4gIHByb2Nlc3NTb3VyY2VGaWxlLFxuICByZWFkUHVibGljQXBpQmFycmVsLFxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zXG59IGZyb20gJy4vYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyc7XG5pbXBvcnQgeyByZXNvbHZlSW5oZXJpdGVkTWVtYmVycyB9IGZyb20gJy4vYXBpLWRvYy10eXBlLW1lcmdpbmcudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUFwaURvY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQXBpRG9jc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290OiB0aGUgZm9sZGVyIGhvbGRpbmcgYHRzY29uZmlnLmpzb25gIGFuZCBgbm9kZV9tb2R1bGVzYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGV2ZXJ5IHBhZ2UgYW5kIGxpbmsgaXMgcmVuZGVyZWQgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzOiBBcGlEb2NTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBtb2R1bGVzIGFyZSBkb2N1bWVudGVkLCBub3JtYWxseSBgPHJvb3Q+L3NyY2AuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfRklMRV9OQU1FID0gJy5jYWNoZS1oYXNoJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIEFQSSByZWZlcmVuY2UgcGFnZXMgYW5kIHRoZSBzaWRlYmFyLlxuICpcbiAqIFNraXBzIHRoZSB3b3JrIHdoZW4gbmVpdGhlciB0aGUgc291cmNlcywgdGhlIHNldHRpbmdzIG5vciB0aGUgZ2VuZXJhdG9yIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcnVuLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFwaURvY3Mob3B0aW9uczogR2VuZXJhdGVBcGlEb2NzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcm9vdERpcmVjdG9yeSwgc2V0dGluZ3MsIHNvdXJjZURpcmVjdG9yeSB9ID0gb3B0aW9ucztcbiAgY29uZmlndXJlQXBpRG9jcyhzZXR0aW5ncyk7XG4gIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3RvcnkpO1xuXG4gIGNvbnN0IHsgcHVibGljQXBpRW50cnkgfSA9IHNldHRpbmdzO1xuICBjb25zdCBiYXJyZWwgPSBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVhZFB1YmxpY0FwaUJhcnJlbChwdWJsaWNBcGlFbnRyeSwgc291cmNlRGlyZWN0b3J5KTtcbiAgY29uc3QgZW50cnlGaWxlcyA9IGJhcnJlbCA9PT0gdW5kZWZpbmVkID8gZmluZEVudHJ5RmlsZXMoc291cmNlRGlyZWN0b3J5LCBzZXR0aW5ncy5leGNsdWRlZERpcmVjdG9yaWVzKSA6IFsuLi5iYXJyZWwuZmlsZXNdO1xuICBjb25zb2xlLndhcm4oYEZvdW5kICR7U3RyaW5nKGVudHJ5RmlsZXMubGVuZ3RoKX0gZW50cnkgc291cmNlIGZpbGVzYCk7XG5cbiAgY29uc3QgY2FjaGVGaWxlID0gam9pbihzZXR0aW5ncy5vdXRwdXREaXJlY3RvcnksIENBQ0hFX0ZJTEVfTkFNRSk7XG4gIC8vIFRoZSBiYXJyZWwgZGVjaWRlcyB3aGljaCBuYW1lcyBhcmUgZG9jdW1lbnRlZCwgc28gYSByZS1leHBvcnQgYWRkZWQgdGhlcmUgY2hhbmdlcyB0aGUgb3V0cHV0IGJ5IGl0c2VsZi5cbiAgY29uc3QgaGFzaGVkRmlsZXMgPSBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gZW50cnlGaWxlcyA6IFsuLi5lbnRyeUZpbGVzLCBwdWJsaWNBcGlFbnRyeV07XG4gIGNvbnN0IGN1cnJlbnRIYXNoID0gY29tcHV0ZUNhY2hlSGFzaChoYXNoZWRGaWxlcywgZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpKTtcbiAgaWYgKGV4aXN0c1N5bmMoY2FjaGVGaWxlKSAmJiBleGlzdHNTeW5jKHNldHRpbmdzLnNpZGViYXJGaWxlKSAmJiByZWFkRmlsZVN5bmMoY2FjaGVGaWxlLCAndXRmLTgnKS50cmltKCkgPT09IGN1cnJlbnRIYXNoKSB7XG4gICAgY29uc29sZS53YXJuKCdTb3VyY2UgZmlsZXMgYW5kIGdlbmVyYXRvciB1bmNoYW5nZWQg4oCUIHNraXBwaW5nIGdlbmVyYXRpb24uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTG9hZCB2aWEgdGhlIHJlcG8ncyB0c2NvbmZpZyBzbyBpbmZlcnJlZCB0eXBlcyByZXNvbHZlLlxuICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3Qoe1xuICAgIHNraXBBZGRpbmdGaWxlc0Zyb21Uc0NvbmZpZzogdHJ1ZSxcbiAgICB0c0NvbmZpZ0ZpbGVQYXRoOiBqb2luKHJvb3REaXJlY3RvcnksICd0c2NvbmZpZy5qc29uJylcbiAgfSk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID0gcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMoZW50cnlGaWxlcyk7XG5cbiAgY29uc3QgdHlwZXMgPSBuZXcgTWFwPHN0cmluZywgVHlwZUluZm8+KCk7XG4gIGNvbnN0IG1vZHVsZU92ZXJ2aWV3cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNsZWFyUGFja2FnZURlY2xhcmF0aW9ucygpO1xuXG4gIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gY29tcHV0ZU5hbWVzcGFjZShzb3VyY2VEaXJlY3RvcnksIG5vcm1hbGl6ZShzcmMuZ2V0RmlsZVBhdGgoKSkpO1xuICAgIGNvbnN0IG92ZXJ2aWV3ID0gZXh0cmFjdEZpbGVPdmVydmlldyhzcmMpO1xuICAgIGlmIChvdmVydmlldykge1xuICAgICAgbW9kdWxlT3ZlcnZpZXdzLnNldChuYW1lc3BhY2UsIG92ZXJ2aWV3KTtcbiAgICB9XG4gICAgY29sbGVjdFBhY2thZ2VEZWNsYXJhdGlvbnMoc3JjKTtcbiAgICBwcm9jZXNzU291cmNlRmlsZShzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIGNvbGxlY3RGdW5jdGlvbnMoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0VmFyaWFibGVzKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gIH1cblxuICByZXNvbHZlSW5oZXJpdGVkTWVtYmVycyh0eXBlcyk7XG4gIC8vIE9ubHkgYWZ0ZXIgdGhlIGluaGVyaXRhbmNlIGlzIHJlc29sdmVkLCBzbyBhIHB1YmxpYyBjbGFzcyBrZWVwcyB0aGUgbWVtYmVycyBvZiBhbiBpbnRlcm5hbCBiYXNlIGNsYXNzLlxuICBpZiAoYmFycmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICBrZWVwUHVibGljQXBpKHR5cGVzLCBiYXJyZWwpO1xuICB9XG5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgaW5mby5wcm9wZXJ0aWVzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgIGluZm8ubWV0aG9kcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXModHlwZXMpO1xuICByZWdpc3RlclJvdXRlU2VnbWVudHModHlwZXMpO1xuICByZWdpc3Rlck1lbWJlclBhZ2VzKHR5cGVzKTtcblxuICBhd2FpdCBybShzZXR0aW5ncy5vdXRwdXREaXJlY3RvcnksIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXModHlwZXMsIHR5cGVzLCBtb2R1bGVPdmVydmlld3MpO1xuXG4gIC8vIFBhc3MgMTogZ2VuZXJhdGUgYWxsIHBhZ2VzIHdpdGhvdXQgYmFja2xpbmtzLCBjb2xsZWN0IGNvbnRlbnQgKGtleWVkIGJ5IHF1YWxpZmllZCBpZClcbiAgY29uc3QgcGFnZUNvbnRlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PigpO1xuICBmb3IgKGNvbnN0IFtrZXksIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgcGFnZUNvbnRlbnRzLnNldChrZXksIGF3YWl0IGdlbmVyYXRlT3ZlcnZpZXdQYWdlKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpKTtcbiAgICBpZiAoaW5mby5raW5kID09PSAnY2xhc3MnIHx8IGluZm8ua2luZCA9PT0gJ2ludGVyZmFjZScpIHtcbiAgICAgIGF3YWl0IGdlbmVyYXRlTWVtYmVyUGFnZXMoaW5mby5uYW1lLCBpbmZvLCB0eXBlcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFzcyAyOiBzY2FuIGNvbnRlbnQgZm9yIGxpbmtzLCBhcHBlbmQgYmFja2xpbmtzLCB3cml0ZSBmaWxlc1xuICBhd2FpdCBhcHBlbmRCYWNrbGlua3NBbmRXcml0ZShwYWdlQ29udGVudHMsIHR5cGVzKTtcblxuICBhd2FpdCBnZW5lcmF0ZVNpZGViYXJKc29uKHR5cGVzKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGNhY2hlRmlsZSwgY3VycmVudEhhc2gsICd1dGYtOCcpO1xuXG4gIGNvbnNvbGUud2FybihgR2VuZXJhdGVkIGRvY3MgZm9yICR7U3RyaW5nKHR5cGVzLnNpemUpfSB0eXBlcyBhY3Jvc3MgJHtTdHJpbmcobW9kdWxlT3ZlcnZpZXdzLnNpemUpfSBkb2N1bWVudGVkIG1vZHVsZXNgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUJBLHFCQUdPO0FBQ1Asc0JBSU87QUFDUCx1QkFJTztBQUNQLHNCQUE4QjtBQUM5QixzQkFBd0I7QUFReEIsMkJBQW9DO0FBQ3BDLG9DQUlPO0FBQ1AsbUNBQXlDO0FBQ3pDLHFDQU1PO0FBQ1AsOEJBQWlDO0FBQ2pDLHVDQVdPO0FBQ1Asa0NBQXdDO0FBdkV4QyxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLFNBQVMsc0JBQXNCO0FBQ3ZGLE1BQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sTUFBTSxhQUFhLFVBQVU7QUFDbkMsUUFBSSxPQUFPLElBQUksa0JBQWtCLFlBQVk7QUFDM0MsYUFBTyxJQUFJLGNBQWMsVUFBVSxFQUFFO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBR0EsU0FBTyxXQUFXLFVBQVUsUUFBUTtBQUN0QyxHQUFHO0FBa0ZILE1BQU0sa0JBQWtCO0FBU3hCLGVBQXNCLGdCQUFnQixTQUErQztBQUNuRixRQUFNLEVBQUUsZUFBZSxVQUFVLGdCQUFnQixJQUFJO0FBQ3JELGdEQUFpQixRQUFRO0FBQ3pCLDBEQUFxQixhQUFhO0FBRWxDLFFBQU0sRUFBRSxlQUFlLElBQUk7QUFDM0IsUUFBTSxTQUFTLG1CQUFtQixTQUFZLGFBQVksc0RBQW9CLGdCQUFnQixlQUFlO0FBQzdHLFFBQU0sYUFBYSxXQUFXLGFBQVksaURBQWUsaUJB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
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The API documentation generator: walks a package's `src`, extracts every documentable exported declaration via
|
|
6
6
|
* ts-morph, and writes Starlight-compatible MDX pages plus a sidebar JSON. The output tree mirrors the package's
|
|
7
|
-
* module structure: a type's namespace is its source path relative to `src`, which is also its import subpath
|
|
7
|
+
* module structure: a type's namespace is its source path relative to `src`, which is also its import subpath, unless
|
|
8
|
+
* the package publishes its API from one barrel (`publicApiEntry`), whose re-exports are then all that is documented.
|
|
8
9
|
*/
|
|
9
10
|
import type { ApiDocSettings } from './api-doc-settings.cjs';
|
|
10
11
|
/**
|