@alauda-fe/network 1.0.5 → 1.0.7

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.
Files changed (54) hide show
  1. package/esm2022/index.mjs +2 -14
  2. package/esm2022/lib/types/k8s-exports.mjs +29 -2
  3. package/esm2022/lib/types/resource-definition.mjs +11 -1
  4. package/esm2022/lib/utils/domain-exports.mjs +16 -0
  5. package/esm2022/lib/utils/validators-exports.mjs +1 -1
  6. package/index.d.ts +1 -13
  7. package/lib/types/k8s-exports.d.ts +248 -1
  8. package/lib/types/resource-definition.d.ts +24 -0
  9. package/package.json +1 -1
  10. package/styles.css +1 -1
  11. package/esm2022/lib/components/loadbalancer-spec-form/component.mjs +0 -251
  12. package/esm2022/lib/components/service-annotations-form/annotations.component.mjs +0 -675
  13. package/esm2022/lib/components/service-annotations-form-item/annotations.component.mjs +0 -105
  14. package/esm2022/lib/features/network-policy/components/add-peer-rule-handler/component.mjs +0 -69
  15. package/esm2022/lib/features/network-policy/components/ip-block-display/component.mjs +0 -54
  16. package/esm2022/lib/features/network-policy/components/label-selector-display/component.mjs +0 -117
  17. package/esm2022/lib/features/network-policy/components/peer-container/component.mjs +0 -81
  18. package/esm2022/lib/features/network-policy/components/pod-review/component.mjs +0 -250
  19. package/esm2022/lib/features/network-policy/components/rule-table/component.mjs +0 -269
  20. package/esm2022/lib/features/network-policy/form/network-policy/component.mjs +0 -429
  21. package/esm2022/lib/features/network-policy/form/network-policy-ip-block/component.mjs +0 -102
  22. package/esm2022/lib/features/network-policy/form/network-policy-peer/component.mjs +0 -247
  23. package/esm2022/lib/features/network-policy/form/network-policy-ports/component.mjs +0 -161
  24. package/esm2022/lib/features/network-policy/form/network-policy-remote-except-input/component.mjs +0 -128
  25. package/esm2022/lib/features/network-policy/form/network-policy-rule/component.mjs +0 -142
  26. package/esm2022/lib/services/alb-api.service.mjs +0 -68
  27. package/esm2022/lib/services/subnet-util.service.mjs +0 -118
  28. package/esm2022/lib/types/alb-exports.mjs +0 -14
  29. package/esm2022/lib/types/metallb-exports.mjs +0 -2
  30. package/esm2022/lib/utils/alb-exports.mjs +0 -108
  31. package/esm2022/lib/utils/alb-internals.mjs +0 -2
  32. package/esm2022/lib/utils/common-exports.mjs +0 -22
  33. package/lib/components/loadbalancer-spec-form/component.d.ts +0 -34
  34. package/lib/components/service-annotations-form/annotations.component.d.ts +0 -74
  35. package/lib/components/service-annotations-form-item/annotations.component.d.ts +0 -14
  36. package/lib/features/network-policy/components/add-peer-rule-handler/component.d.ts +0 -8
  37. package/lib/features/network-policy/components/ip-block-display/component.d.ts +0 -7
  38. package/lib/features/network-policy/components/label-selector-display/component.d.ts +0 -13
  39. package/lib/features/network-policy/components/peer-container/component.d.ts +0 -18
  40. package/lib/features/network-policy/components/pod-review/component.d.ts +0 -37
  41. package/lib/features/network-policy/components/rule-table/component.d.ts +0 -21
  42. package/lib/features/network-policy/form/network-policy/component.d.ts +0 -70
  43. package/lib/features/network-policy/form/network-policy-ip-block/component.d.ts +0 -23
  44. package/lib/features/network-policy/form/network-policy-peer/component.d.ts +0 -43
  45. package/lib/features/network-policy/form/network-policy-ports/component.d.ts +0 -17
  46. package/lib/features/network-policy/form/network-policy-remote-except-input/component.d.ts +0 -23
  47. package/lib/features/network-policy/form/network-policy-rule/component.d.ts +0 -28
  48. package/lib/services/alb-api.service.d.ts +0 -18
  49. package/lib/services/subnet-util.service.d.ts +0 -26
  50. package/lib/types/alb-exports.d.ts +0 -52
  51. package/lib/types/metallb-exports.d.ts +0 -65
  52. package/lib/utils/alb-exports.d.ts +0 -16
  53. package/lib/utils/alb-internals.d.ts +0 -10
  54. /package/lib/utils/{common-exports.d.ts → domain-exports.d.ts} +0 -0
