@alauda-fe/storage 0.0.1

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 (44) hide show
  1. package/esm2022/alauda-fe-storage.mjs +5 -0
  2. package/esm2022/index.mjs +23 -0
  3. package/esm2022/lib/components/pvc-delete-dialog/component.mjs +292 -0
  4. package/esm2022/lib/components/pvc-expand-capacity-dialog/component.mjs +193 -0
  5. package/esm2022/lib/components/pvc-form/component.mjs +674 -0
  6. package/esm2022/lib/components/rebuild-volume-dialog/component.mjs +251 -0
  7. package/esm2022/lib/components/source-link/component.mjs +81 -0
  8. package/esm2022/lib/components/spec-form/component.mjs +464 -0
  9. package/esm2022/lib/components/storage-feature-tags/component.mjs +146 -0
  10. package/esm2022/lib/components/storageclass-select/component.mjs +179 -0
  11. package/esm2022/lib/pipes/actual-capacity.pipe.mjs +17 -0
  12. package/esm2022/lib/services/common-util.service.mjs +163 -0
  13. package/esm2022/lib/services/pvc-util.service.mjs +416 -0
  14. package/esm2022/lib/types/commons.mjs +75 -0
  15. package/esm2022/lib/types/internal.mjs +7 -0
  16. package/esm2022/lib/types/k8s.mjs +2 -0
  17. package/esm2022/lib/types/resource-definition.mjs +13 -0
  18. package/esm2022/lib/types/resource-exports.mjs +8 -0
  19. package/esm2022/lib/types/resource-internals.mjs +2 -0
  20. package/esm2022/lib/utils/constants.mjs +202 -0
  21. package/esm2022/lib/utils/resource-exports.mjs +65 -0
  22. package/esm2022/lib/utils/util.mjs +132 -0
  23. package/index.d.ts +17 -0
  24. package/lib/components/pvc-delete-dialog/component.d.ts +33 -0
  25. package/lib/components/pvc-expand-capacity-dialog/component.d.ts +36 -0
  26. package/lib/components/pvc-form/component.d.ts +106 -0
  27. package/lib/components/rebuild-volume-dialog/component.d.ts +28 -0
  28. package/lib/components/source-link/component.d.ts +17 -0
  29. package/lib/components/spec-form/component.d.ts +71 -0
  30. package/lib/components/storage-feature-tags/component.d.ts +25 -0
  31. package/lib/components/storageclass-select/component.d.ts +26 -0
  32. package/lib/pipes/actual-capacity.pipe.d.ts +8 -0
  33. package/lib/services/common-util.service.d.ts +48 -0
  34. package/lib/services/pvc-util.service.d.ts +130 -0
  35. package/lib/types/commons.d.ts +85 -0
  36. package/lib/types/internal.d.ts +4 -0
  37. package/lib/types/k8s.d.ts +105 -0
  38. package/lib/types/resource-definition.d.ts +18 -0
  39. package/lib/types/resource-exports.d.ts +16 -0
  40. package/lib/types/resource-internals.d.ts +20 -0
  41. package/lib/utils/constants.d.ts +37 -0
  42. package/lib/utils/resource-exports.d.ts +12 -0
  43. package/lib/utils/util.d.ts +19 -0
  44. package/package.json +38 -0
