@stemy/ngx-utils 17.1.4 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/fesm2022/stemy-ngx-utils-tools.mjs.map +1 -1
  2. package/fesm2022/stemy-ngx-utils.mjs +285 -222
  3. package/fesm2022/stemy-ngx-utils.mjs.map +1 -1
  4. package/ngx-utils/ngx-utils.module.d.ts +1 -1
  5. package/ngx-utils/utils/promise.utils.d.ts +5 -0
  6. package/package.json +13 -19
  7. package/public_api.d.ts +1 -0
  8. package/esm2022/ngx-utils/common-types.mjs +0 -122
  9. package/esm2022/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +0 -210
  10. package/esm2022/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +0 -101
  11. package/esm2022/ngx-utils/components/unordered-list/unordered-list.component.mjs +0 -65
  12. package/esm2022/ngx-utils/directives/async-method.base.mjs +0 -90
  13. package/esm2022/ngx-utils/directives/async-method.directive.mjs +0 -21
  14. package/esm2022/ngx-utils/directives/background.directive.mjs +0 -51
  15. package/esm2022/ngx-utils/directives/dynamic-table-template.directive.mjs +0 -20
  16. package/esm2022/ngx-utils/directives/global-template.directive.mjs +0 -28
  17. package/esm2022/ngx-utils/directives/icon.directive.mjs +0 -67
  18. package/esm2022/ngx-utils/directives/ngx-template-outlet.directive.mjs +0 -90
  19. package/esm2022/ngx-utils/directives/pagination-item.directive.mjs +0 -34
  20. package/esm2022/ngx-utils/directives/pagination.directive.mjs +0 -84
  21. package/esm2022/ngx-utils/directives/resource-if.directive.mjs +0 -50
  22. package/esm2022/ngx-utils/directives/sticky-class.directive.mjs +0 -34
  23. package/esm2022/ngx-utils/directives/sticky.directive.mjs +0 -55
  24. package/esm2022/ngx-utils/directives/unordered-list-item.directive.mjs +0 -79
  25. package/esm2022/ngx-utils/directives/unordered-list-template.directive.mjs +0 -20
  26. package/esm2022/ngx-utils/ngx-utils.imports.mjs +0 -178
  27. package/esm2022/ngx-utils/ngx-utils.module.mjs +0 -204
  28. package/esm2022/ngx-utils/pipes/chunk.pipe.mjs +0 -25
  29. package/esm2022/ngx-utils/pipes/entries.pipe.mjs +0 -28
  30. package/esm2022/ngx-utils/pipes/extra-item-properties.pipe.mjs +0 -31
  31. package/esm2022/ngx-utils/pipes/filter.pipe.mjs +0 -37
  32. package/esm2022/ngx-utils/pipes/find.pipe.mjs +0 -29
  33. package/esm2022/ngx-utils/pipes/format-number.pipe.mjs +0 -21
  34. package/esm2022/ngx-utils/pipes/get-offset.pipe.mjs +0 -17
  35. package/esm2022/ngx-utils/pipes/get-type.pipe.mjs +0 -16
  36. package/esm2022/ngx-utils/pipes/get-value.pipe.mjs +0 -17
  37. package/esm2022/ngx-utils/pipes/global-template.pipe.mjs +0 -39
  38. package/esm2022/ngx-utils/pipes/group-by.pipe.mjs +0 -27
  39. package/esm2022/ngx-utils/pipes/is-type.pipe.mjs +0 -16
  40. package/esm2022/ngx-utils/pipes/join.pipe.mjs +0 -19
  41. package/esm2022/ngx-utils/pipes/keys.pipe.mjs +0 -22
  42. package/esm2022/ngx-utils/pipes/map.pipe.mjs +0 -29
  43. package/esm2022/ngx-utils/pipes/max.pipe.mjs +0 -26
  44. package/esm2022/ngx-utils/pipes/min.pipe.mjs +0 -26
  45. package/esm2022/ngx-utils/pipes/pop.pipe.mjs +0 -16
  46. package/esm2022/ngx-utils/pipes/reduce.pipe.mjs +0 -30
  47. package/esm2022/ngx-utils/pipes/remap.pipe.mjs +0 -32
  48. package/esm2022/ngx-utils/pipes/replace.pipe.mjs +0 -17
  49. package/esm2022/ngx-utils/pipes/reverse.pipe.mjs +0 -24
  50. package/esm2022/ngx-utils/pipes/round.pipe.mjs +0 -21
  51. package/esm2022/ngx-utils/pipes/safe-html.pipe.mjs +0 -34
  52. package/esm2022/ngx-utils/pipes/shift.pipe.mjs +0 -16
  53. package/esm2022/ngx-utils/pipes/split.pipe.mjs +0 -16
  54. package/esm2022/ngx-utils/pipes/translate.pipe.mjs +0 -86
  55. package/esm2022/ngx-utils/pipes/values.pipe.mjs +0 -22
  56. package/esm2022/ngx-utils/plugins/resize-event.plugin.mjs +0 -78
  57. package/esm2022/ngx-utils/plugins/scroll-event.plugin.mjs +0 -39
  58. package/esm2022/ngx-utils/services/acl.service.mjs +0 -84
  59. package/esm2022/ngx-utils/services/api.service.mjs +0 -42
  60. package/esm2022/ngx-utils/services/auth.service.mjs +0 -14
  61. package/esm2022/ngx-utils/services/base-http.client.mjs +0 -47
  62. package/esm2022/ngx-utils/services/base-http.service.mjs +0 -305
  63. package/esm2022/ngx-utils/services/config.service.mjs +0 -130
  64. package/esm2022/ngx-utils/services/error-handler.service.mjs +0 -49
  65. package/esm2022/ngx-utils/services/events.service.mjs +0 -26
  66. package/esm2022/ngx-utils/services/formatter.service.mjs +0 -49
  67. package/esm2022/ngx-utils/services/global-template.service.mjs +0 -37
  68. package/esm2022/ngx-utils/services/icon.service.mjs +0 -26
  69. package/esm2022/ngx-utils/services/language.service.mjs +0 -124
  70. package/esm2022/ngx-utils/services/local-http.service.mjs +0 -47
  71. package/esm2022/ngx-utils/services/open-api.service.mjs +0 -40
  72. package/esm2022/ngx-utils/services/promise.service.mjs +0 -55
  73. package/esm2022/ngx-utils/services/state.service.mjs +0 -185
  74. package/esm2022/ngx-utils/services/static-language.service.mjs +0 -166
  75. package/esm2022/ngx-utils/services/storage.service.mjs +0 -49
  76. package/esm2022/ngx-utils/services/toaster.service.mjs +0 -32
  77. package/esm2022/ngx-utils/services/translated-url.serializer.mjs +0 -73
  78. package/esm2022/ngx-utils/services/universal.service.mjs +0 -81
  79. package/esm2022/ngx-utils/services/wasm.service.mjs +0 -46
  80. package/esm2022/ngx-utils/utils/ajax-request-handler.mjs +0 -40
  81. package/esm2022/ngx-utils/utils/array.utils.mjs +0 -107
  82. package/esm2022/ngx-utils/utils/auth.guard.mjs +0 -181
  83. package/esm2022/ngx-utils/utils/cached-factory.mjs +0 -30
  84. package/esm2022/ngx-utils/utils/canvas.utils.mjs +0 -388
  85. package/esm2022/ngx-utils/utils/date.utils.mjs +0 -29
  86. package/esm2022/ngx-utils/utils/file-system.mjs +0 -25
  87. package/esm2022/ngx-utils/utils/file.utils.mjs +0 -90
  88. package/esm2022/ngx-utils/utils/generic-value.mjs +0 -20
  89. package/esm2022/ngx-utils/utils/geometry.mjs +0 -132
  90. package/esm2022/ngx-utils/utils/initializer.mjs +0 -20
  91. package/esm2022/ngx-utils/utils/jsonfn.mjs +0 -45
  92. package/esm2022/ngx-utils/utils/loader.utils.mjs +0 -55
  93. package/esm2022/ngx-utils/utils/math.utils.mjs +0 -44
  94. package/esm2022/ngx-utils/utils/object.utils.mjs +0 -320
  95. package/esm2022/ngx-utils/utils/observable.utils.mjs +0 -59
  96. package/esm2022/ngx-utils/utils/reflect.utils.mjs +0 -33
  97. package/esm2022/ngx-utils/utils/set.utils.mjs +0 -20
  98. package/esm2022/ngx-utils/utils/string.utils.mjs +0 -41
  99. package/esm2022/ngx-utils/utils/timer.utils.mjs +0 -52
  100. package/esm2022/ngx-utils/utils/unique.utils.mjs +0 -24
  101. package/esm2022/ngx-utils/utils/vector.mjs +0 -77
  102. package/esm2022/ngx-utils/utils/wasi.mjs +0 -159
  103. package/esm2022/ngx-utils/utils/wasm-worker-proxy.mjs +0 -99
  104. package/esm2022/ngx-utils/utils/with-options-provider.mjs +0 -24
  105. package/esm2022/public_api.mjs +0 -95
  106. package/esm2022/stemy-ngx-utils.mjs +0 -5
  107. package/esm2022/tools/config.mjs +0 -71
  108. package/esm2022/tools/public_api.mjs +0 -2
  109. package/esm2022/tools/stemy-ngx-utils-tools.mjs +0 -5
