@stemy/ngx-utils 11.0.8 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +27 -27
  2. package/bundles/stemy-ngx-utils.umd.js +22 -7
  3. package/bundles/stemy-ngx-utils.umd.js.map +1 -1
  4. package/bundles/stemy-ngx-utils.umd.min.js +1 -1
  5. package/bundles/stemy-ngx-utils.umd.min.js.map +1 -1
  6. package/esm2015/ngx-utils/common-types.js +2 -1
  7. package/esm2015/ngx-utils/ngx-utils.module.js +6 -2
  8. package/esm2015/ngx-utils/services/config.service.js +8 -4
  9. package/esm2015/ngx-utils/services/promise.service.js +4 -1
  10. package/esm2015/ngx-utils/services/static-language.service.js +9 -7
  11. package/esm2015/ngx-utils/utils/unique.utils.js +1 -1
  12. package/esm2015/public_api.js +2 -2
  13. package/fesm2015/stemy-ngx-utils.js +22 -8
  14. package/fesm2015/stemy-ngx-utils.js.map +1 -1
  15. package/ngx-utils/common-types.d.ts +2 -0
  16. package/ngx-utils/services/config.service.d.ts +3 -1
  17. package/ngx-utils/services/promise.service.d.ts +5 -4
  18. package/ngx-utils/services/static-language.service.d.ts +3 -2
  19. package/package.json +1 -1
  20. package/public_api.d.ts +1 -1
  21. package/stemy-ngx-utils.metadata.json +1 -1
  22. package/esm5/ngx-utils/common-types.js +0 -553
  23. package/esm5/ngx-utils/components/dynamic-table/dynamic-table.component.js +0 -285
  24. package/esm5/ngx-utils/components/pagination-menu/pagination-menu.component.js +0 -198
  25. package/esm5/ngx-utils/components/unordered-list/unordered-list.component.js +0 -110
  26. package/esm5/ngx-utils/directives/async-method.directive.js +0 -105
  27. package/esm5/ngx-utils/directives/background.directive.js +0 -91
  28. package/esm5/ngx-utils/directives/dynamic-table-template.directive.js +0 -34
  29. package/esm5/ngx-utils/directives/icon.directive.js +0 -101
  30. package/esm5/ngx-utils/directives/ngx-template-outlet.directive.js +0 -182
  31. package/esm5/ngx-utils/directives/pagination-item.directive.js +0 -70
  32. package/esm5/ngx-utils/directives/pagination.directive.js +0 -148
  33. package/esm5/ngx-utils/directives/resource-if.directive.js +0 -97
  34. package/esm5/ngx-utils/directives/sticky.directive.js +0 -93
  35. package/esm5/ngx-utils/directives/unordered-list-item.directive.js +0 -143
  36. package/esm5/ngx-utils/directives/unordered-list-template.directive.js +0 -54
  37. package/esm5/ngx-utils/ngx-utils.module.js +0 -205
  38. package/esm5/ngx-utils/pipes/chunk.pipe.js +0 -41
  39. package/esm5/ngx-utils/pipes/entries.pipe.js +0 -54
  40. package/esm5/ngx-utils/pipes/extra-item-properties.pipe.js +0 -51
  41. package/esm5/ngx-utils/pipes/filter.pipe.js +0 -65
  42. package/esm5/ngx-utils/pipes/find.pipe.js +0 -51
  43. package/esm5/ngx-utils/pipes/format-number.pipe.js +0 -44
  44. package/esm5/ngx-utils/pipes/get-offset.pipe.js +0 -31
  45. package/esm5/ngx-utils/pipes/get-type.pipe.js +0 -28
  46. package/esm5/ngx-utils/pipes/group-by.pipe.js +0 -48
  47. package/esm5/ngx-utils/pipes/is-type.pipe.js +0 -30
  48. package/esm5/ngx-utils/pipes/join.pipe.js +0 -34
  49. package/esm5/ngx-utils/pipes/keys.pipe.js +0 -35
  50. package/esm5/ngx-utils/pipes/map.pipe.js +0 -52
  51. package/esm5/ngx-utils/pipes/max.pipe.js +0 -45
  52. package/esm5/ngx-utils/pipes/min.pipe.js +0 -45
  53. package/esm5/ngx-utils/pipes/reduce.pipe.js +0 -55
  54. package/esm5/ngx-utils/pipes/remap.pipe.js +0 -51
  55. package/esm5/ngx-utils/pipes/replace.pipe.js +0 -32
  56. package/esm5/ngx-utils/pipes/reverse.pipe.js +0 -38
  57. package/esm5/ngx-utils/pipes/round.pipe.js +0 -44
  58. package/esm5/ngx-utils/pipes/safe-html.pipe.js +0 -54
  59. package/esm5/ngx-utils/pipes/translate.pipe.js +0 -111
  60. package/esm5/ngx-utils/pipes/values.pipe.js +0 -35
  61. package/esm5/ngx-utils/plugins/resize-event.plugin.js +0 -122
  62. package/esm5/ngx-utils/plugins/scroll-event.plugin.js +0 -110
  63. package/esm5/ngx-utils/services/acl.service.js +0 -119
  64. package/esm5/ngx-utils/services/auth.service.js +0 -40
  65. package/esm5/ngx-utils/services/events.service.js +0 -33
  66. package/esm5/ngx-utils/services/formatter.service.js +0 -124
  67. package/esm5/ngx-utils/services/icon.service.js +0 -32
  68. package/esm5/ngx-utils/services/language.service.js +0 -199
  69. package/esm5/ngx-utils/services/promise.service.js +0 -123
  70. package/esm5/ngx-utils/services/state.service.js +0 -271
  71. package/esm5/ngx-utils/services/storage.service.js +0 -100
  72. package/esm5/ngx-utils/services/toaster.service.js +0 -100
  73. package/esm5/ngx-utils/services/universal.service.js +0 -153
  74. package/esm5/ngx-utils/utils/ajax-request-handler.js +0 -73
  75. package/esm5/ngx-utils/utils/array.utils.js +0 -182
  76. package/esm5/ngx-utils/utils/auth.guard.js +0 -205
  77. package/esm5/ngx-utils/utils/canvas.utils.js +0 -668
  78. package/esm5/ngx-utils/utils/date.utils.js +0 -91
  79. package/esm5/ngx-utils/utils/file.utils.js +0 -201
  80. package/esm5/ngx-utils/utils/loader.utils.js +0 -90
  81. package/esm5/ngx-utils/utils/math.utils.js +0 -62
  82. package/esm5/ngx-utils/utils/object.utils.js +0 -513
  83. package/esm5/ngx-utils/utils/observable.utils.js +0 -30
  84. package/esm5/ngx-utils/utils/reflect.utils.js +0 -95
  85. package/esm5/ngx-utils/utils/set.utils.js +0 -48
  86. package/esm5/ngx-utils/utils/string.utils.js +0 -94
  87. package/esm5/ngx-utils/utils/timer.utils.js +0 -100
  88. package/esm5/ngx-utils/utils/unique.utils.js +0 -54
  89. package/esm5/ngx-utils/utils/vector.js +0 -223
  90. package/esm5/public_api.js +0 -73
  91. package/esm5/stemy-ngx-utils.js +0 -11
  92. package/fesm5/stemy-ngx-utils.js +0 -6709
  93. package/fesm5/stemy-ngx-utils.js.map +0 -1
  94. package/typings.d.ts +0 -5
