@mnaoumov/typescript-dev-toolkit 3.8.0 → 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-page-generation.cjs +7 -3
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +7 -0
- package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +49 -1
- package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +38 -0
- package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +3 -2
- package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +2 -1
- 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 +3 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +9 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +7 -3
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +7 -0
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
- package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +38 -0
- package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +57 -2
- package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +2 -1
- package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +3 -2
- 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 +9 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +3 -1
- package/package.json +1 -1
|
@@ -38,14 +38,24 @@ ensureBrowserProcess();
|
|
|
38
38
|
|
|
39
39
|
import { createHash } from "node:crypto";
|
|
40
40
|
import {
|
|
41
|
+
existsSync,
|
|
41
42
|
readdirSync,
|
|
42
43
|
readFileSync
|
|
43
44
|
} from "node:fs";
|
|
44
45
|
import {
|
|
46
|
+
dirname,
|
|
45
47
|
join,
|
|
46
|
-
relative
|
|
48
|
+
relative,
|
|
49
|
+
resolve
|
|
47
50
|
} from "node:path";
|
|
48
51
|
import { Node } from "ts-morph";
|
|
52
|
+
import {
|
|
53
|
+
createSourceFile,
|
|
54
|
+
isExportDeclaration,
|
|
55
|
+
isNamespaceExport,
|
|
56
|
+
isStringLiteral,
|
|
57
|
+
ScriptTarget
|
|
58
|
+
} from "typescript";
|
|
49
59
|
import { GENERIC_TYPE_PARAMS } from "./api-doc-constants.mjs";
|
|
50
60
|
import {
|
|
51
61
|
isDocumentedDirectoryName,
|
|
@@ -201,6 +211,13 @@ function findEntryFiles(directory, excludedDirectories = []) {
|
|
|
201
211
|
}
|
|
202
212
|
return results;
|
|
203
213
|
}
|
|
214
|
+
function keepPublicApi(types, barrel) {
|
|
215
|
+
for (const [key, info] of types) {
|
|
216
|
+
if (!barrel.wholeNamespaces.has(info.namespace) && !barrel.publicKeys.has(key)) {
|
|
217
|
+
types.delete(key);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
204
221
|
function processSourceFile(src, types, namespace) {
|
|
205
222
|
for (const alias of src.getTypeAliases()) {
|
|
206
223
|
if (!alias.isExported()) {
|
|
@@ -243,6 +260,42 @@ function processSourceFile(src, types, namespace) {
|
|
|
243
260
|
}
|
|
244
261
|
}
|
|
245
262
|
}
|
|
263
|
+
function readPublicApiBarrel(entryFile, sourceDirectory) {
|
|
264
|
+
const sourceFile = createSourceFile(entryFile, readFileSync(entryFile, "utf-8"), ScriptTarget.Latest);
|
|
265
|
+
const files = /* @__PURE__ */ new Set();
|
|
266
|
+
const publicKeys = /* @__PURE__ */ new Set();
|
|
267
|
+
const wholeNamespaces = /* @__PURE__ */ new Set();
|
|
268
|
+
for (const statement of sourceFile.statements) {
|
|
269
|
+
if (!isExportDeclaration(statement) || statement.moduleSpecifier === void 0 || !isStringLiteral(statement.moduleSpecifier)) {
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const moduleSpecifier = statement.moduleSpecifier.text;
|
|
273
|
+
if (!moduleSpecifier.startsWith(".")) {
|
|
274
|
+
throw new Error(`${entryFile} re-exports '${moduleSpecifier}', which is not a module of this package.`);
|
|
275
|
+
}
|
|
276
|
+
const filePath = resolve(dirname(entryFile), moduleSpecifier);
|
|
277
|
+
if (!existsSync(filePath)) {
|
|
278
|
+
throw new Error(`${entryFile} re-exports '${moduleSpecifier}', which does not exist.`);
|
|
279
|
+
}
|
|
280
|
+
files.add(filePath);
|
|
281
|
+
const namespace = computeNamespace(sourceDirectory, filePath);
|
|
282
|
+
const { exportClause } = statement;
|
|
283
|
+
if (exportClause === void 0) {
|
|
284
|
+
wholeNamespaces.add(namespace);
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (isNamespaceExport(exportClause)) {
|
|
288
|
+
throw new Error(`${entryFile} re-exports '${moduleSpecifier}' as a namespace, which the API reference cannot document.`);
|
|
289
|
+
}
|
|
290
|
+
for (const element of exportClause.elements) {
|
|
291
|
+
if (element.propertyName !== void 0) {
|
|
292
|
+
throw new Error(`${entryFile} renames '${element.propertyName.text}' to '${element.name.text}', which the API reference cannot document.`);
|
|
293
|
+
}
|
|
294
|
+
publicKeys.add(qualifiedKey(namespace, element.name.text));
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return { files: [...files], publicKeys, wholeNamespaces };
|
|
298
|
+
}
|
|
246
299
|
function registerGenericTypeParams(types) {
|
|
247
300
|
for (const name of getApiDocSettings().genericTypeParameters ?? []) {
|
|
248
301
|
GENERIC_TYPE_PARAMS.add(name);
|
|
@@ -273,7 +326,9 @@ export {
|
|
|
273
326
|
computeCacheHash,
|
|
274
327
|
computeNamespace,
|
|
275
328
|
findEntryFiles,
|
|
329
|
+
keepPublicApi,
|
|
276
330
|
processSourceFile,
|
|
331
|
+
readPublicApiBarrel,
|
|
277
332
|
registerGenericTypeParams
|
|
278
333
|
};
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU291cmNlIGRpc2NvdmVyeSArIGV4dHJhY3Rpb246IHdhbGtzIGBzcmNgLCBmaWx0ZXJzIHRvIGRvY3VtZW50YWJsZSBlbnRyeSBmaWxlcywgYW5kIHR1cm5zIGVhY2hcbiAqIGZpbGUncyBleHBvcnRlZCBkZWNsYXJhdGlvbnMgaW50byBgVHlwZUluZm9gIGVudHJpZXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge1xuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB0eXBlIHsgVHlwZUluZm8gfSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBHRU5FUklDX1RZUEVfUEFSQU1TIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lLFxuICBpc0RvY3VtZW50ZWRGaWxlTmFtZVxufSBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0Q2xhc3NJbmZvLFxuICBleHRyYWN0RW51bUluZm8sXG4gIGV4dHJhY3RJbnRlcmZhY2VJbmZvLFxuICBleHRyYWN0VHlwZUFsaWFzSW5mbyxcbiAgZ2V0RGVzY3JpcHRpb24sXG4gIGdldEV4YW1wbGVzLFxuICBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMsXG4gIGdldFJlbWFya3MsXG4gIGdldFJldHVybkRlc2NyaXB0aW9uLFxuICBnZXRTaW5jZVxufSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYWNrYWdlRGVjbGFyYXRpb24gfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQgeyBnZXRBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgeyBzaW1wbGlmeVR5cGUgfSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuICogQ29sbGVjdCB0b3AtbGV2ZWwgZXhwb3J0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBzcmMgLSBUaGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEZ1bmN0aW9ucyhzcmM6IFNvdXJjZUZpbGUsIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIG5hbWVzcGFjZTogc3RyaW5nKTogdm9pZCB7XG4gIGZvciAoY29uc3QgJGZ1bmN0aW9uIG9mIHNyYy5nZXRGdW5jdGlvbnMoKSkge1xuICAgIGlmICghJGZ1bmN0aW9uLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSAkZnVuY3Rpb24uZ2V0TmFtZSgpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIG5hbWUpO1xuICAgIGlmICh0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlckRlc2NyaXB0aW9ucyA9IGdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygkZnVuY3Rpb24pO1xuICAgIGNvbnN0IHBhcmFtcyA9ICRmdW5jdGlvbi5nZXRQYXJhbWV0ZXJzKCkubWFwKChwKSA9PiAoe1xuICAgICAgZGVzY3JpcHRpb246IHBhcmFtZXRlckRlc2NyaXB0aW9ucy5nZXQocC5nZXROYW1lKCkpID8/ICcnLFxuICAgICAgbmFtZTogcC5nZXROYW1lKCksXG4gICAgICB0eXBlOiBzaW1wbGlmeVR5cGUocC5nZXRUeXBlKCkuZ2V0VGV4dCgpKVxuICAgIH0pKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbXMubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke3AudHlwZX1gKS5qb2luKCcsICcpO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBzaW1wbGlmeVR5cGUoJGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRUZXh0KCkpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGAke25hbWV9KCR7cGFyYW1ldGVyU3RyaW5nfSlgO1xuICAgIHR5cGVzLnNldChrZXksIHtcbiAgICAgIGJhc2VUeXBlczogW10sXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24oJGZ1bmN0aW9uKSxcbiAgICAgIGVudW1NZW1iZXJzOiBbXSxcbiAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcygkZnVuY3Rpb24pLFxuICAgICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICAgIGtpbmQ6ICdmdW5jdGlvbicsXG4gICAgICBtZXRob2RzOiBbe1xuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24oJGZ1bmN0aW9uKSxcbiAgICAgICAgZXhhbXBsZXM6IGdldEV4YW1wbGVzKCRmdW5jdGlvbiksXG4gICAgICAgIGluaGVyaXRlZEZyb206ICcnLFxuICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG92ZXJsb2FkS2V5OiBuYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbXMsXG4gICAgICAgIHJlbWFya3M6IGdldFJlbWFya3MoJGZ1bmN0aW9uKSxcbiAgICAgICAgcmV0dXJuRGVzY3JpcHRpb246IGdldFJldHVybkRlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICAgIHJldHVyblR5cGUsXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgc2luY2U6IGdldFNpbmNlKCRmdW5jdGlvbiksXG4gICAgICAgIHR5cGU6ICcnXG4gICAgICB9XSxcbiAgICAgIG5hbWUsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgIHJlbWFya3M6IGdldFJlbWFya3MoJGZ1bmN0aW9uKSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiAkZnVuY3Rpb24uZ2V0VHlwZVBhcmFtZXRlcnMoKS5tYXAoKHRwKSA9PiB0cC5nZXRUZXh0KCkpXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmRzIHdoZXJlIGV2ZXJ5IHN5bWJvbCBhIHNvdXJjZSBmaWxlIGltcG9ydHMgaXMgZGVjbGFyZWQsIHNvIGEgdHlwZSBhbm90aGVyIGRvY3VtZW50ZWQgcGFja2FnZSBkZWNsYXJlc1xuICogbGlua3MgdG8gdGhhdCBwYWNrYWdlJ3Mgc2l0ZS5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhY2thZ2VEZWNsYXJhdGlvbnMoc3JjOiBTb3VyY2VGaWxlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgaW1wb3J0RGVjbGFyYXRpb24gb2Ygc3JjLmdldEltcG9ydERlY2xhcmF0aW9ucygpKSB7XG4gICAgZm9yIChjb25zdCBuYW1lZEltcG9ydCBvZiBpbXBvcnREZWNsYXJhdGlvbi5nZXROYW1lZEltcG9ydHMoKSkge1xuICAgICAgLy8gQW4gdW5yZXNvbHZlZCBpbXBvcnQgYWxpYXNlcyB0aGUgY2hlY2tlcidzIHVua25vd24gc3ltYm9sLCB3aGljaCBoYXMgbm8gZGVjbGFyYXRpb25zLlxuICAgICAgLy8gQSByZW5hbWVkIGltcG9ydCBjYXJyaWVzIGl0cyBzeW1ib2wgb24gdGhlIGxvY2FsIG5hbWUuXG4gICAgICBjb25zdCBsb2NhbE5hbWVOb2RlID0gbmFtZWRJbXBvcnQuZ2V0QWxpYXNOb2RlKCkgPz8gbmFtZWRJbXBvcnQuZ2V0TmFtZU5vZGUoKTtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IGxvY2FsTmFtZU5vZGUuZ2V0U3ltYm9sT3JUaHJvdygpLmdldEFsaWFzZWRTeW1ib2xPclRocm93KCkuZ2V0RGVjbGFyYXRpb25zKCk7XG4gICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuICAgICAgICAvLyBPbmx5IGEgdHlwZSBpcyBsaW5rZWQgZnJvbSB0eXBlIHRleHQ7IGEgZnVuY3Rpb24ncyBuYW1lIGFsc28gbWF0Y2hlcyB3b3JkcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlcyB0byBpdC5cbiAgICAgICAgaWYgKGlzVHlwZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgIHJlZ2lzdGVyUGFja2FnZURlY2xhcmF0aW9uKG5hbWVkSW1wb3J0LmdldE5hbWUoKSwgZGVjbGFyYXRpb24uZ2V0U291cmNlRmlsZSgpLmdldEZpbGVQYXRoKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCB0b3AtbGV2ZWwgZXhwb3J0ZWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIChlLmcuIGBleHBvcnQgY29uc3QgRU1QVFkgPSAnJ2ApLlxuICpcbiAqIEBwYXJhbSBzcmMgLSBUaGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFZhcmlhYmxlcyhzcmM6IFNvdXJjZUZpbGUsIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIG5hbWVzcGFjZTogc3RyaW5nKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdmFyaWFibGVTdGF0ZW1lbnQgb2Ygc3JjLmdldFZhcmlhYmxlU3RhdGVtZW50cygpKSB7XG4gICAgaWYgKCF2YXJpYWJsZVN0YXRlbWVudC5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbktpbmQgPSB2YXJpYWJsZVN0YXRlbWVudC5nZXREZWNsYXJhdGlvbktpbmQoKTtcbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlU3RhdGVtZW50LmdldERlY2xhcmF0aW9ucygpKSB7XG4gICAgICBjb25zdCBuYW1lID0gZGVjbGFyYXRpb24uZ2V0TmFtZSgpO1xuICAgICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgbmFtZSk7XG4gICAgICBpZiAodHlwZXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0eXBlcy5zZXQoa2V5LCB7XG4gICAgICAgIGJhc2VUeXBlczogW10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBnZXREZXNjcmlwdGlvbih2YXJpYWJsZVN0YXRlbWVudCksXG4gICAgICAgIGVudW1NZW1iZXJzOiBbXSxcbiAgICAgICAgZXhhbXBsZXM6IGdldEV4YW1wbGVzKHZhcmlhYmxlU3RhdGVtZW50KSxcbiAgICAgICAgaW1wbGVtZW50c1R5cGVzOiBbXSxcbiAgICAgICAga2luZDogJ3ZhcmlhYmxlJyxcbiAgICAgICAgbWV0aG9kczogW10sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgIHJlbWFya3M6IGdldFJlbWFya3ModmFyaWFibGVTdGF0ZW1lbnQpLFxuICAgICAgICB0eXBlUGFyYW1ldGVyczogW10sXG4gICAgICAgIHZhcmlhYmxlS2V5d29yZDogZGVjbGFyYXRpb25LaW5kLFxuICAgICAgICB2YXJpYWJsZVR5cGU6IHNpbXBsaWZ5VHlwZShkZWNsYXJhdGlvbi5nZXRUeXBlKCkuZ2V0VGV4dCgpKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIGhhc2ggb2YgZXZlcnkgaW5wdXQgdGhhdCBkZWNpZGVzIHRoZSBnZW5lcmF0ZWQgcGFnZXM6IHRoZSBnZW5lcmF0b3IncyBvd24gbW9kdWxlcywgdGhlIHNldHRpbmdzIGFuZFxuICogdGhlIGVudHJ5IHNvdXJjZSBmaWxlcy4gQW4gdW5jaGFuZ2VkIGhhc2ggbGV0cyBhIHJ1biBza2lwIHRoZSBnZW5lcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBlbnRyeUZpbGVzIC0gVGhlIGVudHJ5IHNvdXJjZSBmaWxlcy5cbiAqIEBwYXJhbSBnZW5lcmF0b3JEaXJlY3RvcnkgLSBUaGUgZm9sZGVyIGhvbGRpbmcgdGhlIGdlbmVyYXRvcidzIG1vZHVsZXMuXG4gKiBAcmV0dXJucyBUaGUgaGFzaCwgYXMgaGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhY2hlSGFzaChlbnRyeUZpbGVzOiBzdHJpbmdbXSwgZ2VuZXJhdG9yRGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG5cbiAgLy8gVGhlIGdlbmVyYXRvciBpdHNlbGZcbiAgY29uc3QgZ2VuZXJhdG9yRmlsZXMgPSByZWFkZGlyU3luYyhnZW5lcmF0b3JEaXJlY3RvcnkpLmZpbHRlcigobmFtZSkgPT4gIW5hbWUuZW5kc1dpdGgoJy50ZXN0LnRzJykpLnNvcnQoKTtcbiAgZm9yIChjb25zdCBnZW5lcmF0b3JGaWxlIG9mIGdlbmVyYXRvckZpbGVzKSB7XG4gICAgaGFzaC51cGRhdGUoZ2VuZXJhdG9yRmlsZSk7XG4gICAgaGFzaC51cGRhdGUocmVhZEZpbGVTeW5jKGpvaW4oZ2VuZXJhdG9yRGlyZWN0b3J5LCBnZW5lcmF0b3JGaWxlKSwgJ3V0Zi04JykpO1xuICB9XG5cbiAgLy8gVGhlIHNldHRpbmdzLCB3aGljaCBldmVyeSBsaW5rIGFuZCBwYXRoIGRlcGVuZHMgb24uIEEgaG9vayBpcyBoYXNoZWQgYnkgaXRzIHNvdXJjZSwgd2hpY2ggYEpTT04uc3RyaW5naWZ5YCBkcm9wcy5cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBoYXNoLnVwZGF0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgLi4uc2V0dGluZ3MsXG4gICAgZXh0ZXJuYWxUeXBlTGlua3M6IFsuLi5zZXR0aW5ncy5leHRlcm5hbFR5cGVMaW5rc10sXG4gICAgaW1wb3J0U3RhdGVtZW50OiBzZXR0aW5ncy5pbXBvcnRTdGF0ZW1lbnQgJiYgU3RyaW5nKHNldHRpbmdzLmltcG9ydFN0YXRlbWVudCksXG4gICAgbWVtYmVyUm91dGVTZWdtZW50OiBzZXR0aW5ncy5tZW1iZXJSb3V0ZVNlZ21lbnQgJiYgU3RyaW5nKHNldHRpbmdzLm1lbWJlclJvdXRlU2VnbWVudCksXG4gICAgcGFja2FnZVNpdGVzOiBbLi4uc2V0dGluZ3MucGFja2FnZVNpdGVzXVxuICB9KSk7XG5cbiAgLy8gSGFzaCBhbGwgZW50cnkgc291cmNlIGZpbGVzXG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgWy4uLmVudHJ5RmlsZXNdLnNvcnQoKSkge1xuICAgIGhhc2gudXBkYXRlKGZpbGVQYXRoKTtcbiAgICBoYXNoLnVwZGF0ZShyZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbmFtZXNwYWNlIChQT1NJWCBwYXRoIHJlbGF0aXZlIHRvIGBzcmNgLCBubyBleHRlbnNpb24pIGZvciBhIHNvdXJjZSBmaWxlLlxuICpcbiAqIEBwYXJhbSBzcmNEaXJlY3RvcnkgLSBUaGUgc291cmNlIGZvbGRlciB0aGUgbmFtZXNwYWNlIGlzIHJlbGF0aXZlIHRvLlxuICogQHBhcmFtIGZpbGVQYXRoIC0gVGhlIGZpbGUncyBwYXRoLlxuICogQHJldHVybnMgVGhlIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVOYW1lc3BhY2Uoc3JjRGlyZWN0b3J5OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVsYXRpdmUoc3JjRGlyZWN0b3J5LCBmaWxlUGF0aCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykucmVwbGFjZSgvXFwudHMkLywgJycpO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZpbmQgYWxsIGRvY3VtZW50YWJsZSBgKi50c2AgZW50cnkgZmlsZXMgdW5kZXIgYHNyY2AuXG4gKlxuICogRXhjbHVkZXM6IGAqLnRlc3QudHNgIChpbmNsLiBgKi5icm93c2VyLnRlc3QudHNgIC8gYCouaW50ZWdyYXRpb24udGVzdC50c2ApLCBgKi5kLnRzYCxcbiAqIGBpbmRleC50c2AsIGBfX21lcmdlZC50c2AsIGBzZXR1cC50c2AsIGAqLXNldHVwLnRzYCwgYW5kIGFueSBzdWJ0cmVlIHVuZGVyIGEgYEB0eXBlc2AsXG4gKiBgc3R5bGVzYCwgb3IgYHRlc3QtaGVscGVyc2AgZGlyZWN0b3J5LCBvciBvbmUgb2YgYGV4Y2x1ZGVkRGlyZWN0b3JpZXNgLlxuICpcbiAqIEBwYXJhbSBkaXJlY3RvcnkgLSBUaGUgZm9sZGVyIHRvIHNlYXJjaC5cbiAqIEBwYXJhbSBleGNsdWRlZERpcmVjdG9yaWVzIC0gRGlyZWN0b3J5IG5hbWVzIGV4Y2x1ZGVkIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0cy5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSBmaWxlcycgcGF0aHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW50cnlGaWxlcyhkaXJlY3Rvcnk6IHN0cmluZywgZXhjbHVkZWREaXJlY3RvcmllczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihkaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBpZiAoIWlzRG9jdW1lbnRlZERpcmVjdG9yeU5hbWUoZW50cnkubmFtZSwgZXhjbHVkZWREaXJlY3RvcmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHRzLnB1c2goLi4uZmluZEVudHJ5RmlsZXMoZnVsbFBhdGgsIGV4Y2x1ZGVkRGlyZWN0b3JpZXMpKTtcbiAgICB9IGVsc2UgaWYgKGlzRG9jdW1lbnRlZEZpbGVOYW1lKGVudHJ5Lm5hbWUpKSB7XG4gICAgICByZXN1bHRzLnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBhIHNvdXJjZSBmaWxlJ3MgZXhwb3J0ZWQgdHlwZSBhbGlhc2VzLCBlbnVtcywgaW50ZXJmYWNlcyBhbmQgY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTb3VyY2VGaWxlKHNyYzogU291cmNlRmlsZSwgdHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhbGlhcyBvZiBzcmMuZ2V0VHlwZUFsaWFzZXMoKSkge1xuICAgIGlmICghYWxpYXMuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgYWxpYXMuZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0VHlwZUFsaWFzSW5mbyhhbGlhcywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtRGVjbGFyYXRpb24gb2Ygc3JjLmdldEVudW1zKCkpIHtcbiAgICBpZiAoIWVudW1EZWNsYXJhdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBlbnVtRGVjbGFyYXRpb24uZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0RW51bUluZm8oZW51bURlY2xhcmF0aW9uLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGlmYWNlIG9mIHNyYy5nZXRJbnRlcmZhY2VzKCkpIHtcbiAgICBpZiAoIWlmYWNlLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGlmYWNlLmdldE5hbWUoKSk7XG4gICAgaWYgKCF0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgdHlwZXMuc2V0KGtleSwgZXh0cmFjdEludGVyZmFjZUluZm8oaWZhY2UsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2xzIG9mIHNyYy5nZXRDbGFzc2VzKCkpIHtcbiAgICBpZiAoIWNscy5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gY2xzLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0Q2xhc3NJbmZvKGNscywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIHR5cGUgcGFyYW1ldGVyIG5hbWVzIHNvIHJlbmRlclR5cGVXaXRoTGlua3Mgd29uJ3QgaHlwZXJsaW5rIHRoZW0uXG4gKiBTa2lwIG5hbWVzIHRoYXQgYXJlIGFsc28ga25vd24gdHlwZXMg4oCUIHRob3NlIHNob3VsZCBzdGlsbCBiZSBsaW5rYWJsZS4gVGhlIHNpdGUncyBgZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzYFxuICogYXJlIHJlZ2lzdGVyZWQgYXMgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXModHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgZ2V0QXBpRG9jU2V0dGluZ3MoKS5nZW5lcmljVHlwZVBhcmFtZXRlcnMgPz8gW10pIHtcbiAgICBHRU5FUklDX1RZUEVfUEFSQU1TLmFkZChuYW1lKTtcbiAgfVxuICBjb25zdCBrbm93bk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgWywgaW5mb10gb2YgdHlwZXMpIHtcbiAgICBrbm93bk5hbWVzLmFkZChpbmZvLm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgWywgaW5mb10gb2YgdHlwZXMpIHtcbiAgICBmb3IgKGNvbnN0IHRwIG9mIGluZm8udHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnN0IGJhcmVQYXJhbWV0ZXIgPSB0cC5yZXBsYWNlKC9cXHMrZXh0ZW5kc1xccysuKiQvLCAnJyk7XG4gICAgICBpZiAoIWtub3duTmFtZXMuaGFzKGJhcmVQYXJhbWV0ZXIpKSB7XG4gICAgICAgIEdFTkVSSUNfVFlQRV9QQVJBTVMuYWRkKGJhcmVQYXJhbWV0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1R5cGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTm9kZS5pc0NsYXNzRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHx8IE5vZGUuaXNJbnRlcmZhY2VEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHwgTm9kZS5pc1R5cGVBbGlhc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSB8fCBOb2RlLmlzRW51bURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTtcbn1cblxuZnVuY3Rpb24gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7bmFtZXNwYWNlfSMke25hbWV9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxZQUFZO0FBSXJCLFNBQVMsMkJBQTJCO0FBQ3BDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsa0NBQWtDO0FBQzNDLFNBQVMs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
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU291cmNlIGRpc2NvdmVyeSArIGV4dHJhY3Rpb246IHdhbGtzIGBzcmNgLCBmaWx0ZXJzIHRvIGRvY3VtZW50YWJsZSBlbnRyeSBmaWxlcywgYW5kIHR1cm5zIGVhY2hcbiAqIGZpbGUncyBleHBvcnRlZCBkZWNsYXJhdGlvbnMgaW50byBgVHlwZUluZm9gIGVudHJpZXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICd0cy1tb3JwaCc7XG5pbXBvcnQge1xuICBjcmVhdGVTb3VyY2VGaWxlLFxuICBpc0V4cG9ydERlY2xhcmF0aW9uLFxuICBpc05hbWVzcGFjZUV4cG9ydCxcbiAgaXNTdHJpbmdMaXRlcmFsLFxuICBTY3JpcHRUYXJnZXRcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB0eXBlIHsgVHlwZUluZm8gfSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBHRU5FUklDX1RZUEVfUEFSQU1TIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lLFxuICBpc0RvY3VtZW50ZWRGaWxlTmFtZVxufSBmcm9tICcuL2FwaS1kb2MtZG9jdW1lbnRlZC1maWxlcy50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0Q2xhc3NJbmZvLFxuICBleHRyYWN0RW51bUluZm8sXG4gIGV4dHJhY3RJbnRlcmZhY2VJbmZvLFxuICBleHRyYWN0VHlwZUFsaWFzSW5mbyxcbiAgZ2V0RGVzY3JpcHRpb24sXG4gIGdldEV4YW1wbGVzLFxuICBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMsXG4gIGdldFJlbWFya3MsXG4gIGdldFJldHVybkRlc2NyaXB0aW9uLFxuICBnZXRTaW5jZVxufSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYWNrYWdlRGVjbGFyYXRpb24gfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQgeyBnZXRBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgeyBzaW1wbGlmeVR5cGUgfSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuICogQSBwYWNrYWdlJ3MgcHVibGljIEFQSSBiYXJyZWwsIHJlYWQgYnkge0BsaW5rIHJlYWRQdWJsaWNBcGlCYXJyZWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0FwaUJhcnJlbCB7XG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlcyB0aGUgYmFycmVsIHJlLWV4cG9ydHMgZnJvbSwgaW4gYmFycmVsIG9yZGVyOiB0aGUgZW50cnkgZmlsZXMgb2YgdGhlIEFQSSByZWZlcmVuY2UuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBxdWFsaWZpZWQgaWRzIChgPG5hbWVzcGFjZT4jPG5hbWU+YCkgb2YgdGhlIGV4cG9ydHMgdGhlIGJhcnJlbCBmb3J3YXJkcyBieSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljS2V5czogUmVhZG9ubHlTZXQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZXMgb2YgdGhlIG1vZHVsZXMgdGhlIGJhcnJlbCByZS1leHBvcnRzIHdob2xlIChgZXhwb3J0ICogZnJvbWApLlxuICAgKi9cbiAgcmVhZG9ubHkgd2hvbGVOYW1lc3BhY2VzOiBSZWFkb25seVNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIENvbGxlY3QgdG9wLWxldmVsIGV4cG9ydGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RGdW5jdGlvbnMoc3JjOiBTb3VyY2VGaWxlLCB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lc3BhY2U6IHN0cmluZyk6IHZvaWQge1xuICBmb3IgKGNvbnN0ICRmdW5jdGlvbiBvZiBzcmMuZ2V0RnVuY3Rpb25zKCkpIHtcbiAgICBpZiAoISRmdW5jdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gJGZ1bmN0aW9uLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAodHlwZXMuaGFzKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMgPSBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMoJGZ1bmN0aW9uKTtcbiAgICBjb25zdCBwYXJhbXMgPSAkZnVuY3Rpb24uZ2V0UGFyYW1ldGVycygpLm1hcCgocCkgPT4gKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMuZ2V0KHAuZ2V0TmFtZSgpKSA/PyAnJyxcbiAgICAgIG5hbWU6IHAuZ2V0TmFtZSgpLFxuICAgICAgdHlwZTogc2ltcGxpZnlUeXBlKHAuZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICB9KSk7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1zLm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHtwLnR5cGV9YCkuam9pbignLCAnKTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gc2ltcGxpZnlUeXBlKCRmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0VGV4dCgpKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBgJHtuYW1lfSgke3BhcmFtZXRlclN0cmluZ30pYDtcbiAgICB0eXBlcy5zZXQoa2V5LCB7XG4gICAgICBiYXNlVHlwZXM6IFtdLFxuICAgICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICBlbnVtTWVtYmVyczogW10sXG4gICAgICBleGFtcGxlczogZ2V0RXhhbXBsZXMoJGZ1bmN0aW9uKSxcbiAgICAgIGltcGxlbWVudHNUeXBlczogW10sXG4gICAgICBraW5kOiAnZnVuY3Rpb24nLFxuICAgICAgbWV0aG9kczogW3tcbiAgICAgICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcygkZnVuY3Rpb24pLFxuICAgICAgICBpbmhlcml0ZWRGcm9tOiAnJyxcbiAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBvdmVybG9hZEtleTogbmFtZSxcbiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1zLFxuICAgICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKCRmdW5jdGlvbiksXG4gICAgICAgIHJldHVybkRlc2NyaXB0aW9uOiBnZXRSZXR1cm5EZXNjcmlwdGlvbigkZnVuY3Rpb24pLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIHNpbmNlOiBnZXRTaW5jZSgkZnVuY3Rpb24pLFxuICAgICAgICB0eXBlOiAnJ1xuICAgICAgfV0sXG4gICAgICBuYW1lLFxuICAgICAgbmFtZXNwYWNlLFxuICAgICAgcHJvcGVydGllczogW10sXG4gICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKCRmdW5jdGlvbiksXG4gICAgICB0eXBlUGFyYW1ldGVyczogJGZ1bmN0aW9uLmdldFR5cGVQYXJhbWV0ZXJzKCkubWFwKCh0cCkgPT4gdHAuZ2V0VGV4dCgpKVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVjb3JkcyB3aGVyZSBldmVyeSBzeW1ib2wgYSBzb3VyY2UgZmlsZSBpbXBvcnRzIGlzIGRlY2xhcmVkLCBzbyBhIHR5cGUgYW5vdGhlciBkb2N1bWVudGVkIHBhY2thZ2UgZGVjbGFyZXNcbiAqIGxpbmtzIHRvIHRoYXQgcGFja2FnZSdzIHNpdGUuXG4gKlxuICogQHBhcmFtIHNyYyAtIFRoZSBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYzogU291cmNlRmlsZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGltcG9ydERlY2xhcmF0aW9uIG9mIHNyYy5nZXRJbXBvcnREZWNsYXJhdGlvbnMoKSkge1xuICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgaW1wb3J0RGVjbGFyYXRpb24uZ2V0TmFtZWRJbXBvcnRzKCkpIHtcbiAgICAgIC8vIEFuIHVucmVzb2x2ZWQgaW1wb3J0IGFsaWFzZXMgdGhlIGNoZWNrZXIncyB1bmtub3duIHN5bWJvbCwgd2hpY2ggaGFzIG5vIGRlY2xhcmF0aW9ucy5cbiAgICAgIC8vIEEgcmVuYW1lZCBpbXBvcnQgY2FycmllcyBpdHMgc3ltYm9sIG9uIHRoZSBsb2NhbCBuYW1lLlxuICAgICAgY29uc3QgbG9jYWxOYW1lTm9kZSA9IG5hbWVkSW1wb3J0LmdldEFsaWFzTm9kZSgpID8/IG5hbWVkSW1wb3J0LmdldE5hbWVOb2RlKCk7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBsb2NhbE5hbWVOb2RlLmdldFN5bWJvbE9yVGhyb3coKS5nZXRBbGlhc2VkU3ltYm9sT3JUaHJvdygpLmdldERlY2xhcmF0aW9ucygpO1xuICAgICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgLy8gT25seSBhIHR5cGUgaXMgbGlua2VkIGZyb20gdHlwZSB0ZXh0OyBhIGZ1bmN0aW9uJ3MgbmFtZSBhbHNvIG1hdGNoZXMgd29yZHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZXMgdG8gaXQuXG4gICAgICAgIGlmIChpc1R5cGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpIHtcbiAgICAgICAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihuYW1lZEltcG9ydC5nZXROYW1lKCksIGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKS5nZXRGaWxlUGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgdG9wLWxldmVsIGV4cG9ydGVkIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyAoZS5nLiBgZXhwb3J0IGNvbnN0IEVNUFRZID0gJydgKS5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RWYXJpYWJsZXMoc3JjOiBTb3VyY2VGaWxlLCB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lc3BhY2U6IHN0cmluZyk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHZhcmlhYmxlU3RhdGVtZW50IG9mIHNyYy5nZXRWYXJpYWJsZVN0YXRlbWVudHMoKSkge1xuICAgIGlmICghdmFyaWFibGVTdGF0ZW1lbnQuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyYXRpb25LaW5kID0gdmFyaWFibGVTdGF0ZW1lbnQuZ2V0RGVjbGFyYXRpb25LaW5kKCk7XG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZVN0YXRlbWVudC5nZXREZWNsYXJhdGlvbnMoKSkge1xuICAgICAgY29uc3QgbmFtZSA9IGRlY2xhcmF0aW9uLmdldE5hbWUoKTtcbiAgICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIG5hbWUpO1xuICAgICAgaWYgKHR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHlwZXMuc2V0KGtleSwge1xuICAgICAgICBiYXNlVHlwZXM6IFtdLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24odmFyaWFibGVTdGF0ZW1lbnQpLFxuICAgICAgICBlbnVtTWVtYmVyczogW10sXG4gICAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyh2YXJpYWJsZVN0YXRlbWVudCksXG4gICAgICAgIGltcGxlbWVudHNUeXBlczogW10sXG4gICAgICAgIGtpbmQ6ICd2YXJpYWJsZScsXG4gICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKHZhcmlhYmxlU3RhdGVtZW50KSxcbiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IFtdLFxuICAgICAgICB2YXJpYWJsZUtleXdvcmQ6IGRlY2xhcmF0aW9uS2luZCxcbiAgICAgICAgdmFyaWFibGVUeXBlOiBzaW1wbGlmeVR5cGUoZGVjbGFyYXRpb24uZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbXB1dGUgYSBoYXNoIG9mIGV2ZXJ5IGlucHV0IHRoYXQgZGVjaWRlcyB0aGUgZ2VuZXJhdGVkIHBhZ2VzOiB0aGUgZ2VuZXJhdG9yJ3Mgb3duIG1vZHVsZXMsIHRoZSBzZXR0aW5ncyBhbmRcbiAqIHRoZSBlbnRyeSBzb3VyY2UgZmlsZXMuIEFuIHVuY2hhbmdlZCBoYXNoIGxldHMgYSBydW4gc2tpcCB0aGUgZ2VuZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW50cnlGaWxlcyAtIFRoZSBlbnRyeSBzb3VyY2UgZmlsZXMuXG4gKiBAcGFyYW0gZ2VuZXJhdG9yRGlyZWN0b3J5IC0gVGhlIGZvbGRlciBob2xkaW5nIHRoZSBnZW5lcmF0b3IncyBtb2R1bGVzLlxuICogQHJldHVybnMgVGhlIGhhc2gsIGFzIGhleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWNoZUhhc2goZW50cnlGaWxlczogc3RyaW5nW10sIGdlbmVyYXRvckRpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuXG4gIC8vIFRoZSBnZW5lcmF0b3IgaXRzZWxmXG4gIGNvbnN0IGdlbmVyYXRvckZpbGVzID0gcmVhZGRpclN5bmMoZ2VuZXJhdG9yRGlyZWN0b3J5KS5maWx0ZXIoKG5hbWUpID0+ICFuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpKS5zb3J0KCk7XG4gIGZvciAoY29uc3QgZ2VuZXJhdG9yRmlsZSBvZiBnZW5lcmF0b3JGaWxlcykge1xuICAgIGhhc2gudXBkYXRlKGdlbmVyYXRvckZpbGUpO1xuICAgIGhhc2gudXBkYXRlKHJlYWRGaWxlU3luYyhqb2luKGdlbmVyYXRvckRpcmVjdG9yeSwgZ2VuZXJhdG9yRmlsZSksICd1dGYtOCcpKTtcbiAgfVxuXG4gIC8vIFRoZSBzZXR0aW5ncywgd2hpY2ggZXZlcnkgbGluayBhbmQgcGF0aCBkZXBlbmRzIG9uLiBBIGhvb2sgaXMgaGFzaGVkIGJ5IGl0cyBzb3VyY2UsIHdoaWNoIGBKU09OLnN0cmluZ2lmeWAgZHJvcHMuXG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgaGFzaC51cGRhdGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLnNldHRpbmdzLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzOiBbLi4uc2V0dGluZ3MuZXh0ZXJuYWxUeXBlTGlua3NdLFxuICAgIGltcG9ydFN0YXRlbWVudDogc2V0dGluZ3MuaW1wb3J0U3RhdGVtZW50ICYmIFN0cmluZyhzZXR0aW5ncy5pbXBvcnRTdGF0ZW1lbnQpLFxuICAgIG1lbWJlclJvdXRlU2VnbWVudDogc2V0dGluZ3MubWVtYmVyUm91dGVTZWdtZW50ICYmIFN0cmluZyhzZXR0aW5ncy5tZW1iZXJSb3V0ZVNlZ21lbnQpLFxuICAgIHBhY2thZ2VTaXRlczogWy4uLnNldHRpbmdzLnBhY2thZ2VTaXRlc11cbiAgfSkpO1xuXG4gIC8vIEhhc2ggYWxsIGVudHJ5IHNvdXJjZSBmaWxlc1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIFsuLi5lbnRyeUZpbGVzXS5zb3J0KCkpIHtcbiAgICBoYXNoLnVwZGF0ZShmaWxlUGF0aCk7XG4gICAgaGFzaC51cGRhdGUocmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKSk7XG4gIH1cblxuICByZXR1cm4gaGFzaC5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIG5hbWVzcGFjZSAoUE9TSVggcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgbm8gZXh0ZW5zaW9uKSBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqXG4gKiBAcGFyYW0gc3JjRGlyZWN0b3J5IC0gVGhlIHNvdXJjZSBmb2xkZXIgdGhlIG5hbWVzcGFjZSBpcyByZWxhdGl2ZSB0by5cbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBmaWxlJ3MgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTmFtZXNwYWNlKHNyY0RpcmVjdG9yeTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbGF0aXZlKHNyY0RpcmVjdG9yeSwgZmlsZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpLnJlcGxhY2UoL1xcLnRzJC8sICcnKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBmaW5kIGFsbCBkb2N1bWVudGFibGUgYCoudHNgIGVudHJ5IGZpbGVzIHVuZGVyIGBzcmNgLlxuICpcbiAqIEV4Y2x1ZGVzOiBgKi50ZXN0LnRzYCAoaW5jbC4gYCouYnJvd3Nlci50ZXN0LnRzYCAvIGAqLmludGVncmF0aW9uLnRlc3QudHNgKSwgYCouZC50c2AsXG4gKiBgaW5kZXgudHNgLCBgX19tZXJnZWQudHNgLCBgc2V0dXAudHNgLCBgKi1zZXR1cC50c2AsIGFuZCBhbnkgc3VidHJlZSB1bmRlciBhIGBAdHlwZXNgLFxuICogYHN0eWxlc2AsIG9yIGB0ZXN0LWhlbHBlcnNgIGRpcmVjdG9yeSwgb3Igb25lIG9mIGBleGNsdWRlZERpcmVjdG9yaWVzYC5cbiAqXG4gKiBAcGFyYW0gZGlyZWN0b3J5IC0gVGhlIGZvbGRlciB0byBzZWFyY2guXG4gKiBAcGFyYW0gZXhjbHVkZWREaXJlY3RvcmllcyAtIERpcmVjdG9yeSBuYW1lcyBleGNsdWRlZCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdHMuXG4gKiBAcmV0dXJucyBUaGUgZW50cnkgZmlsZXMnIHBhdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVudHJ5RmlsZXMoZGlyZWN0b3J5OiBzdHJpbmcsIGV4Y2x1ZGVkRGlyZWN0b3JpZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZGRpclN5bmMoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKCFpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lKGVudHJ5Lm5hbWUsIGV4Y2x1ZGVkRGlyZWN0b3JpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0cy5wdXNoKC4uLmZpbmRFbnRyeUZpbGVzKGZ1bGxQYXRoLCBleGNsdWRlZERpcmVjdG9yaWVzKSk7XG4gICAgfSBlbHNlIGlmIChpc0RvY3VtZW50ZWRGaWxlTmFtZShlbnRyeS5uYW1lKSkge1xuICAgICAgcmVzdWx0cy5wdXNoKGZ1bGxQYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogRHJvcHMgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIHRoZSBwdWJsaWMgQVBJIGJhcnJlbCBkb2VzIG5vdCByZS1leHBvcnQuIFJ1biBpdCBhZnRlciBgcmVzb2x2ZUluaGVyaXRlZE1lbWJlcnNgLCBzb1xuICogYSBwdWJsaWMgY2xhc3Mgc3RpbGwgaW5oZXJpdHMgdGhlIG1lbWJlcnMgb2YgYW4gaW50ZXJuYWwgYmFzZSBjbGFzcy5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIGJhcnJlbCAtIFRoZSBiYXJyZWwsIHJlYWQgYnkge0BsaW5rIHJlYWRQdWJsaWNBcGlCYXJyZWx9LlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcFB1YmxpY0FwaSh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBiYXJyZWw6IFB1YmxpY0FwaUJhcnJlbCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtrZXksIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgaWYgKCFiYXJyZWwud2hvbGVOYW1lc3BhY2VzLmhhcyhpbmZvLm5hbWVzcGFjZSkgJiYgIWJhcnJlbC5wdWJsaWNLZXlzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5kZWxldGUoa2V5KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBhIHNvdXJjZSBmaWxlJ3MgZXhwb3J0ZWQgdHlwZSBhbGlhc2VzLCBlbnVtcywgaW50ZXJmYWNlcyBhbmQgY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTb3VyY2VGaWxlKHNyYzogU291cmNlRmlsZSwgdHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhbGlhcyBvZiBzcmMuZ2V0VHlwZUFsaWFzZXMoKSkge1xuICAgIGlmICghYWxpYXMuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgYWxpYXMuZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0VHlwZUFsaWFzSW5mbyhhbGlhcywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtRGVjbGFyYXRpb24gb2Ygc3JjLmdldEVudW1zKCkpIHtcbiAgICBpZiAoIWVudW1EZWNsYXJhdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBlbnVtRGVjbGFyYXRpb24uZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0RW51bUluZm8oZW51bURlY2xhcmF0aW9uLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGlmYWNlIG9mIHNyYy5nZXRJbnRlcmZhY2VzKCkpIHtcbiAgICBpZiAoIWlmYWNlLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGlmYWNlLmdldE5hbWUoKSk7XG4gICAgaWYgKCF0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgdHlwZXMuc2V0KGtleSwgZXh0cmFjdEludGVyZmFjZUluZm8oaWZhY2UsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2xzIG9mIHNyYy5nZXRDbGFzc2VzKCkpIHtcbiAgICBpZiAoIWNscy5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gY2xzLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0Q2xhc3NJbmZvKGNscywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYSBwYWNrYWdlJ3MgcHVibGljIEFQSSBiYXJyZWw6IHRoZSBtb2R1bGVzIGl0IHJlLWV4cG9ydHMgZnJvbSBhbmQgdGhlIG5hbWVzIGl0IGZvcndhcmRzLlxuICpcbiAqIEl0IGlzIHBhcnNlZCBvbiBpdHMgb3duIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHRzLW1vcnBoIHByb2plY3QsIGJlY2F1c2UgdGhlIGNhY2hlIGNoZWNrIG5lZWRzIHRoZSBlbnRyeSBmaWxlc1xuICogYmVmb3JlIHRoYXQgcHJvamVjdCBleGlzdHMsIGFuZCBhIGNhY2hlIGhpdCBtdXN0IG5vdCBwYXkgZm9yIGxvYWRpbmcgaXQuXG4gKlxuICogQHBhcmFtIGVudHJ5RmlsZSAtIFRoZSBiYXJyZWwsIGUuZy4gYDxyb290Pi9zcmMvaW5kZXgudHNgLlxuICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSAtIFRoZSBmb2xkZXIgbmFtZXNwYWNlcyBhcmUgcmVsYXRpdmUgdG8uXG4gKiBAcmV0dXJucyBUaGUgYmFycmVsLlxuICogQHRocm93cyBJZiB0aGUgYmFycmVsIHJlLWV4cG9ydHMgYSBtb2R1bGUgdGhhdCBkb2VzIG5vdCBleGlzdCBvciBiZWxvbmdzIHRvIGFub3RoZXIgcGFja2FnZSwgcmVuYW1lcyBhbiBleHBvcnQsXG4gKiBvciByZS1leHBvcnRzIGEgbW9kdWxlIGFzIGEgbmFtZXNwYWNlOiBub25lIG9mIHRoZXNlIGNhbiBiZSBkb2N1bWVudGVkIHVuZGVyIHRoZSBuYW1lIGEgY29uc3VtZXIgaW1wb3J0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQdWJsaWNBcGlCYXJyZWwoZW50cnlGaWxlOiBzdHJpbmcsIHNvdXJjZURpcmVjdG9yeTogc3RyaW5nKTogUHVibGljQXBpQmFycmVsIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IGNyZWF0ZVNvdXJjZUZpbGUoZW50cnlGaWxlLCByZWFkRmlsZVN5bmMoZW50cnlGaWxlLCAndXRmLTgnKSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCk7XG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHB1YmxpY0tleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgd2hvbGVOYW1lc3BhY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFpc0V4cG9ydERlY2xhcmF0aW9uKHN0YXRlbWVudCkgfHwgc3RhdGVtZW50Lm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkIHx8ICFpc1N0cmluZ0xpdGVyYWwoc3RhdGVtZW50Lm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBzdGF0ZW1lbnQubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gICAgaWYgKCFtb2R1bGVTcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlGaWxlfSByZS1leHBvcnRzICcke21vZHVsZVNwZWNpZmllcn0nLCB3aGljaCBpcyBub3QgYSBtb2R1bGUgb2YgdGhpcyBwYWNrYWdlLmApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoZGlybmFtZShlbnRyeUZpbGUpLCBtb2R1bGVTcGVjaWZpZXIpO1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeUZpbGV9IHJlLWV4cG9ydHMgJyR7bW9kdWxlU3BlY2lmaWVyfScsIHdoaWNoIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBmaWxlcy5hZGQoZmlsZVBhdGgpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbXB1dGVOYW1lc3BhY2Uoc291cmNlRGlyZWN0b3J5LCBmaWxlUGF0aCk7XG5cbiAgICBjb25zdCB7IGV4cG9ydENsYXVzZSB9ID0gc3RhdGVtZW50O1xuICAgIGlmIChleHBvcnRDbGF1c2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgd2hvbGVOYW1lc3BhY2VzLmFkZChuYW1lc3BhY2UpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc05hbWVzcGFjZUV4cG9ydChleHBvcnRDbGF1c2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlGaWxlfSByZS1leHBvcnRzICcke21vZHVsZVNwZWNpZmllcn0nIGFzIGEgbmFtZXNwYWNlLCB3aGljaCB0aGUgQVBJIHJlZmVyZW5jZSBjYW5ub3QgZG9jdW1lbnQuYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBleHBvcnRDbGF1c2UuZWxlbWVudHMpIHtcbiAgICAgIGlmIChlbGVtZW50LnByb3BlcnR5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeUZpbGV9IHJlbmFtZXMgJyR7ZWxlbWVudC5wcm9wZXJ0eU5hbWUudGV4dH0nIHRvICcke2VsZW1lbnQubmFtZS50ZXh0fScsIHdoaWNoIHRoZSBBUEkgcmVmZXJlbmNlIGNhbm5vdCBkb2N1bWVudC5gKTtcbiAgICAgIH1cbiAgICAgIHB1YmxpY0tleXMuYWRkKHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGVsZW1lbnQubmFtZS50ZXh0KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZmlsZXM6IFsuLi5maWxlc10sIHB1YmxpY0tleXMsIHdob2xlTmFtZXNwYWNlcyB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGFsbCB0eXBlIHBhcmFtZXRlciBuYW1lcyBzbyByZW5kZXJUeXBlV2l0aExpbmtzIHdvbid0IGh5cGVybGluayB0aGVtLlxuICogU2tpcCBuYW1lcyB0aGF0IGFyZSBhbHNvIGtub3duIHR5cGVzIOKAlCB0aG9zZSBzaG91bGQgc3RpbGwgYmUgbGlua2FibGUuIFRoZSBzaXRlJ3MgYGdlbmVyaWNUeXBlUGFyYW1ldGVyc2BcbiAqIGFyZSByZWdpc3RlcmVkIGFzIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGdldEFwaURvY1NldHRpbmdzKCkuZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzID8/IFtdKSB7XG4gICAgR0VORVJJQ19UWVBFX1BBUkFNUy5hZGQobmFtZSk7XG4gIH1cbiAgY29uc3Qga25vd25OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFssIGluZm9dIG9mIHR5cGVzKSB7XG4gICAga25vd25OYW1lcy5hZGQoaW5mby5uYW1lKTtcbiAgfVxuICBmb3IgKGNvbnN0IFssIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgZm9yIChjb25zdCB0cCBvZiBpbmZvLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpO1xuICAgICAgaWYgKCFrbm93bk5hbWVzLmhhcyhiYXJlUGFyYW1ldGVyKSkge1xuICAgICAgICBHRU5FUklDX1RZUEVfUEFSQU1TLmFkZChiYXJlUGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUeXBlRGVjbGFyYXRpb24oZGVjbGFyYXRpb246IE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIE5vZGUuaXNDbGFzc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSB8fCBOb2RlLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHx8IE5vZGUuaXNUeXBlQWxpYXNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHwgTm9kZS5pc0VudW1EZWNsYXJhdGlvbihkZWNsYXJhdGlvbik7XG59XG5cbmZ1bmN0aW9uIHF1YWxpZmllZEtleShuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke25hbWVzcGFjZX0jJHtuYW1lfWA7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNL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
|
|
@@ -90,7 +90,8 @@ 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
97
|
* variables with a value `import`. A site's `importStatement` setting replaces that statement.
|
|
@@ -112,7 +112,8 @@ function getImportStatement(info) {
|
|
|
112
112
|
const isTypeOnly = ["enum", "interface", "type"].includes(info.kind);
|
|
113
113
|
const importKeyword = isTypeOnly ? "import type" : "import";
|
|
114
114
|
const settings = getApiDocSettings();
|
|
115
|
-
const
|
|
115
|
+
const moduleSpecifier = settings.publicApiEntry === void 0 ? `${settings.packageName}/${info.namespace}` : settings.packageName;
|
|
116
|
+
const defaultImportStatement = `${importKeyword} { ${info.name} } from '${moduleSpecifier}';`;
|
|
116
117
|
return settings.importStatement === void 0 ? defaultImportStatement : settings.importStatement({ defaultImportStatement, isTypeOnly, kind: info.kind, name: info.name, namespace: info.namespace });
|
|
117
118
|
}
|
|
118
119
|
function getNamespaceDirectory(namespace) {
|
|
@@ -252,4 +253,4 @@ export {
|
|
|
252
253
|
stripMarkdown,
|
|
253
254
|
truncateSignature
|
|
254
255
|
};
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLiBBIHNpdGUncyBgaW1wb3J0U3RhdGVtZW50YCBzZXR0aW5nIHJlcGxhY2VzIHRoYXQgc3RhdGVtZW50LlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzaXRlJ3MgYGltcG9ydFN0YXRlbWVudGAgc2hvd3Mgbm9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltcG9ydFN0YXRlbWVudChpbmZvOiBUeXBlSW5mbyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGlzVHlwZU9ubHkgPSBbJ2VudW0nLCAnaW50ZXJmYWNlJywgJ3R5cGUnXS5pbmNsdWRlcyhpbmZvLmtpbmQpO1xuICBjb25zdCBpbXBvcnRLZXl3b3JkID0gaXNUeXBlT25seSA/ICdpbXBvcnQgdHlwZScgOiAnaW1wb3J0JztcbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBjb25zdCBkZWZhdWx0SW1wb3J0U3RhdGVtZW50ID0gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke3NldHRpbmdzLnBhY2thZ2VOYW1lfS8ke2luZm8ubmFtZXNwYWNlfSc7YDtcbiAgcmV0dXJuIHNldHRpbmdzLmltcG9ydFN0YXRlbWVudCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdEltcG9ydFN0YXRlbWVudCA6IHNldHRpbmdzLmltcG9ydFN0YXRlbWVudCh7IGRlZmF1bHRJbXBvcnRTdGF0ZW1lbnQsIGlzVHlwZU9ubHksIGtpbmQ6IGluZm8ua2luZCwgbmFtZTogaW5mby5uYW1lLCBuYW1lc3BhY2U6IGluZm8ubmFtZXNwYWNlIH0pO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gYXZvaWRJbmRleFNsdWcoc2x1Zzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQSBtZW1iZXIgbGl0ZXJhbGx5IG5hbWVkIGBpbmRleGAgd291bGQgd3JpdGUgYGluZGV4Lm1keGAsIGNvbGxpZGluZyB3aXRoIHRoZSB0eXBlLW92ZXJ2aWV3XG4gIC8vIGBpbmRleC5tZHhgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAob25lIHNpbGVudGx5IG92ZXJ3cml0ZXMgdGhlIG90aGVyLCA0MDQtaW5nIHRoZSBsb3NlcikuXG4gIHJldHVybiBzbHVnID09PSAnaW5kZXgnID8gJ2luZGV4LW1lbWJlcicgOiBzbHVnO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21NZW1iZXJSb3V0ZVNlZ21lbnQobmFtZU9yT3ZlcmxvYWRLZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLm1lbWJlclJvdXRlU2VnbWVudD8uKG5hbWVPck92ZXJsb2FkS2V5KTtcbn1cblxuLyoqXG4gKiBLZWVwcyBhIG5hbWUncyB0cmFpbGluZyB1bmRlcnNjb3JlcyBvbiBpdHMgc2x1Zywgc28gYGNyZWF0ZV9fYCBhbmQgYGNyZWF0ZWAgZ2V0IGEgcGFnZSBlYWNoIGluc3RlYWQgb2Ygb25lXG4gKiBzaWxlbnRseSBvdmVyd3JpdGluZyB0aGUgb3RoZXIuIEEgc2x1ZyB3aXRoIG5vdGhpbmcgZWxzZSBpbiBpdCBrZWVwcyBub25lOiBhIGZpbGUgbmFtZWQgYF8qLm1keGAgaXMgc2tpcHBlZCBieVxuICogQXN0cm8ncyBjb250ZW50IGxvYWRlci5cbiAqXG4gKiBAcGFyYW0gc2x1ZyAtIFRoZSBzbHVnLCB3aXRob3V0IHRoZSB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgaXQgd2FzIGJ1aWx0IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgc2x1ZyB3aXRoIHRoZSBuYW1lJ3MgdHJhaWxpbmcgdW5kZXJzY29yZXMuXG4gKi9cbmZ1bmN0aW9uIGtlZXBUcmFpbGluZ1VuZGVyc2NvcmVzKHNsdWc6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWcgPyBgJHtzbHVnfSR7bmFtZS5zbGljZShuYW1lLnJlcGxhY2UoL18rJC8sICcnKS5sZW5ndGgpfWAgOiBzbHVnO1xufVxuXG5mdW5jdGlvbiBzbHVnaWZ5TWVtYmVyTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB1bnF1b3RlZCA9IG5hbWUucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJyk7XG4gIGNvbnN0IGNsZWFuZWQgPSB1bnF1b3RlZFxuICAgIC5yZXBsYWNlQWxsKC9bXmEtekEtWjAtOV0vZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC8tKy9nLCAnLScpXG4gICAgLnJlcGxhY2VBbGwoL14tfC0kL2csICcnKTtcbiAgcmV0dXJuIGF2b2lkSW5kZXhTbHVnKGdldEN1c3RvbU1lbWJlclJvdXRlU2VnbWVudChuYW1lKSA/PyAoa2VlcFRyYWlsaW5nVW5kZXJzY29yZXMoY2xlYW5lZCwgdW5xdW90ZWQpIHx8ICd1bm5hbWVkJykpO1xufVxuXG5mdW5jdGlvbiBzbHVnaWZ5T3ZlcmxvYWRLZXkob3ZlcmxvYWRLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNsdWcgPSBvdmVybG9hZEtleVxuICAgIC5yZXBsYWNlQWxsKC9bXCInKCldL2csICcgJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTlcXHNdL2csICcnKVxuICAgIC50cmltKClcbiAgICAucmVwbGFjZUFsbCgvXFxzKy9nLCAnLScpO1xuICAvLyBBIG1ldGhvZCBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgIG92ZXIgdGhlIHR5cGUtb3ZlcnZpZXcgcGFnZSwgZXhhY3RseSBhcyBhIHByb3BlcnR5IHdvdWxkLlxuICByZXR1cm4gYXZvaWRJbmRleFNsdWcoZ2V0Q3VzdG9tTWVtYmVyUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KSA/PyBrZWVwVHJhaWxpbmdVbmRlcnNjb3JlcyhzbHVnLCBvdmVybG9hZEtleSkpO1xufVxuXG5jb25zdCBPR19ERVNDUklQVElPTl9NQVhfTEVOR1RIID0gMTYwO1xuXG4vKipcbiAqIFN0cmlwIG1hcmtkb3duIGZvcm1hdHRpbmcgdG8gcGxhaW4gdGV4dCBmb3IgdXNlIGluIG1ldGEgZGVzY3JpcHRpb25zXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSBwbGFpbiB0ZXh0LCBhdCBtb3N0IDE2MCBjaGFyYWN0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBNYXJrZG93bih0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBBIGJhcmUgYHtAbGluayBUYXJnZXR9YCByZWFkcyBhcyBpdHMgdGFyZ2V0LCBhcyBgcmVzb2x2ZUxpbmtzYCByZW5kZXJzIGl0OyBkcm9wcGluZyBpdCBsZWF2ZXMgYSBob2xlIGluIHRoZSBzZW50ZW5jZS5cbiAgY29uc3QgcGxhaW4gPSByZXBsYWNlUmVnRXhwTWF0Y2hlcyhcbiAgICB0ZXh0LFxuICAgIC9cXHtAbGlua1xccysoPzx0YXJnZXQ+W158fV0rPykoPzpcXHMqXFx8XFxzKig/PGRpc3BsYXk+W159XSs/KSk/XFxzKlxcfS9nLFxuICAgIChtYXRjaCkgPT4gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAnZGlzcGxheScpID8/IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0YXJnZXQnKVxuICApXG4gICAgLnJlcGxhY2VBbGwoL1xcWyg/PHRleHQ+W15cXF1dKylcXF1cXChbXildK1xcKS9nLCAnJDx0ZXh0PicpXG4gICAgLnJlcGxhY2VBbGwoL1tgKl9+XS9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpXG4gICAgLnRyaW0oKTtcblxuICBpZiAocGxhaW4ubGVuZ3RoIDw9IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gcGxhaW47XG4gIH1cblxuICAvLyBDdXQgYmFjayB0byBhIHdvcmQgYm91bmRhcnk6IGEgcmF3IHNsaWNlIGVuZHMgZGVzY3JpcHRpb25zIG1pZC13b3JkIChg4oCmIHRoZSBzdHJpbmcgbW9kdWxlIGlzIG9iYCkuXG4gIC8vIFRoYXQgZnJhZ21lbnQgaXMgd2hhdCByZWFkZXJzIHNlZSBvbiB0aGUgT0cgY2FyZCBhbmQgaW4gc2VhcmNoIHJlc3VsdHMuXG4gIGNvbnN0IGNsaXBwZWQgPSBwbGFpbi5zbGljZSgwLCBPR19ERVNDUklQVElPTl9NQVhfTEVOR1RIIC0gMSk7XG4gIGNvbnN0IGxhc3RTcGFjZUluZGV4ID0gY2xpcHBlZC5sYXN0SW5kZXhPZignICcpO1xuICBjb25zdCB0cnVuY2F0ZWQgPSBsYXN0U3BhY2VJbmRleCA+IDAgPyBjbGlwcGVkLnNsaWNlKDAsIGxhc3RTcGFjZUluZGV4KSA6IGNsaXBwZWQ7XG4gIHJldHVybiBgJHt0cnVuY2F0ZWQucmVwbGFjZSgvWyw7Oi5cXHNdKyQvLCAnJyl94oCmYDtcbn1cblxuZnVuY3Rpb24gZXNjYXBlTWR4UHJvc2VDaGFycyhjaHVuazogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNodW5rLnJlcGxhY2VBbGwoL1s8e31dL2csIChjaGFyKSA9PiBgXFxcXCR7Y2hhcn1gKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsYUFBYTtBQUN0QixTQUFTLGVBQWU7QUFReEIsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx5QkFBeUI7QUFhM0IsU0FBUyxtQkFBbUIsUUFBNEI7QUFDN0QsTUFBSSxjQUFjLElBQUksT0FBTyxJQUFJLEtBQUssT0FBTyxXQUFXLFNBQVMsR0FBRztBQUNsRSxVQUFNLGlCQUFpQixPQUFPLFdBQVcsQ0FBQztBQUMxQyxRQUFJLGdCQUFnQixLQUFLLFdBQVcsR0FBRyxLQUFLLGdCQUFnQixLQUFLLFdBQVcsR0FBSSxHQUFHO0FBQ2pGLFlBQU0saUJBQWlCLGVBQWUsS0FBSyxXQUFXLEtBQUssR0FBSTtBQUMvRCxhQUFPLEdBQUcsT0FBTyxJQUFJLElBQUksY0FBYztBQUFBLElBQ3pDO0FBQUEsRUFD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
|
|
256
|
+
//# 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+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsZUFBZTtBQVF4QixTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGtDQUFrQztBQUMzQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHlCQUF5QjtBQWEzQixTQUFTLG1CQUFtQixRQUE0QjtBQUM3RCxNQUFJLGNBQWMsSUFBSSxPQUFPLElBQUksS0FBSyxP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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.mjs';
|
|
10
11
|
/**
|
|
@@ -74,7 +74,9 @@ import {
|
|
|
74
74
|
computeCacheHash,
|
|
75
75
|
computeNamespace,
|
|
76
76
|
findEntryFiles,
|
|
77
|
+
keepPublicApi,
|
|
77
78
|
processSourceFile,
|
|
79
|
+
readPublicApiBarrel,
|
|
78
80
|
registerGenericTypeParams
|
|
79
81
|
} from "./api-doc-source-processing.mjs";
|
|
80
82
|
import { resolveInheritedMembers } from "./api-doc-type-merging.mjs";
|
|
@@ -83,10 +85,13 @@ async function generateApiDocs(options) {
|
|
|
83
85
|
const { rootDirectory, settings, sourceDirectory } = options;
|
|
84
86
|
configureApiDocs(settings);
|
|
85
87
|
loadExternalTypeMaps(rootDirectory);
|
|
86
|
-
const
|
|
88
|
+
const { publicApiEntry } = settings;
|
|
89
|
+
const barrel = publicApiEntry === void 0 ? void 0 : readPublicApiBarrel(publicApiEntry, sourceDirectory);
|
|
90
|
+
const entryFiles = barrel === void 0 ? findEntryFiles(sourceDirectory, settings.excludedDirectories) : [...barrel.files];
|
|
87
91
|
console.warn(`Found ${String(entryFiles.length)} entry source files`);
|
|
88
92
|
const cacheFile = join(settings.outputDirectory, CACHE_FILE_NAME);
|
|
89
|
-
const
|
|
93
|
+
const hashedFiles = publicApiEntry === void 0 ? entryFiles : [...entryFiles, publicApiEntry];
|
|
94
|
+
const currentHash = computeCacheHash(hashedFiles, dirname(fileURLToPath(import.meta.url)));
|
|
90
95
|
if (existsSync(cacheFile) && existsSync(settings.sidebarFile) && readFileSync(cacheFile, "utf-8").trim() === currentHash) {
|
|
91
96
|
console.warn("Source files and generator unchanged \u2014 skipping generation.");
|
|
92
97
|
return;
|
|
@@ -111,6 +116,9 @@ async function generateApiDocs(options) {
|
|
|
111
116
|
collectVariables(src, types, namespace);
|
|
112
117
|
}
|
|
113
118
|
resolveInheritedMembers(types);
|
|
119
|
+
if (barrel !== void 0) {
|
|
120
|
+
keepPublicApi(types, barrel);
|
|
121
|
+
}
|
|
114
122
|
for (const info of types.values()) {
|
|
115
123
|
info.properties.sort((a, b) => a.name.localeCompare(b.name));
|
|
116
124
|
info.methods.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -136,4 +144,4 @@ async function generateApiDocs(options) {
|
|
|
136
144
|
export {
|
|
137
145
|
generateApiDocs
|
|
138
146
|
};
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGguXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJtLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICBub3JtYWxpemVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAndHMtbW9ycGgnO1xuXG5pbXBvcnQgdHlwZSB7IEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFnZUNvbnRlbnQsXG4gIFR5cGVJbmZvXG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7IGV4dHJhY3RGaWxlT3ZlcnZpZXcgfSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMsXG4gIHJlZ2lzdGVyTWVtYmVyUGFnZXMsXG4gIHJlZ2lzdGVyUm91dGVTZWdtZW50c1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgY2xlYXJQYWNrYWdlRGVjbGFyYXRpb25zIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuaW1wb3J0IHtcbiAgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUsXG4gIGdlbmVyYXRlTWVtYmVyUGFnZXMsXG4gIGdlbmVyYXRlTmFtZXNwYWNlSW5kZXhQYWdlcyxcbiAgZ2VuZXJhdGVPdmVydmlld1BhZ2UsXG4gIGdlbmVyYXRlU2lkZWJhckpzb25cbn0gZnJvbSAnLi9hcGktZG9jLXBhZ2UtZ2VuZXJhdGlvbi50cyc7XG5pbXBvcnQgeyBjb25maWd1cmVBcGlEb2NzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGdW5jdGlvbnMsXG4gIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zLFxuICBjb2xsZWN0VmFyaWFibGVzLFxuICBjb21wdXRlQ2FjaGVIYXNoLFxuICBjb21wdXRlTmFtZXNwYWNlLFxuICBmaW5kRW50cnlGaWxlcyxcbiAgcHJvY2Vzc1NvdXJjZUZpbGUsXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXNcbn0gZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmltcG9ydCB7IHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzIH0gZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlQXBpRG9jc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBcGlEb2NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHJvb3Q6IHRoZSBmb2xkZXIgaG9sZGluZyBgdHNjb25maWcuanNvbmAgYW5kIGBub2RlX21vZHVsZXNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgZXZlcnkgcGFnZSBhbmQgbGluayBpcyByZW5kZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IEFwaURvY1NldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgYXJlIGRvY3VtZW50ZWQsIG5vcm1hbGx5IGA8cm9vdD4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG5jb25zdCBDQUNIRV9GSUxFX05BTUUgPSAnLmNhY2hlLWhhc2gnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQVBJIHJlZmVyZW5jZSBwYWdlcyBhbmQgdGhlIHNpZGViYXIuXG4gKlxuICogU2tpcHMgdGhlIHdvcmsgd2hlbiBuZWl0aGVyIHRoZSBzb3VyY2VzLCB0aGUgc2V0dGluZ3Mgbm9yIHRoZSBnZW5lcmF0b3IgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBydW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQXBpRG9jcyhvcHRpb25zOiBHZW5lcmF0ZUFwaURvY3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyByb290RGlyZWN0b3J5LCBzZXR0aW5ncywgc291cmNlRGlyZWN0b3J5IH0gPSBvcHRpb25zO1xuICBjb25maWd1cmVBcGlEb2NzKHNldHRpbmdzKTtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMocm9vdERpcmVjdG9yeSk7XG5cbiAgY29uc3QgZW50cnlGaWxlcyA9IGZpbmRFbnRyeUZpbGVzKHNvdXJjZURpcmVjdG9yeSwgc2V0dGluZ3MuZXhjbHVkZWREaXJlY3Rvcmllcyk7XG4gIGNvbnNvbGUud2FybihgRm91bmQgJHtTdHJpbmcoZW50cnlGaWxlcy5sZW5ndGgpfSBlbnRyeSBzb3VyY2UgZmlsZXNgKTtcblxuICBjb25zdCBjYWNoZUZpbGUgPSBqb2luKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgQ0FDSEVfRklMRV9OQU1FKTtcbiAgY29uc3QgY3VycmVudEhhc2ggPSBjb21wdXRlQ2FjaGVIYXNoKGVudHJ5RmlsZXMsIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSk7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlRmlsZSkgJiYgZXhpc3RzU3luYyhzZXR0aW5ncy5zaWRlYmFyRmlsZSkgJiYgcmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykudHJpbSgpID09PSBjdXJyZW50SGFzaCkge1xuICAgIGNvbnNvbGUud2FybignU291cmNlIGZpbGVzIGFuZCBnZW5lcmF0b3IgdW5jaGFuZ2VkIOKAlCBza2lwcGluZyBnZW5lcmF0aW9uLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIExvYWQgdmlhIHRoZSByZXBvJ3MgdHNjb25maWcgc28gaW5mZXJyZWQgdHlwZXMgcmVzb2x2ZS5cbiAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcbiAgICBza2lwQWRkaW5nRmlsZXNGcm9tVHNDb25maWc6IHRydWUsXG4gICAgdHNDb25maWdGaWxlUGF0aDogam9pbihyb290RGlyZWN0b3J5LCAndHNjb25maWcuanNvbicpXG4gIH0pO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKGVudHJ5RmlsZXMpO1xuXG4gIGNvbnN0IHR5cGVzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvPigpO1xuICBjb25zdCBtb2R1bGVPdmVydmlld3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjbGVhclBhY2thZ2VEZWNsYXJhdGlvbnMoKTtcblxuICBmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2VGaWxlcykge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbXB1dGVOYW1lc3BhY2Uoc291cmNlRGlyZWN0b3J5LCBub3JtYWxpemUoc3JjLmdldEZpbGVQYXRoKCkpKTtcbiAgICBjb25zdCBvdmVydmlldyA9IGV4dHJhY3RGaWxlT3ZlcnZpZXcoc3JjKTtcbiAgICBpZiAob3ZlcnZpZXcpIHtcbiAgICAgIG1vZHVsZU92ZXJ2aWV3cy5zZXQobmFtZXNwYWNlLCBvdmVydmlldyk7XG4gICAgfVxuICAgIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYyk7XG4gICAgcHJvY2Vzc1NvdXJjZUZpbGUoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0RnVuY3Rpb25zKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gICAgY29sbGVjdFZhcmlhYmxlcyhzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgcmVzb2x2ZUluaGVyaXRlZE1lbWJlcnModHlwZXMpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGluZm8ucHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICBpbmZvLm1ldGhvZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zKHR5cGVzKTtcbiAgcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzKTtcbiAgcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlcyk7XG5cbiAgYXdhaXQgcm0oc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IG1rZGlyKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKHR5cGVzLCB0eXBlcywgbW9kdWxlT3ZlcnZpZXdzKTtcblxuICAvLyBQYXNzIDE6IGdlbmVyYXRlIGFsbCBwYWdlcyB3aXRob3V0IGJhY2tsaW5rcywgY29sbGVjdCBjb250ZW50IChrZXllZCBieSBxdWFsaWZpZWQgaWQpXG4gIGNvbnN0IHBhZ2VDb250ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlQ29udGVudD4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBpbmZvXSBvZiB0eXBlcykge1xuICAgIHBhZ2VDb250ZW50cy5zZXQoa2V5LCBhd2FpdCBnZW5lcmF0ZU92ZXJ2aWV3UGFnZShpbmZvLm5hbWUsIGluZm8sIHR5cGVzKSk7XG4gICAgaWYgKGluZm8ua2luZCA9PT0gJ2NsYXNzJyB8fCBpbmZvLmtpbmQgPT09ICdpbnRlcmZhY2UnKSB7XG4gICAgICBhd2FpdCBnZW5lcmF0ZU1lbWJlclBhZ2VzKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhc3MgMjogc2NhbiBjb250ZW50IGZvciBsaW5rcywgYXBwZW5kIGJhY2tsaW5rcywgd3JpdGUgZmlsZXNcbiAgYXdhaXQgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUocGFnZUNvbnRlbnRzLCB0eXBlcyk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVTaWRlYmFySnNvbih0eXBlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShjYWNoZUZpbGUsIGN1cnJlbnRIYXNoLCAndXRmLTgnKTtcblxuICBjb25zb2xlLndhcm4oYEdlbmVyYXRlZCBkb2NzIGZvciAke1N0cmluZyh0eXBlcy5zaXplKX0gdHlwZXMgYWNyb3NzICR7U3RyaW5nKG1vZHVsZU92ZXJ2aWV3cy5zaXplKX0gZG9jdW1lbnRlZCBtb2R1bGVzYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGVBQWU7QUFReEIsU0FBUywyQkFBMkI7QUFDcEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxnQ0FBZ0M7QUFDekM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHdCQUF3QjtBQUNqQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsK0JBQStCO0FBc0J4QyxNQUFNLGtCQUFrQjtBQVN4QixlQUFzQixnQkFBZ0IsU0FBK0M7QUFDbkYsUUFBTSxFQUFFLGVBQWUsVUFBVSxnQkFBZ0IsSUFBSTtBQUNyRCxtQkFBaUIsUUFBUTtBQUN6Qix1QkFBcUIsYUFBYTtBQUVsQyxRQUFNLGFBQWEsZUFBZSxpQkFBaUIsU0FBUyxtQkFBbUI7QUFDL0UsVUFBUSxLQUFLLFNBQVMsT0FBTyxXQUFXLE1BQU0sQ0FBQyxxQkFBcUI7QUFFcEUsUUFBTSxZQUFZLEtBQUssU0FBUyxpQkFBaUIsZUFBZTtBQUNoRSxRQUFNLGNBQWMsaUJBQWlCLFlBQVksUUFBUSxjQUFjLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDeEYsTUFBSSxXQUFXLFNBQVMsS0FBSyxXQUFXLFNBQVMsV0FBVyxLQUFLLGFBQWEsV0FBVyxPQUFPLEVBQUUsS0FBSyxNQUFNLGFBQWE7QUFDeEgsWUFBUSxLQUFLLGtFQUE2RDtBQUMxRTtBQUFBLEVBQ0Y7QUFHQSxRQUFNLFVBQVUsSUFBSSxRQUFRO0FBQUEsSUFDMUIsNkJBQTZCO0FBQUEsSUFDN0Isa0JBQWtCLEtBQUssZUFBZSxlQUFlO0FBQUEsRUFDdkQsQ0FBQztBQUNELFFBQU0sY0FBYyxRQUFRLHNCQUFzQixVQUFVO0FBRTVELFFBQU0sUUFBUSxvQkFBSSxJQUFzQjtBQUN4QyxRQUFNLGtCQUFrQixvQkFBSSxJQUFvQjtBQUNoRCwyQkFBeUI7QUFFekIsYUFBVyxPQUFPLGFBQWE7QUFDN0IsVUFBTSxZQUFZLGlCQUFpQixpQkFBaUIsVUFBVSxJQUFJLFlBQVksQ0FBQyxDQUFDO0FBQ2hGLFVBQU0sV0FBVyxvQkFBb0IsR0FBRztBQUN4QyxRQUFJLFVBQVU7QUFDWixzQkFBZ0IsSUFBSSxXQUFXLFFBQVE7QUFBQSxJQUN6QztBQUNBLCtCQUEyQixHQUFHO0FBQzlCLHNCQUFrQixLQUFLLE9BQU8sU0FBUztBQUN2QyxxQkFBaUIsS0FBSyxPQUFPLFNBQVM7QUFDdEMscUJBQWlCLEtBQUssT0FBTyxTQUFTO0FBQUEsRUFDeEM7QUFFQSwwQkFBd0IsS0FBSztBQUU3QixhQUFXLFFBQVEsTUFBTSxPQUFPLEdBQUc7QUFDakMsU0FBSyxXQUFXLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFDM0QsU0FBSyxRQUFRLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFBQSxFQUMxRDtBQUVBLDRCQUEwQixLQUFLO0FBQy9CLHdCQUFzQixLQUFLO0FBQzNCLHNCQUFvQixLQUFLO0FBRXpCLFFBQU0sR0FBRyxTQUFTLGlCQUFpQixFQUFFLE9BQU8sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUNuRSxRQUFNLE1BQU0sU0FBUyxpQkFBaUIsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUV6RCxRQUFNLDRCQUE0QixPQUFPLE9BQU8sZUFBZTtBQUcvRCxRQUFNLGVBQWUsb0JBQUksSUFBeUI7QUFDbEQsYUFBVyxDQUFDLEtBQUssSUFBSSxLQUFLLE9BQU87QUFDL0IsaUJBQWEsSUFBSSxLQUFLLE1BQU0scUJBQXFCLEtBQUssTUFBTSxNQUFNLEtBQUssQ0FBQztBQUN4RSxRQUFJLEtBQUssU0FBUyxXQUFXLEtBQUssU0FBUyxhQUFhO0FBQ3RELFlBQU0sb0JBQW9CLEtBQUssTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUNsRDtBQUFBLEVBQ0Y7QUFHQSxRQUFNLHdCQUF3QixjQUFjLEtBQUs7QUFFakQsUUFBTSxvQkFBb0IsS0FBSztBQUMvQixRQUFNLFVBQVUsV0FBVyxhQUFhLE9BQU87QUFFL0MsVUFBUSxLQUFLLHNCQUFzQixPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixPQUFPLGdCQUFnQixJQUFJLENBQUMscUJBQXFCO0FBQ3pIOyIsIm5hbWVzIjpbXX0=
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGgsIHVubGVzc1xuICogdGhlIHBhY2thZ2UgcHVibGlzaGVzIGl0cyBBUEkgZnJvbSBvbmUgYmFycmVsIChgcHVibGljQXBpRW50cnlgKSwgd2hvc2UgcmUtZXhwb3J0cyBhcmUgdGhlbiBhbGwgdGhhdCBpcyBkb2N1bWVudGVkLlxuICovXG5cbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJ3RzLW1vcnBoJztcblxuaW1wb3J0IHR5cGUgeyBBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhZ2VDb250ZW50LFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBleHRyYWN0RmlsZU92ZXJ2aWV3IH0gZnJvbSAnLi9hcGktZG9jLWpzZG9jLnRzJztcbmltcG9ydCB7XG4gIGxvYWRFeHRlcm5hbFR5cGVNYXBzLFxuICByZWdpc3Rlck1lbWJlclBhZ2VzLFxuICByZWdpc3RlclJvdXRlU2VnbWVudHNcbn0gZnJvbSAnLi9hcGktZG9jLWxpbmstcmVuZGVyaW5nLnRzJztcbmltcG9ydCB7IGNsZWFyUGFja2FnZURlY2xhcmF0aW9ucyB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7XG4gIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlLFxuICBnZW5lcmF0ZU1lbWJlclBhZ2VzLFxuICBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXMsXG4gIGdlbmVyYXRlT3ZlcnZpZXdQYWdlLFxuICBnZW5lcmF0ZVNpZGViYXJKc29uXG59IGZyb20gJy4vYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMnO1xuaW1wb3J0IHsgY29uZmlndXJlQXBpRG9jcyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBjb2xsZWN0RnVuY3Rpb25zLFxuICBjb2xsZWN0UGFja2FnZURlY2xhcmF0aW9ucyxcbiAgY29sbGVjdFZhcmlhYmxlcyxcbiAgY29tcHV0ZUNhY2hlSGFzaCxcbiAgY29tcHV0ZU5hbWVzcGFjZSxcbiAgZmluZEVudHJ5RmlsZXMsXG4gIGtlZXBQdWJsaWNBcGksXG4gIHByb2Nlc3NTb3VyY2VGaWxlLFxuICByZWFkUHVibGljQXBpQmFycmVsLFxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zXG59IGZyb20gJy4vYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyc7XG5pbXBvcnQgeyByZXNvbHZlSW5oZXJpdGVkTWVtYmVycyB9IGZyb20gJy4vYXBpLWRvYy10eXBlLW1lcmdpbmcudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUFwaURvY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQXBpRG9jc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290OiB0aGUgZm9sZGVyIGhvbGRpbmcgYHRzY29uZmlnLmpzb25gIGFuZCBgbm9kZV9tb2R1bGVzYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGV2ZXJ5IHBhZ2UgYW5kIGxpbmsgaXMgcmVuZGVyZWQgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzOiBBcGlEb2NTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBtb2R1bGVzIGFyZSBkb2N1bWVudGVkLCBub3JtYWxseSBgPHJvb3Q+L3NyY2AuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfRklMRV9OQU1FID0gJy5jYWNoZS1oYXNoJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIEFQSSByZWZlcmVuY2UgcGFnZXMgYW5kIHRoZSBzaWRlYmFyLlxuICpcbiAqIFNraXBzIHRoZSB3b3JrIHdoZW4gbmVpdGhlciB0aGUgc291cmNlcywgdGhlIHNldHRpbmdzIG5vciB0aGUgZ2VuZXJhdG9yIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcnVuLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFwaURvY3Mob3B0aW9uczogR2VuZXJhdGVBcGlEb2NzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcm9vdERpcmVjdG9yeSwgc2V0dGluZ3MsIHNvdXJjZURpcmVjdG9yeSB9ID0gb3B0aW9ucztcbiAgY29uZmlndXJlQXBpRG9jcyhzZXR0aW5ncyk7XG4gIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3RvcnkpO1xuXG4gIGNvbnN0IHsgcHVibGljQXBpRW50cnkgfSA9IHNldHRpbmdzO1xuICBjb25zdCBiYXJyZWwgPSBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVhZFB1YmxpY0FwaUJhcnJlbChwdWJsaWNBcGlFbnRyeSwgc291cmNlRGlyZWN0b3J5KTtcbiAgY29uc3QgZW50cnlGaWxlcyA9IGJhcnJlbCA9PT0gdW5kZWZpbmVkID8gZmluZEVudHJ5RmlsZXMoc291cmNlRGlyZWN0b3J5LCBzZXR0aW5ncy5leGNsdWRlZERpcmVjdG9yaWVzKSA6IFsuLi5iYXJyZWwuZmlsZXNdO1xuICBjb25zb2xlLndhcm4oYEZvdW5kICR7U3RyaW5nKGVudHJ5RmlsZXMubGVuZ3RoKX0gZW50cnkgc291cmNlIGZpbGVzYCk7XG5cbiAgY29uc3QgY2FjaGVGaWxlID0gam9pbihzZXR0aW5ncy5vdXRwdXREaXJlY3RvcnksIENBQ0hFX0ZJTEVfTkFNRSk7XG4gIC8vIFRoZSBiYXJyZWwgZGVjaWRlcyB3aGljaCBuYW1lcyBhcmUgZG9jdW1lbnRlZCwgc28gYSByZS1leHBvcnQgYWRkZWQgdGhlcmUgY2hhbmdlcyB0aGUgb3V0cHV0IGJ5IGl0c2VsZi5cbiAgY29uc3QgaGFzaGVkRmlsZXMgPSBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gZW50cnlGaWxlcyA6IFsuLi5lbnRyeUZpbGVzLCBwdWJsaWNBcGlFbnRyeV07XG4gIGNvbnN0IGN1cnJlbnRIYXNoID0gY29tcHV0ZUNhY2hlSGFzaChoYXNoZWRGaWxlcywgZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpKTtcbiAgaWYgKGV4aXN0c1N5bmMoY2FjaGVGaWxlKSAmJiBleGlzdHNTeW5jKHNldHRpbmdzLnNpZGViYXJGaWxlKSAmJiByZWFkRmlsZVN5bmMoY2FjaGVGaWxlLCAndXRmLTgnKS50cmltKCkgPT09IGN1cnJlbnRIYXNoKSB7XG4gICAgY29uc29sZS53YXJuKCdTb3VyY2UgZmlsZXMgYW5kIGdlbmVyYXRvciB1bmNoYW5nZWQg4oCUIHNraXBwaW5nIGdlbmVyYXRpb24uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTG9hZCB2aWEgdGhlIHJlcG8ncyB0c2NvbmZpZyBzbyBpbmZlcnJlZCB0eXBlcyByZXNvbHZlLlxuICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3Qoe1xuICAgIHNraXBBZGRpbmdGaWxlc0Zyb21Uc0NvbmZpZzogdHJ1ZSxcbiAgICB0c0NvbmZpZ0ZpbGVQYXRoOiBqb2luKHJvb3REaXJlY3RvcnksICd0c2NvbmZpZy5qc29uJylcbiAgfSk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID0gcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMoZW50cnlGaWxlcyk7XG5cbiAgY29uc3QgdHlwZXMgPSBuZXcgTWFwPHN0cmluZywgVHlwZUluZm8+KCk7XG4gIGNvbnN0IG1vZHVsZU92ZXJ2aWV3cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNsZWFyUGFja2FnZURlY2xhcmF0aW9ucygpO1xuXG4gIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gY29tcHV0ZU5hbWVzcGFjZShzb3VyY2VEaXJlY3RvcnksIG5vcm1hbGl6ZShzcmMuZ2V0RmlsZVBhdGgoKSkpO1xuICAgIGNvbnN0IG92ZXJ2aWV3ID0gZXh0cmFjdEZpbGVPdmVydmlldyhzcmMpO1xuICAgIGlmIChvdmVydmlldykge1xuICAgICAgbW9kdWxlT3ZlcnZpZXdzLnNldChuYW1lc3BhY2UsIG92ZXJ2aWV3KTtcbiAgICB9XG4gICAgY29sbGVjdFBhY2thZ2VEZWNsYXJhdGlvbnMoc3JjKTtcbiAgICBwcm9jZXNzU291cmNlRmlsZShzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIGNvbGxlY3RGdW5jdGlvbnMoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0VmFyaWFibGVzKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gIH1cblxuICByZXNvbHZlSW5oZXJpdGVkTWVtYmVycyh0eXBlcyk7XG4gIC8vIE9ubHkgYWZ0ZXIgdGhlIGluaGVyaXRhbmNlIGlzIHJlc29sdmVkLCBzbyBhIHB1YmxpYyBjbGFzcyBrZWVwcyB0aGUgbWVtYmVycyBvZiBhbiBpbnRlcm5hbCBiYXNlIGNsYXNzLlxuICBpZiAoYmFycmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICBrZWVwUHVibGljQXBpKHR5cGVzLCBiYXJyZWwpO1xuICB9XG5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgaW5mby5wcm9wZXJ0aWVzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgIGluZm8ubWV0aG9kcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXModHlwZXMpO1xuICByZWdpc3RlclJvdXRlU2VnbWVudHModHlwZXMpO1xuICByZWdpc3Rlck1lbWJlclBhZ2VzKHR5cGVzKTtcblxuICBhd2FpdCBybShzZXR0aW5ncy5vdXRwdXREaXJlY3RvcnksIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXModHlwZXMsIHR5cGVzLCBtb2R1bGVPdmVydmlld3MpO1xuXG4gIC8vIFBhc3MgMTogZ2VuZXJhdGUgYWxsIHBhZ2VzIHdpdGhvdXQgYmFja2xpbmtzLCBjb2xsZWN0IGNvbnRlbnQgKGtleWVkIGJ5IHF1YWxpZmllZCBpZClcbiAgY29uc3QgcGFnZUNvbnRlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PigpO1xuICBmb3IgKGNvbnN0IFtrZXksIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgcGFnZUNvbnRlbnRzLnNldChrZXksIGF3YWl0IGdlbmVyYXRlT3ZlcnZpZXdQYWdlKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpKTtcbiAgICBpZiAoaW5mby5raW5kID09PSAnY2xhc3MnIHx8IGluZm8ua2luZCA9PT0gJ2ludGVyZmFjZScpIHtcbiAgICAgIGF3YWl0IGdlbmVyYXRlTWVtYmVyUGFnZXMoaW5mby5uYW1lLCBpbmZvLCB0eXBlcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFzcyAyOiBzY2FuIGNvbnRlbnQgZm9yIGxpbmtzLCBhcHBlbmQgYmFja2xpbmtzLCB3cml0ZSBmaWxlc1xuICBhd2FpdCBhcHBlbmRCYWNrbGlua3NBbmRXcml0ZShwYWdlQ29udGVudHMsIHR5cGVzKTtcblxuICBhd2FpdCBnZW5lcmF0ZVNpZGViYXJKc29uKHR5cGVzKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGNhY2hlRmlsZSwgY3VycmVudEhhc2gsICd1dGYtOCcpO1xuXG4gIGNvbnNvbGUud2FybihgR2VuZXJhdGVkIGRvY3MgZm9yICR7U3RyaW5nKHR5cGVzLnNpemUpfSB0eXBlcyBhY3Jvc3MgJHtTdHJpbmcobW9kdWxlT3ZlcnZpZXdzLnNpemUpfSBkb2N1bWVudGVkIG1vZHVsZXNgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsZUFBZTtBQVF4QixTQUFTLDJCQUEyQjtBQUNwQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtB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
|
|
@@ -25,6 +25,8 @@ import {
|
|
|
25
25
|
const EXTERNAL_LINK_TIMEOUT_IN_MILLISECONDS = 1e4;
|
|
26
26
|
const EXTERNAL_LINK_CONCURRENCY = 20;
|
|
27
27
|
const HTML_FILE_EXTENSION = ".html";
|
|
28
|
+
const NPM_PACKAGE_URL_PREFIX = "https://www.npmjs.com/package/";
|
|
29
|
+
const NPM_REGISTRY_URL_PREFIX = "https://registry.npmjs.org/";
|
|
28
30
|
const FALLBACK_PAGE_RELATIVE_PATH = "404.html";
|
|
29
31
|
async function assertDocsLinksResolve(options) {
|
|
30
32
|
const outputDirectory = resolve(options.outputDirectory).replaceAll("\\", "/");
|
|
@@ -76,7 +78,7 @@ async function fetchUrlStatus(url) {
|
|
|
76
78
|
controller.abort();
|
|
77
79
|
}, EXTERNAL_LINK_TIMEOUT_IN_MILLISECONDS);
|
|
78
80
|
try {
|
|
79
|
-
const response = await fetch(url, { signal: controller.signal });
|
|
81
|
+
const response = await fetch(toCheckableUrl(url), { signal: controller.signal });
|
|
80
82
|
await response.body?.cancel();
|
|
81
83
|
return {
|
|
82
84
|
retryAfterInMilliseconds: parseRetryAfterInMilliseconds(response.headers.get("retry-after"), Date.now()),
|
|
@@ -111,7 +113,10 @@ async function readPages(outputRootPath, allFiles) {
|
|
|
111
113
|
}
|
|
112
114
|
return pages;
|
|
113
115
|
}
|
|
116
|
+
function toCheckableUrl(url) {
|
|
117
|
+
return url.startsWith(NPM_PACKAGE_URL_PREFIX) ? NPM_REGISTRY_URL_PREFIX + url.slice(NPM_PACKAGE_URL_PREFIX.length) : url;
|
|
118
|
+
}
|
|
114
119
|
export {
|
|
115
120
|
assertDocsLinksResolve
|
|
116
121
|
};
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9kb2NzLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGVzIHRoZSBsaW5rcyBlbWl0dGVkIGJ5IGEgYnVpbHQgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICpcbiAqIEludGVybmFsIGxpbmtzIGFyZSByZXNvbHZlZCBvZmZsaW5lIGFnYWluc3QgdGhlIGJ1aWxkIG91dHB1dDsgZXh0ZXJuYWwgbGlua3MgYXJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLFxuICogZGVkdXBsaWNhdGVkIHNvIGVhY2ggdW5pcXVlIFVSTCBpcyBmZXRjaGVkIGF0IG1vc3Qgb25jZS4gU2VlIHtAbGluayAuL2xpbmstY2hlY2sudHN9IGZvciB0aGUgZGVjaXNpb24gbG9naWMuXG4gKlxuICogSXQgYWxzbyBmYWlscyBvbiBhIEdpdEh1YiBhbGVydCB0aGF0IHJlYWNoZWQgYSBwYWdlIGFzIGEgcGxhaW4gYmxvY2txdW90ZSAoc2VlIHtAbGluayAuL3VucmVuZGVyZWQtYWxlcnRzLnRzfSksXG4gKiBzaW5jZSBub3RoaW5nIGVsc2Ugbm90aWNlcyB3aGVuIHRoZSBjb252ZXJzaW9uIHN0b3BzLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRG9jdW1lbnRhdGlvblBhZ2UsXG4gIEV4dGVybmFsTGlua1Byb2JlUmVzdWx0LFxuICBMaW5rQ2hlY2tGaWxlU3lzdGVtXG59IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzLFxuICBjb2xsZWN0QnJva2VuTGlua3MsXG4gIGNvbGxlY3RFeHRlcm5hbFRhcmdldHMsXG4gIGV4dHJhY3RJZHMsXG4gIGZvcm1hdEJyb2tlbkxpbmtzLFxuICBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTLFxuICBwYXJzZVJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyxcbiAgcmVzb2x2ZVdpdGhpblJvb3Rcbn0gZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzLFxuICBmb3JtYXRVbnJlbmRlcmVkQWxlcnRzXG59IGZyb20gJy4vdW5yZW5kZXJlZC1hbGVydHMudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhc3NlcnREb2NzTGlua3NSZXNvbHZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBub3JtYWxseSBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20sIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgZS5nLiBgaHR0cHM6Ly9tbmFvdW1vdi5kZXYvdHlwZXNjcmlwdC1saWIvYC5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVCYXNlVXJsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZID0gMjA7XG5jb25zdCBIVE1MX0ZJTEVfRVhURU5TSU9OID0gJy5odG1sJztcblxuLy8gVGhlIGhvc3Qgc2VydmVzIHRoaXMgcGFnZSBhcyB0aGUgZmFsbGJhY2sgZm9yIGFueSBtaXNzaW5nIHBhdGggKHdpdGggYSA0MDQgc3RhdHVzKSwgc28gaXQgaXMgbm90IGFcbi8vIHJlYWwgbmF2aWdhYmxlIHJvdXRlOiBTdGFybGlnaHQgZ2l2ZXMgaXQgYSBzZWxmLWByZWw9XCJjYW5vbmljYWxcImAgb2YgYC80MDQvYCB0aGF0IGluaGVyZW50bHkgY2Fubm90XG4vLyByZXNvbHZlLCBhbmQgaXRzIGJvZHkgbGlua3MgKG5hdiwgbG9nbykgYXJlIGlkZW50aWNhbCB0byBldmVyeSByZWFsIHBhZ2Ugd2UgYWxyZWFkeSB2YWxpZGF0ZS5cbmNvbnN0IEZBTExCQUNLX1BBR0VfUkVMQVRJVkVfUEFUSCA9ICc0MDQuaHRtbCc7XG5cbmludGVyZmFjZSBDcmVhdGVGaWxlU3lzdGVtUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWxsRmlsZXM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBvdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFnZXM6IERvY3VtZW50YXRpb25QYWdlW107XG59XG5cbi8qKlxuICogQ2hlY2tzIGV2ZXJ5IGxpbmsgb2YgdGhlIGJ1aWx0IHNpdGUsIGFuZCB0aGF0IGV2ZXJ5IEdpdEh1YiBhbGVydCByZW5kZXJlZCBhcyBhbiBhc2lkZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zLlxuICogQHRocm93cyBJZiBhbiBhbGVydCByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUsIG9yIGEgbGluayBkb2VzIG5vdCByZXNvbHZlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0RG9jc0xpbmtzUmVzb2x2ZShvcHRpb25zOiBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG91dHB1dERpcmVjdG9yeSA9IHJlc29sdmUob3B0aW9ucy5vdXRwdXREaXJlY3RvcnkpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBjb25zdCBhbGxGaWxlcyA9IGF3YWl0IGdldEFsbEZpbGVzKG91dHB1dERpcmVjdG9yeSk7XG4gIGNvbnN0IHBhZ2VzID0gYXdhaXQgcmVhZFBhZ2VzKG91dHB1dERpcmVjdG9yeSwgYWxsRmlsZXMpO1xuXG4gIC8vIE9mZmxpbmUgYW5kIGluc3RhbnQsIHNvIGl0IHJ1bnMgYmVmb3JlIHRoZSBuZXR3b3JrIGhhbGYgYW5kIGZhaWxzIGZpcnN0LlxuICBjb25zdCB1bnJlbmRlcmVkQWxlcnRzID0gY29sbGVjdFVucmVuZGVyZWRBbGVydHMocGFnZXMpO1xuICBpZiAodW5yZW5kZXJlZEFsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldGVjdGVkICR7U3RyaW5nKHVucmVuZGVyZWRBbGVydHMubGVuZ3RoKX0gR2l0SHViIGFsZXJ0KHMpIHJlbmRlcmVkIGFzIGEgcGxhaW4gYmxvY2txdW90ZSBpbnN0ZWFkIG9mIGFuIGFzaWRlOlxcbiR7Zm9ybWF0VW5yZW5kZXJlZEFsZXJ0cyh1bnJlbmRlcmVkQWxlcnRzKX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGludGVybmFsQnJva2VuTGlua3MgPSBjb2xsZWN0QnJva2VuTGlua3MocGFnZXMsIGNyZWF0ZUZpbGVTeXN0ZW0oeyBhbGxGaWxlcywgb3V0cHV0RGlyZWN0b3J5LCBwYWdlcyB9KSwgb3B0aW9ucy5zaXRlQmFzZVVybCk7XG5cbiAgY29uc3QgZXh0ZXJuYWxUYXJnZXRzID0gY29sbGVjdEV4dGVybmFsVGFyZ2V0cyhwYWdlcywgb3B0aW9ucy5zaXRlQmFzZVVybCk7XG4gIGNvbnN0IGV4dGVybmFsQnJva2VuTGlua3MgPSBhd2FpdCBjb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rcyhleHRlcm5hbFRhcmdldHMsIGZldGNoVXJsU3RhdHVzLCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZKTtcblxuICBjb25zdCBicm9rZW5MaW5rcyA9IFsuLi5pbnRlcm5hbEJyb2tlbkxpbmtzLCAuLi5leHRlcm5hbEJyb2tlbkxpbmtzXTtcbiAgaWYgKGJyb2tlbkxpbmtzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERldGVjdGVkICR7U3RyaW5nKGJyb2tlbkxpbmtzLmxlbmd0aCl9IGJyb2tlbiBkb2N1bWVudGF0aW9uIGxpbmsocyk6XFxuJHtmb3JtYXRCcm9rZW5MaW5rcyhicm9rZW5MaW5rcyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5c3RlbShwYXJhbXM6IENyZWF0ZUZpbGVTeXN0ZW1QYXJhbXMpOiBMaW5rQ2hlY2tGaWxlU3lzdGVtIHtcbiAgY29uc3QgeyBhbGxGaWxlcywgb3V0cHV0RGlyZWN0b3J5LCBwYWdlcyB9ID0gcGFyYW1zO1xuICBjb25zdCBodG1sQnlSZWxhdGl2ZVBhdGggPSBuZXcgTWFwKHBhZ2VzLm1hcCgocGFnZSkgPT4gW3BhZ2UucmVsYXRpdmVQYXRoLCBwYWdlLmh0bWxdKSk7XG4gIGNvbnN0IGlkc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gIHJldHVybiB7XG4gICAgcmVhZElkczogKHBhZ2VLZXkpOiBTZXQ8c3RyaW5nPiA9PiB7XG4gICAgICBsZXQgaWRzID0gaWRzQ2FjaGUuZ2V0KHBhZ2VLZXkpO1xuICAgICAgaWYgKGlkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBodG1sQnlSZWxhdGl2ZVBhdGguZ2V0KHBhZ2VLZXkpO1xuICAgICAgICBpZHMgPSBodG1sID09PSB1bmRlZmluZWQgPyBuZXcgU2V0PHN0cmluZz4oKSA6IGV4dHJhY3RJZHMoaHRtbCk7XG4gICAgICAgIGlkc0NhY2hlLnNldChwYWdlS2V5LCBpZHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0sXG4gICAgcmVzb2x2ZUV4aXN0aW5nUGFnZTogKG91dHB1dFJlbGF0aXZlUGF0aCk6IG51bGwgfCBzdHJpbmcgPT4ge1xuICAgICAgaWYgKHJlc29sdmVXaXRoaW5Sb290KG91dHB1dERpcmVjdG9yeSwgb3V0cHV0UmVsYXRpdmVQYXRoKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJpbW1lZCA9IG91dHB1dFJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC8kL3UsICcnKTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSB0cmltbWVkID09PSAnJyA/IFsnaW5kZXguaHRtbCddIDogW3RyaW1tZWQsIGAke3RyaW1tZWR9L2luZGV4Lmh0bWxgXTtcbiAgICAgIHJldHVybiBjYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYWxsRmlsZXMuaGFzKGNhbmRpZGF0ZSkpID8/IG51bGw7XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFVybFN0YXR1cyh1cmw6IHN0cmluZyk6IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQ+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dElkID0gZ2xvYmFsVGhpcy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcbiAgICAvLyBDYW5jZWwgdGhlIHVucmVhZCBib2R5IHNvIHVuZGljaSByZWxlYXNlcyB0aGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseS5cbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIHBlci1ob3N0IGNvbm5lY3Rpb24gcG9vbCBzdGFsbHMgYW5kIHNhbWUtaG9zdCByZXF1ZXN0c1xuICAgIC8vIHNlcmlhbGl6ZSwgdHVybmluZyBhIH4zcyBydW4gaW50byBtaW51dGVzLlxuICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgIHJldHVybiB7XG4gICAgICByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM6IHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpLCBEYXRlLm5vdygpKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTIH07XG4gIH0gZmluYWxseSB7XG4gICAgZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxGaWxlcyhvdXRwdXRSb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihvdXRwdXRSb290UGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHJlc29sdmUoZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gICAgZmlsZXMuYWRkKGFic29sdXRlUGF0aC5zbGljZShgJHtvdXRwdXRSb290UGF0aH0vYC5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFBhZ2VzKG91dHB1dFJvb3RQYXRoOiBzdHJpbmcsIGFsbEZpbGVzOiBTZXQ8c3RyaW5nPik6IFByb21pc2U8RG9jdW1lbnRhdGlvblBhZ2VbXT4ge1xuICBjb25zdCBwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJlbGF0aXZlUGF0aCBvZiBhbGxGaWxlcykge1xuICAgIGlmICghcmVsYXRpdmVQYXRoLmVuZHNXaXRoKEhUTUxfRklMRV9FWFRFTlNJT04pIHx8IHJlbGF0aXZlUGF0aCA9PT0gRkFMTEJBQ0tfUEFHRV9SRUxBVElWRV9QQVRIKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gYXdhaXQgcmVhZEZpbGUocmVzb2x2ZShvdXRwdXRSb290UGF0aCwgcmVsYXRpdmVQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgcGFnZXMucHVzaCh7IGh0bWwsIHJlbGF0aXZlUGF0aCB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWdlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBWUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGVBQWU7QUFReEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWlCUCxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDRCQUE0QjtBQUNsQyxNQUFNLHNCQUFzQjtBQUs1QixNQUFNLDhCQUE4QjtBQWNwQyxlQUFzQix1QkFBdUIsU0FBc0Q7QUFDakcsUUFBTSxrQkFBa0IsUUFBUSxRQUFRLGVBQWUsRUFBRSxXQUFXLE1BQU0sR0FBRztBQUM3RSxRQUFNLFdBQVcsTUFBTSxZQUFZLGVBQWU7QUFDbEQsUUFBTSxRQUFRLE1BQU0sVUFBVSxpQkFBaUIsUUFBUTtBQUd2RCxRQUFNLG1CQUFtQix3QkFBd0IsS0FBSztBQUN0RCxNQUFJLGlCQUFpQixTQUFTLEdBQUc7QUFDL0IsVUFBTSxJQUFJO0FBQUEsTUFDUixZQUFZLE9BQU8saUJBQWlCLE1BQU0sQ0FBQztBQUFBLEVBQXlFLHVCQUF1QixnQkFBZ0IsQ0FBQztBQUFBLElBQzlKO0FBQUEsRUFDRjtBQUVBLFFBQU0sc0JBQXNCLG1CQUFtQixPQUFPLGlCQUFpQixFQUFFLFVBQVUsaUJBQWlCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsV0FB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
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9kb2NzLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGVzIHRoZSBsaW5rcyBlbWl0dGVkIGJ5IGEgYnVpbHQgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICpcbiAqIEludGVybmFsIGxpbmtzIGFyZSByZXNvbHZlZCBvZmZsaW5lIGFnYWluc3QgdGhlIGJ1aWxkIG91dHB1dDsgZXh0ZXJuYWwgbGlua3MgYXJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLFxuICogZGVkdXBsaWNhdGVkIHNvIGVhY2ggdW5pcXVlIFVSTCBpcyBmZXRjaGVkIGF0IG1vc3Qgb25jZS4gU2VlIHtAbGluayAuL2xpbmstY2hlY2sudHN9IGZvciB0aGUgZGVjaXNpb24gbG9naWMuXG4gKlxuICogSXQgYWxzbyBmYWlscyBvbiBhIEdpdEh1YiBhbGVydCB0aGF0IHJlYWNoZWQgYSBwYWdlIGFzIGEgcGxhaW4gYmxvY2txdW90ZSAoc2VlIHtAbGluayAuL3VucmVuZGVyZWQtYWxlcnRzLnRzfSksXG4gKiBzaW5jZSBub3RoaW5nIGVsc2Ugbm90aWNlcyB3aGVuIHRoZSBjb252ZXJzaW9uIHN0b3BzLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRG9jdW1lbnRhdGlvblBhZ2UsXG4gIEV4dGVybmFsTGlua1Byb2JlUmVzdWx0LFxuICBMaW5rQ2hlY2tGaWxlU3lzdGVtXG59IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzLFxuICBjb2xsZWN0QnJva2VuTGlua3MsXG4gIGNvbGxlY3RFeHRlcm5hbFRhcmdldHMsXG4gIGV4dHJhY3RJZHMsXG4gIGZvcm1hdEJyb2tlbkxpbmtzLFxuICBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTLFxuICBwYXJzZVJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyxcbiAgcmVzb2x2ZVdpdGhpblJvb3Rcbn0gZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzLFxuICBmb3JtYXRVbnJlbmRlcmVkQWxlcnRzXG59IGZyb20gJy4vdW5yZW5kZXJlZC1hbGVydHMudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhc3NlcnREb2NzTGlua3NSZXNvbHZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBub3JtYWxseSBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20sIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgZS5nLiBgaHR0cHM6Ly9tbmFvdW1vdi5kZXYvdHlwZXNjcmlwdC1saWIvYC5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVCYXNlVXJsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZID0gMjA7XG5jb25zdCBIVE1MX0ZJTEVfRVhURU5TSU9OID0gJy5odG1sJztcbmNvbnN0IE5QTV9QQUNLQUdFX1VSTF9QUkVGSVggPSAnaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvJztcbmNvbnN0IE5QTV9SRUdJU1RSWV9VUkxfUFJFRklYID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyc7XG5cbi8vIFRoZSBob3N0IHNlcnZlcyB0aGlzIHBhZ2UgYXMgdGhlIGZhbGxiYWNrIGZvciBhbnkgbWlzc2luZyBwYXRoICh3aXRoIGEgNDA0IHN0YXR1cyksIHNvIGl0IGlzIG5vdCBhXG4vLyByZWFsIG5hdmlnYWJsZSByb3V0ZTogU3RhcmxpZ2h0IGdpdmVzIGl0IGEgc2VsZi1gcmVsPVwiY2Fub25pY2FsXCJgIG9mIGAvNDA0L2AgdGhhdCBpbmhlcmVudGx5IGNhbm5vdFxuLy8gcmVzb2x2ZSwgYW5kIGl0cyBib2R5IGxpbmtzIChuYXYsIGxvZ28pIGFyZSBpZGVudGljYWwgdG8gZXZlcnkgcmVhbCBwYWdlIHdlIGFscmVhZHkgdmFsaWRhdGUuXG5jb25zdCBGQUxMQkFDS19QQUdFX1JFTEFUSVZFX1BBVEggPSAnNDA0Lmh0bWwnO1xuXG5pbnRlcmZhY2UgQ3JlYXRlRmlsZVN5c3RlbVBhcmFtcyB7XG4gIHJlYWRvbmx5IGFsbEZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdO1xufVxuXG4vKipcbiAqIENoZWNrcyBldmVyeSBsaW5rIG9mIHRoZSBidWlsdCBzaXRlLCBhbmQgdGhhdCBldmVyeSBHaXRIdWIgYWxlcnQgcmVuZGVyZWQgYXMgYW4gYXNpZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqIEB0aHJvd3MgSWYgYW4gYWxlcnQgcmVuZGVyZWQgYXMgYSBwbGFpbiBibG9ja3F1b3RlLCBvciBhIGxpbmsgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydERvY3NMaW5rc1Jlc29sdmUob3B0aW9uczogQXNzZXJ0RG9jc0xpbmtzUmVzb2x2ZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSByZXNvbHZlKG9wdGlvbnMub3V0cHV0RGlyZWN0b3J5KS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCBnZXRBbGxGaWxlcyhvdXRwdXREaXJlY3RvcnkpO1xuICBjb25zdCBwYWdlcyA9IGF3YWl0IHJlYWRQYWdlcyhvdXRwdXREaXJlY3RvcnksIGFsbEZpbGVzKTtcblxuICAvLyBPZmZsaW5lIGFuZCBpbnN0YW50LCBzbyBpdCBydW5zIGJlZm9yZSB0aGUgbmV0d29yayBoYWxmIGFuZCBmYWlscyBmaXJzdC5cbiAgY29uc3QgdW5yZW5kZXJlZEFsZXJ0cyA9IGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzKHBhZ2VzKTtcbiAgaWYgKHVucmVuZGVyZWRBbGVydHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXRlY3RlZCAke1N0cmluZyh1bnJlbmRlcmVkQWxlcnRzLmxlbmd0aCl9IEdpdEh1YiBhbGVydChzKSByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUgaW5zdGVhZCBvZiBhbiBhc2lkZTpcXG4ke2Zvcm1hdFVucmVuZGVyZWRBbGVydHModW5yZW5kZXJlZEFsZXJ0cyl9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbnRlcm5hbEJyb2tlbkxpbmtzID0gY29sbGVjdEJyb2tlbkxpbmtzKHBhZ2VzLCBjcmVhdGVGaWxlU3lzdGVtKHsgYWxsRmlsZXMsIG91dHB1dERpcmVjdG9yeSwgcGFnZXMgfSksIG9wdGlvbnMuc2l0ZUJhc2VVcmwpO1xuXG4gIGNvbnN0IGV4dGVybmFsVGFyZ2V0cyA9IGNvbGxlY3RFeHRlcm5hbFRhcmdldHMocGFnZXMsIG9wdGlvbnMuc2l0ZUJhc2VVcmwpO1xuICBjb25zdCBleHRlcm5hbEJyb2tlbkxpbmtzID0gYXdhaXQgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MoZXh0ZXJuYWxUYXJnZXRzLCBmZXRjaFVybFN0YXR1cywgRVhURVJOQUxfTElOS19DT05DVVJSRU5DWSk7XG5cbiAgY29uc3QgYnJva2VuTGlua3MgPSBbLi4uaW50ZXJuYWxCcm9rZW5MaW5rcywgLi4uZXh0ZXJuYWxCcm9rZW5MaW5rc107XG4gIGlmIChicm9rZW5MaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXRlY3RlZCAke1N0cmluZyhicm9rZW5MaW5rcy5sZW5ndGgpfSBicm9rZW4gZG9jdW1lbnRhdGlvbiBsaW5rKHMpOlxcbiR7Zm9ybWF0QnJva2VuTGlua3MoYnJva2VuTGlua3MpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeXN0ZW0ocGFyYW1zOiBDcmVhdGVGaWxlU3lzdGVtUGFyYW1zKTogTGlua0NoZWNrRmlsZVN5c3RlbSB7XG4gIGNvbnN0IHsgYWxsRmlsZXMsIG91dHB1dERpcmVjdG9yeSwgcGFnZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgaHRtbEJ5UmVsYXRpdmVQYXRoID0gbmV3IE1hcChwYWdlcy5tYXAoKHBhZ2UpID0+IFtwYWdlLnJlbGF0aXZlUGF0aCwgcGFnZS5odG1sXSkpO1xuICBjb25zdCBpZHNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZXR1cm4ge1xuICAgIHJlYWRJZHM6IChwYWdlS2V5KTogU2V0PHN0cmluZz4gPT4ge1xuICAgICAgbGV0IGlkcyA9IGlkc0NhY2hlLmdldChwYWdlS2V5KTtcbiAgICAgIGlmIChpZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBodG1sID0gaHRtbEJ5UmVsYXRpdmVQYXRoLmdldChwYWdlS2V5KTtcbiAgICAgICAgaWRzID0gaHRtbCA9PT0gdW5kZWZpbmVkID8gbmV3IFNldDxzdHJpbmc+KCkgOiBleHRyYWN0SWRzKGh0bWwpO1xuICAgICAgICBpZHNDYWNoZS5zZXQocGFnZUtleSwgaWRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9LFxuICAgIHJlc29sdmVFeGlzdGluZ1BhZ2U6IChvdXRwdXRSZWxhdGl2ZVBhdGgpOiBudWxsIHwgc3RyaW5nID0+IHtcbiAgICAgIGlmIChyZXNvbHZlV2l0aGluUm9vdChvdXRwdXREaXJlY3RvcnksIG91dHB1dFJlbGF0aXZlUGF0aCkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gdHJpbW1lZCA9PT0gJycgPyBbJ2luZGV4Lmh0bWwnXSA6IFt0cmltbWVkLCBgJHt0cmltbWVkfS9pbmRleC5odG1sYF07XG4gICAgICByZXR1cm4gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+IGFsbEZpbGVzLmhhcyhjYW5kaWRhdGUpKSA/PyBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hVcmxTdGF0dXModXJsOiBzdHJpbmcpOiBQcm9taXNlPEV4dGVybmFsTGlua1Byb2JlUmVzdWx0PiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXRJZCA9IGdsb2JhbFRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBFWFRFUk5BTF9MSU5LX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godG9DaGVja2FibGVVcmwodXJsKSwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuICAgIC8vIENhbmNlbCB0aGUgdW5yZWFkIGJvZHkgc28gdW5kaWNpIHJlbGVhc2VzIHRoZSBjb25uZWN0aW9uIGltbWVkaWF0ZWx5LlxuICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgcGVyLWhvc3QgY29ubmVjdGlvbiBwb29sIHN0YWxscyBhbmQgc2FtZS1ob3N0IHJlcXVlc3RzXG4gICAgLy8gc2VyaWFsaXplLCB0dXJuaW5nIGEgfjNzIHJ1biBpbnRvIG1pbnV0ZXMuXG4gICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kczogcGFyc2VSZXRyeUFmdGVySW5NaWxsaXNlY29uZHMocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJyksIERhdGUubm93KCkpLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBzdGF0dXM6IE5FVFdPUktfRkFJTFVSRV9TVEFUVVMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbEZpbGVzKG91dHB1dFJvb3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKG91dHB1dFJvb3RQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcmVzb2x2ZShlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgICBmaWxlcy5hZGQoYWJzb2x1dGVQYXRoLnNsaWNlKGAke291dHB1dFJvb3RQYXRofS9gLmxlbmd0aCkpO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFnZXMob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgYWxsRmlsZXM6IFNldDxzdHJpbmc+KTogUHJvbWlzZTxEb2N1bWVudGF0aW9uUGFnZVtdPiB7XG4gIGNvbnN0IHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdID0gW107XG4gIGZvciAoY29uc3QgcmVsYXRpdmVQYXRoIG9mIGFsbEZpbGVzKSB7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGguZW5kc1dpdGgoSFRNTF9GSUxFX0VYVEVOU0lPTikgfHwgcmVsYXRpdmVQYXRoID09PSBGQUxMQkFDS19QQUdFX1JFTEFUSVZFX1BBVEgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlKG91dHB1dFJvb3RQYXRoLCByZWxhdGl2ZVBhdGgpLCAndXRmLTgnKTtcbiAgICBwYWdlcy5wdXNoKHsgaHRtbCwgcmVsYXRpdmVQYXRoIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhZ2VzO1xufVxuXG4vLyBUaGUgbnBtanMgc2l0ZSBhbnN3ZXJzIGFuIHVuYXR0ZW5kZWQgYGZldGNoYCBvZiBhIHBhY2thZ2UgcGFnZSB3aXRoIDQwMywgc28gdGhlIHBhY2thZ2UgaXMgcHJvYmVkIG9uIHRoZSByZWdpc3RyeVxuLy8gaW5zdGVhZCwgdGhlIHJld3JpdGUgdGhlIG1hcmtkb3duIGxpbmsgY2hlY2sgZ2l2ZXMgbGlua2luYXRvci5cbmZ1bmN0aW9uIHRvQ2hlY2thYmxlVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKE5QTV9QQUNLQUdFX1VSTF9QUkVGSVgpID8gTlBNX1JFR0lTVFJZX1VSTF9QUkVGSVggKyB1cmwuc2xpY2UoTlBNX1BBQ0tBR0VfVVJMX1BSRUZJWC5sZW5ndGgpIDogdXJsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFZQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZUFBZTtBQVF4QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFB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
|
|
@@ -69,6 +69,15 @@ export interface DocsSiteConfig {
|
|
|
69
69
|
* @default DEFAULT_PACKAGE_SITES
|
|
70
70
|
*/
|
|
71
71
|
readonly packageSites?: ReadonlyMap<string, string>;
|
|
72
|
+
/**
|
|
73
|
+
* The package's one public entry point, e.g. `src/index.ts`, for a package that publishes its API from a barrel
|
|
74
|
+
* rather than one import subpath per module. Set, the API reference documents only the exports that barrel
|
|
75
|
+
* re-exports (`export ... from`), {@link excludedDirectories} does not apply, and every import statement imports
|
|
76
|
+
* from the package root.
|
|
77
|
+
*
|
|
78
|
+
* @default undefined: every module under {@link sourceDirectory} is documented as its own import subpath
|
|
79
|
+
*/
|
|
80
|
+
readonly publicApiEntry?: string;
|
|
72
81
|
/**
|
|
73
82
|
* The repository's name. The site is served under it: `<siteOrigin>/<repo>/`.
|
|
74
83
|
*/
|