@alauda-fe/network 1.0.0-beta.0

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 (46) hide show
  1. package/esm2022/alauda-fe-network.mjs +5 -0
  2. package/esm2022/index.mjs +19 -0
  3. package/esm2022/lib/components/certificate-status/component.mjs +37 -0
  4. package/esm2022/lib/components/fixed-ip/component.mjs +503 -0
  5. package/esm2022/lib/components/loadbalancer-spec-form/component.mjs +251 -0
  6. package/esm2022/lib/components/service-annotations-form/annotations.component.mjs +681 -0
  7. package/esm2022/lib/components/service-annotations-form-item/annotations.component.mjs +106 -0
  8. package/esm2022/lib/components/service-form/component.mjs +307 -0
  9. package/esm2022/lib/components/service-form/fieldset/component.mjs +407 -0
  10. package/esm2022/lib/directives/subnet-validator.directive.mjs +111 -0
  11. package/esm2022/lib/services/alb-api.service.mjs +48 -0
  12. package/esm2022/lib/services/certificate-api.service.mjs +111 -0
  13. package/esm2022/lib/services/network-util.service.mjs +116 -0
  14. package/esm2022/lib/types/alb-exports.mjs +14 -0
  15. package/esm2022/lib/types/k8s-exports.mjs +13 -0
  16. package/esm2022/lib/types/resource-definition.mjs +16 -0
  17. package/esm2022/lib/utils/alb-exports.mjs +108 -0
  18. package/esm2022/lib/utils/alb-internals.mjs +2 -0
  19. package/esm2022/lib/utils/cidr-exports.mjs +359 -0
  20. package/esm2022/lib/utils/cluster-exports.mjs +18 -0
  21. package/esm2022/lib/utils/service-exports.mjs +58 -0
  22. package/esm2022/lib/utils/service-internals.mjs +7 -0
  23. package/esm2022/lib/utils/subnet-exports.mjs +18 -0
  24. package/index.d.ts +18 -0
  25. package/lib/components/certificate-status/component.d.ts +17 -0
  26. package/lib/components/fixed-ip/component.d.ts +67 -0
  27. package/lib/components/loadbalancer-spec-form/component.d.ts +34 -0
  28. package/lib/components/service-annotations-form/annotations.component.d.ts +74 -0
  29. package/lib/components/service-annotations-form-item/annotations.component.d.ts +14 -0
  30. package/lib/components/service-form/component.d.ts +56 -0
  31. package/lib/components/service-form/fieldset/component.d.ts +46 -0
  32. package/lib/directives/subnet-validator.directive.d.ts +34 -0
  33. package/lib/services/alb-api.service.d.ts +16 -0
  34. package/lib/services/certificate-api.service.d.ts +38 -0
  35. package/lib/services/network-util.service.d.ts +21 -0
  36. package/lib/types/alb-exports.d.ts +29 -0
  37. package/lib/types/k8s-exports.d.ts +130 -0
  38. package/lib/types/resource-definition.d.ts +25 -0
  39. package/lib/utils/alb-exports.d.ts +16 -0
  40. package/lib/utils/alb-internals.d.ts +10 -0
  41. package/lib/utils/cidr-exports.d.ts +85 -0
  42. package/lib/utils/cluster-exports.d.ts +14 -0
  43. package/lib/utils/service-exports.d.ts +18 -0
  44. package/lib/utils/service-internals.d.ts +2 -0
  45. package/lib/utils/subnet-exports.d.ts +20 -0
  46. package/package.json +31 -0