@@ -0,0 +1,146 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { TagModule } from '@alauda/ui';
3
+ import { ObservableInput, publishRef, K8sUtilService, TRANSLATE_MODULE, } from '@alauda-fe/common';
4
+ import { AsyncPipe, NgFor, NgIf } from '@angular/common';
5
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
6
+ import { Observable, combineLatest, map, startWith } from 'rxjs';
7
+ import { StorageCommonUtilService } from '../../services/common-util.service';
8
+ import { StorageProvisioner, StorageclassFeature } from '../../types/commons';
9
+ import { STORAGE_OPTION_MAP, CSI_TOP_SNAPSHOTCLASS_NAME, } from '../../utils/constants';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@alauda-fe/common";
12
+ import * as i2 from "../../services/common-util.service";
13
+ import * as i3 from "@alauda/ui";
14
+ function StorageFeatureTagsComponent_ng_container_0_aui_tag_1_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "aui-tag", 3);
16
+ i0.ɵɵtext(1);
17
+ i0.ɵɵpipe(2, "translate");
18
+ i0.ɵɵelementEnd();
19
+ } if (rf & 2) {
20
+ i0.ɵɵproperty("border", true);
21
+ i0.ɵɵadvance();
22
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "default"), " ");
23
+ } }
24
+ function StorageFeatureTagsComponent_ng_container_0_aui_tag_2_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelementStart(0, "aui-tag", 4);
26
+ i0.ɵɵtext(1);
27
+ i0.ɵɵpipe(2, "translate");
28
+ i0.ɵɵelementEnd();
29
+ } if (rf & 2) {
30
+ const tag_r1 = ctx.$implicit;
31
+ i0.ɵɵproperty("border", true);
32
+ i0.ɵɵadvance();
33
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "storage." + tag_r1));
34
+ } }
35
+ function StorageFeatureTagsComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵelementContainerStart(0);
37
+ i0.ɵɵtemplate(1, StorageFeatureTagsComponent_ng_container_0_aui_tag_1_Template, 3, 4, "aui-tag", 1)(2, StorageFeatureTagsComponent_ng_container_0_aui_tag_2_Template, 3, 4, "aui-tag", 2);
38
+ i0.ɵɵpipe(3, "async");
39
+ i0.ɵɵelementContainerEnd();
40
+ } if (rf & 2) {
41
+ const ctx_r1 = i0.ɵɵnextContext();
42
+ i0.ɵɵadvance();
43
+ i0.ɵɵproperty("ngIf", ctx_r1.hasDefault);
44
+ i0.ɵɵadvance();
45
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 2, ctx_r1.features$));
46
+ } }
47
+ export class StorageFeatureTagsComponent {
48
+ constructor(k8sUtil, storageUtil) {
49
+ this.k8sUtil = k8sUtil;
50
+ this.storageUtil = storageUtil;
51
+ this.features$ = combineLatest([
52
+ this.provisioner$,
53
+ this.storageClass$,
54
+ this.volumeSnapshotClasses$.pipe(startWith([])),
55
+ this.storageUtil.storageDescriptionMapCache.fetch(null),
56
+ ]).pipe(map(([provisioner, storageClass, volumeSnapshotClasses, storageDescriptionMaps,]) => {
57
+ const features = this.k8sUtil
58
+ .getAnnotation(storageClass, 'features')
59
+ ?.split(',');
60
+ // 存储类列表不再依赖卷快照类,这里展示 features 完整的能力,参见 https://jira.alauda.cn/browse/ACP-31043 comment
61
+ const featuresSet = new Set(features);
62
+ this.updateStorageClassFeature(featuresSet, provisioner, storageClass);
63
+ this.updateVolumeSnapshotFeature(featuresSet, provisioner, storageClass, volumeSnapshotClasses);
64
+ this.updateThirdPartySnapshotFeature(featuresSet, storageClass, storageDescriptionMaps);
65
+ return Array.from(featuresSet);
66
+ }), map(features => features.filter(Boolean)), publishRef());
67
+ }
68
+ updateStorageClassFeature(featuresSet, provisioner, storageClass) {
69
+ if (storageClass) {
70
+ storageClass.allowVolumeExpansion
71
+ ? featuresSet.add(StorageclassFeature.EXPANSION)
72
+ : featuresSet.delete(StorageclassFeature.EXPANSION);
73
+ }
74
+ else {
75
+ STORAGE_OPTION_MAP[provisioner]?.features?.forEach(feature => {
76
+ featuresSet.add(feature);
77
+ });
78
+ }
79
+ }
80
+ updateVolumeSnapshotFeature(featuresSet, provisioner, storageClass, volumeSnapshotClasses) {
81
+ if (!volumeSnapshotClasses?.length) {
82
+ return;
83
+ }
84
+ this.hasVolumeSnapshotFeature(provisioner, storageClass, volumeSnapshotClasses)
85
+ ? featuresSet.add(StorageclassFeature.SNAPSHOT)
86
+ : featuresSet.delete(StorageclassFeature.SNAPSHOT);
87
+ }
88
+ hasVolumeSnapshotFeature(provisioner, storageClass, volumeSnapshotClasses) {
89
+ switch (provisioner) {
90
+ case StorageProvisioner.CEPH_FS_INTERNAL:
91
+ case StorageProvisioner.CEPH_FS_RBD: {
92
+ return volumeSnapshotClasses?.some(item => item.parameters?.clusterID ===
93
+ storageClass?.parameters?.clusterID &&
94
+ item.driver === provisioner);
95
+ }
96
+ case StorageProvisioner.TOPOLVM: {
97
+ return volumeSnapshotClasses?.some(item => item.metadata.name === CSI_TOP_SNAPSHOTCLASS_NAME);
98
+ }
99
+ }
100
+ }
101
+ updateThirdPartySnapshotFeature(featuresSet, storageClass, storageDescriptionMaps) {
102
+ const thirdPartySnapshot = this.storageUtil.getThirdPartySnapshotSupported(storageClass, storageDescriptionMaps);
103
+ // null 表示未匹配到第三方存储
104
+ if (thirdPartySnapshot === null) {
105
+ return;
106
+ }
107
+ thirdPartySnapshot
108
+ ? featuresSet.add(StorageclassFeature.SNAPSHOT)
109
+ : featuresSet.delete(StorageclassFeature.SNAPSHOT);
110
+ }
111
+ static { this.ɵfac = function StorageFeatureTagsComponent_Factory(t) { return new (t || StorageFeatureTagsComponent)(i0.ɵɵdirectiveInject(i1.K8sUtilService), i0.ɵɵdirectiveInject(i2.StorageCommonUtilService)); }; }
112
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StorageFeatureTagsComponent, selectors: [["acl-storage-feature-tags"]], inputs: { provisioner: "provisioner", storageClass: "storageClass", hasDefault: "hasDefault", volumeSnapshotClasses: "volumeSnapshotClasses" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 2, vars: 3, consts: [[4, "ngIf"], ["type", "success", "size", "mini", 3, "border", 4, "ngIf"], ["type", "info", "size", "mini", 3, "border", 4, "ngFor", "ngForOf"], ["type", "success", "size", "mini", 3, "border"], ["type", "info", "size", "mini", 3, "border"]], template: function StorageFeatureTagsComponent_Template(rf, ctx) { if (rf & 1) {
113
+ i0.ɵɵtemplate(0, StorageFeatureTagsComponent_ng_container_0_Template, 4, 4, "ng-container", 0);
114
+ i0.ɵɵpipe(1, "async");
115
+ } if (rf & 2) {
116
+ let tmp_0_0;
117
+ i0.ɵɵproperty("ngIf", ((tmp_0_0 = i0.ɵɵpipeBind1(1, 1, ctx.features$)) == null ? null : tmp_0_0.length) || ctx.hasDefault);
118
+ } }, dependencies: [AsyncPipe, NgIf, NgFor, TagModule, i3.TagComponent, i1.TranslatePipe], encapsulation: 2, changeDetection: 0 }); }
119
+ }
120
+ __decorate([
121
+ ObservableInput(),
122
+ __metadata("design:type", Observable)
123
+ ], StorageFeatureTagsComponent.prototype, "provisioner$", void 0);
124
+ __decorate([
125
+ ObservableInput(),
126
+ __metadata("design:type", Observable)
127
+ ], StorageFeatureTagsComponent.prototype, "storageClass$", void 0);
128
+ __decorate([
129
+ ObservableInput(),
130
+ __metadata("design:type", Observable)
131
+ ], StorageFeatureTagsComponent.prototype, "volumeSnapshotClasses$", void 0);
132
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StorageFeatureTagsComponent, [{
133
+ type: Component,
134
+ args: [{ selector: 'acl-storage-feature-tags', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [AsyncPipe, NgIf, NgFor, TagModule, TRANSLATE_MODULE], template: "<ng-container *ngIf=\"(features$ | async)?.length || hasDefault\">\n <aui-tag\n *ngIf=\"hasDefault\"\n type=\"success\"\n size=\"mini\"\n [border]=\"true\"\n >\n {{ 'default' | translate }}\n </aui-tag>\n <aui-tag\n type=\"info\"\n size=\"mini\"\n [border]=\"true\"\n *ngFor=\"let tag of features$ | async\"\n >{{ 'storage.' + tag | translate }}</aui-tag\n >\n</ng-container>\n" }]
135
+ }], () => [{ type: i1.K8sUtilService }, { type: i2.StorageCommonUtilService }], { provisioner: [{
136
+ type: Input,
137
+ args: [{ required: true }]
138
+ }], provisioner$: [], storageClass: [{
139
+ type: Input
140
+ }], storageClass$: [], hasDefault: [{
141
+ type: Input
142
+ }], volumeSnapshotClasses: [{
143
+ type: Input
144
+ }], volumeSnapshotClasses$: [] }); })();
145
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(StorageFeatureTagsComponent, { className: "StorageFeatureTagsComponent", filePath: "lib/components/storage-feature-tags/component.ts", lineNumber: 28 }); })();
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zdG9yYWdlL3NyYy9saWIvY29tcG9uZW50cy9zdG9yYWdlLWZlYXR1cmUtdGFncy9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JhZ2Uvc3JjL2xpYi9jb21wb25lbnRzL3N0b3JhZ2UtZmVhdHVyZS10YWdzL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxFQUVkLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQiwwQkFBMEIsR0FDM0IsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0lDakI3QixrQ0FLQztJQUNDLFlBQ0Y7O0lBQUEsaUJBQVU7O0lBSFIsNkJBQWU7SUFFZixjQUNGO0lBREUsZ0VBQ0Y7OztJQUNBLGtDQUtHO0lBQUEsWUFBa0M7O0lBQUEsaUJBQ3BDOzs7SUFIQyw2QkFBZTtJQUVkLGNBQWtDO0lBQWxDLCtEQUFrQzs7O0lBZHZD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RUFBRTs4QkFDSCxVQUFVO2lFQUFxQjtBQU05QztJQURDLGVBQWUsRUFBRTs4QkFDRixVQUFVO2tFQUFlO0FBU3pDO0lBREMsZUFBZSxFQUFFOzhCQUNPLFVBQVU7MkVBQXdCO2lGQXBCaEQsMkJBQTJCO2NBUHZDLFNBQVM7MkJBQ0UsMEJBQTBCLG1CQUVuQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztzRkFJOUQsV0FBVztrQkFEVixLQUFLO21CQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUl6QixZQUFZLE1BR1osWUFBWTtrQkFEWCxLQUFLO1lBSU4sYUFBYSxNQUdiLFVBQVU7a0JBRFQsS0FBSztZQUlOLHFCQUFxQjtrQkFEcEIsS0FBSztZQUlOLHNCQUFzQjtrRkFwQlgsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlSW5wdXQsXG4gIHB1Ymxpc2hSZWYsXG4gIEs4c1V0aWxTZXJ2aWNlLFxuICBTdHJpbmdNYXAsXG4gIFRSQU5TTEFURV9NT0RVTEUsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VDb21tb25VdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi11dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVByb3Zpc2lvbmVyLCBTdG9yYWdlY2xhc3NGZWF0dXJlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9ucyc7XG5pbXBvcnQgeyBTdG9yYWdlQ2xhc3MsIFZvbHVtZVNuYXBzaG90Q2xhc3MgfSBmcm9tICcuLi8uLi90eXBlcy9rOHMnO1xuaW1wb3J0IHtcbiAgU1RPUkFHRV9PUFRJT05fTUFQLFxuICBDU0lfVE9QX1NOQVBTSE9UQ0xBU1NfTkFNRSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXN0b3JhZ2UtZmVhdHVyZS10YWdzJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIE5nSWYsIE5nRm9yLCBUYWdNb2R1bGUsIFRSQU5TTEFURV9NT0RVTEVdLFxufSlcbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmVhdHVyZVRhZ3NDb21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwcm92aXNpb25lcjogU3RvcmFnZVByb3Zpc2lvbmVyO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBwcm92aXNpb25lciQhOiBPYnNlcnZhYmxlPFN0b3JhZ2VQcm92aXNpb25lcj47XG5cbiAgQElucHV0KClcbiAgc3RvcmFnZUNsYXNzOiBTdG9yYWdlQ2xhc3M7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHN0b3JhZ2VDbGFzcyQhOiBPYnNlcnZhYmxlPFN0b3JhZ2VDbGFzcz47XG5cbiAgQElucHV0KClcbiAgaGFzRGVmYXVsdDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICB2b2x1bWVTbmFwc2hvdENsYXNzZXM6IFZvbHVtZVNuYXBzaG90Q2xhc3NbXTtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgdm9sdW1lU25hcHNob3RDbGFzc2VzJCE6IE9ic2VydmFibGU8Vm9sdW1lU25hcHNob3RDbGFzc1tdPjtcblxuICBmZWF0dXJlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnByb3Zpc2lvbmVyJCxcbiAgICB0aGlzLnN0b3JhZ2VDbGFzcyQsXG4gICAgdGhpcy52b2x1bWVTbmFwc2hvdENsYXNzZXMkLnBpcGUoc3RhcnRXaXRoKFtdIGFzIFZvbHVtZVNuYXBzaG90Q2xhc3NbXSkpLFxuICAgIHRoaXMuc3RvcmFnZVV0aWwuc3RvcmFnZURlc2NyaXB0aW9uTWFwQ2FjaGUuZmV0Y2gobnVsbCksXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgcHJvdmlzaW9uZXIsXG4gICAgICAgIHN0b3JhZ2VDbGFzcyxcbiAgICAgICAgdm9sdW1lU25hcHNob3RDbGFzc2VzLFxuICAgICAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuazhzVXRpbFxuICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKHN0b3JhZ2VDbGFzcywgJ2ZlYXR1cmVzJylcbiAgICAgICAgICA/LnNwbGl0KCcsJykgYXMgU3RvcmFnZWNsYXNzRmVhdHVyZVtdO1xuICAgICAgICAvLyDlrZjlgqjnsbvliJfooajkuI3lho3kvp3otZbljbflv6vnhafnsbvvvIzov5nph4zlsZXnpLogZmVhdHVyZXMg5a6M5pW055qE6IO95Yqb77yM5Y+C6KeBIGh0dHBzOi8vamlyYS5hbGF1ZGEuY24vYnJvd3NlL0FDUC0zMTA0MyBjb21tZW50XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzU2V0ID0gbmV3IFNldChmZWF0dXJlcyk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTdG9yYWdlQ2xhc3NGZWF0dXJlKGZlYXR1cmVzU2V0LCBwcm92aXNpb25lciwgc3RvcmFnZUNsYXNzKTtcbiAgICAgICAgdGhpcy51cGRhdGVWb2x1bWVTbmFwc2hvdEZlYXR1cmUoXG4gICAgICAgICAgZmVhdHVyZXNTZXQsXG4gICAgICAgICAgcHJvdmlzaW9uZXIsXG4gICAgICAgICAgc3RvcmFnZUNsYXNzLFxuICAgICAgICAgIHZvbHVtZVNuYXBzaG90Q2xhc3NlcyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVUaGlyZFBhcnR5U25hcHNob3RGZWF0dXJlKFxuICAgICAgICAgIGZlYXR1cmVzU2V0LFxuICAgICAgICAgIHN0b3JhZ2VDbGFzcyxcbiAgICAgICAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGZlYXR1cmVzU2V0KTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBtYXAoZmVhdHVyZXMgPT4gZmVhdHVyZXMuZmlsdGVyKEJvb2xlYW4pKSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNVdGlsOiBLOHNVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VVdGlsOiBTdG9yYWdlQ29tbW9uVXRpbFNlcnZpY2UsXG4gICkge31cblxuICBwcml2YXRlIHVwZGF0ZVN0b3JhZ2VDbGFzc0ZlYXR1cmUoXG4gICAgZmVhdHVyZXNTZXQ6IFNldDxzdHJpbmc+LFxuICAgIHByb3Zpc2lvbmVyOiBTdG9yYWdlUHJvdmlzaW9uZXIsXG4gICAgc3RvcmFnZUNsYXNzOiBTdG9yYWdlQ2xhc3MgfCBudWxsLFxuICApIHtcbiAgICBpZiAoc3RvcmFnZUNsYXNzKSB7XG4gICAgICBzdG9yYWdlQ2xhc3MuYWxsb3dWb2x1bWVFeHBhbnNpb25cbiAgICAgICAgPyBmZWF0dXJlc1NldC5hZGQoU3RvcmFnZWNsYXNzRmVhdHVyZS5FWFBBTlNJT04pXG4gICAgICAgIDogZmVhdHVyZXNTZXQuZGVsZXRlKFN0b3JhZ2VjbGFzc0ZlYXR1cmUuRVhQQU5TSU9OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgU1RPUkFHRV9PUFRJT05fTUFQW3Byb3Zpc2lvbmVyXT8uZmVhdHVyZXM/LmZvckVhY2goZmVhdHVyZSA9PiB7XG4gICAgICAgIGZlYXR1cmVzU2V0LmFkZChmZWF0dXJlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVm9sdW1lU25hcHNob3RGZWF0dXJlKFxuICAgIGZlYXR1cmVzU2V0OiBTZXQ8c3RyaW5nPixcbiAgICBwcm92aXNpb25lcjogU3RvcmFnZVByb3Zpc2lvbmVyLFxuICAgIHN0b3JhZ2VDbGFzczogU3RvcmFnZUNsYXNzIHwgbnVsbCxcbiAgICB2b2x1bWVTbmFwc2hvdENsYXNzZXM6IFZvbHVtZVNuYXBzaG90Q2xhc3NbXSxcbiAgKSB7XG4gICAgaWYgKCF2b2x1bWVTbmFwc2hvdENsYXNzZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFzVm9sdW1lU25hcHNob3RGZWF0dXJlKFxuICAgICAgcHJvdmlzaW9uZXIsXG4gICAgICBzdG9yYWdlQ2xhc3MsXG4gICAgICB2b2x1bWVTbmFwc2hvdENsYXNzZXMsXG4gICAgKVxuICAgICAgPyBmZWF0dXJlc1NldC5hZGQoU3RvcmFnZWNsYXNzRmVhdHVyZS5TTkFQU0hPVClcbiAgICAgIDogZmVhdHVyZXNTZXQuZGVsZXRlKFN0b3JhZ2VjbGFzc0ZlYXR1cmUuU05BUFNIT1QpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNWb2x1bWVTbmFwc2hvdEZlYXR1cmUoXG4gICAgcHJvdmlzaW9uZXI6IFN0b3JhZ2VQcm92aXNpb25lcixcbiAgICBzdG9yYWdlQ2xhc3M6IFN0b3JhZ2VDbGFzcyxcbiAgICB2b2x1bWVTbmFwc2hvdENsYXNzZXM6IFZvbHVtZVNuYXBzaG90Q2xhc3NbXSxcbiAgKSB7XG4gICAgc3dpdGNoIChwcm92aXNpb25lcikge1xuICAgICAgY2FzZSBTdG9yYWdlUHJvdmlzaW9uZXIuQ0VQSF9GU19JTlRFUk5BTDpcbiAgICAgIGNhc2UgU3RvcmFnZVByb3Zpc2lvbmVyLkNFUEhfRlNfUkJEOiB7XG4gICAgICAgIHJldHVybiB2b2x1bWVTbmFwc2hvdENsYXNzZXM/LnNvbWUoXG4gICAgICAgICAgaXRlbSA9PlxuICAgICAgICAgICAgaXRlbS5wYXJhbWV0ZXJzPy5jbHVzdGVySUQgPT09XG4gICAgICAgICAgICAgIHN0b3JhZ2VDbGFzcz8ucGFyYW1ldGVycz8uY2x1c3RlcklEICYmXG4gICAgICAgICAgICBpdGVtLmRyaXZlciA9PT0gcHJvdmlzaW9uZXIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlIFN0b3JhZ2VQcm92aXNpb25lci5UT1BPTFZNOiB7XG4gICAgICAgIHJldHVybiB2b2x1bWVTbmFwc2hvdENsYXNzZXM/LnNvbWUoXG4gICAgICAgICAgaXRlbSA9PiBpdGVtLm1ldGFkYXRhLm5hbWUgPT09IENTSV9UT1BfU05BUFNIT1RDTEFTU19OQU1FLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGhpcmRQYXJ0eVNuYXBzaG90RmVhdHVyZShcbiAgICBmZWF0dXJlc1NldDogU2V0PHN0cmluZz4sXG4gICAgc3RvcmFnZUNsYXNzOiBTdG9yYWdlQ2xhc3MsXG4gICAgc3RvcmFnZURlc2NyaXB0aW9uTWFwczogU3RyaW5nTWFwW10sXG4gICkge1xuICAgIGNvbnN0IHRoaXJkUGFydHlTbmFwc2hvdCA9IHRoaXMuc3RvcmFnZVV0aWwuZ2V0VGhpcmRQYXJ0eVNuYXBzaG90U3VwcG9ydGVkKFxuICAgICAgc3RvcmFnZUNsYXNzLFxuICAgICAgc3RvcmFnZURlc2NyaXB0aW9uTWFwcyxcbiAgICApO1xuXG4gICAgLy8gbnVsbCDooajnpLrmnKrljLnphY3liLDnrKzkuInmlrnlrZjlgqhcbiAgICBpZiAodGhpcmRQYXJ0eVNuYXBzaG90ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcmRQYXJ0eVNuYXBzaG90XG4gICAgICA/IGZlYXR1cmVzU2V0LmFkZChTdG9yYWdlY2xhc3NGZWF0dXJlLlNOQVBTSE9UKVxuICAgICAgOiBmZWF0dXJlc1NldC5kZWxldGUoU3RvcmFnZWNsYXNzRmVhdHVyZS5TTkFQU0hPVCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoZmVhdHVyZXMkIHwgYXN5bmMpPy5sZW5ndGggfHwgaGFzRGVmYXVsdFwiPlxuICA8YXVpLXRhZ1xuICAgICpuZ0lmPVwiaGFzRGVmYXVsdFwiXG4gICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgIHNpemU9XCJtaW5pXCJcbiAgICBbYm9yZGVyXT1cInRydWVcIlxuICA+XG4gICAge3sgJ2RlZmF1bHQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYXVpLXRhZz5cbiAgPGF1aS10YWdcbiAgICB0eXBlPVwiaW5mb1wiXG4gICAgc2l6ZT1cIm1pbmlcIlxuICAgIFtib3JkZXJdPVwidHJ1ZVwiXG4gICAgKm5nRm9yPVwibGV0IHRhZyBvZiBmZWF0dXJlcyQgfCBhc3luY1wiXG4gICAgPnt7ICdzdG9yYWdlLicgKyB0YWcgfCB0cmFuc2xhdGUgfX08L2F1aS10YWdcbiAgPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,179 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { SelectModule, coerceAttrBoolean } from '@alauda/ui';
3
+ import { FieldNotAvailablePipe, ObservableInput, PurePipe, ReadonlyFieldDirective, TranslateModule, publishRef, } from '@alauda-fe/common';
4
+ import { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
5
+ import { Component, ChangeDetectionStrategy, inject, Input, Output, EventEmitter, } from '@angular/core';
6
+ import { ReactiveFormsModule } from '@angular/forms';
7
+ import { BaseResourceFormComponent } from 'ng-resource-form-util';
8
+ import { Observable, combineLatest, filter, map, tap } from 'rxjs';
9
+ import { StorageCommonUtilService, } from '../../services/common-util.service';
10
+ import { StorageFeatureTagsComponent } from '../storage-feature-tags/component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "@alauda/ui";
14
+ import * as i3 from "@alauda-fe/common";
15
+ const _c0 = a0 => ({ storageClassOptions: a0 });
16
+ const _c1 = a0 => ({ option: a0 });
17
+ function StorageClassSelectComponent_aui_select_0_aui_option_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelementContainer(0);
19
+ } }
20
+ function StorageClassSelectComponent_aui_select_0_aui_option_2_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelementStart(0, "aui-option", 6);
22
+ i0.ɵɵtemplate(1, StorageClassSelectComponent_aui_select_0_aui_option_2_ng_container_1_Template, 1, 0, "ng-container", 7);
23
+ i0.ɵɵelementEnd();
24
+ } if (rf & 2) {
25
+ const option_r4 = ctx.$implicit;
26
+ i0.ɵɵnextContext(2);
27
+ const storageClassLabel_r5 = i0.ɵɵreference(3);
28
+ i0.ɵɵproperty("value", option_r4.value)("label", storageClassLabel_r5)("labelContext", i0.ɵɵpureFunction1(5, _c1, option_r4));
29
+ i0.ɵɵadvance();
30
+ i0.ɵɵproperty("ngTemplateOutlet", storageClassLabel_r5)("ngTemplateOutletContext", i0.ɵɵpureFunction1(7, _c1, option_r4));
31
+ } }
32
+ function StorageClassSelectComponent_aui_select_0_Template(rf, ctx) { if (rf & 1) {
33
+ const _r1 = i0.ɵɵgetCurrentView();
34
+ i0.ɵɵelementStart(0, "aui-select", 4);
35
+ i0.ɵɵpipe(1, "translate");
36
+ i0.ɵɵlistener("ngModelChange", function StorageClassSelectComponent_aui_select_0_Template_aui_select_ngModelChange_0_listener($event) { const __r2 = i0.ɵɵrestoreView(_r1).ngIf; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onStorageClassChange($event, __r2.storageClassOptions)); });
37
+ i0.ɵɵtemplate(2, StorageClassSelectComponent_aui_select_0_aui_option_2_Template, 2, 9, "aui-option", 5);
38
+ i0.ɵɵelementStart(3, "aui-option-placeholder");
39
+ i0.ɵɵtext(4);
40
+ i0.ɵɵpipe(5, "translate");
41
+ i0.ɵɵelementEnd()();
42
+ } if (rf & 2) {
43
+ const __r2 = ctx.ngIf;
44
+ const ctx_r2 = i0.ɵɵnextContext();
45
+ const storageClassTmpl_r6 = i0.ɵɵreference(5);
46
+ i0.ɵɵproperty("required", ctx_r2.required)("formControl", ctx_r2.form)("clearable", !ctx_r2.required)("placeholder", i0.ɵɵpipeBind1(1, 8, "storage.select_storageclass"))("aclReadonlyField", ctx_r2.isFromSnapshot)("aclReadonlyFieldTemplate", storageClassTmpl_r6);
47
+ i0.ɵɵadvance(2);
48
+ i0.ɵɵproperty("ngForOf", __r2.storageClassOptions);
49
+ i0.ɵɵadvance(2);
50
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 10, "no_data"), " ");
51
+ } }
52
+ function StorageClassSelectComponent_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
53
+ i0.ɵɵelementContainerStart(0);
54
+ i0.ɵɵelementStart(1, "span", 9);
55
+ i0.ɵɵtext(2);
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelement(3, "acl-storage-feature-tags", 10);
58
+ i0.ɵɵelementContainerEnd();
59
+ } if (rf & 2) {
60
+ const option_r7 = i0.ɵɵnextContext().option;
61
+ const ctx_r2 = i0.ɵɵnextContext();
62
+ i0.ɵɵadvance(2);
63
+ i0.ɵɵtextInterpolate(option_r7.key);
64
+ i0.ɵɵadvance();
65
+ i0.ɵɵproperty("provisioner", option_r7.provisioner)("storageClass", option_r7.storageClass)("hasDefault", option_r7.isDefault)("volumeSnapshotClasses", ctx_r2.volumeSnapshotClasses);
66
+ } }
67
+ function StorageClassSelectComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
68
+ i0.ɵɵtemplate(0, StorageClassSelectComponent_ng_template_2_ng_container_0_Template, 4, 5, "ng-container", 8);
69
+ } if (rf & 2) {
70
+ const option_r7 = ctx.option;
71
+ i0.ɵɵnextContext();
72
+ const empty_r8 = i0.ɵɵreference(7);
73
+ i0.ɵɵproperty("ngIf", option_r7)("ngIfElse", empty_r8);
74
+ } }
75
+ function StorageClassSelectComponent_ng_template_4_ng_container_0_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵelementContainer(0);
77
+ } }
78
+ function StorageClassSelectComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
79
+ i0.ɵɵtemplate(0, StorageClassSelectComponent_ng_template_4_ng_container_0_Template, 1, 0, "ng-container", 7);
80
+ i0.ɵɵpipe(1, "async");
81
+ i0.ɵɵpipe(2, "pure");
82
+ } if (rf & 2) {
83
+ const ctx_r2 = i0.ɵɵnextContext();
84
+ const storageClassLabel_r5 = i0.ɵɵreference(3);
85
+ i0.ɵɵproperty("ngTemplateOutlet", storageClassLabel_r5)("ngTemplateOutletContext", i0.ɵɵpureFunction1(8, _c1, i0.ɵɵpipeBind3(2, 4, ctx_r2.form.value, ctx_r2.getStorageClassOption, i0.ɵɵpipeBind1(1, 2, ctx_r2.storageClassOptions$))));
86
+ } }
87
+ function StorageClassSelectComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
88
+ i0.ɵɵtext(0);
89
+ i0.ɵɵpipe(1, "aclFieldNotAvailable");
90
+ } if (rf & 2) {
91
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(1, 1, null));
92
+ } }
93
+ export class StorageClassSelectComponent extends BaseResourceFormComponent {
94
+ constructor() {
95
+ super(...arguments);
96
+ this.selectDefault = true;
97
+ this.storageClassChange = new EventEmitter();
98
+ this.storageCommonUtil = inject(StorageCommonUtilService);
99
+ this.storageClassOptions$ = combineLatest([
100
+ this.storageClasses$.pipe(filter(list => !!list)),
101
+ this.storageCommonUtil.storageDescriptionMapCache.fetch(null),
102
+ ]).pipe(map(([storageClasses, storageDescriptionMaps]) => storageClasses.map(item => this.storageCommonUtil.mapToStorageClassOption(item, storageDescriptionMaps, this.isFromSnapshot))), tap(items => {
103
+ if (this.selectDefault && !this.isFromSnapshot && !this.form.value) {
104
+ const defaultSc = items.find(item => item.isDefault);
105
+ if (defaultSc) {
106
+ this.form.setValue(defaultSc.value);
107
+ }
108
+ }
109
+ this.onStorageClassChange(this.form.value, items);
110
+ }), publishRef());
111
+ this.errorsInDetail = true;
112
+ }
113
+ set required(value) {
114
+ this._required = coerceAttrBoolean(value);
115
+ }
116
+ get required() {
117
+ return this._required;
118
+ }
119
+ createForm() {
120
+ return this.fb.control('');
121
+ }
122
+ getStorageClassOption(value, options) {
123
+ return options?.find(option => option.value === value);
124
+ }
125
+ onStorageClassChange(storageClassName, storageClassOptions) {
126
+ const storageClassOption = this.getStorageClassOption(storageClassName, storageClassOptions);
127
+ this.storageClassChange.emit(storageClassOption);
128
+ }
129
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵStorageClassSelectComponent_BaseFactory; return function StorageClassSelectComponent_Factory(t) { return (ɵStorageClassSelectComponent_BaseFactory || (ɵStorageClassSelectComponent_BaseFactory = i0.ɵɵgetInheritedFactory(StorageClassSelectComponent)))(t || StorageClassSelectComponent); }; })(); }
130
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StorageClassSelectComponent, selectors: [["acl-storageclass-select"]], inputs: { storageClasses: "storageClasses", required: "required", volumeSnapshotClasses: "volumeSnapshotClasses", selectDefault: "selectDefault", isFromSnapshot: "isFromSnapshot" }, outputs: { storageClassChange: "storageClassChange" }, standalone: true, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 8, vars: 5, consts: [["storageClassLabel", ""], ["storageClassTmpl", ""], ["empty", ""], [3, "required", "formControl", "clearable", "placeholder", "aclReadonlyField", "aclReadonlyFieldTemplate", "ngModelChange", 4, "ngIf"], [3, "ngModelChange", "required", "formControl", "clearable", "placeholder", "aclReadonlyField", "aclReadonlyFieldTemplate"], [3, "value", "label", "labelContext", 4, "ngFor", "ngForOf"], [3, "value", "label", "labelContext"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [4, "ngIf", "ngIfElse"], [1, "tw-mr-8"], [3, "provisioner", "storageClass", "hasDefault", "volumeSnapshotClasses"]], template: function StorageClassSelectComponent_Template(rf, ctx) { if (rf & 1) {
131
+ i0.ɵɵtemplate(0, StorageClassSelectComponent_aui_select_0_Template, 6, 12, "aui-select", 3);
132
+ i0.ɵɵpipe(1, "async");
133
+ i0.ɵɵtemplate(2, StorageClassSelectComponent_ng_template_2_Template, 1, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(4, StorageClassSelectComponent_ng_template_4_Template, 3, 10, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(6, StorageClassSelectComponent_ng_template_6_Template, 2, 3, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
134
+ } if (rf & 2) {
135
+ i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction1(3, _c0, i0.ɵɵpipeBind1(1, 1, ctx.storageClassOptions$)));
136
+ } }, dependencies: [AsyncPipe,
137
+ NgIf,
138
+ NgFor,
139
+ NgTemplateOutlet,
140
+ ReactiveFormsModule, i1.NgControlStatus, i1.RequiredValidator, i1.FormControlDirective, SelectModule, i2.SelectComponent, i2.OptionComponent, i2.OptionPlaceholderComponent, PurePipe,
141
+ FieldNotAvailablePipe,
142
+ TranslateModule, i3.TranslatePipe, ReadonlyFieldDirective,
143
+ StorageFeatureTagsComponent], encapsulation: 2, changeDetection: 0 }); }
144
+ }
145
+ __decorate([
146
+ ObservableInput(),
147
+ __metadata("design:type", Observable)
148
+ ], StorageClassSelectComponent.prototype, "storageClasses$", void 0);
149
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StorageClassSelectComponent, [{
150
+ type: Component,
151
+ args: [{ selector: 'acl-storageclass-select', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
152
+ AsyncPipe,
153
+ NgIf,
154
+ NgFor,
155
+ NgTemplateOutlet,
156
+ ReactiveFormsModule,
157
+ SelectModule,
158
+ PurePipe,
159
+ FieldNotAvailablePipe,
160
+ TranslateModule,
161
+ ReadonlyFieldDirective,
162
+ StorageFeatureTagsComponent,
163
+ ], template: "<aui-select\n *ngIf=\"{ storageClassOptions: storageClassOptions$ | async } as _\"\n [required]=\"required\"\n [formControl]=\"form\"\n [clearable]=\"!required\"\n [placeholder]=\"'storage.select_storageclass' | translate\"\n [aclReadonlyField]=\"isFromSnapshot\"\n [aclReadonlyFieldTemplate]=\"storageClassTmpl\"\n (ngModelChange)=\"onStorageClassChange($event, _.storageClassOptions)\"\n>\n <aui-option\n *ngFor=\"let option of _.storageClassOptions\"\n [value]=\"option.value\"\n [label]=\"storageClassLabel\"\n [labelContext]=\"{ option }\"\n >\n <ng-container\n *ngTemplateOutlet=\"storageClassLabel; context: { option }\"\n ></ng-container>\n </aui-option>\n <aui-option-placeholder>\n {{ 'no_data' | translate }}\n </aui-option-placeholder>\n</aui-select>\n\n<ng-template\n #storageClassLabel\n let-option=\"option\"\n>\n <ng-container *ngIf=\"option; else empty\">\n <span class=\"tw-mr-8\">{{ option.key }}</span>\n <acl-storage-feature-tags\n [provisioner]=\"option.provisioner\"\n [storageClass]=\"option.storageClass\"\n [hasDefault]=\"option.isDefault\"\n [volumeSnapshotClasses]=\"volumeSnapshotClasses\"\n ></acl-storage-feature-tags>\n </ng-container>\n</ng-template>\n\n<ng-template #storageClassTmpl>\n <ng-container\n *ngTemplateOutlet=\"\n storageClassLabel;\n context: {\n option:form.value | pure: getStorageClassOption:(storageClassOptions$ | async)\n }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template #empty>{{ null | aclFieldNotAvailable }}</ng-template>\n" }]
164
+ }], null, { storageClasses: [{
165
+ type: Input,
166
+ args: [{ required: true }]
167
+ }], storageClasses$: [], required: [{
168
+ type: Input
169
+ }], volumeSnapshotClasses: [{
170
+ type: Input
171
+ }], selectDefault: [{
172
+ type: Input
173
+ }], isFromSnapshot: [{
174
+ type: Input
175
+ }], storageClassChange: [{
176
+ type: Output
177
+ }] }); })();
178
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(StorageClassSelectComponent, { className: "StorageClassSelectComponent", filePath: "lib/components/storageclass-select/component.ts", lineNumber: 49 }); })();
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zdG9yYWdlL3NyYy9saWIvY29tcG9uZW50cy9zdG9yYWdlY2xhc3Mtc2VsZWN0L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc3RvcmFnZS9zcmMvbGliL2NvbXBvbmVudHMvc3RvcmFnZWNsYXNzLXNlbGVjdC90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsZUFBZSxFQUNmLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLFVBQVUsR0FDWCxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRSxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7O0lDWDVFLHdCQUVnQjs7O0lBUmxCLHFDQUtDO0lBQ0Msd0hBRUM7SUFD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QkFEWCxLQUFLO1lBVU4scUJBQXFCO2tCQURwQixLQUFLO1lBSU4sYUFBYTtrQkFEWixLQUFLO1lBSU4sY0FBYztrQkFEYixLQUFLO1lBSU4sa0JBQWtCO2tCQURqQixNQUFNOztrRkF6QkksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0ckJvb2xlYW4sIFNlbGVjdE1vZHVsZSwgY29lcmNlQXR0ckJvb2xlYW4gfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7XG4gIEZpZWxkTm90QXZhaWxhYmxlUGlwZSxcbiAgT2JzZXJ2YWJsZUlucHV0LFxuICBQdXJlUGlwZSxcbiAgUmVhZG9ubHlGaWVsZERpcmVjdGl2ZSxcbiAgVHJhbnNsYXRlTW9kdWxlLFxuICBwdWJsaXNoUmVmLFxufSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlUmVzb3VyY2VGb3JtQ29tcG9uZW50IH0gZnJvbSAnbmctcmVzb3VyY2UtZm9ybS11dGlsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgU3RvcmFnZUNvbW1vblV0aWxTZXJ2aWNlLFxuICBTdG9yYWdlU2VsZWN0T3B0aW9uLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24tdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VDbGFzcywgVm9sdW1lU25hcHNob3RDbGFzcyB9IGZyb20gJy4uLy4uL3R5cGVzL2s4cyc7XG5pbXBvcnQgeyBTdG9yYWdlRmVhdHVyZVRhZ3NDb21wb25lbnQgfSBmcm9tICcuLi9zdG9yYWdlLWZlYXR1cmUtdGFncy9jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtc3RvcmFnZWNsYXNzLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nSWYsXG4gICAgTmdGb3IsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBQdXJlUGlwZSxcbiAgICBGaWVsZE5vdEF2YWlsYWJsZVBpcGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFJlYWRvbmx5RmllbGREaXJlY3RpdmUsXG4gICAgU3RvcmFnZUZlYXR1cmVUYWdzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTdG9yYWdlQ2xhc3NTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlUmVzb3VyY2VGb3JtQ29tcG9uZW50PHN0cmluZz4ge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBzdG9yYWdlQ2xhc3NlczogU3RvcmFnZUNsYXNzW107XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHN0b3JhZ2VDbGFzc2VzJCE6IE9ic2VydmFibGU8U3RvcmFnZUNsYXNzW10+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2YWx1ZTogQXR0ckJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUF0dHJCb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICB2b2x1bWVTbmFwc2hvdENsYXNzZXM6IFZvbHVtZVNuYXBzaG90Q2xhc3NbXTtcblxuICBASW5wdXQoKVxuICBzZWxlY3REZWZhdWx0ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBpc0Zyb21TbmFwc2hvdDogYm9vbGVhbjtcblxuICBAT3V0cHV0KClcbiAgc3RvcmFnZUNsYXNzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTdG9yYWdlU2VsZWN0T3B0aW9uPigpO1xuXG4gIHN0b3JhZ2VDb21tb25VdGlsID0gaW5qZWN0KFN0b3JhZ2VDb21tb25VdGlsU2VydmljZSk7XG5cbiAgc3RvcmFnZUNsYXNzT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnN0b3JhZ2VDbGFzc2VzJC5waXBlKGZpbHRlcihsaXN0ID0+ICEhbGlzdCkpLFxuICAgIHRoaXMuc3RvcmFnZUNvbW1vblV0aWwuc3RvcmFnZURlc2NyaXB0aW9uTWFwQ2FjaGUuZmV0Y2gobnVsbCksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc3RvcmFnZUNsYXNzZXMsIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcHNdKSA9PlxuICAgICAgc3RvcmFnZUNsYXNzZXMubWFwKGl0ZW0gPT5cbiAgICAgICAgdGhpcy5zdG9yYWdlQ29tbW9uVXRpbC5tYXBUb1N0b3JhZ2VDbGFzc09wdGlvbihcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcHMsXG4gICAgICAgICAgdGhpcy5pc0Zyb21TbmFwc2hvdCxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKSxcbiAgICB0YXAoaXRlbXMgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0RGVmYXVsdCAmJiAhdGhpcy5pc0Zyb21TbmFwc2hvdCAmJiAhdGhpcy5mb3JtLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTYyA9IGl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmlzRGVmYXVsdCk7XG4gICAgICAgIGlmIChkZWZhdWx0U2MpIHtcbiAgICAgICAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGVmYXVsdFNjLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5vblN0b3JhZ2VDbGFzc0NoYW5nZSh0aGlzLmZvcm0udmFsdWUsIGl0ZW1zKTtcbiAgICB9KSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgb3ZlcnJpZGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKCcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGVycm9yc0luRGV0YWlsID0gdHJ1ZTtcblxuICBnZXRTdG9yYWdlQ2xhc3NPcHRpb24odmFsdWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VTZWxlY3RPcHRpb25bXSkge1xuICAgIHJldHVybiBvcHRpb25zPy5maW5kKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcbiAgfVxuXG4gIG9uU3RvcmFnZUNsYXNzQ2hhbmdlKFxuICAgIHN0b3JhZ2VDbGFzc05hbWU6IHN0cmluZyxcbiAgICBzdG9yYWdlQ2xhc3NPcHRpb25zPzogU3RvcmFnZVNlbGVjdE9wdGlvbltdLFxuICApIHtcbiAgICBjb25zdCBzdG9yYWdlQ2xhc3NPcHRpb24gPSB0aGlzLmdldFN0b3JhZ2VDbGFzc09wdGlvbihcbiAgICAgIHN0b3JhZ2VDbGFzc05hbWUsXG4gICAgICBzdG9yYWdlQ2xhc3NPcHRpb25zLFxuICAgICk7XG4gICAgdGhpcy5zdG9yYWdlQ2xhc3NDaGFuZ2UuZW1pdChzdG9yYWdlQ2xhc3NPcHRpb24pO1xuICB9XG59XG4iLCI8YXVpLXNlbGVjdFxuICAqbmdJZj1cInsgc3RvcmFnZUNsYXNzT3B0aW9uczogc3RvcmFnZUNsYXNzT3B0aW9ucyQgfCBhc3luYyB9IGFzIF9cIlxuICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbZm9ybUNvbnRyb2xdPVwiZm9ybVwiXG4gIFtjbGVhcmFibGVdPVwiIXJlcXVpcmVkXCJcbiAgW3BsYWNlaG9sZGVyXT1cIidzdG9yYWdlLnNlbGVjdF9zdG9yYWdlY2xhc3MnIHwgdHJhbnNsYXRlXCJcbiAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNGcm9tU25hcHNob3RcIlxuICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInN0b3JhZ2VDbGFzc1RtcGxcIlxuICAobmdNb2RlbENoYW5nZSk9XCJvblN0b3JhZ2VDbGFzc0NoYW5nZSgkZXZlbnQsIF8uc3RvcmFnZUNsYXNzT3B0aW9ucylcIlxuPlxuICA8YXVpLW9wdGlvblxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgXy5zdG9yYWdlQ2xhc3NPcHRpb25zXCJcbiAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICBbbGFiZWxdPVwic3RvcmFnZUNsYXNzTGFiZWxcIlxuICAgIFtsYWJlbENvbnRleHRdPVwieyBvcHRpb24gfVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInN0b3JhZ2VDbGFzc0xhYmVsOyBjb250ZXh0OiB7IG9wdGlvbiB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvYXVpLW9wdGlvbj5cbiAgPGF1aS1vcHRpb24tcGxhY2Vob2xkZXI+XG4gICAge3sgJ25vX2RhdGEnIHwgdHJhbnNsYXRlIH19XG4gIDwvYXVpLW9wdGlvbi1wbGFjZWhvbGRlcj5cbjwvYXVpLXNlbGVjdD5cblxuPG5nLXRlbXBsYXRlXG4gICNzdG9yYWdlQ2xhc3NMYWJlbFxuICBsZXQtb3B0aW9uPVwib3B0aW9uXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbjsgZWxzZSBlbXB0eVwiPlxuICAgIDxzcGFuIGNsYXNzPVwidHctbXItOFwiPnt7IG9wdGlvbi5rZXkgfX08L3NwYW4+XG4gICAgPGFjbC1zdG9yYWdlLWZlYXR1cmUtdGFnc1xuICAgICAgW3Byb3Zpc2lvbmVyXT1cIm9wdGlvbi5wcm92aXNpb25lclwiXG4gICAgICBbc3RvcmFnZUNsYXNzXT1cIm9wdGlvbi5zdG9yYWdlQ2xhc3NcIlxuICAgICAgW2hhc0RlZmF1bHRdPVwib3B0aW9uLmlzRGVmYXVsdFwiXG4gICAgICBbdm9sdW1lU25hcHNob3RDbGFzc2VzXT1cInZvbHVtZVNuYXBzaG90Q2xhc3Nlc1wiXG4gICAgPjwvYWNsLXN0b3JhZ2UtZmVhdHVyZS10YWdzPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3RvcmFnZUNsYXNzVG1wbD5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBzdG9yYWdlQ2xhc3NMYWJlbDtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgb3B0aW9uOmZvcm0udmFsdWUgfCBwdXJlOiBnZXRTdG9yYWdlQ2xhc3NPcHRpb246KHN0b3JhZ2VDbGFzc09wdGlvbnMkIHwgYXN5bmMpXG4gICAgICB9XG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eT57eyBudWxsIHwgYWNsRmllbGROb3RBdmFpbGFibGUgfX08L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,17 @@
1
+ import { toUnitGi } from '@alauda-fe/common';
2
+ import { Pipe } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class ActualCapacityPipe {
5
+ transform(value, withUnit = true) {
6
+ const capacity = value?.status?.capacity?.storage ||
7
+ value?.spec?.resources?.requests?.storage;
8
+ return withUnit ? capacity : toUnitGi(capacity);
9
+ }
10
+ static { this.ɵfac = function ActualCapacityPipe_Factory(t) { return new (t || ActualCapacityPipe)(); }; }
11
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "rcActualCapacity", type: ActualCapacityPipe, pure: true, standalone: true }); }
12
+ }
13
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActualCapacityPipe, [{
14
+ type: Pipe,
15
+ args: [{ standalone: true, name: 'rcActualCapacity' }]
16
+ }], null, null); })();
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0dWFsLWNhcGFjaXR5LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JhZ2Uvc3JjL2xpYi9waXBlcy9hY3R1YWwtY2FwYWNpdHkucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXlCLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFNBQVMsQ0FBQyxLQUE0QixFQUFFLFFBQVEsR0FBRyxJQUFJO1FBQ3JELE1BQU0sUUFBUSxHQUNaLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU87WUFDaEMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUM1QyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQzttRkFOVSxrQkFBa0I7MEZBQWxCLGtCQUFrQjs7aUZBQWxCLGtCQUFrQjtjQUQ5QixJQUFJO2VBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBlcnNpc3RlbnRWb2x1bWVDbGFpbSwgdG9Vbml0R2kgfSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgbmFtZTogJ3JjQWN0dWFsQ2FwYWNpdHknIH0pXG5leHBvcnQgY2xhc3MgQWN0dWFsQ2FwYWNpdHlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogUGVyc2lzdGVudFZvbHVtZUNsYWltLCB3aXRoVW5pdCA9IHRydWUpIHtcbiAgICBjb25zdCBjYXBhY2l0eSA9XG4gICAgICB2YWx1ZT8uc3RhdHVzPy5jYXBhY2l0eT8uc3RvcmFnZSB8fFxuICAgICAgdmFsdWU/LnNwZWM/LnJlc291cmNlcz8ucmVxdWVzdHM/LnN0b3JhZ2U7XG4gICAgcmV0dXJuIHdpdGhVbml0ID8gY2FwYWNpdHkgOiB0b1VuaXRHaShjYXBhY2l0eSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,163 @@
1
+ import { matchLabelsToString, K8sUtilService, publishRef, RESOURCE_TYPES, K8sApiService, skipError, parse, CacheStore, VolumeModes, AccessModes, } from '@alauda-fe/common';
2
+ import { Injectable } from '@angular/core';
3
+ import { isBoolean } from 'lodash-es';
4
+ import { map, shareReplay } from 'rxjs';
5
+ import { StorageclassFeature } from '../types/commons';
6
+ import { getProvisioner, getProvisionerType, getStorageclassAccessModes, getStorageclassVolumeModes, isDefaultStorageclass, } from '../utils/util';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@alauda-fe/common";
9
+ export class StorageCommonUtilService {
10
+ constructor(k8sUtil, k8sApi) {
11
+ this.k8sUtil = k8sUtil;
12
+ this.k8sApi = k8sApi;
13
+ this.storageDescriptionMapCache = new CacheStore({
14
+ fetcher: () => this.k8sApi
15
+ .getGlobalResourceList({
16
+ type: RESOURCE_TYPES.CONFIG_MAP,
17
+ // 获取第三方存储能力配置,其中 ns 和 label 都固定
18
+ namespace: 'kube-public',
19
+ queryParams: {
20
+ labelSelector: 'features.alauda.io/type=StorageDescription',
21
+ },
22
+ })
23
+ .pipe(map(res => [...res.items].sort((a, b) => +new Date(a.metadata.creationTimestamp) -
24
+ +new Date(b.metadata.creationTimestamp))), map(items => items.map(item => item.data)), skipError([])),
25
+ share: () => shareReplay(1),
26
+ });
27
+ this.isStorageClassFeatureSupported =
28
+ this.isStorageClassFeatureSupported.bind(this);
29
+ }
30
+ getStorageClassFeatures(storageClass) {
31
+ const featuresSet = new Set(this.k8sUtil
32
+ .getAnnotation(storageClass, 'features')
33
+ ?.split(',') || []);
34
+ if (storageClass?.allowVolumeExpansion) {
35
+ featuresSet.add(StorageclassFeature.EXPANSION);
36
+ }
37
+ else {
38
+ featuresSet.delete(StorageclassFeature.EXPANSION);
39
+ }
40
+ return [...featuresSet];
41
+ }
42
+ isStorageClassFeatureSupported(storageclass, feature) {
43
+ return this.getStorageClassFeatures(storageclass).includes(feature);
44
+ }
45
+ mapToStorageClassOption(sc, storageDescriptionMaps, isFromSnapshot) {
46
+ return {
47
+ key: sc.metadata.name,
48
+ value: sc.metadata.name,
49
+ isDefault: isDefaultStorageclass(sc),
50
+ accessModes: this.getStorageclassAccessModes(sc, storageDescriptionMaps, isFromSnapshot) || [],
51
+ features: this.getStorageClassFeatures(sc),
52
+ volumeModes: this.getStorageclassVolumeModes(sc, storageDescriptionMaps),
53
+ provisioner: sc.provisioner,
54
+ storageClass: sc,
55
+ };
56
+ }
57
+ isClusterSnapshotPluginEnabled$(cluster) {
58
+ return this.k8sApi
59
+ .getGlobalResourceList({
60
+ type: RESOURCE_TYPES.MODULE_INFO,
61
+ queryParams: {
62
+ labelSelector: matchLabelsToString({
63
+ [this.k8sUtil.normalizeType('module-type')]: 'plugin',
64
+ [this.k8sUtil.normalizeType('cluster-name')]: cluster,
65
+ [this.k8sUtil.normalizeType('module-name')]: 'snapshot',
66
+ }),
67
+ },
68
+ })
69
+ .pipe(map(r => !!r.items?.[0]), publishRef());
70
+ }
71
+ /**
72
+ * 获取第三方快照能力支持情况,若返回 null 表示未匹配到三方存储
73
+ */
74
+ getThirdPartySnapshotSupported(sc, storageDescriptionMaps) {
75
+ const provisioner = getProvisioner(sc);
76
+ const config = this.findStorageDescriptionMap(storageDescriptionMaps, provisioner);
77
+ // 如果匹配到三方 provisioner 未定义和非法都按 false 处理
78
+ if (config) {
79
+ const snapshot = parse(config)?.snapshot;
80
+ return isBoolean(snapshot) ? snapshot : false;
81
+ }
82
+ return null;
83
+ }
84
+ getProvisionerType(sc, storageDescriptionMaps) {
85
+ const provisioner = getProvisioner(sc);
86
+ const config = this.findStorageDescriptionMap(storageDescriptionMaps, provisioner);
87
+ // 解析第三方存储类型
88
+ if (config) {
89
+ const type = parse(config).type;
90
+ if (!type) {
91
+ return 'unknown';
92
+ }
93
+ const result = this.filterByAllowedValues([type], ['Filesystem', 'Block'])[0];
94
+ return result
95
+ ? {
96
+ Filesystem: 'file_storage',
97
+ Block: 'block_storage',
98
+ }[result]
99
+ : 'unknown';
100
+ }
101
+ return getProvisionerType(provisioner);
102
+ }
103
+ getStorageclassAccessModes(sc, storageDescriptionMaps, isFromSnapshot) {
104
+ const provisioner = getProvisioner(sc);
105
+ const config = this.findStorageDescriptionMap(storageDescriptionMaps, provisioner);
106
+ // 解析第三方 AccessModes
107
+ if (config) {
108
+ return this.getThirdPartyStorageclassAccessModes(parse(config));
109
+ }
110
+ return getStorageclassAccessModes(provisioner, isFromSnapshot);
111
+ }
112
+ getStorageclassVolumeModes(sc, storageDescriptionMaps) {
113
+ const provisioner = getProvisioner(sc);
114
+ const config = this.findStorageDescriptionMap(storageDescriptionMaps, provisioner);
115
+ // 解析第三方 VolumeModes
116
+ if (config) {
117
+ return this.getThirdPartyStorageclassVolumeModes(parse(config));
118
+ }
119
+ return getStorageclassVolumeModes(provisioner);
120
+ }
121
+ isAccessModeDisabled(accessMode, storageClassOption) {
122
+ return storageClassOption
123
+ ? !storageClassOption.accessModes.includes(accessMode)
124
+ : false;
125
+ }
126
+ isVolumeModeDisabled(volumeMode, storageClassOption) {
127
+ return storageClassOption
128
+ ? !storageClassOption.volumeModes.includes(volumeMode)
129
+ : false;
130
+ }
131
+ // 获取首个匹配 provisioner 的 storageDescriptionConfig
132
+ findStorageDescriptionMap(configs, provisioner) {
133
+ const storageDescriptionMap = configs?.find(config => !!config[provisioner]);
134
+ return storageDescriptionMap?.[provisioner];
135
+ }
136
+ getThirdPartyStorageclassAccessModes(storageDescription) {
137
+ return this.filterByAllowedValues(storageDescription?.accessModes ?? [], AccessModes);
138
+ }
139
+ getThirdPartyStorageclassVolumeModes(storageDescription) {
140
+ return this.filterByAllowedValues(storageDescription?.volumeMode ?? [], VolumeModes);
141
+ }
142
+ /**
143
+ * 解析 ConfigMap 中的 AccessModes 和 VolumeModes, 要求 cm 中的配置不区分大小,满足 AccessModes 或 VolumeModes 中定义即可
144
+ *
145
+ * @example
146
+ * ```
147
+ * const result = filterByAllowedValues(['ReadOnlyMany', 'Invalid'],['ReadOnlyMany', 'ReadWriteOnce', 'ReadWriteMany'])
148
+ * console.log(result) // ['ReadOnlyMany']
149
+ * ```
150
+ */
151
+ filterByAllowedValues(inputArray, allowedValues) {
152
+ return allowedValues.filter(allowedValue => inputArray.some(input => input.trim().toLowerCase() === allowedValue.trim().toLowerCase()));
153
+ }
154
+ static { this.ɵfac = function StorageCommonUtilService_Factory(t) { return new (t || StorageCommonUtilService)(i0.ɵɵinject(i1.K8sUtilService), i0.ɵɵinject(i1.K8sApiService)); }; }
155
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: StorageCommonUtilService, factory: StorageCommonUtilService.ɵfac, providedIn: 'root' }); }
156
+ }
157
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StorageCommonUtilService, [{
158
+ type: Injectable,
159
+ args: [{
160
+ providedIn: 'root',
161
+ }]
162
+ }], () => [{ type: i1.K8sUtilService }, { type: i1.K8sApiService }], null); })();
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc3RvcmFnZS9zcmMvbGliL3NlcnZpY2VzL2NvbW1vbi11dGlsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLG1CQUFtQixFQUNuQixjQUFjLEVBRWQsVUFBVSxFQUNWLGNBQWMsRUFDZCxhQUFhLEVBRWIsU0FBUyxFQUVULEtBQUssRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7QUFFM0UsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixxQkFBcUIsR0FDdEIsTUFBTSxlQUFlLENBQUM7OztBQXVCdkIsTUFBTSxPQUFPLHdCQUF3QjtJQTBCbkMsWUFDbUIsT0FBdUIsRUFDdkIsTUFBcUI7UUFEckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQTNCL0IsK0JBQTBCLEdBQUcsSUFBSSxVQUFVLENBQUM7WUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUNaLElBQUksQ0FBQyxNQUFNO2lCQUNSLHFCQUFxQixDQUFZO2dCQUNoQyxJQUFJLEVBQUUsY0FBYyxDQUFDLFVBQVU7Z0JBQy9CLGdDQUFnQztnQkFDaEMsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLFdBQVcsRUFBRTtvQkFDWCxhQUFhLEVBQUUsNENBQTRDO2lCQUM1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LENBQUMsRUFBRSxDQUNOLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQ25FLENBQ0YsQ0FBQztJQUNKLENBQUM7eUZBOVBVLHdCQUF3Qjt1RUFBeEIsd0JBQXdCLFdBQXhCLHdCQUF3QixtQkFGdkIsTUFBTTs7aUZBRVAsd0JBQXdCO2NBSHBDLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjY2Vzc01vZGUsXG4gIFZvbHVtZU1vZGUsXG4gIG1hdGNoTGFiZWxzVG9TdHJpbmcsXG4gIEs4c1V0aWxTZXJ2aWNlLFxuICBNb2R1bGVJbmZvLFxuICBwdWJsaXNoUmVmLFxuICBSRVNPVVJDRV9UWVBFUyxcbiAgSzhzQXBpU2VydmljZSxcbiAgQ29uZmlnTWFwLFxuICBza2lwRXJyb3IsXG4gIFN0cmluZ01hcCxcbiAgcGFyc2UsXG4gIENhY2hlU3RvcmUsXG4gIFZvbHVtZU1vZGVzLFxuICBBY2Nlc3NNb2Rlcyxcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3RvcmFnZWNsYXNzRmVhdHVyZSwgU3RvcmFnZVByb3Zpc2lvbmVyIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9ucyc7XG5pbXBvcnQgeyBDb21tb25TdG9yYWdlQ2xhc3MsIFN0b3JhZ2VDbGFzcyB9IGZyb20gJy4uL3R5cGVzL2s4cyc7XG5pbXBvcnQge1xuICBnZXRQcm92aXNpb25lcixcbiAgZ2V0UHJvdmlzaW9uZXJUeXBlLFxuICBnZXRTdG9yYWdlY2xhc3NBY2Nlc3NNb2RlcyxcbiAgZ2V0U3RvcmFnZWNsYXNzVm9sdW1lTW9kZXMsXG4gIGlzRGVmYXVsdFN0b3JhZ2VjbGFzcyxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbCc7XG5cbmludGVyZmFjZSBTdG9yYWdlRGVzY3JpcHRpb24ge1xuICB0eXBlOiBWb2x1bWVNb2RlO1xuICBhY2Nlc3NNb2RlczogQWNjZXNzTW9kZVtdO1xuICB2b2x1bWVNb2RlOiBWb2x1bWVNb2RlW107XG4gIHNuYXBzaG90PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlU2VsZWN0T3B0aW9uIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGlzRGVmYXVsdDogYm9vbGVhbjtcbiAgYWNjZXNzTW9kZXM6IEFjY2Vzc01vZGVbXTtcbiAgZmVhdHVyZXM6IFN0b3JhZ2VjbGFzc0ZlYXR1cmVbXTtcbiAgdm9sdW1lTW9kZXM6IFZvbHVtZU1vZGVbXTtcbiAgcHJvdmlzaW9uZXI6IFN0b3JhZ2VQcm92aXNpb25lcjtcbiAgc3RvcmFnZUNsYXNzOiBTdG9yYWdlQ2xhc3M7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTdG9yYWdlQ29tbW9uVXRpbFNlcnZpY2Uge1xuICByZWFkb25seSBzdG9yYWdlRGVzY3JpcHRpb25NYXBDYWNoZSA9IG5ldyBDYWNoZVN0b3JlKHtcbiAgICBmZXRjaGVyOiAoKSA9PlxuICAgICAgdGhpcy5rOHNBcGlcbiAgICAgICAgLmdldEdsb2JhbFJlc291cmNlTGlzdDxDb25maWdNYXA+KHtcbiAgICAgICAgICB0eXBlOiBSRVNPVVJDRV9UWVBFUy5DT05GSUdfTUFQLFxuICAgICAgICAgIC8vIOiOt+WPluesrOS4ieaWueWtmOWCqOiDveWKm+mFjee9ru+8jOWFtuS4rSBucyDlkowgbGFiZWwg6YO95Zu65a6aXG4gICAgICAgICAgbmFtZXNwYWNlOiAna3ViZS1wdWJsaWMnLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICBsYWJlbFNlbGVjdG9yOiAnZmVhdHVyZXMuYWxhdWRhLmlvL3R5cGU9U3RvcmFnZURlc2NyaXB0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+XG4gICAgICAgICAgICBbLi4ucmVzLml0ZW1zXS5zb3J0KFxuICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICArbmV3IERhdGUoYS5tZXRhZGF0YS5jcmVhdGlvblRpbWVzdGFtcCkgLVxuICAgICAgICAgICAgICAgICtuZXcgRGF0ZShiLm1ldGFkYXRhLmNyZWF0aW9uVGltZXN0YW1wKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXAoaXRlbXMgPT4gaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKSksXG4gICAgICAgICAgc2tpcEVycm9yKFtdIGFzIFN0cmluZ01hcFtdKSxcbiAgICAgICAgKSxcbiAgICBzaGFyZTogKCkgPT4gc2hhcmVSZXBsYXkoMSksXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgazhzVXRpbDogSzhzVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNBcGk6IEs4c0FwaVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuaXNTdG9yYWdlQ2xhc3NGZWF0dXJlU3VwcG9ydGVkID1cbiAgICAgIHRoaXMuaXNTdG9yYWdlQ2xhc3NGZWF0dXJlU3VwcG9ydGVkLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXRTdG9yYWdlQ2xhc3NGZWF0dXJlcyhzdG9yYWdlQ2xhc3M6IFN0b3JhZ2VDbGFzcykge1xuICAgIGNvbnN0IGZlYXR1cmVzU2V0ID0gbmV3IFNldChcbiAgICAgICh0aGlzLms4c1V0aWxcbiAgICAgICAgLmdldEFubm90YXRpb24oc3RvcmFnZUNsYXNzLCAnZmVhdHVyZXMnKVxuICAgICAgICA/LnNwbGl0KCcsJykgYXMgU3RvcmFnZWNsYXNzRmVhdHVyZVtdKSB8fCBbXSxcbiAgICApO1xuICAgIGlmIChzdG9yYWdlQ2xhc3M/LmFsbG93Vm9sdW1lRXhwYW5zaW9uKSB7XG4gICAgICBmZWF0dXJlc1NldC5hZGQoU3RvcmFnZWNsYXNzRmVhdHVyZS5FWFBBTlNJT04pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmZWF0dXJlc1NldC5kZWxldGUoU3RvcmFnZWNsYXNzRmVhdHVyZS5FWFBBTlNJT04pO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmZlYXR1cmVzU2V0XTtcbiAgfVxuXG4gIGlzU3RvcmFnZUNsYXNzRmVhdHVyZVN1cHBvcnRlZChcbiAgICBzdG9yYWdlY2xhc3M6IFN0b3JhZ2VDbGFzcyxcbiAgICBmZWF0dXJlOiBTdG9yYWdlY2xhc3NGZWF0dXJlLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdG9yYWdlQ2xhc3NGZWF0dXJlcyhzdG9yYWdlY2xhc3MpLmluY2x1ZGVzKGZlYXR1cmUpO1xuICB9XG5cbiAgbWFwVG9TdG9yYWdlQ2xhc3NPcHRpb24oXG4gICAgc2M6IFN0b3JhZ2VDbGFzcyxcbiAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzPzogU3RyaW5nTWFwW10sXG4gICAgaXNGcm9tU25hcHNob3Q/OiBib29sZWFuLFxuICApOiBTdG9yYWdlU2VsZWN0T3B0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBzYy5tZXRhZGF0YS5uYW1lLFxuICAgICAgdmFsdWU6IHNjLm1ldGFkYXRhLm5hbWUsXG4gICAgICBpc0RlZmF1bHQ6IGlzRGVmYXVsdFN0b3JhZ2VjbGFzcyhzYyksXG4gICAgICBhY2Nlc3NNb2RlczpcbiAgICAgICAgdGhpcy5nZXRTdG9yYWdlY2xhc3NBY2Nlc3NNb2RlcyhcbiAgICAgICAgICBzYyxcbiAgICAgICAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzLFxuICAgICAgICAgIGlzRnJvbVNuYXBzaG90LFxuICAgICAgICApIHx8IFtdLFxuICAgICAgZmVhdHVyZXM6IHRoaXMuZ2V0U3RvcmFnZUNsYXNzRmVhdHVyZXMoc2MpLFxuICAgICAgdm9sdW1lTW9kZXM6IHRoaXMuZ2V0U3RvcmFnZWNsYXNzVm9sdW1lTW9kZXMoc2MsIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcHMpLFxuICAgICAgcHJvdmlzaW9uZXI6IHNjLnByb3Zpc2lvbmVyLFxuICAgICAgc3RvcmFnZUNsYXNzOiBzYyxcbiAgICB9O1xuICB9XG5cbiAgaXNDbHVzdGVyU25hcHNob3RQbHVnaW5FbmFibGVkJChjbHVzdGVyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5rOHNBcGlcbiAgICAgIC5nZXRHbG9iYWxSZXNvdXJjZUxpc3Q8TW9kdWxlSW5mbz4oe1xuICAgICAgICB0eXBlOiBSRVNPVVJDRV9UWVBFUy5NT0RVTEVfSU5GTyxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICBsYWJlbFNlbGVjdG9yOiBtYXRjaExhYmVsc1RvU3RyaW5nKHtcbiAgICAgICAgICAgIFt0aGlzLms4c1V0aWwubm9ybWFsaXplVHlwZSgnbW9kdWxlLXR5cGUnKV06ICdwbHVnaW4nLFxuICAgICAgICAgICAgW3RoaXMuazhzVXRpbC5ub3JtYWxpemVUeXBlKCdjbHVzdGVyLW5hbWUnKV06IGNsdXN0ZXIsXG4gICAgICAgICAgICBbdGhpcy5rOHNVdGlsLm5vcm1hbGl6ZVR5cGUoJ21vZHVsZS1uYW1lJyldOiAnc25hcHNob3QnLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAociA9PiAhIXIuaXRlbXM/LlswXSksXG4gICAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W56ys5LiJ5pa55b+r54Wn6IO95Yqb5pSv5oyB5oOF5Ya177yM6Iul6L+U5ZueIG51bGwg6KGo56S65pyq5Yy56YWN5Yiw5LiJ5pa55a2Y5YKoXG4gICAqL1xuICBnZXRUaGlyZFBhcnR5U25hcHNob3RTdXBwb3J0ZWQoXG4gICAgc2M6IENvbW1vblN0b3JhZ2VDbGFzcyxcbiAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzOiBTdHJpbmdNYXBbXSxcbiAgKTogYm9vbGVhbiB8IG51bGwge1xuICAgIGNvbnN0IHByb3Zpc2lvbmVyID0gZ2V0UHJvdmlzaW9uZXIoc2MpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZmluZFN0b3JhZ2VEZXNjcmlwdGlvbk1hcChcbiAgICAgIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcHMsXG4gICAgICBwcm92aXNpb25lcixcbiAgICApO1xuXG4gICAgLy8g5aaC5p6c5Yy56YWN5Yiw5LiJ5pa5IHByb3Zpc2lvbmVyIOacquWumuS5ieWSjOmdnuazlemDveaMiSBmYWxzZSDlpITnkIZcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IHBhcnNlPFN0b3JhZ2VEZXNjcmlwdGlvbj4oY29uZmlnKT8uc25hcHNob3Q7XG4gICAgICByZXR1cm4gaXNCb29sZWFuKHNuYXBzaG90KSA/IHNuYXBzaG90IDogZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRQcm92aXNpb25lclR5cGUoXG4gICAgc2M6IENvbW1vblN0b3JhZ2VDbGFzcyxcbiAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzOiBTdHJpbmdNYXBbXSxcbiAgKSB7XG4gICAgY29uc3QgcHJvdmlzaW9uZXIgPSBnZXRQcm92aXNpb25lcihzYyk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5maW5kU3RvcmFnZURlc2NyaXB0aW9uTWFwKFxuICAgICAgc3RvcmFnZURlc2NyaXB0aW9uTWFwcyxcbiAgICAgIHByb3Zpc2lvbmVyLFxuICAgICk7XG5cbiAgICAvLyDop6PmnpDnrKzkuInmlrnlrZjlgqjnsbvlnotcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zdCB0eXBlID0gcGFyc2U8U3RvcmFnZURlc2NyaXB0aW9uPihjb25maWcpLnR5cGU7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maWx0ZXJCeUFsbG93ZWRWYWx1ZXM8Vm9sdW1lTW9kZT4oXG4gICAgICAgIFt0eXBlXSxcbiAgICAgICAgWydGaWxlc3lzdGVtJywgJ0Jsb2NrJ10sXG4gICAgICApWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIEZpbGVzeXN0ZW06ICdmaWxlX3N0b3JhZ2UnLFxuICAgICAgICAgICAgQmxvY2s6ICdibG9ja19zdG9yYWdlJyxcbiAgICAgICAgICB9W3Jlc3VsdF1cbiAgICAgICAgOiAndW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFByb3Zpc2lvbmVyVHlwZShwcm92aXNpb25lcik7XG4gIH1cblxuICBnZXRTdG9yYWdlY2xhc3NBY2Nlc3NNb2RlcyhcbiAgICBzYzogQ29tbW9uU3RvcmFnZUNsYXNzLFxuICAgIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcHM6IFN0cmluZ01hcFtdLFxuICAgIGlzRnJvbVNuYXBzaG90OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCBwcm92aXNpb25lciA9IGdldFByb3Zpc2lvbmVyKHNjKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmZpbmRTdG9yYWdlRGVzY3JpcHRpb25NYXAoXG4gICAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzLFxuICAgICAgcHJvdmlzaW9uZXIsXG4gICAgKTtcblxuICAgIC8vIOino+aekOesrOS4ieaWuSBBY2Nlc3NNb2Rlc1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRoaXJkUGFydHlTdG9yYWdlY2xhc3NBY2Nlc3NNb2RlcyhcbiAgICAgICAgcGFyc2U8U3RvcmFnZURlc2NyaXB0aW9uPihjb25maWcpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3JhZ2VjbGFzc0FjY2Vzc01vZGVzKHByb3Zpc2lvbmVyLCBpc0Zyb21TbmFwc2hvdCk7XG4gIH1cblxuICBnZXRTdG9yYWdlY2xhc3NWb2x1bWVNb2RlcyhcbiAgICBzYzogQ29tbW9uU3RvcmFnZUNsYXNzLFxuICAgIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcHM6IFN0cmluZ01hcFtdLFxuICApIHtcbiAgICBjb25zdCBwcm92aXNpb25lciA9IGdldFByb3Zpc2lvbmVyKHNjKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmZpbmRTdG9yYWdlRGVzY3JpcHRpb25NYXAoXG4gICAgICBzdG9yYWdlRGVzY3JpcHRpb25NYXBzLFxuICAgICAgcHJvdmlzaW9uZXIsXG4gICAgKTtcblxuICAgIC8vIOino+aekOesrOS4ieaWuSBWb2x1bWVNb2Rlc1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRoaXJkUGFydHlTdG9yYWdlY2xhc3NWb2x1bWVNb2RlcyhcbiAgICAgICAgcGFyc2U8U3RvcmFnZURlc2NyaXB0aW9uPihjb25maWcpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3JhZ2VjbGFzc1ZvbHVtZU1vZGVzKHByb3Zpc2lvbmVyKTtcbiAgfVxuXG4gIGlzQWNjZXNzTW9kZURpc2FibGVkKFxuICAgIGFjY2Vzc01vZGU6IEFjY2Vzc01vZGUsXG4gICAgc3RvcmFnZUNsYXNzT3B0aW9uOiBTdG9yYWdlU2VsZWN0T3B0aW9uLFxuICApIHtcbiAgICByZXR1cm4gc3RvcmFnZUNsYXNzT3B0aW9uXG4gICAgICA/ICFzdG9yYWdlQ2xhc3NPcHRpb24uYWNjZXNzTW9kZXMuaW5jbHVkZXMoYWNjZXNzTW9kZSlcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBpc1ZvbHVtZU1vZGVEaXNhYmxlZChcbiAgICB2b2x1bWVNb2RlOiBWb2x1bWVNb2RlLFxuICAgIHN0b3JhZ2VDbGFzc09wdGlvbjogU3RvcmFnZVNlbGVjdE9wdGlvbixcbiAgKSB7XG4gICAgcmV0dXJuIHN0b3JhZ2VDbGFzc09wdGlvblxuICAgICAgPyAhc3RvcmFnZUNsYXNzT3B0aW9uLnZvbHVtZU1vZGVzLmluY2x1ZGVzKHZvbHVtZU1vZGUpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgLy8g6I635Y+W6aaW5Liq5Yy56YWNIHByb3Zpc2lvbmVyIOeahCBzdG9yYWdlRGVzY3JpcHRpb25Db25maWdcbiAgcHJpdmF0ZSBmaW5kU3RvcmFnZURlc2NyaXB0aW9uTWFwKFxuICAgIGNvbmZpZ3M6IFN0cmluZ01hcFtdLFxuICAgIHByb3Zpc2lvbmVyOiBTdG9yYWdlUHJvdmlzaW9uZXIsXG4gICkge1xuICAgIGNvbnN0IHN0b3JhZ2VEZXNjcmlwdGlvbk1hcCA9IGNvbmZpZ3M/LmZpbmQoXG4gICAgICBjb25maWcgPT4gISFjb25maWdbcHJvdmlzaW9uZXJdLFxuICAgICk7XG4gICAgcmV0dXJuIHN0b3JhZ2VEZXNjcmlwdGlvbk1hcD8uW3Byb3Zpc2lvbmVyXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGhpcmRQYXJ0eVN0b3JhZ2VjbGFzc0FjY2Vzc01vZGVzKFxuICAgIHN0b3JhZ2VEZXNjcmlwdGlvbjogU3RvcmFnZURlc2NyaXB0aW9uLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUFsbG93ZWRWYWx1ZXM8QWNjZXNzTW9kZT4oXG4gICAgICBzdG9yYWdlRGVzY3JpcHRpb24/LmFjY2Vzc01vZGVzID8/IFtdLFxuICAgICAgQWNjZXNzTW9kZXMsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGhpcmRQYXJ0eVN0b3JhZ2VjbGFzc1ZvbHVtZU1vZGVzKFxuICAgIHN0b3JhZ2VEZXNjcmlwdGlvbjogU3RvcmFnZURlc2NyaXB0aW9uLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUFsbG93ZWRWYWx1ZXM8Vm9sdW1lTW9kZT4oXG4gICAgICBzdG9yYWdlRGVzY3JpcHRpb24/LnZvbHVtZU1vZGUgPz8gW10sXG4gICAgICBWb2x1bWVNb2RlcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOino+aekCBDb25maWdNYXAg5Lit55qEIEFjY2Vzc01vZGVzIOWSjCBWb2x1bWVNb2Rlcywg6KaB5rGCIGNtIOS4reeahOmFjee9ruS4jeWMuuWIhuWkp+Wwj++8jOa7oei2syBBY2Nlc3NNb2RlcyDmiJYgVm9sdW1lTW9kZXMg5Lit5a6a5LmJ5Y2z5Y+vXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBjb25zdCByZXN1bHQgPSBmaWx0ZXJCeUFsbG93ZWRWYWx1ZXMoWydSZWFkT25seU1hbnknLCAnSW52YWxpZCddLFsnUmVhZE9ubHlNYW55JywgJ1JlYWRXcml0ZU9uY2UnLCAnUmVhZFdyaXRlTWFueSddKVxuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQpIC8vIFsnUmVhZE9ubHlNYW55J11cbiAgICogYGBgXG4gICAqL1xuICBwcml2YXRlIGZpbHRlckJ5QWxsb3dlZFZhbHVlczxUIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpbnB1dEFycmF5OiBUW10sXG4gICAgYWxsb3dlZFZhbHVlczogVFtdLFxuICApIHtcbiAgICByZXR1cm4gYWxsb3dlZFZhbHVlcy5maWx0ZXIoYWxsb3dlZFZhbHVlID0+XG4gICAgICBpbnB1dEFycmF5LnNvbWUoXG4gICAgICAgIGlucHV0ID0+XG4gICAgICAgICAgaW5wdXQudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IGFsbG93ZWRWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuIl19