@skyux/docs-tools 5.0.0-beta.9 → 6.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/esm2020/docs-tools.module.mjs +40 -0
- package/esm2020/modules/anatomy/anatomy-item.component.mjs +17 -0
- package/esm2020/modules/anatomy/anatomy.component.mjs +24 -0
- package/esm2020/modules/anatomy/anatomy.module.mjs +21 -0
- package/{esm2015/modules/code-examples/code-example-module-dependencies.js → esm2020/modules/code-examples/code-example-module-dependencies.mjs} +0 -0
- package/{esm2015/modules/code-examples/code-example-theme.js → esm2020/modules/code-examples/code-example-theme.mjs} +1 -1
- package/esm2020/modules/code-examples/code-example.component.mjs +68 -0
- package/esm2020/modules/code-examples/code-example.mjs +2 -0
- package/esm2020/modules/code-examples/code-examples-editor.service.mjs +296 -0
- package/esm2020/modules/code-examples/code-examples.component.mjs +97 -0
- package/esm2020/modules/code-examples/code-examples.module.mjs +43 -0
- package/{esm2015/modules/demo/demo-content-alignment.js → esm2020/modules/demo/demo-content-alignment.mjs} +0 -0
- package/{esm2015/modules/demo/demo-control-panel-change.js → esm2020/modules/demo/demo-control-panel-change.mjs} +0 -0
- package/esm2020/modules/demo/demo-control-panel-checkbox.component.mjs +80 -0
- package/{esm2015/modules/demo/demo-control-panel-radio-choice.js → esm2020/modules/demo/demo-control-panel-radio-choice.mjs} +1 -1
- package/esm2020/modules/demo/demo-control-panel-radio-group.component.mjs +83 -0
- package/esm2020/modules/demo/demo-control-panel-section.component.mjs +22 -0
- package/esm2020/modules/demo/demo-control-panel.component.mjs +85 -0
- package/esm2020/modules/demo/demo.component.mjs +53 -0
- package/esm2020/modules/demo/demo.module.mjs +69 -0
- package/esm2020/modules/demo-page/demo-page-dom-adapter.service.mjs +75 -0
- package/{esm2015/modules/demo-page/demo-page-module-info.component.js → esm2020/modules/demo-page/demo-page-module-info.component.mjs} +5 -5
- package/esm2020/modules/demo-page/demo-page-section.component.mjs +43 -0
- package/esm2020/modules/demo-page/demo-page-summary.component.mjs +21 -0
- package/esm2020/modules/demo-page/demo-page-title.service.mjs +28 -0
- package/esm2020/modules/demo-page/demo-page-type-definitions.component.mjs +24 -0
- package/esm2020/modules/demo-page/demo-page.component.mjs +187 -0
- package/esm2020/modules/demo-page/demo-page.module.mjs +88 -0
- package/esm2020/modules/design-guidelines/design-guideline-thumbnail.component.mjs +27 -0
- package/esm2020/modules/design-guidelines/design-guideline.component.mjs +33 -0
- package/esm2020/modules/design-guidelines/design-guidelines.component.mjs +11 -0
- package/esm2020/modules/design-guidelines/design-guidelines.module.mjs +34 -0
- package/esm2020/modules/heading-anchor/heading-anchor.component.mjs +21 -0
- package/esm2020/modules/heading-anchor/heading-anchor.module.mjs +20 -0
- package/esm2020/modules/markdown/markdown.module.mjs +17 -0
- package/esm2020/modules/markdown/markdown.pipe.mjs +20 -0
- package/esm2020/modules/module-info/module-info.component.mjs +74 -0
- package/esm2020/modules/module-info/module-info.module.mjs +42 -0
- package/esm2020/modules/safe-html/safe-html.component.mjs +20 -0
- package/esm2020/modules/safe-html/safe-html.module.mjs +18 -0
- package/{esm2015/modules/shared/docs-tools-component-info.js → esm2020/modules/shared/docs-tools-component-info.mjs} +0 -0
- package/{esm2015/modules/shared/docs-tools-options.js → esm2020/modules/shared/docs-tools-options.mjs} +1 -1
- package/esm2020/modules/shared/docs-tools-supportal.service.mjs +23 -0
- package/esm2020/modules/shared/sky-docs-tools-resources.module.mjs +53 -0
- package/{esm2015/modules/source-code/source-code-file.js → esm2020/modules/source-code/source-code-file.mjs} +1 -1
- package/{esm2015/modules/source-code/source-code-provider.js → esm2020/modules/source-code/source-code-provider.mjs} +5 -5
- package/esm2020/modules/source-code/source-code.service.mjs +42 -0
- package/esm2020/modules/thumbnail/thumbnail.component.mjs +28 -0
- package/esm2020/modules/thumbnail/thumbnail.module.mjs +19 -0
- package/{esm2015/modules/type-definitions/anchor-link-service-config.js → esm2020/modules/type-definitions/anchor-link-service-config.mjs} +0 -0
- package/{esm2015/modules/type-definitions/anchor-link-service-format.js → esm2020/modules/type-definitions/anchor-link-service-format.mjs} +0 -0
- package/{esm2015/modules/type-definitions/anchor-link.js → esm2020/modules/type-definitions/anchor-link.mjs} +0 -0
- package/esm2020/modules/type-definitions/anchor-link.service.mjs +106 -0
- package/esm2020/modules/type-definitions/call-signature-definition.component.mjs +45 -0
- package/esm2020/modules/type-definitions/call-signature-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/class-definition.component.mjs +20 -0
- package/esm2020/modules/type-definitions/class-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/comment-tags.mjs +2 -0
- package/esm2020/modules/type-definitions/directive-definition.component.mjs +20 -0
- package/esm2020/modules/type-definitions/directive-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/entry-child-definition.mjs +2 -0
- package/{esm2015/modules/type-definitions/entry-definition.js → esm2020/modules/type-definitions/entry-definition.mjs} +1 -1
- package/esm2020/modules/type-definitions/enumeration-definition.component.mjs +19 -0
- package/esm2020/modules/type-definitions/enumeration-definition.mjs +2 -0
- package/{esm2015/modules/type-definitions/enumeration-member-definition.js → esm2020/modules/type-definitions/enumeration-member-definition.mjs} +1 -1
- package/esm2020/modules/type-definitions/index-signature-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/interface-definition.component.mjs +36 -0
- package/esm2020/modules/type-definitions/interface-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/interface-property-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/method-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/method-definitions.component.mjs +73 -0
- package/esm2020/modules/type-definitions/parameter-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/pipe-definition.component.mjs +20 -0
- package/esm2020/modules/type-definitions/pipe-definition.mjs +2 -0
- package/{esm2015/modules/type-definitions/property-decorator.js → esm2020/modules/type-definitions/property-decorator.mjs} +1 -1
- package/esm2020/modules/type-definitions/property-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/property-definitions.component.mjs +62 -0
- package/esm2020/modules/type-definitions/type-alias-definition.component.mjs +36 -0
- package/esm2020/modules/type-definitions/type-alias-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/type-anchor-links.pipe.mjs +27 -0
- package/esm2020/modules/type-definitions/type-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/type-definitions-format.service.mjs +249 -0
- package/{esm2015/modules/type-definitions/type-definitions-provider.js → esm2020/modules/type-definitions/type-definitions-provider.mjs} +4 -4
- package/esm2020/modules/type-definitions/type-definitions.mjs +2 -0
- package/esm2020/modules/type-definitions/type-definitions.module.mjs +102 -0
- package/esm2020/modules/type-definitions/type-definitions.service.mjs +103 -0
- package/esm2020/modules/type-definitions/type-parameter-definition.mjs +2 -0
- package/esm2020/modules/type-definitions/typedoc-adapter.service.mjs +526 -0
- package/esm2020/modules/type-definitions/typedoc-types.mjs +2 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
- package/{esm2015/skyux-docs-tools.js → esm2020/skyux-docs-tools.mjs} +0 -0
- package/fesm2015/skyux-docs-tools.mjs +3166 -0
- package/fesm2015/skyux-docs-tools.mjs.map +1 -0
- package/fesm2020/skyux-docs-tools.mjs +3147 -0
- package/fesm2020/skyux-docs-tools.mjs.map +1 -0
- package/modules/demo/demo-control-panel-checkbox.component.d.ts +2 -2
- package/modules/demo/demo-control-panel-radio-group.component.d.ts +3 -2
- package/modules/demo-page/demo-page-type-definitions.component.d.ts +2 -9
- package/modules/demo-page/demo-page.component.d.ts +31 -4
- package/modules/module-info/module-info.component.d.ts +14 -16
- package/modules/module-info/module-info.module.d.ts +1 -1
- package/modules/type-definitions/method-definition.d.ts +2 -0
- package/modules/type-definitions/method-definitions.component.d.ts +3 -4
- package/modules/type-definitions/typedoc-types.d.ts +6 -3
- package/package.json +40 -27
- package/bundles/skyux-docs-tools.umd.js +0 -3705
- package/bundles/skyux-docs-tools.umd.js.map +0 -1
- package/documentation.json +0 -10784
- package/esm2015/docs-tools.module.js +0 -40
- package/esm2015/modules/anatomy/anatomy-item.component.js +0 -22
- package/esm2015/modules/anatomy/anatomy.component.js +0 -29
- package/esm2015/modules/anatomy/anatomy.module.js +0 -39
- package/esm2015/modules/code-examples/code-example.component.js +0 -68
- package/esm2015/modules/code-examples/code-example.js +0 -2
- package/esm2015/modules/code-examples/code-examples-editor.service.js +0 -289
- package/esm2015/modules/code-examples/code-examples.component.js +0 -102
- package/esm2015/modules/code-examples/code-examples.module.js +0 -51
- package/esm2015/modules/demo/demo-control-panel-checkbox.component.js +0 -84
- package/esm2015/modules/demo/demo-control-panel-radio-group.component.js +0 -80
- package/esm2015/modules/demo/demo-control-panel-section.component.js +0 -27
- package/esm2015/modules/demo/demo-control-panel.component.js +0 -86
- package/esm2015/modules/demo/demo.component.js +0 -58
- package/esm2015/modules/demo/demo.module.js +0 -69
- package/esm2015/modules/demo-page/demo-page-dom-adapter.service.js +0 -75
- package/esm2015/modules/demo-page/demo-page-section.component.js +0 -47
- package/esm2015/modules/demo-page/demo-page-summary.component.js +0 -26
- package/esm2015/modules/demo-page/demo-page-title.service.js +0 -28
- package/esm2015/modules/demo-page/demo-page-type-definitions.component.js +0 -39
- package/esm2015/modules/demo-page/demo-page.component.js +0 -142
- package/esm2015/modules/demo-page/demo-page.module.js +0 -88
- package/esm2015/modules/design-guidelines/design-guideline-thumbnail.component.js +0 -32
- package/esm2015/modules/design-guidelines/design-guideline.component.js +0 -38
- package/esm2015/modules/design-guidelines/design-guidelines.component.js +0 -15
- package/esm2015/modules/design-guidelines/design-guidelines.module.js +0 -44
- package/esm2015/modules/heading-anchor/heading-anchor.component.js +0 -26
- package/esm2015/modules/heading-anchor/heading-anchor.module.js +0 -34
- package/esm2015/modules/markdown/markdown.module.js +0 -25
- package/esm2015/modules/markdown/markdown.pipe.js +0 -20
- package/esm2015/modules/module-info/module-info.component.js +0 -82
- package/esm2015/modules/module-info/module-info.module.js +0 -46
- package/esm2015/modules/safe-html/safe-html.component.js +0 -24
- package/esm2015/modules/safe-html/safe-html.module.js +0 -26
- package/esm2015/modules/shared/docs-tools-supportal.service.js +0 -23
- package/esm2015/modules/shared/sky-docs-tools-resources.module.js +0 -41
- package/esm2015/modules/source-code/source-code.service.js +0 -42
- package/esm2015/modules/thumbnail/thumbnail.component.js +0 -33
- package/esm2015/modules/thumbnail/thumbnail.module.js +0 -30
- package/esm2015/modules/type-definitions/anchor-link.service.js +0 -98
- package/esm2015/modules/type-definitions/call-signature-definition.component.js +0 -51
- package/esm2015/modules/type-definitions/call-signature-definition.js +0 -2
- package/esm2015/modules/type-definitions/class-definition.component.js +0 -25
- package/esm2015/modules/type-definitions/class-definition.js +0 -2
- package/esm2015/modules/type-definitions/comment-tags.js +0 -2
- package/esm2015/modules/type-definitions/directive-definition.component.js +0 -25
- package/esm2015/modules/type-definitions/directive-definition.js +0 -2
- package/esm2015/modules/type-definitions/entry-child-definition.js +0 -2
- package/esm2015/modules/type-definitions/enumeration-definition.component.js +0 -23
- package/esm2015/modules/type-definitions/enumeration-definition.js +0 -2
- package/esm2015/modules/type-definitions/index-signature-definition.js +0 -2
- package/esm2015/modules/type-definitions/interface-definition.component.js +0 -38
- package/esm2015/modules/type-definitions/interface-definition.js +0 -2
- package/esm2015/modules/type-definitions/interface-property-definition.js +0 -2
- package/esm2015/modules/type-definitions/method-definition.js +0 -2
- package/esm2015/modules/type-definitions/method-definitions.component.js +0 -62
- package/esm2015/modules/type-definitions/parameter-definition.js +0 -2
- package/esm2015/modules/type-definitions/pipe-definition.component.js +0 -25
- package/esm2015/modules/type-definitions/pipe-definition.js +0 -2
- package/esm2015/modules/type-definitions/property-definition.js +0 -2
- package/esm2015/modules/type-definitions/property-definitions.component.js +0 -69
- package/esm2015/modules/type-definitions/type-alias-definition.component.js +0 -39
- package/esm2015/modules/type-definitions/type-alias-definition.js +0 -2
- package/esm2015/modules/type-definitions/type-anchor-links.pipe.js +0 -27
- package/esm2015/modules/type-definitions/type-definition.js +0 -2
- package/esm2015/modules/type-definitions/type-definitions-format.service.js +0 -241
- package/esm2015/modules/type-definitions/type-definitions.js +0 -2
- package/esm2015/modules/type-definitions/type-definitions.module.js +0 -102
- package/esm2015/modules/type-definitions/type-definitions.service.js +0 -103
- package/esm2015/modules/type-definitions/type-parameter-definition.js +0 -2
- package/esm2015/modules/type-definitions/typedoc-adapter.service.js +0 -477
- package/esm2015/modules/type-definitions/typedoc-types.js +0 -2
- package/fesm2015/skyux-docs-tools.js +0 -3215
- package/fesm2015/skyux-docs-tools.js.map +0 -1
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
import { Injectable, Optional } from '@angular/core';
|
|
2
|
+
import orderBy from 'lodash.orderby';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./type-definitions-provider";
|
|
5
|
+
/**
|
|
6
|
+
* Converts TypeDoc types into SKY UX docs-tools types, to be supplied to the various definitions components.
|
|
7
|
+
*/
|
|
8
|
+
export class SkyDocsTypeDocAdapterService {
|
|
9
|
+
constructor(typeDefinitionsProvider) {
|
|
10
|
+
this.typeDefinitionsProvider = typeDefinitionsProvider;
|
|
11
|
+
}
|
|
12
|
+
toClassDefinition(entry) {
|
|
13
|
+
const definition = {
|
|
14
|
+
anchorId: this.getAnchorId(entry),
|
|
15
|
+
name: entry.name,
|
|
16
|
+
};
|
|
17
|
+
const tags = this.getCommentTags(entry.comment);
|
|
18
|
+
this.applyCommentTagValues(definition, tags);
|
|
19
|
+
const methods = this.getClassMethods(entry);
|
|
20
|
+
if (methods.length) {
|
|
21
|
+
definition.methods = methods;
|
|
22
|
+
}
|
|
23
|
+
const properties = this.getClassProperties(entry);
|
|
24
|
+
if (properties.length) {
|
|
25
|
+
definition.properties = properties;
|
|
26
|
+
}
|
|
27
|
+
return definition;
|
|
28
|
+
}
|
|
29
|
+
toDirectiveDefinition(entry) {
|
|
30
|
+
const definition = {
|
|
31
|
+
anchorId: this.getAnchorId(entry),
|
|
32
|
+
name: entry.name,
|
|
33
|
+
selector: this.getSelector(entry),
|
|
34
|
+
};
|
|
35
|
+
const tags = this.getCommentTags(entry.comment);
|
|
36
|
+
this.applyCommentTagValues(definition, tags);
|
|
37
|
+
const properties = this.getClassProperties(entry);
|
|
38
|
+
const eventProperties = properties.filter((p) => p.decorator?.name === 'Output');
|
|
39
|
+
if (eventProperties.length) {
|
|
40
|
+
definition.eventProperties = eventProperties;
|
|
41
|
+
}
|
|
42
|
+
const inputProperties = properties.filter((p) => p.decorator?.name === 'Input');
|
|
43
|
+
if (inputProperties.length) {
|
|
44
|
+
definition.inputProperties = inputProperties;
|
|
45
|
+
}
|
|
46
|
+
return definition;
|
|
47
|
+
}
|
|
48
|
+
toEnumerationDefinition(entry) {
|
|
49
|
+
const members = this.getEnumerationMembers(entry);
|
|
50
|
+
const definition = {
|
|
51
|
+
anchorId: this.getAnchorId(entry),
|
|
52
|
+
members,
|
|
53
|
+
name: entry.name,
|
|
54
|
+
};
|
|
55
|
+
const tags = this.getCommentTags(entry.comment);
|
|
56
|
+
this.applyCommentTagValues(definition, tags);
|
|
57
|
+
return definition;
|
|
58
|
+
}
|
|
59
|
+
toInterfaceDefinition(entry) {
|
|
60
|
+
const properties = this.getInterfaceProperties(entry);
|
|
61
|
+
const definition = {
|
|
62
|
+
anchorId: this.getAnchorId(entry),
|
|
63
|
+
name: entry.name,
|
|
64
|
+
properties,
|
|
65
|
+
};
|
|
66
|
+
const tags = this.getCommentTags(entry.comment);
|
|
67
|
+
this.applyCommentTagValues(definition, tags);
|
|
68
|
+
const typeParameters = this.getTypeParameterDefinitions(entry.typeParameter);
|
|
69
|
+
if (typeParameters.length) {
|
|
70
|
+
definition.typeParameters = typeParameters;
|
|
71
|
+
}
|
|
72
|
+
return definition;
|
|
73
|
+
}
|
|
74
|
+
toPipeDefinition(entry) {
|
|
75
|
+
const methods = this.getClassMethods(entry);
|
|
76
|
+
const transformMethod = methods.find((m) => m.name === 'transform');
|
|
77
|
+
const definition = {
|
|
78
|
+
anchorId: this.getAnchorId(entry),
|
|
79
|
+
name: entry.name,
|
|
80
|
+
transformMethod,
|
|
81
|
+
};
|
|
82
|
+
const tags = this.getCommentTags(entry.comment);
|
|
83
|
+
this.applyCommentTagValues(definition, tags);
|
|
84
|
+
return definition;
|
|
85
|
+
}
|
|
86
|
+
toTypeAliasDefinition(entry) {
|
|
87
|
+
const definition = {
|
|
88
|
+
anchorId: this.getAnchorId(entry),
|
|
89
|
+
name: entry.name,
|
|
90
|
+
type: this.getTypeDefinition({
|
|
91
|
+
comment: entry.comment,
|
|
92
|
+
type: entry.type,
|
|
93
|
+
}),
|
|
94
|
+
};
|
|
95
|
+
const tags = this.getCommentTags(entry.type.declaration?.signatures
|
|
96
|
+
? entry.type.declaration.signatures[0].comment
|
|
97
|
+
: entry.comment);
|
|
98
|
+
this.applyCommentTagValues(definition, tags);
|
|
99
|
+
const typeParameters = this.getTypeParameterDefinitions(entry.typeParameter);
|
|
100
|
+
if (typeParameters.length) {
|
|
101
|
+
definition.typeParameters = typeParameters;
|
|
102
|
+
}
|
|
103
|
+
return definition;
|
|
104
|
+
}
|
|
105
|
+
getSelector(entry) {
|
|
106
|
+
const decoratorSource = entry.decorators[0].arguments.obj;
|
|
107
|
+
return decoratorSource.indexOf('selector: `') > -1
|
|
108
|
+
? decoratorSource
|
|
109
|
+
.split('selector: `')[1]
|
|
110
|
+
.split('`')[0]
|
|
111
|
+
.replace(/\s\s+/g, ' ')
|
|
112
|
+
: decoratorSource.split("selector: '")[1].split("'")[0];
|
|
113
|
+
}
|
|
114
|
+
getClassProperties(entry) {
|
|
115
|
+
if (!entry.children) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
const definitions = entry.children
|
|
119
|
+
.filter((child) => child.kindString === 'Property' || child.kindString === 'Accessor')
|
|
120
|
+
.map((child) => {
|
|
121
|
+
let definition = {
|
|
122
|
+
isOptional: true,
|
|
123
|
+
name: this.getPropertyName(child),
|
|
124
|
+
type: this.getTypeDefinition(child),
|
|
125
|
+
};
|
|
126
|
+
let defaultValue;
|
|
127
|
+
/* Ensure we are properly capturing definitions which use a getter/setter. Final check is a sanity check */
|
|
128
|
+
if (child.kindString === 'Accessor' &&
|
|
129
|
+
!child.comment?.shortText &&
|
|
130
|
+
(child.setSignature?.length > 0 || child.getSignature.length > 0)) {
|
|
131
|
+
const mainTags = this.getCommentTags(child.comment);
|
|
132
|
+
this.applyCommentTagValues(definition, mainTags);
|
|
133
|
+
if (child.getSignature?.length > 0) {
|
|
134
|
+
const getTags = this.getCommentTags(child.getSignature[0].comment);
|
|
135
|
+
definition.isOptional = !getTags.extras.required;
|
|
136
|
+
this.applyCommentTagValues(definition, getTags);
|
|
137
|
+
defaultValue = this.getDefaultValue(child, getTags);
|
|
138
|
+
}
|
|
139
|
+
if (child.setSignature?.length > 0) {
|
|
140
|
+
const setTags = this.getCommentTags(child.setSignature[0].comment);
|
|
141
|
+
this.applyCommentTagValues(definition, setTags);
|
|
142
|
+
definition.isOptional =
|
|
143
|
+
definition.isOptional && !setTags.extras.required;
|
|
144
|
+
defaultValue = defaultValue || this.getDefaultValue(child, setTags);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
definition.isOptional = !mainTags.extras.required;
|
|
148
|
+
defaultValue = this.getDefaultValue(child, mainTags);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
let tags;
|
|
153
|
+
if (child.kindString === 'Property' &&
|
|
154
|
+
!child.comment?.shortText &&
|
|
155
|
+
child.type.declaration?.signatures?.length > 0 &&
|
|
156
|
+
child.type.declaration.signatures[0].comment) {
|
|
157
|
+
tags = this.getCommentTags(child.type.declaration.signatures[0].comment);
|
|
158
|
+
definition.isOptional = !tags.extras.required;
|
|
159
|
+
this.applyCommentTagValues(definition, tags);
|
|
160
|
+
}
|
|
161
|
+
tags = this.getCommentTags(child.comment);
|
|
162
|
+
definition.isOptional =
|
|
163
|
+
definition.isOptional && !tags.extras.required;
|
|
164
|
+
this.applyCommentTagValues(definition, tags);
|
|
165
|
+
defaultValue = this.getDefaultValue(child, tags);
|
|
166
|
+
}
|
|
167
|
+
if (defaultValue) {
|
|
168
|
+
definition.defaultValue = defaultValue;
|
|
169
|
+
}
|
|
170
|
+
const decorator = this.getDecorator(child);
|
|
171
|
+
if (decorator) {
|
|
172
|
+
definition.decorator = decorator;
|
|
173
|
+
}
|
|
174
|
+
if (!definition.description) {
|
|
175
|
+
const constructor = entry.children.find((child) => child.kindString === 'Constructor');
|
|
176
|
+
if (constructor) {
|
|
177
|
+
const signature = constructor.signatures.find((signature) => signature.kindString === 'Constructor signature');
|
|
178
|
+
/* Sanity check */
|
|
179
|
+
/* istanbul ignore else */
|
|
180
|
+
if (signature) {
|
|
181
|
+
const matchingParam = signature.parameters?.find((parameter) => parameter.name === child.name);
|
|
182
|
+
if (matchingParam) {
|
|
183
|
+
const matchingParamTags = this.getCommentTags(matchingParam.comment);
|
|
184
|
+
this.applyCommentTagValues(definition, matchingParamTags);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return definition;
|
|
190
|
+
});
|
|
191
|
+
return orderBy(definitions, ['isOptional', 'name'], ['asc', 'asc']);
|
|
192
|
+
}
|
|
193
|
+
getClassMethods(entry) {
|
|
194
|
+
if (!entry.children) {
|
|
195
|
+
return [];
|
|
196
|
+
}
|
|
197
|
+
const methods = entry.children
|
|
198
|
+
.filter((child) => child.kindString === 'Method' && /^ng/.test(child.name) === false)
|
|
199
|
+
.map((child) => {
|
|
200
|
+
const definition = {
|
|
201
|
+
name: this.getPropertyName(child),
|
|
202
|
+
type: this.getTypeDefinition(child),
|
|
203
|
+
isStatic: !!child.flags?.isStatic,
|
|
204
|
+
parentName: entry.name,
|
|
205
|
+
};
|
|
206
|
+
// Comments for methods are stored in a different location.
|
|
207
|
+
const comment = child.signatures[0].comment;
|
|
208
|
+
const tags = this.getCommentTags(comment);
|
|
209
|
+
this.applyCommentTagValues(definition, tags);
|
|
210
|
+
const typeParameters = this.getTypeParameterDefinitions(child.signatures[0].typeParameter);
|
|
211
|
+
if (typeParameters.length) {
|
|
212
|
+
definition.typeParameters = typeParameters;
|
|
213
|
+
}
|
|
214
|
+
return definition;
|
|
215
|
+
});
|
|
216
|
+
return orderBy(methods, ['name'], ['asc']);
|
|
217
|
+
}
|
|
218
|
+
getInterfaceProperties(entry) {
|
|
219
|
+
if (!entry.children && !entry.indexSignature) {
|
|
220
|
+
return [];
|
|
221
|
+
}
|
|
222
|
+
const definitions = entry.children?.map((child) => {
|
|
223
|
+
let tags;
|
|
224
|
+
if (child.kindString === 'Method' && child.signatures.length > 0) {
|
|
225
|
+
tags = this.getCommentTags(child.signatures[0].comment);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
tags = this.getCommentTags(child.comment);
|
|
229
|
+
}
|
|
230
|
+
const definition = {
|
|
231
|
+
isOptional: tags.extras.required ? false : !!child.flags?.isOptional,
|
|
232
|
+
name: this.getPropertyName(child),
|
|
233
|
+
type: this.getTypeDefinition(child),
|
|
234
|
+
};
|
|
235
|
+
this.applyCommentTagValues(definition, tags);
|
|
236
|
+
return definition;
|
|
237
|
+
}) || [];
|
|
238
|
+
const sorted = orderBy(definitions, ['isOptional', 'name'], ['asc', 'asc']);
|
|
239
|
+
// Add any index signatures, e.g. `[_: string]: any`
|
|
240
|
+
if (entry.indexSignature) {
|
|
241
|
+
const indexSignature = entry.indexSignature;
|
|
242
|
+
const definition = {
|
|
243
|
+
isOptional: true,
|
|
244
|
+
name: indexSignature.name,
|
|
245
|
+
type: {
|
|
246
|
+
indexSignature: this.getIndexSignatureDefinition(indexSignature),
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
const tags = this.getCommentTags(indexSignature.comment);
|
|
250
|
+
this.applyCommentTagValues(definition, tags);
|
|
251
|
+
sorted.push(definition);
|
|
252
|
+
}
|
|
253
|
+
return sorted;
|
|
254
|
+
}
|
|
255
|
+
getEnumerationMembers(entry) {
|
|
256
|
+
if (!entry.children) {
|
|
257
|
+
return [];
|
|
258
|
+
}
|
|
259
|
+
return entry.children.map((child) => {
|
|
260
|
+
const definition = {
|
|
261
|
+
name: child.name,
|
|
262
|
+
};
|
|
263
|
+
const tags = this.getCommentTags(child.comment);
|
|
264
|
+
this.applyCommentTagValues(definition, tags);
|
|
265
|
+
return definition;
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
getTypeDefinition(child) {
|
|
269
|
+
let definition;
|
|
270
|
+
const kindString = child.kindString;
|
|
271
|
+
switch (kindString) {
|
|
272
|
+
case 'Accessor':
|
|
273
|
+
if (child.setSignature) {
|
|
274
|
+
return this.getTypeDefinition(child.setSignature[0].parameters[0]);
|
|
275
|
+
}
|
|
276
|
+
return this.getTypeDefinition(child.getSignature[0]);
|
|
277
|
+
case 'Method':
|
|
278
|
+
definition = {
|
|
279
|
+
callSignature: this.getCallSignatureDefinition(child.signatures[0], this.getCommentTags(child.comment)),
|
|
280
|
+
name: child.signatures[0].name,
|
|
281
|
+
};
|
|
282
|
+
return definition;
|
|
283
|
+
default:
|
|
284
|
+
let name = child.type.name || child.type.elementType?.name || child.type.value;
|
|
285
|
+
definition = {
|
|
286
|
+
type: child.type.type,
|
|
287
|
+
};
|
|
288
|
+
if (name) {
|
|
289
|
+
definition.name = name;
|
|
290
|
+
}
|
|
291
|
+
// Union?
|
|
292
|
+
if (child.type.types) {
|
|
293
|
+
definition.unionTypes = child.type.types.map((t) => this.getTypeDefinition({ type: t }));
|
|
294
|
+
}
|
|
295
|
+
// Convert reflection types.
|
|
296
|
+
if (child.type.type === 'reflection' ||
|
|
297
|
+
child.type.elementType?.type === 'reflection') {
|
|
298
|
+
const declaration = child.type.elementType?.type === 'reflection'
|
|
299
|
+
? child.type.elementType.declaration
|
|
300
|
+
: child.type.declaration;
|
|
301
|
+
/*istanbul ignore else */
|
|
302
|
+
if (declaration) {
|
|
303
|
+
if (declaration.signatures) {
|
|
304
|
+
definition.callSignature = this.getCallSignatureDefinition(declaration.signatures[0], this.getCommentTags(child.comment));
|
|
305
|
+
}
|
|
306
|
+
else if (declaration.indexSignature) {
|
|
307
|
+
const indexSignature = declaration.indexSignature;
|
|
308
|
+
definition.indexSignature =
|
|
309
|
+
this.getIndexSignatureDefinition(indexSignature);
|
|
310
|
+
} /* istanbul ignore else */
|
|
311
|
+
else if (declaration.children) {
|
|
312
|
+
definition.typeLiteral = {
|
|
313
|
+
properties: this.getInterfaceProperties({
|
|
314
|
+
children: declaration.children,
|
|
315
|
+
}),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (child.type.type === 'typeOperator') {
|
|
321
|
+
definition.name = `${child.type.operator} ${child.type.target.name}`;
|
|
322
|
+
}
|
|
323
|
+
if (child.type.typeArguments) {
|
|
324
|
+
definition.typeArguments = this.getTypeArgumentDefinitions(child.type);
|
|
325
|
+
}
|
|
326
|
+
return definition;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
getParameterDefinitions(callSignature, parentTags) {
|
|
330
|
+
if (!callSignature.parameters) {
|
|
331
|
+
return [];
|
|
332
|
+
}
|
|
333
|
+
const parameters = callSignature.parameters.map((p) => {
|
|
334
|
+
const tags = this.getParameterCommentTags(p, parentTags);
|
|
335
|
+
const defaultValue = this.getDefaultValue(p, tags);
|
|
336
|
+
const typeArguments = this.getTypeArgumentDefinitions(p.type);
|
|
337
|
+
const parameter = {
|
|
338
|
+
isOptional: !!(defaultValue || !!p.flags?.isOptional),
|
|
339
|
+
name: p.name,
|
|
340
|
+
type: this.getTypeDefinition(p),
|
|
341
|
+
};
|
|
342
|
+
if (defaultValue !== undefined) {
|
|
343
|
+
parameter.defaultValue = defaultValue;
|
|
344
|
+
}
|
|
345
|
+
if (tags.description) {
|
|
346
|
+
parameter.description = tags.description;
|
|
347
|
+
}
|
|
348
|
+
if (typeArguments.length) {
|
|
349
|
+
parameter.typeArguments = typeArguments;
|
|
350
|
+
}
|
|
351
|
+
return parameter;
|
|
352
|
+
});
|
|
353
|
+
return parameters;
|
|
354
|
+
}
|
|
355
|
+
getTypeArgumentDefinitions(typeConfig) {
|
|
356
|
+
if (!typeConfig || !typeConfig.typeArguments) {
|
|
357
|
+
return [];
|
|
358
|
+
}
|
|
359
|
+
return typeConfig.typeArguments.map((typeArgument) => {
|
|
360
|
+
return this.getTypeDefinition({ type: typeArgument });
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
getCallSignatureDefinition(callSignature, tags) {
|
|
364
|
+
const definition = {
|
|
365
|
+
returnType: this.getTypeDefinition(callSignature),
|
|
366
|
+
};
|
|
367
|
+
const parameters = this.getParameterDefinitions(callSignature, tags);
|
|
368
|
+
if (parameters.length) {
|
|
369
|
+
definition.parameters = parameters;
|
|
370
|
+
}
|
|
371
|
+
return definition;
|
|
372
|
+
}
|
|
373
|
+
getIndexSignatureDefinition(signature) {
|
|
374
|
+
return {
|
|
375
|
+
key: {
|
|
376
|
+
name: signature.parameters[0].name,
|
|
377
|
+
type: this.getTypeDefinition(signature.parameters[0]),
|
|
378
|
+
},
|
|
379
|
+
type: this.getTypeDefinition(signature),
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
getTypeParameterDefinitions(typeParameters) {
|
|
383
|
+
if (!typeParameters) {
|
|
384
|
+
return [];
|
|
385
|
+
}
|
|
386
|
+
return typeParameters.map((typeParam) => {
|
|
387
|
+
const definition = {
|
|
388
|
+
name: typeParam.name,
|
|
389
|
+
};
|
|
390
|
+
if (typeParam.type) {
|
|
391
|
+
definition.type = this.getTypeDefinition({
|
|
392
|
+
type: typeParam.type,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
return definition;
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
getCommentTags(comment) {
|
|
399
|
+
let codeExample;
|
|
400
|
+
let codeExampleLanguage = 'markup';
|
|
401
|
+
let deprecationWarning;
|
|
402
|
+
let defaultValue;
|
|
403
|
+
let description = '';
|
|
404
|
+
let parameters;
|
|
405
|
+
const extras = {};
|
|
406
|
+
if (comment) {
|
|
407
|
+
if (comment.tags) {
|
|
408
|
+
comment.tags.forEach((tag) => {
|
|
409
|
+
switch (tag.tag) {
|
|
410
|
+
case 'deprecated':
|
|
411
|
+
deprecationWarning = tag.text.trim();
|
|
412
|
+
break;
|
|
413
|
+
case 'default':
|
|
414
|
+
case 'defaultValue':
|
|
415
|
+
defaultValue = tag.text.trim();
|
|
416
|
+
break;
|
|
417
|
+
case 'example':
|
|
418
|
+
codeExample = tag.text.trim().split('```')[1].trim();
|
|
419
|
+
const language = codeExample.split('\n')[0];
|
|
420
|
+
if (language === 'markup' || language === 'typescript') {
|
|
421
|
+
codeExample = codeExample.slice(language.length).trim();
|
|
422
|
+
codeExampleLanguage = language;
|
|
423
|
+
}
|
|
424
|
+
break;
|
|
425
|
+
case 'param':
|
|
426
|
+
parameters = parameters || [];
|
|
427
|
+
parameters.push({
|
|
428
|
+
name: tag.param,
|
|
429
|
+
description: tag.text.trim(),
|
|
430
|
+
});
|
|
431
|
+
break;
|
|
432
|
+
default:
|
|
433
|
+
extras[tag.tag] = tag.text;
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
description = (comment.shortText || comment.text || '').trim();
|
|
439
|
+
}
|
|
440
|
+
return {
|
|
441
|
+
codeExample,
|
|
442
|
+
codeExampleLanguage,
|
|
443
|
+
defaultValue,
|
|
444
|
+
deprecationWarning,
|
|
445
|
+
description,
|
|
446
|
+
extras,
|
|
447
|
+
parameters,
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Parameter descriptions are derived from the parent's (function/method) comment.
|
|
452
|
+
*/
|
|
453
|
+
getParameterCommentTags(parameter, parentTags) {
|
|
454
|
+
const tags = this.getCommentTags(parameter.comment);
|
|
455
|
+
const paramTags = parentTags.parameters;
|
|
456
|
+
const tagParam = paramTags
|
|
457
|
+
? paramTags.find((param) => param.name === parameter.name)
|
|
458
|
+
: undefined;
|
|
459
|
+
if (!tagParam || !tagParam.description) {
|
|
460
|
+
return tags;
|
|
461
|
+
}
|
|
462
|
+
return {
|
|
463
|
+
...tags,
|
|
464
|
+
...{
|
|
465
|
+
description: tagParam.description,
|
|
466
|
+
},
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Applies comment tag (e.g. `@param`) values to the provided definition, if the value is defined.
|
|
471
|
+
*/
|
|
472
|
+
applyCommentTagValues(definition, tags) {
|
|
473
|
+
if (tags.codeExample) {
|
|
474
|
+
definition.codeExample = tags.codeExample;
|
|
475
|
+
definition.codeExampleLanguage = tags.codeExampleLanguage;
|
|
476
|
+
}
|
|
477
|
+
if (tags.deprecationWarning !== undefined) {
|
|
478
|
+
definition.deprecationWarning = tags.deprecationWarning;
|
|
479
|
+
}
|
|
480
|
+
if (tags.description) {
|
|
481
|
+
definition.description = tags.description;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
getDecorator(child) {
|
|
485
|
+
const name = child.decorators && child.decorators[0] && child.decorators[0].name;
|
|
486
|
+
if (name) {
|
|
487
|
+
return { name };
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
getPropertyName(property) {
|
|
491
|
+
const decorators = property.decorators && property.decorators[0];
|
|
492
|
+
// Use the Input's bound property name, if found.
|
|
493
|
+
// e.g. @Input('foobar')
|
|
494
|
+
return decorators?.arguments?.bindingPropertyName
|
|
495
|
+
? decorators.arguments.bindingPropertyName.replace(/(\'|\")/g, '')
|
|
496
|
+
: property.name;
|
|
497
|
+
}
|
|
498
|
+
getDefaultValue(child, tags) {
|
|
499
|
+
if (tags.defaultValue) {
|
|
500
|
+
return tags.defaultValue;
|
|
501
|
+
}
|
|
502
|
+
// TypeDoc version 0.20.x stopped auto-generating initializers for the default value
|
|
503
|
+
// (and replaced them with "...") due to the complicated logic it required.
|
|
504
|
+
// See: https://github.com/TypeStrong/typedoc/issues/1552
|
|
505
|
+
if (child.defaultValue === '...') {
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
return child.defaultValue;
|
|
509
|
+
}
|
|
510
|
+
getAnchorId(entry) {
|
|
511
|
+
return (entry.anchorId ||
|
|
512
|
+
this.typeDefinitionsProvider?.anchorIds[entry.name] ||
|
|
513
|
+
'');
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
SkyDocsTypeDocAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsTypeDocAdapterService, deps: [{ token: i1.SkyDocsTypeDefinitionsProvider, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
517
|
+
SkyDocsTypeDocAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsTypeDocAdapterService, providedIn: 'any' });
|
|
518
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsTypeDocAdapterService, decorators: [{
|
|
519
|
+
type: Injectable,
|
|
520
|
+
args: [{
|
|
521
|
+
providedIn: 'any',
|
|
522
|
+
}]
|
|
523
|
+
}], ctorParameters: function () { return [{ type: i1.SkyDocsTypeDefinitionsProvider, decorators: [{
|
|
524
|
+
type: Optional
|
|
525
|
+
}] }]; } });
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRHJELE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDOzs7QUFFckM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ3NCLHVCQUF3RDtRQUF4RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlDO0lBQzNFLENBQUM7SUFFRyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMxQyxNQUFNLFVBQVUsR0FBMkI7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUM5QjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDcEM7UUFFRCxPQUFPLFVBQVUs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ekQsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFFRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFtQjtRQUNyQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkQsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOzswSEExc0JVLDRCQUE0Qjs4SEFBNUIsNEJBQTRCLGNBRjNCLEtBQUs7NEZBRU4sNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBR0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vY2FsbC1zaWduYXR1cmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc0RlZmluaXRpb24gfSBmcm9tICcuL2NsYXNzLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ29tbWVudFRhZ3MgfSBmcm9tICcuL2NvbW1lbnQtdGFncyc7XG5cbmltcG9ydCB7IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIH0gZnJvbSAnLi9kaXJlY3RpdmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9lbnVtZXJhdGlvbi1tZW1iZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24gfSBmcm9tICcuL2luZGV4LXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLXByb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRob2QtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQaXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtYWxpYXMtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb25zLXByb3ZpZGVyJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLXBhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHtcbiAgVHlwZURvY0NvbW1lbnQsXG4gIFR5cGVEb2NFbnRyeSxcbiAgVHlwZURvY0VudHJ5Q2hpbGQsXG4gIFR5cGVEb2NQYXJhbWV0ZXIsXG4gIFR5cGVEb2NTaWduYXR1cmUsXG4gIFR5cGVEb2NUeXBlLFxuICBUeXBlRG9jVHlwZVBhcmFtZXRlcixcbn0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVEb2MgdHlwZXMgaW50byBTS1kgVVggZG9jcy10b29scyB0eXBlcywgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIHZhcmlvdXMgZGVmaW5pdGlvbnMgY29tcG9uZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHlwZURlZmluaXRpb25zUHJvdmlkZXI/OiBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NsYXNzRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgbWV0aG9kcyA9IHRoaXMuZ2V0Q2xhc3NNZXRob2RzKGVudHJ5KTtcbiAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ubWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9EaXJlY3RpdmVEZWZpbml0aW9uKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHNlbGVjdG9yOiB0aGlzLmdldFNlbGVjdG9yKGVudHJ5KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDbGFzc1Byb3BlcnRpZXMoZW50cnkpO1xuXG4gICAgY29uc3QgZXZlbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdPdXRwdXQnXG4gICAgKTtcbiAgICBpZiAoZXZlbnRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5ldmVudFByb3BlcnRpZXMgPSBldmVudFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdJbnB1dCdcbiAgICApO1xuICAgIGlmIChpbnB1dFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmlucHV0UHJvcGVydGllcyA9IGlucHV0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0VudW1lcmF0aW9uRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24ge1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLmdldEVudW1lcmF0aW9uTWVtYmVycyhlbnRyeSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG1lbWJlcnMsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvSW50ZXJmYWNlRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NJbnRlcmZhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9QaXBlRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc1BpcGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5nZXRDbGFzc01ldGhvZHMoZW50cnkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IG1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAndHJhbnNmb3JtJyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1BpcGVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHRyYW5zZm9ybU1ldGhvZCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1R5cGVBbGlhc0RlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgIGNvbW1lbnQ6IGVudHJ5LmNvbW1lbnQsXG4gICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICBlbnRyeS50eXBlLmRlY2xhcmF0aW9uPy5zaWduYXR1cmVzXG4gICAgICAgID8gZW50cnkudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgOiBlbnRyeS5jb21tZW50XG4gICAgKTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdG9yKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvclNvdXJjZSA9IGVudHJ5LmRlY29yYXRvcnNbMF0uYXJndW1lbnRzLm9iajtcbiAgICByZXR1cm4gZGVjb3JhdG9yU291cmNlLmluZGV4T2YoJ3NlbGVjdG9yOiBgJykgPiAtMVxuICAgICAgPyBkZWNvcmF0b3JTb3VyY2VcbiAgICAgICAgICAuc3BsaXQoJ3NlbGVjdG9yOiBgJylbMV1cbiAgICAgICAgICAuc3BsaXQoJ2AnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJylcbiAgICAgIDogZGVjb3JhdG9yU291cmNlLnNwbGl0KFwic2VsZWN0b3I6ICdcIilbMV0uc3BsaXQoXCInXCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc1Byb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICBjaGlsZC5raW5kU3RyaW5nID09PSAnUHJvcGVydHknIHx8IGNoaWxkLmtpbmRTdHJpbmcgPT09ICdBY2Nlc3NvcidcbiAgICAgIClcbiAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcblxuICAgICAgICAvKiBFbnN1cmUgd2UgYXJlIHByb3Blcmx5IGNhcHR1cmluZyBkZWZpbml0aW9ucyB3aGljaCB1c2UgYSBnZXR0ZXIvc2V0dGVyLiBGaW5hbCBjaGVjayBpcyBhIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQua2luZFN0cmluZyA9PT0gJ0FjY2Vzc29yJyAmJlxuICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAoY2hpbGQuc2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwIHx8IGNoaWxkLmdldFNpZ25hdHVyZS5sZW5ndGggPiAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYWluVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBtYWluVGFncyk7XG5cbiAgICAgICAgICBpZiAoY2hpbGQuZ2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5nZXRTaWduYXR1cmVbMF0uY29tbWVudCk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFnZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgZ2V0VGFncyk7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgZ2V0VGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuc2V0U2lnbmF0dXJlWzBdLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBzZXRUYWdzKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICFzZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgc2V0VGFncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFtYWluVGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgbWFpblRhZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdQcm9wZXJ0eScgJiZcbiAgICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICF0YWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuXG4gICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCAmJiAhdGFncy5leHRyYXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkLCB0YWdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRoaXMuZ2V0RGVjb3JhdG9yKGNoaWxkKTtcbiAgICAgICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgICAgIGRlZmluaXRpb24uZGVjb3JhdG9yID0gZGVjb3JhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSBlbnRyeS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkKSA9PiBjaGlsZC5raW5kU3RyaW5nID09PSAnQ29uc3RydWN0b3InXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT4gc2lnbmF0dXJlLmtpbmRTdHJpbmcgPT09ICdDb25zdHJ1Y3RvciBzaWduYXR1cmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtLmNvbW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIG1hdGNoaW5nUGFyYW1UYWdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc01ldGhvZHMoZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHMgPSBlbnRyeS5jaGlsZHJlblxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNoaWxkKSA9PlxuICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIC9ebmcvLnRlc3QoY2hpbGQubmFtZSkgPT09IGZhbHNlXG4gICAgICApXG4gICAgICAubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0UHJvcGVydHlOYW1lKGNoaWxkKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkKSxcbiAgICAgICAgICBpc1N0YXRpYzogISFjaGlsZC5mbGFncz8uaXNTdGF0aWMsXG4gICAgICAgICAgcGFyZW50TmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21tZW50cyBmb3IgbWV0aG9kcyBhcmUgc3RvcmVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLlxuICAgICAgICBjb25zdCBjb21tZW50ID0gY2hpbGQuc2lnbmF0dXJlc1swXS5jb21tZW50O1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjb21tZW50KTtcbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLmdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLnR5cGVQYXJhbWV0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGRlZmluaXRpb24udHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShtZXRob2RzLCBbJ25hbWUnXSwgWydhc2MnXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEludGVyZmFjZVByb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4gJiYgIWVudHJ5LmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgZW50cnkuY2hpbGRyZW4/Lm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgbGV0IHRhZ3M6IFNreURvY3NDb21tZW50VGFncyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIGNoaWxkLnNpZ25hdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBpc09wdGlvbmFsOiB0YWdzLmV4dHJhcy5yZXF1aXJlZCA/IGZhbHNlIDogISFjaGlsZC5mbGFncz8uaXNPcHRpb25hbCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IG9yZGVyQnkoZGVmaW5pdGlvbnMsIFsnaXNPcHRpb25hbCcsICduYW1lJ10sIFsnYXNjJywgJ2FzYyddKTtcblxuICAgIC8vIEFkZCBhbnkgaW5kZXggc2lnbmF0dXJlcywgZS5nLiBgW186IHN0cmluZ106IGFueWBcbiAgICBpZiAoZW50cnkuaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZW50cnkuaW5kZXhTaWduYXR1cmU7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICBuYW1lOiBpbmRleFNpZ25hdHVyZS5uYW1lLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgaW5kZXhTaWduYXR1cmU6IHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGluZGV4U2lnbmF0dXJlLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG4gICAgICBzb3J0ZWQucHVzaChkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnVtZXJhdGlvbk1lbWJlcnMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uTWVtYmVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbihjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGQpOiBTa3lEb2NzVHlwZURlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZURlZmluaXRpb247XG5cbiAgICBjb25zdCBraW5kU3RyaW5nID0gY2hpbGQua2luZFN0cmluZztcbiAgICBzd2l0Y2ggKGtpbmRTdHJpbmcpIHtcbiAgICAgIGNhc2UgJ0FjY2Vzc29yJzpcbiAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkLnNldFNpZ25hdHVyZVswXS5wYXJhbWV0ZXJzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5nZXRTaWduYXR1cmVbMF0pO1xuXG4gICAgICBjYXNlICdNZXRob2QnOlxuICAgICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNhbGxTaWduYXR1cmU6IHRoaXMuZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogY2hpbGQuc2lnbmF0dXJlc1swXS5uYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nID1cbiAgICAgICAgICBjaGlsZC50eXBlLm5hbWUgfHwgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8ubmFtZSB8fCBjaGlsZC50eXBlLnZhbHVlO1xuXG4gICAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogY2hpbGQudHlwZS50eXBlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuaW9uP1xuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlcykge1xuICAgICAgICAgIGRlZmluaXRpb24udW5pb25UeXBlcyA9IGNoaWxkLnR5cGUudHlwZXMubWFwKCh0KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7IHR5cGU6IHQgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCByZWZsZWN0aW9uIHR5cGVzLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQudHlwZS50eXBlID09PSAncmVmbGVjdGlvbicgfHxcbiAgICAgICAgICBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy50eXBlID09PSAncmVmbGVjdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPVxuICAgICAgICAgICAgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8udHlwZSA9PT0gJ3JlZmxlY3Rpb24nXG4gICAgICAgICAgICAgID8gY2hpbGQudHlwZS5lbGVtZW50VHlwZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IGNoaWxkLnR5cGUuZGVjbGFyYXRpb247XG4gICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnNpZ25hdHVyZXMpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5jYWxsU2lnbmF0dXJlID0gdGhpcy5nZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXhTaWduYXR1cmUgPSBkZWNsYXJhdGlvbi5pbmRleFNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pbmRleFNpZ25hdHVyZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oaW5kZXhTaWduYXR1cmUpO1xuICAgICAgICAgICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyBlbHNlIGlmIChkZWNsYXJhdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uLnR5cGVMaXRlcmFsID0ge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZ2V0SW50ZXJmYWNlUHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZGVjbGFyYXRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZSA9PT0gJ3R5cGVPcGVyYXRvcicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBgJHtjaGlsZC50eXBlLm9wZXJhdG9yfSAke2NoaWxkLnR5cGUudGFyZ2V0Lm5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLnR5cGVBcmd1bWVudHMgPSB0aGlzLmdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgICAgICAgICAgY2hpbGQudHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgIGNhbGxTaWduYXR1cmU6IFR5cGVEb2NTaWduYXR1cmUsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghY2FsbFNpZ25hdHVyZS5wYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb25bXSA9XG4gICAgICBjYWxsU2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldFBhcmFtZXRlckNvbW1lbnRUYWdzKHAsIHBhcmVudFRhZ3MpO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShwLCB0YWdzKTtcbiAgICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHRoaXMuZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMocC50eXBlKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXI6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uID0ge1xuICAgICAgICAgIGlzT3B0aW9uYWw6ICEhKGRlZmF1bHRWYWx1ZSB8fCAhIXAuZmxhZ3M/LmlzT3B0aW9uYWwpLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHApLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmFtZXRlci5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhcmFtZXRlci5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJhbWV0ZXIudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgIHR5cGVDb25maWc6IFR5cGVEb2NUeXBlXG4gICk6IFNreURvY3NUeXBlRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIXR5cGVDb25maWcgfHwgIXR5cGVDb25maWcudHlwZUFyZ3VtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlQ29uZmlnLnR5cGVBcmd1bWVudHMubWFwKCh0eXBlQXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHsgdHlwZTogdHlwZUFyZ3VtZW50IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICBjYWxsU2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlLFxuICAgIHRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBTa3lEb2NzQ2FsbFNpZ25hdHVyZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiA9IHtcbiAgICAgIHJldHVyblR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2FsbFNpZ25hdHVyZSksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlckRlZmluaXRpb25zKGNhbGxTaWduYXR1cmUsIHRhZ3MpO1xuICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgIHNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZVxuICApOiBTa3lEb2NzSW5kZXhTaWduYXR1cmVEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB7XG4gICAgICAgIG5hbWU6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdLm5hbWUsXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlLnBhcmFtZXRlcnNbMF0pLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgdHlwZVBhcmFtZXRlcnM6IFR5cGVEb2NUeXBlUGFyYW1ldGVyW11cbiAgKTogU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghdHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogdHlwZVBhcmFtLm5hbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZVBhcmFtLnR5cGUpIHtcbiAgICAgICAgZGVmaW5pdGlvbi50eXBlID0gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgICAgdHlwZTogdHlwZVBhcmFtLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tbWVudFRhZ3MoY29tbWVudDogVHlwZURvY0NvbW1lbnQpOiBTa3lEb2NzQ29tbWVudFRhZ3Mge1xuICAgIGxldCBjb2RlRXhhbXBsZTogc3RyaW5nO1xuICAgIGxldCBjb2RlRXhhbXBsZUxhbmd1YWdlOiBzdHJpbmcgPSAnbWFya3VwJztcbiAgICBsZXQgZGVwcmVjYXRpb25XYXJuaW5nOiBzdHJpbmc7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgICBsZXQgcGFyYW1ldGVyczoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB9W107XG5cbiAgICBjb25zdCBleHRyYXM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9ID0ge307XG5cbiAgICBpZiAoY29tbWVudCkge1xuICAgICAgaWYgKGNvbW1lbnQudGFncykge1xuICAgICAgICBjb21tZW50LnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgICAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nID0gdGFnLnRleHQudHJpbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0YWcudGV4dC50cmltKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdleGFtcGxlJzpcbiAgICAgICAgICAgICAgY29kZUV4YW1wbGUgPSB0YWcudGV4dC50cmltKCkuc3BsaXQoJ2BgYCcpWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb2RlRXhhbXBsZS5zcGxpdCgnXFxuJylbMF07XG4gICAgICAgICAgICAgIGlmIChsYW5ndWFnZSA9PT0gJ21hcmt1cCcgfHwgbGFuZ3VhZ2UgPT09ICd0eXBlc2NyaXB0Jykge1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlID0gY29kZUV4YW1wbGUuc2xpY2UobGFuZ3VhZ2UubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwYXJhbSc6XG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdO1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRhZy5wYXJhbSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFnLnRleHQudHJpbSgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGV4dHJhc1t0YWcudGFnXSA9IHRhZy50ZXh0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBkZXNjcmlwdGlvbiA9IChjb21tZW50LnNob3J0VGV4dCB8fCBjb21tZW50LnRleHQgfHwgJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZUV4YW1wbGUsXG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRyYXMsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGFyYW1ldGVyIGRlc2NyaXB0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnQncyAoZnVuY3Rpb24vbWV0aG9kKSBjb21tZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQYXJhbWV0ZXJDb21tZW50VGFncyhcbiAgICBwYXJhbWV0ZXI6IFR5cGVEb2NQYXJhbWV0ZXIsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NDb21tZW50VGFncyB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MocGFyYW1ldGVyLmNvbW1lbnQpO1xuICAgIGNvbnN0IHBhcmFtVGFncyA9IHBhcmVudFRhZ3MucGFyYW1ldGVycztcbiAgICBjb25zdCB0YWdQYXJhbSA9IHBhcmFtVGFnc1xuICAgICAgPyBwYXJhbVRhZ3MuZmluZCgocGFyYW0pID0+IHBhcmFtLm5hbWUgPT09IHBhcmFtZXRlci5uYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRhZ1BhcmFtIHx8ICF0YWdQYXJhbS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhZ3MsXG4gICAgICAuLi57XG4gICAgICAgIGRlc2NyaXB0aW9uOiB0YWdQYXJhbS5kZXNjcmlwdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGNvbW1lbnQgdGFnIChlLmcuIGBAcGFyYW1gKSB2YWx1ZXMgdG8gdGhlIHByb3ZpZGVkIGRlZmluaXRpb24sIGlmIHRoZSB2YWx1ZSBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUNvbW1lbnRUYWdWYWx1ZXMoXG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgY29kZUV4YW1wbGU/OiBzdHJpbmc7XG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlPzogc3RyaW5nO1xuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nPzogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRhZ3MuY29kZUV4YW1wbGUpIHtcbiAgICAgIGRlZmluaXRpb24uY29kZUV4YW1wbGUgPSB0YWdzLmNvZGVFeGFtcGxlO1xuICAgICAgZGVmaW5pdGlvbi5jb2RlRXhhbXBsZUxhbmd1YWdlID0gdGFncy5jb2RlRXhhbXBsZUxhbmd1YWdlO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlcHJlY2F0aW9uV2FybmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZpbml0aW9uLmRlcHJlY2F0aW9uV2FybmluZyA9IHRhZ3MuZGVwcmVjYXRpb25XYXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlc2NyaXB0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmRlc2NyaXB0aW9uID0gdGFncy5kZXNjcmlwdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlY29yYXRvcihcbiAgICBjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGRcbiAgKTogU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBjaGlsZC5kZWNvcmF0b3JzICYmIGNoaWxkLmRlY29yYXRvcnNbMF0gJiYgY2hpbGQuZGVjb3JhdG9yc1swXS5uYW1lO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4geyBuYW1lIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHk6IFR5cGVEb2NFbnRyeUNoaWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWNvcmF0b3JzID0gcHJvcGVydHkuZGVjb3JhdG9ycyAmJiBwcm9wZXJ0eS5kZWNvcmF0b3JzWzBdO1xuICAgIC8vIFVzZSB0aGUgSW5wdXQncyBib3VuZCBwcm9wZXJ0eSBuYW1lLCBpZiBmb3VuZC5cbiAgICAvLyBlLmcuIEBJbnB1dCgnZm9vYmFyJylcbiAgICByZXR1cm4gZGVjb3JhdG9ycz8uYXJndW1lbnRzPy5iaW5kaW5nUHJvcGVydHlOYW1lXG4gICAgICA/IGRlY29yYXRvcnMuYXJndW1lbnRzLmJpbmRpbmdQcm9wZXJ0eU5hbWUucmVwbGFjZSgvKFxcJ3xcXFwiKS9nLCAnJylcbiAgICAgIDogcHJvcGVydHkubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGFncy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0YWdzLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUeXBlRG9jIHZlcnNpb24gMC4yMC54IHN0b3BwZWQgYXV0by1nZW5lcmF0aW5nIGluaXRpYWxpemVycyBmb3IgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAvLyAoYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBcIi4uLlwiKSBkdWUgdG8gdGhlIGNvbXBsaWNhdGVkIGxvZ2ljIGl0IHJlcXVpcmVkLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL1R5cGVTdHJvbmcvdHlwZWRvYy9pc3N1ZXMvMTU1MlxuICAgIGlmIChjaGlsZC5kZWZhdWx0VmFsdWUgPT09ICcuLi4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkLmRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QW5jaG9ySWQoZW50cnk6IFR5cGVEb2NFbnRyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVudHJ5LmFuY2hvcklkIHx8XG4gICAgICB0aGlzLnR5cGVEZWZpbml0aW9uc1Byb3ZpZGVyPy5hbmNob3JJZHNbZW50cnkubmFtZV0gfHxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RvY3MtdG9vbHMvc3JjL21vZHVsZXMvdHlwZS1kZWZpbml0aW9ucy90eXBlZG9jLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFR5cGVEb2NDb21tZW50IHtcbiAgc2hvcnRUZXh0Pzogc3RyaW5nO1xuXG4gIHRhZ3M/OiB7XG4gICAgcGFyYW0/OiBzdHJpbmc7XG4gICAgdGFnOlxuICAgICAgfCAnZGVmYXVsdCdcbiAgICAgIHwgJ2RlZmF1bHRWYWx1ZSdcbiAgICAgIHwgJ2RlcHJlY2F0ZWQnXG4gICAgICB8ICdleGFtcGxlJ1xuICAgICAgfCAncGFyYW0nXG4gICAgICB8ICdyZXF1aXJlZCc7XG4gICAgdGV4dDogc3RyaW5nO1xuICB9W107XG5cbiAgdGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jU291cmNlIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jU2lnbmF0dXJlIHtcbiAgY29tbWVudD86IFR5cGVEb2NDb21tZW50O1xuXG4gIGtpbmRTdHJpbmc/OiAnQ2FsbCBzaWduYXR1cmUnIHwgJ0NvbnN0cnVjdG9yIHNpZ25hdHVyZScgfCAnSW5kZXggc2lnbmF0dXJlJztcblxuICBuYW1lOiBzdHJpbmc7XG5cbiAgcGFyYW1ldGVycz86IFR5cGVEb2NQYXJhbWV0ZXJbXTtcblxuICByZXR1cm5UeXBlPzogVHlwZURvY1R5cGU7XG5cbiAgdHlwZT86IFR5cGVEb2NUeXBlO1xuXG4gIHR5cGVQYXJhbWV0ZXI/OiBUeXBlRG9jVHlwZVBhcmFtZXRlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEb2NUeXBlUGFyYW1ldGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBraW5kU3RyaW5nOiAnVHlwZSBwYXJhbWV0ZXInO1xuICB0eXBlPzogVHlwZURvY1R5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY1R5cGUge1xuICBjb25zdHJhaW50Pzoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgfTtcblxuICBjYWxsU2lnbmF0dXJlPzogVHlwZURvY1NpZ25hdHVyZTtcblxuICBkZWNsYXJhdGlvbj86IHtcbiAgICBjaGlsZHJlbj86IFR5cGVEb2NFbnRyeUNoaWxkW107XG4gICAgaW5kZXhTaWduYXR1cmU/OiBUeXBlRG9jU2lnbmF0dXJlO1xuICAgIHNpZ25hdHVyZXM/OiBUeXBlRG9jU2lnbmF0dXJlW107XG4gIH07XG5cbiAgZWxlbWVudFR5cGU/OiBUeXBlRG9jVHlwZTtcblxuICBuYW1lPzogc3RyaW5nO1xuXG4gIG9wZXJhdG9yPzogJ2tleW9mJztcblxuICB0YXJnZXQ/OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9O1xuXG4gIHR5cGU/OlxuICAgIHwgJ2FycmF5J1xuICAgIHwgJ2ludHJpbnNpYydcbiAgICB8ICdyZWZlcmVuY2UnXG4gICAgfCAncmVmbGVjdGlvbidcbiAgICB8ICdzdHJpbmdMaXRlcmFsJ1xuICAgIHwgJ3R5cGVQYXJhbWV0ZXInXG4gICAgfCAndHlwZU9wZXJhdG9yJ1xuICAgIHwgJ3VuaW9uJ1xuICAgIHwgJ3Vua25vd24nO1xuXG4gIHR5cGVBcmd1bWVudHM/OiBUeXBlRG9jVHlwZVtdO1xuXG4gIHR5cGVzPzogVHlwZURvY1R5cGVbXTtcblxuICB2YWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jUGFyYW1ldGVyIHtcbiAgY29tbWVudD86IFR5cGVEb2NDb21tZW50O1xuXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICBraW5kU3RyaW5nOiAnUGFyYW1ldGVyJztcblxuICBuYW1lOiBzdHJpbmc7XG5cbiAgdHlwZTogVHlwZURvY1R5cGU7XG5cbiAgZmxhZ3M/OiB7XG4gICAgaXNPcHRpb25hbD86IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY0VudHJ5Q2hpbGQge1xuICBjb21tZW50PzogVHlwZURvY0NvbW1lbnQ7XG5cbiAgZGVjb3JhdG9ycz86IHtcbiAgICBhcmd1bWVudHM/OiB7XG4gICAgICBiaW5kaW5nUHJvcGVydHlOYW1lPzogc3RyaW5nO1xuICAgIH07XG4gICAgbmFtZTogJ0lucHV0JyB8ICdPdXRwdXQnO1xuICAgIHR5cGU6IFR5cGVEb2NUeXBlO1xuICB9W107XG5cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gIGZsYWdzPzoge1xuICAgIGlzT3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGlzU3RhdGljPzogYm9vbGVhbjtcbiAgfTtcblxuICBraW5kU3RyaW5nPzpcbiAgICB8ICdBY2Nlc3NvcidcbiAgICB8ICdDYWxsIHNpZ25hdHVyZSdcbiAgICB8ICdDb25zdHJ1Y3RvcidcbiAgICB8ICdDb25zdHJ1Y3RvciBzaWduYXR1cmUnXG4gICAgfCAnSW5kZXggc2lnbmF0dXJlJ1xuICAgIHwgJ0VudW1lcmF0aW9uIG1lbWJlcidcbiAgICB8ICdQYXJhbWV0ZXInXG4gICAgfCAnUHJvcGVydHknXG4gICAgfCAnTWV0aG9kJztcblxuICBnZXRTaWduYXR1cmU/OiB7XG4gICAgY29tbWVudDogVHlwZURvY0NvbW1lbnQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IFR5cGVEb2NUeXBlO1xuICB9W107XG5cbiAgbmFtZT86IHN0cmluZztcblxuICBzZXRTaWduYXR1cmU/OiB7XG4gICAgY29tbWVudDogVHlwZURvY0NvbW1lbnQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM/OiBUeXBlRG9jUGFyYW1ldGVyW107XG4gICAgdHlwZTogVHlwZURvY1R5cGU7XG4gIH1bXTtcblxuICBzaWduYXR1cmVzPzogVHlwZURvY1NpZ25hdHVyZVtdO1xuXG4gIHNvdXJjZXM/OiBUeXBlRG9jU291cmNlW107XG5cbiAgdHlwZT86IFR5cGVEb2NUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEb2NFbnRyeSB7XG4gIGFuY2hvcklkPzogc3RyaW5nO1xuXG4gIGNoaWxkcmVuPzogVHlwZURvY0VudHJ5Q2hpbGRbXTtcblxuICBjb21tZW50PzogVHlwZURvY0NvbW1lbnQ7XG5cbiAgZGVjb3JhdG9ycz86IHtcbiAgICBhcmd1bWVudHM/OiB7XG4gICAgICBvYmo/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBuYW1lOiAnQ29tcG9uZW50JyB8ICdEaXJlY3RpdmUnIHwgJ0luamVjdGFibGUnIHwgJ05nTW9kdWxlJyB8ICdQaXBlJztcbiAgICB0eXBlOiBUeXBlRG9jVHlwZTtcbiAgfVtdO1xuXG4gIGtpbmRTdHJpbmc/OiAnQ2xhc3MnIHwgJ0VudW1lcmF0aW9uJyB8ICdJbnRlcmZhY2UnIHwgJ1R5cGUgYWxpYXMnO1xuXG4gIGluZGV4U2lnbmF0dXJlPzogVHlwZURvY1NpZ25hdHVyZTtcblxuICBuYW1lPzogc3RyaW5nO1xuXG4gIHNvdXJjZXM/OiBUeXBlRG9jU291cmNlW107XG5cbiAgdHlwZT86IFR5cGVEb2NUeXBlO1xuXG4gIHR5cGVQYXJhbWV0ZXI/OiBUeXBlRG9jVHlwZVBhcmFtZXRlcltdO1xufVxuIl19
|