@lowcodeunit/applications-flow-common 1.33.92-lets-get-social-ish → 1.33.98-lets-get-social-ish
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/bundles/lowcodeunit-applications-flow-common.umd.js +1157 -564
- package/bundles/lowcodeunit-applications-flow-common.umd.js.map +1 -1
- package/bundles/lowcodeunit-applications-flow-common.umd.min.js +2 -2
- package/bundles/lowcodeunit-applications-flow-common.umd.min.js.map +1 -1
- package/esm2015/lcu.api.js +2 -1
- package/esm2015/lib/applications-flow.module.js +18 -6
- package/esm2015/lib/controls/build-pipeline-form/build-pipeline-form.component.js +79 -0
- package/esm2015/lib/controls/devops-source-control-form/devops-source-control-form.component.js +311 -0
- package/esm2015/lib/controls/processor-details-form/processor-details-form.component.js +56 -53
- package/esm2015/lib/controls/security-toggle/security-toggle.component.js +19 -19
- package/esm2015/lib/controls/source-control-form/source-control-form.component.js +59 -0
- package/esm2015/lib/elements/analytics-card/analytics-card.component.js +1 -1
- package/esm2015/lib/elements/base-form/base-form.component.js +5 -5
- package/esm2015/lib/elements/feed-card-sm/feed-card-sm.component.js +1 -1
- package/esm2015/lib/elements/gh-control/gh-control.component.js +1 -1
- package/esm2015/lib/elements/main-feed-card/main-feed-card.component.js +1 -1
- package/esm2015/lib/elements/project-info-card/project-info-card.component.js +1 -1
- package/esm2015/lib/elements/projects/controls/builds/builds.component.js +4 -9
- package/esm2015/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.js +6 -6
- package/esm2015/lib/elements/projects/controls/forms/source-control/source-control.component.js +3 -6
- package/esm2015/lib/elements/projects/controls/header/header.component.js +7 -7
- package/esm2015/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.js +1 -1
- package/esm2015/lib/elements/projects/controls/project-items/project-items.component.js +7 -7
- package/esm2015/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.js +8 -10
- package/esm2015/lib/elements/projects/controls/tabs/devops/devops.component.js +7 -7
- package/esm2015/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.js +7 -7
- package/esm2015/lib/elements/projects/controls/tabs/domains/domains.component.js +6 -6
- package/esm2015/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.js +6 -6
- package/esm2015/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.js +6 -6
- package/esm2015/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.js +6 -6
- package/esm2015/lib/elements/projects/projects.component.js +16 -143
- package/esm2015/lib/elements/slotted-card/slotted-card.component.js +4 -3
- package/esm2015/lib/services/eac.service.js +217 -0
- package/esm2015/lowcodeunit-applications-flow-common.js +30 -28
- package/fesm2015/lowcodeunit-applications-flow-common.js +762 -315
- package/fesm2015/lowcodeunit-applications-flow-common.js.map +1 -1
- package/lcu.api.d.ts +1 -0
- package/lcu.api.d.ts.map +1 -1
- package/lib/applications-flow.module.d.ts.map +1 -1
- package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts +32 -0
- package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts.map +1 -0
- package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts +70 -0
- package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts.map +1 -0
- package/lib/controls/processor-details-form/processor-details-form.component.d.ts +3 -2
- package/lib/controls/processor-details-form/processor-details-form.component.d.ts.map +1 -1
- package/lib/controls/source-control-form/source-control-form.component.d.ts +26 -0
- package/lib/controls/source-control-form/source-control-form.component.d.ts.map +1 -0
- package/lib/elements/base-form/base-form.component.d.ts +3 -3
- package/lib/elements/base-form/base-form.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/builds/builds.component.d.ts +1 -3
- package/lib/elements/projects/controls/builds/builds.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts +3 -3
- package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts +1 -3
- package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/header/header.component.d.ts +3 -3
- package/lib/elements/projects/controls/header/header.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/project-items/project-items.component.d.ts +3 -3
- package/lib/elements/projects/controls/project-items/project-items.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts.map +1 -1
- package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts +3 -3
- package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts.map +1 -1
- package/lib/elements/projects/projects.component.d.ts +4 -11
- package/lib/elements/projects/projects.component.d.ts.map +1 -1
- package/lib/elements/slotted-card/slotted-card.component.d.ts +1 -0
- package/lib/elements/slotted-card/slotted-card.component.d.ts.map +1 -1
- package/lib/services/eac.service.d.ts +54 -0
- package/lib/services/eac.service.d.ts.map +1 -0
- package/lowcodeunit-applications-flow-common.d.ts +29 -27
- package/lowcodeunit-applications-flow-common.d.ts.map +1 -1
- package/lowcodeunit-applications-flow-common.metadata.json +1 -1
- package/package.json +1 -1
- package/esm2015/lib/services/applications-flow-events.service.js +0 -83
- package/lib/services/applications-flow-events.service.d.ts +0 -58
- package/lib/services/applications-flow-events.service.d.ts.map +0 -1
package/esm2015/lib/controls/devops-source-control-form/devops-source-control-form.component.js
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
2
|
+
import { Component, Input, ViewChild } from '@angular/core';
|
|
3
|
+
import { FormBuilder, FormControl, Validators } from '@angular/forms';
|
|
4
|
+
import { ApplicationsFlowService } from '../../services/applications-flow.service';
|
|
5
|
+
import { ProjectHostingDetails } from '../../state/applications-flow.state';
|
|
6
|
+
export class DevopsSourceControlFormComponent {
|
|
7
|
+
// Constructors
|
|
8
|
+
constructor(formBuilder, appsFlowSvc) {
|
|
9
|
+
this.formBuilder = formBuilder;
|
|
10
|
+
this.appsFlowSvc = appsFlowSvc;
|
|
11
|
+
this.SeparatorKeysCodes = [ENTER, COMMA];
|
|
12
|
+
this.BuildPath = null;
|
|
13
|
+
this.HostingDetails = new ProjectHostingDetails();
|
|
14
|
+
this.SelectedBranches = [];
|
|
15
|
+
this.SourceControlRoot = '';
|
|
16
|
+
this.UseBranches = true;
|
|
17
|
+
this.UseBuildPath = false;
|
|
18
|
+
}
|
|
19
|
+
// Fields
|
|
20
|
+
// Properties
|
|
21
|
+
get BranchesFormControl() {
|
|
22
|
+
return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
|
|
23
|
+
}
|
|
24
|
+
get BuildPathFormControl() {
|
|
25
|
+
return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
|
|
26
|
+
}
|
|
27
|
+
get DevOpsActionLookups() {
|
|
28
|
+
return Object.keys(this.DevOpsActions || {});
|
|
29
|
+
}
|
|
30
|
+
get DevOpsActionLookup() {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
if (!!((_a = this.DevOpsActionLookupFormControl) === null || _a === void 0 ? void 0 : _a.value)) {
|
|
33
|
+
return this.DevOpsActionLookupFormControl.value;
|
|
34
|
+
}
|
|
35
|
+
if (!!((_b = this.EditingSourceControl) === null || _b === void 0 ? void 0 : _b.DevOpsActionTriggerLookups)) {
|
|
36
|
+
return (_c = this.EditingSourceControl) === null || _c === void 0 ? void 0 : _c.DevOpsActionTriggerLookups[0];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
get DevOpsActionLookupFormControl() {
|
|
43
|
+
return this.DevOpsSourceControlFormGroup.get('devOpsActionLookup');
|
|
44
|
+
}
|
|
45
|
+
get DevOpsActions() {
|
|
46
|
+
return this.Environment.DevOpsActions || {};
|
|
47
|
+
}
|
|
48
|
+
get EditingSourceControl() {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
let sc = ((_a = this.Environment) === null || _a === void 0 ? void 0 : _a.Sources) ? (_b = this.Environment) === null || _b === void 0 ? void 0 : _b.Sources[this.EditingSourceControlLookup] : null;
|
|
51
|
+
if (sc == null && this.EditingSourceControlLookup) {
|
|
52
|
+
sc = {};
|
|
53
|
+
}
|
|
54
|
+
return sc;
|
|
55
|
+
}
|
|
56
|
+
get MainBranchFormControl() {
|
|
57
|
+
return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'mainBranch');
|
|
58
|
+
}
|
|
59
|
+
get OrganizationFormControl() {
|
|
60
|
+
return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'organization');
|
|
61
|
+
}
|
|
62
|
+
get RepositoryFormControl() {
|
|
63
|
+
return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'repository');
|
|
64
|
+
}
|
|
65
|
+
// Life Cycle
|
|
66
|
+
ngAfterViewInit() { }
|
|
67
|
+
ngOnDestroy() {
|
|
68
|
+
this.destroyFormControls();
|
|
69
|
+
}
|
|
70
|
+
ngOnInit() {
|
|
71
|
+
this.setupFormControls();
|
|
72
|
+
this.RefreshOrganizations();
|
|
73
|
+
}
|
|
74
|
+
// API Methods
|
|
75
|
+
AddBranchOption(event) {
|
|
76
|
+
this.addBranchOption(event.value);
|
|
77
|
+
event.input.value = '';
|
|
78
|
+
}
|
|
79
|
+
BranchOptionSelected(event) {
|
|
80
|
+
this.addBranchOption(event.option.value);
|
|
81
|
+
}
|
|
82
|
+
BranchesChanged(branches) {
|
|
83
|
+
this.loadProjectHostingDetails();
|
|
84
|
+
}
|
|
85
|
+
BuildPathChanged(event) {
|
|
86
|
+
}
|
|
87
|
+
CreateRepository() {
|
|
88
|
+
this.CreatingRepository = true;
|
|
89
|
+
this.RepositoryFormControl.reset();
|
|
90
|
+
}
|
|
91
|
+
CancelCreateRepository() {
|
|
92
|
+
this.CreatingRepository = false;
|
|
93
|
+
}
|
|
94
|
+
DevOpsActionLookupChanged(event) {
|
|
95
|
+
this.configureDevOpsAction();
|
|
96
|
+
}
|
|
97
|
+
MainBranchChanged(event) {
|
|
98
|
+
this.emitBranchesChanged();
|
|
99
|
+
}
|
|
100
|
+
OrganizationChanged(event) {
|
|
101
|
+
const org = this.OrganizationFormControl;
|
|
102
|
+
this.RepositoryFormControl.reset();
|
|
103
|
+
if (this.UseBranches) {
|
|
104
|
+
this.BranchesFormControl.reset();
|
|
105
|
+
this.SelectedBranches = [];
|
|
106
|
+
}
|
|
107
|
+
this.listRepositories();
|
|
108
|
+
}
|
|
109
|
+
RefreshOrganizations() {
|
|
110
|
+
var _a, _b, _c;
|
|
111
|
+
// this.Loading = true;
|
|
112
|
+
this.listOrganizations();
|
|
113
|
+
(_a = this.OrganizationFormControl) === null || _a === void 0 ? void 0 : _a.reset();
|
|
114
|
+
(_b = this.RepositoryFormControl) === null || _b === void 0 ? void 0 : _b.reset();
|
|
115
|
+
if (this.UseBranches) {
|
|
116
|
+
(_c = this.BranchesFormControl) === null || _c === void 0 ? void 0 : _c.reset();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
RemoveBranchOption(option) {
|
|
120
|
+
const index = this.SelectedBranches.indexOf(option);
|
|
121
|
+
if (index >= 0) {
|
|
122
|
+
this.SelectedBranches.splice(index, 1);
|
|
123
|
+
}
|
|
124
|
+
this.emitBranchesChanged();
|
|
125
|
+
}
|
|
126
|
+
RepositoryChanged(event) {
|
|
127
|
+
const repo = this.RepositoryFormControl;
|
|
128
|
+
if (this.UseBranches) {
|
|
129
|
+
this.BranchesFormControl.reset();
|
|
130
|
+
this.SelectedBranches = [];
|
|
131
|
+
this.listBranches();
|
|
132
|
+
}
|
|
133
|
+
if (!this.UseBranches) {
|
|
134
|
+
this.listBuildPaths();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
SaveRepository() {
|
|
138
|
+
this.Loading = true;
|
|
139
|
+
const org = this.OrganizationFormControl.value;
|
|
140
|
+
const repoName = this.RepositoryFormControl.value;
|
|
141
|
+
this.appsFlowSvc
|
|
142
|
+
.CreateRepository(org, repoName)
|
|
143
|
+
.subscribe((response) => {
|
|
144
|
+
if (response.Status.Code === 0) {
|
|
145
|
+
this.listRepositories(repoName);
|
|
146
|
+
this.CreatingRepository = false;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// TODO: Need to surface an error to the user...
|
|
150
|
+
this.Loading = false;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Helpers
|
|
155
|
+
addBranchOption(value) {
|
|
156
|
+
value = (value || '').trim();
|
|
157
|
+
if (value && this.SelectedBranches.indexOf(value) < 0) {
|
|
158
|
+
this.SelectedBranches.push(value);
|
|
159
|
+
}
|
|
160
|
+
this.BranchesInput.nativeElement.blur();
|
|
161
|
+
this.emitBranchesChanged();
|
|
162
|
+
}
|
|
163
|
+
configureDevOpsAction() {
|
|
164
|
+
setTimeout(() => {
|
|
165
|
+
this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
|
|
166
|
+
}, 0);
|
|
167
|
+
}
|
|
168
|
+
destroyFormControls() {
|
|
169
|
+
var _a, _b, _c, _d;
|
|
170
|
+
this.DevOpsSourceControlFormGroup.removeControl([this.SourceControlRoot, 'mainBranch'].join(''));
|
|
171
|
+
(_a = this.DevOpsSourceControlFormGroup) === null || _a === void 0 ? void 0 : _a.removeControl([this.SourceControlRoot, 'branches'].join(''));
|
|
172
|
+
(_b = this.DevOpsSourceControlFormGroup) === null || _b === void 0 ? void 0 : _b.removeControl([this.SourceControlRoot, 'buildPath'].join(''));
|
|
173
|
+
this.SelectedBranches = [];
|
|
174
|
+
(_c = this.DevOpsSourceControlFormGroup) === null || _c === void 0 ? void 0 : _c.removeControl([this.SourceControlRoot, 'organization'].join(''));
|
|
175
|
+
(_d = this.DevOpsSourceControlFormGroup) === null || _d === void 0 ? void 0 : _d.removeControl([this.SourceControlRoot, 'repository'].join(''));
|
|
176
|
+
}
|
|
177
|
+
emitBranchesChanged() {
|
|
178
|
+
var _a, _b;
|
|
179
|
+
if (((_a = this.SelectedBranches) === null || _a === void 0 ? void 0 : _a.length) > 0 &&
|
|
180
|
+
(!this.MainBranchFormControl.value ||
|
|
181
|
+
this.SelectedBranches.indexOf(this.MainBranchFormControl.value) < 0)) {
|
|
182
|
+
this.MainBranchFormControl.setValue(this.SelectedBranches.find((branch) => branch === 'main' || branch === 'master') || this.SelectedBranches[0]);
|
|
183
|
+
}
|
|
184
|
+
else if (((_b = this.SelectedBranches) === null || _b === void 0 ? void 0 : _b.length) <= 0) {
|
|
185
|
+
this.MainBranchFormControl.reset();
|
|
186
|
+
}
|
|
187
|
+
this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
|
|
188
|
+
this.BranchesChanged(this.SelectedBranches || []);
|
|
189
|
+
}
|
|
190
|
+
listBranches() {
|
|
191
|
+
if (this.UseBranches) {
|
|
192
|
+
this.Loading = true;
|
|
193
|
+
this.appsFlowSvc
|
|
194
|
+
.ListBranches(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
|
|
195
|
+
.subscribe((response) => {
|
|
196
|
+
var _a, _b, _c;
|
|
197
|
+
this.BranchOptions = response.Model;
|
|
198
|
+
this.Loading = false;
|
|
199
|
+
if (((_b = (_a = this.EditingSourceControl) === null || _a === void 0 ? void 0 : _a.Branches) === null || _b === void 0 ? void 0 : _b.length) > 0) {
|
|
200
|
+
this.SelectedBranches = this.EditingSourceControl.Branches;
|
|
201
|
+
}
|
|
202
|
+
else if (((_c = this.BranchOptions) === null || _c === void 0 ? void 0 : _c.length) === 1) {
|
|
203
|
+
this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
|
|
204
|
+
this.SelectedBranches = [this.BranchOptions[0].Name];
|
|
205
|
+
}
|
|
206
|
+
this.emitBranchesChanged();
|
|
207
|
+
this.listBuildPaths();
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
listBuildPaths() {
|
|
212
|
+
if (this.UseBuildPath) {
|
|
213
|
+
this.Loading = true;
|
|
214
|
+
this.appsFlowSvc
|
|
215
|
+
.ListBuildPaths(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
|
|
216
|
+
.subscribe((response) => {
|
|
217
|
+
var _a;
|
|
218
|
+
this.BuildPathOptions = response.Model;
|
|
219
|
+
this.Loading = false;
|
|
220
|
+
if (((_a = this.BuildPathOptions) === null || _a === void 0 ? void 0 : _a.length) === 1) {
|
|
221
|
+
this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
listOrganizations() {
|
|
227
|
+
this.Loading = true;
|
|
228
|
+
this.appsFlowSvc
|
|
229
|
+
.ListOrganizations()
|
|
230
|
+
.subscribe((response) => {
|
|
231
|
+
var _a;
|
|
232
|
+
this.OrganizationOptions = response.Model;
|
|
233
|
+
this.Loading = false;
|
|
234
|
+
if ((_a = this.EditingSourceControl) === null || _a === void 0 ? void 0 : _a.Organization) {
|
|
235
|
+
setTimeout(() => {
|
|
236
|
+
var _a;
|
|
237
|
+
this.OrganizationFormControl.setValue(this.EditingSourceControl.Organization);
|
|
238
|
+
this.listRepositories((_a = this.EditingSourceControl) === null || _a === void 0 ? void 0 : _a.Repository);
|
|
239
|
+
}, 0);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
listRepositories(activeRepo = null) {
|
|
244
|
+
this.Loading = true;
|
|
245
|
+
this.appsFlowSvc
|
|
246
|
+
.ListRepositories(this.OrganizationFormControl.value)
|
|
247
|
+
.subscribe((response) => {
|
|
248
|
+
var _a;
|
|
249
|
+
this.RepositoryOptions = response.Model;
|
|
250
|
+
this.Loading = false;
|
|
251
|
+
if (activeRepo) {
|
|
252
|
+
setTimeout(() => {
|
|
253
|
+
this.RepositoryFormControl.setValue(activeRepo);
|
|
254
|
+
this.listBranches();
|
|
255
|
+
if (!this.UseBranches) {
|
|
256
|
+
this.listBuildPaths();
|
|
257
|
+
}
|
|
258
|
+
}, 0);
|
|
259
|
+
}
|
|
260
|
+
else if (((_a = this.RepositoryOptions) === null || _a === void 0 ? void 0 : _a.length) <= 0) {
|
|
261
|
+
this.CreatingRepository = true;
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
loadProjectHostingDetails() {
|
|
266
|
+
var _a, _b, _c, _d;
|
|
267
|
+
if (((_a = this.SelectedBranches) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
268
|
+
this.HostingDetails.Loading = true;
|
|
269
|
+
this.appsFlowSvc
|
|
270
|
+
.LoadProjectHostingDetails((_b = this.OrganizationFormControl) === null || _b === void 0 ? void 0 : _b.value, (_c = this.RepositoryFormControl) === null || _c === void 0 ? void 0 : _c.value, (_d = this.MainBranchFormControl) === null || _d === void 0 ? void 0 : _d.value)
|
|
271
|
+
.subscribe((response) => {
|
|
272
|
+
this.HostingDetails = response.Model;
|
|
273
|
+
this.HostingDetails.Loading = false;
|
|
274
|
+
this.configureDevOpsAction();
|
|
275
|
+
}, (err) => {
|
|
276
|
+
this.HostingDetails.Loading = false;
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
setupFormControls() {
|
|
281
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
282
|
+
this.destroyFormControls();
|
|
283
|
+
this.DevOpsSourceControlFormGroup.addControl('devOpsActionLookup', new FormControl(this.DevOpsActionLookup || '', []));
|
|
284
|
+
this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'organization'].join(''), new FormControl((_a = this.EditingSourceControl.Organization) !== null && _a !== void 0 ? _a : '', Validators.required));
|
|
285
|
+
this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'repository'].join(''), new FormControl((_b = this.EditingSourceControl.Repository) !== null && _b !== void 0 ? _b : '', Validators.required));
|
|
286
|
+
if (this.UseBranches) {
|
|
287
|
+
this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'branches'].join(''), new FormControl((_d = (_c = this.EditingSourceControl) === null || _c === void 0 ? void 0 : _c.Branches) !== null && _d !== void 0 ? _d : '', Validators.required));
|
|
288
|
+
this.SelectedBranches = (_e = this.EditingSourceControl) === null || _e === void 0 ? void 0 : _e.Branches;
|
|
289
|
+
this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'mainBranch'].join(''), new FormControl((_f = this.EditingSourceControl.MainBranch) !== null && _f !== void 0 ? _f : '', Validators.required));
|
|
290
|
+
}
|
|
291
|
+
if (this.UseBuildPath) {
|
|
292
|
+
this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'buildPath'].join(''), new FormControl((_g = this.BuildPath) !== null && _g !== void 0 ? _g : '', Validators.required));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
DevopsSourceControlFormComponent.decorators = [
|
|
297
|
+
{ type: Component, args: [{
|
|
298
|
+
selector: 'lcu-devops-source-control-form',
|
|
299
|
+
template: "<div class=\"form-card\" fxFlex=\"35%\" fxFlex.lt-md=\"100%\">\n <mat-card class=\"spread\">\n <mat-card-header>\n <mat-card-title> Source Control </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-icon\n matSuffix\n matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div [formGroup]=\"DevOpsSourceControlFormGroup\">\n <div class=\"card\">\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"devOpsActionLookup\"\n placeholder=\"DevOps Action\"\n [disabled]=\"HostingDetails?.Loading\"\n (selectionChange)=\"DevOpsActionLookupChanged($event)\"\n >\n <ng-container\n *ngFor=\"let devOpsActionLookup of DevOpsActionLookups\"\n >\n <mat-option\n [value]=\"devOpsActionLookup\"\n *ngIf=\"DevOpsActions[devOpsActionLookup]; let devOpsAction\"\n >\n {{ devOpsAction.Name }}\n </mat-option>\n </ng-container>\n \n <mat-option value=\"\">-- Create New --</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"card\" *ngIf=\"OrganizationFormControl?.valid || !Loading\">\n <mat-form-field\n class=\"mat-full-width with-hint\"\n *ngIf=\"OrganizationOptions?.length > 0\"\n >\n <mat-icon class=\"org-icon\" matPrefix>corporate_fare</mat-icon>\n \n <mat-select\n [formControlName]=\"SourceControlRoot + 'organization'\"\n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\"\n [disabled]=\"Loading || HostingDetails?.Loading\"\n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" matTooltip=\"Refresh Organization\"> refresh </mat-icon>\n \n <a\n matSuffix\n href=\"/.oauth/github?oauth-force-edit=true\"\n target=\"_blank\"\n color=\"accent\"\n >\n <mat-icon color=\"accent\" matTooltip=\"Re-authorize Organizations\"> launch </mat-icon>\n </a>\n \n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a\n href=\"https://github.com/account/organizations/new\"\n target=\"_blank\"\n >\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n \n <div\n class=\"card\"\n *ngIf=\"\n RepositoryFormControl?.valid ||\n (OrganizationFormControl?.valid && !Loading)\n \"\n >\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>description</mat-icon>\n \n <mat-select\n [formControlName]=\"SourceControlRoot + 'repository'\"\n [placeholder]=\"\n OrganizationFormControl?.valid\n ? 'Repository'\n : 'Repository (select organization first)'\n \"\n [disabled]=\"\n !OrganizationFormControl?.valid || Loading || HostingDetails?.Loading\n \"\n (selectionChange)=\"RepositoryChanged($event)\"\n *ngIf=\"!CreatingRepository\"\n required\n >\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <input\n matInput\n placeholder=\"Repository (creates new if does not exist)\"\n [formControlName]=\"SourceControlRoot + 'repository'\"\n *ngIf=\"CreatingRepository\"\n [fxHide]=\"Loading || HostingDetails?.Loading\"\n required\n />\n \n <mat-icon\n matSuffix\n (click)=\"CreateRepository()\"\n [fxHide]=\"Loading || HostingDetails?.Loading\"\n *ngIf=\"!CreatingRepository && OrganizationFormControl?.valid\"\n >\n add_circle\n </mat-icon>\n \n <button mat-button type=\"button\" \n (click)=\"SaveRepository()\" \n *ngIf=\"CreatingRepository && RepositoryFormControl?.valid\">\n \n <mat-icon\n matSuffix\n color=\"primary\"\n >\n save\n </mat-icon>\n </button>\n \n <button mat-button type=\"button\" \n (click)=\"CancelCreateRepository()\"\n *ngIf=\"CreatingRepository\">\n \n <mat-icon\n matSuffix\n \n >\n cancel\n </mat-icon>\n </button>\n </mat-form-field>\n </div>\n \n <div\n class=\"card\"\n *ngIf=\"\n (BranchesFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBranches\n \"\n >\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n \n <mat-label>Selected Branches</mat-label>\n \n <mat-autocomplete\n (optionSelected)=\"BranchOptionSelected($event)\"\n #branchOptions=\"matAutocomplete\"\n >\n <ng-container *ngFor=\"let branchOpt of BranchOptions\">\n <mat-option [value]=\"branchOpt.Name\">\n {{ branchOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n \n <mat-chip-list #selectedBranches>\n <mat-chip\n [removable]=\"true\"\n (removed)=\"RemoveBranchOption(selBranch)\"\n *ngFor=\"let selBranch of SelectedBranches\"\n >\n {{ selBranch }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n \n <input\n matInput\n placeholder=\"New Branch...\"\n [formControlName]=\"SourceControlRoot + 'branches'\"\n #branches\n [matAutocomplete]=\"branchOptions\"\n [matChipInputFor]=\"selectedBranches\"\n [matChipInputSeparatorKeyCodes]=\"SeparatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"AddBranchOption($event)\"\n [disabled]=\"Loading || HostingDetails?.Loading\"\n required\n />\n </mat-chip-list>\n </mat-form-field>\n \n <mat-form-field\n class=\"mat-full-width with-hint\"\n [fxShow]=\"SelectedBranches?.length > 1\"\n >\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n \n <mat-select\n [formControlName]=\"SourceControlRoot + 'mainBranch'\"\n placeholder=\"Main Branch\"\n [disabled]=\"Loading || HostingDetails?.Loading\"\n (selectionChange)=\"MainBranchChanged($event)\"\n required\n >\n <ng-container *ngFor=\"let branch of SelectedBranches\">\n <mat-option [value]=\"branch\">\n {{ branch }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-icon matSuffix (click)=\"RefreshOrganizations()\"> refresh </mat-icon>\n \n <a\n matSuffix\n mat-icon-button\n href=\"/.oauth/github?oauth-force-edit=true\"\n \n target=\"_blank\"\n color=\"accent\"\n >\n <mat-icon\n matTooltip=\"Re-authorize Organizations\"\n color=\"accent\"> launch </mat-icon>\n </a>\n \n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a\n href=\"https://github.com/account/organizations/new\"\n target=\"_blank\"\n >\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n \n <div\n class=\"card\"\n *ngIf=\"\n (BuildPathFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBuildPath\n \"\n >\n <mat-form-field class=\"mat-full-width with-hint\">\n <mat-icon class=\"org-icon\" matPrefix>build</mat-icon>\n \n <mat-select\n [formControlName]=\"SourceControlRoot + 'buildPath'\"\n placeholder=\"Build Path\"\n [disabled]=\"Loading || BuildPathDisabled\"\n (selectionChange)=\"BuildPathChanged($event)\"\n required\n >\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n </div>\n \n <div *ngIf=\"Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\" *ngIf=\"!OrganizationFormControl?.valid\">\n Loading organizations\n </h4>\n \n <h4\n class=\"mat-title\"\n *ngIf=\"\n OrganizationFormControl?.valid && !RepositoryFormControl?.valid\n \"\n >\n Loading repositories\n </h4>\n \n <h4\n class=\"mat-title\"\n *ngIf=\"RepositoryFormControl?.valid && !BranchesFormControl?.valid\"\n >\n Loading branches\n </h4>\n \n <h4\n class=\"mat-title\"\n *ngIf=\"\n (RepositoryFormControl?.valid || BranchesFormControl?.valid) &&\n !BuildPathFormControl?.valid\n \"\n >\n Loading build paths\n </h4>\n </div>\n </div>\n </div>\n </div>\n \n </mat-card-content>\n </mat-card>\n </div>\n",
|
|
300
|
+
styles: [""]
|
|
301
|
+
},] }
|
|
302
|
+
];
|
|
303
|
+
DevopsSourceControlFormComponent.ctorParameters = () => [
|
|
304
|
+
{ type: FormBuilder },
|
|
305
|
+
{ type: ApplicationsFlowService }
|
|
306
|
+
];
|
|
307
|
+
DevopsSourceControlFormComponent.propDecorators = {
|
|
308
|
+
BranchesInput: [{ type: ViewChild, args: ['branches',] }],
|
|
309
|
+
Environment: [{ type: Input, args: ['environment',] }]
|
|
310
|
+
};
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL2FwcGxpY2F0aW9ucy1mbG93L2FwcGxpY2F0aW9ucy1mbG93L3Byb2plY3RzL2NvbW1vbi9zcmMvIiwic291cmNlcyI6WyJsaWIvY29udHJvbHMvZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFtQixXQUFXLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTWxHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBc0QscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9oSSxNQUFNLE9BQU8sZ0NBQWdDO0lBaUgzQyxnQkFBZ0I7SUFDaEIsWUFDWSxXQUF3QixFQUN4QixXQUFvQztRQURwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFqQmhDLHVCQUFrQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBVSxDQUFDO1FBb0IzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUVsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJ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dWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgQmFzZU1vZGVsZWRSZXNwb25zZSwgQmFzZVJlc3BvbnNlIH0gZnJvbSAnQGxjdS9jb21tb24nO1xuaW1wb3J0IHsgRWFDRGV2T3BzQWN0aW9uLCBFYUNFbnZpcm9ubWVudEFzQ29kZSwgRWFDU291cmNlQ29udHJvbCB9IGZyb20gJ0BzZW1hbnRpY2pzL2NvbW1vbic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9ucy1mbG93LnNlcnZpY2UnO1xuaW1wb3J0IHsgR2l0SHViQnJhbmNoLCBHaXRIdWJPcmdhbml6YXRpb24sIEdpdEh1YlJlcG9zaXRvcnksIFByb2plY3RIb3N0aW5nRGV0YWlscyB9IGZyb20gJy4uLy4uL3N0YXRlL2FwcGxpY2F0aW9ucy1mbG93LnN0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGN1LWRldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZXZvcHNTb3VyY2VDb250cm9sRm9ybUNvbXBvbmVudCBcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdFxue1xuICAvLyAgRmllbGRzXG5cbiAgLy8gIFByb3BlcnRpZXNcbiAgcHVibGljIGdldCBCcmFuY2hlc0Zvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5nZXQodGhpcy5Tb3VyY2VDb250cm9sUm9vdCArICdicmFuY2hlcycpO1xuICB9XG5cblxuICBAVmlld0NoaWxkKCdicmFuY2hlcycpXG4gIHB1YmxpYyBCcmFuY2hlc0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHB1YmxpYyBCcmFuY2hPcHRpb25zOiBHaXRIdWJCcmFuY2hbXTtcblxuICAvL09wdGlvbmFsIGlucHV0IG5vdCBiZWluZyB1c2VkIHNldHRpbmcgdG8gXG4gIC8vIEBJbnB1dCgnYnVpbGQtcGF0aCcpXG4gIHB1YmxpYyBCdWlsZFBhdGg6IHN0cmluZztcblxuICAvL09wdGlvbmFsIG5vdCBiZWluZyB1c2VkXG4gIC8vIEBJbnB1dCgnYnVpbGQtcGF0aC1kaXNhYmxlZCcpXG4gIHB1YmxpYyBCdWlsZFBhdGhEaXNhYmxlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgZ2V0IEJ1aWxkUGF0aEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5nZXQodGhpcy5Tb3VyY2VDb250cm9sUm9vdCArICdidWlsZFBhdGgnKTtcbiAgfVxuXG4gIHB1YmxpYyBCdWlsZFBhdGhPcHRpb25zOiBzdHJpbmdbXTtcblxuICBwdWJsaWMgQ3JlYXRpbmdSZXBvc2l0b3J5OiBib29sZWFuO1xuXG5cblxuICBwdWJsaWMgZ2V0IERldk9wc0FjdGlvbkxvb2t1cHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuRGV2T3BzQWN0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IERldk9wc0FjdGlvbkxvb2t1cCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuRGV2T3BzQWN0aW9uTG9va3VwRm9ybUNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBGb3JtQ29udHJvbC52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoISF0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5EZXZPcHNBY3Rpb25UcmlnZ2VyTG9va3Vwcykge1xuICAgICAgcmV0dXJuIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2w/LkRldk9wc0FjdGlvblRyaWdnZXJMb29rdXBzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IERldk9wc0FjdGlvbkxvb2t1cEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5nZXQoJ2Rldk9wc0FjdGlvbkxvb2t1cCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBEZXZPcHNBY3Rpb25zKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDRGV2T3BzQWN0aW9uIH0ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50LkRldk9wc0FjdGlvbnMgfHwge307XG4gIH1cblxuICBwdWJsaWMgRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBnZXQgRWRpdGluZ1NvdXJjZUNvbnRyb2woKTogRWFDU291cmNlQ29udHJvbCB7XG4gICAgbGV0IHNjID0gdGhpcy5FbnZpcm9ubWVudD8uU291cmNlc1xuICAgICAgPyB0aGlzLkVudmlyb25tZW50Py5Tb3VyY2VzW3RoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2xMb29rdXBdXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoc2MgPT0gbnVsbCAmJiB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sTG9va3VwKSB7XG4gICAgICBzYyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBzYztcbiAgfVxuXG4gIHB1YmxpYyBFZGl0aW5nU291cmNlQ29udHJvbExvb2t1cDogc3RyaW5nO1xuXG4gIEBJbnB1dCgnZW52aXJvbm1lbnQnKVxuICBwdWJsaWMgRW52aXJvbm1lbnQ6IEVhQ0Vudmlyb25tZW50QXNDb2RlO1xuXG4gIHB1YmxpYyBIb3N0aW5nRGV0YWlsczogUHJvamVjdEhvc3RpbmdEZXRhaWxzO1xuXG4gIHB1YmxpYyBMb2FkaW5nOiBib29sZWFuO1xuXG4gIHB1YmxpYyBnZXQgTWFpbkJyYW5jaEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5nZXQodGhpcy5Tb3VyY2VDb250cm9sUm9vdCArICdtYWluQnJhbmNoJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9yZ2FuaXphdGlvbkZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5nZXQodGhpcy5Tb3VyY2VDb250cm9sUm9vdCArICdvcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIHB1YmxpYyBPcmdhbml6YXRpb25PcHRpb25zOiBHaXRIdWJPcmdhbml6YXRpb25bXTtcblxuICBwdWJsaWMgZ2V0IFJlcG9zaXRvcnlGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuZ2V0KHRoaXMuU291cmNlQ29udHJvbFJvb3QgKyAncmVwb3NpdG9yeScpO1xuICB9XG5cbiAgcHVibGljIFJlcG9zaXRvcnlPcHRpb25zOiBHaXRIdWJSZXBvc2l0b3J5W107XG5cbiAgcHVibGljIFNlbGVjdGVkQnJhbmNoZXM6IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyByZWFkb25seSBTZXBhcmF0b3JLZXlzQ29kZXMgPSBbRU5URVIsIENPTU1BXSBhcyBjb25zdDtcblxuICAvLyB0aGlzIGlucHV0IGlzIG5vdCBiZWluZyB1c2VkIGFueXdoZXJlXG4gIC8vIEBJbnB1dCgnc291cmNlLWNvbnRyb2wtcm9vdCcpXG4gIHB1YmxpYyBTb3VyY2VDb250cm9sUm9vdDogc3RyaW5nO1xuXG4gIC8vbm90IGJlaW5nIHVzZWQgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAvLyBASW5wdXQoJ3VzZS1icmFuY2hlcycpXG4gIHB1YmxpYyBVc2VCcmFuY2hlczogYm9vbGVhbjtcblxuICAvL25vdCBiZWluZyB1c2VkIHNldCB0byBmYWxzZSBieSBkZWZhdWx0XG4gIC8vIEBJbnB1dCgndXNlLWJ1aWxkLXBhdGgnKVxuICBwdWJsaWMgVXNlQnVpbGRQYXRoOiBib29sZWFuO1xuXG4gIC8vICBDb25zdHJ1Y3RvcnNcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgYXBwc0Zsb3dTdmM6IEFwcGxpY2F0aW9uc0Zsb3dTZXJ2aWNlLFxuICApIHtcblxuICAgIHRoaXMuQnVpbGRQYXRoID0gbnVsbDtcblxuICAgIHRoaXMuSG9zdGluZ0RldGFpbHMgPSBuZXcgUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk7XG5cbiAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSBbXTtcblxuICAgIHRoaXMuU291cmNlQ29udHJvbFJvb3QgPSAnJztcblxuICAgIHRoaXMuVXNlQnJhbmNoZXMgPSB0cnVlO1xuXG4gICAgdGhpcy5Vc2VCdWlsZFBhdGggPSBmYWxzZTtcbiAgfVxuXG4gIC8vICBMaWZlIEN5Y2xlXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7fVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lGb3JtQ29udHJvbHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwRm9ybUNvbnRyb2xzKCk7XG5cbiAgICB0aGlzLlJlZnJlc2hPcmdhbml6YXRpb25zKCk7XG4gIH1cblxuICAvLyAgQVBJIE1ldGhvZHNcbiAgcHVibGljIEFkZEJyYW5jaE9wdGlvbihldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEJyYW5jaE9wdGlvbihldmVudC52YWx1ZSk7XG5cbiAgICBldmVudC5pbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHVibGljIEJyYW5jaE9wdGlvblNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5hZGRCcmFuY2hPcHRpb24oZXZlbnQub3B0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBCcmFuY2hlc0NoYW5nZWQoYnJhbmNoZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk7XG4gIH1cblxuICBwdWJsaWMgQnVpbGRQYXRoQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgQ3JlYXRlUmVwb3NpdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLkNyZWF0aW5nUmVwb3NpdG9yeSA9IHRydWU7XG5cbiAgICB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIENhbmNlbENyZWF0ZVJlcG9zaXRvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5DcmVhdGluZ1JlcG9zaXRvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBEZXZPcHNBY3Rpb25Mb29rdXBDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZURldk9wc0FjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIE1haW5CcmFuY2hDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXRCcmFuY2hlc0NoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBPcmdhbml6YXRpb25DaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBvcmcgPSB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sO1xuXG4gICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wucmVzZXQoKTtcblxuICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2wucmVzZXQoKTtcblxuICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5saXN0UmVwb3NpdG9yaWVzKCk7XG4gIH1cblxuICBwdWJsaWMgUmVmcmVzaE9yZ2FuaXphdGlvbnMoKTogdm9pZCB7XG4gICAgLy8gdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxpc3RPcmdhbml6YXRpb25zKCk7XG5cbiAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sPy5yZXNldCgpO1xuXG4gICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5Vc2VCcmFuY2hlcykge1xuICAgICAgdGhpcy5CcmFuY2hlc0Zvcm1Db250cm9sPy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBSZW1vdmVCcmFuY2hPcHRpb24ob3B0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5pbmRleE9mKG9wdGlvbik7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0QnJhbmNoZXNDaGFuZ2VkKCk7XG4gIH1cblxuICBwdWJsaWMgUmVwb3NpdG9yeUNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG8gPSB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbDtcblxuICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2wucmVzZXQoKTtcblxuICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gW107XG5cbiAgICAgIHRoaXMubGlzdEJyYW5jaGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICB0aGlzLmxpc3RCdWlsZFBhdGhzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIFNhdmVSZXBvc2l0b3J5KCk6IHZvaWQge1xuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBvcmcgPSB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgY29uc3QgcmVwb05hbWUgPSB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgIC5DcmVhdGVSZXBvc2l0b3J5KG9yZywgcmVwb05hbWUpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogQmFzZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5TdGF0dXMuQ29kZSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMubGlzdFJlcG9zaXRvcmllcyhyZXBvTmFtZSk7XG5cbiAgICAgICAgICB0aGlzLkNyZWF0aW5nUmVwb3NpdG9yeSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICBUT0RPOiAgTmVlZCB0byBzdXJmYWNlIGFuIGVycm9yIHRvIHRoZSB1c2VyLi4uXG5cbiAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyAgSGVscGVyc1xuICBwcm90ZWN0ZWQgYWRkQnJhbmNoT3B0aW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSB8fCAnJykudHJpbSgpO1xuXG4gICAgaWYgKHZhbHVlICYmIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5pbmRleE9mKHZhbHVlKSA8IDApIHtcbiAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLkJyYW5jaGVzSW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG5cbiAgICB0aGlzLmVtaXRCcmFuY2hlc0NoYW5nZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVEZXZPcHNBY3Rpb24oKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXN0cm95Rm9ybUNvbnRyb2xzKCk6IHZvaWQge1xuICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFxuICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdtYWluQnJhbmNoJ10uam9pbignJylcbiAgICApO1xuXG4gICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5yZW1vdmVDb250cm9sKFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnYnJhbmNoZXMnXS5qb2luKCcnKSk7XG5cbiAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LnJlbW92ZUNvbnRyb2woW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdidWlsZFBhdGgnXS5qb2luKCcnKSk7XG5cbiAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSBbXTtcblxuICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cD8ucmVtb3ZlQ29udHJvbChcbiAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnb3JnYW5pemF0aW9uJ10uam9pbignJylcbiAgICApO1xuXG4gICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5yZW1vdmVDb250cm9sKFxuICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdyZXBvc2l0b3J5J10uam9pbignJylcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRCcmFuY2hlc0NoYW5nZWQoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAoIXRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnZhbHVlIHx8XG4gICAgICAgIHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5pbmRleE9mKHRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnZhbHVlKSA8IDApXG4gICAgKSB7XG4gICAgICB0aGlzLk1haW5CcmFuY2hGb3JtQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzLmZpbmQoXG4gICAgICAgICAgKGJyYW5jaCkgPT4gYnJhbmNoID09PSAnbWFpbicgfHwgYnJhbmNoID09PSAnbWFzdGVyJ1xuICAgICAgICApIHx8IHRoaXMuU2VsZWN0ZWRCcmFuY2hlc1swXVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuU2VsZWN0ZWRCcmFuY2hlcz8ubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5CcmFuY2hlc0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuU2VsZWN0ZWRCcmFuY2hlcy5qb2luKCcsJykpO1xuXG4gICAgdGhpcy5CcmFuY2hlc0NoYW5nZWQodGhpcy5TZWxlY3RlZEJyYW5jaGVzIHx8IFtdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0QnJhbmNoZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuVXNlQnJhbmNoZXMpIHtcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XG5cbiAgICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgICAgLkxpc3RCcmFuY2hlcyhcbiAgICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgIHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8R2l0SHViQnJhbmNoW10+KSA9PiB7XG4gICAgICAgICAgdGhpcy5CcmFuY2hPcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5CcmFuY2hlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5TZWxlY3RlZEJyYW5jaGVzID0gdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbC5CcmFuY2hlcztcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQnJhbmNoT3B0aW9ucz8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLkJyYW5jaGVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5CcmFuY2hPcHRpb25zWzBdLk5hbWUpO1xuXG4gICAgICAgICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSBbdGhpcy5CcmFuY2hPcHRpb25zWzBdLk5hbWVdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZW1pdEJyYW5jaGVzQ2hhbmdlZCgpO1xuXG4gICAgICAgICAgdGhpcy5saXN0QnVpbGRQYXRocygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbGlzdEJ1aWxkUGF0aHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuVXNlQnVpbGRQYXRoKSB7XG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAgIC5MaXN0QnVpbGRQYXRocyhcbiAgICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgIHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8c3RyaW5nW10+KSA9PiB7XG4gICAgICAgICAgdGhpcy5CdWlsZFBhdGhPcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0aGlzLkJ1aWxkUGF0aE9wdGlvbnM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5CdWlsZFBhdGhGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLkJ1aWxkUGF0aE9wdGlvbnNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RPcmdhbml6YXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAuTGlzdE9yZ2FuaXphdGlvbnMoKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8R2l0SHViT3JnYW5pemF0aW9uW10+KSA9PiB7XG4gICAgICAgIHRoaXMuT3JnYW5pemF0aW9uT3B0aW9ucyA9IHJlc3BvbnNlLk1vZGVsO1xuXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5Pcmdhbml6YXRpb24pIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgICAgIHRoaXMuRWRpdGluZ1NvdXJjZUNvbnRyb2wuT3JnYW5pemF0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3RSZXBvc2l0b3JpZXModGhpcy5FZGl0aW5nU291cmNlQ29udHJvbD8uUmVwb3NpdG9yeSk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RSZXBvc2l0b3JpZXMoYWN0aXZlUmVwbzogc3RyaW5nID0gbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAuTGlzdFJlcG9zaXRvcmllcyh0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8R2l0SHViUmVwb3NpdG9yeVtdPikgPT4ge1xuICAgICAgICB0aGlzLlJlcG9zaXRvcnlPcHRpb25zID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGFjdGl2ZVJlcG8pIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuUmVwb3NpdG9yeUZvcm1Db250cm9sLnNldFZhbHVlKGFjdGl2ZVJlcG8pO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3RCcmFuY2hlcygpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuVXNlQnJhbmNoZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0QnVpbGRQYXRocygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuUmVwb3NpdG9yeU9wdGlvbnM/Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5DcmVhdGluZ1JlcG9zaXRvcnkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLlNlbGVjdGVkQnJhbmNoZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMuTG9hZGluZyA9IHRydWU7XG5cbiAgICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgICAgLkxvYWRQcm9qZWN0SG9zdGluZ0RldGFpbHMoXG4gICAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsdWUsXG4gICAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2w/LnZhbHVlLFxuICAgICAgICAgIHRoaXMuTWFpbkJyYW5jaEZvcm1Db250cm9sPy52YWx1ZVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3BvbnNlOiBCYXNlTW9kZWxlZFJlc3BvbnNlPFByb2plY3RIb3N0aW5nRGV0YWlscz4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMgPSByZXNwb25zZS5Nb2RlbDtcblxuICAgICAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRGV2T3BzQWN0aW9uKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwRm9ybUNvbnRyb2xzKCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveUZvcm1Db250cm9scygpO1xuXG4gICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnZGV2T3BzQWN0aW9uTG9va3VwJyxcbiAgICAgIG5ldyBGb3JtQ29udHJvbCh0aGlzLkRldk9wc0FjdGlvbkxvb2t1cCB8fCAnJywgW10pXG4gICAgKTtcblxuICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdvcmdhbml6YXRpb24nXS5qb2luKCcnKSxcbiAgICAgIG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbC5Pcmdhbml6YXRpb24gPz8gJycsXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ3JlcG9zaXRvcnknXS5qb2luKCcnKSxcbiAgICAgIG5ldyBGb3JtQ29udHJvbCh0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sLlJlcG9zaXRvcnkgPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLlVzZUJyYW5jaGVzKSB7XG4gICAgICB0aGlzLkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgW3RoaXMuU291cmNlQ29udHJvbFJvb3QsICdicmFuY2hlcyddLmpvaW4oJycpLFxuICAgICAgICBuZXcgRm9ybUNvbnRyb2wodGhpcy5FZGl0aW5nU291cmNlQ29udHJvbD8uQnJhbmNoZXMgPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgICApO1xuXG4gICAgICB0aGlzLlNlbGVjdGVkQnJhbmNoZXMgPSB0aGlzLkVkaXRpbmdTb3VyY2VDb250cm9sPy5CcmFuY2hlcztcblxuICAgICAgdGhpcy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgIFt0aGlzLlNvdXJjZUNvbnRyb2xSb290LCAnbWFpbkJyYW5jaCddLmpvaW4oJycpLFxuICAgICAgICBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgdGhpcy5FZGl0aW5nU291cmNlQ29udHJvbC5NYWluQnJhbmNoID8/ICcnLFxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5Vc2VCdWlsZFBhdGgpIHtcbiAgICAgIHRoaXMuRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICBbdGhpcy5Tb3VyY2VDb250cm9sUm9vdCwgJ2J1aWxkUGF0aCddLmpvaW4oJycpLFxuICAgICAgICBuZXcgRm9ybUNvbnRyb2wodGhpcy5CdWlsZFBhdGggPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgICApO1xuICAgIH1cbiAgfVxufSJdfQ==
|