@@ -0,0 +1,48 @@
1
+ import { API_GATEWAY, K8sSharedUtilService, } from '@alauda-fe/common';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Injectable } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ import * as i2 from "@alauda-fe/common";
7
+ export class AlbApiService {
8
+ constructor(http, k8sUtil) {
9
+ this.http = http;
10
+ this.k8sUtil = k8sUtil;
11
+ }
12
+ getAlbListByProject({ project, cluster }, queryParams) {
13
+ return this.http.get(`${API_GATEWAY}/acp/v1/alb/project/${project}/${cluster}/alb2`, {
14
+ params: queryParams,
15
+ });
16
+ }
17
+ v1ToV2Beta1(alb, hr) {
18
+ return (alb && {
19
+ ...alb,
20
+ spec: {
21
+ type: 'nginx',
22
+ address: alb.spec.address,
23
+ config: {
24
+ vip: {
25
+ enableLbSvc: false,
26
+ },
27
+ displayName: this.k8sUtil.getDisplayName(alb),
28
+ networkMode: 'host',
29
+ enablePortProject: this.k8sUtil.getLabel(alb, 'role') === 'port',
30
+ portProjects: hr?.spec.values?.portProjects
31
+ ? hr.spec.values.portProjects
32
+ : null,
33
+ nodeSelector: hr?.spec.values.nodeSelector,
34
+ projects: this.k8sUtil.getProjectNames(alb),
35
+ replicas: hr?.spec.values.replicas,
36
+ resources: hr?.spec.values.resources,
37
+ },
38
+ },
39
+ });
40
+ }
41
+ static { this.ɵfac = function AlbApiService_Factory(t) { return new (t || AlbApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.K8sSharedUtilService)); }; }
42
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AlbApiService, factory: AlbApiService.ɵfac, providedIn: 'root' }); }
43
+ }
44
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AlbApiService, [{
45
+ type: Injectable,
46
+ args: [{ providedIn: 'root' }]
47
+ }], function () { return [{ type: i1.HttpClient }, { type: i2.K8sSharedUtilService }]; }, null); })();
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvc2VydmljZXMvYWxiLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBRVgsb0JBQW9CLEdBR3JCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFLM0MsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFDbUIsSUFBZ0IsRUFDaEIsT0FBNkI7UUFEN0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFzQjtJQUM3QyxDQUFDO0lBRUosbUJBQW1CLENBQ2pCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBd0MsRUFDMUQsV0FBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxXQUFXLHVCQUF1QixPQUFPLElBQUksT0FBTyxPQUFPLEVBQzlEO1lBQ0UsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFpQixFQUFFLEVBQWdCO1FBQzdDLE9BQU8sQ0FDTCxHQUFHLElBQUk7WUFDTCxHQUFHLEdBQUc7WUFDTixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFDekIsTUFBTSxFQUFFO29CQUNOLEdBQUcsRUFBRTt3QkFDSCxXQUFXLEVBQUUsS0FBSztxQkFDbkI7b0JBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztvQkFDN0MsV0FBVyxFQUFFLE1BQU07b0JBQ25CLGlCQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNO29CQUNoRSxZQUFZLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWTt3QkFDekMsQ0FBQyxDQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQXVCO3dCQUN6QyxDQUFDLENBQUMsSUFBSTtvQkFDUixZQUFZLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBeUI7b0JBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7b0JBQzNDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFrQjtvQkFDNUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7aUJBQ3JDO2FBQ0Y7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDOzhFQTNDVSxhQUFhO3VFQUFiLGFBQWEsV0FBYixhQUFhLG1CQURBLE1BQU07O3VGQUNuQixhQUFhO2NBRHpCLFVBQVU7ZUFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElfR0FURVdBWSxcbiAgSGVsbVJlcXVlc3QsXG4gIEs4c1NoYXJlZFV0aWxTZXJ2aWNlLFxuICBLdWJlcm5ldGVzUmVzb3VyY2VMaXN0LFxuICBTdHJpbmdNYXAsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFMQjIsIExvYWRCYWxhbmNlciB9IGZyb20gJy4uL3R5cGVzL2s4cy1leHBvcnRzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbGJBcGlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgazhzVXRpbDogSzhzU2hhcmVkVXRpbFNlcnZpY2UsXG4gICkge31cblxuICBnZXRBbGJMaXN0QnlQcm9qZWN0KFxuICAgIHsgcHJvamVjdCwgY2x1c3RlciB9OiB7IHByb2plY3Q6IHN0cmluZzsgY2x1c3Rlcjogc3RyaW5nIH0sXG4gICAgcXVlcnlQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PExvYWRCYWxhbmNlcj4+KFxuICAgICAgYCR7QVBJX0dBVEVXQVl9L2FjcC92MS9hbGIvcHJvamVjdC8ke3Byb2plY3R9LyR7Y2x1c3Rlcn0vYWxiMmAsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogcXVlcnlQYXJhbXMsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICB2MVRvVjJCZXRhMShhbGI6IExvYWRCYWxhbmNlciwgaHI/OiBIZWxtUmVxdWVzdCk6IEFMQjIge1xuICAgIHJldHVybiAoXG4gICAgICBhbGIgJiYge1xuICAgICAgICAuLi5hbGIsXG4gICAgICAgIHNwZWM6IHtcbiAgICAgICAgICB0eXBlOiAnbmdpbngnLFxuICAgICAgICAgIGFkZHJlc3M6IGFsYi5zcGVjLmFkZHJlc3MsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICB2aXA6IHtcbiAgICAgICAgICAgICAgZW5hYmxlTGJTdmM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLms4c1V0aWwuZ2V0RGlzcGxheU5hbWUoYWxiKSxcbiAgICAgICAgICAgIG5ldHdvcmtNb2RlOiAnaG9zdCcsXG4gICAgICAgICAgICBlbmFibGVQb3J0UHJvamVjdDogdGhpcy5rOHNVdGlsLmdldExhYmVsKGFsYiwgJ3JvbGUnKSA9PT0gJ3BvcnQnLFxuICAgICAgICAgICAgcG9ydFByb2plY3RzOiBocj8uc3BlYy52YWx1ZXM/LnBvcnRQcm9qZWN0c1xuICAgICAgICAgICAgICA/IChoci5zcGVjLnZhbHVlcy5wb3J0UHJvamVjdHMgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBub2RlU2VsZWN0b3I6IGhyPy5zcGVjLnZhbHVlcy5ub2RlU2VsZWN0b3IgYXMgU3RyaW5nTWFwLFxuICAgICAgICAgICAgcHJvamVjdHM6IHRoaXMuazhzVXRpbC5nZXRQcm9qZWN0TmFtZXMoYWxiKSxcbiAgICAgICAgICAgIHJlcGxpY2FzOiBocj8uc3BlYy52YWx1ZXMucmVwbGljYXMgYXMgbnVtYmVyLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBocj8uc3BlYy52YWx1ZXMucmVzb3VyY2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,111 @@
1
+ import { API_GATEWAY, FeatureGateService, K8sApiService, NOT_NOTIFY_ON_ERROR_HEADERS, TOKEN_GLOBAL_NAMESPACE, TRUE, matchLabelsToString, publishRef, skipError, RESOURCE_TYPES, SecretType, K8sUtilService, } from '@alauda-fe/common';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Inject, Injectable } from '@angular/core';
4
+ import { combineLatest, of, distinctUntilChanged, map, switchMap, shareReplay, } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ import * as i2 from "@alauda-fe/common";
8
+ export class CertificateApiService {
9
+ constructor(http, k8sApi, k8sUtil, featureGate, globalNamespace) {
10
+ this.http = http;
11
+ this.k8sApi = k8sApi;
12
+ this.k8sUtil = k8sUtil;
13
+ this.featureGate = featureGate;
14
+ this.globalNamespace = globalNamespace;
15
+ this.isGlobalSecretEnabled$ = this.featureGate
16
+ .isEnabled('global-secret')
17
+ .pipe(publishRef());
18
+ }
19
+ getCertificatesAndSecrets(params$, extraGlobalSecretEnabled$) {
20
+ return combineLatest([
21
+ params$.pipe(switchMap(({ cluster, namespace }) => this.k8sApi
22
+ .getResourceList({
23
+ type: RESOURCE_TYPES.SECRET,
24
+ cluster,
25
+ namespace,
26
+ queryParams: {
27
+ fieldSelector: matchLabelsToString({
28
+ type: SecretType.TLS,
29
+ }),
30
+ },
31
+ })
32
+ .pipe(switchMap(original => this.normalizeCertificates(original, {
33
+ cluster,
34
+ namespace,
35
+ })), map(res => res.items), skipError([])))),
36
+ (extraGlobalSecretEnabled$
37
+ ? combineLatest([
38
+ this.isGlobalSecretEnabled$,
39
+ extraGlobalSecretEnabled$,
40
+ ]).pipe(map(([isGlobalSecretEnabled, extraGlobalSecretEnabled]) => isGlobalSecretEnabled && extraGlobalSecretEnabled))
41
+ : this.isGlobalSecretEnabled$).pipe(switchMap(enabled => enabled
42
+ ? params$.pipe(map(({ project }) => project), distinctUntilChanged(), switchMap(project => (project
43
+ ? this.http.get(`${API_GATEWAY}/certificate/v1/${project}/globalsecrets`)
44
+ : this.k8sApi.getGlobalResourceList({
45
+ type: RESOURCE_TYPES.SECRET,
46
+ queryParams: {
47
+ labelSelector: matchLabelsToString({
48
+ 'global-secret': TRUE,
49
+ }),
50
+ fieldSelector: matchLabelsToString({
51
+ type: SecretType.TLS,
52
+ }),
53
+ },
54
+ })).pipe(switchMap(original => this.normalizeCertificates(original)), map(res => res.items), skipError([]))))
55
+ : of([]))),
56
+ ]).pipe(map(([namespaceSecrets, globalSecrets]) => globalSecrets.concat(namespaceSecrets)), publishRef());
57
+ }
58
+ getCertificates(names, { cluster, namespace = this.globalNamespace, } = {}) {
59
+ return (cluster
60
+ ? of(cluster)
61
+ : this.getGlobalClusterInfo().pipe(map(({ globalClusterName }) => globalClusterName))).pipe(switchMap(cluster => this.http.post(`${API_GATEWAY}/certificate/v1/certificates/${cluster}/${namespace}`, names, {
62
+ headers: NOT_NOTIFY_ON_ERROR_HEADERS,
63
+ })));
64
+ }
65
+ getCertificate(name, params) {
66
+ return this.getCertificates([name], params).pipe(map(res => res?.[0]));
67
+ }
68
+ normalizeCertificates(original, params) {
69
+ return this.getCertificates('items' in original
70
+ ? original.items.map(item => this.k8sUtil.getName(item))
71
+ : [this.k8sUtil.getName(original)], params).pipe(skipError([]), map(certificates => {
72
+ const global = !params;
73
+ if ('items' in original) {
74
+ const certificateMap = certificates.reduce((acc, curr) => Object.assign(acc, {
75
+ [curr.name]: curr,
76
+ }), {});
77
+ original.items.forEach(item => {
78
+ item.global = global;
79
+ item.certificate = certificateMap[this.k8sUtil.getName(item)];
80
+ });
81
+ }
82
+ else {
83
+ original.global = global;
84
+ original.certificate = certificates[0];
85
+ }
86
+ return original;
87
+ }));
88
+ }
89
+ getGlobalClusterInfo() {
90
+ if (this.globalClusterInfo$) {
91
+ return this.globalClusterInfo$;
92
+ }
93
+ return (this.globalClusterInfo$ = this.k8sApi
94
+ .getGlobalResource({
95
+ type: RESOURCE_TYPES.CONFIG_MAP,
96
+ namespace: 'kube-public',
97
+ name: 'global-info',
98
+ })
99
+ .pipe(map(({ data }) => data), shareReplay(1)));
100
+ }
101
+ static { this.ɵfac = function CertificateApiService_Factory(t) { return new (t || CertificateApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.K8sApiService), i0.ɵɵinject(i2.K8sUtilService), i0.ɵɵinject(i2.FeatureGateService), i0.ɵɵinject(TOKEN_GLOBAL_NAMESPACE)); }; }
102
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: CertificateApiService, factory: CertificateApiService.ɵfac, providedIn: 'root' }); }
103
+ }
104
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CertificateApiService, [{
105
+ type: Injectable,
106
+ args: [{ providedIn: 'root' }]
107
+ }], function () { return [{ type: i1.HttpClient }, { type: i2.K8sApiService }, { type: i2.K8sUtilService }, { type: i2.FeatureGateService }, { type: undefined, decorators: [{
108
+ type: Inject,
109
+ args: [TOKEN_GLOBAL_NAMESPACE]
110
+ }] }]; }, null); })();
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUtYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi9zZXJ2aWNlcy9jZXJ0aWZpY2F0ZS1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixhQUFhLEVBRWIsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN0QixJQUFJLEVBQ0osbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixTQUFTLEVBR1QsY0FBYyxFQUVkLFVBQVUsRUFDVixjQUFjLEdBRWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUVMLGFBQWEsRUFDYixFQUFFLEVBQ0Ysb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxTQUFTLEVBQ1QsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDOzs7O0FBT2QsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUNtQixJQUFnQixFQUNoQixNQUFtQyxFQUNuQyxPQUF1QixFQUN2QixXQUErQixFQUNDLGVBQXVCO1FBSnZELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQ0Msb0JBQWUsR0FBZixlQUFlLENBQVE7UUFUMUUsMkJBQXNCLEdBQUcsSUFBSSxDQUFDLFdBQVc7YUFDdEMsU0FBUyxDQUFDLGVBQWUsQ0FBQzthQUMxQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQVFuQixDQUFDO0lBRUoseUJBQXlCLENBQ3ZCLE9BSUUsRUFDRix5QkFBK0M7UUFF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QztzRkFyTVUscUJBQXFCLDZJQVl0QixzQkFBc0I7dUVBWnJCLHFCQUFxQixXQUFyQixxQkFBcUIsbUJBRFIsTUFBTTs7dUZBQ25CLHFCQUFxQjtjQURqQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztzQkFhN0IsTUFBTTt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElfR0FURVdBWSxcbiAgRmVhdHVyZUdhdGVTZXJ2aWNlLFxuICBLOHNBcGlTZXJ2aWNlLFxuICBLdWJlcm5ldGVzUmVzb3VyY2VMaXN0LFxuICBOT1RfTk9USUZZX09OX0VSUk9SX0hFQURFUlMsXG4gIFRPS0VOX0dMT0JBTF9OQU1FU1BBQ0UsXG4gIFRSVUUsXG4gIG1hdGNoTGFiZWxzVG9TdHJpbmcsXG4gIHB1Ymxpc2hSZWYsXG4gIHNraXBFcnJvcixcbiAgQ2VydGlmaWNhdGUsXG4gIFJlc291cmNlVHlwZSxcbiAgUkVTT1VSQ0VfVFlQRVMsXG4gIFNlY3JldCxcbiAgU2VjcmV0VHlwZSxcbiAgSzhzVXRpbFNlcnZpY2UsXG4gIENvbmZpZ01hcCxcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgY29tYmluZUxhdGVzdCxcbiAgb2YsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHN3aXRjaE1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuXG5pbnRlcmZhY2UgR2xvYmFsQ2x1c3RlckluZm8ge1xuICBnbG9iYWxDbHVzdGVyTmFtZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENlcnRpZmljYXRlQXBpU2VydmljZSB7XG4gIHByaXZhdGUgZ2xvYmFsQ2x1c3RlckluZm8kOiBPYnNlcnZhYmxlPEdsb2JhbENsdXN0ZXJJbmZvPjtcblxuICBpc0dsb2JhbFNlY3JldEVuYWJsZWQkID0gdGhpcy5mZWF0dXJlR2F0ZVxuICAgIC5pc0VuYWJsZWQoJ2dsb2JhbC1zZWNyZXQnKVxuICAgIC5waXBlKHB1Ymxpc2hSZWYoKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgazhzQXBpOiBLOHNBcGlTZXJ2aWNlPFJlc291cmNlVHlwZT4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNVdGlsOiBLOHNVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZVNlcnZpY2UsXG4gICAgQEluamVjdChUT0tFTl9HTE9CQUxfTkFNRVNQQUNFKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE5hbWVzcGFjZTogc3RyaW5nLFxuICApIHt9XG5cbiAgZ2V0Q2VydGlmaWNhdGVzQW5kU2VjcmV0cyhcbiAgICBwYXJhbXMkOiBPYnNlcnZhYmxlPHtcbiAgICAgIGNsdXN0ZXI/OiBzdHJpbmc7XG4gICAgICBuYW1lc3BhY2U/OiBzdHJpbmc7XG4gICAgICBwcm9qZWN0Pzogc3RyaW5nO1xuICAgIH0+LFxuICAgIGV4dHJhR2xvYmFsU2VjcmV0RW5hYmxlZCQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+LFxuICApIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICBwYXJhbXMkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjbHVzdGVyLCBuYW1lc3BhY2UgfSkgPT5cbiAgICAgICAgICB0aGlzLms4c0FwaVxuICAgICAgICAgICAgLmdldFJlc291cmNlTGlzdDxTZWNyZXQ+KHtcbiAgICAgICAgICAgICAgdHlwZTogUkVTT1VSQ0VfVFlQRVMuU0VDUkVULFxuICAgICAgICAgICAgICBjbHVzdGVyLFxuICAgICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgZmllbGRTZWxlY3RvcjogbWF0Y2hMYWJlbHNUb1N0cmluZyh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBTZWNyZXRUeXBlLlRMUyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKG9yaWdpbmFsID0+XG4gICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVDZXJ0aWZpY2F0ZXMob3JpZ2luYWwsIHtcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXIsXG4gICAgICAgICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gcmVzLml0ZW1zKSxcbiAgICAgICAgICAgICAgc2tpcEVycm9yKFtdIGFzIFNlY3JldFtdKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgKGV4dHJhR2xvYmFsU2VjcmV0RW5hYmxlZCRcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuaXNHbG9iYWxTZWNyZXRFbmFibGVkJCxcbiAgICAgICAgICAgIGV4dHJhR2xvYmFsU2VjcmV0RW5hYmxlZCQsXG4gICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgKFtpc0dsb2JhbFNlY3JldEVuYWJsZWQsIGV4dHJhR2xvYmFsU2VjcmV0RW5hYmxlZF0pID0+XG4gICAgICAgICAgICAgICAgaXNHbG9iYWxTZWNyZXRFbmFibGVkICYmIGV4dHJhR2xvYmFsU2VjcmV0RW5hYmxlZCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICA6IHRoaXMuaXNHbG9iYWxTZWNyZXRFbmFibGVkJFxuICAgICAgKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoZW5hYmxlZCA9PlxuICAgICAgICAgIGVuYWJsZWRcbiAgICAgICAgICAgID8gcGFyYW1zJC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoeyBwcm9qZWN0IH0pID0+IHByb2plY3QpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHByb2plY3QgPT5cbiAgICAgICAgICAgICAgICAgIChwcm9qZWN0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5odHRwLmdldDxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PFNlY3JldD4+KFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7QVBJX0dBVEVXQVl9L2NlcnRpZmljYXRlL3YxLyR7cHJvamVjdH0vZ2xvYmFsc2VjcmV0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuazhzQXBpLmdldEdsb2JhbFJlc291cmNlTGlzdDxTZWNyZXQ+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFJFU09VUkNFX1RZUEVTLlNFQ1JFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsU2VsZWN0b3I6IG1hdGNoTGFiZWxzVG9TdHJpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWwtc2VjcmV0JzogVFJVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IG1hdGNoTGFiZWxzVG9TdHJpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlY3JldFR5cGUuVExTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKG9yaWdpbmFsID0+IHRoaXMubm9ybWFsaXplQ2VydGlmaWNhdGVzKG9yaWdpbmFsKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gcmVzLml0ZW1zKSxcbiAgICAgICAgICAgICAgICAgICAgc2tpcEVycm9yKFtdIGFzIFNlY3JldFtdKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBvZihbXSBhcyBTZWNyZXRbXSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtuYW1lc3BhY2VTZWNyZXRzLCBnbG9iYWxTZWNyZXRzXSkgPT5cbiAgICAgICAgZ2xvYmFsU2VjcmV0cy5jb25jYXQobmFtZXNwYWNlU2VjcmV0cyksXG4gICAgICApLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG4gIH1cblxuICBnZXRDZXJ0aWZpY2F0ZXMoXG4gICAgbmFtZXM6IHN0cmluZ1tdLFxuICAgIHtcbiAgICAgIGNsdXN0ZXIsXG4gICAgICBuYW1lc3BhY2UgPSB0aGlzLmdsb2JhbE5hbWVzcGFjZSxcbiAgICB9OiB7IGNsdXN0ZXI/OiBzdHJpbmc7IG5hbWVzcGFjZT86IHN0cmluZyB9ID0ge30sXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICBjbHVzdGVyXG4gICAgICAgID8gb2YoY2x1c3RlcilcbiAgICAgICAgOiB0aGlzLmdldEdsb2JhbENsdXN0ZXJJbmZvKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoeyBnbG9iYWxDbHVzdGVyTmFtZSB9KSA9PiBnbG9iYWxDbHVzdGVyTmFtZSksXG4gICAgICAgICAgKVxuICAgICkucGlwZShcbiAgICAgIHN3aXRjaE1hcChjbHVzdGVyID0+XG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PENlcnRpZmljYXRlW10+KFxuICAgICAgICAgIGAke0FQSV9HQVRFV0FZfS9jZXJ0aWZpY2F0ZS92MS9jZXJ0aWZpY2F0ZXMvJHtjbHVzdGVyfS8ke25hbWVzcGFjZX1gLFxuICAgICAgICAgIG5hbWVzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IE5PVF9OT1RJRllfT05fRVJST1JfSEVBREVSUyxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0Q2VydGlmaWNhdGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtcz86IHtcbiAgICAgIGNsdXN0ZXI6IHN0cmluZztcbiAgICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIH0sXG4gICkge1xuICAgIHJldHVybiB0aGlzLmdldENlcnRpZmljYXRlcyhbbmFtZV0sIHBhcmFtcykucGlwZShtYXAocmVzID0+IHJlcz8uWzBdKSk7XG4gIH1cblxuICBub3JtYWxpemVDZXJ0aWZpY2F0ZXMoXG4gICAgb3JpZ2luYWw6IFNlY3JldCxcbiAgICBwYXJhbXM/OiB7IGNsdXN0ZXI6IHN0cmluZzsgbmFtZXNwYWNlOiBzdHJpbmcgfSxcbiAgKTogT2JzZXJ2YWJsZTxTZWNyZXQ+O1xuXG4gIG5vcm1hbGl6ZUNlcnRpZmljYXRlcyhcbiAgICBvcmlnaW5hbDogS3ViZXJuZXRlc1Jlc291cmNlTGlzdDxTZWNyZXQ+LFxuICAgIHBhcmFtcz86IHsgY2x1c3Rlcjogc3RyaW5nOyBuYW1lc3BhY2U6IHN0cmluZyB9LFxuICApOiBPYnNlcnZhYmxlPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3Q8U2VjcmV0Pj47XG5cbiAgbm9ybWFsaXplQ2VydGlmaWNhdGVzKFxuICAgIG9yaWdpbmFsOiBTZWNyZXQgfCBLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PFNlY3JldD4sXG4gICAgcGFyYW1zPzogeyBjbHVzdGVyOiBzdHJpbmc7IG5hbWVzcGFjZTogc3RyaW5nIH0sXG4gICkge1xuICAgIHJldHVybiB0aGlzLmdldENlcnRpZmljYXRlcyhcbiAgICAgICdpdGVtcycgaW4gb3JpZ2luYWxcbiAgICAgICAgPyBvcmlnaW5hbC5pdGVtcy5tYXAoaXRlbSA9PiB0aGlzLms4c1V0aWwuZ2V0TmFtZShpdGVtKSlcbiAgICAgICAgOiBbdGhpcy5rOHNVdGlsLmdldE5hbWUob3JpZ2luYWwpXSxcbiAgICAgIHBhcmFtcyxcbiAgICApLnBpcGUoXG4gICAgICBza2lwRXJyb3IoW10gYXMgQ2VydGlmaWNhdGVbXSksXG4gICAgICBtYXAoY2VydGlmaWNhdGVzID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYmFsID0gIXBhcmFtcztcbiAgICAgICAgaWYgKCdpdGVtcycgaW4gb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBjZXJ0aWZpY2F0ZU1hcCA9IGNlcnRpZmljYXRlcy5yZWR1Y2U8XG4gICAgICAgICAgICBSZWNvcmQ8c3RyaW5nLCBDZXJ0aWZpY2F0ZT5cbiAgICAgICAgICA+KFxuICAgICAgICAgICAgKGFjYywgY3VycikgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY2MsIHtcbiAgICAgICAgICAgICAgICBbY3Vyci5uYW1lXTogY3VycixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuICAgICAgICAgIG9yaWdpbmFsLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLmdsb2JhbCA9IGdsb2JhbDtcbiAgICAgICAgICAgIGl0ZW0uY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZU1hcFt0aGlzLms4c1V0aWwuZ2V0TmFtZShpdGVtKV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3JpZ2luYWwuZ2xvYmFsID0gZ2xvYmFsO1xuICAgICAgICAgIG9yaWdpbmFsLmNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R2xvYmFsQ2x1c3RlckluZm8oKSB7XG4gICAgaWYgKHRoaXMuZ2xvYmFsQ2x1c3RlckluZm8kKSB7XG4gICAgICByZXR1cm4gdGhpcy5nbG9iYWxDbHVzdGVySW5mbyQ7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5nbG9iYWxDbHVzdGVySW5mbyQgPSB0aGlzLms4c0FwaVxuICAgICAgLmdldEdsb2JhbFJlc291cmNlPENvbmZpZ01hcDxHbG9iYWxDbHVzdGVySW5mbz4+KHtcbiAgICAgICAgdHlwZTogUkVTT1VSQ0VfVFlQRVMuQ09ORklHX01BUCxcbiAgICAgICAgbmFtZXNwYWNlOiAna3ViZS1wdWJsaWMnLFxuICAgICAgICBuYW1lOiAnZ2xvYmFsLWluZm8nLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICApKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,116 @@
1
+ import { PUBLIC_NAMESPACE, publishRef, K8sApiService, K8sUtilService, skipError, RESOURCE_TYPES, } from '@alauda-fe/common';
2
+ import { Injectable } from '@angular/core';
3
+ import { map } from 'rxjs';
4
+ import { IPMode, NetworkMode, parseSegment } from '../utils/cidr-exports';
5
+ import { CALICO_ANNOTATION_PREFIX, ClusterNetworkType, } from '../utils/subnet-exports';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@alauda-fe/common";
8
+ export class NetworkUtilService {
9
+ constructor(k8sApi, k8sUtil) {
10
+ this.k8sApi = k8sApi;
11
+ this.k8sUtil = k8sUtil;
12
+ }
13
+ /**
14
+ * 集群网络类型,支持 kube-ovn,calico
15
+ * 若 kube-ovn,calico 同时存在,优先判定为 ovn
16
+ */
17
+ getNetworkTypeByCluster$(cluster) {
18
+ // 获取kube-public下全部的config-map进行匹配,此步骤数据不会很大,并且只调一次API
19
+ return this.k8sApi
20
+ .getResourceList({
21
+ type: RESOURCE_TYPES.CONFIG_MAP,
22
+ cluster,
23
+ namespace: PUBLIC_NAMESPACE,
24
+ })
25
+ .pipe(map(({ items }) => {
26
+ let networkType = ClusterNetworkType.DEFAULT;
27
+ if (!items?.length) {
28
+ return networkType;
29
+ }
30
+ for (const item of items) {
31
+ switch (item?.metadata?.name) {
32
+ case ClusterNetworkType.KUBE_OVN: {
33
+ networkType = ClusterNetworkType.KUBE_OVN;
34
+ break;
35
+ }
36
+ case ClusterNetworkType.CALICO: {
37
+ // only override default
38
+ if (networkType === ClusterNetworkType.DEFAULT) {
39
+ networkType = ClusterNetworkType.CALICO;
40
+ }
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ return networkType;
46
+ }), skipError(ClusterNetworkType.DEFAULT), publishRef());
47
+ }
48
+ getNetworkMode$(cluster) {
49
+ return this.k8sApi
50
+ .getGlobalResource({
51
+ type: RESOURCE_TYPES.CLUSTER,
52
+ name: cluster,
53
+ namespaced: true,
54
+ })
55
+ .pipe(map(res => {
56
+ const protocolStack = this.k8sUtil.getLabel(res, 'protocol-stack') || 'IPv4'; // Dual-Stack / IPv4 / IPv6
57
+ return protocolStack === 'Dual-Stack'
58
+ ? NetworkMode.DUAL
59
+ : protocolStack === 'IPv6'
60
+ ? NetworkMode.IPV6
61
+ : NetworkMode.IPV4;
62
+ }), publishRef());
63
+ }
64
+ getCalicoCidrs(namespace, subnets, networkMode, enableFixIpV6ForDual = false) {
65
+ if (networkMode === NetworkMode.DUAL) {
66
+ return this.getCalicoCidrs(namespace, subnets, NetworkMode.IPV4).concat(enableFixIpV6ForDual
67
+ ? this.getCalicoCidrs(namespace, subnets, NetworkMode.IPV6)
68
+ : []);
69
+ }
70
+ const ipMode = networkMode;
71
+ const ipPools = this.k8sUtil.getAnnotation(namespace, {
72
+ type: `ipv${ipMode === IPMode.IPV4 ? '4' : '6'}pools`,
73
+ baseDomain: CALICO_ANNOTATION_PREFIX,
74
+ });
75
+ if (!ipPools) {
76
+ return [];
77
+ }
78
+ try {
79
+ return getCidrFromSubnetList(JSON.parse(ipPools), subnets, ipMode);
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ }
85
+ static { this.ɵfac = function NetworkUtilService_Factory(t) { return new (t || NetworkUtilService)(i0.ɵɵinject(i1.K8sApiService), i0.ɵɵinject(i1.K8sUtilService)); }; }
86
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NetworkUtilService, factory: NetworkUtilService.ɵfac, providedIn: 'root' }); }
87
+ }
88
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NetworkUtilService, [{
89
+ type: Injectable,
90
+ args: [{
91
+ providedIn: 'root',
92
+ }]
93
+ }], function () { return [{ type: i1.K8sApiService }, { type: i1.K8sUtilService }]; }, null); })();
94
+ export function getCidrFromSubnetList(subnetNames, subnets, ipMode) {
95
+ return subnetNames.reduce((acc, name) => {
96
+ const isIpV4 = ipMode === IPMode.IPV4;
97
+ const { ipV4Segment, ipV6Segment } = parseSegment(subnets.find(subnet => {
98
+ let subnetName = subnet.metadata.name;
99
+ if (!isIpV4) {
100
+ if (subnetName === 'default-v4-ippool') {
101
+ subnetName = 'default-v6-ippool';
102
+ }
103
+ else {
104
+ subnetName += '-v6';
105
+ }
106
+ }
107
+ return subnetName === name;
108
+ })?.spec.cidrBlock);
109
+ const segment = isIpV4 ? ipV4Segment : ipV6Segment;
110
+ if (segment) {
111
+ acc.push(segment);
112
+ }
113
+ return acc;
114
+ }, []);
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay11dGlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi9zZXJ2aWNlcy9uZXR3b3JrLXV0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixhQUFhLEVBQ2IsY0FBYyxFQUdkLFNBQVMsRUFDVCxjQUFjLEdBRWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsR0FDbkIsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBS2pDLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDbUIsTUFBcUIsRUFDckIsT0FBdUI7UUFEdkIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtJQUN2QyxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsd0JBQXdCLENBQUMsT0FBZTtRQUN0QyxzREFBc0Q7UUFDdEQsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNmLGVBQWUsQ0FBWTtZQUMxQixJQUFJLEVBQUUsY0FBYyxDQUFDLFVBQVU7WUFDL0IsT0FBTztZQUNQLFNBQVMsRUFBRSxnQkFBZ0I7U0FDNUIsQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxXQUFXLEdBQXVCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztZQUVqRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDbEIsT0FB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TTthQUNuQjs7QUE0R0QsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxXQUFxQixFQUNyQixPQUFpQixFQUNqQixNQUFjO0lBRWQsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsWUFBWSxDQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BCLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBRXRDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsSUFBSSxVQUFVLEtBQUssbUJBQW1CLEVBQUU7b0JBQ3RDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQztpQkFDbEM7cUJBQU07b0JBQ0wsVUFBVSxJQUFJLEtBQUssQ0FBQztpQkFDckI7YUFDRjtZQUVELE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQztRQUM3QixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUNuQixDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxJQUFJLE9BQU8sRUFBRTtZQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQVUJMSUNfTkFNRVNQQUNFLFxuICBwdWJsaXNoUmVmLFxuICBLOHNBcGlTZXJ2aWNlLFxuICBLOHNVdGlsU2VydmljZSxcbiAgQ29uZmlnTWFwLFxuICBOYW1lc3BhY2UsXG4gIHNraXBFcnJvcixcbiAgUkVTT1VSQ0VfVFlQRVMsXG4gIENsdXN0ZXIsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTdWJuZXQgfSBmcm9tICcuLi90eXBlcy9rOHMtZXhwb3J0cyc7XG5pbXBvcnQgeyBJUE1vZGUsIE5ldHdvcmtNb2RlLCBwYXJzZVNlZ21lbnQgfSBmcm9tICcuLi91dGlscy9jaWRyLWV4cG9ydHMnO1xuaW1wb3J0IHtcbiAgQ0FMSUNPX0FOTk9UQVRJT05fUFJFRklYLFxuICBDbHVzdGVyTmV0d29ya1R5cGUsXG59IGZyb20gJy4uL3V0aWxzL3N1Ym5ldC1leHBvcnRzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtVdGlsU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgazhzQXBpOiBLOHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgazhzVXRpbDogSzhzVXRpbFNlcnZpY2UsXG4gICkge31cblxuICAvKipcbiAgICogIOmbhue+pOe9kee7nOexu+Wei++8jOaUr+aMgSBrdWJlLW92bu+8jGNhbGljb1xuICAgKiAg6IulIGt1YmUtb3Zu77yMY2FsaWNvIOWQjOaXtuWtmOWcqO+8jOS8mOWFiOWIpOWumuS4uiBvdm5cbiAgICovXG4gIGdldE5ldHdvcmtUeXBlQnlDbHVzdGVyJChjbHVzdGVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENsdXN0ZXJOZXR3b3JrVHlwZT4ge1xuICAgIC8vIOiOt+WPlmt1YmUtcHVibGlj5LiL5YWo6YOo55qEY29uZmlnLW1hcOi/m+ihjOWMuemFje+8jOatpOatpemqpOaVsOaNruS4jeS8muW+iOWkp++8jOW5tuS4lOWPquiwg+S4gOasoUFQSVxuICAgIHJldHVybiB0aGlzLms4c0FwaVxuICAgICAgLmdldFJlc291cmNlTGlzdDxDb25maWdNYXA+KHtcbiAgICAgICAgdHlwZTogUkVTT1VSQ0VfVFlQRVMuQ09ORklHX01BUCxcbiAgICAgICAgY2x1c3RlcixcbiAgICAgICAgbmFtZXNwYWNlOiBQVUJMSUNfTkFNRVNQQUNFLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgaXRlbXMgfSkgPT4ge1xuICAgICAgICAgIGxldCBuZXR3b3JrVHlwZTogQ2x1c3Rlck5ldHdvcmtUeXBlID0gQ2x1c3Rlck5ldHdvcmtUeXBlLkRFRkFVTFQ7XG5cbiAgICAgICAgICBpZiAoIWl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXR3b3JrVHlwZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbT8ubWV0YWRhdGE/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBDbHVzdGVyTmV0d29ya1R5cGUuS1VCRV9PVk46IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrVHlwZSA9IENsdXN0ZXJOZXR3b3JrVHlwZS5LVUJFX09WTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIENsdXN0ZXJOZXR3b3JrVHlwZS5DQUxJQ086IHtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IG92ZXJyaWRlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICBpZiAobmV0d29ya1R5cGUgPT09IENsdXN0ZXJOZXR3b3JrVHlwZS5ERUZBVUxUKSB7XG4gICAgICAgICAgICAgICAgICBuZXR3b3JrVHlwZSA9IENsdXN0ZXJOZXR3b3JrVHlwZS5DQUxJQ087XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXR3b3JrVHlwZTtcbiAgICAgICAgfSksXG4gICAgICAgIHNraXBFcnJvcihDbHVzdGVyTmV0d29ya1R5cGUuREVGQVVMVCksXG4gICAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICAgICk7XG4gIH1cblxuICBnZXROZXR3b3JrTW9kZSQoY2x1c3Rlcjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuazhzQXBpXG4gICAgICAuZ2V0R2xvYmFsUmVzb3VyY2U8Q2x1c3Rlcj4oe1xuICAgICAgICB0eXBlOiBSRVNPVVJDRV9UWVBFUy5DTFVTVEVSLFxuICAgICAgICBuYW1lOiBjbHVzdGVyLFxuICAgICAgICBuYW1lc3BhY2VkOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICBjb25zdCBwcm90b2NvbFN0YWNrID1cbiAgICAgICAgICAgIHRoaXMuazhzVXRpbC5nZXRMYWJlbChyZXMsICdwcm90b2NvbC1zdGFjaycpIHx8ICdJUHY0JzsgLy8gRHVhbC1TdGFjayAvIElQdjQgLyBJUHY2XG5cbiAgICAgICAgICByZXR1cm4gcHJvdG9jb2xTdGFjayA9PT0gJ0R1YWwtU3RhY2snXG4gICAgICAgICAgICA/IE5ldHdvcmtNb2RlLkRVQUxcbiAgICAgICAgICAgIDogcHJvdG9jb2xTdGFjayA9PT0gJ0lQdjYnXG4gICAgICAgICAgICA/IE5ldHdvcmtNb2RlLklQVjZcbiAgICAgICAgICAgIDogTmV0d29ya01vZGUuSVBWNDtcbiAgICAgICAgfSksXG4gICAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICAgICk7XG4gIH1cblxuICBnZXRDYWxpY29DaWRycyhcbiAgICBuYW1lc3BhY2U6IE5hbWVzcGFjZSxcbiAgICBzdWJuZXRzOiBTdWJuZXRbXSxcbiAgICBuZXR3b3JrTW9kZTogTmV0d29ya01vZGUsXG4gICAgZW5hYmxlRml4SXBWNkZvckR1YWwgPSBmYWxzZSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGlmIChuZXR3b3JrTW9kZSA9PT0gTmV0d29ya01vZGUuRFVBTCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FsaWNvQ2lkcnMobmFtZXNwYWNlLCBzdWJuZXRzLCBOZXR3b3JrTW9kZS5JUFY0KS5jb25jYXQoXG4gICAgICAgIGVuYWJsZUZpeElwVjZGb3JEdWFsXG4gICAgICAgICAgPyB0aGlzLmdldENhbGljb0NpZHJzKG5hbWVzcGFjZSwgc3VibmV0cywgTmV0d29ya01vZGUuSVBWNilcbiAgICAgICAgICA6IFtdLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpcE1vZGUgPSBuZXR3b3JrTW9kZTtcblxuICAgIGNvbnN0IGlwUG9vbHMgPSB0aGlzLms4c1V0aWwuZ2V0QW5ub3RhdGlvbihuYW1lc3BhY2UsIHtcbiAgICAgIHR5cGU6IGBpcHYke2lwTW9kZSA9PT0gSVBNb2RlLklQVjQgPyAnNCcgOiAnNid9cG9vbHNgLFxuICAgICAgYmFzZURvbWFpbjogQ0FMSUNPX0FOTk9UQVRJT05fUFJFRklYLFxuICAgIH0pO1xuXG4gICAgaWYgKCFpcFBvb2xzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRDaWRyRnJvbVN1Ym5ldExpc3QoXG4gICAgICAgIEpTT04ucGFyc2UoaXBQb29scykgYXMgc3RyaW5nW10sXG4gICAgICAgIHN1Ym5ldHMsXG4gICAgICAgIGlwTW9kZSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaWRyRnJvbVN1Ym5ldExpc3QoXG4gIHN1Ym5ldE5hbWVzOiBzdHJpbmdbXSxcbiAgc3VibmV0czogU3VibmV0W10sXG4gIGlwTW9kZTogSVBNb2RlLFxuKSB7XG4gIHJldHVybiBzdWJuZXROYW1lcy5yZWR1Y2U8c3RyaW5nW10+KChhY2MsIG5hbWUpID0+IHtcbiAgICBjb25zdCBpc0lwVjQgPSBpcE1vZGUgPT09IElQTW9kZS5JUFY0O1xuICAgIGNvbnN0IHsgaXBWNFNlZ21lbnQsIGlwVjZTZWdtZW50IH0gPSBwYXJzZVNlZ21lbnQoXG4gICAgICBzdWJuZXRzLmZpbmQoc3VibmV0ID0+IHtcbiAgICAgICAgbGV0IHN1Ym5ldE5hbWUgPSBzdWJuZXQubWV0YWRhdGEubmFtZTtcblxuICAgICAgICBpZiAoIWlzSXBWNCkge1xuICAgICAgICAgIGlmIChzdWJuZXROYW1lID09PSAnZGVmYXVsdC12NC1pcHBvb2wnKSB7XG4gICAgICAgICAgICBzdWJuZXROYW1lID0gJ2RlZmF1bHQtdjYtaXBwb29sJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VibmV0TmFtZSArPSAnLXY2JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VibmV0TmFtZSA9PT0gbmFtZTtcbiAgICAgIH0pPy5zcGVjLmNpZHJCbG9jayxcbiAgICApO1xuICAgIGNvbnN0IHNlZ21lbnQgPSBpc0lwVjQgPyBpcFY0U2VnbWVudCA6IGlwVjZTZWdtZW50O1xuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICBhY2MucHVzaChzZWdtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufVxuIl19
@@ -0,0 +1,14 @@
1
+ export var AlbResourceType;
2
+ (function (AlbResourceType) {
3
+ AlbResourceType["ALB"] = "ALB2";
4
+ AlbResourceType["FRONTEND"] = "Frontend";
5
+ AlbResourceType["RULE"] = "Rule";
6
+ })(AlbResourceType || (AlbResourceType = {}));
7
+ export var SpecModel;
8
+ (function (SpecModel) {
9
+ SpecModel["SMALL"] = "small";
10
+ SpecModel["MEDIUM"] = "medium";
11
+ SpecModel["LARGE"] = "large";
12
+ SpecModel["CUSTOMIZE"] = "customize";
13
+ })(SpecModel || (SpecModel = {}));
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi90eXBlcy9hbGItZXhwb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3pCLCtCQUFZLENBQUE7SUFDWix3Q0FBcUIsQ0FBQTtJQUNyQixnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCO0FBa0JELE1BQU0sQ0FBTixJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsNEJBQWUsQ0FBQTtJQUNmLDhCQUFpQixDQUFBO0lBQ2pCLDRCQUFlLENBQUE7SUFDZixvQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsU0FBUyxLQUFULFNBQVMsUUFLcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZUxpbWl0IH0gZnJvbSAnLi4vdXRpbHMvYWxiLWludGVybmFscyc7XG5cbmV4cG9ydCBlbnVtIEFsYlJlc291cmNlVHlwZSB7XG4gIEFMQiA9ICdBTEIyJyxcbiAgRlJPTlRFTkQgPSAnRnJvbnRlbmQnLFxuICBSVUxFID0gJ1J1bGUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvcnRSYW5nZUl0ZW0ge1xuICBwb3J0OiBzdHJpbmc7XG4gIHByb2plY3RzOiBzdHJpbmdbXTtcbiAgdXNlZFBvcnRzPzogbnVtYmVyW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhaW5SZXNvdXJjZUxpbWl0IHtcbiAgY3B1Pzogc3RyaW5nO1xuICBtZW1vcnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxiUmVzb3VyY2VzIHtcbiAgbGltaXRzPzogUGxhaW5SZXNvdXJjZUxpbWl0O1xuICByZXF1ZXN0cz86IFBsYWluUmVzb3VyY2VMaW1pdDtcbn1cblxuZXhwb3J0IGVudW0gU3BlY01vZGVsIHtcbiAgU01BTEwgPSAnc21hbGwnLFxuICBNRURJVU0gPSAnbWVkaXVtJyxcbiAgTEFSR0UgPSAnbGFyZ2UnLFxuICBDVVNUT01JWkUgPSAnY3VzdG9taXplJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGJSZXNvdXJjZUxpbWl0TW9kZWwge1xuICBzcGVjTW9kZWw6IFNwZWNNb2RlbDtcbiAgcmVzb3VyY2VMaW1pdDogUmVzb3VyY2VMaW1pdDtcbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ export var EncapsulateProtocol;
2
+ (function (EncapsulateProtocol) {
3
+ EncapsulateProtocol["IPIP"] = "IPIP";
4
+ EncapsulateProtocol["VXLAN"] = "VXLAN";
5
+ EncapsulateProtocol["NEVER"] = "NEVER";
6
+ })(EncapsulateProtocol || (EncapsulateProtocol = {}));
7
+ export var EncapsulateMode;
8
+ (function (EncapsulateMode) {
9
+ EncapsulateMode["ALWAYS"] = "Always";
10
+ EncapsulateMode["CROSS_SUBNET"] = "CrossSubnet";
11
+ EncapsulateMode["NEVER"] = "Never";
12
+ })(EncapsulateMode || (EncapsulateMode = {}));
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiazhzLWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi90eXBlcy9rOHMtZXhwb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzdCLG9DQUFhLENBQUE7SUFDYixzQ0FBZSxDQUFBO0lBQ2Ysc0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsb0NBQWlCLENBQUE7SUFDakIsK0NBQTRCLENBQUE7SUFDNUIsa0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25kaXRpb24sIEt1YmVybmV0ZXNSZXNvdXJjZSwgU3RyaW5nTWFwIH0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuXG5leHBvcnQgZW51bSBFbmNhcHN1bGF0ZVByb3RvY29sIHtcbiAgSVBJUCA9ICdJUElQJyxcbiAgVlhMQU4gPSAnVlhMQU4nLFxuICBORVZFUiA9ICdORVZFUicsXG59XG5cbmV4cG9ydCBlbnVtIEVuY2Fwc3VsYXRlTW9kZSB7XG4gIEFMV0FZUyA9ICdBbHdheXMnLFxuICBDUk9TU19TVUJORVQgPSAnQ3Jvc3NTdWJuZXQnLFxuICBORVZFUiA9ICdOZXZlcicsXG59XG5cbi8vIFN1Ym5ldFxuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRTdGF0dXMge1xuICB1c2luZ0lQcz86IG51bWJlcjtcbiAgYXZhaWxhYmxlSVBzPzogbnVtYmVyO1xuICB2NHVzaW5nSVBzPzogbnVtYmVyO1xuICB2NGF2YWlsYWJsZUlQcz86IG51bWJlcjtcbiAgdjZ1c2luZ0lQcz86IG51bWJlcjtcbiAgdjZhdmFpbGFibGVJUHM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0U3BlYyB7XG4gIGRlZmF1bHQ6IGJvb2xlYW47IC8vIHdoZXRoZXIgZGVmYXVsdFxuICBwcm90b2NvbDogJ0lQdjQnIHwgJ0lQdjYnIHwgJ0R1YWwnO1xuICBuYW1lc3BhY2VzPzogc3RyaW5nW107XG4gIGNpZHJCbG9jazogc3RyaW5nOyAvLyBzZWdtZW50XG4gIG5hdE91dGdvaW5nPzogYm9vbGVhbjtcbiAgLy8gZm9yIGNhbGljb1xuICBpcGlwTW9kZT86IEVuY2Fwc3VsYXRlTW9kZTtcbiAgdnhsYW5Nb2RlPzogRW5jYXBzdWxhdGVNb2RlO1xuICBibG9ja1NpemU/OiBudW1iZXI7XG4gIHY0YmxvY2tTaXplPzogbnVtYmVyO1xuICB2NmJsb2NrU2l6ZT86IG51bWJlcjtcblxuICAvLyBmb3Iga3ViLW92blxuICBnYXRld2F5OiBzdHJpbmc7IC8vIGRlZmF1bHQsY2lkcl9ibG9jaydzIGZpcnN0IGF2YWlsYWJsZVxuICBleGNsdWRlSXBzOiBzdHJpbmdbXTtcbiAgZ2F0ZXdheVR5cGU6IHN0cmluZztcbiAgZ2F0ZXdheU5vZGU/OiBzdHJpbmc7IC8vIHJlcXVpcmVkIHdoZW4gZ2F0ZXdheV90eXBlIGlzIENlbnRyYWxpemVkXG4gIHByaXZhdGU/OiBib29sZWFuOyAvLyBwcml2YXRlIG5ldHdvcmssZGVmYXVsdCBmYWxzZVxuICBhbGxvd1N1Ym5ldHM/OiBzdHJpbmdbXTsgLy8gZW5hYmxlIHdoZW4gcHJpdmF0ZSBpcyB0cnVlXG4gIGVuYWJsZUVjbXA/OiBib29sZWFuOyAvLyByZXF1aXJlZCB3aGVuIGdhdGV3YXlfdHlwZSBpcyBDZW50cmFsaXplZC4gaHR0cHM6Ly9jb25mbHVlbmNlLmFsYXVkYS5jbi9wYWdlcy92aWV3cGFnZS5hY3Rpb24/cGFnZUlkPTE2MzA3MTA0MlxuXG4gIC8vIHVuZGVybGF5XG4gIHZsYW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0IGV4dGVuZHMgS3ViZXJuZXRlc1Jlc291cmNlIHtcbiAgc3BlYz86IFN1Ym5ldFNwZWM7XG4gIHN0YXR1cz86IFN1Ym5ldFN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRJcFNwZWMge1xuICBwb2ROYW1lOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBzdWJuZXQ6IHN0cmluZztcbiAgbm9kZU5hbWU6IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBtYWNBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0SXAgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2Uge1xuICBzcGVjPzogU3VibmV0SXBTcGVjO1xufVxuXG4vLyBMb2FkQmFsYW5jZXJcbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIGV4dGVuZHMgS3ViZXJuZXRlc1Jlc291cmNlIHtcbiAga2luZDogJ0FMQjInO1xuICBzcGVjPzogTG9hZEJhbGFuY2VyU3BlYztcbiAgc3RhdHVzPzogTG9hZEJhbGFuY2VyU3RhdHVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclN0YXR1cyB7XG4gIHByb2JlVGltZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgc3RhdGU6ICdyZWFkeScgfCAnd2FybmluZyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyU3BlYyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgYmluZF9hZGRyZXNzOiBzdHJpbmc7XG4gIGRvbWFpbnM6IHN0cmluZ1tdO1xuICBpYWFzX2lkOiBzdHJpbmc7XG4gIHR5cGU6ICduZ2lueCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUxCMlN0YXR1cyBleHRlbmRzIENvbmRpdGlvbiB7XG4gIGRldGFpbD86IHtcbiAgICBhZGRyZXNzOiB7XG4gICAgICBob3N0OiBzdHJpbmdbXTtcbiAgICAgIGlwdjQ6IHN0cmluZ1tdO1xuICAgICAgaXB2Njogc3RyaW5nW107XG4gICAgICBtc2c/OiBzdHJpbmc7XG4gICAgICBvaz86IGJvb2xlYW47XG4gICAgfTtcbiAgICBhbGI/OiBTdHJpbmdNYXA7XG4gICAgdmVyc2lvbj86IHtcbiAgICAgIGltYWdlUGF0Y2g6IHN0cmluZztcbiAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFMQjJTcGVjIHtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgY29uZmlnOiB7XG4gICAgZW5hYmxlQWxiPzogYm9vbGVhbjtcbiAgICB2aXA/OiB7XG4gICAgICBlbmFibGVMYlN2YzogYm9vbGVhbjtcbiAgICAgIGxiU3ZjQW5ub3RhdGlvbnM/OiBTdHJpbmdNYXA7XG4gICAgfTtcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgICBuZXR3b3JrTW9kZTogJ2hvc3QnIHwgJ2NvbnRhaW5lcic7XG4gICAgZW5hYmxlUG9ydFByb2plY3Q/OiBib29sZWFuO1xuICAgIC8qKlxuICAgIEFycmF5PHtcbiAgICAgIHBvcnQ6IHN0cmluZztcbiAgICAgIHByb2plY3RzOiBzdHJpbmdbXTtcbiAgICB9PlxuICAgICovXG4gICAgcG9ydFByb2plY3RzPzogc3RyaW5nO1xuICAgIG5vZGVTZWxlY3Rvcj86IFN0cmluZ01hcDtcbiAgICBwcm9qZWN0cz86IHN0cmluZ1tdO1xuICAgIHJlcGxpY2FzPzogbnVtYmVyO1xuICAgIHJlc291cmNlcz86IHtcbiAgICAgIGxpbWl0cz86IHtcbiAgICAgICAgY3B1OiBzdHJpbmc7XG4gICAgICAgIG1lbW9yeTogc3RyaW5nO1xuICAgICAgfTtcbiAgICAgIHJlcXVlc3RzPzoge1xuICAgICAgICBjcHU6IHN0cmluZztcbiAgICAgICAgbWVtb3J5OiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH07XG4gICAgZ2F0ZXdheT86IHtcbiAgICAgIG1vZGU6ICdzdGFuZGFsb25lJyB8ICdzaGFyZSc7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgdHlwZTogJ25naW54Jztcbn1cblxuLy8gaHR0cHM6Ly9jb25mbHVlbmNlLmFsYXVkYS5jbi9wYWdlcy92aWV3cGFnZS5hY3Rpb24/cGFnZUlkPTEzMzA3MzU2NlxuZXhwb3J0IGludGVyZmFjZSBBTEIyIGV4dGVuZHMgS3ViZXJuZXRlc1Jlc291cmNlIHtcbiAga2luZDogJ0FMQjInO1xuICBzcGVjOiBBTEIyU3BlYztcbiAgc3RhdHVzPzogQUxCMlN0YXR1cztcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { createResourceDefinitions } from '@alauda-fe/common';
2
+ export const KUBE_OVN_GROUP = 'kubeovn.io';
3
+ export const NetworkResourceDefinitions = {
4
+ SUBNET_KUBE_OVN: {
5
+ type: 'subnets',
6
+ apiGroup: KUBE_OVN_GROUP,
7
+ },
8
+ SUBNET_KUBE_OVN_IP: {
9
+ type: 'ips',
10
+ apiGroup: KUBE_OVN_GROUP,
11
+ },
12
+ };
13
+ const _ = createResourceDefinitions(NetworkResourceDefinitions);
14
+ export const NETWORK_RESOURCE_DEFINITIONS = _.RESOURCE_DEFINITIONS;
15
+ export const NETWORK_RESOURCE_TYPES = _.RESOURCE_TYPES;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvbmV0d29yay9zcmMvbGliL3R5cGVzL3Jlc291cmNlLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QyxlQUFlLEVBQUU7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxjQUFjO0tBQ3pCO0lBQ0Qsa0JBQWtCLEVBQUU7UUFDbEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxRQUFRLEVBQUUsY0FBYztLQUN6QjtDQUNPLENBQUM7QUFFWCxNQUFNLENBQUMsR0FBRyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztBQUNuRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVzb3VyY2VEZWZpbml0aW9ucyB9IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IEtVQkVfT1ZOX0dST1VQID0gJ2t1YmVvdm4uaW8nO1xuXG5leHBvcnQgY29uc3QgTmV0d29ya1Jlc291cmNlRGVmaW5pdGlvbnMgPSB7XG4gIFNVQk5FVF9LVUJFX09WTjoge1xuICAgIHR5cGU6ICdzdWJuZXRzJyxcbiAgICBhcGlHcm91cDogS1VCRV9PVk5fR1JPVVAsXG4gIH0sXG4gIFNVQk5FVF9LVUJFX09WTl9JUDoge1xuICAgIHR5cGU6ICdpcHMnLFxuICAgIGFwaUdyb3VwOiBLVUJFX09WTl9HUk9VUCxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IF8gPSBjcmVhdGVSZXNvdXJjZURlZmluaXRpb25zKE5ldHdvcmtSZXNvdXJjZURlZmluaXRpb25zKTtcblxuZXhwb3J0IGNvbnN0IE5FVFdPUktfUkVTT1VSQ0VfREVGSU5JVElPTlMgPSBfLlJFU09VUkNFX0RFRklOSVRJT05TO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfUkVTT1VSQ0VfVFlQRVMgPSBfLlJFU09VUkNFX1RZUEVTO1xuIl19
@@ -0,0 +1,108 @@
1
+ import { toUnitNumM, toUnitMi, IP_PATTERN_BASE, } from '@alauda-fe/common';
2
+ import { sortBy, union } from 'lodash-es';
3
+ import { SpecModel, } from '../types/alb-exports';
4
+ const DEFINED_RESOURCE_LIMITS = [
5
+ {
6
+ specModel: SpecModel.SMALL,
7
+ resourceLimit: {
8
+ cpu: {
9
+ value: 200,
10
+ unit: 'm',
11
+ },
12
+ memory: {
13
+ value: 256,
14
+ unit: 'Mi',
15
+ },
16
+ },
17
+ },
18
+ {
19
+ specModel: SpecModel.MEDIUM,
20
+ resourceLimit: {
21
+ cpu: {
22
+ value: 2,
23
+ unit: 'core',
24
+ },
25
+ memory: {
26
+ value: 1,
27
+ unit: 'Gi',
28
+ },
29
+ },
30
+ },
31
+ {
32
+ specModel: SpecModel.LARGE,
33
+ resourceLimit: {
34
+ cpu: {
35
+ value: 4,
36
+ unit: 'core',
37
+ },
38
+ memory: {
39
+ value: 2,
40
+ unit: 'Gi',
41
+ },
42
+ },
43
+ },
44
+ ];
45
+ export const formatResourceLimit = ({ value, unit, }) => value || value === 0 ? value + (unit === 'core' ? '' : unit) : undefined;
46
+ export const parseResourceLimit = (plainResourceLimit = {}) => {
47
+ const { cpu, memory } = plainResourceLimit;
48
+ const resourceLimitModel = DEFINED_RESOURCE_LIMITS.find(({ resourceLimit }) => cpu === formatResourceLimit(resourceLimit.cpu) &&
49
+ memory === formatResourceLimit(resourceLimit.memory));
50
+ return {
51
+ specModel: resourceLimitModel?.specModel || SpecModel.CUSTOMIZE,
52
+ resourceLimit: plainResourceLimit,
53
+ };
54
+ };
55
+ export const RESOURCE_LIMIT_MAPPER = DEFINED_RESOURCE_LIMITS.reduce((acc, curr) => {
56
+ acc[curr.specModel] = curr.resourceLimit;
57
+ return acc;
58
+ }, {});
59
+ export function getResourceLimit(resource) {
60
+ const resources = resource?.spec?.config?.resources;
61
+ const { specModel, resourceLimit } = parseResourceLimit(resources?.limits || resources?.requests);
62
+ if (specModel !== SpecModel.CUSTOMIZE) {
63
+ return {
64
+ specModel,
65
+ resourceLimit: RESOURCE_LIMIT_MAPPER[specModel],
66
+ };
67
+ }
68
+ const cpuMValue = parseInt(toUnitNumM(resourceLimit.cpu));
69
+ const memoryMiValue = parseInt(toUnitMi(resourceLimit.memory));
70
+ const cpuCoreValue = cpuMValue / 1000;
71
+ const isCore = Number.isNaN(cpuCoreValue) || cpuCoreValue === Math.floor(cpuCoreValue);
72
+ const memoryGiValue = memoryMiValue / 1024;
73
+ const isGi = Number.isNaN(memoryGiValue) || memoryGiValue === Math.floor(memoryGiValue);
74
+ return {
75
+ specModel,
76
+ resourceLimit: {
77
+ cpu: {
78
+ value: cpuMValue === 0 ? 0 : (isCore ? cpuCoreValue : cpuMValue) || null,
79
+ unit: isCore ? 'core' : 'm',
80
+ },
81
+ memory: {
82
+ value: memoryMiValue === 0
83
+ ? 0
84
+ : (isGi ? memoryGiValue : memoryMiValue) || null,
85
+ unit: isGi ? 'Gi' : 'Mi',
86
+ },
87
+ },
88
+ };
89
+ }
90
+ export const METALLB = 'metallb';
91
+ export const METALLB_NS = `${METALLB}-system`;
92
+ export function parseAddresses(alb2) {
93
+ const ipAddress = [
94
+ ...(alb2?.status?.detail?.address?.host ?? []),
95
+ ...(alb2?.status?.detail?.address?.ipv4 ?? []),
96
+ ...(alb2?.status?.detail?.address?.ipv6 ?? []),
97
+ ...(alb2?.spec?.address ? alb2?.spec?.address?.split(',') : []),
98
+ ];
99
+ return union(ipAddress);
100
+ }
101
+ export function getAddressPriority(address) {
102
+ const reg = new RegExp(IP_PATTERN_BASE);
103
+ return address.includes(':') ? 2 : reg.test(address) ? 1 : 0;
104
+ }
105
+ export function sortAddressesByPriority(addresses) {
106
+ return sortBy(addresses, getAddressPriority);
107
+ }
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi91dGlscy9hbGItZXhwb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixlQUFlLEdBRWhCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUMsT0FBTyxFQUVMLFNBQVMsR0FFVixNQUFNLHNCQUFzQixDQUFDO0FBSzlCLE1BQU0sdUJBQXVCLEdBQTRCO0lBQ3ZEO1FBQ0UsU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLO1FBQzFCLGFBQWEsRUFBRTtZQUNiLEdBQUcsRUFBRTtnQkFDSCxLQUFLLEVBQUUsR0FBRztnQkFDVixJQUFJLEVBQUUsR0FBRzthQUNWO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRSxHQUFHO2dCQUNWLElBQUksRUFBRSxJQUFJO2FBQ1g7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDM0IsYUFBYSxFQUFFO1lBQ2IsR0FBRyxFQUFFO2dCQUNILEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxNQUFNO2FBQ2I7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLElBQUk7YUFDWDtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSztRQUMxQixhQUFhLEVBQUU7WUFDYixHQUFHLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLE1BQU07YUFDYjtZQUNELE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsSUFBSTthQUNYO1NBQ0Y7S0FDRjtDQUNGLENBQUM7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TyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBbUI7SUFDekQsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRvVW5pdE51bU0sXG4gIHRvVW5pdE1pLFxuICBJUF9QQVRURVJOX0JBU0UsXG4gIExvb3NlVmFsdWVPZixcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgc29ydEJ5LCB1bmlvbiB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7XG4gIFBsYWluUmVzb3VyY2VMaW1pdCxcbiAgU3BlY01vZGVsLFxuICBBbGJSZXNvdXJjZUxpbWl0TW9kZWwsXG59IGZyb20gJy4uL3R5cGVzL2FsYi1leHBvcnRzJztcbmltcG9ydCB7IEFMQjIgfSBmcm9tICcuLi90eXBlcy9rOHMtZXhwb3J0cyc7XG5cbmltcG9ydCB7IFJlc291cmNlTGltaXQgfSBmcm9tICcuL2FsYi1pbnRlcm5hbHMnO1xuXG5jb25zdCBERUZJTkVEX1JFU09VUkNFX0xJTUlUUzogQWxiUmVzb3VyY2VMaW1pdE1vZGVsW10gPSBbXG4gIHtcbiAgICBzcGVjTW9kZWw6IFNwZWNNb2RlbC5TTUFMTCxcbiAgICByZXNvdXJjZUxpbWl0OiB7XG4gICAgICBjcHU6IHtcbiAgICAgICAgdmFsdWU6IDIwMCxcbiAgICAgICAgdW5pdDogJ20nLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeToge1xuICAgICAgICB2YWx1ZTogMjU2LFxuICAgICAgICB1bml0OiAnTWknLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgc3BlY01vZGVsOiBTcGVjTW9kZWwuTUVESVVNLFxuICAgIHJlc291cmNlTGltaXQ6IHtcbiAgICAgIGNwdToge1xuICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgdW5pdDogJ2NvcmUnLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeToge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgdW5pdDogJ0dpJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHNwZWNNb2RlbDogU3BlY01vZGVsLkxBUkdFLFxuICAgIHJlc291cmNlTGltaXQ6IHtcbiAgICAgIGNwdToge1xuICAgICAgICB2YWx1ZTogNCxcbiAgICAgICAgdW5pdDogJ2NvcmUnLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeToge1xuICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgdW5pdDogJ0dpJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRSZXNvdXJjZUxpbWl0ID0gKHtcbiAgdmFsdWUsXG4gIHVuaXQsXG59OiBMb29zZVZhbHVlT2Y8UmVzb3VyY2VMaW1pdD4pID0+XG4gIHZhbHVlIHx8IHZhbHVlID09PSAwID8gdmFsdWUgKyAodW5pdCA9PT0gJ2NvcmUnID8gJycgOiB1bml0KSA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IHBhcnNlUmVzb3VyY2VMaW1pdCA9IChcbiAgcGxhaW5SZXNvdXJjZUxpbWl0OiBQbGFpblJlc291cmNlTGltaXQgPSB7fSxcbik6IHtcbiAgc3BlY01vZGVsOiBTcGVjTW9kZWw7XG4gIHJlc291cmNlTGltaXQ6IFBsYWluUmVzb3VyY2VMaW1pdDtcbn0gPT4ge1xuICBjb25zdCB7IGNwdSwgbWVtb3J5IH0gPSBwbGFpblJlc291cmNlTGltaXQ7XG5cbiAgY29uc3QgcmVzb3VyY2VMaW1pdE1vZGVsID0gREVGSU5FRF9SRVNPVVJDRV9MSU1JVFMuZmluZChcbiAgICAoeyByZXNvdXJjZUxpbWl0IH0pID0+XG4gICAgICBjcHUgPT09IGZvcm1hdFJlc291cmNlTGltaXQocmVzb3VyY2VMaW1pdC5jcHUpICYmXG4gICAgICBtZW1vcnkgPT09IGZvcm1hdFJlc291cmNlTGltaXQocmVzb3VyY2VMaW1pdC5tZW1vcnkpLFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgc3BlY01vZGVsOiByZXNvdXJjZUxpbWl0TW9kZWw/LnNwZWNNb2RlbCB8fCBTcGVjTW9kZWwuQ1VTVE9NSVpFLFxuICAgIHJlc291cmNlTGltaXQ6IHBsYWluUmVzb3VyY2VMaW1pdCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBSRVNPVVJDRV9MSU1JVF9NQVBQRVIgPSBERUZJTkVEX1JFU09VUkNFX0xJTUlUUy5yZWR1Y2U8XG4gIFBhcnRpYWw8UmVjb3JkPFNwZWNNb2RlbCwgUmVzb3VyY2VMaW1pdD4+XG4+KChhY2MsIGN1cnIpID0+IHtcbiAgYWNjW2N1cnIuc3BlY01vZGVsXSA9IGN1cnIucmVzb3VyY2VMaW1pdDtcbiAgcmV0dXJuIGFjYztcbn0sIHt9KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlTGltaXQocmVzb3VyY2U6IEFMQjIpOiBBbGJSZXNvdXJjZUxpbWl0TW9kZWwge1xuICBjb25zdCByZXNvdXJjZXMgPSByZXNvdXJjZT8uc3BlYz8uY29uZmlnPy5yZXNvdXJjZXM7XG5cbiAgY29uc3QgeyBzcGVjTW9kZWwsIHJlc291cmNlTGltaXQgfSA9IHBhcnNlUmVzb3VyY2VMaW1pdChcbiAgICByZXNvdXJjZXM/LmxpbWl0cyB8fCByZXNvdXJjZXM/LnJlcXVlc3RzLFxuICApO1xuXG4gIGlmIChzcGVjTW9kZWwgIT09IFNwZWNNb2RlbC5DVVNUT01JWkUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3BlY01vZGVsLFxuICAgICAgcmVzb3VyY2VMaW1pdDogUkVTT1VSQ0VfTElNSVRfTUFQUEVSW3NwZWNNb2RlbF0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNwdU1WYWx1ZSA9IHBhcnNlSW50KHRvVW5pdE51bU0ocmVzb3VyY2VMaW1pdC5jcHUpKTtcbiAgY29uc3QgbWVtb3J5TWlWYWx1ZSA9IHBhcnNlSW50KHRvVW5pdE1pKHJlc291cmNlTGltaXQubWVtb3J5KSk7XG5cbiAgY29uc3QgY3B1Q29yZVZhbHVlID0gY3B1TVZhbHVlIC8gMTAwMDtcbiAgY29uc3QgaXNDb3JlID1cbiAgICBOdW1iZXIuaXNOYU4oY3B1Q29yZVZhbHVlKSB8fCBjcHVDb3JlVmFsdWUgPT09IE1hdGguZmxvb3IoY3B1Q29yZVZhbHVlKTtcblxuICBjb25zdCBtZW1vcnlHaVZhbHVlID0gbWVtb3J5TWlWYWx1ZSAvIDEwMjQ7XG4gIGNvbnN0IGlzR2kgPVxuICAgIE51bWJlci5pc05hTihtZW1vcnlHaVZhbHVlKSB8fCBtZW1vcnlHaVZhbHVlID09PSBNYXRoLmZsb29yKG1lbW9yeUdpVmFsdWUpO1xuXG4gIHJldHVybiB7XG4gICAgc3BlY01vZGVsLFxuICAgIHJlc291cmNlTGltaXQ6IHtcbiAgICAgIGNwdToge1xuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBjcHVNVmFsdWUgPT09IDAgPyAwIDogKGlzQ29yZSA/IGNwdUNvcmVWYWx1ZSA6IGNwdU1WYWx1ZSkgfHwgbnVsbCxcbiAgICAgICAgdW5pdDogaXNDb3JlID8gJ2NvcmUnIDogJ20nLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeToge1xuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBtZW1vcnlNaVZhbHVlID09PSAwXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogKGlzR2kgPyBtZW1vcnlHaVZhbHVlIDogbWVtb3J5TWlWYWx1ZSkgfHwgbnVsbCxcbiAgICAgICAgdW5pdDogaXNHaSA/ICdHaScgOiAnTWknLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgTUVUQUxMQiA9ICdtZXRhbGxiJztcbmV4cG9ydCBjb25zdCBNRVRBTExCX05TID0gYCR7TUVUQUxMQn0tc3lzdGVtYCBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWRkcmVzc2VzKGFsYjI6IEFMQjIpIHtcbiAgY29uc3QgaXBBZGRyZXNzID0gW1xuICAgIC4uLihhbGIyPy5zdGF0dXM/LmRldGFpbD8uYWRkcmVzcz8uaG9zdCA/PyBbXSksXG4gICAgLi4uKGFsYjI/LnN0YXR1cz8uZGV0YWlsPy5hZGRyZXNzPy5pcHY0ID8/IFtdKSxcbiAgICAuLi4oYWxiMj8uc3RhdHVzPy5kZXRhaWw/LmFkZHJlc3M/LmlwdjYgPz8gW10pLFxuICAgIC4uLihhbGIyPy5zcGVjPy5hZGRyZXNzID8gYWxiMj8uc3BlYz8uYWRkcmVzcz8uc3BsaXQoJywnKSA6IFtdKSxcbiAgXTtcbiAgcmV0dXJuIHVuaW9uKGlwQWRkcmVzcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzUHJpb3JpdHkoYWRkcmVzczogc3RyaW5nKSB7XG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoSVBfUEFUVEVSTl9CQVNFKTtcbiAgcmV0dXJuIGFkZHJlc3MuaW5jbHVkZXMoJzonKSA/IDIgOiByZWcudGVzdChhZGRyZXNzKSA/IDEgOiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEFkZHJlc3Nlc0J5UHJpb3JpdHkoYWRkcmVzc2VzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gc29ydEJ5KGFkZHJlc3NlcywgZ2V0QWRkcmVzc1ByaW9yaXR5KTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWludGVybmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvbmV0d29yay9zcmMvbGliL3V0aWxzL2FsYi1pbnRlcm5hbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VMaW1pdCB7XG4gIGNwdToge1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgdW5pdDogJ2NvcmUnIHwgJ20nO1xuICB9O1xuICBtZW1vcnk6IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIHVuaXQ6ICdHaScgfCAnTWknO1xuICB9O1xufVxuIl19