@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,359 @@
1
+ import { INT_ZERO_PATTERN, IP_ADDRESS_PATTERN, IP_V6_ADDRESS_PATTERN, } from '@alauda-fe/common';
2
+ import { Address4, Address6 } from 'ip-address';
3
+ import { BigInteger } from 'jsbn';
4
+ /**
5
+ * note: we don't use enum here because ts do not support extends enum for now
6
+ * @link https://github.com/microsoft/TypeScript/issues/17592
7
+ */
8
+ export const IPMode = {
9
+ IPV4: 'v4',
10
+ IPV6: 'v6',
11
+ };
12
+ export const AddressTypes = {
13
+ ADVERTISE: 'Advertise',
14
+ PUBLIC: 'Public',
15
+ };
16
+ export const IP_MODES = [IPMode.IPV4, IPMode.IPV6];
17
+ export const IP_MODE_TEXTS = {
18
+ [IPMode.IPV4]: 'IPv4',
19
+ [IPMode.IPV6]: 'IPv6',
20
+ };
21
+ export const NetworkMode = {
22
+ ...IPMode,
23
+ DUAL: 'dual',
24
+ };
25
+ /**
26
+ * @param {string} cidrStr cidrBlock, e.g. 10.16.0.0/24 may support ipv6
27
+ * @param {string} ipStr specific ip, e.g. 10.16.1.2 may support ipv6
28
+ * @param {IPMode} ipMode ip network mode ipv4/ipv6
29
+ * @return {boolean} whether ip belongs to cidr
30
+ */
31
+ export function isBelongCidr(cidrStr, ipStr, ipMode = IPMode.IPV4) {
32
+ if (!isCidrAddressValid(cidrStr, ipMode) ||
33
+ !isIpAddressValid(ipStr, ipMode)) {
34
+ return false;
35
+ }
36
+ const Builder = getAddressBuilder(ipMode);
37
+ const ip = new Builder(ipStr);
38
+ const cidr = new Builder(cidrStr);
39
+ return ip.isInSubnet(cidr);
40
+ }
41
+ /**
42
+ * @param {string} ip specific ip, e.g. 10.16.1.2
43
+ * @param {string} cidr specific cidr which ip may belongs to, e.g. 10.16.0.0/24
44
+ * @return {boolean} whether ip is broadcast address
45
+ */
46
+ export function isBroadcastAddr(ipStr, cidrStr, ipMode = IPMode.IPV4) {
47
+ // IPV6 无广播地址概念
48
+ if (ipMode === IPMode.IPV6) {
49
+ return false;
50
+ }
51
+ if (!cidrStr) {
52
+ return ipStr === '255.255.255.255';
53
+ }
54
+ try {
55
+ const cidr = new Address4(cidrStr);
56
+ // 子网中的最后一位
57
+ return ipStr === cidr.endAddress().address;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ export function isLoopback(ipStr, ipMode = IPMode.IPV4) {
64
+ const cidr = ipMode === IPMode.IPV4 ? '127.0.0.0/8' : '::1/128';
65
+ return isBelongCidr(cidr, ipStr, ipMode);
66
+ }
67
+ export function isMultiBroadcast(ipStr, ipMode = IPMode.IPV4) {
68
+ const cidr = ipMode === IPMode.IPV4 ? '224.0.0.0/4' : 'ff00::/8';
69
+ return isBelongCidr(cidr, ipStr, ipMode);
70
+ }
71
+ export function isLinkLocal(ipStr, ipMode = IPMode.IPV4) {
72
+ const cidr = ipMode === IPMode.IPV4 ? '169.254.0.0/16' : 'fe80::/10';
73
+ return isBelongCidr(cidr, ipStr, ipMode);
74
+ }
75
+ export function isAllZero(ipStr, ipMode = IPMode.IPV4) {
76
+ const cidr = ipMode === IPMode.IPV4 ? '0.0.0.0/32' : '::/128';
77
+ return isBelongCidr(cidr, ipStr, ipMode);
78
+ }
79
+ export function isNetworkAddr(ipStr, cidrStr, ipMode = IPMode.IPV4) {
80
+ if (!cidrStr) {
81
+ return ipStr === '0.0.0.0';
82
+ }
83
+ const Builder = getAddressBuilder(ipMode);
84
+ try {
85
+ const cidr = new Builder(cidrStr);
86
+ // 子网中的最后一位
87
+ return ipStr === cidr.startAddress().address;
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ /**
94
+ * @param {string} cidrAStr cidrBlock A, e.g. 10.16.0.0/24. support IPv6
95
+ * @param {string} cidrBStr cidrBlock B, e.g. 10.10.0.0/16. support IPv6
96
+ * @param {IPMode} ipMode ipMode, v4 or v6
97
+ * @return {boolean} whether 2 cidr blocks may conflict, judge by whether ip belongs to cidrBlock A may also belongs to B
98
+ */
99
+ export function isCidrConflict(cidrAStr, cidrBStr, ipMode = IPMode.IPV4) {
100
+ const Builder = getAddressBuilder(ipMode);
101
+ try {
102
+ const cidrA = new Builder(cidrAStr);
103
+ const cidrB = new Builder(cidrBStr);
104
+ const cidrAFrom = cidrA.startAddress();
105
+ const cidrAEnd = cidrA.endAddress();
106
+ const cidrBFrom = cidrB.startAddress();
107
+ const cidrBEnd = cidrB.endAddress();
108
+ return (cidrAFrom.isInSubnet(cidrB) ||
109
+ cidrAEnd.isInSubnet(cidrB) ||
110
+ cidrBFrom.isInSubnet(cidrA) ||
111
+ cidrBEnd.isInSubnet(cidrA));
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ // whether cidrA contains cidrB (cidrA > cidrB)
118
+ export function isCidrContain(cidrAStr, cidrBStr, ipMode = IPMode.IPV4) {
119
+ const Builder = getAddressBuilder(ipMode);
120
+ try {
121
+ const cidrA = new Builder(cidrAStr);
122
+ const cidrB = new Builder(cidrBStr);
123
+ const cidrBFrom = cidrB.startAddress();
124
+ const cidrBEnd = cidrB.endAddress();
125
+ return cidrBFrom.isInSubnet(cidrA) && cidrBEnd.isInSubnet(cidrA);
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ export function getAddressBuilder(ipMode) {
132
+ return ipMode === IPMode.IPV6 ? Address6 : Address4;
133
+ }
134
+ export const parseCIDR = (address, ipMode = IPMode.IPV4) => {
135
+ const Builder = getAddressBuilder(ipMode);
136
+ try {
137
+ return new Builder(address);
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ };
143
+ export function ipAddressEqual(ipAStr, ipBStr, ipMode = IPMode.IPV4) {
144
+ if (ipAStr === ipBStr) {
145
+ return true;
146
+ }
147
+ if (ipMode === IPMode.IPV4) {
148
+ return false;
149
+ }
150
+ try {
151
+ const ipA = new Address6(ipAStr);
152
+ const ipB = new Address6(ipBStr);
153
+ return ipA.bigInteger().equals(ipB.bigInteger());
154
+ }
155
+ catch {
156
+ return false;
157
+ }
158
+ }
159
+ export function isIpAddressValid(address, ipMode = IPMode.IPV4) {
160
+ const Builder = getAddressBuilder(ipMode);
161
+ try {
162
+ const ip = new Builder(address);
163
+ return !ip.address.includes('/');
164
+ }
165
+ catch {
166
+ return false;
167
+ }
168
+ }
169
+ export function isCidrAddressValid(address, ipMode = IPMode.IPV4) {
170
+ const cidr = parseCIDR(address, ipMode);
171
+ return !!cidr?.address.includes('/');
172
+ }
173
+ export function getCidrType(ip) {
174
+ return isIpv6(ip?.split('/')?.[0]) ? IPMode.IPV6 : IPMode.IPV4;
175
+ }
176
+ export function isIpv4(value) {
177
+ return IP_ADDRESS_PATTERN.pattern.test(value);
178
+ }
179
+ export function isIpv6(value) {
180
+ return IP_V6_ADDRESS_PATTERN.pattern.test(value);
181
+ }
182
+ export function ipAddress(value) {
183
+ if (!value) {
184
+ return '';
185
+ }
186
+ return isIpv4(value) ? value : `[${value}]`;
187
+ }
188
+ export function getStrictCidr(cidrStr, ipMode) {
189
+ if (!cidrStr) {
190
+ return cidrStr;
191
+ }
192
+ const Builder = getAddressBuilder(ipMode);
193
+ try {
194
+ const cidr = new Builder(cidrStr);
195
+ return [cidr.startAddress().address, cidr.subnet].join('');
196
+ }
197
+ catch {
198
+ return '';
199
+ }
200
+ }
201
+ export const parseSegment = (segment, networkMode) => {
202
+ if (!segment) {
203
+ return {};
204
+ }
205
+ if (networkMode === NetworkMode.IPV4) {
206
+ return {
207
+ ipV4Segment: segment,
208
+ };
209
+ }
210
+ if (networkMode === NetworkMode.IPV6) {
211
+ return {
212
+ ipV6Segment: segment,
213
+ };
214
+ }
215
+ let ipV4Segment;
216
+ let ipV6Segment;
217
+ if (segment.includes(',')) {
218
+ [ipV4Segment, ipV6Segment] = segment.split(',');
219
+ }
220
+ else if (segment.includes(':')) {
221
+ ipV6Segment = segment;
222
+ }
223
+ else {
224
+ ipV4Segment = segment;
225
+ }
226
+ return {
227
+ ipV4Segment,
228
+ ipV6Segment,
229
+ };
230
+ };
231
+ export function getCidrBlock(param, networkMode) {
232
+ let ipV4Segment;
233
+ let ipV6Segment;
234
+ if (typeof param === 'string') {
235
+ const _ = parseSegment(param, networkMode);
236
+ ipV4Segment = _.ipV4Segment;
237
+ ipV6Segment = _.ipV6Segment;
238
+ }
239
+ else {
240
+ ipV4Segment = param.ipV4Segment;
241
+ ipV6Segment = param.ipV6Segment;
242
+ }
243
+ return [
244
+ getStrictCidr(ipV4Segment, IPMode.IPV4),
245
+ getStrictCidr(ipV6Segment, IPMode.IPV6),
246
+ ]
247
+ .filter(Boolean)
248
+ .join(',');
249
+ }
250
+ export const DEFAULT_IPV4_MAX_CIDR_PREFIX = 31;
251
+ export const DEFAULT_IPV6_MAX_CIDR_PREFIX = 127;
252
+ export const DEFAULT_NETWORK_CIDR_PREFIX_MAPPER = {
253
+ [IPMode.IPV4]: DEFAULT_IPV4_MAX_CIDR_PREFIX,
254
+ [IPMode.IPV6]: DEFAULT_IPV6_MAX_CIDR_PREFIX,
255
+ };
256
+ export function getCidrMaximumPrefix(ipMode = IPMode.IPV4) {
257
+ return DEFAULT_NETWORK_CIDR_PREFIX_MAPPER[ipMode];
258
+ }
259
+ export const adaptIpMode = (value, networkMode) => networkMode === NetworkMode.DUAL
260
+ ? value.includes(':')
261
+ ? NetworkMode.IPV6
262
+ : NetworkMode.IPV4
263
+ : networkMode;
264
+ export const isIpPartValid = (part, isIpV4) => {
265
+ if (part === '') {
266
+ return true;
267
+ }
268
+ if (isIpV4) {
269
+ if (INT_ZERO_PATTERN.pattern.test(part)) {
270
+ return Number(part) <= 255;
271
+ }
272
+ return false;
273
+ }
274
+ if (/^[\da-f]+$/i.test(part)) {
275
+ return Number.parseInt(part, 16) <= 65535;
276
+ }
277
+ return false;
278
+ };
279
+ export const isIpPartsValid = (parts, isIpV4) => parts.every(part => isIpPartValid(part, isIpV4));
280
+ export const isIpInputValid = (input, isIpV4) => {
281
+ const parts = input.split(isIpV4 ? '.' : ':');
282
+ return parts.length <= (isIpV4 ? 4 : 8) && isIpPartsValid(parts, isIpV4);
283
+ };
284
+ export const getIpAddressSuggestionsByCidrs = (cidrs, networkMode, usedIps, inputValue, isCalico, maxSize = 10) => {
285
+ inputValue = inputValue ?? '';
286
+ const start = performance.now();
287
+ const result = [];
288
+ const usedIpValues = [
289
+ ...usedIps.reduce((ipValues, ip) => {
290
+ const Builder = getAddressBuilder(adaptIpMode(ip, networkMode));
291
+ try {
292
+ ipValues.add(new Builder(ip).bigInteger());
293
+ }
294
+ catch { }
295
+ return ipValues;
296
+ }, new Set()),
297
+ ];
298
+ for (const cidr of cidrs) {
299
+ const ipMode = adaptIpMode(cidr, networkMode);
300
+ const isIpV4 = ipMode === IPMode.IPV4;
301
+ if (!isIpInputValid(inputValue, isIpV4)) {
302
+ break;
303
+ }
304
+ const loopStart = performance.now();
305
+ const Builder = getAddressBuilder(ipMode);
306
+ let ipCidr;
307
+ try {
308
+ ipCidr = new Builder(cidr);
309
+ }
310
+ catch {
311
+ continue;
312
+ }
313
+ const startAddress = ipCidr._startAddress();
314
+ const endAddress = ipCidr._endAddress();
315
+ // 非 calico 模式下,不允许使用网段的第一个网络 IP 和最后一个 广播 IP
316
+ let address = startAddress.add(isCalico ? BigInteger.ZERO : BigInteger.ONE);
317
+ while (address.compareTo(endAddress) < (isCalico ? 1 : 0)) {
318
+ const now = performance.now();
319
+ // Considering the performance, we don't want to block the UI too much
320
+ if (!isIpV4) {
321
+ if (now - loopStart > 100) {
322
+ break;
323
+ }
324
+ if (now - start > 250) {
325
+ return result;
326
+ }
327
+ }
328
+ if (!usedIpValues.some(ip => !ip.compareTo(address))) {
329
+ const ipAddr = Builder.fromBigInteger(address).correctForm();
330
+ if (ipAddr.includes(inputValue)) {
331
+ result.push(ipAddr);
332
+ if (result.length >= maxSize) {
333
+ return result;
334
+ }
335
+ }
336
+ }
337
+ address = address.add(BigInteger.ONE);
338
+ }
339
+ }
340
+ return result;
341
+ };
342
+ export function adaptSubnetCidrs(cidrs, networkMode, enableFixIpV6ForDual = false) {
343
+ return cidrs
344
+ ?.split(';')
345
+ .map(cidr => parseSegment(cidr))
346
+ .reduce((list, item) => {
347
+ list.push(item.ipV4Segment, (networkMode !== NetworkMode.DUAL || enableFixIpV6ForDual) &&
348
+ item.ipV6Segment);
349
+ return list;
350
+ }, [])
351
+ .filter(Boolean);
352
+ }
353
+ // return true if ipBegin > ipEnd
354
+ export function invalidIpOrder(ipBegin, ipEnd) {
355
+ const ipBeginBigInt = ipBegin.bigInteger();
356
+ const ipEndBigInt = ipEnd.bigInteger();
357
+ return ipBeginBigInt.compareTo(ipEndBigInt) >= 0;
358
+ }
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lkci1leHBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvdXRpbHMvY2lkci1leHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixHQUV0QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPbEM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxJQUFJO0lBQ1YsSUFBSSxFQUFFLElBQUk7Q0FDRixDQUFDO0FBSVgsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLE1BQU0sRUFBRSxRQUFRO0NBQ1IsQ0FBQztBQUlYLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBVSxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07Q0FDYixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLEdBQUcsTUFBTTtJQUNULElBQUksRUFBRSxNQUFNO0NBQ0osQ0FBQztBQUlYOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsT0FBZSxFQUNmLEtBQWEsRUFDYixTQUFpQixNQUFNLENBQUMsSUFBSTtJQUU1QixJQUNFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FB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O1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLFdBQVcsRUFDaEIsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLElBQUksSUFBSSxvQkFBb0IsQ0FBQztZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBYyxDQUFDO1NBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLE1BQU0sVUFBVSxjQUFjLENBQzVCLE9BQVUsRUFDVixLQUFRO0lBRVIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QyxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJTlRfWkVST19QQVRURVJOLFxuICBJUF9BRERSRVNTX1BBVFRFUk4sXG4gIElQX1Y2X0FERFJFU1NfUEFUVEVSTixcbiAgVmFsdWVPZixcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgQWRkcmVzczQsIEFkZHJlc3M2IH0gZnJvbSAnaXAtYWRkcmVzcyc7XG5pbXBvcnQgeyBCaWdJbnRlZ2VyIH0gZnJvbSAnanNibic7XG5cbmludGVyZmFjZSBTZWdtZW50TW9kZWwge1xuICBpcFY0U2VnbWVudD86IHN0cmluZztcbiAgaXBWNlNlZ21lbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogbm90ZTogd2UgZG9uJ3QgdXNlIGVudW0gaGVyZSBiZWNhdXNlIHRzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZHMgZW51bSBmb3Igbm93XG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3NTkyXG4gKi9cbmV4cG9ydCBjb25zdCBJUE1vZGUgPSB7XG4gIElQVjQ6ICd2NCcsXG4gIElQVjY6ICd2NicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBJUE1vZGUgPSBWYWx1ZU9mPHR5cGVvZiBJUE1vZGU+O1xuXG5leHBvcnQgY29uc3QgQWRkcmVzc1R5cGVzID0ge1xuICBBRFZFUlRJU0U6ICdBZHZlcnRpc2UnLFxuICBQVUJMSUM6ICdQdWJsaWMnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQWRkcmVzc1R5cGVzID0gVmFsdWVPZjx0eXBlb2YgQWRkcmVzc1R5cGVzPjtcblxuZXhwb3J0IGNvbnN0IElQX01PREVTID0gW0lQTW9kZS5JUFY0LCBJUE1vZGUuSVBWNl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBJUF9NT0RFX1RFWFRTID0ge1xuICBbSVBNb2RlLklQVjRdOiAnSVB2NCcsXG4gIFtJUE1vZGUuSVBWNl06ICdJUHY2Jyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBOZXR3b3JrTW9kZSA9IHtcbiAgLi4uSVBNb2RlLFxuICBEVUFMOiAnZHVhbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBOZXR3b3JrTW9kZSA9IFZhbHVlT2Y8dHlwZW9mIE5ldHdvcmtNb2RlPjtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2lkclN0ciBjaWRyQmxvY2ssIGUuZy4gMTAuMTYuMC4wLzI0IG1heSBzdXBwb3J0IGlwdjZcbiAqIEBwYXJhbSB7c3RyaW5nfSBpcFN0ciBzcGVjaWZpYyBpcCwgZS5nLiAxMC4xNi4xLjIgbWF5IHN1cHBvcnQgaXB2NlxuICogQHBhcmFtIHtJUE1vZGV9IGlwTW9kZSBpcCBuZXR3b3JrIG1vZGUgaXB2NC9pcHY2XG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIGlwIGJlbG9uZ3MgdG8gY2lkclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCZWxvbmdDaWRyKFxuICBjaWRyU3RyOiBzdHJpbmcsXG4gIGlwU3RyOiBzdHJpbmcsXG4gIGlwTW9kZTogSVBNb2RlID0gSVBNb2RlLklQVjQsXG4pOiBib29sZWFuIHtcbiAgaWYgKFxuICAgICFpc0NpZHJBZGRyZXNzVmFsaWQoY2lkclN0ciwgaXBNb2RlKSB8fFxuICAgICFpc0lwQWRkcmVzc1ZhbGlkKGlwU3RyLCBpcE1vZGUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IEJ1aWxkZXIgPSBnZXRBZGRyZXNzQnVpbGRlcihpcE1vZGUpO1xuICBjb25zdCBpcCA9IG5ldyBCdWlsZGVyKGlwU3RyKTtcbiAgY29uc3QgY2lkciA9IG5ldyBCdWlsZGVyKGNpZHJTdHIpO1xuICByZXR1cm4gaXAuaXNJblN1Ym5ldChjaWRyKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaXAgc3BlY2lmaWMgaXAsIGUuZy4gMTAuMTYuMS4yXG4gKiBAcGFyYW0ge3N0cmluZ30gY2lkciBzcGVjaWZpYyBjaWRyIHdoaWNoIGlwIG1heSBiZWxvbmdzIHRvLCBlLmcuIDEwLjE2LjAuMC8yNFxuICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciBpcCBpcyBicm9hZGNhc3QgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCcm9hZGNhc3RBZGRyKFxuICBpcFN0cjogc3RyaW5nLFxuICBjaWRyU3RyPzogc3RyaW5nLFxuICBpcE1vZGU6IElQTW9kZSA9IElQTW9kZS5JUFY0LFxuKTogYm9vbGVhbiB7XG4gIC8vIElQVjYg5peg5bm/5pKt5Zyw5Z2A5qaC5b+1XG4gIGlmIChpcE1vZGUgPT09IElQTW9kZS5JUFY2KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghY2lkclN0cikge1xuICAgIHJldHVybiBpcFN0ciA9PT0gJzI1NS4yNTUuMjU1LjI1NSc7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBjaWRyID0gbmV3IEFkZHJlc3M0KGNpZHJTdHIpO1xuICAgIC8vIOWtkOe9keS4reeahOacgOWQjuS4gOS9jVxuICAgIHJldHVybiBpcFN0ciA9PT0gY2lkci5lbmRBZGRyZXNzKCkuYWRkcmVzcztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xvb3BiYWNrKGlwU3RyOiBzdHJpbmcsIGlwTW9kZTogSVBNb2RlID0gSVBNb2RlLklQVjQpIHtcbiAgY29uc3QgY2lkciA9IGlwTW9kZSA9PT0gSVBNb2RlLklQVjQgPyAnMTI3LjAuMC4wLzgnIDogJzo6MS8xMjgnO1xuICByZXR1cm4gaXNCZWxvbmdDaWRyKGNpZHIsIGlwU3RyLCBpcE1vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aUJyb2FkY2FzdChpcFN0cjogc3RyaW5nLCBpcE1vZGU6IElQTW9kZSA9IElQTW9kZS5JUFY0KSB7XG4gIGNvbnN0IGNpZHIgPSBpcE1vZGUgPT09IElQTW9kZS5JUFY0ID8gJzIyNC4wLjAuMC80JyA6ICdmZjAwOjovOCc7XG4gIHJldHVybiBpc0JlbG9uZ0NpZHIoY2lkciwgaXBTdHIsIGlwTW9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpbmtMb2NhbChpcFN0cjogc3RyaW5nLCBpcE1vZGU6IElQTW9kZSA9IElQTW9kZS5JUFY0KSB7XG4gIGNvbnN0IGNpZHIgPSBpcE1vZGUgPT09IElQTW9kZS5JUFY0ID8gJzE2OS4yNTQuMC4wLzE2JyA6ICdmZTgwOjovMTAnO1xuICByZXR1cm4gaXNCZWxvbmdDaWRyKGNpZHIsIGlwU3RyLCBpcE1vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBbGxaZXJvKGlwU3RyOiBzdHJpbmcsIGlwTW9kZTogSVBNb2RlID0gSVBNb2RlLklQVjQpIHtcbiAgY29uc3QgY2lkciA9IGlwTW9kZSA9PT0gSVBNb2RlLklQVjQgPyAnMC4wLjAuMC8zMicgOiAnOjovMTI4JztcbiAgcmV0dXJuIGlzQmVsb25nQ2lkcihjaWRyLCBpcFN0ciwgaXBNb2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmV0d29ya0FkZHIoXG4gIGlwU3RyOiBzdHJpbmcsXG4gIGNpZHJTdHI/OiBzdHJpbmcsXG4gIGlwTW9kZTogSVBNb2RlID0gSVBNb2RlLklQVjQsXG4pIHtcbiAgaWYgKCFjaWRyU3RyKSB7XG4gICAgcmV0dXJuIGlwU3RyID09PSAnMC4wLjAuMCc7XG4gIH1cbiAgY29uc3QgQnVpbGRlciA9IGdldEFkZHJlc3NCdWlsZGVyKGlwTW9kZSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2lkciA9IG5ldyBCdWlsZGVyKGNpZHJTdHIpO1xuICAgIC8vIOWtkOe9keS4reeahOacgOWQjuS4gOS9jVxuICAgIHJldHVybiBpcFN0ciA9PT0gY2lkci5zdGFydEFkZHJlc3MoKS5hZGRyZXNzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2lkckFTdHIgY2lkckJsb2NrIEEsIGUuZy4gMTAuMTYuMC4wLzI0LiBzdXBwb3J0IElQdjZcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaWRyQlN0ciBjaWRyQmxvY2sgQiwgZS5nLiAxMC4xMC4wLjAvMTYuIHN1cHBvcnQgSVB2NlxuICogQHBhcmFtIHtJUE1vZGV9IGlwTW9kZSBpcE1vZGUsIHY0IG9yIHY2XG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIDIgY2lkciBibG9ja3MgbWF5IGNvbmZsaWN0LCBqdWRnZSBieSB3aGV0aGVyIGlwIGJlbG9uZ3MgdG8gY2lkckJsb2NrIEEgbWF5IGFsc28gYmVsb25ncyB0byBCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NpZHJDb25mbGljdChcbiAgY2lkckFTdHI6IHN0cmluZyxcbiAgY2lkckJTdHI6IHN0cmluZyxcbiAgaXBNb2RlOiBJUE1vZGUgPSBJUE1vZGUuSVBWNCxcbik6IGJvb2xlYW4ge1xuICBjb25zdCBCdWlsZGVyID0gZ2V0QWRkcmVzc0J1aWxkZXIoaXBNb2RlKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjaWRyQSA9IG5ldyBCdWlsZGVyKGNpZHJBU3RyKTtcbiAgICBjb25zdCBjaWRyQiA9IG5ldyBCdWlsZGVyKGNpZHJCU3RyKTtcbiAgICBjb25zdCBjaWRyQUZyb20gPSBjaWRyQS5zdGFydEFkZHJlc3MoKTtcbiAgICBjb25zdCBjaWRyQUVuZCA9IGNpZHJBLmVuZEFkZHJlc3MoKTtcbiAgICBjb25zdCBjaWRyQkZyb20gPSBjaWRyQi5zdGFydEFkZHJlc3MoKTtcbiAgICBjb25zdCBjaWRyQkVuZCA9IGNpZHJCLmVuZEFkZHJlc3MoKTtcbiAgICByZXR1cm4gKFxuICAgICAgY2lkckFGcm9tLmlzSW5TdWJuZXQoY2lkckIpIHx8XG4gICAgICBjaWRyQUVuZC5pc0luU3VibmV0KGNpZHJCKSB8fFxuICAgICAgY2lkckJGcm9tLmlzSW5TdWJuZXQoY2lkckEpIHx8XG4gICAgICBjaWRyQkVuZC5pc0luU3VibmV0KGNpZHJBKVxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyB3aGV0aGVyIGNpZHJBIGNvbnRhaW5zIGNpZHJCIChjaWRyQSA+IGNpZHJCKVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2lkckNvbnRhaW4oXG4gIGNpZHJBU3RyOiBzdHJpbmcsXG4gIGNpZHJCU3RyOiBzdHJpbmcsXG4gIGlwTW9kZTogSVBNb2RlID0gSVBNb2RlLklQVjQsXG4pIHtcbiAgY29uc3QgQnVpbGRlciA9IGdldEFkZHJlc3NCdWlsZGVyKGlwTW9kZSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2lkckEgPSBuZXcgQnVpbGRlcihjaWRyQVN0cik7XG4gICAgY29uc3QgY2lkckIgPSBuZXcgQnVpbGRlcihjaWRyQlN0cik7XG4gICAgY29uc3QgY2lkckJGcm9tID0gY2lkckIuc3RhcnRBZGRyZXNzKCk7XG4gICAgY29uc3QgY2lkckJFbmQgPSBjaWRyQi5lbmRBZGRyZXNzKCk7XG4gICAgcmV0dXJuIGNpZHJCRnJvbS5pc0luU3VibmV0KGNpZHJBKSAmJiBjaWRyQkVuZC5pc0luU3VibmV0KGNpZHJBKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzQnVpbGRlcihpcE1vZGU6IElQTW9kZSkge1xuICByZXR1cm4gaXBNb2RlID09PSBJUE1vZGUuSVBWNiA/IEFkZHJlc3M2IDogQWRkcmVzczQ7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNJRFIgPSAoYWRkcmVzczogc3RyaW5nLCBpcE1vZGU6IElQTW9kZSA9IElQTW9kZS5JUFY0KSA9PiB7XG4gIGNvbnN0IEJ1aWxkZXIgPSBnZXRBZGRyZXNzQnVpbGRlcihpcE1vZGUpO1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgQnVpbGRlcihhZGRyZXNzKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpcEFkZHJlc3NFcXVhbChcbiAgaXBBU3RyOiBzdHJpbmcsXG4gIGlwQlN0cjogc3RyaW5nLFxuICBpcE1vZGU6IElQTW9kZSA9IElQTW9kZS5JUFY0LFxuKSB7XG4gIGlmIChpcEFTdHIgPT09IGlwQlN0cikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlwTW9kZSA9PT0gSVBNb2RlLklQVjQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGlwQSA9IG5ldyBBZGRyZXNzNihpcEFTdHIpO1xuICAgIGNvbnN0IGlwQiA9IG5ldyBBZGRyZXNzNihpcEJTdHIpO1xuICAgIHJldHVybiBpcEEuYmlnSW50ZWdlcigpLmVxdWFscyhpcEIuYmlnSW50ZWdlcigpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lwQWRkcmVzc1ZhbGlkKFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIGlwTW9kZTogSVBNb2RlID0gSVBNb2RlLklQVjQsXG4pIHtcbiAgY29uc3QgQnVpbGRlciA9IGdldEFkZHJlc3NCdWlsZGVyKGlwTW9kZSk7XG4gIHRyeSB7XG4gICAgY29uc3QgaXAgPSBuZXcgQnVpbGRlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gIWlwLmFkZHJlc3MuaW5jbHVkZXMoJy8nKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NpZHJBZGRyZXNzVmFsaWQoXG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgaXBNb2RlOiBJUE1vZGUgPSBJUE1vZGUuSVBWNCxcbikge1xuICBjb25zdCBjaWRyID0gcGFyc2VDSURSKGFkZHJlc3MsIGlwTW9kZSk7XG4gIHJldHVybiAhIWNpZHI/LmFkZHJlc3MuaW5jbHVkZXMoJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENpZHJUeXBlKGlwOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGlzSXB2NihpcD8uc3BsaXQoJy8nKT8uWzBdKSA/IElQTW9kZS5JUFY2IDogSVBNb2RlLklQVjQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lwdjQodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gSVBfQUREUkVTU19QQVRURVJOLnBhdHRlcm4udGVzdCh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJcHY2KHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIElQX1Y2X0FERFJFU1NfUEFUVEVSTi5wYXR0ZXJuLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXBBZGRyZXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gaXNJcHY0KHZhbHVlKSA/IHZhbHVlIDogYFske3ZhbHVlfV1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaWN0Q2lkcihjaWRyU3RyOiBzdHJpbmcsIGlwTW9kZTogSVBNb2RlKSB7XG4gIGlmICghY2lkclN0cikge1xuICAgIHJldHVybiBjaWRyU3RyO1xuICB9XG4gIGNvbnN0IEJ1aWxkZXIgPSBnZXRBZGRyZXNzQnVpbGRlcihpcE1vZGUpO1xuICB0cnkge1xuICAgIGNvbnN0IGNpZHIgPSBuZXcgQnVpbGRlcihjaWRyU3RyKTtcbiAgICByZXR1cm4gW2NpZHIuc3RhcnRBZGRyZXNzKCkuYWRkcmVzcywgY2lkci5zdWJuZXRdLmpvaW4oJycpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlU2VnbWVudCA9IChcbiAgc2VnbWVudD86IHN0cmluZyxcbiAgbmV0d29ya01vZGU/OiBOZXR3b3JrTW9kZSxcbik6IFNlZ21lbnRNb2RlbCA9PiB7XG4gIGlmICghc2VnbWVudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlmIChuZXR3b3JrTW9kZSA9PT0gTmV0d29ya01vZGUuSVBWNCkge1xuICAgIHJldHVybiB7XG4gICAgICBpcFY0U2VnbWVudDogc2VnbWVudCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ldHdvcmtNb2RlID09PSBOZXR3b3JrTW9kZS5JUFY2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwVjZTZWdtZW50OiBzZWdtZW50LFxuICAgIH07XG4gIH1cblxuICBsZXQgaXBWNFNlZ21lbnQ6IHN0cmluZztcbiAgbGV0IGlwVjZTZWdtZW50OiBzdHJpbmc7XG5cbiAgaWYgKHNlZ21lbnQuaW5jbHVkZXMoJywnKSkge1xuICAgIFtpcFY0U2VnbWVudCwgaXBWNlNlZ21lbnRdID0gc2VnbWVudC5zcGxpdCgnLCcpO1xuICB9IGVsc2UgaWYgKHNlZ21lbnQuaW5jbHVkZXMoJzonKSkge1xuICAgIGlwVjZTZWdtZW50ID0gc2VnbWVudDtcbiAgfSBlbHNlIHtcbiAgICBpcFY0U2VnbWVudCA9IHNlZ21lbnQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlwVjRTZWdtZW50LFxuICAgIGlwVjZTZWdtZW50LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENpZHJCbG9jayhcbiAgc2VnbWVudDogc3RyaW5nLFxuICBuZXR3b3JrVHlwZT86IE5ldHdvcmtNb2RlLFxuKTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpZHJCbG9jayh7XG4gIGlwVjRTZWdtZW50LFxuICBpcFY2U2VnbWVudCxcbn06IFNlZ21lbnRNb2RlbCk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBnZXRDaWRyQmxvY2soXG4gIHBhcmFtOiBTZWdtZW50TW9kZWwgfCBzdHJpbmcsXG4gIG5ldHdvcmtNb2RlPzogTmV0d29ya01vZGUsXG4pIHtcbiAgbGV0IGlwVjRTZWdtZW50OiBzdHJpbmc7XG4gIGxldCBpcFY2U2VnbWVudDogc3RyaW5nO1xuXG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgXyA9IHBhcnNlU2VnbWVudChwYXJhbSwgbmV0d29ya01vZGUpO1xuICAgIGlwVjRTZWdtZW50ID0gXy5pcFY0U2VnbWVudDtcbiAgICBpcFY2U2VnbWVudCA9IF8uaXBWNlNlZ21lbnQ7XG4gIH0gZWxzZSB7XG4gICAgaXBWNFNlZ21lbnQgPSBwYXJhbS5pcFY0U2VnbWVudDtcbiAgICBpcFY2U2VnbWVudCA9IHBhcmFtLmlwVjZTZWdtZW50O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBnZXRTdHJpY3RDaWRyKGlwVjRTZWdtZW50LCBJUE1vZGUuSVBWNCksXG4gICAgZ2V0U3RyaWN0Q2lkcihpcFY2U2VnbWVudCwgSVBNb2RlLklQVjYpLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcsJyk7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lQVjRfTUFYX0NJRFJfUFJFRklYID0gMzE7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JUFY2X01BWF9DSURSX1BSRUZJWCA9IDEyNztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkVUV09SS19DSURSX1BSRUZJWF9NQVBQRVIgPSB7XG4gIFtJUE1vZGUuSVBWNF06IERFRkFVTFRfSVBWNF9NQVhfQ0lEUl9QUkVGSVgsXG4gIFtJUE1vZGUuSVBWNl06IERFRkFVTFRfSVBWNl9NQVhfQ0lEUl9QUkVGSVgsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2lkck1heGltdW1QcmVmaXgoaXBNb2RlOiBJUE1vZGUgPSBJUE1vZGUuSVBWNCkge1xuICByZXR1cm4gREVGQVVMVF9ORVRXT1JLX0NJRFJfUFJFRklYX01BUFBFUltpcE1vZGVdO1xufVxuXG5leHBvcnQgY29uc3QgYWRhcHRJcE1vZGUgPSAodmFsdWU6IHN0cmluZywgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlKSA9PlxuICBuZXR3b3JrTW9kZSA9PT0gTmV0d29ya01vZGUuRFVBTFxuICAgID8gdmFsdWUuaW5jbHVkZXMoJzonKVxuICAgICAgPyBOZXR3b3JrTW9kZS5JUFY2XG4gICAgICA6IE5ldHdvcmtNb2RlLklQVjRcbiAgICA6IG5ldHdvcmtNb2RlO1xuXG5leHBvcnQgY29uc3QgaXNJcFBhcnRWYWxpZCA9IChwYXJ0OiBzdHJpbmcsIGlzSXBWNDogYm9vbGVhbik6IGJvb2xlYW4gPT4ge1xuICBpZiAocGFydCA9PT0gJycpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNJcFY0KSB7XG4gICAgaWYgKElOVF9aRVJPX1BBVFRFUk4ucGF0dGVybi50ZXN0KHBhcnQpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHBhcnQpIDw9IDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICgvXltcXGRhLWZdKyQvaS50ZXN0KHBhcnQpKSB7XG4gICAgcmV0dXJuIE51bWJlci5wYXJzZUludChwYXJ0LCAxNikgPD0gMHhmZl9mZjtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJcFBhcnRzVmFsaWQgPSAocGFydHM6IHN0cmluZ1tdLCBpc0lwVjQ6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIHBhcnRzLmV2ZXJ5KHBhcnQgPT4gaXNJcFBhcnRWYWxpZChwYXJ0LCBpc0lwVjQpKTtcblxuZXhwb3J0IGNvbnN0IGlzSXBJbnB1dFZhbGlkID0gKGlucHV0OiBzdHJpbmcsIGlzSXBWNDogYm9vbGVhbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KGlzSXBWNCA/ICcuJyA6ICc6Jyk7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPD0gKGlzSXBWNCA/IDQgOiA4KSAmJiBpc0lwUGFydHNWYWxpZChwYXJ0cywgaXNJcFY0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJcEFkZHJlc3NTdWdnZXN0aW9uc0J5Q2lkcnMgPSAoXG4gIGNpZHJzOiBzdHJpbmdbXSxcbiAgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlLFxuICB1c2VkSXBzOiBzdHJpbmdbXSxcbiAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICBpc0NhbGljbzogYm9vbGVhbixcbiAgbWF4U2l6ZSA9IDEwLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eVxuKTogc3RyaW5nW10gPT4ge1xuICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZSA/PyAnJztcblxuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCB1c2VkSXBWYWx1ZXMgPSBbXG4gICAgLi4udXNlZElwcy5yZWR1Y2U8U2V0PEJpZ0ludGVnZXI+PigoaXBWYWx1ZXMsIGlwKSA9PiB7XG4gICAgICBjb25zdCBCdWlsZGVyID0gZ2V0QWRkcmVzc0J1aWxkZXIoYWRhcHRJcE1vZGUoaXAsIG5ldHdvcmtNb2RlKSk7XG4gICAgICB0cnkge1xuICAgICAgICBpcFZhbHVlcy5hZGQobmV3IEJ1aWxkZXIoaXApLmJpZ0ludGVnZXIoKSk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICByZXR1cm4gaXBWYWx1ZXM7XG4gICAgfSwgbmV3IFNldDxCaWdJbnRlZ2VyPigpKSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IGNpZHIgb2YgY2lkcnMpIHtcbiAgICBjb25zdCBpcE1vZGUgPSBhZGFwdElwTW9kZShjaWRyLCBuZXR3b3JrTW9kZSk7XG5cbiAgICBjb25zdCBpc0lwVjQgPSBpcE1vZGUgPT09IElQTW9kZS5JUFY0O1xuXG4gICAgaWYgKCFpc0lwSW5wdXRWYWxpZChpbnB1dFZhbHVlLCBpc0lwVjQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBsb29wU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICAgIGNvbnN0IEJ1aWxkZXIgPSBnZXRBZGRyZXNzQnVpbGRlcihpcE1vZGUpO1xuXG4gICAgbGV0IGlwQ2lkcjogQWRkcmVzczQgfCBBZGRyZXNzNjtcblxuICAgIHRyeSB7XG4gICAgICBpcENpZHIgPSBuZXcgQnVpbGRlcihjaWRyKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0QWRkcmVzcyA9IGlwQ2lkci5fc3RhcnRBZGRyZXNzKCk7XG4gICAgY29uc3QgZW5kQWRkcmVzcyA9IGlwQ2lkci5fZW5kQWRkcmVzcygpO1xuXG4gICAgLy8g6Z2eIGNhbGljbyDmqKHlvI/kuIvvvIzkuI3lhYHorrjkvb/nlKjnvZHmrrXnmoTnrKzkuIDkuKrnvZHnu5wgSVAg5ZKM5pyA5ZCO5LiA5LiqIOW5v+aSrSBJUFxuICAgIGxldCBhZGRyZXNzID0gc3RhcnRBZGRyZXNzLmFkZChpc0NhbGljbyA/IEJpZ0ludGVnZXIuWkVSTyA6IEJpZ0ludGVnZXIuT05FKTtcblxuICAgIHdoaWxlIChhZGRyZXNzLmNvbXBhcmVUbyhlbmRBZGRyZXNzKSA8IChpc0NhbGljbyA/IDEgOiAwKSkge1xuICAgICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICAgIC8vIENvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSwgd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgVUkgdG9vIG11Y2hcbiAgICAgIGlmICghaXNJcFY0KSB7XG4gICAgICAgIGlmIChub3cgLSBsb29wU3RhcnQgPiAxMDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub3cgLSBzdGFydCA+IDI1MCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1c2VkSXBWYWx1ZXMuc29tZShpcCA9PiAhaXAuY29tcGFyZVRvKGFkZHJlc3MpKSkge1xuICAgICAgICBjb25zdCBpcEFkZHIgPSBCdWlsZGVyLmZyb21CaWdJbnRlZ2VyKGFkZHJlc3MpLmNvcnJlY3RGb3JtKCk7XG4gICAgICAgIGlmIChpcEFkZHIuaW5jbHVkZXMoaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChpcEFkZHIpO1xuICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID49IG1heFNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLmFkZChCaWdJbnRlZ2VyLk9ORSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdFN1Ym5ldENpZHJzKFxuICBjaWRyczogc3RyaW5nLFxuICBuZXR3b3JrTW9kZTogTmV0d29ya01vZGUsXG4gIGVuYWJsZUZpeElwVjZGb3JEdWFsID0gZmFsc2UsXG4pIHtcbiAgcmV0dXJuIGNpZHJzXG4gICAgPy5zcGxpdCgnOycpXG4gICAgLm1hcChjaWRyID0+IHBhcnNlU2VnbWVudChjaWRyKSlcbiAgICAucmVkdWNlKChsaXN0LCBpdGVtKSA9PiB7XG4gICAgICBsaXN0LnB1c2goXG4gICAgICAgIGl0ZW0uaXBWNFNlZ21lbnQsXG4gICAgICAgIChuZXR3b3JrTW9kZSAhPT0gTmV0d29ya01vZGUuRFVBTCB8fCBlbmFibGVGaXhJcFY2Rm9yRHVhbCkgJiZcbiAgICAgICAgICBpdGVtLmlwVjZTZWdtZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sIFtdIGFzIHN0cmluZ1tdKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGlwQmVnaW4gPiBpcEVuZFxuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRJcE9yZGVyPFQgZXh0ZW5kcyBBZGRyZXNzNCB8IEFkZHJlc3M2PihcbiAgaXBCZWdpbjogVCxcbiAgaXBFbmQ6IFQsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgaXBCZWdpbkJpZ0ludCA9IGlwQmVnaW4uYmlnSW50ZWdlcigpO1xuICBjb25zdCBpcEVuZEJpZ0ludCA9IGlwRW5kLmJpZ0ludGVnZXIoKTtcbiAgcmV0dXJuIGlwQmVnaW5CaWdJbnQuY29tcGFyZVRvKGlwRW5kQmlnSW50KSA+PSAwO1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ // Fixme: 网络依赖以下类型和工具,如果有 Cluster 相关的 libs 再做迁移
2
+ export var ClusterType;
3
+ (function (ClusterType) {
4
+ ClusterType["Baremetal"] = "Baremetal";
5
+ ClusterType["Imported"] = "Imported";
6
+ ClusterType["OCP"] = "OCP";
7
+ // pubic clouds
8
+ ClusterType["AlibabaCloudACKDedicated"] = "AlibabaCloudACKDedicated";
9
+ ClusterType["AlibabaCloudACKManaged"] = "AlibabaCloudACKManaged";
10
+ ClusterType["AmazonEKS"] = "AmazonEKS";
11
+ ClusterType["AzureAKS"] = "AzureAKS";
12
+ ClusterType["GoogleCloudGKE"] = "GoogleCloudGKE";
13
+ ClusterType["HuaweiCloudCCE"] = "HuaweiCloudCCE";
14
+ ClusterType["TencentTKEManaged"] = "TencentTKEManaged";
15
+ ClusterType["TencentTKESelfDeployed"] = "TencentTKESelfDeployed";
16
+ })(ClusterType || (ClusterType = {}));
17
+ export const isPublicCloud = (clusterType) => !!clusterType && !['Baremetal', 'OCP', 'Imported'].includes(clusterType);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1leHBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvdXRpbHMvY2x1c3Rlci1leHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxNQUFNLENBQU4sSUFBWSxXQWNYO0FBZEQsV0FBWSxXQUFXO0lBQ3JCLHNDQUF1QixDQUFBO0lBQ3ZCLG9DQUFxQixDQUFBO0lBQ3JCLDBCQUFXLENBQUE7SUFFWCxlQUFlO0lBQ2Ysb0VBQXFELENBQUE7SUFDckQsZ0VBQWlELENBQUE7SUFDakQsc0NBQXVCLENBQUE7SUFDdkIsb0NBQXFCLENBQUE7SUFDckIsZ0RBQWlDLENBQUE7SUFDakMsZ0RBQWlDLENBQUE7SUFDakMsc0RBQXVDLENBQUE7SUFDdkMsZ0VBQWlELENBQUE7QUFDbkQsQ0FBQyxFQWRXLFdBQVcsS0FBWCxXQUFXLFFBY3RCO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsV0FBb0IsRUFBRSxFQUFFLENBQ3BELENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRml4bWU6IOe9kee7nOS+nei1luS7peS4i+exu+Wei+WSjOW3peWFt++8jOWmguaenOaciSBDbHVzdGVyIOebuOWFs+eahCBsaWJzIOWGjeWBmui/geenu1xuZXhwb3J0IGVudW0gQ2x1c3RlclR5cGUge1xuICBCYXJlbWV0YWwgPSAnQmFyZW1ldGFsJyxcbiAgSW1wb3J0ZWQgPSAnSW1wb3J0ZWQnLFxuICBPQ1AgPSAnT0NQJyxcblxuICAvLyBwdWJpYyBjbG91ZHNcbiAgQWxpYmFiYUNsb3VkQUNLRGVkaWNhdGVkID0gJ0FsaWJhYmFDbG91ZEFDS0RlZGljYXRlZCcsXG4gIEFsaWJhYmFDbG91ZEFDS01hbmFnZWQgPSAnQWxpYmFiYUNsb3VkQUNLTWFuYWdlZCcsXG4gIEFtYXpvbkVLUyA9ICdBbWF6b25FS1MnLFxuICBBenVyZUFLUyA9ICdBenVyZUFLUycsXG4gIEdvb2dsZUNsb3VkR0tFID0gJ0dvb2dsZUNsb3VkR0tFJyxcbiAgSHVhd2VpQ2xvdWRDQ0UgPSAnSHVhd2VpQ2xvdWRDQ0UnLFxuICBUZW5jZW50VEtFTWFuYWdlZCA9ICdUZW5jZW50VEtFTWFuYWdlZCcsXG4gIFRlbmNlbnRUS0VTZWxmRGVwbG95ZWQgPSAnVGVuY2VudFRLRVNlbGZEZXBsb3llZCcsXG59XG5cbmV4cG9ydCBjb25zdCBpc1B1YmxpY0Nsb3VkID0gKGNsdXN0ZXJUeXBlPzogc3RyaW5nKSA9PlxuICAhIWNsdXN0ZXJUeXBlICYmICFbJ0JhcmVtZXRhbCcsICdPQ1AnLCAnSW1wb3J0ZWQnXS5pbmNsdWRlcyhjbHVzdGVyVHlwZSk7XG4iXX0=
@@ -0,0 +1,58 @@
1
+ import { SERVICE_PORT_BASE_PROTOCOLS, SERVICE_SESSION_AFFINITIES, SERVICE_TYPES, ServiceTypeMeta, } from '@alauda-fe/common';
2
+ import { getServiceDefaultName } from './service-internals';
3
+ export function getDefaultService(namespace, name = '') {
4
+ const protocol = SERVICE_PORT_BASE_PROTOCOLS[0];
5
+ return {
6
+ ...ServiceTypeMeta,
7
+ metadata: {
8
+ name,
9
+ namespace,
10
+ },
11
+ spec: {
12
+ type: SERVICE_TYPES[0],
13
+ sessionAffinity: SERVICE_SESSION_AFFINITIES[0],
14
+ ports: [
15
+ {
16
+ protocol,
17
+ name: '',
18
+ port: null,
19
+ targetPort: '',
20
+ appProtocol: protocol.toLowerCase(),
21
+ },
22
+ ],
23
+ },
24
+ };
25
+ }
26
+ export function getResourceReference(service, self = this) {
27
+ const resourceRef = self.k8sUtil.getAnnotation(service, 'reference', 'resource');
28
+ if (!resourceRef) {
29
+ return;
30
+ }
31
+ try {
32
+ const reference = JSON.parse(resourceRef);
33
+ const [refType, refName] = reference[0].split('.');
34
+ return {
35
+ refType,
36
+ refName,
37
+ };
38
+ }
39
+ catch { }
40
+ }
41
+ export function completeDefaultServiceName(resource, networkMode) {
42
+ const type = resource.spec.type;
43
+ return {
44
+ ...resource,
45
+ spec: type === 'ExternalName'
46
+ ? { ...resource?.spec }
47
+ : {
48
+ ipFamilies: networkMode === 'dual' ? ['IPv4', 'IPv6'] : null,
49
+ ipFamilyPolicy: 'PreferDualStack',
50
+ ...resource?.spec,
51
+ ports: resource?.spec?.ports?.map(servicePort => ({
52
+ ...servicePort,
53
+ name: servicePort.name || getServiceDefaultName(servicePort),
54
+ })),
55
+ },
56
+ };
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1leHBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvdXRpbHMvc2VydmljZS1leHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLGFBQWEsRUFFYixlQUFlLEdBRWhCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFRNUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQWlCLEVBQUUsSUFBSSxHQUFHLEVBQUU7SUFDNUQsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTztRQUNMLEdBQUcsZUFBZTtRQUNsQixRQUFRLEVBQUU7WUFDUixJQUFJO1lBQ0osU0FBUztTQUNWO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDdEIsZUFBZSxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUM5QyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsUUFBUTtvQkFDUixJQUFJLEVBQUUsRUFBRTtvQkFDUixJQUFJLEVBQUUsSUFBSTtvQkFDVixVQUFVLEVBQUUsRUFBRTtvQkFDZCxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBVztpQkFDN0M7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBRWxDLE9BQWdCLEVBQ2hCLElBQUksR0FBRyxJQUFJO0lBRVgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQzVDLE9BQU8sRUFDUCxXQUFXLEVBQ1gsVUFBVSxDQUNYLENBQUM7SUFDRixJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE9BQU87S0FDUjtJQUNELElBQUk7UUFDRixNQUFNLFNBQVMsR0FBYSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBR2hELENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTztZQUNQLE9BQU87U0FDUixDQUFDO0tBQ0g7SUFBQyxNQUFNLEdBQUU7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxRQUFpQixFQUNqQixXQUF3QjtJQUV4QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQyxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsSUFBSSxFQUNGLElBQUksS0FBSyxjQUFjO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN2QixDQUFDLENBQUM7Z0JBQ0UsVUFBVSxFQUFFLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM1RCxjQUFjLEVBQUUsaUJBQWlCO2dCQUNqQyxHQUFHLFFBQVEsRUFBRSxJQUFJO2dCQUNqQixLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDaEQsR0FBRyxXQUFXO29CQUNkLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztpQkFDN0QsQ0FBQyxDQUFDO2FBQ0o7S0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhZW1vblNldCxcbiAgRGVwbG95bWVudCxcbiAgSzhzVXRpbFNlcnZpY2UsXG4gIFNFUlZJQ0VfUE9SVF9CQVNFX1BST1RPQ09MUyxcbiAgU0VSVklDRV9TRVNTSU9OX0FGRklOSVRJRVMsXG4gIFNFUlZJQ0VfVFlQRVMsXG4gIFNlcnZpY2UsXG4gIFNlcnZpY2VUeXBlTWV0YSxcbiAgU3RhdGVmdWxTZXQsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcblxuaW1wb3J0IHsgTmV0d29ya01vZGUgfSBmcm9tICcuL2NpZHItZXhwb3J0cyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlRGVmYXVsdE5hbWUgfSBmcm9tICcuL3NlcnZpY2UtaW50ZXJuYWxzJztcblxuaW50ZXJmYWNlIFdvcmtsb2FkcyB7XG4gIERlcGxveW1lbnQ/OiBEZXBsb3ltZW50W107XG4gIERhZW1vblNldD86IERhZW1vblNldFtdO1xuICBTdGF0ZWZ1bFNldD86IFN0YXRlZnVsU2V0W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U2VydmljZShuYW1lc3BhY2U6IHN0cmluZywgbmFtZSA9ICcnKTogU2VydmljZSB7XG4gIGNvbnN0IHByb3RvY29sID0gU0VSVklDRV9QT1JUX0JBU0VfUFJPVE9DT0xTWzBdO1xuICByZXR1cm4ge1xuICAgIC4uLlNlcnZpY2VUeXBlTWV0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbmFtZSxcbiAgICAgIG5hbWVzcGFjZSxcbiAgICB9LFxuICAgIHNwZWM6IHtcbiAgICAgIHR5cGU6IFNFUlZJQ0VfVFlQRVNbMF0sXG4gICAgICBzZXNzaW9uQWZmaW5pdHk6IFNFUlZJQ0VfU0VTU0lPTl9BRkZJTklUSUVTWzBdLFxuICAgICAgcG9ydHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIHBvcnQ6IG51bGwsXG4gICAgICAgICAgdGFyZ2V0UG9ydDogJycsXG4gICAgICAgICAgYXBwUHJvdG9jb2w6IHByb3RvY29sLnRvTG93ZXJDYXNlKCkgYXMgJ3RjcCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZVJlZmVyZW5jZShcbiAgdGhpczogeyBrOHNVdGlsOiBLOHNVdGlsU2VydmljZSB9LFxuICBzZXJ2aWNlOiBTZXJ2aWNlLFxuICBzZWxmID0gdGhpcyxcbikge1xuICBjb25zdCByZXNvdXJjZVJlZiA9IHNlbGYuazhzVXRpbC5nZXRBbm5vdGF0aW9uKFxuICAgIHNlcnZpY2UsXG4gICAgJ3JlZmVyZW5jZScsXG4gICAgJ3Jlc291cmNlJyxcbiAgKTtcbiAgaWYgKCFyZXNvdXJjZVJlZikge1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlZmVyZW5jZTogc3RyaW5nW10gPSBKU09OLnBhcnNlKHJlc291cmNlUmVmKTtcbiAgICBjb25zdCBbcmVmVHlwZSwgcmVmTmFtZV0gPSByZWZlcmVuY2VbMF0uc3BsaXQoJy4nKSBhcyBbXG4gICAgICBrZXlvZiBXb3JrbG9hZHMgfCAnVmlydHVhbE1hY2hpbmUnIHwgJ1ZpcnR1YWxNYWNoaW5lUG9vbCcsXG4gICAgICBzdHJpbmcsXG4gICAgXTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVmVHlwZSxcbiAgICAgIHJlZk5hbWUsXG4gICAgfTtcbiAgfSBjYXRjaCB7fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxldGVEZWZhdWx0U2VydmljZU5hbWUoXG4gIHJlc291cmNlOiBTZXJ2aWNlLFxuICBuZXR3b3JrTW9kZTogTmV0d29ya01vZGUsXG4pOiBTZXJ2aWNlIHtcbiAgY29uc3QgdHlwZSA9IHJlc291cmNlLnNwZWMudHlwZTtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNvdXJjZSxcbiAgICBzcGVjOlxuICAgICAgdHlwZSA9PT0gJ0V4dGVybmFsTmFtZSdcbiAgICAgICAgPyB7IC4uLnJlc291cmNlPy5zcGVjIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBpcEZhbWlsaWVzOiBuZXR3b3JrTW9kZSA9PT0gJ2R1YWwnID8gWydJUHY0JywgJ0lQdjYnXSA6IG51bGwsXG4gICAgICAgICAgICBpcEZhbWlseVBvbGljeTogJ1ByZWZlckR1YWxTdGFjaycsXG4gICAgICAgICAgICAuLi5yZXNvdXJjZT8uc3BlYyxcbiAgICAgICAgICAgIHBvcnRzOiByZXNvdXJjZT8uc3BlYz8ucG9ydHM/Lm1hcChzZXJ2aWNlUG9ydCA9PiAoe1xuICAgICAgICAgICAgICAuLi5zZXJ2aWNlUG9ydCxcbiAgICAgICAgICAgICAgbmFtZTogc2VydmljZVBvcnQubmFtZSB8fCBnZXRTZXJ2aWNlRGVmYXVsdE5hbWUoc2VydmljZVBvcnQpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ // @internal
2
+ export function getServiceDefaultName(item) {
3
+ return [item.appProtocol, item.port, item.targetPort]
4
+ .filter(Boolean)
5
+ .join('-');
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1pbnRlcm5hbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi91dGlscy9zZXJ2aWNlLWludGVybmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxZQUFZO0FBQ1osTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWlCO0lBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUNsRCxNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZpY2VQb3J0IH0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlRGVmYXVsdE5hbWUoaXRlbTogU2VydmljZVBvcnQpIHtcbiAgcmV0dXJuIFtpdGVtLmFwcFByb3RvY29sLCBpdGVtLnBvcnQsIGl0ZW0udGFyZ2V0UG9ydF1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJy0nKTtcbn1cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ export const DOMAIN_REF = 'domain-ref';
2
+ export const DOMAIN_NAME_REF = 'domain-name-ref';
3
+ export const SECRET_REF = 'secret-ref';
4
+ export const KUBE_OVN_ANNOTATION_PREFIX = 'ovn.kubernetes.io';
5
+ export const CALICO_ANNOTATION_PREFIX = 'cni.projectcalico.org';
6
+ export var ClusterNetworkType;
7
+ (function (ClusterNetworkType) {
8
+ ClusterNetworkType["KUBE_OVN"] = "cni-kube-ovn";
9
+ ClusterNetworkType["CALICO"] = "cni-calico";
10
+ ClusterNetworkType["DEFAULT"] = "default";
11
+ })(ClusterNetworkType || (ClusterNetworkType = {}));
12
+ export var ConflictCidrType;
13
+ (function (ConflictCidrType) {
14
+ ConflictCidrType["EXIST_SUBNET"] = "conflict_subnet";
15
+ ConflictCidrType["HOST_NETWORK"] = "conflict_host";
16
+ ConflictCidrType["SERVICE_CIDR"] = "conflict_service_cidr";
17
+ })(ConflictCidrType || (ConflictCidrType = {}));
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL25ldHdvcmsvc3JjL2xpYi91dGlscy9zdWJuZXQtZXhwb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLG1CQUFtQixDQUFDO0FBQzlELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHVCQUF1QixDQUFDO0FBRWhFLE1BQU0sQ0FBTixJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDNUIsK0NBQXlCLENBQUE7SUFDekIsMkNBQXFCLENBQUE7SUFDckIseUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFJN0I7QUFFRCxNQUFNLENBQU4sSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLG9EQUFnQyxDQUFBO0lBQ2hDLGtEQUE4QixDQUFBO0lBQzlCLDBEQUFzQyxDQUFBO0FBQ3hDLENBQUMsRUFKVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSTNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERPTUFJTl9SRUYgPSAnZG9tYWluLXJlZic7XG5leHBvcnQgY29uc3QgRE9NQUlOX05BTUVfUkVGID0gJ2RvbWFpbi1uYW1lLXJlZic7XG5leHBvcnQgY29uc3QgU0VDUkVUX1JFRiA9ICdzZWNyZXQtcmVmJztcbmV4cG9ydCBjb25zdCBLVUJFX09WTl9BTk5PVEFUSU9OX1BSRUZJWCA9ICdvdm4ua3ViZXJuZXRlcy5pbyc7XG5leHBvcnQgY29uc3QgQ0FMSUNPX0FOTk9UQVRJT05fUFJFRklYID0gJ2NuaS5wcm9qZWN0Y2FsaWNvLm9yZyc7XG5cbmV4cG9ydCBlbnVtIENsdXN0ZXJOZXR3b3JrVHlwZSB7XG4gIEtVQkVfT1ZOID0gJ2NuaS1rdWJlLW92bicsXG4gIENBTElDTyA9ICdjbmktY2FsaWNvJyxcbiAgREVGQVVMVCA9ICdkZWZhdWx0Jyxcbn1cblxuZXhwb3J0IGVudW0gQ29uZmxpY3RDaWRyVHlwZSB7XG4gIEVYSVNUX1NVQk5FVCA9ICdjb25mbGljdF9zdWJuZXQnLFxuICBIT1NUX05FVFdPUksgPSAnY29uZmxpY3RfaG9zdCcsXG4gIFNFUlZJQ0VfQ0lEUiA9ICdjb25mbGljdF9zZXJ2aWNlX2NpZHInLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZsaWN0Q2lkckJsb2NrIHtcbiAgY2lkcjogc3RyaW5nO1xuICB0eXBlOiBDb25mbGljdENpZHJUeXBlO1xuICBjbHVzdGVyPzogc3RyaW5nO1xufVxuIl19
package/index.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ export { CertificateStatusComponent } from './lib/components/certificate-status/component';
2
+ export { FixedIpInputComponent } from './lib/components/fixed-ip/component';
3
+ export { LoadBalancerSpecFormComponent } from './lib/components/loadbalancer-spec-form/component';
4
+ export { ServiceAnnotationsFormComponent } from './lib/components/service-annotations-form/annotations.component';
5
+ export { ServiceAnnotationsFormItemComponent } from './lib/components/service-annotations-form-item/annotations.component';
6
+ export { K8sServiceFormComponent } from './lib/components/service-form/component';
7
+ export * from './lib/directives/subnet-validator.directive';
8
+ export * from './lib/services/alb-api.service';
9
+ export * from './lib/services/certificate-api.service';
10
+ export * from './lib/services/network-util.service';
11
+ export * from './lib/types/alb-exports';
12
+ export * from './lib/types/k8s-exports';
13
+ export * from './lib/types/resource-definition';
14
+ export * from './lib/utils/alb-exports';
15
+ export * from './lib/utils/cidr-exports';
16
+ export * from './lib/utils/cluster-exports';
17
+ export * from './lib/utils/service-exports';
18
+ export * from './lib/utils/subnet-exports';
@@ -0,0 +1,17 @@
1
+ import { Certificate } from '@alauda-fe/common';
2
+ import * as i0 from "@angular/core";
3
+ export declare const CERTIFICATE_ERRORS_MAPPER: {
4
+ 1: string;
5
+ 2: string;
6
+ 3: string;
7
+ };
8
+ export declare class CertificateStatusComponent {
9
+ certificate?: Certificate;
10
+ CERTIFICATE_ERRORS_MAPPER: {
11
+ 1: string;
12
+ 2: string;
13
+ 3: string;
14
+ };
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<CertificateStatusComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<CertificateStatusComponent, "acl-certificate-status", never, { "certificate": { "alias": "certificate"; "required": false; }; }, {}, never, never, true, never>;
17
+ }
@@ -0,0 +1,67 @@
1
+ import { CommonFormControl, FormItemWidth, TagsInputComponent } from '@alauda/ui';
2
+ import { K8sApiService, K8sUtilService, TranslateService, StringMap } from '@alauda-fe/common';
3
+ import { ChangeDetectorRef } from '@angular/core';
4
+ import { AbstractControl, AsyncValidator, NgModel, ValidationErrors } from '@angular/forms';
5
+ import { Observable } from 'rxjs';
6
+ import { NetworkUtilService } from '../../services/network-util.service';
7
+ import { Subnet } from '../../types/k8s-exports';
8
+ import { ClusterNetworkType } from '../../utils/subnet-exports';
9
+ import * as i0 from "@angular/core";
10
+ export declare class FixedIpInputComponent extends CommonFormControl<string | string[]> implements AsyncValidator {
11
+ readonly cdr: ChangeDetectorRef;
12
+ private readonly k8sUtil;
13
+ private readonly k8sApi;
14
+ private readonly networkUtilService;
15
+ private readonly translate;
16
+ cluster: string;
17
+ cluster$: Observable<string>;
18
+ namespace: string;
19
+ namespace$: Observable<string>;
20
+ networkType: ClusterNetworkType;
21
+ networkType$: Observable<ClusterNetworkType>;
22
+ subnet: Subnet;
23
+ subnet$: Observable<Subnet>;
24
+ label: string;
25
+ placeholder: string;
26
+ hint: string;
27
+ addonTip: string;
28
+ multiple: boolean;
29
+ ipAddress: NgModel;
30
+ tagsInput: TagsInputComponent;
31
+ formItemWidth: FormItemWidth;
32
+ tagsInput$: Observable<TagsInputComponent>;
33
+ skipOccupied: boolean;
34
+ enableFixIpV6ForDual: boolean;
35
+ errors: ValidationErrors;
36
+ errors$: Observable<ValidationErrors>;
37
+ errorsMapper: StringMap;
38
+ errorsMapper$: Observable<StringMap>;
39
+ uniq: <T>(array: import("lodash").List<T>) => T[];
40
+ onValidatorChange: () => void;
41
+ get isCalico(): boolean;
42
+ private readonly namespaceResource$;
43
+ private readonly networkMode$;
44
+ private readonly $networkMode;
45
+ private readonly subnetDetails$;
46
+ private readonly subnetInfo$;
47
+ private readonly $subnetInfo;
48
+ cidr$: Observable<string>;
49
+ private readonly innerErrorsMapper$;
50
+ combinedErrorsMapper$: Observable<{
51
+ pattern: string;
52
+ occupied: string;
53
+ out_of_range: string;
54
+ }>;
55
+ inputErrors$: Observable<ValidationErrors>;
56
+ private readonly usedIps$;
57
+ private readonly $usedIps;
58
+ ipAddressSuggestions$: Observable<string[]>;
59
+ constructor(cdr: ChangeDetectorRef, k8sUtil: K8sUtilService, k8sApi: K8sApiService, networkUtilService: NetworkUtilService, translate: TranslateService);
60
+ registerOnValidatorChange(fn: () => void): void;
61
+ validate(ctrl: AbstractControl): Observable<ValidationErrors>;
62
+ private setErrors;
63
+ private validateFixedIp;
64
+ private adaptIpMode;
65
+ static ɵfac: i0.ɵɵFactoryDeclaration<FixedIpInputComponent, never>;
66
+ static ɵcmp: i0.ɵɵComponentDeclaration<FixedIpInputComponent, "acl-fixed-ip-input", never, { "cluster": { "alias": "cluster"; "required": true; }; "namespace": { "alias": "namespace"; "required": true; }; "networkType": { "alias": "networkType"; "required": true; }; "subnet": { "alias": "subnet"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "addonTip": { "alias": "addonTip"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "formItemWidth": { "alias": "formItemWidth"; "required": false; }; "skipOccupied": { "alias": "skipOccupied"; "required": false; }; "enableFixIpV6ForDual": { "alias": "enableFixIpV6ForDual"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "errorsMapper": { "alias": "errorsMapper"; "required": false; }; }, {}, never, never, true, never>;
67
+ }