@alauda-fe/common 1.4.28-beta.5 → 1.4.28

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 (174) hide show
  1. package/core/constants/constants.d.ts +0 -3
  2. package/core/services/intercept-deactivate.service.d.ts +2 -2
  3. package/core/services/time.service.d.ts +2 -8
  4. package/esm2022/abnormal-page/abnormal-page.component.mjs +1 -1
  5. package/esm2022/array-form-table/form/component.mjs +1 -1
  6. package/esm2022/array-form-table/key-value-form/component.mjs +1 -1
  7. package/esm2022/array-form-table/key-value-table/component.mjs +1 -1
  8. package/esm2022/array-form-table/string-array-form/component.mjs +1 -1
  9. package/esm2022/async-data/error-page/component.mjs +1 -1
  10. package/esm2022/async-data/page-state/component.mjs +1 -1
  11. package/esm2022/business/notification-disabled-container/component.mjs +1 -1
  12. package/esm2022/business/resource-select/exports/cluster-list/component.mjs +1 -1
  13. package/esm2022/business/resource-select/exports/cluster-selector/component.mjs +1 -1
  14. package/esm2022/business/resource-select/exports/icon/component.mjs +1 -1
  15. package/esm2022/business/resource-select/exports/mesh-group-selector/component.mjs +1 -1
  16. package/esm2022/business/resource-select/exports/namespace-list/component.mjs +1 -1
  17. package/esm2022/business/resource-select/exports/namespace-page/component.mjs +1 -1
  18. package/esm2022/business/resource-select/exports/namespace-selector/component.mjs +1 -1
  19. package/esm2022/business/resource-select/exports/project-list/component.mjs +1 -1
  20. package/esm2022/business/resource-select/exports/project-page/component.mjs +1 -1
  21. package/esm2022/business/resource-select/exports/project-selector/component.mjs +1 -1
  22. package/esm2022/business/resource-select/internals/data-grid/component.mjs +1 -1
  23. package/esm2022/business/resource-select/internals/meshgroup-list/component.mjs +1 -1
  24. package/esm2022/business/resource-select/internals/no-data/component.mjs +1 -1
  25. package/esm2022/business/resource-select/internals/resource-dashboard/component.mjs +1 -1
  26. package/esm2022/business/resource-select/internals/selector-popup/component.mjs +1 -1
  27. package/esm2022/chart/common/axis/axis-label.component.mjs +1 -1
  28. package/esm2022/chart/common/axis/x-axis-ticks.component.mjs +1 -1
  29. package/esm2022/chart/common/axis/x-axis.component.mjs +1 -1
  30. package/esm2022/chart/common/axis/x-plot-lines.component.mjs +1 -1
  31. package/esm2022/chart/common/axis/y-axis-ticks.component.mjs +1 -1
  32. package/esm2022/chart/common/axis/y-axis.component.mjs +1 -1
  33. package/esm2022/chart/common/axis/y-plot-lines.component.mjs +1 -1
  34. package/esm2022/chart/common/chart/chart.component.mjs +1 -1
  35. package/esm2022/chart/common/legend/legend.component.mjs +1 -1
  36. package/esm2022/chart/common/range-area/range-area.component.mjs +1 -1
  37. package/esm2022/chart/common/reference-area/reference-area.component.mjs +1 -1
  38. package/esm2022/chart/common/series/area-series.component.mjs +1 -1
  39. package/esm2022/chart/common/series/bar-path.component.mjs +1 -1
  40. package/esm2022/chart/common/series/bar-series.component.mjs +1 -1
  41. package/esm2022/chart/common/series/line-series.component.mjs +1 -1
  42. package/esm2022/chart/common/tooltip/tooltip.component.mjs +1 -1
  43. package/esm2022/chart/custom-template/dropdown-legend.mjs +1 -1
  44. package/esm2022/code/code-display-dialog/component.mjs +1 -1
  45. package/esm2022/code/k8s-yaml-display-dialog/component.mjs +1 -1
  46. package/esm2022/code/resource-yaml-display/component.mjs +1 -1
  47. package/esm2022/code/resource-yaml-editor/component.mjs +1 -1
  48. package/esm2022/code/yaml-sidebar/component.mjs +1 -1
  49. package/esm2022/core/components/tree/node/component.mjs +1 -1
  50. package/esm2022/core/components/tree/tree/component.mjs +1 -1
  51. package/esm2022/core/constants/constants.mjs +1 -4
  52. package/esm2022/core/directives/readonly-field.directive.mjs +1 -1
  53. package/esm2022/core/guards/intercept-deactivate.guard.mjs +2 -2
  54. package/esm2022/core/services/intercept-deactivate.service.mjs +1 -1
  55. package/esm2022/core/services/time.service.mjs +36 -13
  56. package/esm2022/custom-columns-setting/component.mjs +1 -1
  57. package/esm2022/disabled-container/disabled-container.component.mjs +1 -1
  58. package/esm2022/editable/editable.component.mjs +1 -1
  59. package/esm2022/editable-text/component.mjs +1 -1
  60. package/esm2022/exec/placeholder/component.mjs +1 -1
  61. package/esm2022/exec/terminal/component.mjs +1 -1
  62. package/esm2022/exec/terminal-group/component.mjs +1 -1
  63. package/esm2022/feature-gate-forbidden/component/component.mjs +1 -1
  64. package/esm2022/form/errors-mapper/errors-mapper-component/component.mjs +1 -1
  65. package/esm2022/form/errors-mapper/errors-mapper.directive.mjs +1 -1
  66. package/esm2022/form/labels-editor/component.mjs +1 -1
  67. package/esm2022/form/taints-editor/component.mjs +1 -1
  68. package/esm2022/form/upload-file/component.mjs +1 -1
  69. package/esm2022/form/validators/strong-password/strong-password-tooltip/component.mjs +1 -1
  70. package/esm2022/graph-canvas/components/graph-actions.component.mjs +1 -1
  71. package/esm2022/graph-canvas/components/graph-canvas.component.mjs +1 -1
  72. package/esm2022/graph-canvas/components/graph-link.component.mjs +1 -1
  73. package/esm2022/graph-canvas/components/graph-links.component.mjs +1 -1
  74. package/esm2022/grid-layout/components/grid/component.mjs +1 -1
  75. package/esm2022/grid-layout/components/grid-items/component.mjs +1 -1
  76. package/esm2022/help-document/component.mjs +1 -1
  77. package/esm2022/k8s-resource-list/footer/component.mjs +1 -1
  78. package/esm2022/k8s-shared/resource-mark/k8s-resource-mark.component.mjs +1 -1
  79. package/esm2022/k8s-shared/update-description-dialog/component.mjs +1 -1
  80. package/esm2022/k8s-shared/update-display-name-dialog/component.mjs +1 -1
  81. package/esm2022/k8s-shared/update-key-value-dialog/component.mjs +1 -1
  82. package/esm2022/lazy-component/lazy-load-component.mjs +1 -1
  83. package/esm2022/license/license-error/component.mjs +1 -1
  84. package/esm2022/list-display/component.mjs +1 -1
  85. package/esm2022/metric-chart/metric-chart.component.mjs +1 -1
  86. package/esm2022/metric-chart/metric-time-pick.mjs +1 -1
  87. package/esm2022/multi-search/action-input/component.mjs +1 -1
  88. package/esm2022/multi-search/form/component.mjs +1 -1
  89. package/esm2022/multi-search/multi-search-tags/component.mjs +1 -1
  90. package/esm2022/mutable/mosaic/mosaic.component.mjs +1 -1
  91. package/esm2022/notification/feedback-notification/component.mjs +1 -1
  92. package/esm2022/overview-banner/overview-banner.component.mjs +1 -1
  93. package/esm2022/page-guard/component/component.mjs +1 -1
  94. package/esm2022/page-scaffold/navigation/breadcrumb/breadcrumb.component.mjs +1 -1
  95. package/esm2022/page-scaffold/navigation/nav-menu/nav-item-li/nav-item-li.component.mjs +1 -1
  96. package/esm2022/page-scaffold/navigation/nav-menu/nav-item-ul/nav-item-ul.component.mjs +1 -1
  97. package/esm2022/page-scaffold/navigation/nav-menu/nav-menu.component.mjs +1 -1
  98. package/esm2022/page-scaffold/page/notices/maintenance.component.mjs +1 -1
  99. package/esm2022/page-scaffold/page/notices/notice.component.mjs +1 -1
  100. package/esm2022/page-scaffold/page/page.component.mjs +1 -1
  101. package/esm2022/page-scaffold/page/page.module.mjs +6 -5
  102. package/esm2022/page-scaffold/page-header/account-menu/component/component.mjs +1 -1
  103. package/esm2022/page-scaffold/page-header/common-layout/namespace-select/component.mjs +1 -1
  104. package/esm2022/page-scaffold/page-header/common-layout/product-select/component.mjs +1 -1
  105. package/esm2022/page-scaffold/page-header/component.mjs +1 -1
  106. package/esm2022/page-scaffold/page-header/enterprise-support-status/component.mjs +1 -1
  107. package/esm2022/page-scaffold/page-header/header-notify/component/header-notify.component.mjs +1 -1
  108. package/esm2022/page-scaffold/page-header/header-notify/component/notification-list/notification-list.component.mjs +1 -1
  109. package/esm2022/page-scaffold/page-header/help-menu/component/component.mjs +1 -1
  110. package/esm2022/page-scaffold/page-header/help-menu/module.mjs +9 -8
  111. package/esm2022/pie-derivative-chart/donut-status/component.mjs +1 -1
  112. package/esm2022/pie-derivative-chart/radial-bar/radial-bar-chart.component.mjs +1 -1
  113. package/esm2022/pod-status/component.mjs +1 -1
  114. package/esm2022/searchable-selector/component.mjs +1 -1
  115. package/esm2022/skeleton/item/component.mjs +1 -1
  116. package/esm2022/skeleton/nav-skeleton/component.mjs +1 -1
  117. package/esm2022/table/component.mjs +1 -1
  118. package/esm2022/table/module.mjs +12 -11
  119. package/esm2022/translate/constants.mjs +1 -2
  120. package/esm2022/translate/intl-format.pipes.mjs +293 -0
  121. package/esm2022/translate/public-api.mjs +4 -3
  122. package/esm2022/translate/relative-time-manager.service.mjs +87 -0
  123. package/esm2022/translate/translate.directive.mjs +5 -4
  124. package/esm2022/translate/translate.module.mjs +22 -3
  125. package/esm2022/translate/translate.pipe.mjs +7 -8
  126. package/esm2022/translate/translate.service.mjs +721 -142
  127. package/esm2022/translate/types.mjs +1 -1
  128. package/esm2022/view-chart/custom-template/dropdown-legend.mjs +1 -1
  129. package/esm2022/view-chart/legend/legend.component.mjs +1 -1
  130. package/esm2022/view-chart/view-chart.component.mjs +1 -1
  131. package/esm2022/view-zchart/custom-template/dropdown-legend.mjs +1 -1
  132. package/esm2022/view-zchart/legend/legend.component.mjs +1 -1
  133. package/esm2022/view-zchart/view-zchart.component.mjs +1 -1
  134. package/esm2022/widget/card-section/card-section.component.mjs +1 -1
  135. package/esm2022/widget/confirm-delete/confirm-delete.component.mjs +1 -1
  136. package/esm2022/widget/current-time/component.mjs +1 -1
  137. package/esm2022/widget/date-range-picker/component.mjs +1 -1
  138. package/esm2022/widget/field-set/column/component.mjs +2 -2
  139. package/esm2022/widget/field-set/group/component.mjs +1 -1
  140. package/esm2022/widget/field-set/item/component.mjs +1 -1
  141. package/esm2022/widget/foldable-block/component.mjs +1 -1
  142. package/esm2022/widget/foldable-item-in-table/component.mjs +1 -1
  143. package/esm2022/widget/loading-mask/loading-mask.component.mjs +1 -1
  144. package/esm2022/widget/password-input/component.mjs +1 -1
  145. package/esm2022/widget/relative-time/component.mjs +1 -1
  146. package/esm2022/widget/resource-label/component.mjs +1 -1
  147. package/esm2022/widget/resource-multi-select/component.mjs +1 -1
  148. package/esm2022/widget/search-panel/component.mjs +1 -1
  149. package/esm2022/widget/search-panel/search-item/component.mjs +1 -1
  150. package/esm2022/widget/status-icon/status-icon.component.mjs +1 -1
  151. package/esm2022/widget/tags-label/component.mjs +1 -1
  152. package/esm2022/widget/terminating-tag/component.mjs +1 -1
  153. package/esm2022/widget/text-ellipsis/component.mjs +1 -1
  154. package/esm2022/widget/text-with-url/component.mjs +1 -1
  155. package/esm2022/widget/zero-state/zero-state.component.mjs +1 -1
  156. package/esm2022/workload-status-icon/component.mjs +1 -1
  157. package/esm2022/xterm/xterm-terminal/xterm-terminal.component.mjs +1 -1
  158. package/esm2022/xterm/xterm.component.mjs +1 -1
  159. package/package.json +2 -2
  160. package/page-scaffold/page/page.module.d.ts +4 -3
  161. package/page-scaffold/page-header/help-menu/module.d.ts +2 -1
  162. package/table/component.d.ts +1 -1
  163. package/table/module.d.ts +2 -1
  164. package/translate/intl-format.pipes.d.ts +122 -0
  165. package/translate/public-api.d.ts +3 -2
  166. package/translate/relative-time-manager.service.d.ts +32 -0
  167. package/translate/translate.module.d.ts +4 -2
  168. package/translate/translate.pipe.d.ts +4 -5
  169. package/translate/translate.service.d.ts +292 -20
  170. package/translate/types.d.ts +16 -0
  171. package/code/resource-yaml-display/schema/component.d.ts +0 -61
  172. package/code/yaml-sidebar/yaml-examples.d.ts +0 -8
  173. package/esm2022/code/resource-yaml-display/schema/component.mjs +0 -531
  174. package/esm2022/code/yaml-sidebar/yaml-examples.mjs +0 -340
