cdk8s-plus-36 0.0.1 → 2.0.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.
- package/.jsii +105714 -0
- package/CODE_OF_CONDUCT.md +3 -0
- package/CONTRIBUTING.md +185 -0
- package/DCO +34 -0
- package/LICENSE +202 -0
- package/NOTICE +1 -0
- package/OWNERS.md +5 -0
- package/README.md +21 -34
- package/SECURITY.md +5 -0
- package/cdk8s.yaml +13 -0
- package/docs/java.md +156096 -0
- package/docs/plus/config-map.md +98 -0
- package/docs/plus/container.md +133 -0
- package/docs/plus/cronjob.md +67 -0
- package/docs/plus/deployment.md +232 -0
- package/docs/plus/horizontal-pod-autoscaler.md +226 -0
- package/docs/plus/ingress.md +68 -0
- package/docs/plus/job.md +48 -0
- package/docs/plus/namespace.md +58 -0
- package/docs/plus/network-policy.md +341 -0
- package/docs/plus/pod.md +455 -0
- package/docs/plus/pv.md +82 -0
- package/docs/plus/pvc.md +77 -0
- package/docs/plus/rbac.md +104 -0
- package/docs/plus/secret.md +32 -0
- package/docs/plus/service-account.md +35 -0
- package/docs/plus/service.md +41 -0
- package/docs/plus/volume.md +84 -0
- package/docs/python.md +167536 -0
- package/docs/typescript.md +145485 -0
- package/git-hooks/README.md +9 -0
- package/git-hooks/prepare-commit-msg +18 -0
- package/git-hooks/setup.sh +10 -0
- package/lib/_action.d.ts +26 -0
- package/lib/_action.js +72 -0
- package/lib/api-resource.d.ts +298 -0
- package/lib/api-resource.js +438 -0
- package/lib/base.d.ts +79 -0
- package/lib/base.js +124 -0
- package/lib/config-map.d.ts +126 -0
- package/lib/config-map.js +199 -0
- package/lib/container.d.ts +1057 -0
- package/lib/container.js +944 -0
- package/lib/cron-job.d.ts +138 -0
- package/lib/cron-job.js +170 -0
- package/lib/daemon-set.d.ts +45 -0
- package/lib/daemon-set.js +91 -0
- package/lib/deployment.d.ts +235 -0
- package/lib/deployment.js +274 -0
- package/lib/handler.d.ts +62 -0
- package/lib/handler.js +88 -0
- package/lib/horizontal-pod-autoscaler.d.ts +500 -0
- package/lib/horizontal-pod-autoscaler.js +629 -0
- package/lib/imports/k8s.d.ts +27283 -0
- package/lib/imports/k8s.js +20112 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.js +66 -0
- package/lib/ingress.d.ts +230 -0
- package/lib/ingress.js +282 -0
- package/lib/job.d.ts +64 -0
- package/lib/job.js +101 -0
- package/lib/namespace.d.ts +128 -0
- package/lib/namespace.js +148 -0
- package/lib/network-policy.d.ts +311 -0
- package/lib/network-policy.js +383 -0
- package/lib/pod.d.ts +1097 -0
- package/lib/pod.js +1227 -0
- package/lib/probe.d.ts +181 -0
- package/lib/probe.js +124 -0
- package/lib/pv.d.ts +375 -0
- package/lib/pv.js +387 -0
- package/lib/pvc.d.ts +163 -0
- package/lib/pvc.js +204 -0
- package/lib/role-binding.d.ts +138 -0
- package/lib/role-binding.js +207 -0
- package/lib/role.d.ts +268 -0
- package/lib/role.js +441 -0
- package/lib/secret.d.ts +195 -0
- package/lib/secret.js +221 -0
- package/lib/service-account.d.ts +83 -0
- package/lib/service-account.js +148 -0
- package/lib/service.d.ts +289 -0
- package/lib/service.js +235 -0
- package/lib/stateful-set.d.ts +206 -0
- package/lib/stateful-set.js +291 -0
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +33 -0
- package/lib/volume.d.ts +577 -0
- package/lib/volume.js +410 -0
- package/lib/workload.d.ts +121 -0
- package/lib/workload.js +158 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/brace-expansion/.github/FUNDING.yml +2 -0
- package/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/brace-expansion/README.md +157 -0
- package/node_modules/brace-expansion/index.js +394 -0
- package/node_modules/brace-expansion/package.json +49 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +491 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
- package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
- package/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/ast.js +747 -0
- package/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
- package/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/escape.d.ts +12 -0
- package/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/escape.js +22 -0
- package/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/index.d.ts +98 -0
- package/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/index.js +1023 -0
- package/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
- package/node_modules/minimatch/dist/commonjs/package.json +3 -0
- package/node_modules/minimatch/dist/commonjs/unescape.d.ts +17 -0
- package/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/commonjs/unescape.js +24 -0
- package/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
- package/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
- package/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
- package/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/ast.js +743 -0
- package/node_modules/minimatch/dist/esm/ast.js.map +1 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
- package/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
- package/node_modules/minimatch/dist/esm/escape.d.ts +12 -0
- package/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/escape.js +18 -0
- package/node_modules/minimatch/dist/esm/escape.js.map +1 -0
- package/node_modules/minimatch/dist/esm/index.d.ts +98 -0
- package/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/index.js +1007 -0
- package/node_modules/minimatch/dist/esm/index.js.map +1 -0
- package/node_modules/minimatch/dist/esm/package.json +3 -0
- package/node_modules/minimatch/dist/esm/unescape.d.ts +17 -0
- package/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
- package/node_modules/minimatch/dist/esm/unescape.js +20 -0
- package/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
- package/node_modules/minimatch/package.json +82 -0
- package/package.json +172 -6
- package/rotate.md +82 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.StatefulSetUpdateStrategy = exports.StatefulSet = exports.PodManagementPolicy = void 0;
|
|
37
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
38
|
+
const cdk8s_1 = require("cdk8s");
|
|
39
|
+
const container = __importStar(require("./container"));
|
|
40
|
+
const k8s = __importStar(require("./imports/k8s"));
|
|
41
|
+
const k8s_1 = require("./imports/k8s");
|
|
42
|
+
const service = __importStar(require("./service"));
|
|
43
|
+
const workload = __importStar(require("./workload"));
|
|
44
|
+
/**
|
|
45
|
+
* Controls how pods are created during initial scale up, when replacing pods on nodes,
|
|
46
|
+
* or when scaling down.
|
|
47
|
+
*
|
|
48
|
+
* The default policy is `OrderedReady`, where pods are created in increasing order
|
|
49
|
+
* (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before
|
|
50
|
+
* continuing. When scaling down, the pods are removed in the opposite order.
|
|
51
|
+
*
|
|
52
|
+
* The alternative policy is `Parallel` which will create pods in parallel to match the
|
|
53
|
+
* desired scale without waiting, and on scale down will delete all pods at once.
|
|
54
|
+
*/
|
|
55
|
+
var PodManagementPolicy;
|
|
56
|
+
(function (PodManagementPolicy) {
|
|
57
|
+
PodManagementPolicy["ORDERED_READY"] = "OrderedReady";
|
|
58
|
+
PodManagementPolicy["PARALLEL"] = "Parallel";
|
|
59
|
+
})(PodManagementPolicy || (exports.PodManagementPolicy = PodManagementPolicy = {}));
|
|
60
|
+
/**
|
|
61
|
+
* StatefulSet is the workload API object used to manage stateful applications.
|
|
62
|
+
*
|
|
63
|
+
* Manages the deployment and scaling of a set of Pods, and provides guarantees
|
|
64
|
+
* about the ordering and uniqueness of these Pods.
|
|
65
|
+
*
|
|
66
|
+
* Like a Deployment, a StatefulSet manages Pods that are based on an identical
|
|
67
|
+
* container spec. Unlike a Deployment, a StatefulSet maintains a sticky identity
|
|
68
|
+
* for each of their Pods. These pods are created from the same spec, but are not
|
|
69
|
+
* interchangeable: each has a persistent identifier that it maintains across any
|
|
70
|
+
* rescheduling.
|
|
71
|
+
*
|
|
72
|
+
* If you want to use storage volumes to provide persistence for your workload, you
|
|
73
|
+
* can use a StatefulSet as part of the solution. Although individual Pods in a StatefulSet
|
|
74
|
+
* are susceptible to failure, the persistent Pod identifiers make it easier to match existing
|
|
75
|
+
* volumes to the new Pods that replace any that have failed.
|
|
76
|
+
*
|
|
77
|
+
* Using StatefulSets
|
|
78
|
+
* ------------------
|
|
79
|
+
* StatefulSets are valuable for applications that require one or more of the following.
|
|
80
|
+
*
|
|
81
|
+
* - Stable, unique network identifiers.
|
|
82
|
+
* - Stable, persistent storage.
|
|
83
|
+
* - Ordered, graceful deployment and scaling.
|
|
84
|
+
* - Ordered, automated rolling updates.
|
|
85
|
+
*/
|
|
86
|
+
class StatefulSet extends workload.Workload {
|
|
87
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.StatefulSet", version: "2.0.0" };
|
|
88
|
+
/**
|
|
89
|
+
* Number of desired pods.
|
|
90
|
+
*/
|
|
91
|
+
replicas;
|
|
92
|
+
/**
|
|
93
|
+
* Management policy to use for the set.
|
|
94
|
+
*/
|
|
95
|
+
podManagementPolicy;
|
|
96
|
+
/**
|
|
97
|
+
* The update startegy of this stateful set.
|
|
98
|
+
*/
|
|
99
|
+
strategy;
|
|
100
|
+
/**
|
|
101
|
+
* Minimum duration for which a newly created pod should be ready without
|
|
102
|
+
* any of its container crashing, for it to be considered available.
|
|
103
|
+
*/
|
|
104
|
+
minReady;
|
|
105
|
+
/**
|
|
106
|
+
* @see base.Resource.apiObject
|
|
107
|
+
*/
|
|
108
|
+
apiObject;
|
|
109
|
+
resourceType = 'statefulsets';
|
|
110
|
+
hasAutoscaler = false;
|
|
111
|
+
service;
|
|
112
|
+
volumeClaimTemplates;
|
|
113
|
+
constructor(scope, id, props) {
|
|
114
|
+
super(scope, id, props);
|
|
115
|
+
this.apiObject = new k8s.KubeStatefulSet(this, 'Resource', {
|
|
116
|
+
metadata: props.metadata,
|
|
117
|
+
spec: cdk8s_1.Lazy.any({ produce: () => this._toKube() }),
|
|
118
|
+
});
|
|
119
|
+
this.service = props.service ?? this._createHeadlessService();
|
|
120
|
+
this.apiObject.addDependency(this.service);
|
|
121
|
+
this.replicas = props.replicas;
|
|
122
|
+
this.strategy = props.strategy ?? StatefulSetUpdateStrategy.rollingUpdate();
|
|
123
|
+
this.podManagementPolicy = props.podManagementPolicy ?? PodManagementPolicy.ORDERED_READY;
|
|
124
|
+
this.minReady = props.minReady ?? cdk8s_1.Duration.seconds(0);
|
|
125
|
+
props?.volumeClaimTemplates?.forEach(template => this.addVolumeClaimTemplate(template));
|
|
126
|
+
this.service.select(this);
|
|
127
|
+
if (this.isolate) {
|
|
128
|
+
this.connections.isolate();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
addVolumeClaimTemplate(template) {
|
|
132
|
+
if (this.volumeClaimTemplates?.some(t => t.name === template.name)) {
|
|
133
|
+
throw new Error(`A volume claim template with name "${template.name}" already exists`);
|
|
134
|
+
}
|
|
135
|
+
this.volumeClaimTemplates = this.volumeClaimTemplates
|
|
136
|
+
? [...this.volumeClaimTemplates, template]
|
|
137
|
+
: [template];
|
|
138
|
+
}
|
|
139
|
+
_createHeadlessService() {
|
|
140
|
+
const myPorts = container.extractContainerPorts(this);
|
|
141
|
+
const myPortNumbers = myPorts.map(p => p.number);
|
|
142
|
+
const ports = myPorts.map(p => ({
|
|
143
|
+
port: p.number,
|
|
144
|
+
targetPort: p.number,
|
|
145
|
+
protocol: p.protocol,
|
|
146
|
+
name: p.name,
|
|
147
|
+
}));
|
|
148
|
+
if (ports.length === 0) {
|
|
149
|
+
throw new Error(`Unable to create a service for the stateful set ${this.name}: StatefulSet ports cannot be determined.`);
|
|
150
|
+
}
|
|
151
|
+
// validate the ports are owned by our containers
|
|
152
|
+
for (const port of ports) {
|
|
153
|
+
const targetPort = port.targetPort ?? port.port;
|
|
154
|
+
if (!myPortNumbers.includes(targetPort)) {
|
|
155
|
+
throw new Error(`Unable to expose stateful set ${this.name} via a service: Port ${targetPort} is not exposed by any container`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const metadata = { namespace: this.metadata.namespace };
|
|
159
|
+
return new service.Service(this, 'Service', {
|
|
160
|
+
selector: this,
|
|
161
|
+
ports,
|
|
162
|
+
metadata,
|
|
163
|
+
clusterIP: 'None',
|
|
164
|
+
type: service.ServiceType.CLUSTER_IP,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
170
|
+
_toKube() {
|
|
171
|
+
return {
|
|
172
|
+
replicas: this.hasAutoscaler ? undefined : (this.replicas ?? 1),
|
|
173
|
+
serviceName: this.service.name,
|
|
174
|
+
minReadySeconds: this.minReady.toSeconds(),
|
|
175
|
+
template: {
|
|
176
|
+
metadata: this.podMetadata.toJson(),
|
|
177
|
+
spec: this._toPodSpec(),
|
|
178
|
+
},
|
|
179
|
+
selector: this._toLabelSelector(),
|
|
180
|
+
podManagementPolicy: this.podManagementPolicy,
|
|
181
|
+
volumeClaimTemplates: this._toPersistentVolumeClaims(),
|
|
182
|
+
updateStrategy: this.strategy._toKube(),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* @internal
|
|
187
|
+
*/
|
|
188
|
+
_toPodSpec() {
|
|
189
|
+
const podSpec = super._toPodSpec();
|
|
190
|
+
return {
|
|
191
|
+
...podSpec,
|
|
192
|
+
volumes: this._filterPodSpecVolumes(podSpec),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* @internal
|
|
197
|
+
*/
|
|
198
|
+
_filterPodSpecVolumes(podSpec) {
|
|
199
|
+
if (!this.volumeClaimTemplates || !podSpec.volumes) {
|
|
200
|
+
return podSpec.volumes;
|
|
201
|
+
}
|
|
202
|
+
const volumeClaimNames = this.volumeClaimTemplates.map(vct => vct.name);
|
|
203
|
+
const filteredVolumes = podSpec.volumes.filter(vol => !volumeClaimNames.includes(vol.name));
|
|
204
|
+
return filteredVolumes.length > 0 ? filteredVolumes : undefined;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* @see IScalable.markHasAutoscaler()
|
|
208
|
+
*/
|
|
209
|
+
markHasAutoscaler() {
|
|
210
|
+
this.hasAutoscaler = true;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @see IScalable.toScalingTarget()
|
|
214
|
+
*/
|
|
215
|
+
toScalingTarget() {
|
|
216
|
+
return {
|
|
217
|
+
kind: this.apiObject.kind,
|
|
218
|
+
apiVersion: this.apiObject.apiVersion,
|
|
219
|
+
name: this.name,
|
|
220
|
+
containers: this.containers,
|
|
221
|
+
replicas: this.replicas,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* @internal
|
|
226
|
+
*/
|
|
227
|
+
_toPersistentVolumeClaims() {
|
|
228
|
+
const volumeNames = this.containers.flatMap(it => it.mounts).map(mount => mount.volume.name);
|
|
229
|
+
this.volumeClaimTemplates?.forEach(t => {
|
|
230
|
+
if (!volumeNames.includes(t.name)) {
|
|
231
|
+
throw new Error(`Volume claim template with name "${t.name}" is not used by any container mount`);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
return this.volumeClaimTemplates?.map(template => {
|
|
235
|
+
const resources = template.storage
|
|
236
|
+
? { requests: { storage: k8s_1.Quantity.fromString(template.storage.asString()) } }
|
|
237
|
+
: {};
|
|
238
|
+
return {
|
|
239
|
+
metadata: {
|
|
240
|
+
name: template.name,
|
|
241
|
+
},
|
|
242
|
+
spec: {
|
|
243
|
+
accessModes: template.accessModes,
|
|
244
|
+
storageClassName: template.storageClassName,
|
|
245
|
+
resources,
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.StatefulSet = StatefulSet;
|
|
252
|
+
/**
|
|
253
|
+
* StatefulSet update strategies.
|
|
254
|
+
*/
|
|
255
|
+
class StatefulSetUpdateStrategy {
|
|
256
|
+
strategy;
|
|
257
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-36.StatefulSetUpdateStrategy", version: "2.0.0" };
|
|
258
|
+
/**
|
|
259
|
+
* The controller will not automatically update the Pods in a StatefulSet.
|
|
260
|
+
* Users must manually delete Pods to cause the controller to create new Pods
|
|
261
|
+
* that reflect modifications.
|
|
262
|
+
*/
|
|
263
|
+
static onDelete() {
|
|
264
|
+
return new StatefulSetUpdateStrategy({
|
|
265
|
+
type: 'OnDelete',
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* The controller will delete and recreate each Pod in the StatefulSet.
|
|
270
|
+
* It will proceed in the same order as Pod termination (from the largest ordinal to the smallest),
|
|
271
|
+
* updating each Pod one at a time. The Kubernetes control plane waits until an updated
|
|
272
|
+
* Pod is Running and Ready prior to updating its predecessor.
|
|
273
|
+
*/
|
|
274
|
+
static rollingUpdate(options = {}) {
|
|
275
|
+
return new StatefulSetUpdateStrategy({
|
|
276
|
+
type: 'RollingUpdate',
|
|
277
|
+
rollingUpdate: { partition: options.partition ?? 0 },
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
constructor(strategy) {
|
|
281
|
+
this.strategy = strategy;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* @internal
|
|
285
|
+
*/
|
|
286
|
+
_toKube() {
|
|
287
|
+
return this.strategy;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.StatefulSetUpdateStrategy = StatefulSetUpdateStrategy;
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVmdWwtc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRlZnVsLXNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxtREFBcUM7QUFDckMsdUNBQThHO0FBRTlHLG1EQUFxQztBQUNyQyxxREFBdUM7QUFFdkM7Ozs7Ozs7Ozs7R0FVRztBQUNILElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixxREFBOEIsQ0FBQTtJQUM5Qiw0Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFHOUI7QUF5REQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFhLFdBQVksU0FBUSxRQUFRLENBQUMsUUFBUTs7SUFDaEQ7O09BRUc7SUFDYSxRQUFRLENBQVU7SUFFbEM7O09BRUc7SUFDYSxtQkFBbUIsQ0FBc0I7SUFFekQ7O09BRUc7SUFDYSxRQUFRLENBQTRCO0lBRXBEOzs7T0FHRztJQUNhLFFBQVEsQ0FBVztJQUVuQzs7T0FFRztJQUNnQixTQUFTLENBQVk7SUFFeEIsWUFBWSxHQUFHLGNBQWMsQ0FBQztJQUV2QyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRWIsT0FBTyxDQUFrQjtJQUVsQyxvQkFBb0IsQ0FBd0M7SUFFbkUsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3pELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixJQUFJLEVBQUUsWUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFB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Q0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUF5RCxFQUFFO1FBRXJGLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQztZQUNuQyxJQUFJLEVBQUUsZUFBZTtZQUNyQixhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUU7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQXFDLFFBQXVDO1FBQXZDLGFBQVEsR0FBUixRQUFRLENBQStCO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzs7QUFuQ0gsOERBcUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpT2JqZWN0LCBMYXp5LCBEdXJhdGlvbiB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY29udGFpbmVyIGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCB7IElTY2FsYWJsZSwgU2NhbGluZ1RhcmdldCB9IGZyb20gJy4vaG9yaXpvbnRhbC1wb2QtYXV0b3NjYWxlcic7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgeyBLdWJlUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMsIFBvZFNwZWMsIFF1YW50aXR5LCBWb2x1bWVSZXNvdXJjZVJlcXVpcmVtZW50cyB9IGZyb20gJy4vaW1wb3J0cy9rOHMnO1xuaW1wb3J0IHsgUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMgfSBmcm9tICcuL3B2Yyc7XG5pbXBvcnQgKiBhcyBzZXJ2aWNlIGZyb20gJy4vc2VydmljZSc7XG5pbXBvcnQgKiBhcyB3b3JrbG9hZCBmcm9tICcuL3dvcmtsb2FkJztcblxuLyoqXG4gKiBDb250cm9scyBob3cgcG9kcyBhcmUgY3JlYXRlZCBkdXJpbmcgaW5pdGlhbCBzY2FsZSB1cCwgd2hlbiByZXBsYWNpbmcgcG9kcyBvbiBub2RlcyxcbiAqIG9yIHdoZW4gc2NhbGluZyBkb3duLlxuICpcbiAqIFRoZSBkZWZhdWx0IHBvbGljeSBpcyBgT3JkZXJlZFJlYWR5YCwgd2hlcmUgcG9kcyBhcmUgY3JlYXRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyXG4gKiAocG9kLTAsIHRoZW4gcG9kLTEsIGV0YykgYW5kIHRoZSBjb250cm9sbGVyIHdpbGwgd2FpdCB1bnRpbCBlYWNoIHBvZCBpcyByZWFkeSBiZWZvcmVcbiAqIGNvbnRpbnVpbmcuIFdoZW4gc2NhbGluZyBkb3duLCB0aGUgcG9kcyBhcmUgcmVtb3ZlZCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gKlxuICogVGhlIGFsdGVybmF0aXZlIHBvbGljeSBpcyBgUGFyYWxsZWxgIHdoaWNoIHdpbGwgY3JlYXRlIHBvZHMgaW4gcGFyYWxsZWwgdG8gbWF0Y2ggdGhlXG4gKiBkZXNpcmVkIHNjYWxlIHdpdGhvdXQgd2FpdGluZywgYW5kIG9uIHNjYWxlIGRvd24gd2lsbCBkZWxldGUgYWxsIHBvZHMgYXQgb25jZS5cbiAqL1xuZXhwb3J0IGVudW0gUG9kTWFuYWdlbWVudFBvbGljeSB7XG4gIE9SREVSRURfUkVBRFkgPSAnT3JkZXJlZFJlYWR5JyxcbiAgUEFSQUxMRUwgPSAnUGFyYWxsZWwnLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGluaXRpYWxpemF0aW9uIG9mIGBTdGF0ZWZ1bFNldGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGVmdWxTZXRQcm9wcyBleHRlbmRzIHdvcmtsb2FkLldvcmtsb2FkUHJvcHMge1xuICAvKipcbiAgICogU2VydmljZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc3RhdGVmdWxzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSBuZXcgaGVhZGxlc3Mgc2VydmljZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlPzogc2VydmljZS5TZXJ2aWNlO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGVzaXJlZCBwb2RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUG9kIG1hbmFnZW1lbnQgcG9saWN5IHRvIHVzZSBmb3IgdGhpcyBzdGF0ZWZ1bHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgUG9kTWFuYWdlbWVudFBvbGljeS5PUkRFUkVEX1JFQURZXG4gICAqL1xuICByZWFkb25seSBwb2RNYW5hZ2VtZW50UG9saWN5PzogUG9kTWFuYWdlbWVudFBvbGljeTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5IHRoYXQgd2lsbCBiZSBlbXBsb3llZCB0byB1cGRhdGUgUG9kcyBpbiB0aGUgU3RhdGVmdWxTZXQgd2hlbiBhIHJldmlzaW9uIGlzIG1hZGUgdG8gVGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUm9sbGluZ1VwZGF0ZSB3aXRoIHBhcnRpdGlvbiBzZXQgdG8gMFxuICAgKi9cbiAgcmVhZG9ubHkgc3RyYXRlZ3k/OiBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGR1cmF0aW9uIGZvciB3aGljaCBhIG5ld2x5IGNyZWF0ZWQgcG9kIHNob3VsZCBiZSByZWFkeSB3aXRob3V0IGFueSBvZiBpdHMgY29udGFpbmVyIGNyYXNoaW5nLFxuICAgKiBmb3IgaXQgdG8gYmUgY29uc2lkZXJlZCBhdmFpbGFibGUuIFplcm8gbWVhbnMgdGhlIHBvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYXZhaWxhYmxlIGFzIHNvb24gYXMgaXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFN0YXRlZnVsU2V0TWluUmVhZHlTZWNvbmRzIGZlYXR1cmUgZ2F0ZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvY29udHJvbGxlcnMvZGVwbG95bWVudC8jbWluLXJlYWR5LXNlY29uZHNcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWluUmVhZHk/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB0ZW1wbGF0ZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggcG9kIGluIHRoZSBTdGF0ZWZ1bFNldC5cbiAgICogVGhlIFN0YXRlZnVsU2V0IGNvbnRyb2xsZXIgY3JlYXRlcyBhIFBWQyBhbmQgYSBQViBmb3IgZWFjaCB0ZW1wbGF0ZSBiYXNlZCBvbiB0aGUgcG9kJ3Mgb3JkaW5hbCBpbmRleCxcbiAgICogZW5zdXJpbmcgc3RhYmxlIHN0b3JhZ2UgYWNyb3NzIHBvZCByZXN0YXJ0cyBhbmQgcmVzY2hlZHVsaW5nLlxuICAgKlxuICAgKiBFYWNoIGNsYWltIGluIHRoaXMgbGlzdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIChieSBuYW1lKSB2b2x1bWVNb3VudCBpbiBvbmUgb2YgdGhlIGNvbnRhaW5lcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdm9sdW1lIGNsYWltIHRlbXBsYXRlcyB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVDbGFpbVRlbXBsYXRlcz86IFBlcnNpc3RlbnRWb2x1bWVDbGFpbVRlbXBsYXRlUHJvcHNbXTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bFNldCBpcyB0aGUgd29ya2xvYWQgQVBJIG9iamVjdCB1c2VkIHRvIG1hbmFnZSBzdGF0ZWZ1bCBhcHBsaWNhdGlvbnMuXG4gKlxuICogTWFuYWdlcyB0aGUgZGVwbG95bWVudCBhbmQgc2NhbGluZyBvZiBhIHNldCBvZiBQb2RzLCBhbmQgcHJvdmlkZXMgZ3VhcmFudGVlc1xuICogYWJvdXQgdGhlIG9yZGVyaW5nIGFuZCB1bmlxdWVuZXNzIG9mIHRoZXNlIFBvZHMuXG4gKlxuICogTGlrZSBhIERlcGxveW1lbnQsIGEgU3RhdGVmdWxTZXQgbWFuYWdlcyBQb2RzIHRoYXQgYXJlIGJhc2VkIG9uIGFuIGlkZW50aWNhbFxuICogY29udGFpbmVyIHNwZWMuIFVubGlrZSBhIERlcGxveW1lbnQsIGEgU3RhdGVmdWxTZXQgbWFpbnRhaW5zIGEgc3RpY2t5IGlkZW50aXR5XG4gKiBmb3IgZWFjaCBvZiB0aGVpciBQb2RzLiBUaGVzZSBwb2RzIGFyZSBjcmVhdGVkIGZyb20gdGhlIHNhbWUgc3BlYywgYnV0IGFyZSBub3RcbiAqIGludGVyY2hhbmdlYWJsZTogZWFjaCBoYXMgYSBwZXJzaXN0ZW50IGlkZW50aWZpZXIgdGhhdCBpdCBtYWludGFpbnMgYWNyb3NzIGFueVxuICogcmVzY2hlZHVsaW5nLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBzdG9yYWdlIHZvbHVtZXMgdG8gcHJvdmlkZSBwZXJzaXN0ZW5jZSBmb3IgeW91ciB3b3JrbG9hZCwgeW91XG4gKiBjYW4gdXNlIGEgU3RhdGVmdWxTZXQgYXMgcGFydCBvZiB0aGUgc29sdXRpb24uIEFsdGhvdWdoIGluZGl2aWR1YWwgUG9kcyBpbiBhIFN0YXRlZnVsU2V0XG4gKiBhcmUgc3VzY2VwdGlibGUgdG8gZmFpbHVyZSwgdGhlIHBlcnNpc3RlbnQgUG9kIGlkZW50aWZpZXJzIG1ha2UgaXQgZWFzaWVyIHRvIG1hdGNoIGV4aXN0aW5nXG4gKiB2b2x1bWVzIHRvIHRoZSBuZXcgUG9kcyB0aGF0IHJlcGxhY2UgYW55IHRoYXQgaGF2ZSBmYWlsZWQuXG4gKlxuICogVXNpbmcgU3RhdGVmdWxTZXRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFN0YXRlZnVsU2V0cyBhcmUgdmFsdWFibGUgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZy5cbiAqXG4gKiAtIFN0YWJsZSwgdW5pcXVlIG5ldHdvcmsgaWRlbnRpZmllcnMuXG4gKiAtIFN0YWJsZSwgcGVyc2lzdGVudCBzdG9yYWdlLlxuICogLSBPcmRlcmVkLCBncmFjZWZ1bCBkZXBsb3ltZW50IGFuZCBzY2FsaW5nLlxuICogLSBPcmRlcmVkLCBhdXRvbWF0ZWQgcm9sbGluZyB1cGRhdGVzLlxuICovXG5leHBvcnQgY2xhc3MgU3RhdGVmdWxTZXQgZXh0ZW5kcyB3b3JrbG9hZC5Xb3JrbG9hZCBpbXBsZW1lbnRzIElTY2FsYWJsZSB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGVzaXJlZCBwb2RzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlcGxpY2FzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYW5hZ2VtZW50IHBvbGljeSB0byB1c2UgZm9yIHRoZSBzZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9kTWFuYWdlbWVudFBvbGljeTogUG9kTWFuYWdlbWVudFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIHVwZGF0ZSBzdGFydGVneSBvZiB0aGlzIHN0YXRlZnVsIHNldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdHJhdGVneTogU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneTtcblxuICAvKipcbiAgICogTWluaW11bSBkdXJhdGlvbiBmb3Igd2hpY2ggYSBuZXdseSBjcmVhdGVkIHBvZCBzaG91bGQgYmUgcmVhZHkgd2l0aG91dFxuICAgKiBhbnkgb2YgaXRzIGNvbnRhaW5lciBjcmFzaGluZywgZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1pblJlYWR5OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQHNlZSBiYXNlLlJlc291cmNlLmFwaU9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaU9iamVjdDogQXBpT2JqZWN0O1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGUgPSAnc3RhdGVmdWxzZXRzJztcblxuICBwdWJsaWMgaGFzQXV0b3NjYWxlciA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBzZXJ2aWNlLlNlcnZpY2U7XG5cbiAgcHVibGljIHZvbHVtZUNsYWltVGVtcGxhdGVzPzogUGVyc2lzdGVudFZvbHVtZUNsYWltVGVtcGxhdGVQcm9wc1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGF0ZWZ1bFNldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmFwaU9iamVjdCA9IG5ldyBrOHMuS3ViZVN0YXRlZnVsU2V0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG1ldGFkYXRhOiBwcm9wcy5tZXRhZGF0YSxcbiAgICAgIHNwZWM6IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5fdG9LdWJlKCkgfSksXG4gICAgfSk7XG4gICAgdGhpcy5zZXJ2aWNlID0gcHJvcHMuc2VydmljZSA/PyB0aGlzLl9jcmVhdGVIZWFkbGVzc1NlcnZpY2UoKTtcblxuICAgIHRoaXMuYXBpT2JqZWN0LmFkZERlcGVuZGVuY3kodGhpcy5zZXJ2aWNlKTtcblxuICAgIHRoaXMucmVwbGljYXMgPSBwcm9wcy5yZXBsaWNhcztcbiAgICB0aGlzLnN0cmF0ZWd5ID0gcHJvcHMuc3RyYXRlZ3kgPz8gU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneS5yb2xsaW5nVXBkYXRlKCk7XG4gICAgdGhpcy5wb2RNYW5hZ2VtZW50UG9saWN5ID0gcHJvcHMucG9kTWFuYWdlbWVudFBvbGljeSA/PyBQb2RNYW5hZ2VtZW50UG9saWN5Lk9SREVSRURfUkVBRFk7XG4gICAgdGhpcy5taW5SZWFkeSA9IHByb3BzLm1pblJlYWR5ID8/IER1cmF0aW9uLnNlY29uZHMoMCk7XG4gICAgcHJvcHM/LnZvbHVtZUNsYWltVGVtcGxhdGVzPy5mb3JFYWNoKHRlbXBsYXRlID0+IHRoaXMuYWRkVm9sdW1lQ2xhaW1UZW1wbGF0ZSh0ZW1wbGF0ZSkpO1xuICAgIHRoaXMuc2VydmljZS5zZWxlY3QodGhpcyk7XG5cbiAgICBpZiAodGhpcy5pc29sYXRlKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25zLmlzb2xhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkVm9sdW1lQ2xhaW1UZW1wbGF0ZSh0ZW1wbGF0ZTogUGVyc2lzdGVudFZvbHVtZUNsYWltVGVtcGxhdGVQcm9wcykge1xuICAgIGlmICh0aGlzLnZvbHVtZUNsYWltVGVtcGxhdGVzPy5zb21lKHQgPT4gdC5uYW1lID09PSB0ZW1wbGF0ZS5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIHZvbHVtZSBjbGFpbSB0ZW1wbGF0ZSB3aXRoIG5hbWUgXCIke3RlbXBsYXRlLm5hbWV9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG4gICAgdGhpcy52b2x1bWVDbGFpbVRlbXBsYXRlcyA9IHRoaXMudm9sdW1lQ2xhaW1UZW1wbGF0ZXNcbiAgICAgID8gWy4uLnRoaXMudm9sdW1lQ2xhaW1UZW1wbGF0ZXMsIHRlbXBsYXRlXVxuICAgICAgOiBbdGVtcGxhdGVdO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlSGVhZGxlc3NTZXJ2aWNlKCkge1xuICAgIGNvbnN0IG15UG9ydHMgPSBjb250YWluZXIuZXh0cmFjdENvbnRhaW5lclBvcnRzKHRoaXMpO1xuICAgIGNvbnN0IG15UG9ydE51bWJlcnMgPSBteVBvcnRzLm1hcChwID0+IHAubnVtYmVyKTtcbiAgICBjb25zdCBwb3J0czogc2VydmljZS5TZXJ2aWNlUG9ydFtdID0gbXlQb3J0cy5tYXAocCA9PiAoe1xuICAgICAgcG9ydDogcC5udW1iZXIsXG4gICAgICB0YXJnZXRQb3J0OiBwLm51bWJlcixcbiAgICAgIHByb3RvY29sOiBwLnByb3RvY29sLFxuICAgICAgbmFtZTogcC5uYW1lLFxuICAgIH0pKTtcbiAgICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjcmVhdGUgYSBzZXJ2aWNlIGZvciB0aGUgc3RhdGVmdWwgc2V0ICR7dGhpcy5uYW1lfTogU3RhdGVmdWxTZXQgcG9ydHMgY2Fubm90IGJlIGRldGVybWluZWQuYCk7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgdGhlIHBvcnRzIGFyZSBvd25lZCBieSBvdXIgY29udGFpbmVyc1xuICAgIGZvciAoY29uc3QgcG9ydCBvZiBwb3J0cykge1xuICAgICAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQudGFyZ2V0UG9ydCA/PyBwb3J0LnBvcnQ7XG4gICAgICBpZiAoIW15UG9ydE51bWJlcnMuaW5jbHVkZXModGFyZ2V0UG9ydCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZXhwb3NlIHN0YXRlZnVsIHNldCAke3RoaXMubmFtZX0gdmlhIGEgc2VydmljZTogUG9ydCAke3RhcmdldFBvcnR9IGlzIG5vdCBleHBvc2VkIGJ5IGFueSBjb250YWluZXJgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXRhZGF0YTogYW55ID0geyBuYW1lc3BhY2U6IHRoaXMubWV0YWRhdGEubmFtZXNwYWNlIH07XG4gICAgcmV0dXJuIG5ldyBzZXJ2aWNlLlNlcnZpY2UodGhpcywgJ1NlcnZpY2UnLCB7XG4gICAgICBzZWxlY3RvcjogdGhpcyxcbiAgICAgIHBvcnRzLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBjbHVzdGVySVA6ICdOb25lJyxcbiAgICAgIHR5cGU6IHNlcnZpY2UuU2VydmljZVR5cGUuQ0xVU1RFUl9JUCxcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLlN0YXRlZnVsU2V0U3BlYyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcGxpY2FzOiB0aGlzLmhhc0F1dG9zY2FsZXIgPyB1bmRlZmluZWQgOiAodGhpcy5yZXBsaWNhcyA/PyAxKSxcbiAgICAgIHNlcnZpY2VOYW1lOiB0aGlzLnNlcnZpY2UubmFtZSxcbiAgICAgIG1pblJlYWR5U2Vjb25kczogdGhpcy5taW5SZWFkeS50b1NlY29uZHMoKSxcbiAgICAgIHRlbXBsYXRlOiB7XG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLnBvZE1ldGFkYXRhLnRvSnNvbigpLFxuICAgICAgICBzcGVjOiB0aGlzLl90b1BvZFNwZWMoKSxcbiAgICAgIH0sXG4gICAgICBzZWxlY3RvcjogdGhpcy5fdG9MYWJlbFNlbGVjdG9yKCksXG4gICAgICBwb2RNYW5hZ2VtZW50UG9saWN5OiB0aGlzLnBvZE1hbmFnZW1lbnRQb2xpY3ksXG4gICAgICB2b2x1bWVDbGFpbVRlbXBsYXRlczogdGhpcy5fdG9QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1zKCksXG4gICAgICB1cGRhdGVTdHJhdGVneTogdGhpcy5zdHJhdGVneS5fdG9LdWJlKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9Qb2RTcGVjKCk6IGs4cy5Qb2RTcGVjIHtcbiAgICBjb25zdCBwb2RTcGVjID0gc3VwZXIuX3RvUG9kU3BlYygpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wb2RTcGVjLFxuICAgICAgdm9sdW1lczogdGhpcy5fZmlsdGVyUG9kU3BlY1ZvbHVtZXMocG9kU3BlYyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlclBvZFNwZWNWb2x1bWVzKHBvZFNwZWM6IFBvZFNwZWMpIHtcbiAgICBpZiAoIXRoaXMudm9sdW1lQ2xhaW1UZW1wbGF0ZXMgfHwgIXBvZFNwZWMudm9sdW1lcykge1xuICAgICAgcmV0dXJuIHBvZFNwZWMudm9sdW1lcztcbiAgICB9XG5cbiAgICBjb25zdCB2b2x1bWVDbGFpbU5hbWVzID0gdGhpcy52b2x1bWVDbGFpbVRlbXBsYXRlcy5tYXAodmN0ID0+IHZjdC5uYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJlZFZvbHVtZXMgPSBwb2RTcGVjLnZvbHVtZXMuZmlsdGVyKHZvbCA9PiAhdm9sdW1lQ2xhaW1OYW1lcy5pbmNsdWRlcyh2b2wubmFtZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkVm9sdW1lcy5sZW5ndGggPiAwID8gZmlsdGVyZWRWb2x1bWVzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSVNjYWxhYmxlLm1hcmtIYXNBdXRvc2NhbGVyKClcbiAgICovXG4gIHB1YmxpYyBtYXJrSGFzQXV0b3NjYWxlcigpIHtcbiAgICB0aGlzLmhhc0F1dG9zY2FsZXIgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSVNjYWxhYmxlLnRvU2NhbGluZ1RhcmdldCgpXG4gICAqL1xuICBwdWJsaWMgdG9TY2FsaW5nVGFyZ2V0KCk6IFNjYWxpbmdUYXJnZXQge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiB0aGlzLmFwaU9iamVjdC5raW5kLFxuICAgICAgYXBpVmVyc2lvbjogdGhpcy5hcGlPYmplY3QuYXBpVmVyc2lvbixcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGNvbnRhaW5lcnM6IHRoaXMuY29udGFpbmVycyxcbiAgICAgIHJlcGxpY2FzOiB0aGlzLnJlcGxpY2FzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIF90b1BlcnNpc3RlbnRWb2x1bWVDbGFpbXMoKTogS3ViZVBlcnNpc3RlbnRWb2x1bWVDbGFpbVByb3BzW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZvbHVtZU5hbWVzID0gdGhpcy5jb250YWluZXJzLmZsYXRNYXAoaXQgPT4gaXQubW91bnRzKS5tYXAobW91bnQgPT4gbW91bnQudm9sdW1lLm5hbWUpO1xuICAgIHRoaXMudm9sdW1lQ2xhaW1UZW1wbGF0ZXM/LmZvckVhY2godCA9PiB7XG4gICAgICBpZiAoIXZvbHVtZU5hbWVzLmluY2x1ZGVzKHQubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWb2x1bWUgY2xhaW0gdGVtcGxhdGUgd2l0aCBuYW1lIFwiJHt0Lm5hbWV9XCIgaXMgbm90IHVzZWQgYnkgYW55IGNvbnRhaW5lciBtb3VudGApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnZvbHVtZUNsYWltVGVtcGxhdGVzPy5tYXAodGVtcGxhdGUgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2VzOiBWb2x1bWVSZXNvdXJjZVJlcXVpcmVtZW50cyA9IHRlbXBsYXRlLnN0b3JhZ2VcbiAgICAgICAgPyB7IHJlcXVlc3RzOiB7IHN0b3JhZ2U6IFF1YW50aXR5LmZyb21TdHJpbmcodGVtcGxhdGUuc3RvcmFnZS5hc1N0cmluZygpKSB9IH1cbiAgICAgICAgOiB7fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgbmFtZTogdGVtcGxhdGUubmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3BlYzoge1xuICAgICAgICAgIGFjY2Vzc01vZGVzOiB0ZW1wbGF0ZS5hY2Nlc3NNb2RlcyxcbiAgICAgICAgICBzdG9yYWdlQ2xhc3NOYW1lOiB0ZW1wbGF0ZS5zdG9yYWdlQ2xhc3NOYW1lLFxuICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneS5yb2xsaW5nVXBkYXRlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5Um9sbGluZ1VwZGF0ZU9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBJZiBzcGVjaWZpZWQsIGFsbCBQb2RzIHdpdGggYW4gb3JkaW5hbCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFydGl0aW9uIHdpbGxcbiAgICogYmUgdXBkYXRlZCB3aGVuIHRoZSBTdGF0ZWZ1bFNldCdzIC5zcGVjLnRlbXBsYXRlIGlzIHVwZGF0ZWQuIEFsbCBQb2RzIHdpdGggYW4gb3JkaW5hbCB0aGF0XG4gICAqIGlzIGxlc3MgdGhhbiB0aGUgcGFydGl0aW9uIHdpbGwgbm90IGJlIHVwZGF0ZWQsIGFuZCwgZXZlbiBpZiB0aGV5IGFyZSBkZWxldGVkLCB0aGV5IHdpbGwgYmVcbiAgICogcmVjcmVhdGVkIGF0IHRoZSBwcmV2aW91cyB2ZXJzaW9uLlxuICAgKlxuICAgKiBJZiB0aGUgcGFydGl0aW9uIGlzIGdyZWF0ZXIgdGhhbiByZXBsaWNhcywgdXBkYXRlcyB0byB0aGUgcG9kIHRlbXBsYXRlIHdpbGwgbm90IGJlIHByb3BhZ2F0ZWQgdG8gUG9kcy5cbiAgICogSW4gbW9zdCBjYXNlcyB5b3Ugd2lsbCBub3QgbmVlZCB0byB1c2UgYSBwYXJ0aXRpb24sIGJ1dCB0aGV5IGFyZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc3RhZ2UgYW5cbiAgICogdXBkYXRlLCByb2xsIG91dCBhIGNhbmFyeSwgb3IgcGVyZm9ybSBhIHBoYXNlZCByb2xsIG91dC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvY29udHJvbGxlcnMvc3RhdGVmdWxzZXQvI3BhcnRpdGlvbnNcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogU3RhdGVmdWxTZXQgdXBkYXRlIHN0cmF0ZWdpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5IHtcblxuICAvKipcbiAgICogVGhlIGNvbnRyb2xsZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIFBvZHMgaW4gYSBTdGF0ZWZ1bFNldC5cbiAgICogVXNlcnMgbXVzdCBtYW51YWxseSBkZWxldGUgUG9kcyB0byBjYXVzZSB0aGUgY29udHJvbGxlciB0byBjcmVhdGUgbmV3IFBvZHNcbiAgICogdGhhdCByZWZsZWN0IG1vZGlmaWNhdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9uRGVsZXRlKCk6IFN0YXRlZnVsU2V0VXBkYXRlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneSh7XG4gICAgICB0eXBlOiAnT25EZWxldGUnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250cm9sbGVyIHdpbGwgZGVsZXRlIGFuZCByZWNyZWF0ZSBlYWNoIFBvZCBpbiB0aGUgU3RhdGVmdWxTZXQuXG4gICAqIEl0IHdpbGwgcHJvY2VlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyBQb2QgdGVybWluYXRpb24gKGZyb20gdGhlIGxhcmdlc3Qgb3JkaW5hbCB0byB0aGUgc21hbGxlc3QpLFxuICAgKiB1cGRhdGluZyBlYWNoIFBvZCBvbmUgYXQgYSB0aW1lLiBUaGUgS3ViZXJuZXRlcyBjb250cm9sIHBsYW5lIHdhaXRzIHVudGlsIGFuIHVwZGF0ZWRcbiAgICogUG9kIGlzIFJ1bm5pbmcgYW5kIFJlYWR5IHByaW9yIHRvIHVwZGF0aW5nIGl0cyBwcmVkZWNlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcm9sbGluZ1VwZGF0ZShvcHRpb25zOiBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5Um9sbGluZ1VwZGF0ZU9wdGlvbnMgPSB7fSk6IFN0YXRlZnVsU2V0VXBkYXRlU3RyYXRlZ3kge1xuXG4gICAgcmV0dXJuIG5ldyBTdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5KHtcbiAgICAgIHR5cGU6ICdSb2xsaW5nVXBkYXRlJyxcbiAgICAgIHJvbGxpbmdVcGRhdGU6IHsgcGFydGl0aW9uOiBvcHRpb25zLnBhcnRpdGlvbiA/PyAwIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RyYXRlZ3k6IGs4cy5TdGF0ZWZ1bFNldFVwZGF0ZVN0cmF0ZWd5KSB7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuU3RhdGVmdWxTZXRVcGRhdGVTdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyYXRlZ3k7XG4gIH1cblxufVxuXG4vKipcbiAqIEEgUGVyc2lzdGVudFZvbHVtZUNsYWltIHRlbXBsYXRlIGZvciBTdGF0ZWZ1bFNldHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1UZW1wbGF0ZVByb3BzIGV4dGVuZHMgUGVyc2lzdGVudFZvbHVtZUNsYWltUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNsYWltIHRoYXQgdGhlIFN0YXRlZnVsU2V0IGNvbnRyb2xsZXIgd2lsbCBjcmVhdGUgZm9yIGVhY2ggcG9kLlxuICAgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBuYW1lIHRoZSBjcmVhdGVkIFBWQyBpbiB0aGUgZm9ybWF0IDxjbGFpbS1uYW1lPi08cG9kLW5hbWU+XG4gICAqXG4gICAqIFRoaXMgbmFtZSBzaG91bGQgbWF0Y2ggdGhlIG5hbWUgb2YgYSB2b2x1bWUgbW91bnQgaW4gb25lIG9mIHRoZSBjb250YWluZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuIl19
|
package/lib/utils.d.ts
ADDED
package/lib/utils.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.undefinedIfEmpty = undefinedIfEmpty;
|
|
4
|
+
exports.filterUndefined = filterUndefined;
|
|
5
|
+
exports.address = address;
|
|
6
|
+
function undefinedIfEmpty(obj) {
|
|
7
|
+
if (typeof (obj) === 'string' && obj === '') {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(obj) && obj.length === 0) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (typeof (obj) === 'object' && (Object.keys(obj).length === 0 || Object.values(obj).filter(x => x).length === 0)) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return obj;
|
|
17
|
+
}
|
|
18
|
+
function filterUndefined(obj) {
|
|
19
|
+
const ret = {};
|
|
20
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
21
|
+
if (v !== undefined) {
|
|
22
|
+
ret[k] = v;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return ret;
|
|
26
|
+
}
|
|
27
|
+
function address(...constructs) {
|
|
28
|
+
const addresses = constructs
|
|
29
|
+
.map(c => c.node.addr)
|
|
30
|
+
.sort((a, b) => a.localeCompare(b));
|
|
31
|
+
return addresses.join('');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSw0Q0FLQztBQUVELDBDQVFDO0FBRUQsMEJBS0M7QUF0QkQsU0FBZ0IsZ0JBQWdCLENBQUksR0FBTTtJQUN4QyxJQUFJLE9BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQ2pFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQ2pFLElBQUksT0FBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBd0IsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLFNBQVMsQ0FBQztJQUFDLENBQUM7SUFDbEwsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLEdBQVE7SUFDdEMsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLEdBQUcsVUFBd0I7SUFDakQsTUFBTSxTQUFTLEdBQUcsVUFBVTtTQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNyQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlZmluZWRJZkVtcHR5PFQ+KG9iajogVCk6IFQgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mKG9iaikgPT09ICdzdHJpbmcnICYmIG9iaiA9PT0gJycpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBpZiAodHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIChPYmplY3Qua2V5cyhvYmogYXMgdW5rbm93biBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCB8fCBPYmplY3QudmFsdWVzKG9iaiBhcyB1bmtub3duIGFzIG9iamVjdCkuZmlsdGVyKHggPT4geCkubGVuZ3RoID09PSAwKSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJVbmRlZmluZWQob2JqOiBhbnkpOiBhbnkge1xuICBjb25zdCByZXQ6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tdID0gdjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZHJlc3MoLi4uY29uc3RydWN0czogSUNvbnN0cnVjdFtdKSB7XG4gIGNvbnN0IGFkZHJlc3NlcyA9IGNvbnN0cnVjdHNcbiAgICAubWFwKGMgPT4gYy5ub2RlLmFkZHIpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIHJldHVybiBhZGRyZXNzZXMuam9pbignJyk7XG59XG4iXX0=
|