@@ -1,320 +0,0 @@
1
- export function defaultPredicate(value, key, target, source) {
2
- return true;
3
- }
4
- export function shouldCopyDefault(key, value) {
5
- return true;
6
- }
7
- const hasBlob = typeof Blob !== "undefined" && !!Blob;
8
- const hasFile = typeof File !== "undefined" && !!File;
9
- export class ObjectUtils {
10
- static compare(a, b) {
11
- if ((a === null || b === null) || (typeof a != typeof b)) {
12
- return null;
13
- }
14
- if (typeof a === "string") {
15
- return (a).localeCompare(b);
16
- }
17
- else {
18
- if (a instanceof Date) {
19
- a = a.getTime();
20
- b = b.getTime();
21
- }
22
- if (a > b) {
23
- return 1;
24
- }
25
- else if (a < b) {
26
- return -1;
27
- }
28
- return 0;
29
- }
30
- }
31
- static getProperties(obj) {
32
- if (!ObjectUtils.isObject(obj) && !ObjectUtils.isFunction(obj))
33
- return [];
34
- const props = new Set();
35
- Object.keys(obj).forEach(p => props.add(p));
36
- Object.getOwnPropertyNames(obj).forEach(p => props.add(p));
37
- return Array.from(props);
38
- }
39
- static equals(a, b, visited = null) {
40
- visited = visited || new Set();
41
- if (visited.has(a) && visited.has(b))
42
- return true;
43
- if (a === b)
44
- return true;
45
- if (a === null || b === null)
46
- return false;
47
- if (a !== a && b !== b)
48
- return true; // NaN === NaN
49
- const at = typeof a, bt = typeof b;
50
- let length, key, keySet;
51
- if (at == bt && at == "object") {
52
- visited.add(a);
53
- visited.add(b);
54
- if (Array.isArray(a)) {
55
- if (!Array.isArray(b))
56
- return false;
57
- if ((length = a.length) == b.length) {
58
- for (key = 0; key < length; key++) {
59
- if (!ObjectUtils.equals(a[key], b[key], visited))
60
- return false;
61
- }
62
- return true;
63
- }
64
- }
65
- else {
66
- if (Array.isArray(b)) {
67
- return false;
68
- }
69
- keySet = Object.create(null);
70
- for (key in a) {
71
- if (a.hasOwnProperty(key)) {
72
- if (!ObjectUtils.equals(a[key], b[key], visited)) {
73
- return false;
74
- }
75
- keySet[key] = true;
76
- }
77
- }
78
- for (key in b) {
79
- if (b.hasOwnProperty(key) && !(key in keySet) && typeof b[key] !== "undefined") {
80
- return false;
81
- }
82
- }
83
- return true;
84
- }
85
- }
86
- return false;
87
- }
88
- static evaluate(expr, context = {}, res = {}) {
89
- expr = Object.keys(context).reduce((res, key) => `var ${key} = this['${key}'];\n${res}`, expr);
90
- const lines = expr.split("\n");
91
- const lastLine = "return " + lines.pop().replace("return ", "");
92
- lines.push(lastLine);
93
- expr = lines.join("\n");
94
- let result = null;
95
- try {
96
- result = new Function(expr).call(context);
97
- }
98
- catch (e) {
99
- res.exception = e;
100
- console.log(`Failed to parse expression: ${e.message}`, expr, context);
101
- }
102
- res.result = result;
103
- return result;
104
- }
105
- static empty(obj) {
106
- return !obj || Object.keys(obj).length == 0;
107
- }
108
- static iterate(obj, cb) {
109
- if (!obj)
110
- return;
111
- const keys = Array.isArray(obj) ? Array.from(obj.keys()) : Object.keys(obj);
112
- keys.forEach(
113
- // @dynamic
114
- key => {
115
- cb(obj[key], key);
116
- });
117
- }
118
- static getValue(obj, key, defaultValue, treeFallback = false) {
119
- key = key || "";
120
- const keys = key.split(".");
121
- let curKey = "";
122
- do {
123
- curKey += keys.shift();
124
- if (ObjectUtils.isDefined(obj) && ObjectUtils.isDefined(obj[curKey]) && (typeof obj[curKey] === "object" || !keys.length)) {
125
- obj = obj[curKey];
126
- curKey = "";
127
- }
128
- else if (!keys.length) {
129
- defaultValue = typeof defaultValue == "undefined" ? key.replace(new RegExp(`${curKey}$`), `{${curKey}}`) : defaultValue;
130
- obj = treeFallback ? obj || defaultValue : defaultValue;
131
- }
132
- else {
133
- curKey += ".";
134
- }
135
- } while (keys.length);
136
- return obj;
137
- }
138
- static mapToPath(target, source, path) {
139
- if (typeof source === "undefined")
140
- return target;
141
- if (path.length == 0)
142
- return source;
143
- const key = path.shift();
144
- if (key == "*") {
145
- if (ObjectUtils.isArray(source)) {
146
- target = ObjectUtils.isArray(target) ? target : [];
147
- return source.map((item, index) => {
148
- return ObjectUtils.mapToPath(target[index], item, Array.from(path));
149
- });
150
- }
151
- if (ObjectUtils.isObject(source)) {
152
- target = ObjectUtils.isObject(target) ? target : {};
153
- return Object.keys(source).reduce((result, key) => {
154
- result[key] = ObjectUtils.mapToPath(target[key], source[key], Array.from(path));
155
- return result;
156
- }, {});
157
- }
158
- return ObjectUtils.isNullOrUndefined(target) ? null : target;
159
- }
160
- const isArray = ObjectUtils.isArray(target);
161
- target = ObjectUtils.isObject(target) || isArray ? target : {};
162
- target[key] = ObjectUtils.mapToPath(target[key], source, Array.from(path));
163
- return isNaN(key) || isArray ? target : Object.values(target);
164
- }
165
- static filter(obj, predicate) {
166
- return ObjectUtils.copyRecursive(null, obj, predicate || defaultPredicate, new Map());
167
- }
168
- static copy(obj) {
169
- return ObjectUtils.copyRecursive(null, obj, defaultPredicate, new Map());
170
- }
171
- static assign(target, source, predicate) {
172
- return ObjectUtils.copyRecursive(target, source, predicate || defaultPredicate, new Map());
173
- }
174
- static getType(obj) {
175
- const regex = new RegExp("\\s([a-zA-Z]+)");
176
- const target = !obj ? null : obj.constructor;
177
- const type = !target ? null : Reflect.getMetadata("objectType", target);
178
- return (type || Object.prototype.toString.call(obj).match(regex)[1]).toLowerCase();
179
- }
180
- static isPrimitive(value) {
181
- const type = typeof value;
182
- return value == null || (type !== "object" && type !== "function");
183
- }
184
- static isObject(value) {
185
- return ObjectUtils.getType(value) === "object";
186
- }
187
- static isDefined(value) {
188
- return typeof value !== "undefined" && value !== null;
189
- }
190
- static isNullOrUndefined(value) {
191
- return typeof value == "undefined" || value == null;
192
- }
193
- static isString(value) {
194
- return typeof value === "string";
195
- }
196
- static isFunction(value) {
197
- return typeof value === "function";
198
- }
199
- static isDate(value) {
200
- return null !== value && !isNaN(value) && "undefined" !== typeof value.getDate;
201
- }
202
- static isBlob(value) {
203
- return (hasBlob && value instanceof Blob) || (hasFile && value instanceof File);
204
- }
205
- static isBoolean(value) {
206
- return typeof (value) == typeof (true);
207
- }
208
- static isNumber(value) {
209
- if (typeof value !== "number")
210
- return false;
211
- const num = +value;
212
- if ((num - num) !== 0) {
213
- return false;
214
- }
215
- if (num === value) {
216
- return true;
217
- }
218
- }
219
- static isArray(value) {
220
- return Array.isArray(value);
221
- }
222
- static isSet(value) {
223
- return value instanceof Set;
224
- }
225
- static isConstructor(value) {
226
- return (value && typeof value === "function" && value.prototype && value.prototype.constructor) === value && value.name !== "Object";
227
- }
228
- static checkInterface(obj, interFaceObject) {
229
- return ObjectUtils.isInterface(obj, interFaceObject);
230
- }
231
- static isInterface(obj, interFaceObject) {
232
- if (!obj || typeof obj !== "object" || ObjectUtils.isArray(obj) || !ObjectUtils.isObject(interFaceObject))
233
- return false;
234
- const keys = Object.keys(interFaceObject);
235
- for (const key of keys) {
236
- let type = interFaceObject[key] || "";
237
- if (type.startsWith("*")) {
238
- type = type.substr(1);
239
- if (obj.hasOwnProperty(key) && ObjectUtils.getType(obj[key]) !== type)
240
- return false;
241
- }
242
- else if (!obj.hasOwnProperty(key) || ObjectUtils.getType(obj[key]) !== type) {
243
- return false;
244
- }
245
- }
246
- return true;
247
- }
248
- static pad(obj, width, chr = "0") {
249
- const str = ObjectUtils.isDefined(obj) ? obj.toString() : "";
250
- return str.length >= width ? str : new Array(width - str.length + 1).join(chr) + str;
251
- }
252
- static copyRecursive(target, source, predicate, copies) {
253
- if (ObjectUtils.isPrimitive(source) || ObjectUtils.isDate(source) || ObjectUtils.isBlob(source) || ObjectUtils.isFunction(source))
254
- return source;
255
- if (copies.has(source))
256
- return copies.get(source);
257
- if (ObjectUtils.isArray(source)) {
258
- target = ObjectUtils.isArray(target) ? Array.from(target) : [];
259
- copies.set(source, target);
260
- for (let index = 0; index < source.length; index++) {
261
- const item = source[index];
262
- if (!predicate(item, index, target, source))
263
- continue;
264
- if (target.length > index)
265
- target[index] = ObjectUtils.copyRecursive(target[index], item, predicate, copies);
266
- else
267
- target.push(ObjectUtils.copyRecursive(null, item, predicate, copies));
268
- }
269
- return target;
270
- }
271
- // If object defines __shouldCopy as false, then don't copy it
272
- if (source.__shouldCopy === false)
273
- return source;
274
- // Copy object
275
- const shouldCopy = ObjectUtils.isFunction(source.__shouldCopy) ? source.__shouldCopy : shouldCopyDefault;
276
- if (ObjectUtils.isConstructor(source.constructor)) {
277
- if (!target) {
278
- try {
279
- target = new source.constructor();
280
- }
281
- catch (e) {
282
- const proto = source.constructor.prototype || source.prototype;
283
- target = Object.create(proto);
284
- }
285
- }
286
- }
287
- else {
288
- target = Object.assign({}, target || {});
289
- }
290
- // Set to copies to prevent circular references
291
- copies.set(source, target);
292
- // Copy map entries
293
- if (target instanceof Map) {
294
- if (source instanceof Map) {
295
- for (const [key, value] of source.entries()) {
296
- if (!predicate(value, key, target, source))
297
- continue;
298
- target.set(key, !shouldCopy(key, value) ? value : ObjectUtils.copyRecursive(target.get(key), value, predicate, copies));
299
- }
300
- }
301
- return target;
302
- }
303
- // Copy object members
304
- const keys = Object.keys(source);
305
- for (const key of keys) {
306
- if (!predicate(source[key], key, target, source))
307
- continue;
308
- target[key] = !shouldCopy(key, source[key]) ? source[key] : ObjectUtils.copyRecursive(target[key], source[key], predicate, copies);
309
- }
310
- // Copy object properties
311
- const descriptors = Object.getOwnPropertyDescriptors(source);
312
- for (const key of Object.keys(descriptors)) {
313
- if (keys.indexOf(key) >= 0)
314
- continue;
315
- Object.defineProperty(target, key, descriptors[key]);
316
- }
317
- return target;
318
- }
319
- }
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy91dGlscy9vYmplY3QudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQVUsRUFBRSxHQUFTLEVBQUUsTUFBWSxFQUFFLE1BQVk7SUFDOUUsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsS0FBVTtJQUNsRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFdEQsTUFBTSxPQUFPLFdBQVc7SUFFcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFNLEVBQUUsQ0FBTTtRQUN6QixJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO2dCQUNwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMs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QUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFFLFNBQVM7WUFDckMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlZmxlY3RVdGlsc30gZnJvbSBcIi4vcmVmbGVjdC51dGlsc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyUHJlZGljYXRlID0gKHZhbHVlOiBhbnksIGtleT86IGFueSwgdGFyZ2V0PzogYW55LCBzb3VyY2U/OiBhbnkpID0+IGJvb2xlYW47XHJcbmV4cG9ydCB0eXBlIEl0ZXJhdGVDYWxsYmFjayA9ICh2YWx1ZTogYW55LCBrZXk/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdFByZWRpY2F0ZSh2YWx1ZTogYW55LCBrZXk/OiBhbnksIHRhcmdldD86IGFueSwgc291cmNlPzogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZENvcHlEZWZhdWx0KGtleTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuY29uc3QgaGFzQmxvYiA9IHR5cGVvZiBCbG9iICE9PSBcInVuZGVmaW5lZFwiICYmICEhQmxvYjtcclxuY29uc3QgaGFzRmlsZSA9IHR5cGVvZiBGaWxlICE9PSBcInVuZGVmaW5lZFwiICYmICEhRmlsZTtcclxuXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RVdGlscyB7XHJcblxyXG4gICAgc3RhdGljIGNvbXBhcmUoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICgoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSB8fCAodHlwZW9mIGEgIT0gdHlwZW9mIGIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGEgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChhKS5sb2NhbGVDb21wYXJlKGIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgYSA9IGEuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgYiA9IGIuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhID4gYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA8IGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFByb3BlcnRpZXMob2JqOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc09iamVjdChvYmopICYmICFPYmplY3RVdGlscy5pc0Z1bmN0aW9uKG9iaikpIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChwID0+IHByb3BzLmFkZChwKSk7XHJcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKHAgPT4gcHJvcHMuYWRkKHApKTtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVxdWFscyhhOiBhbnksIGI6IGFueSwgdmlzaXRlZDogU2V0PGFueT4gPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmlzaXRlZCA9IHZpc2l0ZWQgfHwgbmV3IFNldCgpO1xyXG4gICAgICAgIGlmICh2aXNpdGVkLmhhcyhhKSAmJiB2aXNpdGVkLmhhcyhiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmIChhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoYSAhPT0gYSAmJiBiICE9PSBiKSByZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cclxuICAgICAgICBjb25zdCBhdCA9IHR5cGVvZiBhLCBidCA9IHR5cGVvZiBiO1xyXG4gICAgICAgIGxldCBsZW5ndGg6IG51bWJlciwga2V5OiBhbnksIGtleVNldDogYW55O1xyXG4gICAgICAgIGlmIChhdCA9PSBidCAmJiBhdCA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGEpO1xyXG4gICAgICAgICAgICB2aXNpdGVkLmFkZChiKTtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKChsZW5ndGggPSBhLmxlbmd0aCkgPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlscy5lcXVhbHMoYVtrZXldLCBiW2tleV0sIHZpc2l0ZWQpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXlTZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlscy5lcXVhbHMoYVtrZXldLCBiW2tleV0sIHZpc2l0ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICEoa2V5IGluIGtleVNldCkgJiYgdHlwZW9mIGJba2V5XSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBldmFsdWF0ZShleHByOiBzdHJpbmcsIGNvbnRleHQ6IGFueSA9IHt9LCByZXM6IGFueSA9IHt9KTogYW55IHtcclxuICAgICAgICBleHByID0gT2JqZWN0LmtleXMoY29udGV4dCkucmVkdWNlKChyZXMsIGtleSkgPT4gYHZhciAke2tleX0gPSB0aGlzWycke2tleX0nXTtcXG4ke3Jlc31gLCBleHByKTtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGV4cHIuc3BsaXQoXCJcXG5cIik7XHJcbiAgICAgICAgY29uc3QgbGFzdExpbmUgPSBcInJldHVybiBcIiArIGxpbmVzLnBvcCgpLnJlcGxhY2UoXCJyZXR1cm4gXCIsIFwiXCIpO1xyXG4gICAgICAgIGxpbmVzLnB1c2gobGFzdExpbmUpO1xyXG4gICAgICAgIGV4cHIgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBGdW5jdGlvbihleHByKS5jYWxsKGNvbnRleHQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmVzLmV4Y2VwdGlvbiA9IGU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gcGFyc2UgZXhwcmVzc2lvbjogJHtlLm1lc3NhZ2V9YCwgZXhwciwgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcy5yZXN1bHQgPSByZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZW1wdHkob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpdGVyYXRlKG9iajogYW55LCBjYjogSXRlcmF0ZUNhbGxiYWNrKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFvYmopIHJldHVybjtcclxuICAgICAgICBjb25zdCBrZXlzOiBhbnlbXSA9IEFycmF5LmlzQXJyYXkob2JqKSA/IEFycmF5LmZyb20ob2JqLmtleXMoKSkgOiBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChcclxuICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAga2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGNiKG9ialtrZXldLCBrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0VmFsdWUob2JqOiBhbnksIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnksIHRyZWVGYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBrZXkgPSBrZXkgfHwgXCJcIjtcclxuICAgICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgY3VyS2V5ID0gXCJcIjtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGN1cktleSArPSBrZXlzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0RlZmluZWQob2JqKSAmJiBPYmplY3RVdGlscy5pc0RlZmluZWQob2JqW2N1cktleV0pICYmICh0eXBlb2Ygb2JqW2N1cktleV0gPT09IFwib2JqZWN0XCIgfHwgIWtleXMubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW2N1cktleV07XHJcbiAgICAgICAgICAgICAgICBjdXJLZXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PSBcInVuZGVmaW5lZFwiID8ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cChgJHtjdXJLZXl9JGApLCBgeyR7Y3VyS2V5fX1gKSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9iaiA9IHRyZWVGYWxsYmFjayA/IG9iaiB8fCBkZWZhdWx0VmFsdWUgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJLZXkgKz0gXCIuXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChrZXlzLmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbWFwVG9QYXRoKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSwgcGF0aDogc3RyaW5nW10pOiBhbnkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gdGFyZ2V0O1xyXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PSAwKSByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIGNvbnN0IGtleTogYW55ID0gcGF0aC5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChrZXkgPT0gXCIqXCIpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0VXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0IDogW107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMubWFwVG9QYXRoKHRhcmdldFtpbmRleF0sIGl0ZW0sIEFycmF5LmZyb20ocGF0aCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzT2JqZWN0KHNvdXJjZSkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IE9iamVjdFV0aWxzLmlzT2JqZWN0KHRhcmdldCkgPyB0YXJnZXQgOiB7fTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IE9iamVjdFV0aWxzLm1hcFRvUGF0aCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIEFycmF5LmZyb20ocGF0aCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKHRhcmdldCkgPyBudWxsIDogdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc0FycmF5ID0gT2JqZWN0VXRpbHMuaXNBcnJheSh0YXJnZXQpO1xyXG4gICAgICAgIHRhcmdldCA9IE9iamVjdFV0aWxzLmlzT2JqZWN0KHRhcmdldCkgfHwgaXNBcnJheSA/IHRhcmdldCA6IHt9O1xyXG4gICAgICAgIHRhcmdldFtrZXldID0gT2JqZWN0VXRpbHMubWFwVG9QYXRoKHRhcmdldFtrZXldLCBzb3VyY2UsIEFycmF5LmZyb20ocGF0aCkpO1xyXG4gICAgICAgIHJldHVybiBpc05hTihrZXkpIHx8IGlzQXJyYXkgPyB0YXJnZXQgOiBPYmplY3QudmFsdWVzKHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZpbHRlcihvYmo6IGFueSwgcHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5jb3B5UmVjdXJzaXZlKG51bGwsIG9iaiwgcHJlZGljYXRlIHx8IGRlZmF1bHRQcmVkaWNhdGUsIG5ldyBNYXAoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvcHk8VD4ob2JqOiBUKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLmNvcHlSZWN1cnNpdmUobnVsbCwgb2JqLCBkZWZhdWx0UHJlZGljYXRlLCBuZXcgTWFwKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhc3NpZ248VD4odGFyZ2V0OiBULCBzb3VyY2U6IGFueSwgcHJlZGljYXRlPzogRmlsdGVyUHJlZGljYXRlKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLmNvcHlSZWN1cnNpdmUodGFyZ2V0LCBzb3VyY2UsIHByZWRpY2F0ZSB8fCBkZWZhdWx0UHJlZGljYXRlLCBuZXcgTWFwKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRUeXBlKG9iajogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCJcXFxccyhbYS16QS1aXSspXCIpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICFvYmogPyBudWxsIDogb2JqLmNvbnN0cnVjdG9yO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAhdGFyZ2V0ID8gbnVsbCA6IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJvYmplY3RUeXBlXCIsIHRhcmdldCk7XHJcbiAgICAgICAgcmV0dXJuICh0eXBlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKHJlZ2V4KVsxXSkudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQcmltaXRpdmUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgKHR5cGUgIT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gXCJmdW5jdGlvblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5nZXRUeXBlKHZhbHVlKSA9PT0gXCJvYmplY3RcIjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiIHx8IHZhbHVlID09IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIEZ1bmN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGwgIT09IHZhbHVlICYmICFpc05hTih2YWx1ZSkgJiYgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHZhbHVlLmdldERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzQmxvYih2YWx1ZTogYW55KTogdmFsdWUgaXMgQmxvYiB7XHJcbiAgICAgICAgcmV0dXJuIChoYXNCbG9iICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYikgfHwgKGhhc0ZpbGUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNCb29sZWFuKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mKHZhbHVlKSA9PSB0eXBlb2YodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBudW1iZXIge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBudW0gPSArdmFsdWU7XHJcbiAgICAgICAgaWYgKChudW0gLSBudW0pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG51bSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0FycmF5KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzU2V0KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTZXQ8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0NvbnN0cnVjdG9yKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlLnByb3RvdHlwZSAmJiB2YWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IpID09PSB2YWx1ZSAmJiB2YWx1ZS5uYW1lICE9PSBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjaGVja0ludGVyZmFjZShvYmo6IGFueSwgaW50ZXJGYWNlT2JqZWN0OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNJbnRlcmZhY2Uob2JqLCBpbnRlckZhY2VPYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0ludGVyZmFjZShvYmo6IGFueSwgaW50ZXJGYWNlT2JqZWN0OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IE9iamVjdFV0aWxzLmlzQXJyYXkob2JqKSB8fCAhT2JqZWN0VXRpbHMuaXNPYmplY3QoaW50ZXJGYWNlT2JqZWN0KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnRlckZhY2VPYmplY3QpO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBpbnRlckZhY2VPYmplY3Rba2V5XSB8fCBcIlwiO1xyXG4gICAgICAgICAgICBpZiAodHlwZS5zdGFydHNXaXRoKFwiKlwiKSkge1xyXG4gICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIE9iamVjdFV0aWxzLmdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IE9iamVjdFV0aWxzLmdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhZChvYmo6IGFueSwgd2lkdGg6IG51bWJlciwgY2hyOiBzdHJpbmcgPSBcIjBcIik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gT2JqZWN0VXRpbHMuaXNEZWZpbmVkKG9iaikgPyBvYmoudG9TdHJpbmcoKSA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPj0gd2lkdGggPyBzdHIgOiBuZXcgQXJyYXkod2lkdGggLSBzdHIubGVuZ3RoICsgMSkuam9pbihjaHIpICsgc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGNvcHlSZWN1cnNpdmUodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55LCBwcmVkaWNhdGU6IEZpbHRlclByZWRpY2F0ZSwgY29waWVzOiBNYXA8YW55LCBhbnk+KTogYW55IHtcclxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNQcmltaXRpdmUoc291cmNlKSB8fCBPYmplY3RVdGlscy5pc0RhdGUoc291cmNlKSB8fCBPYmplY3RVdGlscy5pc0Jsb2Ioc291cmNlKSB8fCBPYmplY3RVdGlscy5pc0Z1bmN0aW9uKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgaWYgKGNvcGllcy5oYXMoc291cmNlKSkgcmV0dXJuIGNvcGllcy5nZXQoc291cmNlKTtcclxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IE9iamVjdFV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IEFycmF5LmZyb20odGFyZ2V0KSA6IFtdO1xyXG4gICAgICAgICAgICBjb3BpZXMuc2V0KHNvdXJjZSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzb3VyY2VbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUoaXRlbSwgaW5kZXgsIHRhcmdldCwgc291cmNlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IGluZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBPYmplY3RVdGlscy5jb3B5UmVjdXJzaXZlKHRhcmdldFtpbmRleF0sIGl0ZW0sIHByZWRpY2F0ZSwgY29waWVzKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChPYmplY3RVdGlscy5jb3B5UmVjdXJzaXZlKG51bGwsIGl0ZW0sIHByZWRpY2F0ZSwgY29waWVzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIG9iamVjdCBkZWZpbmVzIF9fc2hvdWxkQ29weSBhcyBmYWxzZSwgdGhlbiBkb24ndCBjb3B5IGl0XHJcbiAgICAgICAgaWYgKHNvdXJjZS5fX3Nob3VsZENvcHkgPT09IGZhbHNlKSByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIC8vIENvcHkgb2JqZWN0XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkQ29weSA9IE9iamVjdFV0aWxzLmlzRnVuY3Rpb24oc291cmNlLl9fc2hvdWxkQ29weSkgPyBzb3VyY2UuX19zaG91bGRDb3B5IDogc2hvdWxkQ29weURlZmF1bHQ7XHJcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQ29uc3RydWN0b3Ioc291cmNlLmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgc291cmNlLmNvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvdG8gPSBzb3VyY2UuY29uc3RydWN0b3IucHJvdG90eXBlIHx8IHNvdXJjZS5wcm90b3R5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0YXJnZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0YXJnZXQgfHwge30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTZXQgdG8gY29waWVzIHRvIHByZXZlbnQgY2lyY3VsYXIgcmVmZXJlbmNlc1xyXG4gICAgICAgIGNvcGllcy5zZXQoc291cmNlLCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAvLyBDb3B5IG1hcCBlbnRyaWVzXHJcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUodmFsdWUsIGtleSwgdGFyZ2V0LCBzb3VyY2UpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KGtleSwgIXNob3VsZENvcHkoa2V5LCB2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdFV0aWxzLmNvcHlSZWN1cnNpdmUodGFyZ2V0LmdldChrZXkpLCB2YWx1ZSwgcHJlZGljYXRlLCBjb3BpZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29weSBvYmplY3QgbWVtYmVyc1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUoc291cmNlW2tleV0sIGtleSwgdGFyZ2V0LCBzb3VyY2UpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSAhc2hvdWxkQ29weShrZXksIHNvdXJjZVtrZXldKSA/IHNvdXJjZVtrZXldIDogT2JqZWN0VXRpbHMuY29weVJlY3Vyc2l2ZSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIHByZWRpY2F0ZSwgY29waWVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvcHkgb2JqZWN0IHByb3BlcnRpZXNcclxuICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,59 +0,0 @@
1
- import { from, Observable, Subject, Subscription } from "rxjs";
2
- import { mergeMap } from "rxjs/operators";
3
- import { TimerUtils } from "./timer.utils";
4
- export class ObservableUtils {
5
- static toSearch(search) {
6
- return mergeMap(
7
- // @dynamic
8
- (token) => search.getSearchResults(token))(Observable.create(
9
- // @dynamic
10
- (observer) => {
11
- observer.next(search.search);
12
- }));
13
- }
14
- static multiSubscription(...subscriptions) {
15
- // @dynamic
16
- const lambda = () => {
17
- subscriptions.forEach(s => {
18
- s.unsubscribe();
19
- });
20
- };
21
- return new Subscription(lambda);
22
- }
23
- static subscribe(...subscribers) {
24
- const subscriptions = [];
25
- subscribers.forEach(info => {
26
- let alreadyCalled = false;
27
- const timer = TimerUtils.createTimeout();
28
- info.subjects.forEach(subject => {
29
- const ss = subject.subscribe((value) => {
30
- alreadyCalled = true;
31
- timer.set(() => {
32
- info.cb(subject, value);
33
- }, info.timeout ?? 0);
34
- });
35
- subscriptions.push(ss);
36
- });
37
- if (alreadyCalled)
38
- return;
39
- info.cb();
40
- });
41
- return ObservableUtils.multiSubscription(...subscriptions);
42
- }
43
- static fromFunction(callbackFunc) {
44
- let subject;
45
- return new Observable((subscriber) => {
46
- if (!subject) {
47
- subject = new Subject();
48
- try {
49
- subject = from(callbackFunc());
50
- }
51
- catch (err) {
52
- subject.error(err);
53
- }
54
- }
55
- return subject.subscribe(subscriber);
56
- });
57
- }
58
- }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvb2JzZXJ2YWJsZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBUXpDLE1BQU0sT0FBTyxlQUFlO0lBRXhCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBeUI7UUFDckMsT0FBTyxRQUFRO1FBQ1gsV0FBVztRQUNYLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQ3BELENBQ0csVUFBVSxDQUFDLE1BQU07UUFDYixXQUFXO1FBQ1gsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNkLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FDSixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsYUFBNkI7UUFDckQsV0FBVztRQUNYLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNoQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0QixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFDRixPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBOEI7UUFDOUMsTUFBTSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUN6QyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDbkMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzVCLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDLENBQUMsQ0FBQztnQkFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxhQUFhO2dCQUFFLE9BQU87WUFDMUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQXVCO1FBQ3ZDLElBQUksT0FBWSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxVQUFVLENBQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQztvQkFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ25DLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge21lcmdlTWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7SVNlYXJjaE9ic2VydmFibGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtUaW1lclV0aWxzfSBmcm9tIFwiLi90aW1lci51dGlsc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlckluZm8ge1xyXG4gICAgc3ViamVjdHM6IE9ic2VydmFibGU8YW55PltdO1xyXG4gICAgY2I6IChldj86IE9ic2VydmFibGU8YW55PiwgLi4uYXJnczogYW55W10pID0+IGFueTtcclxuICAgIHRpbWVvdXQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlVXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyB0b1NlYXJjaChzZWFyY2g6IElTZWFyY2hPYnNlcnZhYmxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbWVyZ2VNYXAoXHJcbiAgICAgICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgICAgICh0b2tlbjogc3RyaW5nKSA9PiBzZWFyY2guZ2V0U2VhcmNoUmVzdWx0cyh0b2tlbilcclxuICAgICAgICApKFxyXG4gICAgICAgICAgICBPYnNlcnZhYmxlLmNyZWF0ZShcclxuICAgICAgICAgICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgICAgICAgICAob2JzZXJ2ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoc2VhcmNoLnNlYXJjaCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtdWx0aVN1YnNjcmlwdGlvbiguLi5zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICBjb25zdCBsYW1iZGEgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihsYW1iZGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzdWJzY3JpYmUoLi4uc3Vic2NyaWJlcnM6IElTdWJzY3JpYmVySW5mb1tdKTogU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgICAgIHN1YnNjcmliZXJzLmZvckVhY2goaW5mbyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gVGltZXJVdGlscy5jcmVhdGVUaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIGluZm8uc3ViamVjdHMuZm9yRWFjaChzdWJqZWN0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNzID0gc3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuc2V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5jYihzdWJqZWN0LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgaW5mby50aW1lb3V0ID8/IDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcclxuICAgICAgICAgICAgaW5mby5jYigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlVXRpbHMubXVsdGlTdWJzY3JpcHRpb24oLi4uc3Vic2NyaXB0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21GdW5jdGlvbihjYWxsYmFja0Z1bmM6ICgpID0+IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgbGV0IHN1YmplY3Q6IGFueTtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55Pigoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXN1YmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0ID0gZnJvbShjYWxsYmFja0Z1bmMoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,33 +0,0 @@
1
- import "reflect-metadata";
2
- import { ObjectUtils } from "./object.utils";
3
- export class ReflectUtils {
4
- static defineMetadata(key, data, target, name) {
5
- Reflect.defineMetadata(key, data, target, name);
6
- }
7
- static getMetadata(key, target, name) {
8
- return Reflect.getMetadata(key, target, name);
9
- }
10
- static getOwnMetadata(key, target, name) {
11
- return Reflect.getOwnMetadata(key, target, name);
12
- }
13
- static resolve(obj, injector) {
14
- if (!ObjectUtils.checkInterface(obj, { func: "function" }))
15
- return obj;
16
- const factory = obj;
17
- let depends = [];
18
- if (factory.type) {
19
- const method = ObjectUtils.getProperties(factory.type).find(function (key) {
20
- return factory.type[key] === factory.func;
21
- });
22
- depends = ReflectUtils.getMetadata("factoryDependencies", factory.type, method) || [];
23
- }
24
- else {
25
- depends = ReflectUtils.getMetadata("factoryDependencies", factory.func) || [];
26
- }
27
- const parameters = depends.map(function (dep) {
28
- return injector.get(dep);
29
- }).concat(factory.params);
30
- return factory.func.apply(null, parameters);
31
- }
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmbGVjdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvcmVmbGVjdC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGtCQUFrQixDQUFDO0FBRzFCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE9BQU8sWUFBWTtJQUVyQixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQVcsRUFBRSxJQUFTLEVBQUUsTUFBVyxFQUFFLElBQWE7UUFDcEUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBVyxFQUFFLElBQWE7UUFDdEQsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBVyxFQUFFLE1BQVcsRUFBRSxJQUFhO1FBQ3pELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFJLEdBQXdCLEVBQUUsUUFBa0I7UUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDO1lBQUUsT0FBVSxHQUFHLENBQUM7UUFDeEUsTUFBTSxPQUFPLEdBQW9CLEdBQUcsQ0FBQztRQUNyQyxJQUFJLE9BQU8sR0FBbUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRztnQkFDckUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEYsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHO1lBQ3hDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcclxuaW1wb3J0IHtJbmplY3RvciwgVHlwZVByb3ZpZGVyfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0lSZXNvbHZlRmFjdG9yeX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi9vYmplY3QudXRpbHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWZsZWN0VXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyBkZWZpbmVNZXRhZGF0YShrZXk6IHN0cmluZywgZGF0YTogYW55LCB0YXJnZXQ6IGFueSwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCBkYXRhLCB0YXJnZXQsIG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRNZXRhZGF0YShrZXk6IHN0cmluZywgdGFyZ2V0OiBhbnksIG5hbWU/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKGtleSwgdGFyZ2V0LCBuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0T3duTWV0YWRhdGEoa2V5OiBzdHJpbmcsIHRhcmdldDogYW55LCBuYW1lPzogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShrZXksIHRhcmdldCwgbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlc29sdmU8VD4ob2JqOiBJUmVzb2x2ZUZhY3RvcnkgfCBULCBpbmplY3RvcjogSW5qZWN0b3IpOiBUIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmNoZWNrSW50ZXJmYWNlKG9iaiwge2Z1bmM6IFwiZnVuY3Rpb25cIn0pKSByZXR1cm4gPFQ+b2JqO1xyXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSA8SVJlc29sdmVGYWN0b3J5Pm9iajtcclxuICAgICAgICBsZXQgZGVwZW5kczogVHlwZVByb3ZpZGVyW10gPSBbXTtcclxuICAgICAgICBpZiAoZmFjdG9yeS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IE9iamVjdFV0aWxzLmdldFByb3BlcnRpZXMoZmFjdG9yeS50eXBlKS5maW5kKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5LnR5cGVba2V5XSA9PT0gZmFjdG9yeS5mdW5jO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGVwZW5kcyA9IFJlZmxlY3RVdGlscy5nZXRNZXRhZGF0YShcImZhY3RvcnlEZXBlbmRlbmNpZXNcIiwgZmFjdG9yeS50eXBlLCBtZXRob2QpIHx8IFtdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlcGVuZHMgPSBSZWZsZWN0VXRpbHMuZ2V0TWV0YWRhdGEoXCJmYWN0b3J5RGVwZW5kZW5jaWVzXCIsIGZhY3RvcnkuZnVuYykgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkZXBlbmRzLm1hcChmdW5jdGlvbiAoZGVwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmplY3Rvci5nZXQoZGVwKTtcclxuICAgICAgICB9KS5jb25jYXQoZmFjdG9yeS5wYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBmYWN0b3J5LmZ1bmMuYXBwbHkobnVsbCwgcGFyYW1ldGVycyk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,20 +0,0 @@
1
- import { ObjectUtils } from "./object.utils";
2
- export class SetUtils {
3
- static equals(set, obj) {
4
- if (!ObjectUtils.isSet(set) || !ObjectUtils.isSet(obj))
5
- return false;
6
- if (set.size != obj.size)
7
- return false;
8
- for (const item in set) {
9
- if (!obj.has(item))
10
- return false;
11
- }
12
- return true;
13
- }
14
- static addArray(set, items) {
15
- if (!ObjectUtils.isSet(set) || !ObjectUtils.isArray(items))
16
- return;
17
- items.forEach(i => set.add(i));
18
- }
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy91dGlscy9zZXQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sT0FBTyxRQUFRO0lBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBYSxFQUFFLEdBQVE7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNsRCxPQUFPLEtBQUssQ0FBQztRQUNqQixJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUk7WUFDcEIsT0FBTyxLQUFLLENBQUM7UUFDakIsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQWEsRUFBRSxLQUFZO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ25FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2V0VXRpbHMge1xyXG4gICAgc3RhdGljIGVxdWFscyhzZXQ6IFNldDxhbnk+LCBvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNTZXQoc2V0KSB8fCAhT2JqZWN0VXRpbHMuaXNTZXQob2JqKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChzZXQuc2l6ZSAhPSBvYmouc2l6ZSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBpbiBzZXQpIHtcclxuICAgICAgICAgICAgaWYgKCFvYmouaGFzKGl0ZW0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhZGRBcnJheShzZXQ6IFNldDxhbnk+LCBpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzU2V0KHNldCkgfHwgIU9iamVjdFV0aWxzLmlzQXJyYXkoaXRlbXMpKSByZXR1cm47XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IHNldC5hZGQoaSkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,41 +0,0 @@
1
- export class StringUtils {
2
- static concat(separator, ...strings) {
3
- return strings.filter(
4
- // @dynamic
5
- str => !!str).join(separator);
6
- }
7
- static startsWith(str, ...starts) {
8
- for (let i = 0; i < starts.length; i++) {
9
- if (str.startsWith(starts[i]))
10
- return true;
11
- }
12
- return false;
13
- }
14
- static has(str, ...parts) {
15
- for (let i = 0; i < parts.length; i++) {
16
- if (str.indexOf(parts[i]) >= 0)
17
- return true;
18
- }
19
- return false;
20
- }
21
- static lcFirst(str) {
22
- return str ? str.charAt(0).toLowerCase() + str.substring(1) : "";
23
- }
24
- static ucFirst(str) {
25
- return str ? str.charAt(0).toUpperCase() + str.substring(1) : "";
26
- }
27
- static isObjectId(id) {
28
- return typeof id === "string" && id.length == 24 && !isNaN(Number("0x" + id));
29
- }
30
- static parseDomain(baseUrl) {
31
- try {
32
- const url = new URL(baseUrl);
33
- const port = url.port && url.port !== "443" && url.port !== "80" ? `:${url.port}` : ``;
34
- return `${url.protocol}//${url.hostname}${port}/`;
35
- }
36
- catch {
37
- return "/";
38
- }
39
- }
40
- }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy91dGlscy9zdHJpbmcudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVc7SUFFcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFpQixFQUFFLEdBQUcsT0FBaUI7UUFDakQsT0FBTyxPQUFPLENBQUMsTUFBTTtRQUNqQixXQUFXO1FBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUNmLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWdCO1FBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQUcsS0FBZTtRQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQ3RCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQ3RCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFVO1FBQ3hCLE9BQU8sT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFlO1FBQzlCLElBQUksQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkYsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUN0RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ0wsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgY29uY2F0KHNlcGFyYXRvcjogc3RyaW5nLCAuLi5zdHJpbmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZ3MuZmlsdGVyKFxyXG4gICAgICAgICAgICAvLyBAZHluYW1pY1xyXG4gICAgICAgICAgICBzdHIgPT4gISFzdHJcclxuICAgICAgICApLmpvaW4oc2VwYXJhdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc3RhcnRzV2l0aChzdHI6IHN0cmluZywgLi4uc3RhcnRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzdHIuc3RhcnRzV2l0aChzdGFydHNbaV0pKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBoYXMoc3RyOiBzdHJpbmcsIC4uLnBhcnRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKHBhcnRzW2ldKSA+PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBsY0ZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyID8gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKSA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHVjRmlyc3Qoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIgPyBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPYmplY3RJZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiAmJiBpZC5sZW5ndGggPT0gMjQgJiYgIWlzTmFOKE51bWJlcihcIjB4XCIgKyBpZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZURvbWFpbihiYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYmFzZVVybCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAmJiB1cmwucG9ydCAhPT0gXCI0NDNcIiAmJiB1cmwucG9ydCAhPT0gXCI4MFwiID8gYDoke3VybC5wb3J0fWAgOiBgYDtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3VybC5wcm90b2NvbH0vLyR7dXJsLmhvc3RuYW1lfSR7cG9ydH0vYDtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiL1wiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,52 +0,0 @@
1
- import { ObjectUtils } from "./object.utils";
2
- export class TimerUtils {
3
- static createTimeout(func, time) {
4
- // @dynamic
5
- const run = (timer) => {
6
- timer.clear();
7
- timer.id = setTimeout(() => {
8
- timer.id = null;
9
- timer.func();
10
- }, timer.time);
11
- };
12
- // @dynamic
13
- const clear = (timer) => {
14
- if (!timer.id)
15
- return;
16
- clearTimeout(timer.id);
17
- timer.id = null;
18
- };
19
- return TimerUtils.createTimer(run, clear, func, time);
20
- }
21
- static createInterval(func, time) {
22
- // @dynamic
23
- const run = (timer) => {
24
- timer.clear();
25
- timer.id = setInterval(timer.func, timer.time);
26
- };
27
- // @dynamic
28
- const clear = (timer) => {
29
- if (!timer.id)
30
- return;
31
- clearInterval(timer.id);
32
- timer.id = null;
33
- };
34
- return TimerUtils.createTimer(run, clear, func, time);
35
- }
36
- static createTimer(run, clear, func, time) {
37
- const timer = {};
38
- const setParams = (func, time) => {
39
- timer.func = !ObjectUtils.isFunction(func) ? (() => { }) : func;
40
- timer.time = !ObjectUtils.isNumber(time) ? 100 : time;
41
- };
42
- timer.run = () => run(timer);
43
- timer.clear = () => clear(timer);
44
- timer.set = (func, time) => {
45
- setParams(func, time);
46
- timer.run();
47
- };
48
- setParams(func, time);
49
- return timer;
50
- }
51
- }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL3RpbWVyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxNQUFNLE9BQU8sVUFBVTtJQUVuQixNQUFNLENBQUMsYUFBYSxDQUFDLElBQWUsRUFBRSxJQUFhO1FBQy9DLFdBQVc7UUFDWCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUNGLFdBQVc7UUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBQ3RCLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkIsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQWUsRUFBRSxJQUFhO1FBQ2hELFdBQVc7UUFDWCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQztRQUNGLFdBQVc7UUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBQ3RCLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEIsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQWMsRUFBRSxLQUFnQixFQUFFLElBQWMsRUFBRSxJQUFZO1FBQ3JGLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQWMsRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUMvQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQy9ELEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMxRCxDQUFDLENBQUM7UUFDRixLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBYyxFQUFFLElBQVksRUFBRSxFQUFFO1lBQ3pDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUNGLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJVGltZXJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XHJcblxyXG50eXBlIFRpbWVyRnVuYyA9ICh0aW1lcjogSVRpbWVyKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRpbWVyVXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyBjcmVhdGVUaW1lb3V0KGZ1bmM/OiBGdW5jdGlvbiwgdGltZT86IG51bWJlcik6IElUaW1lciB7XHJcbiAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICBjb25zdCBydW4gPSAodGltZXI6IElUaW1lcikgPT4ge1xyXG4gICAgICAgICAgICB0aW1lci5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aW1lci5pZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXIuaWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGltZXIuZnVuYygpO1xyXG4gICAgICAgICAgICB9LCB0aW1lci50aW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgY29uc3QgY2xlYXIgPSAodGltZXI6IElUaW1lcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRpbWVyLmlkKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lci5pZCk7XHJcbiAgICAgICAgICAgIHRpbWVyLmlkID0gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBUaW1lclV0aWxzLmNyZWF0ZVRpbWVyKHJ1biwgY2xlYXIsIGZ1bmMsIHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjcmVhdGVJbnRlcnZhbChmdW5jPzogRnVuY3Rpb24sIHRpbWU/OiBudW1iZXIpOiBJVGltZXIge1xyXG4gICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgY29uc3QgcnVuID0gKHRpbWVyOiBJVGltZXIpID0+IHtcclxuICAgICAgICAgICAgdGltZXIuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGltZXIuaWQgPSBzZXRJbnRlcnZhbCh0aW1lci5mdW5jLCB0aW1lci50aW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgY29uc3QgY2xlYXIgPSAodGltZXI6IElUaW1lcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRpbWVyLmlkKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIuaWQpO1xyXG4gICAgICAgICAgICB0aW1lci5pZCA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gVGltZXJVdGlscy5jcmVhdGVUaW1lcihydW4sIGNsZWFyLCBmdW5jLCB0aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVUaW1lcihydW46IFRpbWVyRnVuYywgY2xlYXI6IFRpbWVyRnVuYywgZnVuYzogRnVuY3Rpb24sIHRpbWU6IG51bWJlcik6IElUaW1lciB7XHJcbiAgICAgICAgY29uc3QgdGltZXI6IElUaW1lciA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHNldFBhcmFtcyA9IChmdW5jOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRpbWVyLmZ1bmMgPSAhT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihmdW5jKSA/ICgoKSA9PiB7fSkgOiBmdW5jO1xyXG4gICAgICAgICAgICB0aW1lci50aW1lID0gIU9iamVjdFV0aWxzLmlzTnVtYmVyKHRpbWUpID8gMTAwIDogdGltZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRpbWVyLnJ1biA9ICgpID0+IHJ1bih0aW1lcik7XHJcbiAgICAgICAgdGltZXIuY2xlYXIgPSAoKSA9PiBjbGVhcih0aW1lcik7XHJcbiAgICAgICAgdGltZXIuc2V0ID0gKGZ1bmM6IEZ1bmN0aW9uLCB0aW1lOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgc2V0UGFyYW1zKGZ1bmMsIHRpbWUpO1xyXG4gICAgICAgICAgICB0aW1lci5ydW4oKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNldFBhcmFtcyhmdW5jLCB0aW1lKTtcclxuICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICB9XHJcbn1cclxuIl19