@@ -1,531 +0,0 @@
1
- import { IconModule, TabsModule, ButtonModule } from '@alauda/ui';
2
- import { NgIf, NgForOf, KeyValuePipe } from '@angular/common';
3
- import { HttpClient } from '@angular/common/http';
4
- import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, ChangeDetectorRef, } from '@angular/core';
5
- import { of, map, catchError } from 'rxjs';
6
- import { ParseJsonTranslatePipe } from '../../../core/pipes/parse-json-translate.pipe';
7
- import { KubernetesSchemaService } from '../../../core/services/kubernetes-schema.service';
8
- import { TRANSLATE_MODULE } from '../../../translate/translate.module';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../../core/services/kubernetes-schema.service";
11
- import * as i2 from "@angular/common/http";
12
- import * as i3 from "../../../translate/translate.pipe";
13
- import * as i4 from "@alauda/ui";
14
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementContainerStart(0);
16
- i0.ɵɵtext(1, " Schema ");
17
- i0.ɵɵelementContainerEnd();
18
- } }
19
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelement(0, "div", 13);
21
- i0.ɵɵpipe(1, "aclParseJsonTranslate");
22
- } if (rf & 2) {
23
- const ctx_r0 = i0.ɵɵnextContext(4);
24
- i0.ɵɵproperty("innerHTML", ctx_r0.processDescription(i0.ɵɵpipeBind1(1, 1, ctx_r0.schema.description)), i0.ɵɵsanitizeHtml);
25
- } }
26
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
27
- const _r2 = i0.ɵɵgetCurrentView();
28
- i0.ɵɵelementContainerStart(0);
29
- i0.ɵɵelementStart(1, "a", 14);
30
- i0.ɵɵlistener("click", function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.refresh()); });
31
- i0.ɵɵtext(2);
32
- i0.ɵɵelementEnd();
33
- i0.ɵɵelementContainerEnd();
34
- } if (rf & 2) {
35
- const ctx_r0 = i0.ɵɵnextContext(4);
36
- i0.ɵɵadvance(2);
37
- i0.ɵɵtextInterpolate(ctx_r0.resourceKind);
38
- } }
39
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {
40
- const _r3 = i0.ɵɵgetCurrentView();
41
- i0.ɵɵelementContainerStart(0);
42
- i0.ɵɵelementStart(1, "span", 15);
43
- i0.ɵɵtext(2, ">");
44
- i0.ɵɵelementEnd();
45
- i0.ɵɵelementStart(3, "a", 14);
46
- i0.ɵɵlistener("click", function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_ng_container_1_Template_a_click_3_listener() { i0.ɵɵrestoreView(_r3); const i_r4 = i0.ɵɵnextContext().index; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.navigateToPath(i_r4)); });
47
- i0.ɵɵtext(4);
48
- i0.ɵɵelementEnd();
49
- i0.ɵɵelementContainerEnd();
50
- } if (rf & 2) {
51
- const p_r5 = i0.ɵɵnextContext().$implicit;
52
- i0.ɵɵadvance(4);
53
- i0.ɵɵtextInterpolate(p_r5);
54
- } }
55
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {
56
- i0.ɵɵelementContainerStart(0);
57
- i0.ɵɵelementStart(1, "span", 15);
58
- i0.ɵɵtext(2, ">");
59
- i0.ɵɵelementEnd();
60
- i0.ɵɵelementStart(3, "span");
61
- i0.ɵɵtext(4);
62
- i0.ɵɵelementEnd();
63
- i0.ɵɵelementContainerEnd();
64
- } if (rf & 2) {
65
- const p_r5 = i0.ɵɵnextContext().$implicit;
66
- i0.ɵɵadvance(4);
67
- i0.ɵɵtextInterpolate(p_r5);
68
- } }
69
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_Template(rf, ctx) { if (rf & 1) {
70
- i0.ɵɵelementContainerStart(0);
71
- i0.ɵɵtemplate(1, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_ng_container_1_Template, 5, 1, "ng-container", 3)(2, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_ng_container_2_Template, 5, 1, "ng-container", 3);
72
- i0.ɵɵelementContainerEnd();
73
- } if (rf & 2) {
74
- const isLast_r6 = ctx.last;
75
- i0.ɵɵadvance();
76
- i0.ɵɵproperty("ngIf", !isLast_r6);
77
- i0.ɵɵadvance();
78
- i0.ɵɵproperty("ngIf", isLast_r6);
79
- } }
80
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_p_7_span_4_Template(rf, ctx) { if (rf & 1) {
81
- i0.ɵɵelementStart(0, "span", 20);
82
- i0.ɵɵtext(1);
83
- i0.ɵɵelementEnd();
84
- } if (rf & 2) {
85
- const item_r8 = i0.ɵɵnextContext(2).$implicit;
86
- const ctx_r0 = i0.ɵɵnextContext(4);
87
- i0.ɵɵadvance();
88
- i0.ɵɵtextInterpolate1(" (", ctx_r0.getRefDefinitionName(item_r8.value), ") ");
89
- } }
90
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_p_7_Template(rf, ctx) { if (rf & 1) {
91
- const _r7 = i0.ɵɵgetCurrentView();
92
- i0.ɵɵelementStart(0, "p")(1, "a", 14);
93
- i0.ɵɵlistener("click", function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_p_7_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r7); const item_r8 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.drilldownToProperty(item_r8.key)); });
94
- i0.ɵɵtext(2);
95
- i0.ɵɵpipe(3, "translate");
96
- i0.ɵɵelementEnd();
97
- i0.ɵɵtemplate(4, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_p_7_span_4_Template, 2, 1, "span", 19);
98
- i0.ɵɵelementEnd();
99
- } if (rf & 2) {
100
- const item_r8 = i0.ɵɵnextContext().$implicit;
101
- const ctx_r0 = i0.ɵɵnextContext(4);
102
- i0.ɵɵadvance(2);
103
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "view"), " ");
104
- i0.ɵɵadvance(2);
105
- i0.ɵɵproperty("ngIf", ctx_r0.hasRefProperty(item_r8.value));
106
- } }
107
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_Template(rf, ctx) { if (rf & 1) {
108
- i0.ɵɵelementStart(0, "div", 16)(1, "h3")(2, "span");
109
- i0.ɵɵtext(3);
110
- i0.ɵɵelementEnd();
111
- i0.ɵɵelementStart(4, "span", 17);
112
- i0.ɵɵtext(5);
113
- i0.ɵɵelementEnd()();
114
- i0.ɵɵelement(6, "p", 18);
115
- i0.ɵɵtemplate(7, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_p_7_Template, 5, 4, "p", 3);
116
- i0.ɵɵelementEnd();
117
- } if (rf & 2) {
118
- const item_r8 = ctx.$implicit;
119
- const ctx_r0 = i0.ɵɵnextContext(4);
120
- i0.ɵɵadvance(3);
121
- i0.ɵɵtextInterpolate(item_r8.key);
122
- i0.ɵɵadvance(2);
123
- i0.ɵɵtextInterpolate(item_r8.value.type);
124
- i0.ɵɵadvance();
125
- i0.ɵɵproperty("innerHTML", ctx_r0.processDescription(item_r8.value.description), i0.ɵɵsanitizeHtml);
126
- i0.ɵɵadvance();
127
- i0.ɵɵproperty("ngIf", ctx_r0.hasViewableContent(item_r8.value));
128
- } }
129
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_Template(rf, ctx) { if (rf & 1) {
130
- i0.ɵɵelementStart(0, "div", 7);
131
- i0.ɵɵtemplate(1, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_1_Template, 2, 3, "div", 8);
132
- i0.ɵɵelementStart(2, "div", 9);
133
- i0.ɵɵtemplate(3, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_Template, 3, 1, "ng-container", 3)(4, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_ng_container_4_Template, 3, 2, "ng-container", 10);
134
- i0.ɵɵelementEnd();
135
- i0.ɵɵelementStart(5, "div", 11);
136
- i0.ɵɵtemplate(6, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_div_6_Template, 8, 4, "div", 12);
137
- i0.ɵɵpipe(7, "keyvalue");
138
- i0.ɵɵelementEnd()();
139
- } if (rf & 2) {
140
- const ctx_r0 = i0.ɵɵnextContext(3);
141
- i0.ɵɵadvance();
142
- i0.ɵɵproperty("ngIf", ctx_r0.schema.description);
143
- i0.ɵɵadvance(2);
144
- i0.ɵɵproperty("ngIf", ctx_r0.path.length);
145
- i0.ɵɵadvance();
146
- i0.ɵɵproperty("ngForOf", ctx_r0.path);
147
- i0.ɵɵadvance(2);
148
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(7, 4, ctx_r0.properties));
149
- } }
150
- function ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
151
- i0.ɵɵelementContainerStart(0);
152
- i0.ɵɵtemplate(1, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_div_1_Template, 8, 6, "div", 6);
153
- i0.ɵɵelementContainerEnd();
154
- } if (rf & 2) {
155
- const ctx_r0 = i0.ɵɵnextContext(2);
156
- i0.ɵɵadvance();
157
- i0.ɵɵproperty("ngIf", ctx_r0.schema);
158
- } }
159
- function ResourceYamlSchemaComponent_aui_tab_5_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelementStart(0, "aui-tab");
161
- i0.ɵɵtemplate(1, ResourceYamlSchemaComponent_aui_tab_5_ng_container_1_Template, 2, 0, "ng-container", 4)(2, ResourceYamlSchemaComponent_aui_tab_5_ng_container_2_Template, 2, 1, "ng-container", 5);
162
- i0.ɵɵelementEnd();
163
- } }
164
- function ResourceYamlSchemaComponent_aui_tab_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
165
- i0.ɵɵelementContainerStart(0);
166
- i0.ɵɵtext(1, " Examples ");
167
- i0.ɵɵelementContainerEnd();
168
- } }
169
- function ResourceYamlSchemaComponent_aui_tab_6_ng_container_2_div_2_Template(rf, ctx) { if (rf & 1) {
170
- const _r9 = i0.ɵɵgetCurrentView();
171
- i0.ɵɵelementStart(0, "div", 16)(1, "h3");
172
- i0.ɵɵtext(2);
173
- i0.ɵɵelementStart(3, "span");
174
- i0.ɵɵtext(4);
175
- i0.ɵɵelementEnd()();
176
- i0.ɵɵelement(5, "p", 18);
177
- i0.ɵɵelementStart(6, "p", 21)(7, "a", 14);
178
- i0.ɵɵlistener("click", function ResourceYamlSchemaComponent_aui_tab_6_ng_container_2_div_2_Template_a_click_7_listener() { const example_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.tryExample(example_r10)); });
179
- i0.ɵɵelement(8, "aui-icon", 22);
180
- i0.ɵɵelementStart(9, "span");
181
- i0.ɵɵtext(10, "Try it");
182
- i0.ɵɵelementEnd()();
183
- i0.ɵɵelementStart(11, "a", 14);
184
- i0.ɵɵlistener("click", function ResourceYamlSchemaComponent_aui_tab_6_ng_container_2_div_2_Template_a_click_11_listener() { const example_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.downloadYaml(example_r10)); });
185
- i0.ɵɵelement(12, "aui-icon", 23);
186
- i0.ɵɵelementStart(13, "span");
187
- i0.ɵɵtext(14, "Download YAML");
188
- i0.ɵɵelementEnd()()()();
189
- } if (rf & 2) {
190
- const example_r10 = ctx.$implicit;
191
- const i_r11 = ctx.index;
192
- const ctx_r0 = i0.ɵɵnextContext(3);
193
- i0.ɵɵadvance(2);
194
- i0.ɵɵtextInterpolate1(" ", i_r11 + 1, ". ");
195
- i0.ɵɵadvance(2);
196
- i0.ɵɵtextInterpolate(example_r10.title);
197
- i0.ɵɵadvance();
198
- i0.ɵɵproperty("innerHTML", ctx_r0.processDescription(example_r10.description), i0.ɵɵsanitizeHtml);
199
- } }
200
- function ResourceYamlSchemaComponent_aui_tab_6_ng_container_2_Template(rf, ctx) { if (rf & 1) {
201
- i0.ɵɵelementContainerStart(0);
202
- i0.ɵɵelementStart(1, "div", 11);
203
- i0.ɵɵtemplate(2, ResourceYamlSchemaComponent_aui_tab_6_ng_container_2_div_2_Template, 15, 3, "div", 12);
204
- i0.ɵɵelementEnd();
205
- i0.ɵɵelementContainerEnd();
206
- } if (rf & 2) {
207
- const ctx_r0 = i0.ɵɵnextContext(2);
208
- i0.ɵɵadvance(2);
209
- i0.ɵɵproperty("ngForOf", ctx_r0.examples);
210
- } }
211
- function ResourceYamlSchemaComponent_aui_tab_6_Template(rf, ctx) { if (rf & 1) {
212
- i0.ɵɵelementStart(0, "aui-tab");
213
- i0.ɵɵtemplate(1, ResourceYamlSchemaComponent_aui_tab_6_ng_container_1_Template, 2, 0, "ng-container", 4)(2, ResourceYamlSchemaComponent_aui_tab_6_ng_container_2_Template, 3, 1, "ng-container", 5);
214
- i0.ɵɵelementEnd();
215
- } }
216
- export class ResourceYamlSchemaComponent {
217
- constructor(schemaService, http, cdr) {
218
- this.schemaService = schemaService;
219
- this.http = http;
220
- this.cdr = cdr;
221
- this.close = new EventEmitter();
222
- this.tryYaml = new EventEmitter();
223
- this.DEFINITIONS_PREFIX = '#/definitions/';
224
- this.path = [];
225
- this.examples = [];
226
- this.hasSchema = false;
227
- this.hasExamples = false;
228
- // 内置的 YAML 示例
229
- this.builtInExamples = {
230
- 'apps/v1.Deployment': [
231
- {
232
- title: 'Basic Deployment',
233
- description: 'A basic deployment example with nginx container',
234
- yaml: `apiVersion: apps/v1
235
- kind: Deployment
236
- metadata:
237
- name: example
238
- spec:
239
- selector:
240
- matchLabels:
241
- app: httpd
242
- replicas: 3
243
- template:
244
- metadata:
245
- labels:
246
- app: httpd
247
- spec:
248
- containers:
249
- - name: httpd
250
- image: internal-docker-registry.cpaas-system.svc/demo-ns/nginx:alpine
251
- ports:
252
- - containerPort: 8080`,
253
- },
254
- ],
255
- 'v1.ConfigMap': [
256
- {
257
- title: 'Basic ConfigMap',
258
- description: 'A basic ConfigMap example with properties and file data',
259
- yaml: `apiVersion: v1
260
- kind: ConfigMap
261
- metadata:
262
- name: example
263
- namespace: default
264
- data:
265
- example.property.1: hello
266
- example.property.2: world
267
- example.property.file: |-
268
- property.1=value-1
269
- property.2=value-2
270
- property.3=value-3`,
271
- },
272
- ],
273
- };
274
- }
275
- ngOnInit() {
276
- this.refresh();
277
- this.loadExamples();
278
- }
279
- ngOnChanges(changes) {
280
- if (changes.schema || changes.resource) {
281
- this.refresh();
282
- this.loadExamples();
283
- }
284
- }
285
- refresh() {
286
- if (this.schema) {
287
- this.currentSchema = this.schema;
288
- this.properties = this.schema.properties || {};
289
- this.path = [];
290
- this.hasSchema = true;
291
- }
292
- else {
293
- this.hasSchema = false;
294
- }
295
- if (this.resource) {
296
- this.resourceKind = this.resource.kind || 'Resource';
297
- }
298
- }
299
- loadExamples() {
300
- if (!this.resource) {
301
- this.examples = [];
302
- this.hasExamples = false;
303
- this.cdr.markForCheck();
304
- return;
305
- }
306
- const resourceKey = `${this.resource.apiVersion}.${this.resource.kind}`;
307
- const builtInExamples = this.builtInExamples[resourceKey] || [];
308
- // 加载 ConsoleYAMLSample CRD 中的示例
309
- this.loadConsoleYAMLSamples().subscribe({
310
- next: crdExamples => {
311
- this.examples = [...builtInExamples, ...crdExamples];
312
- this.hasExamples = this.examples.length > 0;
313
- this.cdr.markForCheck();
314
- },
315
- error: () => {
316
- // 如果加载 CRD 示例失败,只使用内置示例
317
- this.examples = builtInExamples;
318
- this.hasExamples = this.examples.length > 0;
319
- this.cdr.markForCheck();
320
- },
321
- });
322
- }
323
- loadConsoleYAMLSamples() {
324
- if (!this.resource) {
325
- return of([]);
326
- }
327
- // 构建查询 ConsoleYAMLSample 的 API 路径
328
- const apiPath = '/apis/console.alauda.io/v1/consoleyamlsamples';
329
- return this.http.get(apiPath).pipe(map(response => {
330
- return response.items
331
- .filter(sample => {
332
- const target = sample.spec.targetResource;
333
- return (target.apiVersion === this.resource.apiVersion &&
334
- target.kind === this.resource.kind);
335
- })
336
- .map(sample => ({
337
- title: sample.spec.title,
338
- description: sample.spec.description,
339
- yaml: sample.spec.yaml,
340
- snippet: sample.spec.snippet,
341
- }));
342
- }), catchError(() => of([])));
343
- }
344
- drilldownToProperty(name) {
345
- const property = this.currentSchema.properties?.[name];
346
- if (property) {
347
- let targetSchema = null;
348
- // 处理 $ref 引用
349
- if (property.$ref) {
350
- const ref = property.$ref;
351
- if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
352
- const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
353
- // 从根 schema 的 definitions 中获取定义
354
- const rootDefinitions = this.schemaService.definitions;
355
- targetSchema = rootDefinitions?.[definitionName] || null;
356
- }
357
- }
358
- // 处理普通的嵌套属性
359
- else if (property.properties || property.items?.properties) {
360
- targetSchema = property.items?.properties ? property.items : property;
361
- }
362
- if (targetSchema) {
363
- this.currentSchema = targetSchema;
364
- this.path.push(name);
365
- this.properties = targetSchema.properties || {};
366
- }
367
- }
368
- }
369
- navigateToPath(index) {
370
- const targetPath = this.path.slice(0, index + 1);
371
- this.path = [...targetPath];
372
- let currentObj = this.schema;
373
- for (const pathSegment of targetPath) {
374
- const property = currentObj.properties?.[pathSegment];
375
- if (property) {
376
- // 处理 $ref 引用
377
- if (property.$ref) {
378
- const ref = property.$ref;
379
- if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
380
- const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
381
- const rootDefinitions = this.schema?.definitions;
382
- const definition = rootDefinitions?.[definitionName];
383
- if (definition) {
384
- currentObj = definition;
385
- }
386
- }
387
- }
388
- // 处理普通的嵌套属性
389
- else {
390
- currentObj = property.items?.properties ? property.items : property;
391
- }
392
- }
393
- }
394
- this.currentSchema = currentObj;
395
- this.properties = currentObj.properties || {};
396
- }
397
- hasNestedProperties(property) {
398
- return ((property.type === 'object' &&
399
- property.properties &&
400
- Object.keys(property.properties).length > 0) ||
401
- (property.type === 'array' &&
402
- property.items &&
403
- typeof property.items === 'object' &&
404
- property.items.properties &&
405
- Object.keys(property.items.properties || {})
406
- .length > 0));
407
- }
408
- getPropertyType(property) {
409
- if (property.type) {
410
- if (Array.isArray(property.type)) {
411
- return property.type.join(' | ');
412
- }
413
- return property.type;
414
- }
415
- return 'unknown';
416
- }
417
- isRequired(propertyName) {
418
- return this.currentSchema?.required?.includes(propertyName) || false;
419
- }
420
- /**
421
- * 检查属性是否有 $ref 引用或嵌套属性
422
- */
423
- hasViewableContent(property) {
424
- return (
425
- // 有 properties 的对象
426
- (property.type === 'object' &&
427
- property.properties &&
428
- Object.keys(property.properties).length > 0) ||
429
- // 有 properties 的数组项
430
- (property.type === 'array' &&
431
- property.items &&
432
- typeof property.items === 'object' &&
433
- property.items.properties &&
434
- Object.keys(property.items.properties || {})
435
- .length > 0) ||
436
- // 有 $ref 引用
437
- !!property.$ref);
438
- }
439
- /**
440
- * 检查属性是否有 $ref 引用
441
- */
442
- hasRefProperty(property) {
443
- return !!property.$ref;
444
- }
445
- /**
446
- * 获取 $ref 引用的定义名称
447
- */
448
- getRefDefinitionName(property) {
449
- const ref = property.$ref;
450
- if (ref && typeof ref === 'string') {
451
- // 从 "#/definitions/io.k8s.api.apps.v1.DeploymentSpec" 中提取定义名称
452
- if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
453
- return ref.replace(this.DEFINITIONS_PREFIX, '');
454
- }
455
- const parts = ref.split('/');
456
- return parts[parts.length - 1] || ref;
457
- }
458
- return '';
459
- }
460
- // Examples 相关方法
461
- tryExample(example) {
462
- // 触发事件,让父组件处理 try it 功能,将 YAML 内容发送给父组件
463
- this.tryYaml.emit(example.yaml);
464
- }
465
- downloadYaml(example) {
466
- const blob = new Blob([example.yaml], { type: 'text/yaml' });
467
- const url = window.URL.createObjectURL(blob);
468
- const link = document.createElement('a');
469
- link.href = url;
470
- link.download = `${example.title.toLowerCase().replace(/\s+/g, '-')}.yaml`;
471
- document.body.appendChild(link);
472
- link.click();
473
- document.body.removeChild(link);
474
- window.URL.revokeObjectURL(url);
475
- }
476
- // 处理描述中的链接
477
- processDescription(description) {
478
- if (!description)
479
- return '';
480
- // 将 URL 转换为可点击的链接
481
- const urlRegex = /(https?:\/\/[^\s]+)/g;
482
- return description.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>');
483
- }
484
- static { this.ɵfac = function ResourceYamlSchemaComponent_Factory(t) { return new (t || ResourceYamlSchemaComponent)(i0.ɵɵdirectiveInject(i1.KubernetesSchemaService), i0.ɵɵdirectiveInject(i2.HttpClient), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
485
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceYamlSchemaComponent, selectors: [["acl-resource-yaml-schema"]], inputs: { resource: "resource", schema: "schema" }, outputs: { close: "close", tryYaml: "tryYaml" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 7, vars: 3, consts: [[1, "schema-header"], ["icon", "xmark", 3, "click"], ["type", "card"], [4, "ngIf"], [4, "auiTabLabel"], [4, "auiTabContent"], ["class", "schema-content", 4, "ngIf"], [1, "schema-content"], ["class", "schema-desc", 3, "innerHTML", 4, "ngIf"], [1, "schema-path"], [4, "ngFor", "ngForOf"], [1, "schema-list"], ["class", "schema-item", 4, "ngFor", "ngForOf"], [1, "schema-desc", 3, "innerHTML"], ["href", "javascript:", 3, "click"], [1, "path-mark"], [1, "schema-item"], [1, "obj-type"], [3, "innerHTML"], ["class", "ref-info", 4, "ngIf"], [1, "ref-info"], [1, "tw-flex", "tw-justify-between"], ["icon", "arrow_turn_up", "size", "14"], ["icon", "download", "size", "14"]], template: function ResourceYamlSchemaComponent_Template(rf, ctx) { if (rf & 1) {
486
- i0.ɵɵelementStart(0, "div", 0)(1, "span");
487
- i0.ɵɵtext(2);
488
- i0.ɵɵelementEnd();
489
- i0.ɵɵelementStart(3, "aui-icon", 1);
490
- i0.ɵɵlistener("click", function ResourceYamlSchemaComponent_Template_aui_icon_click_3_listener() { return ctx.close.next(); });
491
- i0.ɵɵelementEnd()();
492
- i0.ɵɵelementStart(4, "aui-tab-group", 2);
493
- i0.ɵɵtemplate(5, ResourceYamlSchemaComponent_aui_tab_5_Template, 3, 0, "aui-tab", 3)(6, ResourceYamlSchemaComponent_aui_tab_6_Template, 3, 0, "aui-tab", 3);
494
- i0.ɵɵelementEnd();
495
- } if (rf & 2) {
496
- i0.ɵɵadvance(2);
497
- i0.ɵɵtextInterpolate(ctx.resourceKind);
498
- i0.ɵɵadvance(3);
499
- i0.ɵɵproperty("ngIf", ctx.hasSchema);
500
- i0.ɵɵadvance();
501
- i0.ɵɵproperty("ngIf", ctx.hasExamples);
502
- } }, dependencies: [NgIf,
503
- NgForOf,
504
- KeyValuePipe, i3.TranslatePipe, ParseJsonTranslatePipe,
505
- IconModule, i4.IconComponent, TabsModule, i4.TabGroupComponent, i4.TabComponent, i4.TabLabelDirective, i4.TabContentDirective, ButtonModule], styles: ["[_nghost-%COMP%]{display:block;box-sizing:border-box;min-width:360px;padding:16px;background-color:rgb(var(--aui-color-n-10));box-shadow:0 0 4px rgba(var(--aui-color-n-1),.16);margin-left:12px;overflow-y:scroll}[_nghost-%COMP%]::-webkit-scrollbar{width:8px;height:4px}[_nghost-%COMP%]::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}[_nghost-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}[_nghost-%COMP%]::-webkit-scrollbar-corner{background-color:transparent}aui-tab-group[_ngcontent-%COMP%]{display:block;margin-top:5px}.schema-header[_ngcontent-%COMP%]{height:40px;display:flex;justify-content:space-between;align-items:center;font-size:18px}.schema-header[_ngcontent-%COMP%] aui-icon[_ngcontent-%COMP%]{font-size:16px;color:rgb(var(--aui-color-n-6));cursor:pointer}.schema-header[_ngcontent-%COMP%] aui-icon[_ngcontent-%COMP%]:hover{color:rgb(var(--aui-color-primary))}.schema-content[_ngcontent-%COMP%]{line-height:20px;overflow-y:auto;height:calc(100% - 40px)}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:4px}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar-corner{background-color:transparent}.schema-desc[_ngcontent-%COMP%]{margin-bottom:12px}.schema-desc[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#007bff;text-decoration:none}.schema-desc[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.schema-path[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;margin-bottom:12px}.schema-path[_ngcontent-%COMP%] *[_ngcontent-%COMP%]{margin-right:2px;word-break:break-all}.schema-path[_ngcontent-%COMP%] .path-mark[_ngcontent-%COMP%]{margin:0 2px;color:rgb(var(--aui-color-n-6))}.schema-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%]{padding-left:16px}.schema-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%]:not(:last-of-type){border-bottom:1px solid rgb(var(--aui-color-border));margin-bottom:12px}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{position:relative;font-weight:500;margin-bottom:12px;word-break:break-word}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:before{content:\"\";display:block;width:6px;height:6px;border-radius:50%;background-color:rgb(var(--aui-color-n-6));position:absolute;left:-12px;top:8px}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{margin-right:4px}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .obj-type[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-4))}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-bottom:12px;word-break:break-word}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#007bff;text-decoration:none}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .ref-info[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-5));font-size:12px;margin-left:8px;font-style:italic}.schema-examples[_ngcontent-%COMP%]{padding:16px}.examples-header[_ngcontent-%COMP%]{margin-bottom:16px}.examples-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px;font-weight:600;color:#333}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]{margin-bottom:24px;border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]:last-child{margin-bottom:0}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background-color:#f8f9fa;border-bottom:1px solid #e1e5e9}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:#333}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-primary[_ngcontent-%COMP%]{color:#007bff;border:1px solid #007bff;background-color:transparent}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-primary[_ngcontent-%COMP%]:hover{color:#fff;background-color:#007bff}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-secondary[_ngcontent-%COMP%]{color:#6c757d;border:1px solid #6c757d;background-color:transparent}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-secondary[_ngcontent-%COMP%]:hover{color:#fff;background-color:#6c757d}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-description[_ngcontent-%COMP%]{padding:12px 16px;color:#666;font-size:14px;line-height:1.5;border-bottom:1px solid #e1e5e9}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-description[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#007bff;text-decoration:none}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-description[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-yaml[_ngcontent-%COMP%]{background-color:#f8f9fa}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-yaml[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:0;padding:16px;background-color:transparent;border:none;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;color:#333;overflow-x:auto}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-yaml[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background-color:transparent;padding:0;color:inherit}"], changeDetection: 0 }); }
506
- }
507
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceYamlSchemaComponent, [{
508
- type: Component,
509
- args: [{ selector: 'acl-resource-yaml-schema', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
510
- NgIf,
511
- NgForOf,
512
- KeyValuePipe,
513
- TRANSLATE_MODULE,
514
- ParseJsonTranslatePipe,
515
- IconModule,
516
- TabsModule,
517
- ButtonModule,
518
- ], template: "<div class=\"schema-header\">\n <span>{{ resourceKind }}</span>\n <aui-icon\n icon=\"xmark\"\n (click)=\"close.next()\"\n ></aui-icon>\n</div>\n<aui-tab-group type=\"card\">\n <aui-tab *ngIf=\"hasSchema\">\n <ng-container *auiTabLabel> Schema </ng-container>\n <ng-container *auiTabContent>\n <div\n *ngIf=\"schema\"\n class=\"schema-content\"\n >\n <div\n *ngIf=\"schema.description\"\n class=\"schema-desc\"\n [innerHTML]=\"\n processDescription(schema.description | aclParseJsonTranslate)\n \"\n ></div>\n <div class=\"schema-path\">\n <ng-container *ngIf=\"path.length\">\n <a\n href=\"javascript:\"\n (click)=\"refresh()\"\n >{{ resourceKind }}</a\n >\n </ng-container>\n\n <ng-container *ngFor=\"let p of path; index as i; last as isLast\">\n <ng-container *ngIf=\"!isLast\">\n <span class=\"path-mark\">></span>\n <a\n href=\"javascript:\"\n (click)=\"navigateToPath(i)\"\n >{{ p }}</a\n >\n </ng-container>\n <ng-container *ngIf=\"isLast\">\n <span class=\"path-mark\">></span>\n <span>{{ p }}</span>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"schema-list\">\n <div\n *ngFor=\"let item of properties | keyvalue\"\n class=\"schema-item\"\n >\n <h3>\n <span>{{ item.key }}</span>\n <span class=\"obj-type\">{{ item.value.type }}</span>\n </h3>\n <p [innerHTML]=\"processDescription(item.value.description)\"></p>\n <p *ngIf=\"hasViewableContent(item.value)\">\n <a\n href=\"javascript:\"\n (click)=\"drilldownToProperty(item.key)\"\n >\n {{ 'view' | translate }}\n </a>\n <span\n *ngIf=\"hasRefProperty(item.value)\"\n class=\"ref-info\"\n >\n ({{ getRefDefinitionName(item.value) }})\n </span>\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </aui-tab>\n <aui-tab *ngIf=\"hasExamples\">\n <ng-container *auiTabLabel> Examples </ng-container>\n <ng-container *auiTabContent>\n <!-- Examples Tab -->\n <div class=\"schema-list\">\n <div\n *ngFor=\"let example of examples; let i = index\"\n class=\"schema-item\"\n >\n <h3>\n {{ i + 1 }}. <span>{{ example.title }}</span>\n </h3>\n <p [innerHTML]=\"processDescription(example.description)\"></p>\n <p class=\"tw-flex tw-justify-between\">\n <a\n href=\"javascript:\"\n (click)=\"tryExample(example)\"\n >\n <aui-icon\n icon=\"arrow_turn_up\"\n size=\"14\"\n ></aui-icon>\n <span>Try it</span>\n </a>\n <a\n href=\"javascript:\"\n (click)=\"downloadYaml(example)\"\n >\n <aui-icon\n icon=\"download\"\n size=\"14\"\n ></aui-icon>\n <span>Download YAML</span>\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n </aui-tab>\n</aui-tab-group>\n", styles: [":host{display:block;box-sizing:border-box;min-width:360px;padding:16px;background-color:rgb(var(--aui-color-n-10));box-shadow:0 0 4px rgba(var(--aui-color-n-1),.16);margin-left:12px;overflow-y:scroll}:host::-webkit-scrollbar{width:8px;height:4px}:host::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}:host::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}:host::-webkit-scrollbar-corner{background-color:transparent}aui-tab-group{display:block;margin-top:5px}.schema-header{height:40px;display:flex;justify-content:space-between;align-items:center;font-size:18px}.schema-header aui-icon{font-size:16px;color:rgb(var(--aui-color-n-6));cursor:pointer}.schema-header aui-icon:hover{color:rgb(var(--aui-color-primary))}.schema-content{line-height:20px;overflow-y:auto;height:calc(100% - 40px)}.schema-content::-webkit-scrollbar{width:8px;height:4px}.schema-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.schema-content::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.schema-content::-webkit-scrollbar-corner{background-color:transparent}.schema-desc{margin-bottom:12px}.schema-desc a{color:#007bff;text-decoration:none}.schema-desc a:hover{text-decoration:underline}.schema-path{display:flex;flex-wrap:wrap;margin-bottom:12px}.schema-path *{margin-right:2px;word-break:break-all}.schema-path .path-mark{margin:0 2px;color:rgb(var(--aui-color-n-6))}.schema-list .schema-item{padding-left:16px}.schema-list .schema-item:not(:last-of-type){border-bottom:1px solid rgb(var(--aui-color-border));margin-bottom:12px}.schema-list h3{position:relative;font-weight:500;margin-bottom:12px;word-break:break-word}.schema-list h3:before{content:\"\";display:block;width:6px;height:6px;border-radius:50%;background-color:rgb(var(--aui-color-n-6));position:absolute;left:-12px;top:8px}.schema-list h3 span{margin-right:4px}.schema-list h3 .obj-type{color:rgb(var(--aui-color-n-4))}.schema-list p{margin-bottom:12px;word-break:break-word}.schema-list p a{color:#007bff;text-decoration:none}.schema-list p a:hover{text-decoration:underline}.schema-list p .ref-info{color:rgb(var(--aui-color-n-5));font-size:12px;margin-left:8px;font-style:italic}.schema-examples{padding:16px}.examples-header{margin-bottom:16px}.examples-header h3{margin:0;font-size:18px;font-weight:600;color:#333}.examples-content .examples-list .example-item{margin-bottom:24px;border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.examples-content .examples-list .example-item:last-child{margin-bottom:0}.examples-content .examples-list .example-item .example-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background-color:#f8f9fa;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-header .example-title{margin:0;font-size:16px;font-weight:600;color:#333}.examples-content .examples-list .example-item .example-header .example-actions{display:flex;gap:8px}.examples-content .examples-list .example-item .example-header .example-actions .btn{padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary{color:#007bff;border:1px solid #007bff;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary:hover{color:#fff;background-color:#007bff}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary{color:#6c757d;border:1px solid #6c757d;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary:hover{color:#fff;background-color:#6c757d}.examples-content .examples-list .example-item .example-description{padding:12px 16px;color:#666;font-size:14px;line-height:1.5;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-description a{color:#007bff;text-decoration:none}.examples-content .examples-list .example-item .example-description a:hover{text-decoration:underline}.examples-content .examples-list .example-item .example-yaml{background-color:#f8f9fa}.examples-content .examples-list .example-item .example-yaml pre{margin:0;padding:16px;background-color:transparent;border:none;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;color:#333;overflow-x:auto}.examples-content .examples-list .example-item .example-yaml pre code{background-color:transparent;padding:0;color:inherit}\n"] }]
519
- }], () => [{ type: i1.KubernetesSchemaService }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }], { resource: [{
520
- type: Input
521
- }], schema: [{
522
- type: Input
523
- }],
524
- // eslint-disable-next-line @angular-eslint/no-output-native
525
- close: [{
526
- type: Output
527
- }], tryYaml: [{
528
- type: Output
529
- }] }); })();
530
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceYamlSchemaComponent, { className: "ResourceYamlSchemaComponent" }); })();
531
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvZGUvcmVzb3VyY2UteWFtbC1kaXNwbGF5L3NjaGVtYS9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvY29kZS9yZXNvdXJjZS15YW1sLWRpc3BsYXkvc2NoZW1hL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFJTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7O0lDWG5FLDZCQUEyQjtJQUFDLHdCQUFPOzs7O0lBTS9CLDBCQU1POzs7O0lBSEwseUhBRUM7Ozs7SUFHRCw2QkFBa0M7SUFDaEMsNkJBR0c7SUFERCwyTkFBUyxnQkFBUyxLQUFDO0lBQ2xCLFlBQWtCO0lBQUEsaUJBQ3BCOzs7O0lBREUsZUFBa0I7SUFBbEIseUNBQWtCOzs7O0lBS3JCLDZCQUE4QjtJQUM1Qixn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RSxPQUFPLEVBQUUsQ0FBQztRQUU1QixrQkFBa0I7UUFDbEIsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUM7UUFDeEMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUN4QixRQUFRLEVBQ1IsK0RBQStELENBQ2hFLENBQUM7SUFDSixDQUFDOzRGQS9UVSwyQkFBMkI7b0VBQTNCLDJCQUEyQjtZQy9EdEMsQUFERiw4QkFBMkIsV0FDbkI7WUFBQSxZQUFrQjtZQUFBLGlCQUFPO1lBQy9CLG1DQUdDO1lBREMsMEdBQVMsZ0JBQVksSUFBQztZQUUxQixBQURHLGlCQUFXLEVBQ1I7WUFDTix3Q0FBMkI7WUFvRXpCLEFBbkVBLG9GQUEyQix1RUFtRUU7WUF1Qy9CLGlCQUFnQjs7WUFqSFIsZUFBa0I7WUFBbEIsc0NBQWtCO1lBT2QsZUFBZTtZQUFmLG9DQUFlO1lBbUVmLGNBQWlCO1lBQWpCLHNDQUFpQjs0QkRyQnpCLElBQUk7WUFDSixPQUFPO1lBQ1AsWUFBWSxvQkFFWixzQkFBc0I7WUFDdEIsVUFBVSxvQkFDVixVQUFVLHVGQUNWLFlBQVk7O2lGQUdILDJCQUEyQjtjQWpCdkMsU0FBUzsyQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO29CQUNQLElBQUk7b0JBQ0osT0FBTztvQkFDUCxZQUFZO29CQUNaLGdCQUFnQjtvQkFDaEIsc0JBQXNCO29CQUN0QixVQUFVO29CQUNWLFVBQVU7b0JBQ1YsWUFBWTtpQkFDYjtpSEFJRCxRQUFRO2tCQURQLEtBQUs7WUFJTixNQUFNO2tCQURMLEtBQUs7O0lBSU4sNERBQTREO0lBQzVELEtBQUs7a0JBRkosTUFBTTtZQUtQLE9BQU87a0JBRE4sTUFBTTs7a0ZBWEksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWNvbk1vZHVsZSwgVGFic01vZHVsZSwgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0Zvck9mLCBLZXlWYWx1ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUGFyc2VKc29uVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcGlwZXMvcGFyc2UtanNvbi10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBLdWJlcm5ldGVzU2NoZW1hU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMva3ViZXJuZXRlcy1zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBLdWJlcm5ldGVzUmVzb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzL2s4cy9jb3JlJztcbmltcG9ydCB7IE9wZW5BUElWM1NjaGVtYU9iamVjdCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdHlwZXMvc2NoZW1hJztcbmltcG9ydCB7IFRSQU5TTEFURV9NT0RVTEUgfSBmcm9tICcuLi8uLi8uLi90cmFuc2xhdGUvdHJhbnNsYXRlLm1vZHVsZSc7XG5cbi8vIOWumuS5iSBZQU1MIOekuuS+i+aOpeWPo1xuaW50ZXJmYWNlIFlhbWxFeGFtcGxlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgeWFtbDogc3RyaW5nO1xuICBzbmlwcGV0PzogYm9vbGVhbjtcbn1cblxuLy8g5a6a5LmJIENvbnNvbGVZQU1MU2FtcGxlIOaOpeWPo1xuaW50ZXJmYWNlIENvbnNvbGVZQU1MU2FtcGxlIHtcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG4gIHNwZWM6IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgeWFtbDogc3RyaW5nO1xuICAgIHNuaXBwZXQ/OiBib29sZWFuO1xuICAgIHRhcmdldFJlc291cmNlOiB7XG4gICAgICBhcGlWZXJzaW9uOiBzdHJpbmc7XG4gICAgICBraW5kOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXJlc291cmNlLXlhbWwtc2NoZW1hJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlcy5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBUUkFOU0xBVEVfTU9EVUxFLFxuICAgIFBhcnNlSnNvblRyYW5zbGF0ZVBpcGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBUYWJzTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VZYW1sU2NoZW1hQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICByZXNvdXJjZTogS3ViZXJuZXRlc1Jlc291cmNlO1xuXG4gIEBJbnB1dCgpXG4gIHNjaGVtYTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0O1xuXG4gIEBPdXRwdXQoKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHRyeVlhbWwgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRklOSVRJT05TX1BSRUZJWCA9ICcjL2RlZmluaXRpb25zLyc7XG5cbiAgY3VycmVudFNjaGVtYTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0O1xuICBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IE9wZW5BUElWM1NjaGVtYU9iamVjdCB9O1xuICBwYXRoOiBzdHJpbmdbXSA9IFtdO1xuICByZXNvdXJjZUtpbmQ6IHN0cmluZztcbiAgZXhhbXBsZXM6IFlhbWxFeGFtcGxlW10gPSBbXTtcbiAgaGFzU2NoZW1hID0gZmFsc2U7XG4gIGhhc0V4YW1wbGVzID0gZmFsc2U7XG5cbiAgLy8g5YaF572u55qEIFlBTUwg56S65L6LXG4gIHByaXZhdGUgcmVhZG9ubHkgYnVpbHRJbkV4YW1wbGVzOiB7IFtrZXk6IHN0cmluZ106IFlhbWxFeGFtcGxlW10gfSA9IHtcbiAgICAnYXBwcy92MS5EZXBsb3ltZW50JzogW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0Jhc2ljIERlcGxveW1lbnQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0EgYmFzaWMgZGVwbG95bWVudCBleGFtcGxlIHdpdGggbmdpbnggY29udGFpbmVyJyxcbiAgICAgICAgeWFtbDogYGFwaVZlcnNpb246IGFwcHMvdjFcbmtpbmQ6IERlcGxveW1lbnRcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG5zcGVjOlxuICBzZWxlY3RvcjpcbiAgICBtYXRjaExhYmVsczpcbiAgICAgIGFwcDogaHR0cGRcbiAgcmVwbGljYXM6IDNcbiAgdGVtcGxhdGU6XG4gICAgbWV0YWRhdGE6XG4gICAgICBsYWJlbHM6XG4gICAgICAgIGFwcDogaHR0cGRcbiAgICBzcGVjOlxuICAgICAgY29udGFpbmVyczpcbiAgICAgIC0gbmFtZTogaHR0cGRcbiAgICAgICAgaW1hZ2U6IGludGVybmFsLWRvY2tlci1yZWdpc3RyeS5jcGFhcy1zeXN0ZW0uc3ZjL2RlbW8tbnMvbmdpbng6YWxwaW5lXG4gICAgICAgIHBvcnRzOlxuICAgICAgICAtIGNvbnRhaW5lclBvcnQ6IDgwODBgLFxuICAgICAgfSxcbiAgICBdLFxuICAgICd2MS5Db25maWdNYXAnOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQmFzaWMgQ29uZmlnTWFwJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIENvbmZpZ01hcCBleGFtcGxlIHdpdGggcHJvcGVydGllcyBhbmQgZmlsZSBkYXRhJyxcbiAgICAgICAgeWFtbDogYGFwaVZlcnNpb246IHYxXG5raW5kOiBDb25maWdNYXBcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG4gIG5hbWVzcGFjZTogZGVmYXVsdFxuZGF0YTpcbiAgZXhhbXBsZS5wcm9wZXJ0eS4xOiBoZWxsb1xuICBleGFtcGxlLnByb3BlcnR5LjI6IHdvcmxkXG4gIGV4YW1wbGUucHJvcGVydHkuZmlsZTogfC1cbiAgICBwcm9wZXJ0eS4xPXZhbHVlLTFcbiAgICBwcm9wZXJ0eS4yPXZhbHVlLTJcbiAgICBwcm9wZXJ0eS4zPXZhbHVlLTNgLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2NoZW1hU2VydmljZTogS3ViZXJuZXRlc1NjaGVtYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIHRoaXMubG9hZEV4YW1wbGVzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuc2NoZW1hIHx8IGNoYW5nZXMucmVzb3VyY2UpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgdGhpcy5sb2FkRXhhbXBsZXMoKTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGlmICh0aGlzLnNjaGVtYSkge1xuICAgICAgdGhpcy5jdXJyZW50U2NoZW1hID0gdGhpcy5zY2hlbWE7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgdGhpcy5wYXRoID0gW107XG4gICAgICB0aGlzLmhhc1NjaGVtYSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFzU2NoZW1hID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzb3VyY2UpIHtcbiAgICAgIHRoaXMucmVzb3VyY2VLaW5kID0gdGhpcy5yZXNvdXJjZS5raW5kIHx8ICdSZXNvdXJjZSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRXhhbXBsZXMoKSB7XG4gICAgaWYgKCF0aGlzLnJlc291cmNlKSB7XG4gICAgICB0aGlzLmV4YW1wbGVzID0gW107XG4gICAgICB0aGlzLmhhc0V4YW1wbGVzID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZUtleSA9IGAke3RoaXMucmVzb3VyY2UuYXBpVmVyc2lvbn0uJHt0aGlzLnJlc291cmNlLmtpbmR9YDtcbiAgICBjb25zdCBidWlsdEluRXhhbXBsZXMgPSB0aGlzLmJ1aWx0SW5FeGFtcGxlc1tyZXNvdXJjZUtleV0gfHwgW107XG5cbiAgICAvLyDliqDovb0gQ29uc29sZVlBTUxTYW1wbGUgQ1JEIOS4reeahOekuuS+i1xuICAgIHRoaXMubG9hZENvbnNvbGVZQU1MU2FtcGxlcygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBjcmRFeGFtcGxlcyA9PiB7XG4gICAgICAgIHRoaXMuZXhhbXBsZXMgPSBbLi4uYnVpbHRJbkV4YW1wbGVzLCAuLi5jcmRFeGFtcGxlc107XG4gICAgICAgIHRoaXMuaGFzRXhhbXBsZXMgPSB0aGlzLmV4YW1wbGVzLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIC8vIOWmguaenOWKoOi9vSBDUkQg56S65L6L5aSx6LSl77yM5Y+q5L2/55So5YaF572u56S65L6LXG4gICAgICAgIHRoaXMuZXhhbXBsZXMgPSBidWlsdEluRXhhbXBsZXM7XG4gICAgICAgIHRoaXMuaGFzRXhhbXBsZXMgPSB0aGlzLmV4YW1wbGVzLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbnNvbGVZQU1MU2FtcGxlcygpOiBPYnNlcnZhYmxlPFlhbWxFeGFtcGxlW10+IHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuXG4gICAgLy8g5p6E5bu65p+l6K+iIENvbnNvbGVZQU1MU2FtcGxlIOeahCBBUEkg6Lev5b6EXG4gICAgY29uc3QgYXBpUGF0aCA9ICcvYXBpcy9jb25zb2xlLmFsYXVkYS5pby92MS9jb25zb2xleWFtbHNhbXBsZXMnO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyBpdGVtczogQ29uc29sZVlBTUxTYW1wbGVbXSB9PihhcGlQYXRoKS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLml0ZW1zXG4gICAgICAgICAgLmZpbHRlcihzYW1wbGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2FtcGxlLnNwZWMudGFyZ2V0UmVzb3VyY2U7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICB0YXJnZXQuYXBpVmVyc2lvbiA9PT0gdGhpcy5yZXNvdXJjZS5hcGlWZXJzaW9uICYmXG4gICAgICAgICAgICAgIHRhcmdldC5raW5kID09PSB0aGlzLnJlc291cmNlLmtpbmRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKHNhbXBsZSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IHNhbXBsZS5zcGVjLnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHNhbXBsZS5zcGVjLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgeWFtbDogc2FtcGxlLnNwZWMueWFtbCxcbiAgICAgICAgICAgIHNuaXBwZXQ6IHNhbXBsZS5zcGVjLnNuaXBwZXQsXG4gICAgICAgICAgfSkpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdKSksXG4gICAgKTtcbiAgfVxuXG4gIGRyaWxsZG93blRvUHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmN1cnJlbnRTY2hlbWEucHJvcGVydGllcz8uW25hbWVdO1xuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgbGV0IHRhcmdldFNjaGVtYTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0IHwgbnVsbCA9IG51bGw7XG4gICAgICAvLyDlpITnkIYgJHJlZiDlvJXnlKhcbiAgICAgIGlmICgocHJvcGVydHkgYXMgYW55KS4kcmVmKSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IChwcm9wZXJ0eSBhcyBhbnkpLiRyZWYgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChyZWYuc3RhcnRzV2l0aCh0aGlzLkRFRklOSVRJT05TX1BSRUZJWCkpIHtcbiAgICAgICAgICBjb25zdCBkZWZpbml0aW9uTmFtZSA9IHJlZi5yZXBsYWNlKHRoaXMuREVGSU5JVElPTlNfUFJFRklYLCAnJyk7XG4gICAgICAgICAgLy8g5LuO5qC5IHNjaGVtYSDnmoQgZGVmaW5pdGlvbnMg5Lit6I635Y+W5a6a5LmJXG4gICAgICAgICAgY29uc3Qgcm9vdERlZmluaXRpb25zID0gdGhpcy5zY2hlbWFTZXJ2aWNlLmRlZmluaXRpb25zO1xuICAgICAgICAgIHRhcmdldFNjaGVtYSA9IHJvb3REZWZpbml0aW9ucz8uW2RlZmluaXRpb25OYW1lXSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyDlpITnkIbmma7pgJrnmoTltYzlpZflsZ7mgKdcbiAgICAgIGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnRpZXMgfHwgcHJvcGVydHkuaXRlbXM/LnByb3BlcnRpZXMpIHtcbiAgICAgICAgdGFyZ2V0U2NoZW1hID0gcHJvcGVydHkuaXRlbXM/LnByb3BlcnRpZXMgPyBwcm9wZXJ0eS5pdGVtcyA6IHByb3BlcnR5O1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0U2NoZW1hKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtYSA9IHRhcmdldFNjaGVtYTtcbiAgICAgICAgdGhpcy5wYXRoLnB1c2gobmFtZSk7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHRhcmdldFNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG9QYXRoKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gdGhpcy5wYXRoLnNsaWNlKDAsIGluZGV4ICsgMSk7XG4gICAgdGhpcy5wYXRoID0gWy4uLnRhcmdldFBhdGhdO1xuXG4gICAgbGV0IGN1cnJlbnRPYmogPSB0aGlzLnNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IHBhdGhTZWdtZW50IG9mIHRhcmdldFBhdGgpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gY3VycmVudE9iai5wcm9wZXJ0aWVzPy5bcGF0aFNlZ21lbnRdO1xuICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgIC8vIOWkhOeQhiAkcmVmIOW8leeUqFxuICAgICAgICBpZiAoKHByb3BlcnR5IGFzIGFueSkuJHJlZikge1xuICAgICAgICAgIGNvbnN0IHJlZiA9IChwcm9wZXJ0eSBhcyBhbnkpLiRyZWYgYXMgc3RyaW5nO1xuICAgICAgICAgIGlmIChyZWYuc3RhcnRzV2l0aCh0aGlzLkRFRklOSVRJT05TX1BSRUZJWCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25OYW1lID0gcmVmLnJlcGxhY2UodGhpcy5ERUZJTklUSU9OU19QUkVGSVgsICcnKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3REZWZpbml0aW9ucyA9ICh0aGlzLnNjaGVtYSBhcyBhbnkpPy5kZWZpbml0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSByb290RGVmaW5pdGlvbnM/LltkZWZpbml0aW9uTmFtZV07XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICBjdXJyZW50T2JqID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g5aSE55CG5pmu6YCa55qE5bWM5aWX5bGe5oCnXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRPYmogPSBwcm9wZXJ0eS5pdGVtcz8ucHJvcGVydGllcyA/IHByb3BlcnR5Lml0ZW1zIDogcHJvcGVydHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTY2hlbWEgPSBjdXJyZW50T2JqO1xuICAgIHRoaXMucHJvcGVydGllcyA9IGN1cnJlbnRPYmoucHJvcGVydGllcyB8fCB7fTtcbiAgfVxuXG4gIGhhc05lc3RlZFByb3BlcnRpZXMocHJvcGVydHk6IE9wZW5BUElWM1NjaGVtYU9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAocHJvcGVydHkudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgcHJvcGVydHkucHJvcGVydGllcyAmJlxuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0eS5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB8fFxuICAgICAgKHByb3BlcnR5LnR5cGUgPT09ICdhcnJheScgJiZcbiAgICAgICAgcHJvcGVydHkuaXRlbXMgJiZcbiAgICAgICAgdHlwZW9mIHByb3BlcnR5Lml0ZW1zID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAocHJvcGVydHkuaXRlbXMgYXMgT3BlbkFQSVYzU2NoZW1hT2JqZWN0KS5wcm9wZXJ0aWVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKChwcm9wZXJ0eS5pdGVtcyBhcyBPcGVuQVBJVjNTY2hlbWFPYmplY3QpLnByb3BlcnRpZXMgfHwge30pXG4gICAgICAgICAgLmxlbmd0aCA+IDApXG4gICAgKTtcbiAgfVxuXG4gIGdldFByb3BlcnR5VHlwZShwcm9wZXJ0eTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0KTogc3RyaW5nIHtcbiAgICBpZiAocHJvcGVydHkudHlwZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkudHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5LnR5cGUuam9pbignIHwgJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcGVydHkudHlwZTtcbiAgICB9XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIGlzUmVxdWlyZWQocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2NoZW1hPy5yZXF1aXJlZD8uaW5jbHVkZXMocHJvcGVydHlOYW1lKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4Dmn6XlsZ7mgKfmmK/lkKbmnIkgJHJlZiDlvJXnlKjmiJbltYzlpZflsZ7mgKdcbiAgICovXG4gIGhhc1ZpZXdhYmxlQ29udGVudChwcm9wZXJ0eTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIOaciSBwcm9wZXJ0aWVzIOeahOWvueixoVxuICAgICAgKHByb3BlcnR5LnR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHByb3BlcnR5LnByb3BlcnRpZXMgJiZcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcGVydHkucHJvcGVydGllcykubGVuZ3RoID4gMCkgfHxcbiAgICAgIC8vIOaciSBwcm9wZXJ0aWVzIOeahOaVsOe7hOmhuVxuICAgICAgKHByb3BlcnR5LnR5cGUgPT09ICdhcnJheScgJiZcbiAgICAgICAgcHJvcGVydHkuaXRlbXMgJiZcbiAgICAgICAgdHlwZW9mIHByb3BlcnR5Lml0ZW1zID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAocHJvcGVydHkuaXRlbXMgYXMgT3BlbkFQSVYzU2NoZW1hT2JqZWN0KS5wcm9wZXJ0aWVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKChwcm9wZXJ0eS5pdGVtcyBhcyBPcGVuQVBJVjNTY2hlbWFPYmplY3QpLnByb3BlcnRpZXMgfHwge30pXG4gICAgICAgICAgLmxlbmd0aCA+IDApIHx8XG4gICAgICAvLyDmnIkgJHJlZiDlvJXnlKhcbiAgICAgICEhKHByb3BlcnR5IGFzIGFueSkuJHJlZlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5qOA5p+l5bGe5oCn5piv5ZCm5pyJICRyZWYg5byV55SoXG4gICAqL1xuICBoYXNSZWZQcm9wZXJ0eShwcm9wZXJ0eTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHByb3BlcnR5IGFzIGFueSkuJHJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5YgJHJlZiDlvJXnlKjnmoTlrprkuYnlkI3np7BcbiAgICovXG4gIGdldFJlZkRlZmluaXRpb25OYW1lKHByb3BlcnR5OiBPcGVuQVBJVjNTY2hlbWFPYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZiA9IChwcm9wZXJ0eSBhcyBhbnkpLiRyZWY7XG4gICAgaWYgKHJlZiAmJiB0eXBlb2YgcmVmID09PSAnc3RyaW5nJykge1xuICAgICAgLy8g5LuOIFwiIy9kZWZpbml0aW9ucy9pby5rOHMuYXBpLmFwcHMudjEuRGVwbG95bWVudFNwZWNcIiDkuK3mj5Dlj5blrprkuYnlkI3np7BcbiAgICAgIGlmIChyZWYuc3RhcnRzV2l0aCh0aGlzLkRFRklOSVRJT05TX1BSRUZJWCkpIHtcbiAgICAgICAgcmV0dXJuIHJlZi5yZXBsYWNlKHRoaXMuREVGSU5JVElPTlNfUFJFRklYLCAnJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0cyA9IHJlZi5zcGxpdCgnLycpO1xuICAgICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIHx8IHJlZjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gRXhhbXBsZXMg55u45YWz5pa55rOVXG4gIHRyeUV4YW1wbGUoZXhhbXBsZTogWWFtbEV4YW1wbGUpIHtcbiAgICAvLyDop6blj5Hkuovku7bvvIzorqnniLbnu4Tku7blpITnkIYgdHJ5IGl0IOWKn+iDve+8jOWwhiBZQU1MIOWGheWuueWPkemAgee7meeItue7hOS7tlxuICAgIHRoaXMudHJ5WWFtbC5lbWl0KGV4YW1wbGUueWFtbCk7XG4gIH1cblxuICBkb3dubG9hZFlhbWwoZXhhbXBsZTogWWFtbEV4YW1wbGUpIHtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2V4YW1wbGUueWFtbF0sIHsgdHlwZTogJ3RleHQveWFtbCcgfSk7XG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9IGAke2V4YW1wbGUudGl0bGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJyl9LnlhbWxgO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfVxuXG4gIC8vIOWkhOeQhuaPj+i/sOS4reeahOmTvuaOpVxuICBwcm9jZXNzRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkZXNjcmlwdGlvbikgcmV0dXJuICcnO1xuXG4gICAgLy8g5bCGIFVSTCDovazmjaLkuLrlj6/ngrnlh7vnmoTpk77mjqVcbiAgICBjb25zdCB1cmxSZWdleCA9IC8oaHR0cHM/OlxcL1xcL1teXFxzXSspL2c7XG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uLnJlcGxhY2UoXG4gICAgICB1cmxSZWdleCxcbiAgICAgICc8YSBocmVmPVwiJDFcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+JDE8L2E+JyxcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2NoZW1hLWhlYWRlclwiPlxuICA8c3Bhbj57eyByZXNvdXJjZUtpbmQgfX08L3NwYW4+XG4gIDxhdWktaWNvblxuICAgIGljb249XCJ4bWFya1wiXG4gICAgKGNsaWNrKT1cImNsb3NlLm5leHQoKVwiXG4gID48L2F1aS1pY29uPlxuPC9kaXY+XG48YXVpLXRhYi1ncm91cCB0eXBlPVwiY2FyZFwiPlxuICA8YXVpLXRhYiAqbmdJZj1cImhhc1NjaGVtYVwiPlxuICAgIDxuZy1jb250YWluZXIgKmF1aVRhYkxhYmVsPiBTY2hlbWEgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqYXVpVGFiQ29udGVudD5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzY2hlbWFcIlxuICAgICAgICBjbGFzcz1cInNjaGVtYS1jb250ZW50XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2NoZW1hLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cInNjaGVtYS1kZXNjXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgcHJvY2Vzc0Rlc2NyaXB0aW9uKHNjaGVtYS5kZXNjcmlwdGlvbiB8IGFjbFBhcnNlSnNvblRyYW5zbGF0ZSlcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2hlbWEtcGF0aFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXRoLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICAgICAgICAgID57eyByZXNvdXJjZUtpbmQgfX08L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGF0aDsgaW5kZXggYXMgaTsgbGFzdCBhcyBpc0xhc3RcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMYXN0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGF0aC1tYXJrXCI+Pjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDpcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvUGF0aChpKVwiXG4gICAgICAgICAgICAgICAgPnt7IHAgfX08L2FcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMYXN0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGF0aC1tYXJrXCI+Pjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjaGVtYS1saXN0XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvcGVydGllcyB8IGtleXZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2NoZW1hLWl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxoMz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib2JqLXR5cGVcIj57eyBpdGVtLnZhbHVlLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPHAgW2lubmVySFRNTF09XCJwcm9jZXNzRGVzY3JpcHRpb24oaXRlbS52YWx1ZS5kZXNjcmlwdGlvbilcIj48L3A+XG4gICAgICAgICAgICA8cCAqbmdJZj1cImhhc1ZpZXdhYmxlQ29udGVudChpdGVtLnZhbHVlKVwiPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRyaWxsZG93blRvUHJvcGVydHkoaXRlbS5rZXkpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICd2aWV3JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNSZWZQcm9wZXJ0eShpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZWYtaW5mb1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAoe3sgZ2V0UmVmRGVmaW5pdGlvbk5hbWUoaXRlbS52YWx1ZSkgfX0pXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9hdWktdGFiPlxuICA8YXVpLXRhYiAqbmdJZj1cImhhc0V4YW1wbGVzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqYXVpVGFiTGFiZWw+IEV4YW1wbGVzIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKmF1aVRhYkNvbnRlbnQ+XG4gICAgICA8IS0tIEV4YW1wbGVzIFRhYiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzY2hlbWEtbGlzdFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IGV4YW1wbGUgb2YgZXhhbXBsZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwic2NoZW1hLWl0ZW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGgzPlxuICAgICAgICAgICAge3sgaSArIDEgfX0uIDxzcGFuPnt7IGV4YW1wbGUudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cInByb2Nlc3NEZXNjcmlwdGlvbihleGFtcGxlLmRlc2NyaXB0aW9uKVwiPjwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cInR3LWZsZXggdHctanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDpcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidHJ5RXhhbXBsZShleGFtcGxlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxhdWktaWNvblxuICAgICAgICAgICAgICAgIGljb249XCJhcnJvd190dXJuX3VwXCJcbiAgICAgICAgICAgICAgICBzaXplPVwiMTRcIlxuICAgICAgICAgICAgICA+PC9hdWktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+VHJ5IGl0PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkWWFtbChleGFtcGxlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxhdWktaWNvblxuICAgICAgICAgICAgICAgIGljb249XCJkb3dubG9hZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIjE0XCJcbiAgICAgICAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPkRvd25sb2FkIFlBTUw8L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2F1aS10YWI+XG48L2F1aS10YWItZ3JvdXA+XG4iXX0=