@sd-angular/core 1.3.186 → 1.3.189
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/api/src/lib/api.service.d.ts +1 -0
- package/bundles/sd-angular-core-api.umd.js +88 -53
- package/bundles/sd-angular-core-api.umd.js.map +1 -1
- package/bundles/sd-angular-core-api.umd.min.js +1 -1
- package/bundles/sd-angular-core-api.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-common.umd.js +18 -5
- package/bundles/sd-angular-core-common.umd.js.map +1 -1
- package/bundles/sd-angular-core-common.umd.min.js +1 -1
- package/bundles/sd-angular-core-common.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.js +1 -1
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/common/src/lib/typings/array.extension.d.ts +3 -2
- package/esm2015/api/src/lib/api.service.js +85 -54
- package/esm2015/common/src/lib/typings/array.extension.js +19 -6
- package/esm2015/grid-material/src/lib/grid-material.component.js +2 -2
- package/fesm2015/sd-angular-core-api.js +84 -53
- package/fesm2015/sd-angular-core-api.js.map +1 -1
- package/fesm2015/sd-angular-core-common.js +18 -5
- package/fesm2015/sd-angular-core-common.js.map +1 -1
- package/fesm2015/sd-angular-core-grid-material.js +1 -1
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.3.186.tgz → sd-angular-core-1.3.189.tgz} +0 -0
|
@@ -11,10 +11,11 @@ declare global {
|
|
|
11
11
|
asObservable(): Observable<T[]>;
|
|
12
12
|
}
|
|
13
13
|
interface ArrayConstructor {
|
|
14
|
-
search<T = any>(items: T[], searchText: string | number, fields?: string | string[]): T[];
|
|
15
|
-
union<T = any>(key:
|
|
14
|
+
search<T = any>(items: T[], searchText: string | number, fields?: Extract<keyof T, string> | Extract<keyof T, string>[]): T[];
|
|
15
|
+
union<T = any>(key: Extract<keyof T, string>, ...args: T[][]): T[];
|
|
16
16
|
toObject<T = any>(items: T[], key?: string): {
|
|
17
17
|
[key: string]: T;
|
|
18
18
|
};
|
|
19
|
+
sum<T = any>(items: T[], key: Extract<keyof T, string>): number;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
@@ -30,15 +30,17 @@ export class SdApiService {
|
|
|
30
30
|
};
|
|
31
31
|
this.post = (url, body, headers, options) => __awaiter(this, void 0, void 0, function* () {
|
|
32
32
|
var _a, _b;
|
|
33
|
-
headers =
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
headers =
|
|
34
|
+
headers ||
|
|
35
|
+
this.tokenService.customHeaders({
|
|
36
|
+
url,
|
|
37
|
+
});
|
|
36
38
|
let hashKey = uuid.v4();
|
|
37
39
|
if (!(body instanceof FormData)) {
|
|
38
40
|
hashKey = hash({
|
|
39
41
|
url,
|
|
40
42
|
headers,
|
|
41
|
-
body
|
|
43
|
+
body,
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
46
|
if (!__classPrivateFieldGet(this, _cache)[hashKey] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[hashKey].createdDate, __classPrivateFieldGet(this, _cacheDuration)) < new Date()) {
|
|
@@ -47,47 +49,53 @@ export class SdApiService {
|
|
|
47
49
|
subject: new Subject(),
|
|
48
50
|
};
|
|
49
51
|
if ((options === null || options === void 0 ? void 0 : options.responseType) && options.responseType !== 'json') {
|
|
50
|
-
this.httpClient
|
|
52
|
+
this.httpClient
|
|
53
|
+
.post(encodeURI(url), body, {
|
|
51
54
|
observe: 'body',
|
|
52
55
|
headers,
|
|
53
|
-
responseType: options === null || options === void 0 ? void 0 : options.responseType
|
|
54
|
-
})
|
|
56
|
+
responseType: options === null || options === void 0 ? void 0 : options.responseType,
|
|
57
|
+
})
|
|
58
|
+
.pipe(timeout(__classPrivateFieldGet(this, _timeout)))
|
|
59
|
+
.subscribe(res => {
|
|
55
60
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
56
61
|
status: 'success',
|
|
57
|
-
result: res
|
|
62
|
+
result: res,
|
|
58
63
|
};
|
|
59
64
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.next(res);
|
|
60
65
|
}, err => {
|
|
61
66
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
62
67
|
status: 'error',
|
|
63
|
-
result: err
|
|
68
|
+
result: err,
|
|
64
69
|
};
|
|
65
70
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.error(err);
|
|
66
71
|
});
|
|
67
72
|
}
|
|
68
73
|
else {
|
|
69
|
-
this.httpClient
|
|
74
|
+
this.httpClient
|
|
75
|
+
.post(encodeURI(url), body, {
|
|
70
76
|
observe: 'response',
|
|
71
|
-
headers
|
|
72
|
-
})
|
|
77
|
+
headers,
|
|
78
|
+
})
|
|
79
|
+
.pipe(timeout(__classPrivateFieldGet(this, _timeout)))
|
|
80
|
+
.subscribe(res => {
|
|
73
81
|
if (res.ok) {
|
|
74
82
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
75
83
|
status: 'success',
|
|
76
|
-
result: res.body
|
|
84
|
+
result: res.body,
|
|
77
85
|
};
|
|
78
86
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.next(res.body);
|
|
79
87
|
}
|
|
80
88
|
else {
|
|
81
89
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
82
90
|
status: 'error',
|
|
83
|
-
result: res.body
|
|
91
|
+
result: res.body,
|
|
84
92
|
};
|
|
85
93
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.error(res.body);
|
|
86
94
|
}
|
|
87
95
|
}, err => {
|
|
88
96
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
89
97
|
status: 'error',
|
|
90
|
-
result: err
|
|
98
|
+
result: err,
|
|
91
99
|
};
|
|
92
100
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.error(err);
|
|
93
101
|
});
|
|
@@ -102,16 +110,17 @@ export class SdApiService {
|
|
|
102
110
|
return __classPrivateFieldGet(this, _cache)[hashKey].subject.pipe(take(1)).toPromise();
|
|
103
111
|
});
|
|
104
112
|
this.postCache = (url, body, options) => __awaiter(this, void 0, void 0, function* () {
|
|
105
|
-
const headers = (options === null || options === void 0 ? void 0 : options.headers) ||
|
|
106
|
-
|
|
107
|
-
|
|
113
|
+
const headers = (options === null || options === void 0 ? void 0 : options.headers) ||
|
|
114
|
+
this.tokenService.customHeaders({
|
|
115
|
+
url,
|
|
116
|
+
});
|
|
108
117
|
const { get, set, has } = this.cacheService.create({
|
|
109
118
|
url,
|
|
110
119
|
headers,
|
|
111
|
-
body
|
|
120
|
+
body,
|
|
112
121
|
}, {
|
|
113
122
|
type: options === null || options === void 0 ? void 0 : options.cacheType,
|
|
114
|
-
hours: options === null || options === void 0 ? void 0 : options.cacheHours
|
|
123
|
+
hours: options === null || options === void 0 ? void 0 : options.cacheHours,
|
|
115
124
|
});
|
|
116
125
|
if (!has()) {
|
|
117
126
|
const result = yield this.post(url, body, options === null || options === void 0 ? void 0 : options.headers);
|
|
@@ -121,21 +130,28 @@ export class SdApiService {
|
|
|
121
130
|
return get();
|
|
122
131
|
});
|
|
123
132
|
this.put = (url, body, headers) => __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
headers =
|
|
125
|
-
|
|
126
|
-
|
|
133
|
+
headers =
|
|
134
|
+
headers ||
|
|
135
|
+
this.tokenService.customHeaders({
|
|
136
|
+
url,
|
|
137
|
+
});
|
|
127
138
|
return yield new Promise((resolve, reject) => {
|
|
128
|
-
this.httpClient
|
|
139
|
+
this.httpClient
|
|
140
|
+
.put(encodeURI(url), body, {
|
|
129
141
|
observe: 'response',
|
|
130
|
-
headers
|
|
131
|
-
})
|
|
142
|
+
headers,
|
|
143
|
+
})
|
|
144
|
+
.pipe(timeout(__classPrivateFieldGet(this, _timeout)))
|
|
145
|
+
.toPromise()
|
|
146
|
+
.then(result => {
|
|
132
147
|
if (result.ok) {
|
|
133
148
|
resolve(result.body);
|
|
134
149
|
}
|
|
135
150
|
else {
|
|
136
151
|
reject(result.body);
|
|
137
152
|
}
|
|
138
|
-
})
|
|
153
|
+
})
|
|
154
|
+
.catch((httpErrorResponse) => {
|
|
139
155
|
reject(httpErrorResponse);
|
|
140
156
|
});
|
|
141
157
|
});
|
|
@@ -157,9 +173,11 @@ export class SdApiService {
|
|
|
157
173
|
});
|
|
158
174
|
this.get = (url, headers, options) => __awaiter(this, void 0, void 0, function* () {
|
|
159
175
|
var _c, _d;
|
|
160
|
-
headers =
|
|
161
|
-
|
|
162
|
-
|
|
176
|
+
headers =
|
|
177
|
+
headers ||
|
|
178
|
+
this.tokenService.customHeaders({
|
|
179
|
+
url,
|
|
180
|
+
});
|
|
163
181
|
const encodedUrl = (options === null || options === void 0 ? void 0 : options.encodeURI) === false ? url : encodeURI(url);
|
|
164
182
|
// const hashKey = hash({
|
|
165
183
|
// encodedUrl,
|
|
@@ -167,50 +185,54 @@ export class SdApiService {
|
|
|
167
185
|
// });
|
|
168
186
|
const hashKey = hash({
|
|
169
187
|
encodedUrl,
|
|
170
|
-
headers
|
|
188
|
+
headers,
|
|
171
189
|
});
|
|
172
190
|
if (!__classPrivateFieldGet(this, _cache)[hashKey] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[hashKey].createdDate, __classPrivateFieldGet(this, _cacheDuration)) < new Date()) {
|
|
173
191
|
__classPrivateFieldGet(this, _cache)[hashKey] = {
|
|
174
192
|
createdDate: new Date(),
|
|
175
|
-
subject: new Subject()
|
|
193
|
+
subject: new Subject(),
|
|
176
194
|
};
|
|
177
195
|
if ((options === null || options === void 0 ? void 0 : options.responseType) && options.responseType !== 'json') {
|
|
178
|
-
this.httpClient
|
|
179
|
-
.
|
|
196
|
+
this.httpClient
|
|
197
|
+
.get(encodedUrl, { observe: 'body', headers, responseType: options === null || options === void 0 ? void 0 : options.responseType })
|
|
198
|
+
.pipe(timeout(__classPrivateFieldGet(this, _timeout)))
|
|
199
|
+
.subscribe(res => {
|
|
180
200
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
181
201
|
status: 'success',
|
|
182
|
-
result: res
|
|
202
|
+
result: res,
|
|
183
203
|
};
|
|
184
204
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.next(res);
|
|
185
205
|
}, err => {
|
|
186
206
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
187
207
|
status: 'error',
|
|
188
|
-
result: err
|
|
208
|
+
result: err,
|
|
189
209
|
};
|
|
190
210
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.error(err);
|
|
191
211
|
});
|
|
192
212
|
}
|
|
193
213
|
else {
|
|
194
|
-
this.httpClient
|
|
195
|
-
.
|
|
214
|
+
this.httpClient
|
|
215
|
+
.get(encodedUrl, { observe: 'response', headers })
|
|
216
|
+
.pipe(timeout(__classPrivateFieldGet(this, _timeout)))
|
|
217
|
+
.subscribe(res => {
|
|
196
218
|
if (res.ok) {
|
|
197
219
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
198
220
|
status: 'success',
|
|
199
|
-
result: res.body
|
|
221
|
+
result: res.body,
|
|
200
222
|
};
|
|
201
223
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.next(res.body);
|
|
202
224
|
}
|
|
203
225
|
else {
|
|
204
226
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
205
227
|
status: 'error',
|
|
206
|
-
result: res.body
|
|
228
|
+
result: res.body,
|
|
207
229
|
};
|
|
208
230
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.error(res.body);
|
|
209
231
|
}
|
|
210
232
|
}, err => {
|
|
211
233
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
212
234
|
status: 'error',
|
|
213
|
-
result: err
|
|
235
|
+
result: err,
|
|
214
236
|
};
|
|
215
237
|
__classPrivateFieldGet(this, _cache)[hashKey].subject.error(err);
|
|
216
238
|
});
|
|
@@ -225,16 +247,17 @@ export class SdApiService {
|
|
|
225
247
|
return __classPrivateFieldGet(this, _cache)[hashKey].subject.pipe(take(1)).toPromise();
|
|
226
248
|
});
|
|
227
249
|
this.getCache = (url, options) => __awaiter(this, void 0, void 0, function* () {
|
|
228
|
-
const headers = (options === null || options === void 0 ? void 0 : options.headers) ||
|
|
229
|
-
|
|
230
|
-
|
|
250
|
+
const headers = (options === null || options === void 0 ? void 0 : options.headers) ||
|
|
251
|
+
this.tokenService.customHeaders({
|
|
252
|
+
url,
|
|
253
|
+
});
|
|
231
254
|
const encodedUrl = (options === null || options === void 0 ? void 0 : options.encodeURI) === false ? url : encodeURI(url);
|
|
232
255
|
const { get, set, has } = this.cacheService.create({
|
|
233
256
|
encodedUrl,
|
|
234
|
-
headers
|
|
257
|
+
headers,
|
|
235
258
|
}, {
|
|
236
259
|
type: options === null || options === void 0 ? void 0 : options.cacheType,
|
|
237
|
-
hours: options === null || options === void 0 ? void 0 : options.cacheHours
|
|
260
|
+
hours: options === null || options === void 0 ? void 0 : options.cacheHours,
|
|
238
261
|
});
|
|
239
262
|
if (!has() || (options === null || options === void 0 ? void 0 : options.reload)) {
|
|
240
263
|
const result = yield this.get(encodedUrl, options === null || options === void 0 ? void 0 : options.headers, { encodeURI: false });
|
|
@@ -244,20 +267,25 @@ export class SdApiService {
|
|
|
244
267
|
return get();
|
|
245
268
|
});
|
|
246
269
|
this.delete = (url, headers) => __awaiter(this, void 0, void 0, function* () {
|
|
247
|
-
headers =
|
|
248
|
-
|
|
249
|
-
|
|
270
|
+
headers =
|
|
271
|
+
headers ||
|
|
272
|
+
this.tokenService.customHeaders({
|
|
273
|
+
url,
|
|
274
|
+
});
|
|
250
275
|
return yield new Promise((resolve, reject) => {
|
|
251
|
-
this.httpClient
|
|
276
|
+
this.httpClient
|
|
277
|
+
.delete(encodeURI(url), { observe: 'response', headers })
|
|
252
278
|
.pipe(timeout(__classPrivateFieldGet(this, _timeout)))
|
|
253
|
-
.toPromise()
|
|
279
|
+
.toPromise()
|
|
280
|
+
.then(result => {
|
|
254
281
|
if (result.ok) {
|
|
255
282
|
resolve(result.body);
|
|
256
283
|
}
|
|
257
284
|
else {
|
|
258
285
|
reject(result.body);
|
|
259
286
|
}
|
|
260
|
-
})
|
|
287
|
+
})
|
|
288
|
+
.catch((httpErrorResponse) => {
|
|
261
289
|
reject(httpErrorResponse);
|
|
262
290
|
});
|
|
263
291
|
});
|
|
@@ -276,12 +304,15 @@ export class SdApiService {
|
|
|
276
304
|
return yield this.post(url, formData);
|
|
277
305
|
});
|
|
278
306
|
}
|
|
307
|
+
get http() {
|
|
308
|
+
return this.httpClient;
|
|
309
|
+
}
|
|
279
310
|
}
|
|
280
311
|
_timeout = new WeakMap(), _cacheDuration = new WeakMap(), _cache = new WeakMap(), _defineParams = new WeakMap();
|
|
281
312
|
SdApiService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdApiService_Factory() { return new SdApiService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.API_CONFIG, 8), i0.ɵɵinject(i3.SdCacheService), i0.ɵɵinject(i4.SdTokenService)); }, token: SdApiService, providedIn: "root" });
|
|
282
313
|
SdApiService.decorators = [
|
|
283
314
|
{ type: Injectable, args: [{
|
|
284
|
-
providedIn: 'root'
|
|
315
|
+
providedIn: 'root',
|
|
285
316
|
},] }
|
|
286
317
|
];
|
|
287
318
|
SdApiService.ctorParameters = () => [
|
|
@@ -290,4 +321,4 @@ SdApiService.ctorParameters = () => [
|
|
|
290
321
|
{ type: SdCacheService },
|
|
291
322
|
{ type: SdTokenService }
|
|
292
323
|
];
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2FwaS8iLCJzb3VyY2VzIjpbInNyYy9saWIvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBa0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7Ozs7OztBQUs3QixNQUFNLE9BQU8sWUFBWTtJQXFCdkIsWUFDVSxVQUFzQixFQUNVLGFBQWdDLEVBQ2hFLFlBQTRCLEVBQzVCLFlBQTRCO1FBSDVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVSxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEUsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQXhCOUIsYUFBUSxHQUFHLHVDQUF1QyxDQUFDO1FBRTNELG1CQUFXLE1BQU0sRUFBQyxDQUFDLE9BQU87UUFFMUIseUJBQWlCLElBQUksRUFBQyxDQUFDLEtBQUs7UUFDNUIsaUJBU0ksRUFBRSxFQUFDO1FBRUMsY0FBUyxHQUFHLENB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S0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFCO1lBQ0QsTUFBTSxRQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUEsQ0FBQTtJQXpSRCxDQUFDOzs7OztZQTdCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVhRLFVBQVU7NENBbUNkLE1BQU0sU0FBQyxVQUFVLGNBQUcsUUFBUTtZQWhDeEIsY0FBYztZQUNkLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgdGFrZSwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUFwaUNvbmZpZ3VyYXRpb24sIEFQSV9DT05GSUcgfSBmcm9tICcuL2FwaS5tb2RlbCc7XHJcbmltcG9ydCB7IFNkQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jYWNoZSc7XHJcbmltcG9ydCB7IFNkVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi90b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEFwaVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgdXBsb2FkSWQgPSAnVTExOGZlZmIxLTMwODUtNDY0MS04Y2I4LWY3ZmU1YzI4ZjUwOSc7XHJcblxyXG4gICN0aW1lb3V0ID0gMTIwMDAwOyAvLyAxMjBzXHJcblxyXG4gICNjYWNoZUR1cmF0aW9uID0gMjAwMDsgLy8gMnNcclxuICAjY2FjaGU6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgY3JlYXRlZERhdGU6IERhdGU7XHJcbiAgICAgIHN1YmplY3Q6IFN1YmplY3Q8YW55PjtcclxuICAgICAgcmVzcG9uc2U/OiB7XHJcbiAgICAgICAgc3RhdHVzPzogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJztcclxuICAgICAgICByZXN1bHQ6IGFueSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uPy50cmFuc2xhdGUodmFsdWUpIHx8IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBASW5qZWN0KEFQSV9DT05GSUcpIEBPcHRpb25hbCgpIHByaXZhdGUgY29uZmlndXJhdGlvbjogSUFwaUNvbmZpZ3VyYXRpb24sXHJcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogU2RDYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogU2RUb2tlblNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHBvc3QgPSBhc3luYyA8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgb3B0aW9ucz86IHtcclxuICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XHJcbiAgfSk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMgfHwgdGhpcy50b2tlblNlcnZpY2UuY3VzdG9tSGVhZGVycyh7XHJcbiAgICAgIHVybFxyXG4gICAgfSk7XHJcbiAgICBsZXQgaGFzaEtleSA9IHV1aWQudjQoKTtcclxuICAgIGlmICghKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcclxuICAgICAgaGFzaEtleSA9IGhhc2goe1xyXG4gICAgICAgIHVybCxcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIGJvZHlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuI2NhY2hlW2hhc2hLZXldIHx8IERhdGUuYWRkTWlsaXNlY29uZHModGhpcy4jY2FjaGVbaGFzaEtleV0uY3JlYXRlZERhdGUsIHRoaXMuI2NhY2hlRHVyYXRpb24pIDwgbmV3IERhdGUoKSkge1xyXG4gICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XSA9IHtcclxuICAgICAgICBjcmVhdGVkRGF0ZTogbmV3IERhdGUoKSxcclxuICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdCgpLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAob3B0aW9ucz8ucmVzcG9uc2VUeXBlICYmIG9wdGlvbnMucmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQucG9zdChlbmNvZGVVUkkodXJsKSwgYm9keSwge1xyXG4gICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxyXG4gICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogb3B0aW9ucz8ucmVzcG9uc2VUeXBlIGFzIGFueVxyXG4gICAgICAgIH0pLnBpcGUodGltZW91dCh0aGlzLiN0aW1lb3V0KSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXNcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0Lm5leHQocmVzKTtcclxuICAgICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgcmVzdWx0OiBlcnJcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0LmVycm9yKGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LnBvc3QoZW5jb2RlVVJJKHVybCksIGJvZHksIHtcclxuICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXHJcbiAgICAgICAgICBoZWFkZXJzXHJcbiAgICAgICAgfSkucGlwZSh0aW1lb3V0KHRoaXMuI3RpbWVvdXQpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5vaykge1xyXG4gICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcclxuICAgICAgICAgICAgICByZXN1bHQ6IHJlcy5ib2R5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QubmV4dChyZXMuYm9keSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgcmVzdWx0OiByZXMuYm9keVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0LmVycm9yKHJlcy5ib2R5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgcmVzdWx0OiBlcnJcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0LmVycm9yKGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZT8uc3RhdHVzKSB7XHJcbiAgICAgIGlmICh0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZT8uc3RhdHVzID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlLnJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0LnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwb3N0Q2FjaGUgPSBhc3luYyA8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiB7XHJcbiAgICBjYWNoZVR5cGU/OiAnZGVmYXVsdCcgfCAnc2Vzc2lvbicgfCAnbG9jYWwnO1xyXG4gICAgY2FjaGVIb3Vycz86IG51bWJlcjtcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcclxuICB9KTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucz8uaGVhZGVycyB8fCB0aGlzLnRva2VuU2VydmljZS5jdXN0b21IZWFkZXJzKHtcclxuICAgICAgdXJsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHsgZ2V0LCBzZXQsIGhhcyB9ID0gdGhpcy5jYWNoZVNlcnZpY2UuY3JlYXRlKHtcclxuICAgICAgdXJsLFxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICBib2R5XHJcbiAgICB9LCB7XHJcbiAgICAgIHR5cGU6IG9wdGlvbnM/LmNhY2hlVHlwZSxcclxuICAgICAgaG91cnM6IG9wdGlvbnM/LmNhY2hlSG91cnNcclxuICAgIH0pO1xyXG4gICAgaWYgKCFoYXMoKSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBvc3QodXJsLCBib2R5LCBvcHRpb25zPy5oZWFkZXJzKTtcclxuICAgICAgc2V0KHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwdXQgPSBhc3luYyA8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMgfHwgdGhpcy50b2tlblNlcnZpY2UuY3VzdG9tSGVhZGVycyh7XHJcbiAgICAgIHVybFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5wdXQoZW5jb2RlVVJJKHVybCksIGJvZHksIHtcclxuICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICAgIGhlYWRlcnNcclxuICAgICAgfSkucGlwZSh0aW1lb3V0KHRoaXMuI3RpbWVvdXQpKS50b1Byb21pc2UoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5vaykge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdChyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaCgoaHR0cEVycm9yUmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmVqZWN0KGh0dHBFcnJvclJlc3BvbnNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICNkZWZpbmVQYXJhbXMgPSAocmVxdWVzdDogYW55KSA9PiB7XHJcbiAgICBjb25zdCBycSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVxdWVzdCkpIHtcclxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlPy50b1N0cmluZygpICE9PSAnJykge1xyXG4gICAgICAgIHJxLnB1c2goXHJcbiAgICAgICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5IGFzIHN0cmluZyl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxyXG4gICAgICAgICAgICB2YWx1ZSBhcyBzdHJpbmdcclxuICAgICAgICAgICl9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBgPyR7cnE/LmpvaW4oJyYnKX1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2l0aFBhcmFtcyA9IGFzeW5jIDxUID0gYW55Pih1cmw6IHN0cmluZywgcGFyYW1zOiBhbnksIG9wdGlvbnM/OiB7XHJcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMsXHJcbiAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xyXG4gIH0pOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChgJHt1cmx9JHt0aGlzLiNkZWZpbmVQYXJhbXMocGFyYW1zKX1gLCBvcHRpb25zPy5oZWFkZXJzLCB7IC4uLm9wdGlvbnMsIGVuY29kZVVSSTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYWNoZVdpdGhQYXJhbXMgPSBhc3luYyA8VCA9IGFueT4odXJsOiBzdHJpbmcsIHBhcmFtczogYW55LCBoZWFkZXJzPzogSHR0cEhlYWRlcnMsIG9wdGlvbnM/OiB7XHJcbiAgICByZWxvYWQ/OiBib29sZWFuLFxyXG4gICAgY2FjaGVUeXBlPzogJ2RlZmF1bHQnIHwgJ3Nlc3Npb24nIHwgJ2xvY2FsJztcclxuICAgIGNhY2hlSG91cnM/OiBudW1iZXI7XHJcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnM7XHJcbiAgfSk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Q2FjaGUoYCR7dXJsfSR7dGhpcy4jZGVmaW5lUGFyYW1zKHBhcmFtcyl9YCwgeyAuLi5vcHRpb25zLCBoZWFkZXJzLCBlbmNvZGVVUkk6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0ID0gYXN5bmMgPFQgPSBhbnk+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogSHR0cEhlYWRlcnMsIG9wdGlvbnM/OiB7XHJcbiAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xyXG4gICAgZW5jb2RlVVJJPzogYm9vbGVhblxyXG4gIH0pOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzIHx8IHRoaXMudG9rZW5TZXJ2aWNlLmN1c3RvbUhlYWRlcnMoe1xyXG4gICAgICB1cmxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgZW5jb2RlZFVybCA9IG9wdGlvbnM/LmVuY29kZVVSSSA9PT0gZmFsc2UgPyB1cmwgOiBlbmNvZGVVUkkodXJsKTtcclxuICAgIC8vIGNvbnN0IGhhc2hLZXkgPSBoYXNoKHtcclxuICAgIC8vICAgZW5jb2RlZFVybCxcclxuICAgIC8vICAgaGVhZGVyc1xyXG4gICAgLy8gfSk7XHJcbiAgICBjb25zdCBoYXNoS2V5ID0gaGFzaCh7XHJcbiAgICAgIGVuY29kZWRVcmwsXHJcbiAgICAgIGhlYWRlcnNcclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLiNjYWNoZVtoYXNoS2V5XSB8fCBEYXRlLmFkZE1pbGlzZWNvbmRzKHRoaXMuI2NhY2hlW2hhc2hLZXldLmNyZWF0ZWREYXRlLCB0aGlzLiNjYWNoZUR1cmF0aW9uKSA8IG5ldyBEYXRlKCkpIHtcclxuICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0gPSB7XHJcbiAgICAgICAgY3JlYXRlZERhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3QoKVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAob3B0aW9ucz8ucmVzcG9uc2VUeXBlICYmIG9wdGlvbnMucmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KGVuY29kZWRVcmwsIHsgb2JzZXJ2ZTogJ2JvZHknLCBoZWFkZXJzLCByZXNwb25zZVR5cGU6IG9wdGlvbnM/LnJlc3BvbnNlVHlwZSBhcyBhbnkgfSlcclxuICAgICAgICAgIC5waXBlKHRpbWVvdXQodGhpcy4jdGltZW91dCkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDogcmVzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QubmV4dChyZXMpO1xyXG4gICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDogZXJyXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoZW5jb2RlZFVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnLCBoZWFkZXJzIH0pXHJcbiAgICAgICAgICAucGlwZSh0aW1lb3V0KHRoaXMuI3RpbWVvdXQpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLm9rKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzLmJvZHlcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QubmV4dChyZXMuYm9keSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJlcy5ib2R5XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0LmVycm9yKHJlcy5ib2R5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDogZXJyXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2U/LnN0YXR1cykge1xyXG4gICAgICBpZiAodGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2U/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZS5yZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVbaGFzaEtleV0uc3ViamVjdC5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FjaGUgPSBhc3luYyA8VCA9IGFueT4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiB7XHJcbiAgICByZWxvYWQ/OiBib29sZWFuLFxyXG4gICAgY2FjaGVUeXBlPzogJ2RlZmF1bHQnIHwgJ3Nlc3Npb24nIHwgJ2xvY2FsJztcclxuICAgIGNhY2hlSG91cnM/OiBudW1iZXI7XHJcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnM7XHJcbiAgICBlbmNvZGVVUkk/OiBib29sZWFuXHJcbiAgfSk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnM/LmhlYWRlcnMgfHwgdGhpcy50b2tlblNlcnZpY2UuY3VzdG9tSGVhZGVycyh7XHJcbiAgICAgIHVybFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBlbmNvZGVkVXJsID0gb3B0aW9ucz8uZW5jb2RlVVJJID09PSBmYWxzZSA/IHVybCA6IGVuY29kZVVSSSh1cmwpO1xyXG4gICAgY29uc3QgeyBnZXQsIHNldCwgaGFzIH0gPSB0aGlzLmNhY2hlU2VydmljZS5jcmVhdGUoe1xyXG4gICAgICBlbmNvZGVkVXJsLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICB9LCB7XHJcbiAgICAgIHR5cGU6IG9wdGlvbnM/LmNhY2hlVHlwZSxcclxuICAgICAgaG91cnM6IG9wdGlvbnM/LmNhY2hlSG91cnNcclxuICAgIH0pO1xyXG4gICAgaWYgKCFoYXMoKSB8fCBvcHRpb25zPy5yZWxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQoZW5jb2RlZFVybCwgb3B0aW9ucz8uaGVhZGVycywgeyBlbmNvZGVVUkk6IGZhbHNlIH0pO1xyXG4gICAgICBzZXQocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXQoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZSA9IGFzeW5jIDxUID0gYW55Pih1cmw6IHN0cmluZywgaGVhZGVycz86IEh0dHBIZWFkZXJzKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICBoZWFkZXJzID0gaGVhZGVycyB8fCB0aGlzLnRva2VuU2VydmljZS5jdXN0b21IZWFkZXJzKHtcclxuICAgICAgdXJsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5odHRwQ2xpZW50LmRlbGV0ZShlbmNvZGVVUkkodXJsKSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnLCBoZWFkZXJzIH0pXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aGlzLiN0aW1lb3V0KSlcclxuICAgICAgICAudG9Qcm9taXNlKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goKGh0dHBFcnJvclJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGh0dHBFcnJvclJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkU2luZ2xlID0gKHVybDogc3RyaW5nLCBvcHRpb24/OiB7XHJcbiAgICBleHRlbnNpb25zPzogc3RyaW5nW10sXHJcbiAgICBtYXhTaXplSW5NYj86IG51bWJlcixcclxuICAgIHZhbGlkYXRvcj86IChmaWxlTmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcclxuICB9KTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiBTZFV0aWxpdHkudXBsb2FkKG9wdGlvbikudGhlbihmaWxlID0+IHRoaXMudXBsb2FkKHVybCwgZmlsZSkpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkID0gYXN5bmMgKHVybDogc3RyaW5nLCBmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICBjb25zdCBsYXN0RG90ID0gZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICBpZiAobGFzdERvdCA9PT0gLTEpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlKGBJbnZhbGlkIGZpbGUgZXh0ZW5zaW9uYCk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSwgZmlsZS5uYW1lKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnBvc3QodXJsLCBmb3JtRGF0YSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2FwaS8iLCJzb3VyY2VzIjpbInNyYy9saWIvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBa0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7Ozs7OztBQUs3QixNQUFNLE9BQU8sWUFBWTtJQXFCdkIsWUFDVSxVQUFzQixFQUNVLGFBQWdDLEVBQ2hFLFlBQTRCLEVBQzVCLFlBQTRCO1FBSDVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVSxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEUsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQXhCOUIsYUFBUSxHQUFHLHVDQUF1QyxDQUFDO1FBRTNELG1CQUFXLE1BQU0sRUFBQyxDQUFDLE9BQU87UUFFMUIseUJBQWlCLElBQUksRUFBQyxDQUFDLEtBQUs7UUFDNUIsaUJBU0ksRUFBRSxFQUFDO1FBRUMsY0FBUyxHQUFHLENB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QUFPLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMxQjtZQUNELE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7WUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFBLENBQUM7SUFyV0MsQ0FBQztJQUVKLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOzs7OztZQWpDRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVhRLFVBQVU7NENBbUNkLE1BQU0sU0FBQyxVQUFVLGNBQUcsUUFBUTtZQWhDeEIsY0FBYztZQUNkLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgdGFrZSwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUFwaUNvbmZpZ3VyYXRpb24sIEFQSV9DT05GSUcgfSBmcm9tICcuL2FwaS5tb2RlbCc7XHJcbmltcG9ydCB7IFNkQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jYWNoZSc7XHJcbmltcG9ydCB7IFNkVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi90b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RBcGlTZXJ2aWNlIHtcclxuICBwcml2YXRlIHVwbG9hZElkID0gJ1UxMThmZWZiMS0zMDg1LTQ2NDEtOGNiOC1mN2ZlNWMyOGY1MDknO1xyXG5cclxuICAjdGltZW91dCA9IDEyMDAwMDsgLy8gMTIwc1xyXG5cclxuICAjY2FjaGVEdXJhdGlvbiA9IDIwMDA7IC8vIDJzXHJcbiAgI2NhY2hlOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgIGNyZWF0ZWREYXRlOiBEYXRlO1xyXG4gICAgICBzdWJqZWN0OiBTdWJqZWN0PGFueT47XHJcbiAgICAgIHJlc3BvbnNlPzoge1xyXG4gICAgICAgIHN0YXR1cz86ICdzdWNjZXNzJyB8ICdlcnJvcic7XHJcbiAgICAgICAgcmVzdWx0OiBhbnk7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH0gPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uPy50cmFuc2xhdGUodmFsdWUpIHx8IHZhbHVlO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgQEluamVjdChBUElfQ09ORklHKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZ3VyYXRpb246IElBcGlDb25maWd1cmF0aW9uLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IFNkQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFNkVG9rZW5TZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBnZXQgaHR0cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQ7XHJcbiAgfVxyXG5cclxuICBwb3N0ID0gYXN5bmMgPFQgPSBhbnk+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBib2R5PzogYW55LFxyXG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcclxuICAgIH1cclxuICApOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIGhlYWRlcnMgPVxyXG4gICAgICBoZWFkZXJzIHx8XHJcbiAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLmN1c3RvbUhlYWRlcnMoe1xyXG4gICAgICAgIHVybCxcclxuICAgICAgfSk7XHJcbiAgICBsZXQgaGFzaEtleSA9IHV1aWQudjQoKTtcclxuICAgIGlmICghKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcclxuICAgICAgaGFzaEtleSA9IGhhc2goe1xyXG4gICAgICAgIHVybCxcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIGJvZHksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLiNjYWNoZVtoYXNoS2V5XSB8fCBEYXRlLmFkZE1pbGlzZWNvbmRzKHRoaXMuI2NhY2hlW2hhc2hLZXldLmNyZWF0ZWREYXRlLCB0aGlzLiNjYWNoZUR1cmF0aW9uKSA8IG5ldyBEYXRlKCkpIHtcclxuICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0gPSB7XHJcbiAgICAgICAgY3JlYXRlZERhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3QoKSxcclxuICAgICAgfTtcclxuICAgICAgaWYgKG9wdGlvbnM/LnJlc3BvbnNlVHlwZSAmJiBvcHRpb25zLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XHJcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgICAgICAucG9zdChlbmNvZGVVUkkodXJsKSwgYm9keSwge1xyXG4gICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXHJcbiAgICAgICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogb3B0aW9ucz8ucmVzcG9uc2VUeXBlIGFzIGFueSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAucGlwZSh0aW1lb3V0KHRoaXMuI3RpbWVvdXQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByZXMsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0Lm5leHQocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogZXJyLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0uc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgICAgLnBvc3QoZW5jb2RlVVJJKHVybCksIGJvZHksIHtcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcclxuICAgICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAucGlwZSh0aW1lb3V0KHRoaXMuI3RpbWVvdXQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLm9rKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzLmJvZHksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0uc3ViamVjdC5uZXh0KHJlcy5ib2R5KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXMuYm9keSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0LmVycm9yKHJlcy5ib2R5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGVycixcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlPy5zdGF0dXMpIHtcclxuICAgICAgaWYgKHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlPy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhyb3cgdGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2UucmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcclxuICB9O1xyXG5cclxuICBwb3N0Q2FjaGUgPSBhc3luYyA8VCA9IGFueT4oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGJvZHk/OiBhbnksXHJcbiAgICBvcHRpb25zPzoge1xyXG4gICAgICBjYWNoZVR5cGU/OiAnZGVmYXVsdCcgfCAnc2Vzc2lvbicgfCAnbG9jYWwnO1xyXG4gICAgICBjYWNoZUhvdXJzPzogbnVtYmVyO1xyXG4gICAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnM7XHJcbiAgICB9XHJcbiAgKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID1cclxuICAgICAgb3B0aW9ucz8uaGVhZGVycyB8fFxyXG4gICAgICB0aGlzLnRva2VuU2VydmljZS5jdXN0b21IZWFkZXJzKHtcclxuICAgICAgICB1cmwsXHJcbiAgICAgIH0pO1xyXG4gICAgY29uc3QgeyBnZXQsIHNldCwgaGFzIH0gPSB0aGlzLmNhY2hlU2VydmljZS5jcmVhdGUoXHJcbiAgICAgIHtcclxuICAgICAgICB1cmwsXHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgICBib2R5LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogb3B0aW9ucz8uY2FjaGVUeXBlLFxyXG4gICAgICAgIGhvdXJzOiBvcHRpb25zPy5jYWNoZUhvdXJzLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaWYgKCFoYXMoKSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBvc3QodXJsLCBib2R5LCBvcHRpb25zPy5oZWFkZXJzKTtcclxuICAgICAgc2V0KHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2V0KCk7XHJcbiAgfTtcclxuXHJcbiAgcHV0ID0gYXN5bmMgPFQgPSBhbnk+KHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogSHR0cEhlYWRlcnMpOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIGhlYWRlcnMgPVxyXG4gICAgICBoZWFkZXJzIHx8XHJcbiAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLmN1c3RvbUhlYWRlcnMoe1xyXG4gICAgICAgIHVybCxcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgIC5wdXQoZW5jb2RlVVJJKHVybCksIGJvZHksIHtcclxuICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXHJcbiAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aGlzLiN0aW1lb3V0KSlcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGh0dHBFcnJvclJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGh0dHBFcnJvclJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gICNkZWZpbmVQYXJhbXMgPSAocmVxdWVzdDogYW55KSA9PiB7XHJcbiAgICBjb25zdCBycSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVxdWVzdCkpIHtcclxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlPy50b1N0cmluZygpICE9PSAnJykge1xyXG4gICAgICAgIHJxLnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSBhcyBzdHJpbmcpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSBhcyBzdHJpbmcpfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYD8ke3JxPy5qb2luKCcmJyl9YDtcclxuICB9O1xyXG5cclxuICBnZXRXaXRoUGFyYW1zID0gYXN5bmMgPFQgPSBhbnk+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSxcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcclxuICAgICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcclxuICAgIH1cclxuICApOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChgJHt1cmx9JHt0aGlzLiNkZWZpbmVQYXJhbXMocGFyYW1zKX1gLCBvcHRpb25zPy5oZWFkZXJzLCB7IC4uLm9wdGlvbnMsIGVuY29kZVVSSTogZmFsc2UgfSk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0Q2FjaGVXaXRoUGFyYW1zID0gYXN5bmMgPFQgPSBhbnk+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgIHJlbG9hZD86IGJvb2xlYW47XHJcbiAgICAgIGNhY2hlVHlwZT86ICdkZWZhdWx0JyB8ICdzZXNzaW9uJyB8ICdsb2NhbCc7XHJcbiAgICAgIGNhY2hlSG91cnM/OiBudW1iZXI7XHJcbiAgICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcclxuICAgIH1cclxuICApOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldENhY2hlKGAke3VybH0ke3RoaXMuI2RlZmluZVBhcmFtcyhwYXJhbXMpfWAsIHsgLi4ub3B0aW9ucywgaGVhZGVycywgZW5jb2RlVVJJOiBmYWxzZSB9KTtcclxuICB9O1xyXG5cclxuICBnZXQgPSBhc3luYyA8VCA9IGFueT4oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyxcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XHJcbiAgICAgIGVuY29kZVVSST86IGJvb2xlYW47XHJcbiAgICB9XHJcbiAgKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICBoZWFkZXJzID1cclxuICAgICAgaGVhZGVycyB8fFxyXG4gICAgICB0aGlzLnRva2VuU2VydmljZS5jdXN0b21IZWFkZXJzKHtcclxuICAgICAgICB1cmwsXHJcbiAgICAgIH0pO1xyXG4gICAgY29uc3QgZW5jb2RlZFVybCA9IG9wdGlvbnM/LmVuY29kZVVSSSA9PT0gZmFsc2UgPyB1cmwgOiBlbmNvZGVVUkkodXJsKTtcclxuICAgIC8vIGNvbnN0IGhhc2hLZXkgPSBoYXNoKHtcclxuICAgIC8vICAgZW5jb2RlZFVybCxcclxuICAgIC8vICAgaGVhZGVyc1xyXG4gICAgLy8gfSk7XHJcbiAgICBjb25zdCBoYXNoS2V5ID0gaGFzaCh7XHJcbiAgICAgIGVuY29kZWRVcmwsXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICB9KTtcclxuICAgIGlmICghdGhpcy4jY2FjaGVbaGFzaEtleV0gfHwgRGF0ZS5hZGRNaWxpc2Vjb25kcyh0aGlzLiNjYWNoZVtoYXNoS2V5XS5jcmVhdGVkRGF0ZSwgdGhpcy4jY2FjaGVEdXJhdGlvbikgPCBuZXcgRGF0ZSgpKSB7XHJcbiAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldID0ge1xyXG4gICAgICAgIGNyZWF0ZWREYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0KCksXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChvcHRpb25zPy5yZXNwb25zZVR5cGUgJiYgb3B0aW9ucy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgICAgLmdldChlbmNvZGVkVXJsLCB7IG9ic2VydmU6ICdib2R5JywgaGVhZGVycywgcmVzcG9uc2VUeXBlOiBvcHRpb25zPy5yZXNwb25zZVR5cGUgYXMgYW55IH0pXHJcbiAgICAgICAgICAucGlwZSh0aW1lb3V0KHRoaXMuI3RpbWVvdXQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByZXMsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0Lm5leHQocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogZXJyLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0uc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAgICAgLmdldChlbmNvZGVkVXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScsIGhlYWRlcnMgfSlcclxuICAgICAgICAgIC5waXBlKHRpbWVvdXQodGhpcy4jdGltZW91dCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMub2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcclxuICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXMuYm9keSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5zdWJqZWN0Lm5leHQocmVzLmJvZHkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlcy5ib2R5LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI2NhY2hlW2hhc2hLZXldLnN1YmplY3QuZXJyb3IocmVzLmJvZHkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogZXJyLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy4jY2FjaGVbaGFzaEtleV0uc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2U/LnN0YXR1cykge1xyXG4gICAgICBpZiAodGhpcy4jY2FjaGVbaGFzaEtleV0ucmVzcG9uc2U/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhY2hlW2hhc2hLZXldLnJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyB0aGlzLiNjYWNoZVtoYXNoS2V5XS5yZXNwb25zZS5yZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVbaGFzaEtleV0uc3ViamVjdC5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xyXG4gIH07XHJcblxyXG4gIGdldENhY2hlID0gYXN5bmMgPFQgPSBhbnk+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBvcHRpb25zPzoge1xyXG4gICAgICByZWxvYWQ/OiBib29sZWFuO1xyXG4gICAgICBjYWNoZVR5cGU/OiAnZGVmYXVsdCcgfCAnc2Vzc2lvbicgfCAnbG9jYWwnO1xyXG4gICAgICBjYWNoZUhvdXJzPzogbnVtYmVyO1xyXG4gICAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnM7XHJcbiAgICAgIGVuY29kZVVSST86IGJvb2xlYW47XHJcbiAgICB9XHJcbiAgKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID1cclxuICAgICAgb3B0aW9ucz8uaGVhZGVycyB8fFxyXG4gICAgICB0aGlzLnRva2VuU2VydmljZS5jdXN0b21IZWFkZXJzKHtcclxuICAgICAgICB1cmwsXHJcbiAgICAgIH0pO1xyXG4gICAgY29uc3QgZW5jb2RlZFVybCA9IG9wdGlvbnM/LmVuY29kZVVSSSA9PT0gZmFsc2UgPyB1cmwgOiBlbmNvZGVVUkkodXJsKTtcclxuICAgIGNvbnN0IHsgZ2V0LCBzZXQsIGhhcyB9ID0gdGhpcy5jYWNoZVNlcnZpY2UuY3JlYXRlKFxyXG4gICAgICB7XHJcbiAgICAgICAgZW5jb2RlZFVybCxcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogb3B0aW9ucz8uY2FjaGVUeXBlLFxyXG4gICAgICAgIGhvdXJzOiBvcHRpb25zPy5jYWNoZUhvdXJzLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaWYgKCFoYXMoKSB8fCBvcHRpb25zPy5yZWxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQoZW5jb2RlZFVybCwgb3B0aW9ucz8uaGVhZGVycywgeyBlbmNvZGVVUkk6IGZhbHNlIH0pO1xyXG4gICAgICBzZXQocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXQoKTtcclxuICB9O1xyXG5cclxuICBkZWxldGUgPSBhc3luYyA8VCA9IGFueT4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgaGVhZGVycyA9XHJcbiAgICAgIGhlYWRlcnMgfHxcclxuICAgICAgdGhpcy50b2tlblNlcnZpY2UuY3VzdG9tSGVhZGVycyh7XHJcbiAgICAgICAgdXJsLFxyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgICAgLmRlbGV0ZShlbmNvZGVVUkkodXJsKSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnLCBoZWFkZXJzIH0pXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aGlzLiN0aW1lb3V0KSlcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGh0dHBFcnJvclJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGh0dHBFcnJvclJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHVwbG9hZFNpbmdsZSA9IChcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgb3B0aW9uPzoge1xyXG4gICAgICBleHRlbnNpb25zPzogc3RyaW5nW107XHJcbiAgICAgIG1heFNpemVJbk1iPzogbnVtYmVyO1xyXG4gICAgICB2YWxpZGF0b3I/OiAoZmlsZU5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xyXG4gICAgfVxyXG4gICk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gU2RVdGlsaXR5LnVwbG9hZChvcHRpb24pLnRoZW4oZmlsZSA9PiB0aGlzLnVwbG9hZCh1cmwsIGZpbGUpKTtcclxuICB9O1xyXG5cclxuICB1cGxvYWQgPSBhc3luYyAodXJsOiBzdHJpbmcsIGZpbGU6IEZpbGUpID0+IHtcclxuICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUoYEludmFsaWQgZmlsZSBleHRlbnNpb25gKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucG9zdCh1cmwsIGZvcm1EYXRhKTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -19,20 +19,30 @@ Array.prototype.search = function (searchText, fields) {
|
|
|
19
19
|
Array.prototype.paging = function (pageSize, page = 0) {
|
|
20
20
|
const items = this;
|
|
21
21
|
return items.filter((item, index) => {
|
|
22
|
-
return index >= page * pageSize
|
|
23
|
-
&& index < (page + 1) * pageSize;
|
|
22
|
+
return index >= page * pageSize && index < (page + 1) * pageSize;
|
|
24
23
|
});
|
|
25
24
|
};
|
|
26
25
|
Array.prototype.toObject = function (key) {
|
|
27
26
|
const items = this;
|
|
28
27
|
if (!key) {
|
|
29
|
-
return items
|
|
28
|
+
return items
|
|
29
|
+
.filter(item => item !== undefined && item !== null)
|
|
30
|
+
.reduce((obj, item) => {
|
|
31
|
+
obj[item === null || item === void 0 ? void 0 : item.toString()] = item;
|
|
32
|
+
return obj;
|
|
33
|
+
}, {});
|
|
30
34
|
}
|
|
31
|
-
return items
|
|
35
|
+
return items
|
|
36
|
+
.filter(item => item !== undefined && item !== null)
|
|
37
|
+
.reduce((obj, item) => {
|
|
38
|
+
var _a;
|
|
39
|
+
obj[(_a = item[key]) === null || _a === void 0 ? void 0 : _a.toString()] = item;
|
|
40
|
+
return obj;
|
|
41
|
+
}, {});
|
|
32
42
|
};
|
|
33
43
|
Array.prototype.union = function (key, ...args) {
|
|
34
44
|
let results = this;
|
|
35
|
-
const filterUnion = (val, index, self) => val !== undefined && val !== null && self.findIndex((e) => !!key ? e[key] === val[key] : e === val) === index;
|
|
45
|
+
const filterUnion = (val, index, self) => val !== undefined && val !== null && self.findIndex((e) => (!!key ? e[key] === val[key] : e === val)) === index;
|
|
36
46
|
if (!(args === null || args === void 0 ? void 0 : args.length)) {
|
|
37
47
|
return results.filter(filterUnion);
|
|
38
48
|
}
|
|
@@ -62,4 +72,7 @@ Array.toObject = (items, key) => {
|
|
|
62
72
|
}
|
|
63
73
|
return items.toObject(key);
|
|
64
74
|
};
|
|
65
|
-
|
|
75
|
+
Array.sum = (items, key) => {
|
|
76
|
+
return items === null || items === void 0 ? void 0 : items.map(e => +e[key] || 0).reduce((current, next) => current + next, 0);
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9jb21tb24vIiwic291cmNlcyI6WyJzcmMvbGliL3R5cGluZ3MvYXJyYXkuZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFvQnRDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQW1CLFVBQWUsRUFBRSxNQUEwQjtJQUNyRixNQUFNLEtBQUssR0FBUSxJQUFJLENBQUM7SUFDeEIsSUFBSSxFQUFDLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxRQUFRLEdBQUUsRUFBRTtRQUMzQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDNUc7UUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxD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QUMsQ0FBQztBQUVGLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBSSxLQUFVLEVBQUUsR0FBNkIsRUFBRSxFQUFFO0lBQzNELE9BQU8sS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRTtBQUNwRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IHt9O1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBBcnJheTxUID0gYW55PiB7XHJcbiAgICBzZWFyY2goc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVtYmVyLCBmaWVsZHM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFRbXTtcclxuICAgIHBhZ2luZyhwYWdlU2l6ZTogbnVtYmVyLCBwYWdlPzogbnVtYmVyKTogVFtdO1xyXG4gICAgdG9PYmplY3Qoa2V5Pzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBUIH07XHJcbiAgICB1bmlvbihrZXk/OiBzdHJpbmcsIC4uLmFyZ3M6IFRbXVtdKTogVFtdO1xyXG4gICAgYXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8VFtdPjtcclxuICB9XHJcbiAgaW50ZXJmYWNlIEFycmF5Q29uc3RydWN0b3Ige1xyXG4gICAgc2VhcmNoPFQgPSBhbnk+KGl0ZW1zOiBUW10sIHNlYXJjaFRleHQ6IHN0cmluZyB8IG51bWJlciwgZmllbGRzPzogRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+IHwgRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+W10pOiBUW107XHJcbiAgICB1bmlvbjxUID0gYW55PihrZXk6IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPiwgLi4uYXJnczogVFtdW10pOiBUW107XHJcbiAgICB0b09iamVjdDxUID0gYW55PihpdGVtczogVFtdLCBrZXk/OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfTtcclxuICAgIHN1bTxUID0gYW55PihpdGVtczogVFtdLCBrZXk6IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPik6IG51bWJlcjtcclxuICB9XHJcbn1cclxuXHJcbkFycmF5LnByb3RvdHlwZS5zZWFyY2ggPSBmdW5jdGlvbiA8VCA9IGFueT4oc2VhcmNoVGV4dDogYW55LCBmaWVsZHM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFRbXSB7XHJcbiAgY29uc3QgaXRlbXM6IFRbXSA9IHRoaXM7XHJcbiAgaWYgKCFzZWFyY2hUZXh0Py50b1N0cmluZygpKSB7XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG4gIGlmIChBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcclxuICAgIGNvbnN0IGZzID0gZmllbGRzLmZpbHRlcihlID0+IGUgIT09IHVuZGVmaW5lZCAmJiBlICE9PSBudWxsICYmIGUgIT09ICcnKTtcclxuICAgIGlmICghZnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbCAmJiBTdHJpbmcuYWxpYXNJbmNsdWRlcyhpdGVtLCBzZWFyY2hUZXh0KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0gIT09IG51bGwgJiYgZnMuc29tZShmaWVsZCA9PiBTdHJpbmcuYWxpYXNJbmNsdWRlcyhpdGVtW2ZpZWxkXSwgc2VhcmNoVGV4dCkpKTtcclxuICB9XHJcbiAgaWYgKCFmaWVsZHMpIHtcclxuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbCAmJiBTdHJpbmcuYWxpYXNJbmNsdWRlcyhpdGVtLCBzZWFyY2hUZXh0KSk7XHJcbiAgfVxyXG4gIHJldHVybiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbCAmJiBTdHJpbmcuYWxpYXNJbmNsdWRlcyhpdGVtW2ZpZWxkc10sIHNlYXJjaFRleHQpKTtcclxufTtcclxuXHJcbkFycmF5LnByb3RvdHlwZS5wYWdpbmcgPSBmdW5jdGlvbiA8VCA9IGFueT4ocGFnZVNpemU6IG51bWJlciwgcGFnZTogbnVtYmVyID0gMCk6IFRbXSB7XHJcbiAgY29uc3QgaXRlbXM6IFRbXSA9IHRoaXM7XHJcbiAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgIHJldHVybiBpbmRleCA+PSBwYWdlICogcGFnZVNpemUgJiYgaW5kZXggPCAocGFnZSArIDEpICogcGFnZVNpemU7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5BcnJheS5wcm90b3R5cGUudG9PYmplY3QgPSBmdW5jdGlvbiA8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgY29uc3QgaXRlbXM6IFRbXSA9IHRoaXM7XHJcbiAgaWYgKCFrZXkpIHtcclxuICAgIHJldHVybiBpdGVtc1xyXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0gIT09IG51bGwpXHJcbiAgICAgIC5yZWR1Y2UoKG9iaiwgaXRlbSkgPT4ge1xyXG4gICAgICAgIG9ialtpdGVtPy50b1N0cmluZygpXSA9IGl0ZW07XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgfSwge30pO1xyXG4gIH1cclxuICByZXR1cm4gaXRlbXNcclxuICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbClcclxuICAgIC5yZWR1Y2UoKG9iaiwgaXRlbSkgPT4ge1xyXG4gICAgICBvYmpbaXRlbVtrZXldPy50b1N0cmluZygpXSA9IGl0ZW07XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9LCB7fSk7XHJcbn07XHJcblxyXG5BcnJheS5wcm90b3R5cGUudW5pb24gPSBmdW5jdGlvbiA8VCA9IGFueT4oa2V5Pzogc3RyaW5nLCAuLi5hcmdzOiBUW11bXSkge1xyXG4gIGxldCByZXN1bHRzOiBUW10gPSB0aGlzO1xyXG4gIGNvbnN0IGZpbHRlclVuaW9uID0gPFQgPSBhbnk+KHZhbDogVCwgaW5kZXg6IG51bWJlciwgc2VsZjogVFtdKSA9PlxyXG4gICAgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIHNlbGYuZmluZEluZGV4KChlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gKCEha2V5ID8gZVtrZXldID09PSB2YWxba2V5XSA6IGUgPT09IHZhbCkpID09PSBpbmRleDtcclxuICBpZiAoIWFyZ3M/Lmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKGZpbHRlclVuaW9uKTtcclxuICB9XHJcbiAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xyXG4gICAgICByZXN1bHRzID0gWy4uLnJlc3VsdHMsIC4uLmFyZ10uZmlsdGVyKGZpbHRlclVuaW9uKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdHM7XHJcbn07XHJcblxyXG5BcnJheS5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gPFQgPSBhbnk+KCkge1xyXG4gIGNvbnN0IGl0ZW1zOiBUW10gPSB0aGlzO1xyXG4gIHJldHVybiBvZihpdGVtcyk7XHJcbn07XHJcblxyXG5BcnJheS5zZWFyY2ggPSA8VCA9IGFueT4oaXRlbXM6IFRbXSwgc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVtYmVyLCBmaWVsZHM/OiBFeHRyYWN0PGtleW9mIFQsIHN0cmluZz4gfCBFeHRyYWN0PGtleW9mIFQsIHN0cmluZz5bXSkgPT4ge1xyXG4gIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcbiAgcmV0dXJuIGl0ZW1zLnNlYXJjaChzZWFyY2hUZXh0LCBmaWVsZHMpO1xyXG59O1xyXG5cclxuQXJyYXkudW5pb24gPSA8VCA9IGFueT4oa2V5OiBFeHRyYWN0PGtleW9mIFQsIHN0cmluZz4sIC4uLmFyZ3M6IFRbXVtdKSA9PiB7XHJcbiAgcmV0dXJuIFtdLnVuaW9uKGtleSwgLi4uYXJncyk7XHJcbn07XHJcblxyXG5BcnJheS50b09iamVjdCA9IDxUPihpdGVtczogVFtdLCBrZXk/OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfSA9PiB7XHJcbiAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICByZXR1cm4gaXRlbXMudG9PYmplY3Qoa2V5KTtcclxufTtcclxuXHJcbkFycmF5LnN1bSA9IDxUPihpdGVtczogVFtdLCBrZXk6IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPikgPT4ge1xyXG4gIHJldHVybiBpdGVtcz8ubWFwKGUgPT4gK2Vba2V5XSB8fCAwKS5yZWR1Y2UoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnQgKyBuZXh0LCAwKTtcclxufTtcclxuIl19
|