@yuuvis/client-core 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -0
- package/esm2022/index.mjs +65 -0
- package/esm2022/lib/client-core.module.mjs +117 -0
- package/esm2022/lib/client-core.shared.module.mjs +18 -0
- package/esm2022/lib/common/pipes/filesize.pipe.mjs +37 -0
- package/esm2022/lib/common/pipes/index.mjs +6 -0
- package/esm2022/lib/common/pipes/keys.pipe.mjs +17 -0
- package/esm2022/lib/common/pipes/locale-date.pipe.mjs +45 -0
- package/esm2022/lib/common/pipes/locale-number.pipe.mjs +115 -0
- package/esm2022/lib/common/pipes/safe-html.pipe.mjs +44 -0
- package/esm2022/lib/common/services/native-notifications.interface.mjs +2 -0
- package/esm2022/lib/common/services/native-notifications.mjs +40 -0
- package/esm2022/lib/model/dms-object.interface.mjs +2 -0
- package/esm2022/lib/model/dms-object.model.mjs +79 -0
- package/esm2022/lib/model/object-flavor.interface.mjs +2 -0
- package/esm2022/lib/model/range-value.interface.mjs +2 -0
- package/esm2022/lib/model/yuv-error.model.mjs +37 -0
- package/esm2022/lib/model/yuv-user.model.mjs +38 -0
- package/esm2022/lib/service/audit/audit.interface.mjs +2 -0
- package/esm2022/lib/service/audit/audit.service.mjs +135 -0
- package/esm2022/lib/service/auth/auth.interceptor.mjs +50 -0
- package/esm2022/lib/service/auth/auth.interface.mjs +7 -0
- package/esm2022/lib/service/auth/auth.service.mjs +130 -0
- package/esm2022/lib/service/auth/oidc.service.mjs +81 -0
- package/esm2022/lib/service/backend/api.enum.mjs +11 -0
- package/esm2022/lib/service/backend/backend.interface.mjs +2 -0
- package/esm2022/lib/service/backend/backend.service.mjs +206 -0
- package/esm2022/lib/service/bpm/bpm.interface.mjs +8 -0
- package/esm2022/lib/service/bpm/bpm.service.mjs +51 -0
- package/esm2022/lib/service/cache/app-cache.service.mjs +51 -0
- package/esm2022/lib/service/catalog/catalog.interface.mjs +2 -0
- package/esm2022/lib/service/catalog/catalog.service.mjs +13 -0
- package/esm2022/lib/service/clipboard/clipboard.interface.mjs +2 -0
- package/esm2022/lib/service/clipboard/clipboard.service.mjs +90 -0
- package/esm2022/lib/service/config/config.interface.mjs +6 -0
- package/esm2022/lib/service/config/config.service.mjs +115 -0
- package/esm2022/lib/service/config/core-config.mjs +20 -0
- package/esm2022/lib/service/config/core-config.tokens.mjs +9 -0
- package/esm2022/lib/service/connection/connection.service.mjs +36 -0
- package/esm2022/lib/service/connection/offline.interceptor.mjs +28 -0
- package/esm2022/lib/service/core-init/core-init.service.mjs +29 -0
- package/esm2022/lib/service/core-init/missing-translation-handler.mjs +10 -0
- package/esm2022/lib/service/core-init/translate-json-loader.mjs +117 -0
- package/esm2022/lib/service/device/device.interface.mjs +6 -0
- package/esm2022/lib/service/device/device.service.mjs +144 -0
- package/esm2022/lib/service/dms/dms.service.interface.mjs +2 -0
- package/esm2022/lib/service/dms/dms.service.mjs +440 -0
- package/esm2022/lib/service/event/event.interface.mjs +2 -0
- package/esm2022/lib/service/event/event.service.mjs +38 -0
- package/esm2022/lib/service/event/events.mjs +14 -0
- package/esm2022/lib/service/idm/idm.interface.mjs +2 -0
- package/esm2022/lib/service/idm/idm.service.mjs +34 -0
- package/esm2022/lib/service/logger/logger-console.service.mjs +73 -0
- package/esm2022/lib/service/logger/logger.interface.mjs +2 -0
- package/esm2022/lib/service/logger/logger.mjs +27 -0
- package/esm2022/lib/service/notification/notification.service.mjs +131 -0
- package/esm2022/lib/service/object-config/object-config.interface.mjs +2 -0
- package/esm2022/lib/service/object-config/object-config.service.mjs +229 -0
- package/esm2022/lib/service/pending-changes/pending-changes-component.interface.mjs +5 -0
- package/esm2022/lib/service/pending-changes/pending-changes-guard.service.mjs +25 -0
- package/esm2022/lib/service/pending-changes/pending-changes.service.mjs +123 -0
- package/esm2022/lib/service/prediction/prediction.interface.mjs +2 -0
- package/esm2022/lib/service/prediction/prediction.service.mjs +60 -0
- package/esm2022/lib/service/search/search.service.interface.mjs +39 -0
- package/esm2022/lib/service/search/search.service.mjs +178 -0
- package/esm2022/lib/service/session-storage/session-storage.service.mjs +50 -0
- package/esm2022/lib/service/system/object-form.interface.mjs +2 -0
- package/esm2022/lib/service/system/system.enum.mjs +179 -0
- package/esm2022/lib/service/system/system.interface.mjs +2 -0
- package/esm2022/lib/service/system/system.service.mjs +597 -0
- package/esm2022/lib/service/upload/upload.interface.mjs +2 -0
- package/esm2022/lib/service/upload/upload.service.mjs +228 -0
- package/esm2022/lib/service/user/user.service.mjs +211 -0
- package/esm2022/lib/util/utils.helper.enum.mjs +15 -0
- package/esm2022/lib/util/utils.mjs +373 -0
- package/esm2022/yuuvis-client-core.mjs +5 -0
- package/fesm2022/yuuvis-client-core.mjs +4775 -0
- package/fesm2022/yuuvis-client-core.mjs.map +1 -0
- package/index.d.ts +61 -0
- package/lib/client-core.module.d.ts +20 -0
- package/lib/client-core.shared.module.d.ts +10 -0
- package/lib/common/pipes/filesize.pipe.d.ts +18 -0
- package/lib/common/pipes/index.d.ts +5 -0
- package/lib/common/pipes/keys.pipe.d.ts +10 -0
- package/lib/common/pipes/locale-date.pipe.d.ts +12 -0
- package/lib/common/pipes/locale-number.pipe.d.ts +47 -0
- package/lib/common/pipes/safe-html.pipe.d.ts +28 -0
- package/lib/common/services/native-notifications.d.ts +8 -0
- package/lib/common/services/native-notifications.interface.d.ts +5 -0
- package/lib/model/dms-object.interface.d.ts +16 -0
- package/lib/model/dms-object.model.d.ts +26 -0
- package/lib/model/object-flavor.interface.d.ts +30 -0
- package/lib/model/range-value.interface.d.ts +9 -0
- package/lib/model/yuv-error.model.d.ts +18 -0
- package/lib/model/yuv-user.model.d.ts +44 -0
- package/lib/service/audit/audit.interface.d.ts +47 -0
- package/lib/service/audit/audit.service.d.ts +35 -0
- package/lib/service/auth/auth.interceptor.d.ts +12 -0
- package/lib/service/auth/auth.interface.d.ts +34 -0
- package/lib/service/auth/auth.service.d.ts +50 -0
- package/lib/service/auth/oidc.service.d.ts +16 -0
- package/lib/service/backend/api.enum.d.ts +7 -0
- package/lib/service/backend/backend.interface.d.ts +29 -0
- package/lib/service/backend/backend.service.d.ts +118 -0
- package/lib/service/bpm/bpm.interface.d.ts +86 -0
- package/lib/service/bpm/bpm.service.d.ts +19 -0
- package/lib/service/cache/app-cache.service.d.ts +18 -0
- package/lib/service/catalog/catalog.interface.d.ts +12 -0
- package/lib/service/catalog/catalog.service.d.ts +5 -0
- package/lib/service/clipboard/clipboard.interface.d.ts +11 -0
- package/lib/service/clipboard/clipboard.service.d.ts +23 -0
- package/lib/service/config/config.interface.d.ts +34 -0
- package/lib/service/config/config.service.d.ts +45 -0
- package/lib/service/config/core-config.d.ts +14 -0
- package/lib/service/config/core-config.tokens.d.ts +7 -0
- package/lib/service/connection/connection.service.d.ts +25 -0
- package/lib/service/connection/offline.interceptor.d.ts +15 -0
- package/lib/service/core-init/core-init.service.d.ts +11 -0
- package/lib/service/core-init/missing-translation-handler.d.ts +8 -0
- package/lib/service/core-init/translate-json-loader.d.ts +20 -0
- package/lib/service/device/device.interface.d.ts +15 -0
- package/lib/service/device/device.service.d.ts +54 -0
- package/lib/service/dms/dms.service.d.ts +153 -0
- package/lib/service/dms/dms.service.interface.d.ts +59 -0
- package/lib/service/event/event.interface.d.ts +13 -0
- package/lib/service/event/event.service.d.ts +23 -0
- package/lib/service/event/events.d.ts +12 -0
- package/lib/service/idm/idm.interface.d.ts +5 -0
- package/lib/service/idm/idm.service.d.ts +9 -0
- package/lib/service/logger/logger-console.service.d.ts +20 -0
- package/lib/service/logger/logger.d.ts +17 -0
- package/lib/service/logger/logger.interface.d.ts +10 -0
- package/lib/service/notification/notification.service.d.ts +71 -0
- package/lib/service/object-config/object-config.interface.d.ts +62 -0
- package/lib/service/object-config/object-config.service.d.ts +38 -0
- package/lib/service/pending-changes/pending-changes-component.interface.d.ts +6 -0
- package/lib/service/pending-changes/pending-changes-guard.service.d.ts +14 -0
- package/lib/service/pending-changes/pending-changes.service.d.ts +57 -0
- package/lib/service/prediction/prediction.interface.d.ts +18 -0
- package/lib/service/prediction/prediction.service.d.ts +15 -0
- package/lib/service/search/search.service.d.ts +46 -0
- package/lib/service/search/search.service.interface.d.ts +119 -0
- package/lib/service/session-storage/session-storage.service.d.ts +15 -0
- package/lib/service/system/object-form.interface.d.ts +46 -0
- package/lib/service/system/system.enum.d.ts +141 -0
- package/lib/service/system/system.interface.d.ts +146 -0
- package/lib/service/system/system.service.d.ts +168 -0
- package/lib/service/upload/upload.interface.d.ts +55 -0
- package/lib/service/upload/upload.service.d.ts +34 -0
- package/lib/service/user/user.service.d.ts +69 -0
- package/lib/util/utils.d.ts +118 -0
- package/lib/util/utils.helper.enum.d.ts +13 -0
- package/package.json +33 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { EMPTY as observableEmpty } from 'rxjs';
|
|
2
|
+
import { Sort } from './utils.helper.enum';
|
|
3
|
+
export class Utils {
|
|
4
|
+
static optionsToURLParams(options) {
|
|
5
|
+
if (options) {
|
|
6
|
+
const searchParams = new URLSearchParams();
|
|
7
|
+
Object.keys(options).map((k) => searchParams.append(k, options[k]));
|
|
8
|
+
return `?${searchParams.toString()}`;
|
|
9
|
+
}
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get all focusable child elements of a host element.
|
|
14
|
+
* @param host The host/parent element
|
|
15
|
+
* @returns Array of focusable child elements
|
|
16
|
+
*/
|
|
17
|
+
static getFocusableChildren(host) {
|
|
18
|
+
return Array.from(host.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex="-1"])')).filter((el) => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));
|
|
19
|
+
}
|
|
20
|
+
static hasProperty(o, property) {
|
|
21
|
+
if (typeof o !== 'object' || o === null) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return Object.hasOwn(o, property);
|
|
25
|
+
}
|
|
26
|
+
static patternToRegExp(pattern) {
|
|
27
|
+
return new RegExp(pattern.replaceAll('*', '.*'));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Utility method for adding parameters to a given URI.
|
|
31
|
+
*
|
|
32
|
+
* @param uri The uri string to attach the parameters to
|
|
33
|
+
* @param params The object containing parameters to be appended
|
|
34
|
+
* @returns the given uri extended by the given parameters + remove empty parameters
|
|
35
|
+
*/
|
|
36
|
+
static buildUri(uri, params) {
|
|
37
|
+
const q = Object.keys(params)
|
|
38
|
+
.filter((k) => !Utils.isEmptyOrFalse(params[k]))
|
|
39
|
+
.map((k) => k + '=' + encodeURIComponent(typeof params[k] === 'object' ? JSON.stringify(params[k]) : params[k]))
|
|
40
|
+
.join('&');
|
|
41
|
+
return uri + (q ? '?' + q : '');
|
|
42
|
+
}
|
|
43
|
+
static formatMailTo(value, isEmail) {
|
|
44
|
+
if (isEmail && !!value) {
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
return value.join().replace(/,/g, '; ');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return value.replace(/,/g, '; ');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a unique identifier.
|
|
56
|
+
* @returns A Universally Unique Identifier
|
|
57
|
+
*/
|
|
58
|
+
static uuid() {
|
|
59
|
+
return Utils._p8() + Utils._p8(true) + Utils._p8(true) + Utils._p8();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Encode a filename safe for sending chars beyond ASCII-7bit using quoted printable encoding.
|
|
63
|
+
*
|
|
64
|
+
* @param filename The file name
|
|
65
|
+
* @returns The quoted printable filename
|
|
66
|
+
*/
|
|
67
|
+
static encodeFileName(filename) {
|
|
68
|
+
const fileName = Utils.encodeToQuotedPrintable(Utils.encodeToUtf8(filename)).replace(/_/g, '=5F');
|
|
69
|
+
return `=?UTF-8?Q?${fileName}?=`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* @param boolean s
|
|
74
|
+
* @return string
|
|
75
|
+
*/
|
|
76
|
+
static _p8(s) {
|
|
77
|
+
const p = (Math.random().toString(16) + '000000000').substr(2, 8);
|
|
78
|
+
return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Converts a javascript text to the utf-8 converted variant.
|
|
82
|
+
* See [unicode]{@link http://thlist.onlinehome.de/thomas_homepage/unicode/UTF-8%20Konvertierung%20mittels%20JavaScript.htm} for reference
|
|
83
|
+
*
|
|
84
|
+
* @param rawinput The input string
|
|
85
|
+
* @returns The utf-8 converted string
|
|
86
|
+
*/
|
|
87
|
+
static encodeToUtf8(rawinput) {
|
|
88
|
+
/**
|
|
89
|
+
* Normalize line breaks
|
|
90
|
+
*/
|
|
91
|
+
rawinput = rawinput.replace(/\r\n/g, '\n');
|
|
92
|
+
let utfreturn = '';
|
|
93
|
+
for (let n = 0; n < rawinput.length; n++) {
|
|
94
|
+
/**
|
|
95
|
+
* Unicode for current char
|
|
96
|
+
*/
|
|
97
|
+
const c = rawinput.charCodeAt(n);
|
|
98
|
+
if (c < 128) {
|
|
99
|
+
/**
|
|
100
|
+
* All chars range 0-127 => 1byte
|
|
101
|
+
*/
|
|
102
|
+
utfreturn += String.fromCharCode(c);
|
|
103
|
+
}
|
|
104
|
+
else if (c > 127 && c < 2048) {
|
|
105
|
+
/**
|
|
106
|
+
* All chars range from 127 to 2047 => 2byte
|
|
107
|
+
*/
|
|
108
|
+
utfreturn += String.fromCharCode((c >> 6) | 192);
|
|
109
|
+
utfreturn += String.fromCharCode((c & 63) | 128);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
/**
|
|
113
|
+
* All chars range from 2048 to 66536 => 3byte
|
|
114
|
+
*/
|
|
115
|
+
utfreturn += String.fromCharCode((c >> 12) | 224);
|
|
116
|
+
utfreturn += String.fromCharCode(((c >> 6) & 63) | 128);
|
|
117
|
+
utfreturn += String.fromCharCode((c & 63) | 128);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return utfreturn;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* See [quoted-printable]{@link https://github.com/mathiasbynens/quoted-printable/blob/master/quoted-printable.js}
|
|
124
|
+
**/
|
|
125
|
+
static quotedPrintable(symbol) {
|
|
126
|
+
if (symbol > '\xFF') {
|
|
127
|
+
throw RangeError('`encodeToQuotedPrintable` expects extended ASCII input only. Missing prior UTF-8 encoding?');
|
|
128
|
+
}
|
|
129
|
+
const codePoint = symbol.charCodeAt(0);
|
|
130
|
+
const hexadecimal = codePoint.toString(16).toUpperCase();
|
|
131
|
+
return '=' + ('0' + hexadecimal).slice(-2);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Encode symbols that are definitely unsafe (i.e. unsafe in any context). The regular expression describes these unsafe symbols.
|
|
135
|
+
*
|
|
136
|
+
* @param rawinput Input string to be encoded
|
|
137
|
+
* @returns The encoded string
|
|
138
|
+
*/
|
|
139
|
+
static encodeToQuotedPrintable(rawinput) {
|
|
140
|
+
const encoded = rawinput.replace(/[\0-\b\n-\x1F=\x7F-\uD7FF\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF]/g, this.quotedPrintable);
|
|
141
|
+
return encoded;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Sorts An Array of Object by given key
|
|
145
|
+
* See [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
|
|
146
|
+
*
|
|
147
|
+
* @param key
|
|
148
|
+
* @param order
|
|
149
|
+
* @param locales
|
|
150
|
+
* @param options
|
|
151
|
+
* @returns (a: any, b: any) => number
|
|
152
|
+
*/
|
|
153
|
+
static sortValues(key = '', order = Sort.ASC, locales, options) {
|
|
154
|
+
const f = (a, b) => {
|
|
155
|
+
let comparison;
|
|
156
|
+
const varA = Utils.getProperty(a, key);
|
|
157
|
+
const varB = Utils.getProperty(b, key);
|
|
158
|
+
if (typeof varA === 'number' && typeof varB === 'number') {
|
|
159
|
+
comparison = varA - varB;
|
|
160
|
+
}
|
|
161
|
+
else if (varA instanceof Date && varB instanceof Date) {
|
|
162
|
+
comparison = new Date(varA).getTime() - new Date(varB).getTime();
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const stringA = varA || varA === 0 ? varA.toString() : '';
|
|
166
|
+
const stringB = varB || varB === 0 ? varB.toString() : '';
|
|
167
|
+
comparison = stringA.localeCompare(stringB, locales, options);
|
|
168
|
+
}
|
|
169
|
+
return order === Sort.DESC ? comparison * -1 : comparison;
|
|
170
|
+
};
|
|
171
|
+
return f;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
|
|
175
|
+
*
|
|
176
|
+
* @param object
|
|
177
|
+
* @param string key
|
|
178
|
+
* @returns any
|
|
179
|
+
*/
|
|
180
|
+
static getProperty(object, key = '') {
|
|
181
|
+
const f = key ? key.split('.').reduce((o, k) => (o || {})[k], object) : object;
|
|
182
|
+
return f;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* @param object
|
|
186
|
+
* @param key
|
|
187
|
+
* @param value
|
|
188
|
+
*/
|
|
189
|
+
static setProperty(object, key = '', value) {
|
|
190
|
+
const [head, ...rest] = key.split('.');
|
|
191
|
+
!rest.length ? (object[head] = value) : Utils.setProperty(object[head] || (object[head] = {}), value, rest.join('.'));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Use on Observable.catch or Observable.subscribe to return empty value
|
|
195
|
+
* [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
|
|
196
|
+
*
|
|
197
|
+
* @param (error) => any callback
|
|
198
|
+
* @returns (error) => Observable<never>
|
|
199
|
+
*/
|
|
200
|
+
static empty(callback) {
|
|
201
|
+
const f = () => {
|
|
202
|
+
return observableEmpty;
|
|
203
|
+
};
|
|
204
|
+
return f;
|
|
205
|
+
}
|
|
206
|
+
// /**
|
|
207
|
+
// * Use on Observable.catch with specific skipNotification function !!!
|
|
208
|
+
// * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
|
|
209
|
+
// *
|
|
210
|
+
// * @param skipNotification
|
|
211
|
+
// * @param callback
|
|
212
|
+
// * @param name
|
|
213
|
+
// * @param message
|
|
214
|
+
// */
|
|
215
|
+
// public static catchSkip(skipNotification?: (error: any) => any, callback?: (error: any) => any, name?: string, message?: string) {
|
|
216
|
+
// const f = (error: any) => {
|
|
217
|
+
// const _error = callback && callback(error);
|
|
218
|
+
// const _skipNotification = skipNotification && skipNotification(error);
|
|
219
|
+
// return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, _skipNotification));
|
|
220
|
+
// };
|
|
221
|
+
// return f;
|
|
222
|
+
// }
|
|
223
|
+
// /**
|
|
224
|
+
// * Use on Observable.catch !!!
|
|
225
|
+
// * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}
|
|
226
|
+
// *
|
|
227
|
+
// * @param callback
|
|
228
|
+
// * @param name
|
|
229
|
+
// * @param message
|
|
230
|
+
// * @param skipNotification
|
|
231
|
+
// * @return (error) => Observable<never>
|
|
232
|
+
// */
|
|
233
|
+
// public static catch(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {
|
|
234
|
+
// const f = (error: any) => {
|
|
235
|
+
// const _error = callback && callback(error);
|
|
236
|
+
// return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification));
|
|
237
|
+
// };
|
|
238
|
+
// return f;
|
|
239
|
+
// }
|
|
240
|
+
// /**
|
|
241
|
+
// * Use on Observable.subscribe !!!
|
|
242
|
+
// * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}
|
|
243
|
+
// *
|
|
244
|
+
// * @param callback
|
|
245
|
+
// * @param name
|
|
246
|
+
// * @param message
|
|
247
|
+
// * @param skipNotification
|
|
248
|
+
// * @return (error) => void
|
|
249
|
+
// */
|
|
250
|
+
// public static throw(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {
|
|
251
|
+
// const f = (error: any) => {
|
|
252
|
+
// const _error = callback && callback(error);
|
|
253
|
+
// throw new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification);
|
|
254
|
+
// };
|
|
255
|
+
// return f;
|
|
256
|
+
// }
|
|
257
|
+
// /**
|
|
258
|
+
// * Use on Observable.subscribe only if you want to skip notification / toast!!!
|
|
259
|
+
// *
|
|
260
|
+
// * @param callback
|
|
261
|
+
// * @param name
|
|
262
|
+
// * @param message
|
|
263
|
+
// * @param skipNotification
|
|
264
|
+
// * @return (error) => void
|
|
265
|
+
// */
|
|
266
|
+
// public static logError(callback?: (error: any) => any, name?: string, message?: string, skipNotification = true) {
|
|
267
|
+
// return Utils.throw(callback, name, message, skipNotification);
|
|
268
|
+
// }
|
|
269
|
+
// /**
|
|
270
|
+
// * Checks if element is visible
|
|
271
|
+
// *
|
|
272
|
+
// * @param elem
|
|
273
|
+
// * @return boolean
|
|
274
|
+
// */
|
|
275
|
+
// public static isVisible(elem: any): boolean {
|
|
276
|
+
// return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
|
|
277
|
+
// }
|
|
278
|
+
static getBaseHref(removeTrailingSlash) {
|
|
279
|
+
const baseEl = document.getElementsByTagName('base')[0];
|
|
280
|
+
const baseHref = baseEl ? baseEl.getAttribute('href') : undefined;
|
|
281
|
+
return baseHref ? (removeTrailingSlash ? baseHref.substr(0, baseHref.length - 1) : baseHref) : '';
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Truncate a string (first argument) if it is longer than the given maximum string length (second argument).
|
|
285
|
+
* Return the truncated string with a ... ending or whats provided.
|
|
286
|
+
*
|
|
287
|
+
* @param string str
|
|
288
|
+
* @param number num
|
|
289
|
+
*/
|
|
290
|
+
static truncateString(str, num, ending = '...') {
|
|
291
|
+
if (str.length > num) {
|
|
292
|
+
if (num > 3) {
|
|
293
|
+
num -= 3;
|
|
294
|
+
}
|
|
295
|
+
str = `${str.substring(0, num)}${ending}`;
|
|
296
|
+
}
|
|
297
|
+
return str;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get the TimeZone Offsest as minutes
|
|
301
|
+
*/
|
|
302
|
+
static getTimezoneOffset() {
|
|
303
|
+
return new Date().getTimezoneOffset();
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Transform to date with yyyy-mm-dd format
|
|
307
|
+
*/
|
|
308
|
+
static transformDate(v) {
|
|
309
|
+
return v && new Date(new Date(v).getTime() - new Date(v).getTimezoneOffset() * 60 * 1000).toISOString().slice(0, 10);
|
|
310
|
+
}
|
|
311
|
+
static isEdge() {
|
|
312
|
+
return new RegExp('Edge', 'i').test(navigator.userAgent);
|
|
313
|
+
}
|
|
314
|
+
static isFirefox() {
|
|
315
|
+
return new RegExp('firefox', 'i').test(navigator.userAgent);
|
|
316
|
+
}
|
|
317
|
+
static isSafari() {
|
|
318
|
+
return new RegExp('^((?!chrome|android|crios|fxios).)*safari', 'i').test(navigator.userAgent);
|
|
319
|
+
}
|
|
320
|
+
static isEmpty(obj) {
|
|
321
|
+
if (obj == null || obj === '') {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
if (typeof obj === 'number') {
|
|
325
|
+
return isNaN(obj);
|
|
326
|
+
}
|
|
327
|
+
return typeof obj === 'boolean' ? false : !Object.keys(obj).length;
|
|
328
|
+
}
|
|
329
|
+
static isEmptyOrFalse(val) {
|
|
330
|
+
return typeof val === 'boolean' ? !val : Utils.isEmpty(val);
|
|
331
|
+
}
|
|
332
|
+
static escapeHtml(str) {
|
|
333
|
+
str = str ? str : '';
|
|
334
|
+
const entityMap = {
|
|
335
|
+
'&': '&',
|
|
336
|
+
'<': '<',
|
|
337
|
+
'>': '>',
|
|
338
|
+
'"': '"',
|
|
339
|
+
"'": ''',
|
|
340
|
+
'/': '/'
|
|
341
|
+
};
|
|
342
|
+
return String(str).replace(/[&<>"'\/]/g, (s) => entityMap[s]);
|
|
343
|
+
}
|
|
344
|
+
static arrayToObject(arr = [], keyProperty, valueProperty) {
|
|
345
|
+
const key = typeof keyProperty === 'string' ? (o) => o[keyProperty] : keyProperty;
|
|
346
|
+
const value = typeof valueProperty === 'string' ? (o) => o[valueProperty] : valueProperty;
|
|
347
|
+
return arr.reduce((acc, cur, i) => {
|
|
348
|
+
acc[key ? key(cur) : i] = value ? value(cur) : cur;
|
|
349
|
+
return acc;
|
|
350
|
+
}, {});
|
|
351
|
+
}
|
|
352
|
+
// public static navigate(newTab: boolean, router: Router, commands: any[], navigationExtras?: NavigationExtras): Promise<any> {
|
|
353
|
+
// if (newTab) {
|
|
354
|
+
// return new Promise(() => Utils.openWindow(router.serializeUrl(router.createUrlTree(commands, navigationExtras))));
|
|
355
|
+
// } else {
|
|
356
|
+
// return router.navigate(commands, navigationExtras);
|
|
357
|
+
// }
|
|
358
|
+
// }
|
|
359
|
+
// public static openWindow(url: string = '', target = '_blank', features?: string): Window | null {
|
|
360
|
+
// return window.open(url.match(new RegExp('^/.+')) ? url.replace(new RegExp('^/'), '') : url, target, features); // relative to host
|
|
361
|
+
// }
|
|
362
|
+
static downloadBlob(content, mimeType, filename) {
|
|
363
|
+
const bom = new Uint8Array([0xef, 0xbb, 0xbf]); // FORM BOM
|
|
364
|
+
const blob = new Blob([bom, content], { type: 'octet/stream' });
|
|
365
|
+
const a = document.createElement('a');
|
|
366
|
+
const url = window.URL.createObjectURL(blob);
|
|
367
|
+
a.setAttribute('href', url);
|
|
368
|
+
a.setAttribute('download', filename);
|
|
369
|
+
a.click();
|
|
370
|
+
URL.revokeObjectURL(url);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3V0aWwvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssSUFBSSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFtQixJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBNEI7UUFDcEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQWlCO1FBQ2xELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDbEksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFVLEVBQUUsUUFBZ0I7UUFDcEQsSUFBSSxP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QUEwRDtJQUMxRCxNQUFNO0lBQ04sSUFBSTtJQUVKLG9HQUFvRztJQUNwRyx1SUFBdUk7SUFDdkksSUFBSTtJQUVHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBWSxFQUFFLFFBQWdCLEVBQUUsUUFBZ0I7UUFDekUsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZIGFzIG9ic2VydmFibGVFbXB0eSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWFpbFRvLCBTb3J0IH0gZnJvbSAnLi91dGlscy5oZWxwZXIuZW51bSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG4gIHN0YXRpYyBvcHRpb25zVG9VUkxQYXJhbXMob3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLm1hcCgoaykgPT4gc2VhcmNoUGFyYW1zLmFwcGVuZChrLCBvcHRpb25zW2tdKSk7XG4gICAgICByZXR1cm4gYD8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGZvY3VzYWJsZSBjaGlsZCBlbGVtZW50cyBvZiBhIGhvc3QgZWxlbWVudC5cbiAgICogQHBhcmFtIGhvc3QgVGhlIGhvc3QvcGFyZW50IGVsZW1lbnRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZm9jdXNhYmxlIGNoaWxkIGVsZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZvY3VzYWJsZUNoaWxkcmVuKGhvc3Q6IEhUTUxFbGVtZW50KTogRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShob3N0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZl0sIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJykpLmZpbHRlcihcbiAgICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiAhZWwuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaGFzUHJvcGVydHkobzogdW5rbm93biwgcHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcgfHwgbyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0Lmhhc093bihvLCBwcm9wZXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHBhdHRlcm5Ub1JlZ0V4cChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4ucmVwbGFjZUFsbCgnKicsICcuKicpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVdGlsaXR5IG1ldGhvZCBmb3IgYWRkaW5nIHBhcmFtZXRlcnMgdG8gYSBnaXZlbiBVUkkuXG4gICAqXG4gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBzdHJpbmcgdG8gYXR0YWNoIHRoZSBwYXJhbWV0ZXJzIHRvXG4gICAqIEBwYXJhbSBwYXJhbXMgVGhlIG9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnMgdG8gYmUgYXBwZW5kZWRcbiAgICogQHJldHVybnMgdGhlIGdpdmVuIHVyaSBleHRlbmRlZCBieSB0aGUgZ2l2ZW4gcGFyYW1ldGVycyArIHJlbW92ZSBlbXB0eSBwYXJhbWV0ZXJzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJ1aWxkVXJpKHVyaTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcSA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgIC5maWx0ZXIoKGspID0+ICFVdGlscy5pc0VtcHR5T3JGYWxzZShwYXJhbXNba10pKVxuICAgICAgLm1hcCgoaykgPT4gayArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlb2YgcGFyYW1zW2tdID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtc1trXSkgOiBwYXJhbXNba10pKVxuICAgICAgLmpvaW4oJyYnKTtcbiAgICByZXR1cm4gdXJpICsgKHEgPyAnPycgKyBxIDogJycpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JtYXRNYWlsVG8odmFsdWU6IEZvcm1hdHRlZE1haWxUbywgaXNFbWFpbDogYm9vbGVhbik6IEZvcm1hdHRlZE1haWxUbyB7XG4gICAgaWYgKGlzRW1haWwgJiYgISF2YWx1ZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5qb2luKCkucmVwbGFjZSgvLC9nLCAnOyAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8sL2csICc7ICcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJucyBBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHV1aWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbHMuX3A4KCkgKyBVdGlscy5fcDgodHJ1ZSkgKyBVdGlscy5fcDgodHJ1ZSkgKyBVdGlscy5fcDgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgYSBmaWxlbmFtZSBzYWZlIGZvciBzZW5kaW5nIGNoYXJzIGJleW9uZCBBU0NJSS03Yml0IHVzaW5nIHF1b3RlZCBwcmludGFibGUgZW5jb2RpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZSBuYW1lXG4gICAqIEByZXR1cm5zIFRoZSBxdW90ZWQgcHJpbnRhYmxlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVuY29kZUZpbGVOYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gVXRpbHMuZW5jb2RlVG9RdW90ZWRQcmludGFibGUoVXRpbHMuZW5jb2RlVG9VdGY4KGZpbGVuYW1lKSkucmVwbGFjZSgvXy9nLCAnPTVGJyk7XG4gICAgcmV0dXJuIGA9P1VURi04P1E/JHtmaWxlTmFtZX0/PWA7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGJvb2xlYW4gc1xuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3A4KHM/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBwID0gKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpICsgJzAwMDAwMDAwMCcpLnN1YnN0cigyLCA4KTtcbiAgICByZXR1cm4gcyA/IGAtJHtwLnN1YnN0cigwLCA0KX0tJHtwLnN1YnN0cig0LCA0KX1gIDogcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGphdmFzY3JpcHQgdGV4dCB0byB0aGUgdXRmLTggY29udmVydGVkIHZhcmlhbnQuXG4gICAqIFNlZSBbdW5pY29kZV17QGxpbmsgaHR0cDovL3RobGlzdC5vbmxpbmVob21lLmRlL3Rob21hc19ob21lcGFnZS91bmljb2RlL1VURi04JTIwS29udmVydGllcnVuZyUyMG1pdHRlbHMlMjBKYXZhU2NyaXB0Lmh0bX0gZm9yIHJlZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0gcmF3aW5wdXQgVGhlIGlucHV0IHN0cmluZ1xuICAgKiBAcmV0dXJucyBUaGUgdXRmLTggY29udmVydGVkIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZW5jb2RlVG9VdGY4KHJhd2lucHV0OiBzdHJpbmcpIHtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgbGluZSBicmVha3NcbiAgICAgKi9cbiAgICByYXdpbnB1dCA9IHJhd2lucHV0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gICAgbGV0IHV0ZnJldHVybiA9ICcnO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmF3aW5wdXQubGVuZ3RoOyBuKyspIHtcbiAgICAgIC8qKlxuICAgICAgICogVW5pY29kZSBmb3IgY3VycmVudCBjaGFyXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGMgPSByYXdpbnB1dC5jaGFyQ29kZUF0KG4pO1xuICAgICAgaWYgKGMgPCAxMjgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCBjaGFycyByYW5nZSAwLTEyNyA9PiAxYnl0ZVxuICAgICAgICAgKi9cbiAgICAgICAgdXRmcmV0dXJuICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgPiAxMjcgJiYgYyA8IDIwNDgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCBjaGFycyByYW5nZSBmcm9tIDEyNyB0byAyMDQ3ID0+IDJieXRlXG4gICAgICAgICAqL1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiA2KSB8IDE5Mik7XG4gICAgICAgIHV0ZnJldHVybiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgNjMpIHwgMTI4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbGwgY2hhcnMgcmFuZ2UgZnJvbSAyMDQ4IHRvIDY2NTM2ID0+IDNieXRlXG4gICAgICAgICAqL1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiAxMikgfCAyMjQpO1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgPj4gNikgJiA2MykgfCAxMjgpO1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDYzKSB8IDEyOCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1dGZyZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2VlIFtxdW90ZWQtcHJpbnRhYmxlXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9xdW90ZWQtcHJpbnRhYmxlL2Jsb2IvbWFzdGVyL3F1b3RlZC1wcmludGFibGUuanN9XG4gICAqKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcXVvdGVkUHJpbnRhYmxlKHN5bWJvbDogc3RyaW5nKSB7XG4gICAgaWYgKHN5bWJvbCA+ICdcXHhGRicpIHtcbiAgICAgIHRocm93IFJhbmdlRXJyb3IoJ2BlbmNvZGVUb1F1b3RlZFByaW50YWJsZWAgZXhwZWN0cyBleHRlbmRlZCBBU0NJSSBpbnB1dCBvbmx5LiBNaXNzaW5nIHByaW9yIFVURi04IGVuY29kaW5nPycpO1xuICAgIH1cbiAgICBjb25zdCBjb2RlUG9pbnQgPSBzeW1ib2wuY2hhckNvZGVBdCgwKTtcbiAgICBjb25zdCBoZXhhZGVjaW1hbCA9IGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gJz0nICsgKCcwJyArIGhleGFkZWNpbWFsKS5zbGljZSgtMik7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5pdGVseSB1bnNhZmUgKGkuZS4gdW5zYWZlIGluIGFueSBjb250ZXh0KS4gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZXNjcmliZXMgdGhlc2UgdW5zYWZlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwYXJhbSByYXdpbnB1dCBJbnB1dCBzdHJpbmcgdG8gYmUgZW5jb2RlZFxuICAgKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGVuY29kZVRvUXVvdGVkUHJpbnRhYmxlKHJhd2lucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuY29kZWQgPSByYXdpbnB1dC5yZXBsYWNlKC9bXFwwLVxcYlxcbi1cXHgxRj1cXHg3Ri1cXHVEN0ZGXFx1REMwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdL2csIHRoaXMucXVvdGVkUHJpbnRhYmxlKTtcbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBBbiBBcnJheSBvZiBPYmplY3QgYnkgZ2l2ZW4ga2V5XG4gICAqIFNlZSBbbmctcGFja2FnciBpc3N1ZXMgNjk2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIG9yZGVyXG4gICAqIEBwYXJhbSBsb2NhbGVzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEByZXR1cm5zIChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNvcnRWYWx1ZXMoa2V5ID0gJycsIG9yZGVyID0gU29ydC5BU0MsIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9ucz86IEludGwuQ29sbGF0b3JPcHRpb25zKSB7XG4gICAgY29uc3QgZiA9IChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgbGV0IGNvbXBhcmlzb246IG51bWJlcjtcbiAgICAgIGNvbnN0IHZhckEgPSBVdGlscy5nZXRQcm9wZXJ0eShhLCBrZXkpO1xuICAgICAgY29uc3QgdmFyQiA9IFV0aWxzLmdldFByb3BlcnR5KGIsIGtleSk7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFyQSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhckIgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbXBhcmlzb24gPSB2YXJBIC0gdmFyQjtcbiAgICAgIH0gZWxzZSBpZiAodmFyQSBpbnN0YW5jZW9mIERhdGUgJiYgdmFyQiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgY29tcGFyaXNvbiA9IG5ldyBEYXRlKHZhckEpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHZhckIpLmdldFRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0EgPSB2YXJBIHx8IHZhckEgPT09IDAgPyB2YXJBLnRvU3RyaW5nKCkgOiAnJztcbiAgICAgICAgY29uc3Qgc3RyaW5nQiA9IHZhckIgfHwgdmFyQiA9PT0gMCA/IHZhckIudG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICBjb21wYXJpc29uID0gc3RyaW5nQS5sb2NhbGVDb21wYXJlKHN0cmluZ0IsIGxvY2FsZXMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yZGVyID09PSBTb3J0LkRFU0MgPyBjb21wYXJpc29uICogLTEgOiBjb21wYXJpc29uO1xuICAgIH07XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICAvKipcbiAgICogW25nLXBhY2thZ3IgaXNzdWVzIDY5Nl17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2RoZXJnZXMvbmctcGFja2Fnci9pc3N1ZXMvNjk2fVxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0XG4gICAqIEBwYXJhbSBzdHJpbmcga2V5XG4gICAqIEByZXR1cm5zIGFueVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0eShvYmplY3Q6IGFueSwga2V5ID0gJycpOiBhbnkge1xuICAgIGNvbnN0IGYgPSBrZXkgPyBrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqZWN0KSA6IG9iamVjdDtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb2JqZWN0XG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNldFByb3BlcnR5KG9iamVjdDogYW55LCBrZXkgPSAnJywgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgW2hlYWQsIC4uLnJlc3RdID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgIXJlc3QubGVuZ3RoID8gKG9iamVjdFtoZWFkXSA9IHZhbHVlKSA6IFV0aWxzLnNldFByb3BlcnR5KG9iamVjdFtoZWFkXSB8fCAob2JqZWN0W2hlYWRdID0ge30pLCB2YWx1ZSwgcmVzdC5qb2luKCcuJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBvbiBPYnNlcnZhYmxlLmNhdGNoIG9yIE9ic2VydmFibGUuc3Vic2NyaWJlIHRvIHJldHVybiBlbXB0eSB2YWx1ZVxuICAgKiBbbmctcGFja2FnciBpc3N1ZXMgNjk2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gICAqXG4gICAqIEBwYXJhbSAoZXJyb3IpID0+IGFueSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyAoZXJyb3IpID0+IE9ic2VydmFibGU8bmV2ZXI+XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVtcHR5KGNhbGxiYWNrPzogKGVycm9yOiBhbnkpID0+IGFueSkge1xuICAgIGNvbnN0IGYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZUVtcHR5O1xuICAgIH07XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICogVXNlIG9uIE9ic2VydmFibGUuY2F0Y2ggd2l0aCBzcGVjaWZpYyBza2lwTm90aWZpY2F0aW9uIGZ1bmN0aW9uICEhIVxuICAvLyAgKiBbbmctcGFja2FnciBpc3N1ZXMgNjk2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBza2lwTm90aWZpY2F0aW9uXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyBjYXRjaFNraXAoc2tpcE5vdGlmaWNhdGlvbj86IChlcnJvcjogYW55KSA9PiBhbnksIGNhbGxiYWNrPzogKGVycm9yOiBhbnkpID0+IGFueSwgbmFtZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAvLyAgIGNvbnN0IGYgPSAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgY29uc3QgX2Vycm9yID0gY2FsbGJhY2sgJiYgY2FsbGJhY2soZXJyb3IpO1xuICAvLyAgICAgY29uc3QgX3NraXBOb3RpZmljYXRpb24gPSBza2lwTm90aWZpY2F0aW9uICYmIHNraXBOb3RpZmljYXRpb24oZXJyb3IpO1xuICAvLyAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IFl1dkVycm9yKF9lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gX2Vycm9yIDogZXJyb3IsIG5hbWUsIG1lc3NhZ2UsIF9za2lwTm90aWZpY2F0aW9uKSk7XG4gIC8vICAgfTtcbiAgLy8gICByZXR1cm4gZjtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBVc2Ugb24gT2JzZXJ2YWJsZS5jYXRjaCAhISFcbiAgLy8gICogW25nLXBhY2thZ3IgaXNzdWVzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKiBAcGFyYW0gc2tpcE5vdGlmaWNhdGlvblxuICAvLyAgKiBAcmV0dXJuIChlcnJvcikgPT4gT2JzZXJ2YWJsZTxuZXZlcj5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBzdGF0aWMgY2F0Y2goY2FsbGJhY2s/OiAoZXJyb3I6IGFueSkgPT4gYW55LCBuYW1lPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBza2lwTm90aWZpY2F0aW9uPzogYm9vbGVhbikge1xuICAvLyAgIGNvbnN0IGYgPSAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgY29uc3QgX2Vycm9yID0gY2FsbGJhY2sgJiYgY2FsbGJhY2soZXJyb3IpO1xuICAvLyAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IFl1dkVycm9yKF9lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gX2Vycm9yIDogZXJyb3IsIG5hbWUsIG1lc3NhZ2UsIHNraXBOb3RpZmljYXRpb24pKTtcbiAgLy8gICB9O1xuICAvLyAgIHJldHVybiBmO1xuICAvLyB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFVzZSBvbiBPYnNlcnZhYmxlLnN1YnNjcmliZSAhISFcbiAgLy8gICogW25nLXBhY2thZ3IgaXNzdWVzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKiBAcGFyYW0gc2tpcE5vdGlmaWNhdGlvblxuICAvLyAgKiBAcmV0dXJuIChlcnJvcikgPT4gdm9pZFxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyB0aHJvdyhjYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiBhbnksIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIHNraXBOb3RpZmljYXRpb24/OiBib29sZWFuKSB7XG4gIC8vICAgY29uc3QgZiA9IChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICBjb25zdCBfZXJyb3IgPSBjYWxsYmFjayAmJiBjYWxsYmFjayhlcnJvcik7XG4gIC8vICAgICB0aHJvdyBuZXcgWXV2RXJyb3IoX2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBfZXJyb3IgOiBlcnJvciwgbmFtZSwgbWVzc2FnZSwgc2tpcE5vdGlmaWNhdGlvbik7XG4gIC8vICAgfTtcbiAgLy8gICByZXR1cm4gZjtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBVc2Ugb24gT2JzZXJ2YWJsZS5zdWJzY3JpYmUgb25seSBpZiB5b3Ugd2FudCB0byBza2lwIG5vdGlmaWNhdGlvbiAvIHRvYXN0ISEhXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKiBAcGFyYW0gc2tpcE5vdGlmaWNhdGlvblxuICAvLyAgKiBAcmV0dXJuIChlcnJvcikgPT4gdm9pZFxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyBsb2dFcnJvcihjYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiBhbnksIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIHNraXBOb3RpZmljYXRpb24gPSB0cnVlKSB7XG4gIC8vICAgcmV0dXJuIFV0aWxzLnRocm93KGNhbGxiYWNrLCBuYW1lLCBtZXNzYWdlLCBza2lwTm90aWZpY2F0aW9uKTtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBDaGVja3MgaWYgZWxlbWVudCBpcyB2aXNpYmxlXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBlbGVtXG4gIC8vICAqIEByZXR1cm4gYm9vbGVhblxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyBpc1Zpc2libGUoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gIC8vICAgcmV0dXJuICEhKGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCk7XG4gIC8vIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJhc2VIcmVmKHJlbW92ZVRyYWlsaW5nU2xhc2g/OiBib29sZWFuKSB7XG4gICAgY29uc3QgYmFzZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTtcbiAgICBjb25zdCBiYXNlSHJlZiA9IGJhc2VFbCA/IGJhc2VFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYmFzZUhyZWYgPyAocmVtb3ZlVHJhaWxpbmdTbGFzaCA/IGJhc2VIcmVmLnN1YnN0cigwLCBiYXNlSHJlZi5sZW5ndGggLSAxKSA6IGJhc2VIcmVmKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydW5jYXRlIGEgc3RyaW5nIChmaXJzdCBhcmd1bWVudCkgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aCAoc2Vjb25kIGFyZ3VtZW50KS5cbiAgICogUmV0dXJuIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIHdpdGggYSAuLi4gZW5kaW5nIG9yIHdoYXRzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nIHN0clxuICAgKiBAcGFyYW0gbnVtYmVyIG51bVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cnVuY2F0ZVN0cmluZyhzdHI6IHN0cmluZywgbnVtOiBudW1iZXIsIGVuZGluZyA9ICcuLi4nKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBudW0pIHtcbiAgICAgIGlmIChudW0gPiAzKSB7XG4gICAgICAgIG51bSAtPSAzO1xuICAgICAgfVxuICAgICAgc3RyID0gYCR7c3RyLnN1YnN0cmluZygwLCBudW0pfSR7ZW5kaW5nfWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBUaW1lWm9uZSBPZmZzZXN0IGFzIG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGltZXpvbmVPZmZzZXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0byBkYXRlIHdpdGggeXl5eS1tbS1kZCBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNmb3JtRGF0ZSh2OiBEYXRlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdiAmJiBuZXcgRGF0ZShuZXcgRGF0ZSh2KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh2KS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNFZGdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKCdFZGdlJywgJ2knKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJ2ZpcmVmb3gnLCAnaScpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzU2FmYXJpKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKCdeKCg/IWNocm9tZXxhbmRyb2lkfGNyaW9zfGZ4aW9zKS4pKnNhZmFyaScsICdpJykudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eShvYmo6IGFueSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT09ICcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBpc05hTihvYmopO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgPyBmYWxzZSA6ICFPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eU9yRmFsc2UodmFsOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nID8gIXZhbCA6IFV0aWxzLmlzRW1wdHkodmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXNjYXBlSHRtbChzdHI6IHN0cmluZykge1xuICAgIHN0ciA9IHN0ciA/IHN0ciA6ICcnO1xuICAgIGNvbnN0IGVudGl0eU1hcDogYW55ID0ge1xuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7JyxcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgXCInXCI6ICcmIzM5OycsXG4gICAgICAnLyc6ICcmI3gyRjsnXG4gICAgfTtcbiAgICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywgKHMpID0+IGVudGl0eU1hcFtzXSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFycmF5VG9PYmplY3Q8VD4oXG4gICAgYXJyOiBhbnlbXSA9IFtdLFxuICAgIGtleVByb3BlcnR5Pzogc3RyaW5nIHwgKChvOiBhbnkpID0+IHN0cmluZyksXG4gICAgdmFsdWVQcm9wZXJ0eT86IHN0cmluZyB8ICgobzogYW55KSA9PiBhbnkpXG4gICk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgICBjb25zdCBrZXkgPSB0eXBlb2Yga2V5UHJvcGVydHkgPT09ICdzdHJpbmcnID8gKG86IGFueSkgPT4gb1trZXlQcm9wZXJ0eV0gOiBrZXlQcm9wZXJ0eTtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZVByb3BlcnR5ID09PSAnc3RyaW5nJyA/IChvOiBhbnkpID0+IG9bdmFsdWVQcm9wZXJ0eV0gOiB2YWx1ZVByb3BlcnR5O1xuICAgIHJldHVybiBhcnIucmVkdWNlKChhY2M6IGFueSwgY3VyLCBpKSA9PiB7XG4gICAgICBhY2Nba2V5ID8ga2V5KGN1cikgOiBpXSA9IHZhbHVlID8gdmFsdWUoY3VyKSA6IGN1cjtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLy8gcHVibGljIHN0YXRpYyBuYXZpZ2F0ZShuZXdUYWI6IGJvb2xlYW4sIHJvdXRlcjogUm91dGVyLCBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzKTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gICBpZiAobmV3VGFiKSB7XG4gIC8vICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4gVXRpbHMub3BlbldpbmRvdyhyb3V0ZXIuc2VyaWFsaXplVXJsKHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLCBuYXZpZ2F0aW9uRXh0cmFzKSkpKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIHJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywgbmF2aWdhdGlvbkV4dHJhcyk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gcHVibGljIHN0YXRpYyBvcGVuV2luZG93KHVybDogc3RyaW5nID0gJycsIHRhcmdldCA9ICdfYmxhbmsnLCBmZWF0dXJlcz86IHN0cmluZyk6IFdpbmRvdyB8IG51bGwge1xuICAvLyAgIHJldHVybiB3aW5kb3cub3Blbih1cmwubWF0Y2gobmV3IFJlZ0V4cCgnXi8uKycpKSA/IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJ14vJyksICcnKSA6IHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7IC8vIHJlbGF0aXZlIHRvIGhvc3RcbiAgLy8gfVxuXG4gIHB1YmxpYyBzdGF0aWMgZG93bmxvYWRCbG9iKGNvbnRlbnQ6IGFueSwgbWltZVR5cGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGJvbSA9IG5ldyBVaW50OEFycmF5KFsweGVmLCAweGJiLCAweGJmXSk7IC8vIEZPUk0gQk9NXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtib20sIGNvbnRlbnRdLCB7IHR5cGU6ICdvY3RldC9zdHJlYW0nIH0pO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgIGEuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcbiAgICBhLmNsaWNrKCk7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXV1dmlzLWNsaWVudC1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL3l1dXZpcy1jbGllbnQtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|