@alauda-fe/common 1.4.28-beta.5 → 1.4.28-beta.6
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.
- package/array-form-table/form/component.d.ts +1 -1
- package/code/code-editor-configs.d.ts +0 -2
- package/code/public-api.d.ts +0 -4
- package/code/resource-yaml-display/component.d.ts +6 -64
- package/core/abstract/base-nested-form-control.d.ts +1 -1
- package/core/constants/constants.d.ts +0 -3
- package/core/services/intercept-deactivate.service.d.ts +2 -2
- package/core/services/public-api.d.ts +0 -1
- package/core/services/time.service.d.ts +2 -8
- package/core/types/public-api.d.ts +0 -1
- package/esm2022/code/code-editor-configs.mjs +2 -12
- package/esm2022/code/public-api.mjs +1 -5
- package/esm2022/code/resource-yaml-display/component.mjs +42 -256
- package/esm2022/core/constants/constants.mjs +1 -4
- package/esm2022/core/guards/intercept-deactivate.guard.mjs +2 -2
- package/esm2022/core/services/intercept-deactivate.service.mjs +1 -1
- package/esm2022/core/services/public-api.mjs +1 -2
- package/esm2022/core/services/time.service.mjs +36 -13
- package/esm2022/core/services/workspace-helper.service.mjs +3 -4
- package/esm2022/core/types/public-api.mjs +1 -2
- package/esm2022/exec/terminal-group/component.mjs +2 -2
- package/esm2022/page-scaffold/page/page.module.mjs +6 -5
- package/esm2022/page-scaffold/page-header/help-menu/module.mjs +9 -8
- package/esm2022/table/module.mjs +12 -11
- package/esm2022/translate/constants.mjs +1 -2
- package/esm2022/translate/intl-format.pipes.mjs +293 -0
- package/esm2022/translate/public-api.mjs +4 -3
- package/esm2022/translate/relative-time-manager.service.mjs +87 -0
- package/esm2022/translate/translate.directive.mjs +5 -4
- package/esm2022/translate/translate.module.mjs +22 -3
- package/esm2022/translate/translate.pipe.mjs +7 -8
- package/esm2022/translate/translate.service.mjs +721 -142
- package/esm2022/translate/types.mjs +1 -1
- package/package.json +2 -2
- package/page-scaffold/page/page.module.d.ts +4 -3
- package/page-scaffold/page-header/help-menu/module.d.ts +2 -1
- package/styles/global.scss +0 -4
- package/table/component.d.ts +1 -1
- package/table/module.d.ts +2 -1
- package/translate/intl-format.pipes.d.ts +122 -0
- package/translate/public-api.d.ts +3 -2
- package/translate/relative-time-manager.service.d.ts +32 -0
- package/translate/translate.module.d.ts +4 -2
- package/translate/translate.pipe.d.ts +4 -5
- package/translate/translate.service.d.ts +292 -20
- package/translate/types.d.ts +16 -0
- package/code/managed-fields-folder.util.d.ts +0 -35
- package/code/resource-yaml-display/schema/component.d.ts +0 -61
- package/code/resource-yaml-editor/component.d.ts +0 -95
- package/code/yaml-examples.d.ts +0 -8
- package/code/yaml-sidebar/component.d.ts +0 -57
- package/code/yaml-sidebar/types.d.ts +0 -21
- package/code/yaml-sidebar/yaml-examples.d.ts +0 -8
- package/core/services/kubernetes-schema.service.d.ts +0 -44
- package/core/types/openapi.d.ts +0 -37
- package/esm2022/code/managed-fields-folder.util.mjs +0 -147
- package/esm2022/code/resource-yaml-display/schema/component.mjs +0 -531
- package/esm2022/code/resource-yaml-editor/component.mjs +0 -392
- package/esm2022/code/yaml-examples.mjs +0 -337
- package/esm2022/code/yaml-sidebar/component.mjs +0 -482
- package/esm2022/code/yaml-sidebar/types.mjs +0 -2
- package/esm2022/code/yaml-sidebar/yaml-examples.mjs +0 -340
- package/esm2022/core/services/kubernetes-schema.service.mjs +0 -129
- package/esm2022/core/types/openapi.mjs +0 -2
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kubernetes 资源的内置 YAML 示例
|
|
3
|
-
* 按照 apiVersion.kind 的格式组织
|
|
4
|
-
*/
|
|
5
|
-
export const BUILT_IN_YAML_EXAMPLES = {
|
|
6
|
-
'apps/v1.Deployment': [
|
|
7
|
-
{
|
|
8
|
-
title: 'Basic Deployment',
|
|
9
|
-
description: 'A basic deployment example with nginx container',
|
|
10
|
-
yaml: `apiVersion: apps/v1
|
|
11
|
-
kind: Deployment
|
|
12
|
-
metadata:
|
|
13
|
-
name: example
|
|
14
|
-
spec:
|
|
15
|
-
selector:
|
|
16
|
-
matchLabels:
|
|
17
|
-
app: httpd
|
|
18
|
-
replicas: 3
|
|
19
|
-
template:
|
|
20
|
-
metadata:
|
|
21
|
-
labels:
|
|
22
|
-
app: httpd
|
|
23
|
-
spec:
|
|
24
|
-
containers:
|
|
25
|
-
- name: httpd
|
|
26
|
-
image: internal-docker-registry.cpaas-system.svc/demo-ns/nginx:alpine
|
|
27
|
-
ports:
|
|
28
|
-
- containerPort: 8080`,
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
'v1.ConfigMap': [
|
|
32
|
-
{
|
|
33
|
-
title: 'Basic ConfigMap',
|
|
34
|
-
description: 'A basic ConfigMap example with properties and file data',
|
|
35
|
-
yaml: `apiVersion: v1
|
|
36
|
-
kind: ConfigMap
|
|
37
|
-
metadata:
|
|
38
|
-
name: example
|
|
39
|
-
namespace: default
|
|
40
|
-
data:
|
|
41
|
-
example.property.1: hello
|
|
42
|
-
example.property.2: world
|
|
43
|
-
example.property.file: |-
|
|
44
|
-
property.1=value-1
|
|
45
|
-
property.2=value-2
|
|
46
|
-
property.3=value-3`,
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
'batch/v1.CronJob': [
|
|
50
|
-
{
|
|
51
|
-
title: 'Basic CronJob',
|
|
52
|
-
description: 'A basic CronJob example that runs daily',
|
|
53
|
-
yaml: `apiVersion: batch/v1
|
|
54
|
-
kind: CronJob
|
|
55
|
-
metadata:
|
|
56
|
-
name: example
|
|
57
|
-
spec:
|
|
58
|
-
schedule: "@daily"
|
|
59
|
-
jobTemplate:
|
|
60
|
-
spec:
|
|
61
|
-
template:
|
|
62
|
-
spec:
|
|
63
|
-
containers:
|
|
64
|
-
- name: hello
|
|
65
|
-
image: busybox
|
|
66
|
-
args:
|
|
67
|
-
- /bin/sh
|
|
68
|
-
- -c
|
|
69
|
-
- date; echo Hello from the Kubernetes cluster
|
|
70
|
-
restartPolicy: OnFailure`,
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
'v1.PersistentVolume': [
|
|
74
|
-
{
|
|
75
|
-
title: 'Basic PersistentVolume',
|
|
76
|
-
description: 'A basic PersistentVolume example with NFS storage',
|
|
77
|
-
yaml: `apiVersion: v1
|
|
78
|
-
kind: PersistentVolume
|
|
79
|
-
metadata:
|
|
80
|
-
name: example
|
|
81
|
-
spec:
|
|
82
|
-
capacity:
|
|
83
|
-
storage: 5Gi
|
|
84
|
-
accessModes:
|
|
85
|
-
- ReadWriteOnce
|
|
86
|
-
persistentVolumeReclaimPolicy: Retain
|
|
87
|
-
storageClassName: slow
|
|
88
|
-
nfs:
|
|
89
|
-
path: /tmp
|
|
90
|
-
server: 172.17.0.2`,
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
'autoscaling/v2.HorizontalPodAutoscaler': [
|
|
94
|
-
{
|
|
95
|
-
title: 'Basic HorizontalPodAutoscaler',
|
|
96
|
-
description: 'A basic HPA example with CPU utilization target',
|
|
97
|
-
yaml: `apiVersion: autoscaling/v2
|
|
98
|
-
kind: HorizontalPodAutoscaler
|
|
99
|
-
metadata:
|
|
100
|
-
name: example
|
|
101
|
-
spec:
|
|
102
|
-
scaleTargetRef:
|
|
103
|
-
apiVersion: apps/v1
|
|
104
|
-
kind: Deployment
|
|
105
|
-
name: example
|
|
106
|
-
minReplicas: 1
|
|
107
|
-
maxReplicas: 3
|
|
108
|
-
metrics:
|
|
109
|
-
- type: Resource
|
|
110
|
-
resource:
|
|
111
|
-
name: cpu
|
|
112
|
-
target:
|
|
113
|
-
averageUtilization: 50
|
|
114
|
-
type: Utilization`,
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
'apps/v1.DaemonSet': [
|
|
118
|
-
{
|
|
119
|
-
title: 'Basic DaemonSet',
|
|
120
|
-
description: 'A basic DaemonSet example with nginx container',
|
|
121
|
-
yaml: `apiVersion: apps/v1
|
|
122
|
-
kind: DaemonSet
|
|
123
|
-
metadata:
|
|
124
|
-
name: example
|
|
125
|
-
spec:
|
|
126
|
-
selector:
|
|
127
|
-
matchLabels:
|
|
128
|
-
app: httpd
|
|
129
|
-
template:
|
|
130
|
-
metadata:
|
|
131
|
-
labels:
|
|
132
|
-
app: httpd
|
|
133
|
-
spec:
|
|
134
|
-
containers:
|
|
135
|
-
- name: httpd
|
|
136
|
-
image: internal-docker-registry.cpaas-system.svc/demo-ns/nginx:alpine
|
|
137
|
-
ports:
|
|
138
|
-
- containerPort: 8080`,
|
|
139
|
-
},
|
|
140
|
-
],
|
|
141
|
-
'v1.PersistentVolumeClaim': [
|
|
142
|
-
{
|
|
143
|
-
title: 'Basic PersistentVolumeClaim',
|
|
144
|
-
description: 'A basic PVC example requesting 1Gi storage',
|
|
145
|
-
yaml: `apiVersion: v1
|
|
146
|
-
kind: PersistentVolumeClaim
|
|
147
|
-
metadata:
|
|
148
|
-
name: example
|
|
149
|
-
spec:
|
|
150
|
-
accessModes:
|
|
151
|
-
- ReadWriteOnce
|
|
152
|
-
volumeMode: Filesystem
|
|
153
|
-
resources:
|
|
154
|
-
requests:
|
|
155
|
-
storage: 1Gi`,
|
|
156
|
-
},
|
|
157
|
-
],
|
|
158
|
-
'v1.ResourceQuota': [
|
|
159
|
-
{
|
|
160
|
-
title: 'Compute ResourceQuota',
|
|
161
|
-
description: 'A ResourceQuota example for compute resources',
|
|
162
|
-
yaml: `apiVersion: v1
|
|
163
|
-
kind: ResourceQuota
|
|
164
|
-
metadata:
|
|
165
|
-
name: compute-quota
|
|
166
|
-
namespace: default
|
|
167
|
-
spec:
|
|
168
|
-
hard:
|
|
169
|
-
requests.cpu: '1'
|
|
170
|
-
requests.memory: 1Gi
|
|
171
|
-
limits.cpu: '2'
|
|
172
|
-
limits.memory: 2Gi`,
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
title: 'Storage Class ResourceQuota',
|
|
176
|
-
description: 'A ResourceQuota example for storage class specific quotas',
|
|
177
|
-
yaml: `apiVersion: v1
|
|
178
|
-
kind: ResourceQuota
|
|
179
|
-
metadata:
|
|
180
|
-
name: storage-class-quota
|
|
181
|
-
namespace: default
|
|
182
|
-
spec:
|
|
183
|
-
hard:
|
|
184
|
-
requests.storage: 100Gi
|
|
185
|
-
persistentvolumeclaims: '100'
|
|
186
|
-
# For quota specific to a storage class, the storage class must have the same name
|
|
187
|
-
gold.storage-class.kubernetes.io/requests.storage: 3Gi
|
|
188
|
-
gold.storage-class.kubernetes.io/persistentvolumeclaims: '5'
|
|
189
|
-
silver.storage-class.kubernetes.io/requests.storage: 2Gi
|
|
190
|
-
silver.storage-class.kubernetes.io/persistentvolumeclaims: '3'
|
|
191
|
-
bronze.storage-class.kubernetes.io/requests.storage: 1Gi
|
|
192
|
-
bronze.storage-class.kubernetes.io/persistentvolumeclaims: '1'`,
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
title: 'Object Counts ResourceQuota',
|
|
196
|
-
description: 'A ResourceQuota example for object count limits',
|
|
197
|
-
yaml: `apiVersion: v1
|
|
198
|
-
kind: ResourceQuota
|
|
199
|
-
metadata:
|
|
200
|
-
name: object-counts
|
|
201
|
-
namespace: default
|
|
202
|
-
spec:
|
|
203
|
-
hard:
|
|
204
|
-
configmaps: "10"
|
|
205
|
-
persistentvolumeclaims: "4"
|
|
206
|
-
replicationcontrollers: "20"
|
|
207
|
-
secrets: "10"
|
|
208
|
-
services: "10"
|
|
209
|
-
services.loadbalancers: "2"`,
|
|
210
|
-
},
|
|
211
|
-
],
|
|
212
|
-
'v1.LimitRange': [
|
|
213
|
-
{
|
|
214
|
-
title: 'Memory LimitRange',
|
|
215
|
-
description: 'A LimitRange example for container memory limits',
|
|
216
|
-
yaml: `apiVersion: v1
|
|
217
|
-
kind: LimitRange
|
|
218
|
-
metadata:
|
|
219
|
-
name: mem-limit-range
|
|
220
|
-
spec:
|
|
221
|
-
limits:
|
|
222
|
-
- default:
|
|
223
|
-
memory: 512Mi
|
|
224
|
-
defaultRequest:
|
|
225
|
-
memory: 256Mi
|
|
226
|
-
type: Container`,
|
|
227
|
-
},
|
|
228
|
-
],
|
|
229
|
-
'apps/v1.StatefulSet': [
|
|
230
|
-
{
|
|
231
|
-
title: 'Basic StatefulSet',
|
|
232
|
-
description: 'A basic StatefulSet example with persistent storage',
|
|
233
|
-
yaml: `apiVersion: apps/v1
|
|
234
|
-
kind: StatefulSet
|
|
235
|
-
metadata:
|
|
236
|
-
name: example
|
|
237
|
-
spec:
|
|
238
|
-
serviceName: "httpd"
|
|
239
|
-
replicas: 3
|
|
240
|
-
selector:
|
|
241
|
-
matchLabels:
|
|
242
|
-
app: httpd
|
|
243
|
-
template:
|
|
244
|
-
metadata:
|
|
245
|
-
labels:
|
|
246
|
-
app: httpd
|
|
247
|
-
spec:
|
|
248
|
-
terminationGracePeriodSeconds: 10
|
|
249
|
-
containers:
|
|
250
|
-
- name: httpd
|
|
251
|
-
image: internal-docker-registry.cpaas-system.svc/demo-ns/nginx:alpine
|
|
252
|
-
ports:
|
|
253
|
-
- containerPort: 8080
|
|
254
|
-
name: web
|
|
255
|
-
volumeMounts:
|
|
256
|
-
- name: www
|
|
257
|
-
mountPath: /var/www/html
|
|
258
|
-
volumeClaimTemplates:
|
|
259
|
-
- metadata:
|
|
260
|
-
name: www
|
|
261
|
-
spec:
|
|
262
|
-
accessModes: [ "ReadWriteOnce" ]
|
|
263
|
-
storageClassName: my-storage-class
|
|
264
|
-
resources:
|
|
265
|
-
requests:
|
|
266
|
-
storage: 1Gi`,
|
|
267
|
-
},
|
|
268
|
-
],
|
|
269
|
-
'storage.k8s.io/v1.StorageClass': [
|
|
270
|
-
{
|
|
271
|
-
title: 'Basic StorageClass',
|
|
272
|
-
description: 'A basic StorageClass example',
|
|
273
|
-
yaml: `apiVersion: storage.k8s.io/v1
|
|
274
|
-
kind: StorageClass
|
|
275
|
-
metadata:
|
|
276
|
-
name: example
|
|
277
|
-
provisioner: my-provisioner
|
|
278
|
-
reclaimPolicy: Delete`,
|
|
279
|
-
},
|
|
280
|
-
],
|
|
281
|
-
'v1.Secret': [
|
|
282
|
-
{
|
|
283
|
-
title: 'Basic Secret',
|
|
284
|
-
description: 'A basic Secret example with username and password',
|
|
285
|
-
yaml: `apiVersion: v1
|
|
286
|
-
kind: Secret
|
|
287
|
-
metadata:
|
|
288
|
-
name: example
|
|
289
|
-
type: Opaque
|
|
290
|
-
stringData:
|
|
291
|
-
username: admin
|
|
292
|
-
password: opensesame`,
|
|
293
|
-
},
|
|
294
|
-
],
|
|
295
|
-
'app.k8s.io/v1beta1.Application': [
|
|
296
|
-
{
|
|
297
|
-
title: 'Basic Application',
|
|
298
|
-
description: 'A basic Application example with Deployment and Service',
|
|
299
|
-
yaml: `apiVersion: apps/v1
|
|
300
|
-
kind: Deployment
|
|
301
|
-
metadata:
|
|
302
|
-
labels:
|
|
303
|
-
app: nginx
|
|
304
|
-
name: nginx-deployment
|
|
305
|
-
namespace: yintest-ns1
|
|
306
|
-
spec:
|
|
307
|
-
replicas: 1
|
|
308
|
-
selector:
|
|
309
|
-
matchLabels:
|
|
310
|
-
app: nginx
|
|
311
|
-
template:
|
|
312
|
-
metadata:
|
|
313
|
-
labels:
|
|
314
|
-
app: nginx
|
|
315
|
-
spec:
|
|
316
|
-
containers:
|
|
317
|
-
- image: nginx:1.7.9
|
|
318
|
-
name: nginx
|
|
319
|
-
ports:
|
|
320
|
-
- containerPort: 80
|
|
321
|
-
---
|
|
322
|
-
apiVersion: v1
|
|
323
|
-
kind: Service
|
|
324
|
-
metadata:
|
|
325
|
-
labels:
|
|
326
|
-
app: nginx
|
|
327
|
-
name: nginx
|
|
328
|
-
namespace: yintest-ns1
|
|
329
|
-
spec:
|
|
330
|
-
ports:
|
|
331
|
-
- port: 80
|
|
332
|
-
protocol: TCP
|
|
333
|
-
targetPort: 80
|
|
334
|
-
selector:
|
|
335
|
-
app: nginx
|
|
336
|
-
type: ClusterIP`,
|
|
337
|
-
},
|
|
338
|
-
],
|
|
339
|
-
};
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC1leGFtcGxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb2RlL3lhbWwtc2lkZWJhci95YW1sLWV4YW1wbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFxQztJQUN0RSxvQkFBb0IsRUFBRTtRQUNwQjtZQUNFLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFrQmtCO1NBQ3pCO0tBQ0Y7SUFFRCxjQUFjLEVBQUU7UUFDZDtZQUNFLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsV0FBVyxFQUFFLHlEQUF5RDtZQUN0RSxJQUFJLEVBQUU7Ozs7Ozs7Ozs7O3VCQVdXO1NBQ2xCO0tBQ0Y7SUFFRCxrQkFBa0IsRUFBRTtRQUNsQjtZQUNFLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFBRSx5Q0FBeUM7WUFDdEQsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzttQ0FpQnVCO1NBQzlCO0tBQ0Y7SUFFRCxxQkFBcUIsRUFBRTtRQUNyQjtZQUNFLEtBQUssRUFBRSx3QkFBd0I7WUFDL0IsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7dUJBYVc7U0FDbEI7S0FDRjtJQUVELHdDQUF3QyxFQUFFO1FBQ3hDO1lBQ0UsS0FBSyxFQUFFLCtCQUErQjtZQUN0QyxXQUFXLEVBQUUsaURBQWlEO1lBQzlELElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBaUJjO1NBQ3JCO0tBQ0Y7SUFFRCxtQkFBbUIsRUFBRTtRQUNuQjtZQUNFLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsV0FBVyxFQUFFLGdEQUFnRDtZQUM3RCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OzhCQWlCa0I7U0FDekI7S0FDRjtJQUVELDBCQUEwQixFQUFFO1FBQzFCO1lBQ0UsS0FBSyxFQUFFLDZCQUE2QjtZQUNwQyxXQUFXLEVBQUUsNENBQTRDO1lBQ3pELElBQUksRUFBRTs7Ozs7Ozs7OzttQkFVTztTQUNkO0tBQ0Y7SUFFRCxrQkFBa0IsRUFBRTtRQUNsQjtZQUNFLEtBQUssRUFBRSx1QkFBdUI7WUFDOUIsV0FBVyxFQUFFLCtDQUErQztZQUM1RCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7dUJBVVc7U0FDbEI7UUFDRDtZQUNFLEtBQUssRUFBRSw2QkFBNkI7WUFDcEMsV0FBVyxFQUFFLDJEQUEyRDtZQUN4RSxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7OzttRUFldUQ7U0FDOUQ7UUFDRDtZQUNFLEtBQUssRUFBRSw2QkFBNkI7WUFDcEMsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7OztnQ0FZb0I7U0FDM0I7S0FDRjtJQUVELGVBQWUsRUFBRTtRQUNmO1lBQ0UsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixXQUFXLEVBQUUsa0RBQWtEO1lBQy9ELElBQUksRUFBRTs7Ozs7Ozs7OztvQkFVUTtTQUNmO0tBQ0Y7SUFFRCxxQkFBcUIsRUFBRTtRQUNyQjtZQUNFLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsV0FBVyxFQUFFLHFEQUFxRDtZQUNsRSxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFpQ1c7U0FDbEI7S0FDRjtJQUVELGdDQUFnQyxFQUFFO1FBQ2hDO1lBQ0UsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixXQUFXLEVBQUUsOEJBQThCO1lBQzNDLElBQUksRUFBRTs7Ozs7c0JBS1U7U0FDakI7S0FDRjtJQUVELFdBQVcsRUFBRTtRQUNYO1lBQ0UsS0FBSyxFQUFFLGNBQWM7WUFDckIsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxJQUFJLEVBQUU7Ozs7Ozs7dUJBT1c7U0FDbEI7S0FDRjtJQUVELGdDQUFnQyxFQUFFO1FBQ2hDO1lBQ0UsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixXQUFXLEVBQUUseURBQXlEO1lBQ3RFLElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkFxQ007U0FDYjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFlhbWxFeGFtcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogS3ViZXJuZXRlcyDotYTmupDnmoTlhoXnva4gWUFNTCDnpLrkvotcbiAqIOaMieeFpyBhcGlWZXJzaW9uLmtpbmQg55qE5qC85byP57uE57uHXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9ZQU1MX0VYQU1QTEVTOiB7IFtrZXk6IHN0cmluZ106IFlhbWxFeGFtcGxlW10gfSA9IHtcbiAgJ2FwcHMvdjEuRGVwbG95bWVudCc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIERlcGxveW1lbnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIGRlcGxveW1lbnQgZXhhbXBsZSB3aXRoIG5naW54IGNvbnRhaW5lcicsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogYXBwcy92MVxua2luZDogRGVwbG95bWVudFxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnNwZWM6XG4gIHNlbGVjdG9yOlxuICAgIG1hdGNoTGFiZWxzOlxuICAgICAgYXBwOiBodHRwZFxuICByZXBsaWNhczogM1xuICB0ZW1wbGF0ZTpcbiAgICBtZXRhZGF0YTpcbiAgICAgIGxhYmVsczpcbiAgICAgICAgYXBwOiBodHRwZFxuICAgIHNwZWM6XG4gICAgICBjb250YWluZXJzOlxuICAgICAgLSBuYW1lOiBodHRwZFxuICAgICAgICBpbWFnZTogaW50ZXJuYWwtZG9ja2VyLXJlZ2lzdHJ5LmNwYWFzLXN5c3RlbS5zdmMvZGVtby1ucy9uZ2lueDphbHBpbmVcbiAgICAgICAgcG9ydHM6XG4gICAgICAgIC0gY29udGFpbmVyUG9ydDogODA4MGAsXG4gICAgfSxcbiAgXSxcblxuICAndjEuQ29uZmlnTWFwJzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgQ29uZmlnTWFwJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBDb25maWdNYXAgZXhhbXBsZSB3aXRoIHByb3BlcnRpZXMgYW5kIGZpbGUgZGF0YScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IENvbmZpZ01hcFxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbiAgbmFtZXNwYWNlOiBkZWZhdWx0XG5kYXRhOlxuICBleGFtcGxlLnByb3BlcnR5LjE6IGhlbGxvXG4gIGV4YW1wbGUucHJvcGVydHkuMjogd29ybGRcbiAgZXhhbXBsZS5wcm9wZXJ0eS5maWxlOiB8LVxuICAgIHByb3BlcnR5LjE9dmFsdWUtMVxuICAgIHByb3BlcnR5LjI9dmFsdWUtMlxuICAgIHByb3BlcnR5LjM9dmFsdWUtM2AsXG4gICAgfSxcbiAgXSxcblxuICAnYmF0Y2gvdjEuQ3JvbkpvYic6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIENyb25Kb2InLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIENyb25Kb2IgZXhhbXBsZSB0aGF0IHJ1bnMgZGFpbHknLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IGJhdGNoL3YxXG5raW5kOiBDcm9uSm9iXG5tZXRhZGF0YTpcbiAgbmFtZTogZXhhbXBsZVxuc3BlYzpcbiAgc2NoZWR1bGU6IFwiQGRhaWx5XCJcbiAgam9iVGVtcGxhdGU6XG4gICAgc3BlYzpcbiAgICAgIHRlbXBsYXRlOlxuICAgICAgICBzcGVjOlxuICAgICAgICAgIGNvbnRhaW5lcnM6XG4gICAgICAgICAgLSBuYW1lOiBoZWxsb1xuICAgICAgICAgICAgaW1hZ2U6IGJ1c3lib3hcbiAgICAgICAgICAgIGFyZ3M6XG4gICAgICAgICAgICAtIC9iaW4vc2hcbiAgICAgICAgICAgIC0gLWNcbiAgICAgICAgICAgIC0gZGF0ZTsgZWNobyBIZWxsbyBmcm9tIHRoZSBLdWJlcm5ldGVzIGNsdXN0ZXJcbiAgICAgICAgICByZXN0YXJ0UG9saWN5OiBPbkZhaWx1cmVgLFxuICAgIH0sXG4gIF0sXG5cbiAgJ3YxLlBlcnNpc3RlbnRWb2x1bWUnOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYXNpYyBQZXJzaXN0ZW50Vm9sdW1lJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBQZXJzaXN0ZW50Vm9sdW1lIGV4YW1wbGUgd2l0aCBORlMgc3RvcmFnZScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFBlcnNpc3RlbnRWb2x1bWVcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG5zcGVjOlxuICBjYXBhY2l0eTpcbiAgICBzdG9yYWdlOiA1R2lcbiAgYWNjZXNzTW9kZXM6XG4gICAgLSBSZWFkV3JpdGVPbmNlXG4gIHBlcnNpc3RlbnRWb2x1bWVSZWNsYWltUG9saWN5OiBSZXRhaW5cbiAgc3RvcmFnZUNsYXNzTmFtZTogc2xvd1xuICBuZnM6XG4gICAgcGF0aDogL3RtcFxuICAgIHNlcnZlcjogMTcyLjE3LjAuMmAsXG4gICAgfSxcbiAgXSxcblxuICAnYXV0b3NjYWxpbmcvdjIuSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXInOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYXNpYyBIb3Jpem9udGFsUG9kQXV0b3NjYWxlcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgYmFzaWMgSFBBIGV4YW1wbGUgd2l0aCBDUFUgdXRpbGl6YXRpb24gdGFyZ2V0JyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiBhdXRvc2NhbGluZy92Mlxua2luZDogSG9yaXpvbnRhbFBvZEF1dG9zY2FsZXJcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG5zcGVjOlxuICBzY2FsZVRhcmdldFJlZjpcbiAgICBhcGlWZXJzaW9uOiBhcHBzL3YxXG4gICAga2luZDogRGVwbG95bWVudFxuICAgIG5hbWU6IGV4YW1wbGVcbiAgbWluUmVwbGljYXM6IDFcbiAgbWF4UmVwbGljYXM6IDNcbiAgbWV0cmljczpcbiAgLSB0eXBlOiBSZXNvdXJjZVxuICAgIHJlc291cmNlOlxuICAgICAgbmFtZTogY3B1XG4gICAgICB0YXJnZXQ6XG4gICAgICAgIGF2ZXJhZ2VVdGlsaXphdGlvbjogNTBcbiAgICAgICAgdHlwZTogVXRpbGl6YXRpb25gLFxuICAgIH0sXG4gIF0sXG5cbiAgJ2FwcHMvdjEuRGFlbW9uU2V0JzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgRGFlbW9uU2V0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBEYWVtb25TZXQgZXhhbXBsZSB3aXRoIG5naW54IGNvbnRhaW5lcicsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogYXBwcy92MVxua2luZDogRGFlbW9uU2V0XG5tZXRhZGF0YTpcbiAgbmFtZTogZXhhbXBsZVxuc3BlYzpcbiAgc2VsZWN0b3I6XG4gICAgbWF0Y2hMYWJlbHM6XG4gICAgICBhcHA6IGh0dHBkXG4gIHRlbXBsYXRlOlxuICAgIG1ldGFkYXRhOlxuICAgICAgbGFiZWxzOlxuICAgICAgICBhcHA6IGh0dHBkXG4gICAgc3BlYzpcbiAgICAgIGNvbnRhaW5lcnM6XG4gICAgICAtIG5hbWU6IGh0dHBkXG4gICAgICAgIGltYWdlOiBpbnRlcm5hbC1kb2NrZXItcmVnaXN0cnkuY3BhYXMtc3lzdGVtLnN2Yy9kZW1vLW5zL25naW54OmFscGluZVxuICAgICAgICBwb3J0czpcbiAgICAgICAgLSBjb250YWluZXJQb3J0OiA4MDgwYCxcbiAgICB9LFxuICBdLFxuXG4gICd2MS5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW0nOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYXNpYyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0nLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIFBWQyBleGFtcGxlIHJlcXVlc3RpbmcgMUdpIHN0b3JhZ2UnLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IHYxXG5raW5kOiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG5zcGVjOlxuICBhY2Nlc3NNb2RlczpcbiAgICAtIFJlYWRXcml0ZU9uY2VcbiAgdm9sdW1lTW9kZTogRmlsZXN5c3RlbVxuICByZXNvdXJjZXM6XG4gICAgcmVxdWVzdHM6XG4gICAgICBzdG9yYWdlOiAxR2lgLFxuICAgIH0sXG4gIF0sXG5cbiAgJ3YxLlJlc291cmNlUXVvdGEnOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdDb21wdXRlIFJlc291cmNlUXVvdGEnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIFJlc291cmNlUXVvdGEgZXhhbXBsZSBmb3IgY29tcHV0ZSByZXNvdXJjZXMnLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IHYxXG5raW5kOiBSZXNvdXJjZVF1b3RhXG5tZXRhZGF0YTpcbiAgbmFtZTogY29tcHV0ZS1xdW90YVxuICBuYW1lc3BhY2U6IGRlZmF1bHRcbnNwZWM6XG4gIGhhcmQ6XG4gICAgcmVxdWVzdHMuY3B1OiAnMSdcbiAgICByZXF1ZXN0cy5tZW1vcnk6IDFHaVxuICAgIGxpbWl0cy5jcHU6ICcyJ1xuICAgIGxpbWl0cy5tZW1vcnk6IDJHaWAsXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1N0b3JhZ2UgQ2xhc3MgUmVzb3VyY2VRdW90YScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgUmVzb3VyY2VRdW90YSBleGFtcGxlIGZvciBzdG9yYWdlIGNsYXNzIHNwZWNpZmljIHF1b3RhcycsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFJlc291cmNlUXVvdGFcbm1ldGFkYXRhOlxuICBuYW1lOiBzdG9yYWdlLWNsYXNzLXF1b3RhXG4gIG5hbWVzcGFjZTogZGVmYXVsdFxuc3BlYzpcbiAgaGFyZDpcbiAgICByZXF1ZXN0cy5zdG9yYWdlOiAxMDBHaVxuICAgIHBlcnNpc3RlbnR2b2x1bWVjbGFpbXM6ICcxMDAnXG4gICAgIyBGb3IgcXVvdGEgc3BlY2lmaWMgdG8gYSBzdG9yYWdlIGNsYXNzLCB0aGUgc3RvcmFnZSBjbGFzcyBtdXN0IGhhdmUgdGhlIHNhbWUgbmFtZVxuICAgIGdvbGQuc3RvcmFnZS1jbGFzcy5rdWJlcm5ldGVzLmlvL3JlcXVlc3RzLnN0b3JhZ2U6IDNHaVxuICAgIGdvbGQuc3RvcmFnZS1jbGFzcy5rdWJlcm5ldGVzLmlvL3BlcnNpc3RlbnR2b2x1bWVjbGFpbXM6ICc1J1xuICAgIHNpbHZlci5zdG9yYWdlLWNsYXNzLmt1YmVybmV0ZXMuaW8vcmVxdWVzdHMuc3RvcmFnZTogMkdpXG4gICAgc2lsdmVyLnN0b3JhZ2UtY2xhc3Mua3ViZXJuZXRlcy5pby9wZXJzaXN0ZW50dm9sdW1lY2xhaW1zOiAnMydcbiAgICBicm9uemUuc3RvcmFnZS1jbGFzcy5rdWJlcm5ldGVzLmlvL3JlcXVlc3RzLnN0b3JhZ2U6IDFHaVxuICAgIGJyb256ZS5zdG9yYWdlLWNsYXNzLmt1YmVybmV0ZXMuaW8vcGVyc2lzdGVudHZvbHVtZWNsYWltczogJzEnYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnT2JqZWN0IENvdW50cyBSZXNvdXJjZVF1b3RhJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBSZXNvdXJjZVF1b3RhIGV4YW1wbGUgZm9yIG9iamVjdCBjb3VudCBsaW1pdHMnLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IHYxXG5raW5kOiBSZXNvdXJjZVF1b3RhXG5tZXRhZGF0YTpcbiAgbmFtZTogb2JqZWN0LWNvdW50c1xuICBuYW1lc3BhY2U6IGRlZmF1bHRcbnNwZWM6XG4gIGhhcmQ6XG4gICAgY29uZmlnbWFwczogXCIxMFwiXG4gICAgcGVyc2lzdGVudHZvbHVtZWNsYWltczogXCI0XCJcbiAgICByZXBsaWNhdGlvbmNvbnRyb2xsZXJzOiBcIjIwXCJcbiAgICBzZWNyZXRzOiBcIjEwXCJcbiAgICBzZXJ2aWNlczogXCIxMFwiXG4gICAgc2VydmljZXMubG9hZGJhbGFuY2VyczogXCIyXCJgLFxuICAgIH0sXG4gIF0sXG5cbiAgJ3YxLkxpbWl0UmFuZ2UnOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdNZW1vcnkgTGltaXRSYW5nZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgTGltaXRSYW5nZSBleGFtcGxlIGZvciBjb250YWluZXIgbWVtb3J5IGxpbWl0cycsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IExpbWl0UmFuZ2Vcbm1ldGFkYXRhOlxuICBuYW1lOiBtZW0tbGltaXQtcmFuZ2VcbnNwZWM6XG4gIGxpbWl0czpcbiAgLSBkZWZhdWx0OlxuICAgICAgbWVtb3J5OiA1MTJNaVxuICAgIGRlZmF1bHRSZXF1ZXN0OlxuICAgICAgbWVtb3J5OiAyNTZNaVxuICAgIHR5cGU6IENvbnRhaW5lcmAsXG4gICAgfSxcbiAgXSxcblxuICAnYXBwcy92MS5TdGF0ZWZ1bFNldCc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIFN0YXRlZnVsU2V0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBTdGF0ZWZ1bFNldCBleGFtcGxlIHdpdGggcGVyc2lzdGVudCBzdG9yYWdlJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiBhcHBzL3YxXG5raW5kOiBTdGF0ZWZ1bFNldFxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnNwZWM6XG4gIHNlcnZpY2VOYW1lOiBcImh0dHBkXCJcbiAgcmVwbGljYXM6IDNcbiAgc2VsZWN0b3I6XG4gICAgbWF0Y2hMYWJlbHM6XG4gICAgICBhcHA6IGh0dHBkXG4gIHRlbXBsYXRlOlxuICAgIG1ldGFkYXRhOlxuICAgICAgbGFiZWxzOlxuICAgICAgICBhcHA6IGh0dHBkXG4gICAgc3BlYzpcbiAgICAgIHRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzOiAxMFxuICAgICAgY29udGFpbmVyczpcbiAgICAgIC0gbmFtZTogaHR0cGRcbiAgICAgICAgaW1hZ2U6IGludGVybmFsLWRvY2tlci1yZWdpc3RyeS5jcGFhcy1zeXN0ZW0uc3ZjL2RlbW8tbnMvbmdpbng6YWxwaW5lXG4gICAgICAgIHBvcnRzOlxuICAgICAgICAtIGNvbnRhaW5lclBvcnQ6IDgwODBcbiAgICAgICAgICBuYW1lOiB3ZWJcbiAgICAgICAgdm9sdW1lTW91bnRzOlxuICAgICAgICAtIG5hbWU6IHd3d1xuICAgICAgICAgIG1vdW50UGF0aDogL3Zhci93d3cvaHRtbFxuICB2b2x1bWVDbGFpbVRlbXBsYXRlczpcbiAgLSBtZXRhZGF0YTpcbiAgICAgIG5hbWU6IHd3d1xuICAgIHNwZWM6XG4gICAgICBhY2Nlc3NNb2RlczogWyBcIlJlYWRXcml0ZU9uY2VcIiBdXG4gICAgICBzdG9yYWdlQ2xhc3NOYW1lOiBteS1zdG9yYWdlLWNsYXNzXG4gICAgICByZXNvdXJjZXM6XG4gICAgICAgIHJlcXVlc3RzOlxuICAgICAgICAgIHN0b3JhZ2U6IDFHaWAsXG4gICAgfSxcbiAgXSxcblxuICAnc3RvcmFnZS5rOHMuaW8vdjEuU3RvcmFnZUNsYXNzJzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgU3RvcmFnZUNsYXNzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBTdG9yYWdlQ2xhc3MgZXhhbXBsZScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogc3RvcmFnZS5rOHMuaW8vdjFcbmtpbmQ6IFN0b3JhZ2VDbGFzc1xubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnByb3Zpc2lvbmVyOiBteS1wcm92aXNpb25lclxucmVjbGFpbVBvbGljeTogRGVsZXRlYCxcbiAgICB9LFxuICBdLFxuXG4gICd2MS5TZWNyZXQnOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYXNpYyBTZWNyZXQnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIFNlY3JldCBleGFtcGxlIHdpdGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiB2MVxua2luZDogU2VjcmV0XG5tZXRhZGF0YTpcbiAgbmFtZTogZXhhbXBsZVxudHlwZTogT3BhcXVlXG5zdHJpbmdEYXRhOlxuICB1c2VybmFtZTogYWRtaW5cbiAgcGFzc3dvcmQ6IG9wZW5zZXNhbWVgLFxuICAgIH0sXG4gIF0sXG5cbiAgJ2FwcC5rOHMuaW8vdjFiZXRhMS5BcHBsaWNhdGlvbic6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIEFwcGxpY2F0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBBcHBsaWNhdGlvbiBleGFtcGxlIHdpdGggRGVwbG95bWVudCBhbmQgU2VydmljZScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogYXBwcy92MVxua2luZDogRGVwbG95bWVudFxubWV0YWRhdGE6XG4gIGxhYmVsczpcbiAgICBhcHA6IG5naW54XG4gIG5hbWU6IG5naW54LWRlcGxveW1lbnRcbiAgbmFtZXNwYWNlOiB5aW50ZXN0LW5zMVxuc3BlYzpcbiAgcmVwbGljYXM6IDFcbiAgc2VsZWN0b3I6XG4gICAgbWF0Y2hMYWJlbHM6XG4gICAgICBhcHA6IG5naW54XG4gIHRlbXBsYXRlOlxuICAgIG1ldGFkYXRhOlxuICAgICAgbGFiZWxzOlxuICAgICAgICBhcHA6IG5naW54XG4gICAgc3BlYzpcbiAgICAgIGNvbnRhaW5lcnM6XG4gICAgICAgIC0gaW1hZ2U6IG5naW54OjEuNy45XG4gICAgICAgICAgbmFtZTogbmdpbnhcbiAgICAgICAgICBwb3J0czpcbiAgICAgICAgICAgIC0gY29udGFpbmVyUG9ydDogODBcbi0tLVxuYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFNlcnZpY2Vcbm1ldGFkYXRhOlxuICBsYWJlbHM6XG4gICAgYXBwOiBuZ2lueFxuICBuYW1lOiBuZ2lueFxuICBuYW1lc3BhY2U6IHlpbnRlc3QtbnMxXG5zcGVjOlxuICBwb3J0czpcbiAgICAtIHBvcnQ6IDgwXG4gICAgICBwcm90b2NvbDogVENQXG4gICAgICB0YXJnZXRQb3J0OiA4MFxuICBzZWxlY3RvcjpcbiAgICBhcHA6IG5naW54XG4gIHR5cGU6IENsdXN0ZXJJUGAsXG4gICAgfSxcbiAgXSxcbn07Il19
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Injectable, inject } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, switchMap, shareReplay, catchError, of, tap, debounceTime, } from 'rxjs';
|
|
4
|
-
import { API_GATEWAY } from '../constants/constants';
|
|
5
|
-
import { WorkspaceHelperService } from './workspace-helper.service';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class KubernetesSchemaService {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.http = inject(HttpClient);
|
|
10
|
-
// 移除可选依赖注入,改为直接注入
|
|
11
|
-
this.workspaceHelper = inject(WorkspaceHelperService);
|
|
12
|
-
this.initialized = false;
|
|
13
|
-
this.schemaCache = new Map();
|
|
14
|
-
this.schemaCache$$ = new BehaviorSubject(new Map());
|
|
15
|
-
}
|
|
16
|
-
get definitions() {
|
|
17
|
-
return this.schemaCache?.get(this.workspaceHelper?.baseParamsSnapshot.cluster)?.definitions;
|
|
18
|
-
}
|
|
19
|
-
// 延迟初始化方法
|
|
20
|
-
ensureInitialized() {
|
|
21
|
-
if (!this.initialized && this.workspaceHelper) {
|
|
22
|
-
this.workspaceHelper.baseParams.subscribe(() => {
|
|
23
|
-
this.clearCache();
|
|
24
|
-
});
|
|
25
|
-
this.initialized = true;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* 获取当前集群的 OpenAPI schema
|
|
30
|
-
*/
|
|
31
|
-
getOpenAPISchema() {
|
|
32
|
-
this.ensureInitialized();
|
|
33
|
-
// 如果没有 WorkspaceHelperService,返回 null
|
|
34
|
-
if (!this.workspaceHelper) {
|
|
35
|
-
console.warn('WorkspaceHelperService not available, cannot fetch OpenAPI schema');
|
|
36
|
-
return of(null);
|
|
37
|
-
}
|
|
38
|
-
return this.workspaceHelper.baseParams.pipe(switchMap(workspace => {
|
|
39
|
-
const cluster = workspace.cluster || 'global';
|
|
40
|
-
const cached = this.schemaCache.get(cluster);
|
|
41
|
-
if (cached) {
|
|
42
|
-
return of(cached);
|
|
43
|
-
}
|
|
44
|
-
return this.fetchOpenAPISchema(cluster).pipe(tap(schema => {
|
|
45
|
-
if (schema) {
|
|
46
|
-
this.schemaCache.set(cluster, schema);
|
|
47
|
-
this.schemaCache$$.next(new Map(this.schemaCache));
|
|
48
|
-
}
|
|
49
|
-
}), catchError(error => {
|
|
50
|
-
console.error(`Failed to fetch OpenAPI schema for cluster ${cluster}:`, error);
|
|
51
|
-
return of(null);
|
|
52
|
-
}));
|
|
53
|
-
}), shareReplay(1));
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 根据 Kubernetes 资源类型获取对应的 schema
|
|
57
|
-
*/
|
|
58
|
-
getResourceSchema(apiVersion, kind) {
|
|
59
|
-
return this.getOpenAPISchema().pipe(switchMap(openApiDoc => {
|
|
60
|
-
if (!openApiDoc?.definitions) {
|
|
61
|
-
return of(null);
|
|
62
|
-
}
|
|
63
|
-
// 尝试多种可能的 schema key 格式
|
|
64
|
-
const possibleKeys = [
|
|
65
|
-
`${apiVersion}.${kind}`,
|
|
66
|
-
`${apiVersion}/${kind}`,
|
|
67
|
-
kind,
|
|
68
|
-
`io.k8s.api.${apiVersion.replace('/', '.')}.${kind}`,
|
|
69
|
-
`io.k8s.api.${apiVersion.split('/')[0]}.${apiVersion.split('/')[1] || 'v1'}.${kind}`,
|
|
70
|
-
];
|
|
71
|
-
for (const key of possibleKeys) {
|
|
72
|
-
const schema = openApiDoc.definitions[key];
|
|
73
|
-
if (schema) {
|
|
74
|
-
return of(schema);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// 如果没有找到精确匹配,尝试模糊匹配
|
|
78
|
-
const fuzzyKey = Object.keys(openApiDoc.definitions).find(key => key.toLowerCase().includes(kind.toLowerCase()));
|
|
79
|
-
if (fuzzyKey) {
|
|
80
|
-
return of(openApiDoc.definitions[fuzzyKey]);
|
|
81
|
-
}
|
|
82
|
-
return of(null);
|
|
83
|
-
}));
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* 获取所有可用的资源定义
|
|
87
|
-
*/
|
|
88
|
-
getAllResourceDefinitions() {
|
|
89
|
-
return this.getOpenAPISchema().pipe(switchMap(openApiDoc => {
|
|
90
|
-
return of(openApiDoc?.definitions || null);
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* 清理缓存
|
|
95
|
-
*/
|
|
96
|
-
clearCache() {
|
|
97
|
-
this.schemaCache.clear();
|
|
98
|
-
this.schemaCache$$.next(new Map());
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* 获取缓存状态
|
|
102
|
-
*/
|
|
103
|
-
getCacheStatus() {
|
|
104
|
-
return this.schemaCache$$.asObservable();
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* 检查 WorkspaceHelperService 是否可用
|
|
108
|
-
*/
|
|
109
|
-
isWorkspaceHelperAvailable() {
|
|
110
|
-
return !!this.workspaceHelper;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 从 Kubernetes API 获取 OpenAPI schema
|
|
114
|
-
*/
|
|
115
|
-
fetchOpenAPISchema(cluster) {
|
|
116
|
-
const url = `${API_GATEWAY}/kubernetes/${cluster}/openapi/v2`;
|
|
117
|
-
return this.http.get(url).pipe(debounceTime(500), catchError(error => {
|
|
118
|
-
console.error(`Failed to fetch OpenAPI schema for cluster ${cluster}:`, error);
|
|
119
|
-
return of(null);
|
|
120
|
-
}));
|
|
121
|
-
}
|
|
122
|
-
static { this.ɵfac = function KubernetesSchemaService_Factory(t) { return new (t || KubernetesSchemaService)(); }; }
|
|
123
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: KubernetesSchemaService, factory: KubernetesSchemaService.ɵfac, providedIn: 'root' }); }
|
|
124
|
-
}
|
|
125
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(KubernetesSchemaService, [{
|
|
126
|
-
type: Injectable,
|
|
127
|
-
args: [{ providedIn: 'root' }]
|
|
128
|
-
}], null, null); })();
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ViZXJuZXRlcy1zY2hlbWEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL3NlcnZpY2VzL2t1YmVybmV0ZXMtc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFFTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsRUFBRSxFQUNGLEdBQUcsRUFDSCxZQUFZLEdBQ2IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBR3BFLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFbUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxrQkFBa0I7UUFDVCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWxELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztRQUNuRCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUVsRCxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7S0E2SmQ7SUEzSkMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FDMUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQ2pELEVBQUUsV0FBVyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxVQUFVO0lBQ0YsaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJ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QWtCLENBQUMsT0FBZTtRQUN4QyxNQUFNLEdBQUcsR0FBRyxHQUFHLFdBQVcsZUFBZSxPQUFPLGFBQWEsQ0FBQztRQUU5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQy9DLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQ1gsOENBQThDLE9BQU8sR0FBRyxFQUN4RCxLQUFLLENBQ04sQ0FBQztZQUNGLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3dGQXJLVSx1QkFBdUI7dUVBQXZCLHVCQUF1QixXQUF2Qix1QkFBdUIsbUJBRFYsTUFBTTs7aUZBQ25CLHVCQUF1QjtjQURuQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBjYXRjaEVycm9yLFxuICBvZixcbiAgdGFwLFxuICBkZWJvdW5jZVRpbWUsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBUElfR0FURVdBWSB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3BlbkFQSVYyRG9jdW1lbnQgfSBmcm9tICcuLi90eXBlcy9vcGVuYXBpJztcbmltcG9ydCB7IE9wZW5BUElWM1NjaGVtYU9iamVjdCB9IGZyb20gJy4uL3R5cGVzL3NjaGVtYSc7XG5cbmltcG9ydCB7IFdvcmtzcGFjZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuL3dvcmtzcGFjZS1oZWxwZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgS3ViZXJuZXRlc1NjaGVtYVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIC8vIOenu+mZpOWPr+mAieS+nei1luazqOWFpe+8jOaUueS4uuebtOaOpeazqOWFpVxuICByZWFkb25seSB3b3Jrc3BhY2VIZWxwZXIgPSBpbmplY3QoV29ya3NwYWNlSGVscGVyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIE9wZW5BUElWMkRvY3VtZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYUNhY2hlJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIE1hcDxzdHJpbmcsIE9wZW5BUElWMkRvY3VtZW50PlxuICA+KG5ldyBNYXAoKSk7XG5cbiAgZ2V0IGRlZmluaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYUNhY2hlPy5nZXQoXG4gICAgICB0aGlzLndvcmtzcGFjZUhlbHBlcj8uYmFzZVBhcmFtc1NuYXBzaG90LmNsdXN0ZXIsXG4gICAgKT8uZGVmaW5pdGlvbnM7XG4gIH1cblxuICAvLyDlu7bov5/liJ3lp4vljJbmlrnms5VcbiAgcHJpdmF0ZSBlbnN1cmVJbml0aWFsaXplZCgpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQgJiYgdGhpcy53b3Jrc3BhY2VIZWxwZXIpIHtcbiAgICAgIHRoaXMud29ya3NwYWNlSGVscGVyLmJhc2VQYXJhbXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3pm4bnvqTnmoQgT3BlbkFQSSBzY2hlbWFcbiAgICovXG4gIGdldE9wZW5BUElTY2hlbWEoKTogT2JzZXJ2YWJsZTxPcGVuQVBJVjJEb2N1bWVudCB8IG51bGw+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgICAvLyDlpoLmnpzmsqHmnIkgV29ya3NwYWNlSGVscGVyU2VydmljZe+8jOi/lOWbniBudWxsXG4gICAgaWYgKCF0aGlzLndvcmtzcGFjZUhlbHBlcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV29ya3NwYWNlSGVscGVyU2VydmljZSBub3QgYXZhaWxhYmxlLCBjYW5ub3QgZmV0Y2ggT3BlbkFQSSBzY2hlbWEnLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy53b3Jrc3BhY2VIZWxwZXIuYmFzZVBhcmFtcy5waXBlKFxuICAgICAgc3dpdGNoTWFwKHdvcmtzcGFjZSA9PiB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSB3b3Jrc3BhY2UuY2x1c3RlciB8fCAnZ2xvYmFsJztcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zY2hlbWFDYWNoZS5nZXQoY2x1c3Rlcik7XG5cbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgIHJldHVybiBvZihjYWNoZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hPcGVuQVBJU2NoZW1hKGNsdXN0ZXIpLnBpcGUoXG4gICAgICAgICAgdGFwKHNjaGVtYSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2NoZW1hQ2FjaGUuc2V0KGNsdXN0ZXIsIHNjaGVtYSk7XG4gICAgICAgICAgICAgIHRoaXMuc2NoZW1hQ2FjaGUkJC5uZXh0KG5ldyBNYXAodGhpcy5zY2hlbWFDYWNoZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBPcGVuQVBJIHNjaGVtYSBmb3IgY2x1c3RlciAke2NsdXN0ZXJ9OmAsXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja4gS3ViZXJuZXRlcyDotYTmupDnsbvlnovojrflj5blr7nlupTnmoQgc2NoZW1hXG4gICAqL1xuICBnZXRSZXNvdXJjZVNjaGVtYShcbiAgICBhcGlWZXJzaW9uOiBzdHJpbmcsXG4gICAga2luZDogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPE9wZW5BUElWM1NjaGVtYU9iamVjdCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcGVuQVBJU2NoZW1hKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChvcGVuQXBpRG9jID0+IHtcbiAgICAgICAgaWYgKCFvcGVuQXBpRG9jPy5kZWZpbml0aW9ucykge1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWwneivleWkmuenjeWPr+iDveeahCBzY2hlbWEga2V5IOagvOW8j1xuICAgICAgICBjb25zdCBwb3NzaWJsZUtleXMgPSBbXG4gICAgICAgICAgYCR7YXBpVmVyc2lvbn0uJHtraW5kfWAsXG4gICAgICAgICAgYCR7YXBpVmVyc2lvbn0vJHtraW5kfWAsXG4gICAgICAgICAga2luZCxcbiAgICAgICAgICBgaW8uazhzLmFwaS4ke2FwaVZlcnNpb24ucmVwbGFjZSgnLycsICcuJyl9LiR7a2luZH1gLFxuICAgICAgICAgIGBpby5rOHMuYXBpLiR7YXBpVmVyc2lvbi5zcGxpdCgnLycpWzBdfS4ke2FwaVZlcnNpb24uc3BsaXQoJy8nKVsxXSB8fCAndjEnfS4ke2tpbmR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwb3NzaWJsZUtleXMpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBvcGVuQXBpRG9jLmRlZmluaXRpb25zW2tleV07XG4gICAgICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHNjaGVtYSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g5aaC5p6c5rKh5pyJ5om+5Yiw57K+56Gu5Yy56YWN77yM5bCd6K+V5qih57OK5Yy56YWNXG4gICAgICAgIGNvbnN0IGZ1enp5S2V5ID0gT2JqZWN0LmtleXMob3BlbkFwaURvYy5kZWZpbml0aW9ucykuZmluZChrZXkgPT5cbiAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhraW5kLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChmdXp6eUtleSkge1xuICAgICAgICAgIHJldHVybiBvZihvcGVuQXBpRG9jLmRlZmluaXRpb25zW2Z1enp5S2V5XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaJgOacieWPr+eUqOeahOi1hOa6kOWumuS5iVxuICAgKi9cbiAgZ2V0QWxsUmVzb3VyY2VEZWZpbml0aW9ucygpOiBPYnNlcnZhYmxlPFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgT3BlbkFQSVYzU2NoZW1hT2JqZWN0XG4gID4gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3BlbkFQSVNjaGVtYSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAob3BlbkFwaURvYyA9PiB7XG4gICAgICAgIHJldHVybiBvZihvcGVuQXBpRG9jPy5kZWZpbml0aW9ucyB8fCBudWxsKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5riF55CG57yT5a2YXG4gICAqL1xuICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZW1hQ2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnNjaGVtYUNhY2hlJCQubmV4dChuZXcgTWFwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlue8k+WtmOeKtuaAgVxuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0dXMoKTogT2JzZXJ2YWJsZTxNYXA8c3RyaW5nLCBPcGVuQVBJVjJEb2N1bWVudD4+IHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWFDYWNoZSQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOajgOafpSBXb3Jrc3BhY2VIZWxwZXJTZXJ2aWNlIOaYr+WQpuWPr+eUqFxuICAgKi9cbiAgaXNXb3Jrc3BhY2VIZWxwZXJBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy53b3Jrc3BhY2VIZWxwZXI7XG4gIH1cblxuICAvKipcbiAgICog5LuOIEt1YmVybmV0ZXMgQVBJIOiOt+WPliBPcGVuQVBJIHNjaGVtYVxuICAgKi9cbiAgcHJpdmF0ZSBmZXRjaE9wZW5BUElTY2hlbWEoY2x1c3Rlcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxPcGVuQVBJVjJEb2N1bWVudD4ge1xuICAgIGNvbnN0IHVybCA9IGAke0FQSV9HQVRFV0FZfS9rdWJlcm5ldGVzLyR7Y2x1c3Rlcn0vb3BlbmFwaS92MmA7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxPcGVuQVBJVjJEb2N1bWVudD4odXJsKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGZldGNoIE9wZW5BUEkgc2NoZW1hIGZvciBjbHVzdGVyICR7Y2x1c3Rlcn06YCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL3R5cGVzL29wZW5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZW5BUElWM1NjaGVtYU9iamVjdCB9IGZyb20gJy4vc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQVBJVjJEb2N1bWVudCB7XG4gIHN3YWdnZXI6IHN0cmluZztcbiAgaW5mbzoge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9O1xuICBob3N0Pzogc3RyaW5nO1xuICBiYXNlUGF0aD86IHN0cmluZztcbiAgc2NoZW1lcz86IHN0cmluZ1tdO1xuICBjb25zdW1lcz86IHN0cmluZ1tdO1xuICBwcm9kdWNlcz86IHN0cmluZ1tdO1xuICBwYXRoczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIE9wZW5BUElWM1NjaGVtYU9iamVjdD47XG4gIHBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICByZXNwb25zZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzZWN1cml0eURlZmluaXRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VjdXJpdHk/OiBhbnlbXTtcbiAgdGFncz86IGFueVtdO1xuICBleHRlcm5hbERvY3M/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hUHJvcGVydHkge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBwcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBPcGVuQVBJVjNTY2hlbWFPYmplY3QgfTtcbiAgaXRlbXM/OiBPcGVuQVBJVjNTY2hlbWFPYmplY3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQnJlYWRjcnVtYiB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nW107XG4gIHNjaGVtYTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0O1xufVxuIl19
|