@@ -1,513 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
4
- */
5
- /** @type {?} */
6
- var defaultPredicate = function () { return true; };
7
- var ɵ0 = defaultPredicate;
8
- var ObjectUtils = /** @class */ (function () {
9
- function ObjectUtils() {
10
- }
11
- /**
12
- * @param {?} a
13
- * @param {?} b
14
- * @return {?}
15
- */
16
- ObjectUtils.compare = /**
17
- * @param {?} a
18
- * @param {?} b
19
- * @return {?}
20
- */
21
- function (a, b) {
22
- if ((a === null || b === null) || (typeof a != typeof b)) {
23
- return null;
24
- }
25
- if (typeof a === "string") {
26
- return (a).localeCompare(b);
27
- }
28
- else {
29
- if (a instanceof Date) {
30
- a = a.getTime();
31
- b = b.getTime();
32
- }
33
- if (a > b) {
34
- return 1;
35
- }
36
- else if (a < b) {
37
- return -1;
38
- }
39
- return 0;
40
- }
41
- };
42
- /**
43
- * @param {?} a
44
- * @param {?} b
45
- * @return {?}
46
- */
47
- ObjectUtils.equals = /**
48
- * @param {?} a
49
- * @param {?} b
50
- * @return {?}
51
- */
52
- function (a, b) {
53
- if (a === b)
54
- return true;
55
- if (a === null || b === null)
56
- return false;
57
- if (a !== a && b !== b)
58
- return true; // NaN === NaN
59
- // NaN === NaN
60
- /** @type {?} */
61
- var at = typeof a;
62
- /** @type {?} */
63
- var bt = typeof b;
64
- /** @type {?} */
65
- var length;
66
- /** @type {?} */
67
- var key;
68
- /** @type {?} */
69
- var keySet;
70
- if (at == bt && at == "object") {
71
- if (Array.isArray(a)) {
72
- if (!Array.isArray(b))
73
- return false;
74
- if ((length = a.length) == b.length) {
75
- for (key = 0; key < length; key++) {
76
- if (!ObjectUtils.equals(a[key], b[key]))
77
- return false;
78
- }
79
- return true;
80
- }
81
- }
82
- else {
83
- if (Array.isArray(b)) {
84
- return false;
85
- }
86
- keySet = Object.create(null);
87
- for (key in a) {
88
- if (a.hasOwnProperty(key)) {
89
- if (!ObjectUtils.equals(a[key], b[key])) {
90
- return false;
91
- }
92
- keySet[key] = true;
93
- }
94
- }
95
- for (key in b) {
96
- if (b.hasOwnProperty(key) && !(key in keySet) && typeof b[key] !== "undefined") {
97
- return false;
98
- }
99
- }
100
- return true;
101
- }
102
- }
103
- return false;
104
- };
105
- /**
106
- * @param {?} expr
107
- * @param {?=} context
108
- * @return {?}
109
- */
110
- ObjectUtils.evaluate = /**
111
- * @param {?} expr
112
- * @param {?=} context
113
- * @return {?}
114
- */
115
- function (expr, context) {
116
- if (context === void 0) { context = {}; }
117
- expr = Object.keys(context).reduce(function (res, key) { return "var " + key + " = this['" + key + "']; " + res; }, expr);
118
- /** @type {?} */
119
- var result = null;
120
- try {
121
- result = (function () { return eval(expr); }).call(context);
122
- }
123
- catch (e) {
124
- console.log("Failed to parse expression: " + e.message, expr, context);
125
- }
126
- return result;
127
- };
128
- /**
129
- * @param {?} obj
130
- * @return {?}
131
- */
132
- ObjectUtils.empty = /**
133
- * @param {?} obj
134
- * @return {?}
135
- */
136
- function (obj) {
137
- return !obj || Object.keys(obj).length == 0;
138
- };
139
- /**
140
- * @param {?} obj
141
- * @param {?} cb
142
- * @return {?}
143
- */
144
- ObjectUtils.iterate = /**
145
- * @param {?} obj
146
- * @param {?} cb
147
- * @return {?}
148
- */
149
- function (obj, cb) {
150
- if (!obj)
151
- return;
152
- /** @type {?} */
153
- var keys = Array.isArray(obj) ? Array.from(obj.keys()) : Object.keys(obj);
154
- keys.forEach(
155
- // @dynamic
156
- function (key) {
157
- cb(obj[key], key);
158
- });
159
- };
160
- /**
161
- * @param {?} obj
162
- * @param {?} key
163
- * @param {?=} defaultValue
164
- * @param {?=} treeFallback
165
- * @return {?}
166
- */
167
- ObjectUtils.getValue = /**
168
- * @param {?} obj
169
- * @param {?} key
170
- * @param {?=} defaultValue
171
- * @param {?=} treeFallback
172
- * @return {?}
173
- */
174
- function (obj, key, defaultValue, treeFallback) {
175
- if (treeFallback === void 0) { treeFallback = false; }
176
- key = key || "";
177
- /** @type {?} */
178
- var keys = key.split(".");
179
- /** @type {?} */
180
- var curKey = "";
181
- do {
182
- curKey += keys.shift();
183
- if (ObjectUtils.isDefined(obj) && ObjectUtils.isDefined(obj[curKey]) && (typeof obj[curKey] === "object" || !keys.length)) {
184
- obj = obj[curKey];
185
- curKey = "";
186
- }
187
- else if (!keys.length) {
188
- defaultValue = typeof defaultValue == "undefined" ? key.replace(new RegExp(curKey + "$"), "{" + curKey + "}") : defaultValue;
189
- obj = treeFallback ? obj || defaultValue : defaultValue;
190
- }
191
- else {
192
- curKey += ".";
193
- }
194
- } while (keys.length);
195
- return obj;
196
- };
197
- /**
198
- * @param {?} target
199
- * @param {?} source
200
- * @param {?} path
201
- * @return {?}
202
- */
203
- ObjectUtils.mapToPath = /**
204
- * @param {?} target
205
- * @param {?} source
206
- * @param {?} path
207
- * @return {?}
208
- */
209
- function (target, source, path) {
210
- if (typeof source === "undefined")
211
- return target;
212
- if (path.length == 0)
213
- return source;
214
- /** @type {?} */
215
- var key = path.shift();
216
- if (key == "*") {
217
- if (ObjectUtils.isArray(source)) {
218
- target = ObjectUtils.isArray(target) ? target : [];
219
- return source.map(function (item, index) {
220
- return ObjectUtils.mapToPath(target[index], item, Array.from(path));
221
- });
222
- }
223
- if (ObjectUtils.isObject(source)) {
224
- target = ObjectUtils.isObject(target) ? target : {};
225
- return Object.keys(source).reduce(function (result, key) {
226
- result[key] = ObjectUtils.mapToPath(target[key], source[key], Array.from(path));
227
- return result;
228
- }, {});
229
- }
230
- return ObjectUtils.isNullOrUndefined(target) ? null : target;
231
- }
232
- /** @type {?} */
233
- var isArray = ObjectUtils.isArray(target);
234
- target = ObjectUtils.isObject(target) || isArray ? target : {};
235
- target[key] = ObjectUtils.mapToPath(target[key], source, Array.from(path));
236
- return isNaN(key) || isArray ? target : Object.values(target);
237
- };
238
- /**
239
- * @param {?} obj
240
- * @param {?} predicate
241
- * @return {?}
242
- */
243
- ObjectUtils.filter = /**
244
- * @param {?} obj
245
- * @param {?} predicate
246
- * @return {?}
247
- */
248
- function (obj, predicate) {
249
- return ObjectUtils.copyRecursive(null, obj, predicate);
250
- };
251
- /**
252
- * @template T
253
- * @param {?} obj
254
- * @return {?}
255
- */
256
- ObjectUtils.copy = /**
257
- * @template T
258
- * @param {?} obj
259
- * @return {?}
260
- */
261
- function (obj) {
262
- return ObjectUtils.copyRecursive(null, obj);
263
- };
264
- /**
265
- * @template T
266
- * @param {?} target
267
- * @param {?} source
268
- * @param {?=} predicate
269
- * @return {?}
270
- */
271
- ObjectUtils.assign = /**
272
- * @template T
273
- * @param {?} target
274
- * @param {?} source
275
- * @param {?=} predicate
276
- * @return {?}
277
- */
278
- function (target, source, predicate) {
279
- return ObjectUtils.copyRecursive(target, source, predicate);
280
- };
281
- /**
282
- * @param {?} obj
283
- * @return {?}
284
- */
285
- ObjectUtils.getType = /**
286
- * @param {?} obj
287
- * @return {?}
288
- */
289
- function (obj) {
290
- /** @type {?} */
291
- var regex = new RegExp("\\s([a-zA-Z]+)");
292
- return Object.prototype.toString.call(obj).match(regex)[1].toLowerCase();
293
- };
294
- /**
295
- * @param {?} value
296
- * @return {?}
297
- */
298
- ObjectUtils.isPrimitive = /**
299
- * @param {?} value
300
- * @return {?}
301
- */
302
- function (value) {
303
- /** @type {?} */
304
- var type = typeof value;
305
- return value == null || (type !== "object" && type !== "function");
306
- };
307
- /**
308
- * @param {?} value
309
- * @return {?}
310
- */
311
- ObjectUtils.isObject = /**
312
- * @param {?} value
313
- * @return {?}
314
- */
315
- function (value) {
316
- return ObjectUtils.getType(value) === "object";
317
- };
318
- /**
319
- * @param {?} value
320
- * @return {?}
321
- */
322
- ObjectUtils.isDefined = /**
323
- * @param {?} value
324
- * @return {?}
325
- */
326
- function (value) {
327
- return typeof value !== "undefined" && value !== null;
328
- };
329
- /**
330
- * @param {?} value
331
- * @return {?}
332
- */
333
- ObjectUtils.isNullOrUndefined = /**
334
- * @param {?} value
335
- * @return {?}
336
- */
337
- function (value) {
338
- return typeof value == "undefined" || value == null;
339
- };
340
- /**
341
- * @param {?} value
342
- * @return {?}
343
- */
344
- ObjectUtils.isString = /**
345
- * @param {?} value
346
- * @return {?}
347
- */
348
- function (value) {
349
- return typeof value === "string";
350
- };
351
- /**
352
- * @param {?} value
353
- * @return {?}
354
- */
355
- ObjectUtils.isFunction = /**
356
- * @param {?} value
357
- * @return {?}
358
- */
359
- function (value) {
360
- return typeof value === "function";
361
- };
362
- /**
363
- * @param {?} value
364
- * @return {?}
365
- */
366
- ObjectUtils.isDate = /**
367
- * @param {?} value
368
- * @return {?}
369
- */
370
- function (value) {
371
- return null !== value && !isNaN(value) && "undefined" !== typeof value.getDate;
372
- };
373
- /**
374
- * @param {?} value
375
- * @return {?}
376
- */
377
- ObjectUtils.isBlob = /**
378
- * @param {?} value
379
- * @return {?}
380
- */
381
- function (value) {
382
- return value instanceof Blob || value instanceof File;
383
- };
384
- /**
385
- * @param {?} value
386
- * @return {?}
387
- */
388
- ObjectUtils.isBoolean = /**
389
- * @param {?} value
390
- * @return {?}
391
- */
392
- function (value) {
393
- return typeof (value) == typeof (true);
394
- };
395
- /**
396
- * @param {?} value
397
- * @return {?}
398
- */
399
- ObjectUtils.isNumber = /**
400
- * @param {?} value
401
- * @return {?}
402
- */
403
- function (value) {
404
- if (typeof value !== "number")
405
- return false;
406
- /** @type {?} */
407
- var num = +value;
408
- if ((num - num) !== 0) {
409
- return false;
410
- }
411
- if (num === value) {
412
- return true;
413
- }
414
- };
415
- /**
416
- * @param {?} value
417
- * @return {?}
418
- */
419
- ObjectUtils.isArray = /**
420
- * @param {?} value
421
- * @return {?}
422
- */
423
- function (value) {
424
- return Array.isArray(value);
425
- };
426
- /**
427
- * @param {?} value
428
- * @return {?}
429
- */
430
- ObjectUtils.isSet = /**
431
- * @param {?} value
432
- * @return {?}
433
- */
434
- function (value) {
435
- return value instanceof Set;
436
- };
437
- /**
438
- * @param {?} obj
439
- * @param {?} interFaceObject
440
- * @return {?}
441
- */
442
- ObjectUtils.checkInterface = /**
443
- * @param {?} obj
444
- * @param {?} interFaceObject
445
- * @return {?}
446
- */
447
- function (obj, interFaceObject) {
448
- if (!obj)
449
- return false;
450
- for (var key in interFaceObject) {
451
- if (interFaceObject.hasOwnProperty(key) && typeof obj[key] !== interFaceObject[key])
452
- return false;
453
- }
454
- return true;
455
- };
456
- /**
457
- * @param {?} obj
458
- * @param {?} width
459
- * @param {?=} chr
460
- * @return {?}
461
- */
462
- ObjectUtils.pad = /**
463
- * @param {?} obj
464
- * @param {?} width
465
- * @param {?=} chr
466
- * @return {?}
467
- */
468
- function (obj, width, chr) {
469
- if (chr === void 0) { chr = "0"; }
470
- /** @type {?} */
471
- var str = ObjectUtils.isDefined(obj) ? obj.toString() : "";
472
- return str.length >= width ? str : new Array(width - str.length + 1).join(chr) + str;
473
- };
474
- /**
475
- * @param {?} target
476
- * @param {?} source
477
- * @param {?=} predicate
478
- * @return {?}
479
- */
480
- ObjectUtils.copyRecursive = /**
481
- * @param {?} target
482
- * @param {?} source
483
- * @param {?=} predicate
484
- * @return {?}
485
- */
486
- function (target, source, predicate) {
487
- predicate = predicate || defaultPredicate;
488
- if (ObjectUtils.isPrimitive(source) || ObjectUtils.isDate(source) || ObjectUtils.isBlob(source))
489
- return source;
490
- if (ObjectUtils.isArray(source)) {
491
- target = ObjectUtils.isArray(target) ? Array.from(target) : [];
492
- source.forEach(function (item, index) {
493
- if (!predicate(item, index, target, source))
494
- return;
495
- if (target.length > index)
496
- target[index] = ObjectUtils.copyRecursive(target[index], item, predicate);
497
- else
498
- target.push(ObjectUtils.copyRecursive(null, item, predicate));
499
- });
500
- return target;
501
- }
502
- return Object.keys(source).reduce(function (result, key) {
503
- if (!predicate(source[key], key, result, source))
504
- return result;
505
- result[key] = ObjectUtils.copyRecursive(result[key], source[key], predicate);
506
- return result;
507
- }, Object.assign({}, target));
508
- };
509
- return ObjectUtils;
510
- }());
511
- export { ObjectUtils };
512
- export { ɵ0 };
513
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN0ZW15L25neC11dGlscy8iLCJzb3VyY2VzIjpbIm5neC11dGlscy91dGlscy9vYmplY3QudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7SUFHTSxnQkFBZ0IsR0FBb0IsY0FBTSxPQUFBLElBQUksRUFBSixDQUFJOztBQUVwRDtJQUFBO0lBOE9BLENBQUM7Ozs7OztJQTVPVSxtQkFBTzs7Ozs7SUFBZCxVQUFlLENBQU0sRUFBRSxDQUFNO1FBQ3pCLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLElBQUksRUFBRTtnQkFDbkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDUCxPQUFPLENBQUMsQ0FBQzthQUNaO2lCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZCxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ2I7WUFDRCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQzs7Ozs7O0lBRU0sa0JBQU07Ozs7O0lBQWIsVUFBYyxDQUFNLEVBQUUsQ0FBTTtRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJ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LE1BQU0sQ0FBQztnQkFBRSxPQUFPLE1BQU0sQ0FBQztZQUNoRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDTCxrQkFBQztBQUFELENBQUMsQUE5T0QsSUE4T0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBGaWx0ZXJQcmVjaWRhdGUgPSAodmFsdWU6IGFueSwga2V5PzogYW55LCB0YXJnZXQ/OiBhbnksIHNvdXJjZT86IGFueSkgPT4gYm9vbGVhbjtcclxuZXhwb3J0IHR5cGUgSXRlcmF0ZUNhbGxiYWNrID0gKHZhbHVlOiBhbnksIGtleT86IGFueSkgPT4gdm9pZDtcclxuXHJcbmNvbnN0IGRlZmF1bHRQcmVkaWNhdGU6IEZpbHRlclByZWNpZGF0ZSA9ICgpID0+IHRydWU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2JqZWN0VXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyBjb21wYXJlKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoKGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCkgfHwgKHR5cGVvZiBhICE9IHR5cGVvZiBiKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoYSkubG9jYWxlQ29tcGFyZShiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGEgPSBhLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgIGIgPSBiLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYSA+IGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGEgPCBiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlcXVhbHMoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChhICE9PSBhICYmIGIgIT09IGIpIHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxyXG4gICAgICAgIGNvbnN0IGF0ID0gdHlwZW9mIGEsIGJ0ID0gdHlwZW9mIGI7XHJcbiAgICAgICAgbGV0IGxlbmd0aDogbnVtYmVyLCBrZXk6IGFueSwga2V5U2V0OiBhbnk7XHJcbiAgICAgICAgaWYgKGF0ID09IGJ0ICYmIGF0ID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKChsZW5ndGggPSBhLmxlbmd0aCkgPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlscy5lcXVhbHMoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXlTZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlscy5lcXVhbHMoYVtrZXldLCBiW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICEoa2V5IGluIGtleVNldCkgJiYgdHlwZW9mIGJba2V5XSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBldmFsdWF0ZShleHByOiBzdHJpbmcsIGNvbnRleHQ6IGFueSA9IHt9KTogYW55IHtcclxuICAgICAgICBleHByID0gT2JqZWN0LmtleXMoY29udGV4dCkucmVkdWNlKChyZXMsIGtleSkgPT4gYHZhciAke2tleX0gPSB0aGlzWycke2tleX0nXTsgJHtyZXN9YCwgZXhwcik7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gKCgpID0+IGV2YWwoZXhwcikpLmNhbGwoY29udGV4dCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIHBhcnNlIGV4cHJlc3Npb246ICR7ZS5tZXNzYWdlfWAsIGV4cHIsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlbXB0eShvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhb2JqIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGl0ZXJhdGUob2JqOiBhbnksIGNiOiBJdGVyYXRlQ2FsbGJhY2spOiB2b2lkIHtcclxuICAgICAgICBpZiAoIW9iaikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gQXJyYXkuaXNBcnJheShvYmopID8gQXJyYXkuZnJvbShvYmoua2V5cygpKSA6IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKFxyXG4gICAgICAgICAgICAvLyBAZHluYW1pY1xyXG4gICAgICAgICAgICBrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2Iob2JqW2tleV0sIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRWYWx1ZShvYmo6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSwgdHJlZUZhbGxiYWNrOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG4gICAgICAgIGtleSA9IGtleSB8fCBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBjdXJLZXkgPSBcIlwiO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgY3VyS2V5ICs9IGtleXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzRGVmaW5lZChvYmopICYmIE9iamVjdFV0aWxzLmlzRGVmaW5lZChvYmpbY3VyS2V5XSkgJiYgKHR5cGVvZiBvYmpbY3VyS2V5XSA9PT0gXCJvYmplY3RcIiB8fCAha2V5cy5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbY3VyS2V5XTtcclxuICAgICAgICAgICAgICAgIGN1cktleSA9IFwiXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0eXBlb2YgZGVmYXVsdFZhbHVlID09IFwidW5kZWZpbmVkXCIgPyBrZXkucmVwbGFjZShuZXcgUmVnRXhwKGAke2N1cktleX0kYCksIGB7JHtjdXJLZXl9fWApIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqID0gdHJlZUZhbGxiYWNrID8gb2JqIHx8IGRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cktleSArPSBcIi5cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKGtleXMubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtYXBUb1BhdGgodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55LCBwYXRoOiBzdHJpbmdbXSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB0YXJnZXQ7XHJcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09IDApIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBwYXRoLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGtleSA9PSBcIipcIikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBPYmplY3RVdGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQgOiBbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RVdGlscy5tYXBUb1BhdGgodGFyZ2V0W2luZGV4XSwgaXRlbSwgQXJyYXkuZnJvbShwYXRoKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0VXRpbHMuaXNPYmplY3QodGFyZ2V0KSA/IHRhcmdldCA6IHt9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gT2JqZWN0VXRpbHMubWFwVG9QYXRoKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgQXJyYXkuZnJvbShwYXRoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQodGFyZ2V0KSA/IG51bGwgOiB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzQXJyYXkgPSBPYmplY3RVdGlscy5pc0FycmF5KHRhcmdldCk7XHJcbiAgICAgICAgdGFyZ2V0ID0gT2JqZWN0VXRpbHMuaXNPYmplY3QodGFyZ2V0KSB8fCBpc0FycmF5ID8gdGFyZ2V0IDoge307XHJcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBPYmplY3RVdGlscy5tYXBUb1BhdGgodGFyZ2V0W2tleV0sIHNvdXJjZSwgQXJyYXkuZnJvbShwYXRoKSk7XHJcbiAgICAgICAgcmV0dXJuIGlzTmFOKGtleSkgfHwgaXNBcnJheSA/IHRhcmdldCA6IE9iamVjdC52YWx1ZXModGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZmlsdGVyKG9iajogYW55LCBwcmVkaWNhdGU6IEZpbHRlclByZWNpZGF0ZSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLmNvcHlSZWN1cnNpdmUobnVsbCwgb2JqLCBwcmVkaWNhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjb3B5PFQ+KG9iajogVCk6IFQge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5jb3B5UmVjdXJzaXZlKG51bGwsIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFzc2lnbjxUPih0YXJnZXQ6IFQsIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVjaWRhdGUpOiBUIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuY29weVJlY3Vyc2l2ZSh0YXJnZXQsIHNvdXJjZSwgcHJlZGljYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0VHlwZShvYmo6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXFxcXHMoW2EtekEtWl0rKVwiKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2gocmVnZXgpWzFdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzUHJpbWl0aXZlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8ICh0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IFwiZnVuY3Rpb25cIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuZ2V0VHlwZSh2YWx1ZSkgPT09IFwib2JqZWN0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIiB8fCB2YWx1ZSA9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1N0cmluZyh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBGdW5jdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0RhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUge1xyXG4gICAgICAgIHJldHVybiBudWxsICE9PSB2YWx1ZSAmJiAhaXNOYU4odmFsdWUpICYmIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiB2YWx1ZS5nZXREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0Jsb2IodmFsdWU6IGFueSk6IHZhbHVlIGlzIEJsb2Ige1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IgfHwgdmFsdWUgaW5zdGFuY2VvZiBGaWxlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0Jvb2xlYW4odmFsdWU6IGFueSk6IHZhbHVlIGlzIGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YodmFsdWUpID09IHR5cGVvZih0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNOdW1iZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG51bSA9ICt2YWx1ZTtcclxuICAgICAgICBpZiAoKG51bSAtIG51bSkgIT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobnVtID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzQXJyYXkodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFycmF5PGFueT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNTZXQodmFsdWU6IGFueSk6IHZhbHVlIGlzIFNldDxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNoZWNrSW50ZXJmYWNlKG9iajogYW55LCBpbnRlckZhY2VPYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW50ZXJGYWNlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlckZhY2VPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0eXBlb2Ygb2JqW2tleV0gIT09IGludGVyRmFjZU9iamVjdFtrZXldKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYWQob2JqOiBhbnksIHdpZHRoOiBudW1iZXIsIGNocjogc3RyaW5nID0gXCIwXCIpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IE9iamVjdFV0aWxzLmlzRGVmaW5lZChvYmopID8gb2JqLnRvU3RyaW5nKCkgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBzdHIubGVuZ3RoID49IHdpZHRoID8gc3RyIDogbmV3IEFycmF5KHdpZHRoIC0gc3RyLmxlbmd0aCArIDEpLmpvaW4oY2hyKSArIHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjb3B5UmVjdXJzaXZlKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSwgcHJlZGljYXRlPzogRmlsdGVyUHJlY2lkYXRlKTogYW55IHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUgfHwgZGVmYXVsdFByZWRpY2F0ZTtcclxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNQcmltaXRpdmUoc291cmNlKSB8fCBPYmplY3RVdGlscy5pc0RhdGUoc291cmNlKSB8fCBPYmplY3RVdGlscy5pc0Jsb2Ioc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcclxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IE9iamVjdFV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IEFycmF5LmZyb20odGFyZ2V0KSA6IFtdO1xyXG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJlZGljYXRlKGl0ZW0sIGluZGV4LCB0YXJnZXQsIHNvdXJjZSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQubGVuZ3RoID4gaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4XSA9IE9iamVjdFV0aWxzLmNvcHlSZWN1cnNpdmUodGFyZ2V0W2luZGV4XSwgaXRlbSwgcHJlZGljYXRlKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChPYmplY3RVdGlscy5jb3B5UmVjdXJzaXZlKG51bGwsIGl0ZW0sIHByZWRpY2F0ZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShzb3VyY2Vba2V5XSwga2V5LCByZXN1bHQsIHNvdXJjZSkpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gT2JqZWN0VXRpbHMuY29weVJlY3Vyc2l2ZShyZXN1bHRba2V5XSwgc291cmNlW2tleV0sIHByZWRpY2F0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0KSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,30 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
4
- */
5
- import { Observable } from "rxjs";
6
- import { mergeMap } from "rxjs/operators";
7
- var ObservableUtils = /** @class */ (function () {
8
- function ObservableUtils() {
9
- }
10
- /**
11
- * @param {?} search
12
- * @return {?}
13
- */
14
- ObservableUtils.toSearch = /**
15
- * @param {?} search
16
- * @return {?}
17
- */
18
- function (search) {
19
- return mergeMap(
20
- // @dynamic
21
- function (token) { return search.getSearchResults(token); })(Observable.create(
22
- // @dynamic
23
- function (observer) {
24
- observer.next(search.search);
25
- }));
26
- };
27
- return ObservableUtils;
28
- }());
29
- export { ObservableUtils };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdGVteS9uZ3gtdXRpbHMvIiwic291cmNlcyI6WyJuZ3gtdXRpbHMvdXRpbHMvb2JzZXJ2YWJsZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEM7SUFBQTtJQWVBLENBQUM7Ozs7O0lBYlUsd0JBQVE7Ozs7SUFBZixVQUFnQixNQUF5QjtRQUNyQyxPQUFPLFFBQVE7UUFDWCxXQUFXO1FBQ1gsVUFBQyxLQUFhLElBQUssT0FBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQTlCLENBQThCLENBQ3BELENBQ0csVUFBVSxDQUFDLE1BQU07UUFDYixXQUFXO1FBQ1gsVUFBQyxRQUFhO1lBQ1YsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUNKLENBQ0osQ0FBQztJQUNOLENBQUM7SUFDTCxzQkFBQztBQUFELENBQUMsQUFmRCxJQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge21lcmdlTWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtJU2VhcmNoT2JzZXJ2YWJsZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVVdGlscyB7XHJcblxyXG4gICAgc3RhdGljIHRvU2VhcmNoKHNlYXJjaDogSVNlYXJjaE9ic2VydmFibGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBtZXJnZU1hcChcclxuICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAgKHRva2VuOiBzdHJpbmcpID0+IHNlYXJjaC5nZXRTZWFyY2hSZXN1bHRzKHRva2VuKVxyXG4gICAgICAgICkoXHJcbiAgICAgICAgICAgIE9ic2VydmFibGUuY3JlYXRlKFxyXG4gICAgICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAgICAgIChvYnNlcnZlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChzZWFyY2guc2VhcmNoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,95 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
4
- */
5
- import "reflect-metadata";
6
- import { ObjectUtils } from "./object.utils";
7
- var ReflectUtils = /** @class */ (function () {
8
- function ReflectUtils() {
9
- }
10
- /**
11
- * @param {?} key
12
- * @param {?} data
13
- * @param {?} target
14
- * @param {?=} name
15
- * @return {?}
16
- */
17
- ReflectUtils.defineMetadata = /**
18
- * @param {?} key
19
- * @param {?} data
20
- * @param {?} target
21
- * @param {?=} name
22
- * @return {?}
23
- */
24
- function (key, data, target, name) {
25
- Reflect.defineMetadata(key, data, target, name);
26
- };
27
- /**
28
- * @param {?} key
29
- * @param {?} target
30
- * @param {?=} name
31
- * @return {?}
32
- */
33
- ReflectUtils.getMetadata = /**
34
- * @param {?} key
35
- * @param {?} target
36
- * @param {?=} name
37
- * @return {?}
38
- */
39
- function (key, target, name) {
40
- return Reflect.getMetadata(key, target, name);
41
- };
42
- /**
43
- * @param {?} key
44
- * @param {?} target
45
- * @param {?=} name
46
- * @return {?}
47
- */
48
- ReflectUtils.getOwnMetadata = /**
49
- * @param {?} key
50
- * @param {?} target
51
- * @param {?=} name
52
- * @return {?}
53
- */
54
- function (key, target, name) {
55
- return Reflect.getOwnMetadata(key, target, name);
56
- };
57
- /**
58
- * @template T
59
- * @param {?} obj
60
- * @param {?} injector
61
- * @return {?}
62
- */
63
- ReflectUtils.resolve = /**
64
- * @template T
65
- * @param {?} obj
66
- * @param {?} injector
67
- * @return {?}
68
- */
69
- function (obj, injector) {
70
- if (!ObjectUtils.checkInterface(obj, { func: "function" }))
71
- return (/** @type {?} */ (obj));
72
- /** @type {?} */
73
- var factory = (/** @type {?} */ (obj));
74
- /** @type {?} */
75
- var depends = [];
76
- if (factory.type) {
77
- /** @type {?} */
78
- var method = Object.keys(factory.type).find(function (key) {
79
- return factory.type[key] === factory.func;
80
- });
81
- depends = ReflectUtils.getMetadata("factoryDependencies", factory.type, method) || [];
82
- }
83
- else {
84
- depends = ReflectUtils.getMetadata("factoryDependencies", factory.func) || [];
85
- }
86
- /** @type {?} */
87
- var parameters = depends.map(function (dep) {
88
- return injector.get(dep);
89
- }).concat(factory.params);
90
- return factory.func.apply(null, parameters);
91
- };
92
- return ReflectUtils;
93
- }());
94
- export { ReflectUtils };
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmbGVjdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdGVteS9uZ3gtdXRpbHMvIiwic291cmNlcyI6WyJuZ3gtdXRpbHMvdXRpbHMvcmVmbGVjdC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0M7SUFBQTtJQStCQSxDQUFDOzs7Ozs7OztJQTdCVSwyQkFBYzs7Ozs7OztJQUFyQixVQUFzQixHQUFXLEVBQUUsSUFBUyxFQUFFLE1BQVcsRUFBRSxJQUFhO1FBQ3BFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7Ozs7OztJQUVNLHdCQUFXOzs7Ozs7SUFBbEIsVUFBbUIsR0FBVyxFQUFFLE1BQVcsRUFBRSxJQUFhO1FBQ3RELE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7Ozs7Ozs7SUFFTSwyQkFBYzs7Ozs7O0lBQXJCLFVBQXNCLEdBQVcsRUFBRSxNQUFXLEVBQUUsSUFBYTtRQUN6RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDOzs7Ozs7O0lBRU0sb0JBQU87Ozs7OztJQUFkLFVBQWtCLEdBQXdCLEVBQUUsUUFBa0I7UUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDO1lBQUUsT0FBTyxtQkFBRyxHQUFHLEVBQUEsQ0FBQzs7WUFDbEUsT0FBTyxHQUFHLG1CQUFpQixHQUFHLEVBQUE7O1lBQ2hDLE9BQU8sR0FBbUIsRUFBRTtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7O2dCQUNSLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHO2dCQUN2RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQztZQUM5QyxDQUFDLENBQUM7WUFDRixPQUFPLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6RjthQUFNO1lBQ0gsT0FBTyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqRjs7WUFDSyxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUc7WUFDeEMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDTCxtQkFBQztBQUFELENBQUMsQUEvQkQsSUErQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XHJcbmltcG9ydCB7SW5qZWN0b3IsIFR5cGVQcm92aWRlcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtJUmVzb2x2ZUZhY3Rvcnl9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVmbGVjdFV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgZGVmaW5lTWV0YWRhdGEoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSwgdGFyZ2V0OiBhbnksIG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgZGF0YSwgdGFyZ2V0LCBuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0TWV0YWRhdGEoa2V5OiBzdHJpbmcsIHRhcmdldDogYW55LCBuYW1lPzogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YShrZXksIHRhcmdldCwgbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldE93bk1ldGFkYXRhKGtleTogc3RyaW5nLCB0YXJnZXQ6IGFueSwgbmFtZT86IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoa2V5LCB0YXJnZXQsIG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZXNvbHZlPFQ+KG9iajogSVJlc29sdmVGYWN0b3J5IHwgVCwgaW5qZWN0b3I6IEluamVjdG9yKTogVCB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5jaGVja0ludGVyZmFjZShvYmosIHtmdW5jOiBcImZ1bmN0aW9uXCJ9KSkgcmV0dXJuIDxUPm9iajtcclxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gPElSZXNvbHZlRmFjdG9yeT5vYmo7XHJcbiAgICAgICAgbGV0IGRlcGVuZHM6IFR5cGVQcm92aWRlcltdID0gW107XHJcbiAgICAgICAgaWYgKGZhY3RvcnkudHlwZSkge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBPYmplY3Qua2V5cyhmYWN0b3J5LnR5cGUpLmZpbmQoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkudHlwZVtrZXldID09PSBmYWN0b3J5LmZ1bmM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkZXBlbmRzID0gUmVmbGVjdFV0aWxzLmdldE1ldGFkYXRhKFwiZmFjdG9yeURlcGVuZGVuY2llc1wiLCBmYWN0b3J5LnR5cGUsIG1ldGhvZCkgfHwgW107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGVwZW5kcyA9IFJlZmxlY3RVdGlscy5nZXRNZXRhZGF0YShcImZhY3RvcnlEZXBlbmRlbmNpZXNcIiwgZmFjdG9yeS5mdW5jKSB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IGRlcGVuZHMubWFwKGZ1bmN0aW9uIChkZXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluamVjdG9yLmdldChkZXApO1xyXG4gICAgICAgIH0pLmNvbmNhdChmYWN0b3J5LnBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkuZnVuYy5hcHBseShudWxsLCBwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxufVxyXG4iXX0=