@@ -1,429 +0,0 @@
1
- import { ButtonModule, CheckboxModule, ConfirmType, DialogService, FormModule, IconModule, InputModule, TabsModule, } from '@alauda/ui';
2
- import { DISPLAY_NAME, DeclareDirective, ERRORS_MAPPER_MODULE, EffectDirectiveModule, K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY, K8sUtilService, KeyValueFormTableComponent, ReadonlyFieldDirective, SPEC, TRANSLATE_MODULE, TranslateService, getK8sResourceLabelErrorMapper$, k8sResourceLabelValidator, } from '@alauda-fe/common';
3
- import { CommonModule } from '@angular/common';
4
- import { ChangeDetectionStrategy, Component, Injector, Input, } from '@angular/core';
5
- import { Validators, ReactiveFormsModule } from '@angular/forms';
6
- import { has, uniq } from 'lodash-es';
7
- import { BaseResourceFormGroupComponent } from 'ng-resource-form-util';
8
- import { PodPreviewComponent } from '../../components/pod-review/component';
9
- import { NetworkPolicyRuleFormComponent } from '../network-policy-rule/component';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@alauda-fe/common";
12
- import * as i2 from "@alauda/ui";
13
- import * as i3 from "@angular/common";
14
- import * as i4 from "@angular/forms";
15
- const _c0 = a0 => ({ pattern: a0 });
16
- const _c1 = () => ["spec", "podSelector", "matchLabels"];
17
- const _c2 = a0 => ({ xxx: a0 });
18
- const _c3 = a0 => ["spec", a0];
19
- const _c4 = (a0, a1) => ({ policyType: a0, ruleDisabled: a1 });
20
- function NetworkPolicyFormComponent_ng_template_29_Template(rf, ctx) { if (rf & 1) {
21
- i0.ɵɵelementStart(0, "span", 17);
22
- i0.ɵɵtext(1);
23
- i0.ɵɵpipe(2, "translate");
24
- i0.ɵɵelementEnd();
25
- } if (rf & 2) {
26
- i0.ɵɵadvance();
27
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, "network.target_pod_selector_no_data_tip"));
28
- } }
29
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_ng_container_1_ng_container_1_aui_icon_1_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelement(0, "aui-icon", 31);
31
- } }
32
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵelementContainerStart(0);
34
- i0.ɵɵtemplate(1, NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_ng_container_1_ng_container_1_aui_icon_1_Template, 1, 0, "aui-icon", 30);
35
- i0.ɵɵelementStart(2, "span");
36
- i0.ɵɵtext(3);
37
- i0.ɵɵpipe(4, "translate");
38
- i0.ɵɵelementEnd();
39
- i0.ɵɵelementContainerEnd();
40
- } if (rf & 2) {
41
- const control_r6 = i0.ɵɵnextContext().ngIf;
42
- const policyType_r2 = i0.ɵɵnextContext(4).$implicit;
43
- i0.ɵɵadvance();
44
- i0.ɵɵproperty("ngIf", control_r6.invalid && control_r6.dirty);
45
- i0.ɵɵadvance(2);
46
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 2, policyType_r2), " ");
47
- } }
48
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
49
- i0.ɵɵelementContainerStart(0);
50
- i0.ɵɵtemplate(1, NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_ng_container_1_ng_container_1_Template, 5, 4, "ng-container", 28);
51
- i0.ɵɵelement(2, "acl-network-policy-rule-form", 29);
52
- i0.ɵɵelementContainerEnd();
53
- } if (rf & 2) {
54
- const control_r6 = ctx.ngIf;
55
- const policyType_r2 = i0.ɵɵnextContext(4).$implicit;
56
- const ctx_r2 = i0.ɵɵnextContext();
57
- i0.ɵɵadvance(2);
58
- i0.ɵɵproperty("formControl", control_r6)("baseParams", ctx_r2.baseParams)("policyType", policyType_r2);
59
- } }
60
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_Template(rf, ctx) { if (rf & 1) {
61
- const _r4 = i0.ɵɵgetCurrentView();
62
- i0.ɵɵelementStart(0, "aui-tab", 27);
63
- i0.ɵɵlistener("close", function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_Template_aui_tab_close_0_listener() { const index_r5 = i0.ɵɵrestoreView(_r4).index; const policyType_r2 = i0.ɵɵnextContext(3).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.removeRule(index_r5, policyType_r2)); });
64
- i0.ɵɵtemplate(1, NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_ng_container_1_Template, 3, 3, "ng-container", 24);
65
- i0.ɵɵelementEnd();
66
- } if (rf & 2) {
67
- const item_r7 = ctx.$implicit;
68
- i0.ɵɵproperty("closeable", true);
69
- i0.ɵɵadvance();
70
- i0.ɵɵproperty("ngIf", item_r7);
71
- } }
72
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_Template(rf, ctx) { if (rf & 1) {
73
- i0.ɵɵelementContainerStart(0);
74
- i0.ɵɵelementStart(1, "aui-tab-group", 25);
75
- i0.ɵɵtemplate(2, NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_aui_tab_2_Template, 2, 2, "aui-tab", 26);
76
- i0.ɵɵelementEnd();
77
- i0.ɵɵelementContainerEnd();
78
- } if (rf & 2) {
79
- const ruleControls_r8 = i0.ɵɵnextContext().declare;
80
- i0.ɵɵadvance(2);
81
- i0.ɵɵproperty("ngForOf", ruleControls_r8);
82
- } }
83
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_2_Template(rf, ctx) { if (rf & 1) {
84
- i0.ɵɵelementContainerStart(0);
85
- i0.ɵɵelementContainer(1, 32);
86
- i0.ɵɵelementContainerEnd();
87
- } if (rf & 2) {
88
- const policyType_r2 = i0.ɵɵnextContext(2).$implicit;
89
- const ctx_r2 = i0.ɵɵnextContext();
90
- const emptyTemplate_r9 = i0.ɵɵreference(33);
91
- i0.ɵɵadvance();
92
- i0.ɵɵproperty("ngTemplateOutlet", emptyTemplate_r9)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c4, policyType_r2, ctx_r2.ruleDisabledStateMap[policyType_r2]));
93
- } }
94
- function NetworkPolicyFormComponent_ng_container_31_ng_container_14_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelementContainerStart(0);
96
- i0.ɵɵtemplate(1, NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_1_Template, 3, 1, "ng-container", 24)(2, NetworkPolicyFormComponent_ng_container_31_ng_container_14_ng_container_2_Template, 2, 5, "ng-container", 24);
97
- i0.ɵɵelementContainerEnd();
98
- } if (rf & 2) {
99
- const ruleControls_r8 = ctx.declare;
100
- const policyType_r2 = i0.ɵɵnextContext().$implicit;
101
- const ctx_r2 = i0.ɵɵnextContext();
102
- i0.ɵɵadvance();
103
- i0.ɵɵproperty("ngIf", !ctx_r2.ruleDisabledStateMap[policyType_r2] && ruleControls_r8.length);
104
- i0.ɵɵadvance();
105
- i0.ɵɵproperty("ngIf", !ruleControls_r8.length || ctx_r2.ruleDisabledStateMap[policyType_r2]);
106
- } }
107
- function NetworkPolicyFormComponent_ng_container_31_Template(rf, ctx) { if (rf & 1) {
108
- const _r1 = i0.ɵɵgetCurrentView();
109
- i0.ɵɵelementContainerStart(0);
110
- i0.ɵɵelementStart(1, "div", 18)(2, "div", 10);
111
- i0.ɵɵtext(3);
112
- i0.ɵɵpipe(4, "translate");
113
- i0.ɵɵelementEnd();
114
- i0.ɵɵelementStart(5, "div", 19)(6, "button", 20);
115
- i0.ɵɵlistener("click", function NetworkPolicyFormComponent_ng_container_31_Template_button_click_6_listener() { const policyType_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.addRule(policyType_r2)); });
116
- i0.ɵɵelement(7, "aui-icon", 21);
117
- i0.ɵɵtext(8);
118
- i0.ɵɵpipe(9, "translate");
119
- i0.ɵɵpipe(10, "translate");
120
- i0.ɵɵelementEnd();
121
- i0.ɵɵelementStart(11, "aui-checkbox", 22);
122
- i0.ɵɵlistener("valueChange", function NetworkPolicyFormComponent_ng_container_31_Template_aui_checkbox_valueChange_11_listener($event) { const policyType_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ruleDisabledChanged($event, policyType_r2)); });
123
- i0.ɵɵtext(12);
124
- i0.ɵɵpipe(13, "translate");
125
- i0.ɵɵelementEnd()()();
126
- i0.ɵɵtemplate(14, NetworkPolicyFormComponent_ng_container_31_ng_container_14_Template, 3, 2, "ng-container", 23);
127
- i0.ɵɵelementContainerEnd();
128
- } if (rf & 2) {
129
- const policyType_r2 = ctx.$implicit;
130
- const i_r10 = ctx.index;
131
- const ctx_r2 = i0.ɵɵnextContext();
132
- i0.ɵɵadvance();
133
- i0.ɵɵclassMap(i_r10 === 1 ? "tw-mt-16" : "");
134
- i0.ɵɵadvance(2);
135
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 9, "network.direction_" + policyType_r2), " ");
136
- i0.ɵɵadvance(3);
137
- i0.ɵɵproperty("plain", true)("disabled", ctx_r2.ruleDisabledStateMap[policyType_r2]);
138
- i0.ɵɵadvance(2);
139
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(10, 13, "add_xxx", i0.ɵɵpureFunction1(18, _c2, i0.ɵɵpipeBind1(9, 11, policyType_r2))), " ");
140
- i0.ɵɵadvance(3);
141
- i0.ɵɵproperty("value", ctx_r2.ruleDisabledStateMap[policyType_r2]);
142
- i0.ɵɵadvance();
143
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(13, 16, "network.block_all_" + policyType_r2 + "_traffic"));
144
- i0.ɵɵadvance(2);
145
- i0.ɵɵproperty("declare", ctx_r2.form.get(i0.ɵɵpureFunction1(20, _c3, policyType_r2)).controls);
146
- } }
147
- function NetworkPolicyFormComponent_ng_template_32_span_1_Template(rf, ctx) { if (rf & 1) {
148
- i0.ɵɵelementStart(0, "span", 35);
149
- i0.ɵɵtext(1);
150
- i0.ɵɵpipe(2, "translate");
151
- i0.ɵɵelementEnd();
152
- } if (rf & 2) {
153
- const policyType_r11 = i0.ɵɵnextContext().policyType;
154
- i0.ɵɵadvance();
155
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "network." + policyType_r11 + "_rule_no_data_tip"), " ");
156
- } }
157
- function NetworkPolicyFormComponent_ng_template_32_span_2_Template(rf, ctx) { if (rf & 1) {
158
- i0.ɵɵelementStart(0, "span");
159
- i0.ɵɵtext(1);
160
- i0.ɵɵpipe(2, "translate");
161
- i0.ɵɵelementEnd();
162
- } if (rf & 2) {
163
- const policyType_r11 = i0.ɵɵnextContext().policyType;
164
- i0.ɵɵadvance();
165
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, "network.block_all_" + policyType_r11 + "_tip"));
166
- } }
167
- function NetworkPolicyFormComponent_ng_template_32_Template(rf, ctx) { if (rf & 1) {
168
- i0.ɵɵelementStart(0, "div", 33);
169
- i0.ɵɵtemplate(1, NetworkPolicyFormComponent_ng_template_32_span_1_Template, 3, 3, "span", 34)(2, NetworkPolicyFormComponent_ng_template_32_span_2_Template, 3, 3, "span", 24);
170
- i0.ɵɵelementEnd();
171
- } if (rf & 2) {
172
- const ruleDisabled_r12 = ctx.ruleDisabled;
173
- i0.ɵɵadvance();
174
- i0.ɵɵproperty("ngIf", !ruleDisabled_r12);
175
- i0.ɵɵadvance();
176
- i0.ɵɵproperty("ngIf", ruleDisabled_r12);
177
- } }
178
- const PolicyTypes = ['ingress', 'egress'];
179
- export class NetworkPolicyFormComponent extends BaseResourceFormGroupComponent {
180
- get ingressRuleFormArray() {
181
- return this.form.get([SPEC, 'ingress']);
182
- }
183
- get ingressRuleControls() {
184
- return this.ingressRuleFormArray.controls ?? [];
185
- }
186
- get egressRuleFormArray() {
187
- return this.form.get([SPEC, 'egress']);
188
- }
189
- get egressRuleControls() {
190
- return [...(this.egressRuleFormArray.controls ?? [])];
191
- }
192
- constructor(injector, k8sUtil, translate, dialog) {
193
- super(injector);
194
- this.k8sUtil = k8sUtil;
195
- this.translate = translate;
196
- this.dialog = dialog;
197
- this.isUpdate = false;
198
- this.K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY = K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY;
199
- this.labelValidator = k8sResourceLabelValidator;
200
- this.labelErrorMapper$ = getK8sResourceLabelErrorMapper$(this.translate);
201
- this.PolicyTypes = PolicyTypes;
202
- this.displayNameKey = this.k8sUtil.normalizeType(DISPLAY_NAME);
203
- this.ruleDisabledStateMap = {
204
- ingress: false,
205
- egress: false,
206
- };
207
- }
208
- createForm() {
209
- const metadataForm = this.fb.group({
210
- name: this.fb.control('', [
211
- Validators.required,
212
- Validators.pattern(K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY.pattern),
213
- ]),
214
- namespace: this.fb.control(''),
215
- annotations: this.fb.group({
216
- [this.displayNameKey]: this.fb.control(''),
217
- }),
218
- });
219
- const specForm = this.fb.group({
220
- podSelector: this.fb.group({
221
- matchLabels: this.fb.control(null),
222
- }),
223
- ingress: this.fb.array([]),
224
- egress: this.fb.array([]),
225
- policyTypes: this.fb.control([]),
226
- });
227
- return this.fb.group({
228
- metadata: metadataForm,
229
- spec: specForm,
230
- });
231
- }
232
- getOnFormArrayResizeFn() {
233
- return () => {
234
- return this.fb.control({});
235
- };
236
- }
237
- adaptResourceModel(resource) {
238
- if (!resource) {
239
- return resource;
240
- }
241
- this.updateRuleDisabledStateMap(resource);
242
- if (this.ruleDisabledStateMap.ingress) {
243
- resource.spec.policyTypes = ['Ingress'];
244
- }
245
- if (this.ruleDisabledStateMap.egress) {
246
- resource.spec.policyTypes = uniq([
247
- ...(resource.spec.policyTypes ?? []),
248
- 'Egress',
249
- ]);
250
- }
251
- return resource;
252
- }
253
- async ruleDisabledChanged(disabled, policyType) {
254
- const ruleFormArray = this.form.get([SPEC, policyType]);
255
- if (disabled) {
256
- if (ruleFormArray.length > 0) {
257
- const result = await this.ruleDisabledConfirm(policyType);
258
- if (result !== 'ok') {
259
- this.ruleDisabledStateMap[policyType] = false;
260
- return;
261
- }
262
- ruleFormArray.clear();
263
- }
264
- this.addPolicyType(policyType);
265
- this.ruleDisabledStateMap[policyType] = true;
266
- }
267
- else {
268
- this.removePolicyType(policyType);
269
- this.ruleDisabledStateMap[policyType] = false;
270
- }
271
- }
272
- addRule(policyType) {
273
- this.form.get([SPEC, policyType]).push(this.fb.control({
274
- ports: [],
275
- [policyType === 'ingress' ? 'from' : 'to']: [],
276
- }));
277
- this.addPolicyType(policyType);
278
- }
279
- removeRule(index, policyType) {
280
- const ruleFormArray = this?.[policyType === 'ingress'
281
- ? 'ingressRuleFormArray'
282
- : 'egressRuleFormArray'];
283
- ruleFormArray.removeAt(index);
284
- this.removePolicyType(policyType);
285
- }
286
- async ruleDisabledConfirm(policyType) {
287
- return await this.dialog
288
- .confirm({
289
- title: this.translate.get('network.disabled_rule_confirm', {
290
- direction: this.translate.get(`network.direction_${policyType}`),
291
- }),
292
- confirmType: ConfirmType.Warning,
293
- confirmText: this.translate.get('network.block'),
294
- cancelText: this.translate.get('cancel'),
295
- })
296
- .then(() => 'ok')
297
- .catch(() => 'cancel');
298
- }
299
- addPolicyType(policyType) {
300
- const policyTypesCtrl = this.form.get([SPEC, 'policyTypes']);
301
- const updatedPolicyTypes = uniq([
302
- ...policyTypesCtrl.value,
303
- policyType === 'ingress' ? 'Ingress' : 'Egress',
304
- ]);
305
- policyTypesCtrl.setValue(updatedPolicyTypes);
306
- }
307
- removePolicyType(policyType) {
308
- const policyTypesCtrl = this.form.get([SPEC, 'policyTypes']);
309
- const policyTypes = policyTypesCtrl.value;
310
- const ruleFormArray = this?.[policyType === 'ingress'
311
- ? 'ingressRuleFormArray'
312
- : 'egressRuleFormArray'];
313
- if (ruleFormArray.length === 0) {
314
- const policyTypeToRemove = policyType === 'ingress' ? 'Ingress' : 'Egress';
315
- const updatedPolicyTypes = policyTypes.filter(type => type !== policyTypeToRemove);
316
- policyTypesCtrl.setValue(updatedPolicyTypes);
317
- }
318
- }
319
- updateRuleDisabledStateMap(resource) {
320
- const policyTypes = resource?.spec?.policyTypes;
321
- const ruleTypes = ['ingress', 'egress'];
322
- if (!policyTypes?.length &&
323
- !ruleTypes.some(type => has(resource.spec, type))) {
324
- this.ruleDisabledStateMap.ingress = true;
325
- return;
326
- }
327
- policyTypes?.forEach(policyType => {
328
- const type = policyType.toLowerCase();
329
- this.ruleDisabledStateMap[type] = !resource.spec[type]?.length;
330
- });
331
- }
332
- static { this.ɵfac = function NetworkPolicyFormComponent_Factory(t) { return new (t || NetworkPolicyFormComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.K8sUtilService), i0.ɵɵdirectiveInject(i1.TranslateService), i0.ɵɵdirectiveInject(i2.DialogService)); }; }
333
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NetworkPolicyFormComponent, selectors: [["acl-network-policy-form"]], inputs: { baseParams: "baseParams", isUpdate: "isUpdate" }, standalone: true, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 34, vars: 36, consts: [["zeroStateTemplate", ""], ["emptyTemplate", ""], ["auiForm", "", "aclScrollToFirstInvalid", "", 3, "formGroup"], ["formGroupName", "metadata"], ["width", "large"], ["auiFormItemLabel", ""], ["type", "text", "aui-input", "", "required", "", "auiFormItemControl", "", "formControlName", "name", "maxlength", "63", 3, "placeholder", "aclReadonlyField"], ["auiFormItemError", "", 3, "errors", "errorsMapper"], ["formGroupName", "annotations"], ["auiFormItemControl", "", "type", "text", "aui-input", "", 3, "formControlName"], [1, "rc-secondary-title"], ["formGroupName", "spec"], ["formGroupName", "podSelector"], ["auiFormItemControl", "", "formControlName", "matchLabels", 3, "zeroStateTemplate", "validator", "errorMapper"], ["auiFormItemHint", ""], [3, "hint", "baseParams", "podLabelSelector"], [4, "ngFor", "ngForOf"], [1, "empty-placeholder", "!tw-border-0", "!tw-min-h-[48px]", "!tw-py-14"], [1, "tw-flex", "tw-w-full", "tw-items-center"], [1, "tw-flex", "tw-mb-16", "tw-ml-16", "tw-justify-between", "tw-flex-1"], ["aui-button", "primary", "type", "button", 3, "click", "plain", "disabled"], ["icon", "plus_circle_s"], [3, "valueChange", "value"], [4, "declare"], [4, "ngIf"], ["formGroupName", "spec", "type", "card"], [3, "closeable", "close", 4, "ngFor", "ngForOf"], [3, "close", "closeable"], [4, "auiTabLabel"], [3, "formControl", "baseParams", "policyType"], ["class", "icon--error", "icon", "xmark_circle_s", "size", "16", 4, "ngIf"], ["icon", "xmark_circle_s", "size", "16", 1, "icon--error"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "tw-pt-[40px]", "tw-text-center", "tw-pb-[40px]", "tw-bg-n-9"], ["class", "tw-text-n-4", 4, "ngIf"], [1, "tw-text-n-4"]], template: function NetworkPolicyFormComponent_Template(rf, ctx) { if (rf & 1) {
334
- i0.ɵɵelementStart(0, "form", 2);
335
- i0.ɵɵelementContainerStart(1, 3);
336
- i0.ɵɵelementStart(2, "aui-form-item", 4)(3, "label", 5);
337
- i0.ɵɵtext(4);
338
- i0.ɵɵpipe(5, "translate");
339
- i0.ɵɵelementEnd();
340
- i0.ɵɵelement(6, "input", 6);
341
- i0.ɵɵpipe(7, "translate");
342
- i0.ɵɵelement(8, "acl-errors-mapper", 7);
343
- i0.ɵɵpipe(9, "translate");
344
- i0.ɵɵelementEnd();
345
- i0.ɵɵelementContainerStart(10, 8);
346
- i0.ɵɵelementStart(11, "aui-form-item", 4)(12, "label", 5);
347
- i0.ɵɵtext(13);
348
- i0.ɵɵpipe(14, "translate");
349
- i0.ɵɵelementEnd();
350
- i0.ɵɵelement(15, "input", 9);
351
- i0.ɵɵelementEnd();
352
- i0.ɵɵelementContainerEnd()();
353
- i0.ɵɵelementStart(16, "div", 10);
354
- i0.ɵɵtext(17);
355
- i0.ɵɵpipe(18, "translate");
356
- i0.ɵɵelementEnd();
357
- i0.ɵɵelementContainerStart(19, 11);
358
- i0.ɵɵelementStart(20, "aui-form-item", 12)(21, "label", 5);
359
- i0.ɵɵtext(22);
360
- i0.ɵɵpipe(23, "translate");
361
- i0.ɵɵelementEnd();
362
- i0.ɵɵelement(24, "acl-key-value-form-table", 13);
363
- i0.ɵɵpipe(25, "async");
364
- i0.ɵɵelementStart(26, "div", 14);
365
- i0.ɵɵelement(27, "acl-pod-preview", 15);
366
- i0.ɵɵpipe(28, "translate");
367
- i0.ɵɵelementEnd();
368
- i0.ɵɵtemplate(29, NetworkPolicyFormComponent_ng_template_29_Template, 3, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
369
- i0.ɵɵelementEnd();
370
- i0.ɵɵelementContainerEnd();
371
- i0.ɵɵtemplate(31, NetworkPolicyFormComponent_ng_container_31_Template, 15, 22, "ng-container", 16)(32, NetworkPolicyFormComponent_ng_template_32_Template, 3, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
372
- i0.ɵɵelementEnd();
373
- } if (rf & 2) {
374
- const zeroStateTemplate_r13 = i0.ɵɵreference(30);
375
- i0.ɵɵproperty("formGroup", ctx.form);
376
- i0.ɵɵadvance(4);
377
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 17, "name"), " ");
378
- i0.ɵɵadvance(2);
379
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(7, 19, ctx.K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY.tip))("aclReadonlyField", ctx.isUpdate);
380
- i0.ɵɵadvance(2);
381
- i0.ɵɵproperty("errors", ctx.form.get("metadata.name").errors)("errorsMapper", i0.ɵɵpureFunction1(33, _c0, i0.ɵɵpipeBind1(9, 21, ctx.K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY.tip)));
382
- i0.ɵɵadvance(5);
383
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 23, "display_name"));
384
- i0.ɵɵadvance(2);
385
- i0.ɵɵproperty("formControlName", ctx.displayNameKey);
386
- i0.ɵɵadvance(2);
387
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 25, "network.target_pod"), " ");
388
- i0.ɵɵadvance(5);
389
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 27, "network.pod_selector"), " ");
390
- i0.ɵɵadvance(2);
391
- i0.ɵɵproperty("zeroStateTemplate", zeroStateTemplate_r13)("validator", ctx.labelValidator)("errorMapper", i0.ɵɵpipeBind1(25, 29, ctx.labelErrorMapper$));
392
- i0.ɵɵadvance(3);
393
- i0.ɵɵproperty("hint", i0.ɵɵpipeBind1(28, 31, "network.target_pod_affected_by_strategy_hint"))("baseParams", ctx.baseParams)("podLabelSelector", ctx.form.get(i0.ɵɵpureFunction0(35, _c1)).value);
394
- i0.ɵɵadvance(4);
395
- i0.ɵɵproperty("ngForOf", ctx.PolicyTypes);
396
- } }, dependencies: [EffectDirectiveModule, i1.E2eAttributeBindingDirective, i1.ValidatorsDirective, CommonModule, i3.NgForOf, i3.NgIf, i3.NgTemplateOutlet, i3.AsyncPipe, ReactiveFormsModule, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.RequiredValidator, i4.MaxLengthValidator, i4.FormControlDirective, i4.FormGroupDirective, i4.FormControlName, i4.FormGroupName, FormModule, i2.FormDirective, i2.FormItemComponent, i2.FormItemErrorDirective, i2.FormItemHintDirective, i2.FormItemLabelDirective, i2.FormItemControlDirective, KeyValueFormTableComponent,
397
- PodPreviewComponent,
398
- TabsModule, i2.TabGroupComponent, i2.TabComponent, i2.TabLabelDirective, ButtonModule, i2.ButtonComponent, IconModule, i2.IconComponent, InputModule, i2.InputComponent, CheckboxModule, i2.CheckboxComponent, i1.TranslatePipe, i1.ErrorsMapperComponent, DeclareDirective,
399
- NetworkPolicyRuleFormComponent,
400
- ReadonlyFieldDirective], encapsulation: 2, changeDetection: 0 }); }
401
- }
402
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NetworkPolicyFormComponent, [{
403
- type: Component,
404
- args: [{ standalone: true, selector: 'acl-network-policy-form', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
405
- EffectDirectiveModule,
406
- CommonModule,
407
- ReactiveFormsModule,
408
- FormModule,
409
- KeyValueFormTableComponent,
410
- PodPreviewComponent,
411
- TabsModule,
412
- ButtonModule,
413
- IconModule,
414
- InputModule,
415
- CheckboxModule,
416
- TRANSLATE_MODULE,
417
- ERRORS_MAPPER_MODULE,
418
- DeclareDirective,
419
- NetworkPolicyRuleFormComponent,
420
- ReadonlyFieldDirective,
421
- ], template: "<form\n [formGroup]=\"form\"\n auiForm\n aclScrollToFirstInvalid\n>\n <ng-container formGroupName=\"metadata\">\n <aui-form-item width=\"large\">\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n <input\n type=\"text\"\n aui-input\n required\n auiFormItemControl\n [placeholder]=\"K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY.tip | translate\"\n formControlName=\"name\"\n maxlength=\"63\"\n [aclReadonlyField]=\"isUpdate\"\n />\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"form.get('metadata.name').errors\"\n [errorsMapper]=\"{\n pattern: K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY.tip | translate,\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n\n <ng-container formGroupName=\"annotations\">\n <aui-form-item width=\"large\">\n <label auiFormItemLabel>{{ 'display_name' | translate }}</label>\n <input\n auiFormItemControl\n type=\"text\"\n aui-input\n [formControlName]=\"displayNameKey\"\n />\n </aui-form-item>\n </ng-container>\n </ng-container>\n\n <div class=\"rc-secondary-title\">\n {{ 'network.target_pod' | translate }}\n </div>\n <ng-container formGroupName=\"spec\">\n <aui-form-item formGroupName=\"podSelector\">\n <label auiFormItemLabel>\n {{ 'network.pod_selector' | translate }}\n </label>\n <acl-key-value-form-table\n auiFormItemControl\n [zeroStateTemplate]=\"zeroStateTemplate\"\n formControlName=\"matchLabels\"\n [validator]=\"labelValidator\"\n [errorMapper]=\"labelErrorMapper$ | async\"\n ></acl-key-value-form-table>\n <div auiFormItemHint>\n <acl-pod-preview\n [hint]=\"'network.target_pod_affected_by_strategy_hint' | translate\"\n [baseParams]=\"baseParams\"\n [podLabelSelector]=\"\n form.get(['spec', 'podSelector', 'matchLabels']).value\n \"\n ></acl-pod-preview>\n </div>\n <ng-template #zeroStateTemplate>\n <span\n class=\"empty-placeholder !tw-border-0 !tw-min-h-[48px] !tw-py-14\"\n >{{ 'network.target_pod_selector_no_data_tip' | translate }}</span\n >\n </ng-template>\n </aui-form-item>\n </ng-container>\n\n <ng-container *ngFor=\"let policyType of PolicyTypes; let i = index\">\n <div\n class=\"tw-flex tw-w-full tw-items-center\"\n [class]=\"i === 1 ? 'tw-mt-16' : ''\"\n >\n <div class=\"rc-secondary-title\">\n {{ 'network.direction_' + policyType | translate }}\n </div>\n <div class=\"tw-flex tw-mb-16 tw-ml-16 tw-justify-between tw-flex-1\">\n <button\n aui-button=\"primary\"\n [plain]=\"true\"\n type=\"button\"\n [disabled]=\"ruleDisabledStateMap[policyType]\"\n (click)=\"addRule(policyType)\"\n >\n <aui-icon icon=\"plus_circle_s\"></aui-icon>\n {{ 'add_xxx' | translate: { xxx: (policyType | translate) } }}\n </button>\n <aui-checkbox\n [value]=\"ruleDisabledStateMap[policyType]\"\n (valueChange)=\"ruleDisabledChanged($event, policyType)\"\n >{{\n 'network.block_all_' + policyType + '_traffic' | translate\n }}</aui-checkbox\n >\n </div>\n </div>\n <ng-container\n *declare=\"\n $any(this.form.get(['spec', policyType])).controls as ruleControls\n \"\n >\n <ng-container\n *ngIf=\"!ruleDisabledStateMap[policyType] && ruleControls.length\"\n >\n <aui-tab-group\n formGroupName=\"spec\"\n type=\"card\"\n >\n <aui-tab\n *ngFor=\"let item of ruleControls; index as index\"\n [closeable]=\"true\"\n (close)=\"removeRule(index, policyType)\"\n >\n <ng-container *ngIf=\"item as control\">\n <ng-container *auiTabLabel>\n <aui-icon\n *ngIf=\"control.invalid && control.dirty\"\n class=\"icon--error\"\n icon=\"xmark_circle_s\"\n size=\"16\"\n ></aui-icon>\n <span>\n {{ policyType | translate }}\n </span>\n </ng-container>\n\n <acl-network-policy-rule-form\n [formControl]=\"$any(control)\"\n [baseParams]=\"baseParams\"\n [policyType]=\"policyType\"\n ></acl-network-policy-rule-form>\n </ng-container>\n </aui-tab>\n </aui-tab-group>\n </ng-container>\n <ng-container\n *ngIf=\"!ruleControls.length || ruleDisabledStateMap[policyType]\"\n >\n <ng-container\n [ngTemplateOutlet]=\"emptyTemplate\"\n [ngTemplateOutletContext]=\"{\n policyType: policyType,\n ruleDisabled: ruleDisabledStateMap[policyType],\n }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template\n #emptyTemplate\n let-policyType=\"policyType\"\n let-ruleDisabled=\"ruleDisabled\"\n >\n <div class=\"tw-pt-[40px] tw-text-center tw-pb-[40px] tw-bg-n-9\">\n <span\n class=\"tw-text-n-4\"\n *ngIf=\"!ruleDisabled\"\n >\n {{ 'network.' + policyType + '_rule_no_data_tip' | translate }}\n </span>\n <span *ngIf=\"ruleDisabled\">{{\n 'network.block_all_' + policyType + '_tip' | translate\n }}</span>\n </div>\n </ng-template>\n</form>\n" }]
422
- }], () => [{ type: i0.Injector }, { type: i1.K8sUtilService }, { type: i1.TranslateService }, { type: i2.DialogService }], { baseParams: [{
423
- type: Input,
424
- args: [{ required: true }]
425
- }], isUpdate: [{
426
- type: Input
427
- }] }); })();
428
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NetworkPolicyFormComponent, { className: "NetworkPolicyFormComponent", filePath: "lib/features/network-policy/form/network-policy/component.ts", lineNumber: 68 }); })();
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvZmVhdHVyZXMvbmV0d29yay1wb2xpY3kvZm9ybS9uZXR3b3JrLXBvbGljeS9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi9mZWF0dXJlcy9uZXR3b3JrLXBvbGljeS9mb3JtL25ldHdvcmstcG9saWN5L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUNMLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix1Q0FBdUMsRUFDdkMsY0FBYyxFQUNkLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFFaEIsK0JBQStCLEVBQy9CLHlCQUF5QixHQUMxQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RSxPQUFPLEVBQUUsbUJBQW1C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ICBCdXR0b25Nb2R1bGUsXG4gIENoZWNrYm94TW9kdWxlLFxuICBDb25maXJtVHlwZSxcbiAgRGlhbG9nU2VydmljZSxcbiAgRm9ybU1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIFRhYnNNb2R1bGUsXG59IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgRElTUExBWV9OQU1FLFxuICBEZWNsYXJlRGlyZWN0aXZlLFxuICBFUlJPUlNfTUFQUEVSX01PRFVMRSxcbiAgRWZmZWN0RGlyZWN0aXZlTW9kdWxlLFxuICBLOFNfUkVTT1VSQ0VfTkFNRV9TVEFSVF9XSVRIX0NIQVJTX09OTFksXG4gIEs4c1V0aWxTZXJ2aWNlLFxuICBLZXlWYWx1ZUZvcm1UYWJsZUNvbXBvbmVudCxcbiAgUmVhZG9ubHlGaWVsZERpcmVjdGl2ZSxcbiAgU1BFQyxcbiAgVFJBTlNMQVRFX01PRFVMRSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgV29ya3NwYWNlLFxuICBnZXRLOHNSZXNvdXJjZUxhYmVsRXJyb3JNYXBwZXIkLFxuICBrOHNSZXNvdXJjZUxhYmVsVmFsaWRhdG9yLFxufSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgVmFsaWRhdG9ycywgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGhhcywgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCYXNlUmVzb3VyY2VGb3JtR3JvdXBDb21wb25lbnQgfSBmcm9tICduZy1yZXNvdXJjZS1mb3JtLXV0aWwnO1xuXG5pbXBvcnQgeyBOZXR3b3JrUG9saWN5LCBQb2xpY3lUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdHlwZXMvazhzLWV4cG9ydHMnO1xuaW1wb3J0IHsgUG9kUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcG9kLXJldmlldy9jb21wb25lbnQnO1xuaW1wb3J0IHsgTmV0d29ya1BvbGljeVJ1bGVGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmV0d29yay1wb2xpY3ktcnVsZS9jb21wb25lbnQnO1xuXG5jb25zdCBQb2xpY3lUeXBlcyA9IFsnaW5ncmVzcycsICdlZ3Jlc3MnXSBhcyBjb25zdDtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnYWNsLW5ldHdvcmstcG9saWN5LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEVmZmVjdERpcmVjdGl2ZU1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtTW9kdWxlLFxuICAgIEtleVZhbHVlRm9ybVRhYmxlQ29tcG9uZW50LFxuICAgIFBvZFByZXZpZXdDb21wb25lbnQsXG4gICAgVGFic01vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBDaGVja2JveE1vZHVsZSxcbiAgICBUUkFOU0xBVEVfTU9EVUxFLFxuICAgIEVSUk9SU19NQVBQRVJfTU9EVUxFLFxuICAgIERlY2xhcmVEaXJlY3RpdmUsXG4gICAgTmV0d29ya1BvbGljeVJ1bGVGb3JtQ29tcG9uZW50LFxuICAgIFJlYWRvbmx5RmllbGREaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtQb2xpY3lGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlc291cmNlRm9ybUdyb3VwQ29tcG9uZW50PE5ldHdvcmtQb2xpY3k+IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgYmFzZVBhcmFtczogV29ya3NwYWNlO1xuXG4gIEBJbnB1dCgpXG4gIGlzVXBkYXRlID0gZmFsc2U7XG5cbiAgZ2V0IGluZ3Jlc3NSdWxlRm9ybUFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFtTUEVDLCAnaW5ncmVzcyddKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBnZXQgaW5ncmVzc1J1bGVDb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5pbmdyZXNzUnVsZUZvcm1BcnJheS5jb250cm9scyA/PyBbXTtcbiAgfVxuXG4gIGdldCBlZ3Jlc3NSdWxlRm9ybUFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFtTUEVDLCAnZWdyZXNzJ10pIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGdldCBlZ3Jlc3NSdWxlQ29udHJvbHMoKSB7XG4gICAgcmV0dXJuIFsuLi4odGhpcy5lZ3Jlc3NSdWxlRm9ybUFycmF5LmNvbnRyb2xzID8/IFtdKV07XG4gIH1cblxuICBLOFNfUkVTT1VSQ0VfTkFNRV9TVEFSVF9XSVRIX0NIQVJTX09OTFkgPVxuICAgIEs4U19SRVNPVVJDRV9OQU1FX1NUQVJUX1dJVEhfQ0hBUlNfT05MWTtcblxuICBsYWJlbFZhbGlkYXRvciA9IGs4c1Jlc291cmNlTGFiZWxWYWxpZGF0b3I7XG4gIGxhYmVsRXJyb3JNYXBwZXIkID0gZ2V0SzhzUmVzb3VyY2VMYWJlbEVycm9yTWFwcGVyJCh0aGlzLnRyYW5zbGF0ZSk7XG4gIFBvbGljeVR5cGVzID0gUG9saWN5VHlwZXM7XG4gIGRpc3BsYXlOYW1lS2V5ID0gdGhpcy5rOHNVdGlsLm5vcm1hbGl6ZVR5cGUoRElTUExBWV9OQU1FKTtcbiAgcnVsZURpc2FibGVkU3RhdGVNYXA6IFJlY29yZDwnaW5ncmVzcycgfCAnZWdyZXNzJywgYm9vbGVhbj4gPSB7XG4gICAgaW5ncmVzczogZmFsc2UsXG4gICAgZWdyZXNzOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNVdGlsOiBLOHNVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogRGlhbG9nU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY3JlYXRlRm9ybSgpIHtcbiAgICBjb25zdCBtZXRhZGF0YUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IHRoaXMuZmIuY29udHJvbCgnJywgW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oSzhTX1JFU09VUkNFX05BTUVfU1RBUlRfV0lUSF9DSEFSU19PTkxZLnBhdHRlcm4pLFxuICAgICAgXSksXG4gICAgICBuYW1lc3BhY2U6IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgICBhbm5vdGF0aW9uczogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIFt0aGlzLmRpc3BsYXlOYW1lS2V5XTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IHNwZWNGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBwb2RTZWxlY3RvcjogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1hdGNoTGFiZWxzOiB0aGlzLmZiLmNvbnRyb2wobnVsbCksXG4gICAgICB9KSxcbiAgICAgIGluZ3Jlc3M6IHRoaXMuZmIuYXJyYXkoW10pLFxuICAgICAgZWdyZXNzOiB0aGlzLmZiLmFycmF5KFtdKSxcbiAgICAgIHBvbGljeVR5cGVzOiB0aGlzLmZiLmNvbnRyb2woW10pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhRm9ybSxcbiAgICAgIHNwZWM6IHNwZWNGb3JtLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0T25Gb3JtQXJyYXlSZXNpemVGbigpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbCh7fSk7XG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFkYXB0UmVzb3VyY2VNb2RlbChyZXNvdXJjZTogTmV0d29ya1BvbGljeSk6IE5ldHdvcmtQb2xpY3kge1xuICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVJ1bGVEaXNhYmxlZFN0YXRlTWFwKHJlc291cmNlKTtcblxuICAgIGlmICh0aGlzLnJ1bGVEaXNhYmxlZFN0YXRlTWFwLmluZ3Jlc3MpIHtcbiAgICAgIHJlc291cmNlLnNwZWMucG9saWN5VHlwZXMgPSBbJ0luZ3Jlc3MnXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ydWxlRGlzYWJsZWRTdGF0ZU1hcC5lZ3Jlc3MpIHtcbiAgICAgIHJlc291cmNlLnNwZWMucG9saWN5VHlwZXMgPSB1bmlxKFtcbiAgICAgICAgLi4uKHJlc291cmNlLnNwZWMucG9saWN5VHlwZXMgPz8gW10pLFxuICAgICAgICAnRWdyZXNzJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIGFzeW5jIHJ1bGVEaXNhYmxlZENoYW5nZWQoXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4gICAgcG9saWN5VHlwZTogTG93ZXJjYXNlPFBvbGljeVR5cGU+LFxuICApIHtcbiAgICBjb25zdCBydWxlRm9ybUFycmF5ID0gdGhpcy5mb3JtLmdldChbU1BFQywgcG9saWN5VHlwZV0pIGFzIEZvcm1BcnJheTtcblxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgaWYgKHJ1bGVGb3JtQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJ1bGVEaXNhYmxlZENvbmZpcm0ocG9saWN5VHlwZSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09ICdvaycpIHtcbiAgICAgICAgICB0aGlzLnJ1bGVEaXNhYmxlZFN0YXRlTWFwW3BvbGljeVR5cGVdID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJ1bGVGb3JtQXJyYXkuY2xlYXIoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRQb2xpY3lUeXBlKHBvbGljeVR5cGUpO1xuICAgICAgdGhpcy5ydWxlRGlzYWJsZWRTdGF0ZU1hcFtwb2xpY3lUeXBlXSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlUG9saWN5VHlwZShwb2xpY3lUeXBlKTtcbiAgICAgIHRoaXMucnVsZURpc2FibGVkU3RhdGVNYXBbcG9saWN5VHlwZV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhZGRSdWxlKHBvbGljeVR5cGU6IExvd2VyY2FzZTxQb2xpY3lUeXBlPikge1xuICAgICh0aGlzLmZvcm0uZ2V0KFtTUEVDLCBwb2xpY3lUeXBlXSkgYXMgRm9ybUFycmF5KS5wdXNoKFxuICAgICAgdGhpcy5mYi5jb250cm9sKHtcbiAgICAgICAgcG9ydHM6IFtdLFxuICAgICAgICBbcG9saWN5VHlwZSA9PT0gJ2luZ3Jlc3MnID8gJ2Zyb20nIDogJ3RvJ106IFtdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkUG9saWN5VHlwZShwb2xpY3lUeXBlKTtcbiAgfVxuXG4gIHJlbW92ZVJ1bGUoaW5kZXg6IG51bWJlciwgcG9saWN5VHlwZTogTG93ZXJjYXNlPFBvbGljeVR5cGU+KSB7XG4gICAgY29uc3QgcnVsZUZvcm1BcnJheSA9XG4gICAgICB0aGlzPy5bXG4gICAgICAgIHBvbGljeVR5cGUgPT09ICdpbmdyZXNzJ1xuICAgICAgICAgID8gJ2luZ3Jlc3NSdWxlRm9ybUFycmF5J1xuICAgICAgICAgIDogJ2VncmVzc1J1bGVGb3JtQXJyYXknXG4gICAgICBdO1xuXG4gICAgcnVsZUZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICB0aGlzLnJlbW92ZVBvbGljeVR5cGUocG9saWN5VHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bGVEaXNhYmxlZENvbmZpcm0ocG9saWN5VHlwZTogTG93ZXJjYXNlPFBvbGljeVR5cGU+KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGlhbG9nXG4gICAgICAuY29uZmlybSh7XG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ25ldHdvcmsuZGlzYWJsZWRfcnVsZV9jb25maXJtJywge1xuICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy50cmFuc2xhdGUuZ2V0KGBuZXR3b3JrLmRpcmVjdGlvbl8ke3BvbGljeVR5cGV9YCksXG4gICAgICAgIH0pLFxuICAgICAgICBjb25maXJtVHlwZTogQ29uZmlybVR5cGUuV2FybmluZyxcbiAgICAgICAgY29uZmlybVRleHQ6IHRoaXMudHJhbnNsYXRlLmdldCgnbmV0d29yay5ibG9jaycpLFxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ2NhbmNlbCcpLFxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+ICdvaycpXG4gICAgICAuY2F0Y2goKCkgPT4gJ2NhbmNlbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQb2xpY3lUeXBlKHBvbGljeVR5cGU6IExvd2VyY2FzZTxQb2xpY3lUeXBlPikge1xuICAgIGNvbnN0IHBvbGljeVR5cGVzQ3RybCA9IHRoaXMuZm9ybS5nZXQoW1NQRUMsICdwb2xpY3lUeXBlcyddKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRQb2xpY3lUeXBlcyA9IHVuaXEoW1xuICAgICAgLi4ucG9saWN5VHlwZXNDdHJsLnZhbHVlLFxuICAgICAgcG9saWN5VHlwZSA9PT0gJ2luZ3Jlc3MnID8gJ0luZ3Jlc3MnIDogJ0VncmVzcycsXG4gICAgXSk7XG5cbiAgICBwb2xpY3lUeXBlc0N0cmwuc2V0VmFsdWUodXBkYXRlZFBvbGljeVR5cGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUG9saWN5VHlwZShwb2xpY3lUeXBlOiBMb3dlcmNhc2U8UG9saWN5VHlwZT4pIHtcbiAgICBjb25zdCBwb2xpY3lUeXBlc0N0cmwgPSB0aGlzLmZvcm0uZ2V0KFtTUEVDLCAncG9saWN5VHlwZXMnXSk7XG4gICAgY29uc3QgcG9saWN5VHlwZXMgPSBwb2xpY3lUeXBlc0N0cmwudmFsdWUgYXMgUG9saWN5VHlwZVtdO1xuICAgIGNvbnN0IHJ1bGVGb3JtQXJyYXkgPVxuICAgICAgdGhpcz8uW1xuICAgICAgICBwb2xpY3lUeXBlID09PSAnaW5ncmVzcydcbiAgICAgICAgICA/ICdpbmdyZXNzUnVsZUZvcm1BcnJheSdcbiAgICAgICAgICA6ICdlZ3Jlc3NSdWxlRm9ybUFycmF5J1xuICAgICAgXTtcblxuICAgIGlmIChydWxlRm9ybUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgcG9saWN5VHlwZVRvUmVtb3ZlID1cbiAgICAgICAgcG9saWN5VHlwZSA9PT0gJ2luZ3Jlc3MnID8gJ0luZ3Jlc3MnIDogJ0VncmVzcyc7XG4gICAgICBjb25zdCB1cGRhdGVkUG9saWN5VHlwZXMgPSBwb2xpY3lUeXBlcy5maWx0ZXIoXG4gICAgICAgIHR5cGUgPT4gdHlwZSAhPT0gcG9saWN5VHlwZVRvUmVtb3ZlLFxuICAgICAgKTtcbiAgICAgIHBvbGljeVR5cGVzQ3RybC5zZXRWYWx1ZSh1cGRhdGVkUG9saWN5VHlwZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUnVsZURpc2FibGVkU3RhdGVNYXAocmVzb3VyY2U6IE5ldHdvcmtQb2xpY3kpIHtcbiAgICBjb25zdCBwb2xpY3lUeXBlcyA9IHJlc291cmNlPy5zcGVjPy5wb2xpY3lUeXBlcztcbiAgICBjb25zdCBydWxlVHlwZXMgPSBbJ2luZ3Jlc3MnLCAnZWdyZXNzJ107XG5cbiAgICBpZiAoXG4gICAgICAhcG9saWN5VHlwZXM/Lmxlbmd0aCAmJlxuICAgICAgIXJ1bGVUeXBlcy5zb21lKHR5cGUgPT4gaGFzKHJlc291cmNlLnNwZWMsIHR5cGUpKVxuICAgICkge1xuICAgICAgdGhpcy5ydWxlRGlzYWJsZWRTdGF0ZU1hcC5pbmdyZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwb2xpY3lUeXBlcz8uZm9yRWFjaChwb2xpY3lUeXBlID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBwb2xpY3lUeXBlLnRvTG93ZXJDYXNlKCkgYXMgTG93ZXJjYXNlPFBvbGljeVR5cGU+O1xuICAgICAgdGhpcy5ydWxlRGlzYWJsZWRTdGF0ZU1hcFt0eXBlXSA9ICFyZXNvdXJjZS5zcGVjW3R5cGVdPy5sZW5ndGg7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gIGF1aUZvcm1cbiAgYWNsU2Nyb2xsVG9GaXJzdEludmFsaWRcbj5cbiAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPVwibWV0YWRhdGFcIj5cbiAgICA8YXVpLWZvcm0taXRlbSB3aWR0aD1cImxhcmdlXCI+XG4gICAgICA8bGFiZWwgYXVpRm9ybUl0ZW1MYWJlbD5cbiAgICAgICAge3sgJ25hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgYXVpLWlucHV0XG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiSzhTX1JFU09VUkNFX05BTUVfU1RBUlRfV0lUSF9DSEFSU19PTkxZLnRpcCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICBtYXhsZW5ndGg9XCI2M1wiXG4gICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzVXBkYXRlXCJcbiAgICAgIC8+XG4gICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgYXVpRm9ybUl0ZW1FcnJvclxuICAgICAgICBbZXJyb3JzXT1cImZvcm0uZ2V0KCdtZXRhZGF0YS5uYW1lJykuZXJyb3JzXCJcbiAgICAgICAgW2Vycm9yc01hcHBlcl09XCJ7XG4gICAgICAgICAgcGF0dGVybjogSzhTX1JFU09VUkNFX05BTUVfU1RBUlRfV0lUSF9DSEFSU19PTkxZLnRpcCB8IHRyYW5zbGF0ZSxcbiAgICAgICAgfVwiXG4gICAgICA+PC9hY2wtZXJyb3JzLW1hcHBlcj5cbiAgICA8L2F1aS1mb3JtLWl0ZW0+XG5cbiAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJhbm5vdGF0aW9uc1wiPlxuICAgICAgPGF1aS1mb3JtLWl0ZW0gd2lkdGg9XCJsYXJnZVwiPlxuICAgICAgICA8bGFiZWwgYXVpRm9ybUl0ZW1MYWJlbD57eyAnZGlzcGxheV9uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRpc3BsYXlOYW1lS2V5XCJcbiAgICAgICAgLz5cbiAgICAgIDwvYXVpLWZvcm0taXRlbT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cInJjLXNlY29uZGFyeS10aXRsZVwiPlxuICAgIHt7ICduZXR3b3JrLnRhcmdldF9wb2QnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJzcGVjXCI+XG4gICAgPGF1aS1mb3JtLWl0ZW0gZm9ybUdyb3VwTmFtZT1cInBvZFNlbGVjdG9yXCI+XG4gICAgICA8bGFiZWwgYXVpRm9ybUl0ZW1MYWJlbD5cbiAgICAgICAge3sgJ25ldHdvcmsucG9kX3NlbGVjdG9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxhY2wta2V5LXZhbHVlLWZvcm0tdGFibGVcbiAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgIFt6ZXJvU3RhdGVUZW1wbGF0ZV09XCJ6ZXJvU3RhdGVUZW1wbGF0ZVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1hdGNoTGFiZWxzXCJcbiAgICAgICAgW3ZhbGlkYXRvcl09XCJsYWJlbFZhbGlkYXRvclwiXG4gICAgICAgIFtlcnJvck1hcHBlcl09XCJsYWJlbEVycm9yTWFwcGVyJCB8IGFzeW5jXCJcbiAgICAgID48L2FjbC1rZXktdmFsdWUtZm9ybS10YWJsZT5cbiAgICAgIDxkaXYgYXVpRm9ybUl0ZW1IaW50PlxuICAgICAgICA8YWNsLXBvZC1wcmV2aWV3XG4gICAgICAgICAgW2hpbnRdPVwiJ25ldHdvcmsudGFyZ2V0X3BvZF9hZmZlY3RlZF9ieV9zdHJhdGVneV9oaW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Jhc2VQYXJhbXNdPVwiYmFzZVBhcmFtc1wiXG4gICAgICAgICAgW3BvZExhYmVsU2VsZWN0b3JdPVwiXG4gICAgICAgICAgICBmb3JtLmdldChbJ3NwZWMnLCAncG9kU2VsZWN0b3InLCAnbWF0Y2hMYWJlbHMnXSkudmFsdWVcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9hY2wtcG9kLXByZXZpZXc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjemVyb1N0YXRlVGVtcGxhdGU+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJlbXB0eS1wbGFjZWhvbGRlciAhdHctYm9yZGVyLTAgIXR3LW1pbi1oLVs0OHB4XSAhdHctcHktMTRcIlxuICAgICAgICAgID57eyAnbmV0d29yay50YXJnZXRfcG9kX3NlbGVjdG9yX25vX2RhdGFfdGlwJyB8IHRyYW5zbGF0ZSB9fTwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYXVpLWZvcm0taXRlbT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcG9saWN5VHlwZSBvZiBQb2xpY3lUeXBlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidHctZmxleCB0dy13LWZ1bGwgdHctaXRlbXMtY2VudGVyXCJcbiAgICAgIFtjbGFzc109XCJpID09PSAxID8gJ3R3LW10LTE2JyA6ICcnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicmMtc2Vjb25kYXJ5LXRpdGxlXCI+XG4gICAgICAgIHt7ICduZXR3b3JrLmRpcmVjdGlvbl8nICsgcG9saWN5VHlwZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1tYi0xNiB0dy1tbC0xNiB0dy1qdXN0aWZ5LWJldHdlZW4gdHctZmxleC0xXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhdWktYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJydWxlRGlzYWJsZWRTdGF0ZU1hcFtwb2xpY3lUeXBlXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImFkZFJ1bGUocG9saWN5VHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF1aS1pY29uIGljb249XCJwbHVzX2NpcmNsZV9zXCI+PC9hdWktaWNvbj5cbiAgICAgICAgICB7eyAnYWRkX3h4eCcgfCB0cmFuc2xhdGU6IHsgeHh4OiAocG9saWN5VHlwZSB8IHRyYW5zbGF0ZSkgfSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGF1aS1jaGVja2JveFxuICAgICAgICAgIFt2YWx1ZV09XCJydWxlRGlzYWJsZWRTdGF0ZU1hcFtwb2xpY3lUeXBlXVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJ1bGVEaXNhYmxlZENoYW5nZWQoJGV2ZW50LCBwb2xpY3lUeXBlKVwiXG4gICAgICAgICAgPnt7XG4gICAgICAgICAgICAnbmV0d29yay5ibG9ja19hbGxfJyArIHBvbGljeVR5cGUgKyAnX3RyYWZmaWMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L2F1aS1jaGVja2JveFxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqZGVjbGFyZT1cIlxuICAgICAgICAkYW55KHRoaXMuZm9ybS5nZXQoWydzcGVjJywgcG9saWN5VHlwZV0pKS5jb250cm9scyBhcyBydWxlQ29udHJvbHNcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIiFydWxlRGlzYWJsZWRTdGF0ZU1hcFtwb2xpY3lUeXBlXSAmJiBydWxlQ29udHJvbHMubGVuZ3RoXCJcbiAgICAgID5cbiAgICAgICAgPGF1aS10YWItZ3JvdXBcbiAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwic3BlY1wiXG4gICAgICAgICAgdHlwZT1cImNhcmRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF1aS10YWJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJ1bGVDb250cm9sczsgaW5kZXggYXMgaW5kZXhcIlxuICAgICAgICAgICAgW2Nsb3NlYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChjbG9zZSk9XCJyZW1vdmVSdWxlKGluZGV4LCBwb2xpY3lUeXBlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gYXMgY29udHJvbFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICphdWlUYWJMYWJlbD5cbiAgICAgICAgICAgICAgICA8YXVpLWljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkICYmIGNvbnRyb2wuZGlydHlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLS1lcnJvclwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwieG1hcmtfY2lyY2xlX3NcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIjE2XCJcbiAgICAgICAgICAgICAgICA+PC9hdWktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IHBvbGljeVR5cGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxhY2wtbmV0d29yay1wb2xpY3ktcnVsZS1mb3JtXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgICAgICAgICAgICAgIFtiYXNlUGFyYW1zXT1cImJhc2VQYXJhbXNcIlxuICAgICAgICAgICAgICAgIFtwb2xpY3lUeXBlXT1cInBvbGljeVR5cGVcIlxuICAgICAgICAgICAgICA+PC9hY2wtbmV0d29yay1wb2xpY3ktcnVsZS1mb3JtPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9hdWktdGFiPlxuICAgICAgICA8L2F1aS10YWItZ3JvdXA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCIhcnVsZUNvbnRyb2xzLmxlbmd0aCB8fCBydWxlRGlzYWJsZWRTdGF0ZU1hcFtwb2xpY3lUeXBlXVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eVRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgcG9saWN5VHlwZTogcG9saWN5VHlwZSxcbiAgICAgICAgICAgIHJ1bGVEaXNhYmxlZDogcnVsZURpc2FibGVkU3RhdGVNYXBbcG9saWN5VHlwZV0sXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGVcbiAgICAjZW1wdHlUZW1wbGF0ZVxuICAgIGxldC1wb2xpY3lUeXBlPVwicG9saWN5VHlwZVwiXG4gICAgbGV0LXJ1bGVEaXNhYmxlZD1cInJ1bGVEaXNhYmxlZFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwidHctcHQtWzQwcHhdIHR3LXRleHQtY2VudGVyIHR3LXBiLVs0MHB4XSB0dy1iZy1uLTlcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidHctdGV4dC1uLTRcIlxuICAgICAgICAqbmdJZj1cIiFydWxlRGlzYWJsZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnbmV0d29yay4nICsgcG9saWN5VHlwZSArICdfcnVsZV9ub19kYXRhX3RpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwicnVsZURpc2FibGVkXCI+e3tcbiAgICAgICAgJ25ldHdvcmsuYmxvY2tfYWxsXycgKyBwb2xpY3lUeXBlICsgJ190aXAnIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZm9ybT5cbiJdfQ==
@@ -1,102 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { FormModule, InputModule } from '@alauda/ui';
3
- import { ERRORS_MAPPER_MODULE, EffectDirectiveModule, ObservableInput, TRANSLATE_MODULE, bind, publishRef, } from '@alauda-fe/common';
4
- import { CommonModule } from '@angular/common';
5
- import { ChangeDetectionStrategy, Component, Injector, Input, } from '@angular/core';
6
- import { AbstractControl, ReactiveFormsModule, Validators, } from '@angular/forms';
7
- import { BaseResourceFormGroupComponent } from 'ng-resource-form-util';
8
- import { Observable, first, map, switchMap, takeUntil } from 'rxjs';
9
- import { NetworkUtilService } from '../../../../services/network-util.service';
10
- import { adaptIpMode, isCidrAddressValid, } from '../../../../utils/cidr-exports';
11
- import { NetworkPolicyExceptRemoteInputFormComponent } from '../network-policy-remote-except-input/component';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "../../../../services/network-util.service";
14
- import * as i2 from "@alauda-fe/common";
15
- import * as i3 from "@angular/common";
16
- import * as i4 from "@angular/forms";
17
- import * as i5 from "@alauda/ui";
18
- const _c0 = a0 => ({ cidrPattern: a0 });
19
- export class NetworkPolicyIpBlockFormComponent extends BaseResourceFormGroupComponent {
20
- constructor(injector, networkUtil) {
21
- super(injector);
22
- this.networkUtil = networkUtil;
23
- this.networkMode$ = this.cluster$.pipe(switchMap(cluster => this.networkUtil.getNetworkMode$(cluster)), publishRef());
24
- }
25
- createForm() {
26
- return this.fb.group({
27
- cidr: this.fb.control('', [Validators.required], [this.asyncValidateCidr]),
28
- except: this.fb.control([]),
29
- });
30
- }
31
- asyncValidateCidr(ctrl) {
32
- return this.networkMode$.pipe(map(mode => {
33
- const cidr = ctrl.value;
34
- const ipMode = adaptIpMode(cidr, mode);
35
- return cidr && !isCidrAddressValid(cidr, ipMode)
36
- ? {
37
- cidrPattern: true,
38
- }
39
- : null;
40
- }), first(), takeUntil(this.destroy$));
41
- }
42
- static { this.ɵfac = function NetworkPolicyIpBlockFormComponent_Factory(t) { return new (t || NetworkPolicyIpBlockFormComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.NetworkUtilService)); }; }
43
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NetworkPolicyIpBlockFormComponent, selectors: [["acl-network-policy-ip-block-form"]], inputs: { cluster: "cluster" }, standalone: true, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 16, vars: 22, consts: [["auiForm", "", 1, "last-form-item-no-margin", 3, "formGroup"], ["width", "medium"], ["auiFormItemLabel", ""], ["aui-input", "", "required", "", "auiFormItemControl", "", "formControlName", "cidr", "type", "text", 3, "placeholder"], ["auiFormItemError", "", 3, "errorsMapper", "errors"], ["auiFormItemControl", "", "formControlName", "except", 1, "tw-w-full", 3, "remoteIpBlock", "networkMode"]], template: function NetworkPolicyIpBlockFormComponent_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "form", 0)(1, "aui-form-item", 1)(2, "label", 2);
45
- i0.ɵɵtext(3);
46
- i0.ɵɵpipe(4, "translate");
47
- i0.ɵɵelementEnd();
48
- i0.ɵɵelement(5, "input", 3);
49
- i0.ɵɵpipe(6, "translate");
50
- i0.ɵɵelement(7, "acl-errors-mapper", 4);
51
- i0.ɵɵpipe(8, "async");
52
- i0.ɵɵpipe(9, "translate");
53
- i0.ɵɵelementEnd();
54
- i0.ɵɵelementStart(10, "aui-form-item")(11, "label", 2);
55
- i0.ɵɵtext(12);
56
- i0.ɵɵpipe(13, "translate");
57
- i0.ɵɵelementEnd();
58
- i0.ɵɵelement(14, "acl-network-policy-remote-ip-except-input", 5);
59
- i0.ɵɵpipe(15, "async");
60
- i0.ɵɵelementEnd()();
61
- } if (rf & 2) {
62
- i0.ɵɵproperty("formGroup", ctx.form);
63
- i0.ɵɵadvance(3);
64
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 8, "network.cidr"), " ");
65
- i0.ɵɵadvance(2);
66
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(6, 10, "network.please_input_correct_cidr"));
67
- i0.ɵɵadvance(2);
68
- i0.ɵɵproperty("errorsMapper", i0.ɵɵpureFunction1(20, _c0, i0.ɵɵpipeBind1(9, 14, i0.ɵɵpipeBind1(8, 12, ctx.networkMode$) === "v6" ? "network.please_input_correct_ipv6_cidr_with_demo" : "network.please_input_correct_cidr")))("errors", ctx.form.get("cidr").errors);
69
- i0.ɵɵadvance(5);
70
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 16, "network.except"), " ");
71
- i0.ɵɵadvance(2);
72
- i0.ɵɵproperty("remoteIpBlock", ctx.form.get("cidr").value)("networkMode", i0.ɵɵpipeBind1(15, 18, ctx.networkMode$));
73
- } }, dependencies: [EffectDirectiveModule, i2.ValidatorsDirective, CommonModule, i3.AsyncPipe, ReactiveFormsModule, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.RequiredValidator, i4.FormGroupDirective, i4.FormControlName, FormModule, i5.FormDirective, i5.FormItemComponent, i5.FormItemErrorDirective, i5.FormItemLabelDirective, i5.FormItemControlDirective, InputModule, i5.InputComponent, i2.TranslatePipe, i2.ErrorsMapperComponent, NetworkPolicyExceptRemoteInputFormComponent], encapsulation: 2, changeDetection: 0 }); }
74
- }
75
- __decorate([
76
- ObservableInput(),
77
- __metadata("design:type", Observable)
78
- ], NetworkPolicyIpBlockFormComponent.prototype, "cluster$", void 0);
79
- __decorate([
80
- bind,
81
- __metadata("design:type", Function),
82
- __metadata("design:paramtypes", [AbstractControl]),
83
- __metadata("design:returntype", void 0)
84
- ], NetworkPolicyIpBlockFormComponent.prototype, "asyncValidateCidr", null);
85
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NetworkPolicyIpBlockFormComponent, [{
86
- type: Component,
87
- args: [{ standalone: true, selector: 'acl-network-policy-ip-block-form', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
88
- EffectDirectiveModule,
89
- CommonModule,
90
- ReactiveFormsModule,
91
- FormModule,
92
- InputModule,
93
- TRANSLATE_MODULE,
94
- ERRORS_MAPPER_MODULE,
95
- NetworkPolicyExceptRemoteInputFormComponent,
96
- ], template: "<form\n [formGroup]=\"form\"\n auiForm\n class=\"last-form-item-no-margin\"\n>\n <aui-form-item width=\"medium\">\n <label auiFormItemLabel>\n {{ 'network.cidr' | translate }}\n </label>\n <input\n aui-input\n required\n auiFormItemControl\n formControlName=\"cidr\"\n type=\"text\"\n [placeholder]=\"'network.please_input_correct_cidr' | translate\"\n />\n <acl-errors-mapper\n auiFormItemError\n [errorsMapper]=\"{\n cidrPattern:\n ((networkMode$ | async) === 'v6'\n ? 'network.please_input_correct_ipv6_cidr_with_demo'\n : 'network.please_input_correct_cidr'\n ) | translate,\n }\"\n [errors]=\"form.get('cidr').errors\"\n ></acl-errors-mapper>\n </aui-form-item>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'network.except' | translate }}\n </label>\n <acl-network-policy-remote-ip-except-input\n auiFormItemControl\n class=\"tw-w-full\"\n [remoteIpBlock]=\"form.get('cidr').value\"\n formControlName=\"except\"\n [networkMode]=\"networkMode$ | async\"\n ></acl-network-policy-remote-ip-except-input>\n </aui-form-item>\n</form>\n" }]
97
- }], () => [{ type: i0.Injector }, { type: i1.NetworkUtilService }], { cluster: [{
98
- type: Input,
99
- args: [{ required: true }]
100
- }], cluster$: [], asyncValidateCidr: [] }); })();
101
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NetworkPolicyIpBlockFormComponent, { className: "NetworkPolicyIpBlockFormComponent", filePath: "lib/features/network-policy/form/network-policy-ip-block/component.ts", lineNumber: 49 }); })();
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvZmVhdHVyZXMvbmV0d29yay1wb2xpY3kvZm9ybS9uZXR3b3JrLXBvbGljeS1pcC1ibG9jay9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi9mZWF0dXJlcy9uZXR3b3JrLXBvbGljeS9mb3JtL25ldHdvcmstcG9saWN5LWlwLWJsb2NrL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLFVBQVUsR0FDWCxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRS9FLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEdBQ25CLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLDJDQUEyQyxFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7O0FBa0I5RyxNQUFNLE9BQU8saUNBQWtDLFNBQVEsOEJBQXVDO0lBWTVGLFlBQ0UsUUFBa0IsRUFDRCxXQUErQjtRQUVoRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFGQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFQbEQsaUJBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDL0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDL0QsVUFBVSxFQUFFLENBQ2IsQ0FBQztJQU9GLENBQUM7SUFFUSxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUNuQixFQUFFLEVBQ0YsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ3JCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQ3pCO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsaUJBQWlCLENBQUMsSUFBcUI7UUFDckMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQWUsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXZDLE9BQU8sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztnQkFDOUMsQ0FBQyxDQUFDO29CQUNFLFdBQVcsRUFBRSxJQUFJO2lCQUNsQjtnQkFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLEVBQ1AsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekIsQ0FBQztJQUNKLENBQUM7a0dBOUNVLGlDQUFpQztvRUFBakMsaUNBQWlDO1lDMUMxQyxBQURGLEFBTEYsK0JBSUMsdUJBQytCLGVBQ0o7WUFDdEIsWUFDRjs7WUFBQSxpQkFBUTtZQUNSLDJCQU9FOztZQUNGLHVDQVVxQjs7O1lBQ3ZCLGlCQUFnQjtZQUVkLEFBREYsc0NBQWUsZ0JBQ1c7WUFDdEIsYUFDRjs7WUFBQSxpQkFBUTtZQUNSLGdFQU02Qzs7WUFFakQsQUFERSxpQkFBZ0IsRUFDWDs7WUF4Q0wsb0NBQWtCO1lBTWQsZUFDRjtZQURFLHFFQUNGO1lBT0UsZUFBK0Q7WUFBL0Qsd0ZBQStEO1lBSS9ELGVBTUU7WUFDRixBQVBBLDhOQU1FLHVDQUNnQztZQUtsQyxlQUNGO1lBREUseUVBQ0Y7WUFJRSxlQUF3QztZQUV4QyxBQUZBLDBEQUF3Qyx5REFFSjs0QkRBdEMscUJBQXFCLDBCQUNyQixZQUFZLGdCQUNaLG1CQUFtQiwySkFDbkIsVUFBVSw2SEFDVixXQUFXLGlFQUdYLDJDQUEyQzs7QUFRN0M7SUFEQyxlQUFlLEVBQUU7OEJBQ1AsVUFBVTttRUFBUztBQTBCOUI7SUFEQyxJQUFJOztxQ0FDbUIsZUFBZTs7MEVBZXRDO2lGQTlDVSxpQ0FBaUM7Y0FoQjdDLFNBQVM7NkJBQ0ksSUFBSSxZQUNOLGtDQUFrQyxtQkFFM0IsdUJBQXVCLENBQUMsTUFBTSxXQUN0QztvQkFDUCxxQkFBcUI7b0JBQ3JCLFlBQVk7b0JBQ1osbUJBQW1CO29CQUNuQixVQUFVO29CQUNWLFdBQVc7b0JBQ1gsZ0JBQWdCO29CQUNoQixvQkFBb0I7b0JBQ3BCLDJDQUEyQztpQkFDNUM7MEVBSUQsT0FBTztrQkFETixLQUFLO21CQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUl6QixRQUFRLE1BMEJSLGlCQUFpQjtrRkEvQk4saUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybU1vZHVsZSwgSW5wdXRNb2R1bGUgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7XG4gIEVSUk9SU19NQVBQRVJfTU9EVUxFLFxuICBFZmZlY3REaXJlY3RpdmVNb2R1bGUsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgVFJBTlNMQVRFX01PRFVMRSxcbiAgYmluZCxcbiAgcHVibGlzaFJlZixcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VSZXNvdXJjZUZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJ25nLXJlc291cmNlLWZvcm0tdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZXR3b3JrVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9uZXR3b3JrLXV0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBJUEJsb2NrIH0gZnJvbSAnLi4vLi4vLi4vLi4vdHlwZXMvazhzLWV4cG9ydHMnO1xuaW1wb3J0IHtcbiAgYWRhcHRJcE1vZGUsXG4gIGlzQ2lkckFkZHJlc3NWYWxpZCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY2lkci1leHBvcnRzJztcbmltcG9ydCB7IE5ldHdvcmtQb2xpY3lFeGNlcHRSZW1vdGVJbnB1dEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZXR3b3JrLXBvbGljeS1yZW1vdGUtZXhjZXB0LWlucHV0L2NvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2FjbC1uZXR3b3JrLXBvbGljeS1pcC1ibG9jay1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBFZmZlY3REaXJlY3RpdmVNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBUUkFOU0xBVEVfTU9EVUxFLFxuICAgIEVSUk9SU19NQVBQRVJfTU9EVUxFLFxuICAgIE5ldHdvcmtQb2xpY3lFeGNlcHRSZW1vdGVJbnB1dEZvcm1Db21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtQb2xpY3lJcEJsb2NrRm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VSZXNvdXJjZUZvcm1Hcm91cENvbXBvbmVudDxJUEJsb2NrPiB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGNsdXN0ZXI6IHN0cmluZztcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgY2x1c3RlciQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgbmV0d29ya01vZGUkID0gdGhpcy5jbHVzdGVyJC5waXBlKFxuICAgIHN3aXRjaE1hcChjbHVzdGVyID0+IHRoaXMubmV0d29ya1V0aWwuZ2V0TmV0d29ya01vZGUkKGNsdXN0ZXIpKSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya1V0aWw6IE5ldHdvcmtVdGlsU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjaWRyOiB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIFt0aGlzLmFzeW5jVmFsaWRhdGVDaWRyXSxcbiAgICAgICksXG4gICAgICBleGNlcHQ6IHRoaXMuZmIuY29udHJvbChbXSksXG4gICAgfSk7XG4gIH1cblxuICBAYmluZFxuICBhc3luY1ZhbGlkYXRlQ2lkcihjdHJsOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrTW9kZSQucGlwZShcbiAgICAgIG1hcChtb2RlID0+IHtcbiAgICAgICAgY29uc3QgY2lkciA9IGN0cmwudmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBpcE1vZGUgPSBhZGFwdElwTW9kZShjaWRyLCBtb2RlKTtcblxuICAgICAgICByZXR1cm4gY2lkciAmJiAhaXNDaWRyQWRkcmVzc1ZhbGlkKGNpZHIsIGlwTW9kZSlcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2lkclBhdHRlcm46IHRydWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gIGF1aUZvcm1cbiAgY2xhc3M9XCJsYXN0LWZvcm0taXRlbS1uby1tYXJnaW5cIlxuPlxuICA8YXVpLWZvcm0taXRlbSB3aWR0aD1cIm1lZGl1bVwiPlxuICAgIDxsYWJlbCBhdWlGb3JtSXRlbUxhYmVsPlxuICAgICAge3sgJ25ldHdvcmsuY2lkcicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgYXVpLWlucHV0XG4gICAgICByZXF1aXJlZFxuICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJjaWRyXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInbmV0d29yay5wbGVhc2VfaW5wdXRfY29ycmVjdF9jaWRyJyB8IHRyYW5zbGF0ZVwiXG4gICAgLz5cbiAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgIGF1aUZvcm1JdGVtRXJyb3JcbiAgICAgIFtlcnJvcnNNYXBwZXJdPVwie1xuICAgICAgICBjaWRyUGF0dGVybjpcbiAgICAgICAgICAoKG5ldHdvcmtNb2RlJCB8IGFzeW5jKSA9PT0gJ3Y2J1xuICAgICAgICAgICAgPyAnbmV0d29yay5wbGVhc2VfaW5wdXRfY29ycmVjdF9pcHY2X2NpZHJfd2l0aF9kZW1vJ1xuICAgICAgICAgICAgOiAnbmV0d29yay5wbGVhc2VfaW5wdXRfY29ycmVjdF9jaWRyJ1xuICAgICAgICAgICkgfCB0cmFuc2xhdGUsXG4gICAgICB9XCJcbiAgICAgIFtlcnJvcnNdPVwiZm9ybS5nZXQoJ2NpZHInKS5lcnJvcnNcIlxuICAgID48L2FjbC1lcnJvcnMtbWFwcGVyPlxuICA8L2F1aS1mb3JtLWl0ZW0+XG4gIDxhdWktZm9ybS1pdGVtPlxuICAgIDxsYWJlbCBhdWlGb3JtSXRlbUxhYmVsPlxuICAgICAge3sgJ25ldHdvcmsuZXhjZXB0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGFjbC1uZXR3b3JrLXBvbGljeS1yZW1vdGUtaXAtZXhjZXB0LWlucHV0XG4gICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgIGNsYXNzPVwidHctdy1mdWxsXCJcbiAgICAgIFtyZW1vdGVJcEJsb2NrXT1cImZvcm0uZ2V0KCdjaWRyJykudmFsdWVcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXhjZXB0XCJcbiAgICAgIFtuZXR3b3JrTW9kZV09XCJuZXR3b3JrTW9kZSQgfCBhc3luY1wiXG4gICAgPjwvYWNsLW5ldHdvcmstcG9saWN5LXJlbW90ZS1pcC1leGNlcHQtaW5wdXQ+XG4gIDwvYXVpLWZvcm0taXRlbT5cbjwvZm9ybT5cbiJdfQ==