@libs-ui/utils 0.2.355-8 → 0.2.356-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +633 -2
- package/base64.d.ts +25 -0
- package/cache.d.ts +73 -0
- package/collection.d.ts +12 -0
- package/color.d.ts +37 -0
- package/communicate-micro.d.ts +34 -1
- package/crypto-3rd.d.ts +12 -0
- package/crypto.d.ts +17 -0
- package/dangerous-object.d.ts +8 -1
- package/data.d.ts +5 -3
- package/date.d.ts +12 -0
- package/dom.d.ts +56 -0
- package/download.d.ts +21 -0
- package/esm2022/base64.mjs +27 -2
- package/esm2022/cache.mjs +74 -1
- package/esm2022/collection.mjs +13 -1
- package/esm2022/color.mjs +38 -1
- package/esm2022/communicate-micro.mjs +37 -5
- package/esm2022/crypto-3rd.mjs +13 -1
- package/esm2022/crypto.mjs +18 -1
- package/esm2022/dangerous-object.mjs +11 -2
- package/esm2022/data.mjs +6 -4
- package/esm2022/date.mjs +13 -1
- package/esm2022/dom.mjs +57 -1
- package/esm2022/download.mjs +22 -1
- package/esm2022/file.mjs +54 -1
- package/esm2022/format-number.mjs +31 -3
- package/esm2022/format-text.mjs +73 -2
- package/esm2022/function-check-embed-frame.mjs +28 -1
- package/esm2022/pattern.mjs +83 -3
- package/esm2022/trace.mjs +8 -1
- package/esm2022/two-way-signal-object.mjs +14 -1
- package/esm2022/uri.mjs +22 -3
- package/esm2022/url-search-params.mjs +68 -1
- package/esm2022/url.mjs +10 -1
- package/esm2022/uuid.mjs +7 -1
- package/esm2022/xss-filter.mjs +14 -1
- package/fesm2022/libs-ui-utils.mjs +723 -21
- package/fesm2022/libs-ui-utils.mjs.map +1 -1
- package/file.d.ts +53 -0
- package/format-number.d.ts +29 -1
- package/format-text.d.ts +71 -0
- package/function-check-embed-frame.d.ts +22 -0
- package/package.json +2 -2
- package/pattern.d.ts +81 -1
- package/trace.d.ts +7 -0
- package/two-way-signal-object.d.ts +13 -0
- package/uri.d.ts +20 -0
- package/url-search-params.d.ts +67 -0
- package/url.d.ts +9 -0
- package/uuid.d.ts +6 -0
- package/xss-filter.d.ts +13 -0
package/esm2022/format-text.mjs
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { CHARACTER_DATA_EMPTY } from './constants';
|
|
2
2
|
import { patternEmoji } from './pattern';
|
|
3
|
+
/**
|
|
4
|
+
* Highlight một từ khóa tìm kiếm bên trong chuỗi văn bản bằng cách bọc vào thẻ `<span>`.
|
|
5
|
+
* Hỗ trợ tìm kiếm không phân biệt dấu (Unicode-insensitive) và không phân biệt hoa/thường.
|
|
6
|
+
*
|
|
7
|
+
* @param value Chuỗi văn bản gốc cần highlight
|
|
8
|
+
* @param search Từ khóa cần tìm và highlight
|
|
9
|
+
* @param ignoreHighlight Nếu `true`, bỏ qua highlight và trả về chuỗi gốc
|
|
10
|
+
* @param classHightLight Class CSS áp dụng cho span highlight (mặc định: 'bg-[#19344a] text-white')
|
|
11
|
+
* @returns Chuỗi HTML đã được inject thẻ `<span>` quanh từ khóa
|
|
12
|
+
*/
|
|
3
13
|
export const highlightByKeyword = (value, search, ignoreHighlight, classHightLight) => {
|
|
4
14
|
if (!value) {
|
|
5
15
|
return CHARACTER_DATA_EMPTY;
|
|
@@ -40,6 +50,14 @@ const getValueReplace = (search, value) => {
|
|
|
40
50
|
}
|
|
41
51
|
return Array.from(keys);
|
|
42
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Chuẩn hóa chuỗi văn bản theo chuẩn Unicode NFC và áp dụng các tùy chọn format.
|
|
55
|
+
* Thường dùng để so sánh chuỗi nhất quán, không phụ thuộc vào cách gõ có dấu.
|
|
56
|
+
*
|
|
57
|
+
* @param text Chuỗi cần chuẩn hóa
|
|
58
|
+
* @param options Các tùy chọn transform (trim, removeEmoji, removeUnicode...)
|
|
59
|
+
* @returns Chuỗi đã chuẩn hóa
|
|
60
|
+
*/
|
|
43
61
|
export const formatTextCompare = (text, options) => {
|
|
44
62
|
if (!text) {
|
|
45
63
|
return text;
|
|
@@ -47,12 +65,25 @@ export const formatTextCompare = (text, options) => {
|
|
|
47
65
|
text = text.normalize('NFC');
|
|
48
66
|
return formatByOptions(text, options);
|
|
49
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Định dạng họ tên đầy đủ: viết hoa chữ cái đầu mỗi từ, xóa khoảng trắng thừa và emoji.
|
|
70
|
+
* @param value Chuỗi họ tên cần format
|
|
71
|
+
* @returns Chuỗi đã được chuẩn hóa
|
|
72
|
+
* @example fullNameFormat(' nguyễn văn a ') → 'Nguyễn Văn A'
|
|
73
|
+
*/
|
|
50
74
|
export const fullNameFormat = (value) => {
|
|
51
75
|
if (!value) {
|
|
52
76
|
return value;
|
|
53
77
|
}
|
|
54
78
|
return capitalize(value, { lowercaseOtherCharacter: true, trim: true, removeMultipleSpace: true, removeEmoji: true });
|
|
55
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Viết hoa chữ cái đầu tiên của mỗi từ trong chuỗi.
|
|
82
|
+
* @param text Chuỗi cần capitalize
|
|
83
|
+
* @param options Tùy chọn xử lý trước (lowercase, trim, removeEmoji...)
|
|
84
|
+
* @returns Chuỗi đã được capitalize theo từng từ
|
|
85
|
+
* @example capitalize('hello world') → 'Hello World'
|
|
86
|
+
*/
|
|
56
87
|
export const capitalize = (text, options) => {
|
|
57
88
|
if (!text) {
|
|
58
89
|
return text;
|
|
@@ -63,12 +94,26 @@ export const capitalize = (text, options) => {
|
|
|
63
94
|
.map((word) => firstLetterToUpperCase(word))
|
|
64
95
|
.join(' ');
|
|
65
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* Viết hoa chữ cái đầu tiên của chuỗi.
|
|
99
|
+
* @param text Chuỗi cần xử lý
|
|
100
|
+
* @param options Tùy chọn format bổ sung
|
|
101
|
+
* @returns Chuỗi với chữ cái đầu tiên được viết hoa
|
|
102
|
+
* @example firstLetterToUpperCase('hello') → 'Hello'
|
|
103
|
+
*/
|
|
66
104
|
export const firstLetterToUpperCase = (text, options) => {
|
|
67
105
|
if (!text) {
|
|
68
106
|
return text;
|
|
69
107
|
}
|
|
70
108
|
return uppercaseByPosition(text, 0, options);
|
|
71
109
|
};
|
|
110
|
+
/**
|
|
111
|
+
* Viết hoa một ký tự tại vị trí bất kỳ trong chuỗi.
|
|
112
|
+
* @param text Chuỗi cần xử lý
|
|
113
|
+
* @param position Vị trí ký tự cần viết hoa (0-indexed)
|
|
114
|
+
* @param options Tùy chọn format bổ sung
|
|
115
|
+
* @returns Chuỗi với ký tự tại vị trí được viết hoa
|
|
116
|
+
*/
|
|
72
117
|
export const uppercaseByPosition = (text, position, options) => {
|
|
73
118
|
if (!text) {
|
|
74
119
|
return text;
|
|
@@ -101,12 +146,25 @@ const formatByOptions = (text, options) => {
|
|
|
101
146
|
}
|
|
102
147
|
return text;
|
|
103
148
|
};
|
|
149
|
+
/**
|
|
150
|
+
* Escape các ký tự đặc biệt HTML thành HTML entities để tránh XSS.
|
|
151
|
+
* @param str Chuỗi cần escape
|
|
152
|
+
* @returns Chuỗi an toàn (& → &, < → <, > → >, " → ", ' → ')
|
|
153
|
+
* @example escapeHtml('<script>') → '<script>'
|
|
154
|
+
*/
|
|
104
155
|
export const escapeHtml = (str) => {
|
|
105
156
|
if (!str || typeof str !== 'string') {
|
|
106
157
|
return str;
|
|
107
158
|
}
|
|
108
159
|
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
109
160
|
};
|
|
161
|
+
/**
|
|
162
|
+
* Giải mã chuỗi HTML entities về dạng ký tự gốc.
|
|
163
|
+
* Sử dụng thẻ textarea để giải mã an toàn, hỗ trợ multi-level encoding.
|
|
164
|
+
* @param str Chuỗi HTML encoded cần giải mã
|
|
165
|
+
* @returns Chuỗi gốc sau khi decode
|
|
166
|
+
* @example decodeEscapeHtml('<b>') → '<b>'
|
|
167
|
+
*/
|
|
110
168
|
export const decodeEscapeHtml = (str) => {
|
|
111
169
|
const htmlTag = document.createElement('textarea');
|
|
112
170
|
htmlTag.innerHTML = str;
|
|
@@ -121,9 +179,15 @@ export const decodeEscapeHtml = (str) => {
|
|
|
121
179
|
}
|
|
122
180
|
return str;
|
|
123
181
|
};
|
|
182
|
+
/**
|
|
183
|
+
* Xóa dấu tiếng Việt khỏi chuỗi, chuyển tất cả ký tự có dấu về dạng Latin cơ bản.
|
|
184
|
+
* Hỗ trợ cả chữ thường lẫn hoa.
|
|
185
|
+
* @param str Chuỗi tiếng Việt cần xóa dấu
|
|
186
|
+
* @returns Chuỗi đã xóa dấu (vd: 'Nguyễn Văn An' → 'Nguyen Van An')
|
|
187
|
+
*/
|
|
124
188
|
export const deleteUnicode = (str) => {
|
|
125
189
|
str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');
|
|
126
|
-
str = str.replace(
|
|
190
|
+
str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');
|
|
127
191
|
str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');
|
|
128
192
|
str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');
|
|
129
193
|
str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');
|
|
@@ -140,10 +204,17 @@ export const deleteUnicode = (str) => {
|
|
|
140
204
|
str = str.replace(/\u02C6|\u0306|\u031B/g, ''); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư
|
|
141
205
|
return str.normalize('NFC');
|
|
142
206
|
};
|
|
207
|
+
/**
|
|
208
|
+
* Xóa tất cả emoji khỏi chuỗi văn bản.
|
|
209
|
+
* Sử dụng pattern regex từ `patternEmoji()` để nhận diện toàn bộ emoji Unicode.
|
|
210
|
+
* @param text Chuỗi cần xóa emoji
|
|
211
|
+
* @returns Chuỗi đã được xóa emoji
|
|
212
|
+
* @example removeEmoji('Hello 😀 World 🎉') → 'Hello World '
|
|
213
|
+
*/
|
|
143
214
|
export const removeEmoji = (text) => {
|
|
144
215
|
if (!text || !text.trim()) {
|
|
145
216
|
return text;
|
|
146
217
|
}
|
|
147
218
|
return text.replace(patternEmoji(), '');
|
|
148
219
|
};
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9mb3JtYXQtdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQXlCLEVBQUUsTUFBMEIsRUFBRSxlQUF5QixFQUFFLGVBQXdCLEVBQUUsRUFBRTtJQUMvSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFrQixlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVyQyxLQUFLLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLGVBQWUsYUFBYSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FB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T0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUU3QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztJQUN0RyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtJQUV2RSxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDMUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGV4dEZvcm1hdE9wdGlvbnMgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IENIQVJBQ1RFUl9EQVRBX0VNUFRZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcGF0dGVybkVtb2ppIH0gZnJvbSAnLi9wYXR0ZXJuJztcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodEJ5S2V5d29yZCA9ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBzZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZCwgaWdub3JlSGlnaGxpZ2h0PzogYm9vbGVhbiwgY2xhc3NIaWdodExpZ2h0Pzogc3RyaW5nKSA9PiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gQ0hBUkFDVEVSX0RBVEFfRU1QVFk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAoIXNlYXJjaCB8fCBpZ25vcmVIaWdobGlnaHQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5c1JlcGxhY2U6IEFycmF5PHN0cmluZz4gPSBnZXRWYWx1ZVJlcGxhY2Uoc2VhcmNoLCB2YWx1ZSk7XG5cbiAgICBpZiAoIWtleXNSZXBsYWNlIHx8ICFrZXlzUmVwbGFjZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKCFjbGFzc0hpZ2h0TGlnaHQpIHtcbiAgICAgIGNsYXNzSGlnaHRMaWdodCA9ICdiZy1bIzE5MzQ0YV0gdGV4dC13aGl0ZSc7XG4gICAgfVxuICAgIGtleXNSZXBsYWNlLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChrZXksICdnaScpO1xuXG4gICAgICB2YWx1ZSA9IHZhbHVlPy5yZXBsYWNlKHJlZ0V4cCwgYDxzcGFuIGNsYXNzPVwiJHtjbGFzc0hpZ2h0TGlnaHR9XCI+JCY8L3NwYW4+YCk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtZmluYWxseVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufTtcblxuY29uc3QgZ2V0VmFsdWVSZXBsYWNlID0gKHNlYXJjaDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBzZWFyY2hDb252ZXJ0ID0gZGVsZXRlVW5pY29kZShzZWFyY2gpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHZhbHVlQ29udmVydCA9IGRlbGV0ZVVuaWNvZGUodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKChpID0gdmFsdWVDb252ZXJ0LmluZGV4T2Yoc2VhcmNoQ29udmVydCwgaSkpID49IDApIHtcbiAgICBjb25zdCBlbmRJbmRleCA9IGkgKyBzZWFyY2gubGVuZ3RoO1xuXG4gICAga2V5cy5hZGQodmFsdWUuc3Vic3RyaW5nKGksIGVuZEluZGV4KSk7XG4gICAgaSArPSArdmFsdWVDb252ZXJ0Lmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGtleXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFRleHRDb21wYXJlID0gKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IElUZXh0Rm9ybWF0T3B0aW9ucykgPT4ge1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRleHQgPSB0ZXh0Lm5vcm1hbGl6ZSgnTkZDJyk7XG5cbiAgcmV0dXJuIGZvcm1hdEJ5T3B0aW9ucyh0ZXh0LCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmdWxsTmFtZUZvcm1hdCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGNhcGl0YWxpemUodmFsdWUsIHsgbG93ZXJjYXNlT3RoZXJDaGFyYWN0ZXI6IHRydWUsIHRyaW06IHRydWUsIHJlbW92ZU11bHRpcGxlU3BhY2U6IHRydWUsIHJlbW92ZUVtb2ppOiB0cnVlIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhcGl0YWxpemUgPSAodGV4dDogc3RyaW5nLCBvcHRpb25zPzogSVRleHRGb3JtYXRPcHRpb25zKSA9PiB7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHRleHQgPSBmb3JtYXRCeU9wdGlvbnModGV4dCwgb3B0aW9ucyk7XG4gIHJldHVybiB0ZXh0XG4gICAgLnNwbGl0KCcgJylcbiAgICAubWFwKCh3b3JkKSA9PiBmaXJzdExldHRlclRvVXBwZXJDYXNlKHdvcmQpKVxuICAgIC5qb2luKCcgJyk7XG59O1xuXG5leHBvcnQgY29uc3QgZmlyc3RMZXR0ZXJUb1VwcGVyQ2FzZSA9ICh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBJVGV4dEZvcm1hdE9wdGlvbnMpID0+IHtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcmV0dXJuIHVwcGVyY2FzZUJ5UG9zaXRpb24odGV4dCwgMCwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBwZXJjYXNlQnlQb3NpdGlvbiA9ICh0ZXh0OiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsIG9wdGlvbnM/OiBJVGV4dEZvcm1hdE9wdGlvbnMpID0+IHtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgdGV4dCA9IGZvcm1hdEJ5T3B0aW9ucyh0ZXh0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGAke3RleHQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKX0ke3RleHQuY2hhckF0KHBvc2l0aW9uKS50b1VwcGVyQ2FzZSgpfSR7dGV4dC5zdWJzdHJpbmcocG9zaXRpb24gKyAxKX1gO1xufTtcblxuY29uc3QgZm9ybWF0QnlPcHRpb25zID0gKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IElUZXh0Rm9ybWF0T3B0aW9ucykgPT4ge1xuICBpZiAoIXRleHQgfHwgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICBpZiAob3B0aW9ucz8udXBwZXJjYXNlT3RoZXJDaGFyYWN0ZXIpIHtcbiAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/Lmxvd2VyY2FzZU90aGVyQ2hhcmFjdGVyKSB7XG4gICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5yZW1vdmVNdWx0aXBsZVNwYWNlKSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFx1MjAwQnxcXHUwMEEwL2csICcnKTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucmVtb3ZlRW1vamkpIHtcbiAgICB0ZXh0ID0gcmVtb3ZlRW1vamkodGV4dCk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucmVtb3ZlVW5pY29kZSkge1xuICAgIHRleHQgPSBkZWxldGVVbmljb2RlKHRleHQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/LnRyaW0pIHtcbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBlc2NhcGVIdG1sID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpLnJlcGxhY2UoLycvZywgJyYjMDM5OycpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY29kZUVzY2FwZUh0bWwgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBodG1sVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcblxuICBodG1sVGFnLmlubmVySFRNTCA9IHN0cjtcbiAgd2hpbGUgKHN0cikge1xuICAgIGlmIChzdHIgPT09IGh0bWxUYWcudmFsdWUpIHtcbiAgICAgIHN0ciA9IGh0bWxUYWcudmFsdWU7XG4gICAgICBodG1sVGFnLnJlbW92ZSgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHN0ciA9IGh0bWxUYWcudmFsdWU7XG4gICAgaHRtbFRhZy5pbm5lckhUTUwgPSBzdHI7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVuaWNvZGUgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OgfMOhfOG6oXzhuqN8w6N8w6J84bqnfOG6pXzhuq184bqpfOG6q3zEg3zhurF84bqvfOG6t3zhurN84bq1L2csICdhJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N8w6rMg3zhu4UvZywgJ2UnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OsfMOtfOG7i3zhu4l8xKkvZywgJ2knKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OyfMOzfOG7jXzhu498w7V8w7R84buTfOG7kXzhu5l84buVfOG7l3zGoXzhu5184bubfOG7o3zhu5984buhL2csICdvJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DuXzDunzhu6V84bunfMWpfMawfOG7q3zhu6l84buxfOG7rXzhu68vZywgJ3UnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL+G7s3zDvXzhu7V84bu3fOG7uS9nLCAneScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvxJEvZywgJ2QnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OAfMOBfOG6oHzhuqJ8w4N8w4J84bqmfOG6pHzhuqx84bqofOG6qnzEgnzhurB84bqufOG6tnzhurJ84bq0L2csICdBJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DiHzDiXzhurh84bq6fOG6vHzDinzhu4B84bq+fOG7hnzhu4J84buEL2csICdFJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DjHzDjXzhu4p84buIfMSoL2csICdJJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DknzDk3zhu4x84buOfMOVfMOUfOG7knzhu5B84buYfOG7lHzhu5Z8xqB84bucfOG7mnzhu6J84buefOG7oC9nLCAnTycpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw5l8w5p84bukfOG7pnzFqHzGr3zhu6p84buofOG7sHzhu6x84buuL2csICdVJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/hu7J8w5184bu0fOG7tnzhu7gvZywgJ1knKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8SQL2csICdEJyk7XG5cbiAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAzMDB8XFx1MDMwMXxcXHUwMzAzfFxcdTAzMDl8XFx1MDMyMy9nLCAnJyk7IC8vIMyAIMyBIMyDIMyJIMyjICBodXnhu4FuLCBz4bqvYywgbmfDoywgaOG7j2ksIG7hurduZ1xuICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDJDNnxcXHUwMzA2fFxcdTAzMUIvZywgJycpOyAvLyDLhiDMhiDMmyAgw4IsIMOKLCDEgiwgxqAsIMavXG5cbiAgcmV0dXJuIHN0ci5ub3JtYWxpemUoJ05GQycpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUVtb2ppID0gKHRleHQ6IHN0cmluZykgPT4ge1xuICBpZiAoIXRleHQgfHwgIXRleHQudHJpbSgpKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICByZXR1cm4gdGV4dC5yZXBsYWNlKHBhdHRlcm5FbW9qaSgpLCAnJyk7XG59O1xuIl19
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9mb3JtYXQtdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQXlCLEVBQUUsTUFBMEIsRUFBRSxlQUF5QixFQUFFLGVBQXdCLEVBQUUsRUFBRTtJQUMvSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFrQixlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVyQyxLQUFLLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLGVBQWUsYUFBYSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMs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RyxHQUFHLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFN0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7SUFDdEcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUI7SUFFdkUsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQzFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVRleHRGb3JtYXRPcHRpb25zIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBDSEFSQUNURVJfREFUQV9FTVBUWSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHBhdHRlcm5FbW9qaSB9IGZyb20gJy4vcGF0dGVybic7XG5cbi8qKlxuICogSGlnaGxpZ2h0IG3hu5l0IHThu6sga2jDs2EgdMOsbSBraeG6v20gYsOqbiB0cm9uZyBjaHXhu5dpIHbEg24gYuG6o24gYuG6sW5nIGPDoWNoIGLhu41jIHbDoG8gdGjhursgYDxzcGFuPmAuXG4gKiBI4buXIHRy4bujIHTDrG0ga2nhur9tIGtow7RuZyBwaMOibiBiaeG7h3QgZOG6pXUgKFVuaWNvZGUtaW5zZW5zaXRpdmUpIHbDoCBraMO0bmcgcGjDom4gYmnhu4d0IGhvYS90aMaw4budbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIENodeG7l2kgdsSDbiBi4bqjbiBn4buRYyBj4bqnbiBoaWdobGlnaHRcbiAqIEBwYXJhbSBzZWFyY2ggVOG7qyBraMOzYSBj4bqnbiB0w6xtIHbDoCBoaWdobGlnaHRcbiAqIEBwYXJhbSBpZ25vcmVIaWdobGlnaHQgTuG6v3UgYHRydWVgLCBi4buPIHF1YSBoaWdobGlnaHQgdsOgIHRy4bqjIHbhu4EgY2h14buXaSBn4buRY1xuICogQHBhcmFtIGNsYXNzSGlnaHRMaWdodCBDbGFzcyBDU1Mgw6FwIGThu6VuZyBjaG8gc3BhbiBoaWdobGlnaHQgKG3hurdjIMSR4buLbmg6ICdiZy1bIzE5MzQ0YV0gdGV4dC13aGl0ZScpXG4gKiBAcmV0dXJucyBDaHXhu5dpIEhUTUwgxJHDoyDEkcaw4bujYyBpbmplY3QgdGjhursgYDxzcGFuPmAgcXVhbmggdOG7qyBraMOzYVxuICovXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0QnlLZXl3b3JkID0gKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkLCBpZ25vcmVIaWdobGlnaHQ/OiBib29sZWFuLCBjbGFzc0hpZ2h0TGlnaHQ/OiBzdHJpbmcpID0+IHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBDSEFSQUNURVJfREFUQV9FTVBUWTtcbiAgfVxuICB0cnkge1xuICAgIGlmICghc2VhcmNoIHx8IGlnbm9yZUhpZ2hsaWdodCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBrZXlzUmVwbGFjZTogQXJyYXk8c3RyaW5nPiA9IGdldFZhbHVlUmVwbGFjZShzZWFyY2gsIHZhbHVlKTtcblxuICAgIGlmICgha2V5c1JlcGxhY2UgfHwgIWtleXNSZXBsYWNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoIWNsYXNzSGlnaHRMaWdodCkge1xuICAgICAgY2xhc3NIaWdodExpZ2h0ID0gJ2JnLVsjMTkzNDRhXSB0ZXh0LXdoaXRlJztcbiAgICB9XG4gICAga2V5c1JlcGxhY2UuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGtleSwgJ2dpJyk7XG5cbiAgICAgIHZhbHVlID0gdmFsdWU/LnJlcGxhY2UocmVnRXhwLCBgPHNwYW4gY2xhc3M9XCIke2NsYXNzSGlnaHRMaWdodH1cIj4kJjwvc3Bhbj5gKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5jb25zdCBnZXRWYWx1ZVJlcGxhY2UgPSAoc2VhcmNoOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHNlYXJjaENvbnZlcnQgPSBkZWxldGVVbmljb2RlKHNlYXJjaCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgdmFsdWVDb252ZXJ0ID0gZGVsZXRlVW5pY29kZSh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoKGkgPSB2YWx1ZUNvbnZlcnQuaW5kZXhPZihzZWFyY2hDb252ZXJ0LCBpKSkgPj0gMCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0gaSArIHNlYXJjaC5sZW5ndGg7XG5cbiAgICBrZXlzLmFkZCh2YWx1ZS5zdWJzdHJpbmcoaSwgZW5kSW5kZXgpKTtcbiAgICBpICs9ICt2YWx1ZUNvbnZlcnQubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oa2V5cyk7XG59O1xuXG4vKipcbiAqIENodeG6qW4gaMOzYSBjaHXhu5dpIHbEg24gYuG6o24gdGhlbyBjaHXhuqluIFVuaWNvZGUgTkZDIHbDoCDDoXAgZOG7pW5nIGPDoWMgdMO5eSBjaOG7jW4gZm9ybWF0LlxuICogVGjGsOG7nW5nIGTDuW5nIMSR4buDIHNvIHPDoW5oIGNodeG7l2kgbmjhuqV0IHF1w6FuLCBraMO0bmcgcGjhu6UgdGh14buZYyB2w6BvIGPDoWNoIGfDtSBjw7MgZOG6pXUuXG4gKlxuICogQHBhcmFtIHRleHQgQ2h14buXaSBj4bqnbiBjaHXhuqluIGjDs2FcbiAqIEBwYXJhbSBvcHRpb25zIEPDoWMgdMO5eSBjaOG7jW4gdHJhbnNmb3JtICh0cmltLCByZW1vdmVFbW9qaSwgcmVtb3ZlVW5pY29kZS4uLilcbiAqIEByZXR1cm5zIENodeG7l2kgxJHDoyBjaHXhuqluIGjDs2FcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdFRleHRDb21wYXJlID0gKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IElUZXh0Rm9ybWF0T3B0aW9ucykgPT4ge1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRleHQgPSB0ZXh0Lm5vcm1hbGl6ZSgnTkZDJyk7XG5cbiAgcmV0dXJuIGZvcm1hdEJ5T3B0aW9ucyh0ZXh0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogxJDhu4tuaCBk4bqhbmcgaOG7jSB0w6puIMSR4bqneSDEkeG7pzogdmnhur90IGhvYSBjaOG7ryBjw6FpIMSR4bqndSBt4buXaSB04burLCB4w7NhIGtob+G6o25nIHRy4bqvbmcgdGjhu6thIHbDoCBlbW9qaS5cbiAqIEBwYXJhbSB2YWx1ZSBDaHXhu5dpIGjhu40gdMOqbiBj4bqnbiBmb3JtYXRcbiAqIEByZXR1cm5zIENodeG7l2kgxJHDoyDEkcaw4bujYyBjaHXhuqluIGjDs2FcbiAqIEBleGFtcGxlIGZ1bGxOYW1lRm9ybWF0KCcgIG5ndXnhu4VuIHbEg24gYSAgJykg4oaSICdOZ3V54buFbiBWxINuIEEnXG4gKi9cbmV4cG9ydCBjb25zdCBmdWxsTmFtZUZvcm1hdCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGNhcGl0YWxpemUodmFsdWUsIHsgbG93ZXJjYXNlT3RoZXJDaGFyYWN0ZXI6IHRydWUsIHRyaW06IHRydWUsIHJlbW92ZU11bHRpcGxlU3BhY2U6IHRydWUsIHJlbW92ZUVtb2ppOiB0cnVlIH0pO1xufTtcblxuLyoqXG4gKiBWaeG6v3QgaG9hIGNo4buvIGPDoWkgxJHhuqd1IHRpw6puIGPhu6dhIG3hu5dpIHThu6sgdHJvbmcgY2h14buXaS5cbiAqIEBwYXJhbSB0ZXh0IENodeG7l2kgY+G6p24gY2FwaXRhbGl6ZVxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4geOG7rSBsw70gdHLGsOG7m2MgKGxvd2VyY2FzZSwgdHJpbSwgcmVtb3ZlRW1vamkuLi4pXG4gKiBAcmV0dXJucyBDaHXhu5dpIMSRw6MgxJHGsOG7o2MgY2FwaXRhbGl6ZSB0aGVvIHThu6tuZyB04burXG4gKiBAZXhhbXBsZSBjYXBpdGFsaXplKCdoZWxsbyB3b3JsZCcpIOKGkiAnSGVsbG8gV29ybGQnXG4gKi9cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IElUZXh0Rm9ybWF0T3B0aW9ucykgPT4ge1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICB0ZXh0ID0gZm9ybWF0QnlPcHRpb25zKHRleHQsIG9wdGlvbnMpO1xuICByZXR1cm4gdGV4dFxuICAgIC5zcGxpdCgnICcpXG4gICAgLm1hcCgod29yZCkgPT4gZmlyc3RMZXR0ZXJUb1VwcGVyQ2FzZSh3b3JkKSlcbiAgICAuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBWaeG6v3QgaG9hIGNo4buvIGPDoWkgxJHhuqd1IHRpw6puIGPhu6dhIGNodeG7l2kuXG4gKiBAcGFyYW0gdGV4dCBDaHXhu5dpIGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0gb3B0aW9ucyBUw7l5IGNo4buNbiBmb3JtYXQgYuG7lSBzdW5nXG4gKiBAcmV0dXJucyBDaHXhu5dpIHbhu5tpIGNo4buvIGPDoWkgxJHhuqd1IHRpw6puIMSRxrDhu6NjIHZp4bq/dCBob2FcbiAqIEBleGFtcGxlIGZpcnN0TGV0dGVyVG9VcHBlckNhc2UoJ2hlbGxvJykg4oaSICdIZWxsbydcbiAqL1xuZXhwb3J0IGNvbnN0IGZpcnN0TGV0dGVyVG9VcHBlckNhc2UgPSAodGV4dDogc3RyaW5nLCBvcHRpb25zPzogSVRleHRGb3JtYXRPcHRpb25zKSA9PiB7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHJldHVybiB1cHBlcmNhc2VCeVBvc2l0aW9uKHRleHQsIDAsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBWaeG6v3QgaG9hIG3hu5l0IGvDvSB04buxIHThuqFpIHbhu4sgdHLDrSBi4bqldCBr4buzIHRyb25nIGNodeG7l2kuXG4gKiBAcGFyYW0gdGV4dCBDaHXhu5dpIGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0gcG9zaXRpb24gVuG7iyB0csOtIGvDvSB04buxIGPhuqduIHZp4bq/dCBob2EgKDAtaW5kZXhlZClcbiAqIEBwYXJhbSBvcHRpb25zIFTDuXkgY2jhu41uIGZvcm1hdCBi4buVIHN1bmdcbiAqIEByZXR1cm5zIENodeG7l2kgduG7m2kga8O9IHThu7EgdOG6oWkgduG7iyB0csOtIMSRxrDhu6NjIHZp4bq/dCBob2FcbiAqL1xuZXhwb3J0IGNvbnN0IHVwcGVyY2FzZUJ5UG9zaXRpb24gPSAodGV4dDogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyLCBvcHRpb25zPzogSVRleHRGb3JtYXRPcHRpb25zKSA9PiB7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHRleHQgPSBmb3JtYXRCeU9wdGlvbnModGV4dCwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHt0ZXh0LnN1YnN0cmluZygwLCBwb3NpdGlvbil9JHt0ZXh0LmNoYXJBdChwb3NpdGlvbikudG9VcHBlckNhc2UoKX0ke3RleHQuc3Vic3RyaW5nKHBvc2l0aW9uICsgMSl9YDtcbn07XG5cbmNvbnN0IGZvcm1hdEJ5T3B0aW9ucyA9ICh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBJVGV4dEZvcm1hdE9wdGlvbnMpID0+IHtcbiAgaWYgKCF0ZXh0IHx8ICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgaWYgKG9wdGlvbnM/LnVwcGVyY2FzZU90aGVyQ2hhcmFjdGVyKSB7XG4gICAgdGV4dCA9IHRleHQudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5sb3dlcmNhc2VPdGhlckNoYXJhY3Rlcikge1xuICAgIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucmVtb3ZlTXVsdGlwbGVTcGFjZSkge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcdTIwMEJ8XFx1MDBBMC9nLCAnJyk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/LnJlbW92ZUVtb2ppKSB7XG4gICAgdGV4dCA9IHJlbW92ZUVtb2ppKHRleHQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/LnJlbW92ZVVuaWNvZGUpIHtcbiAgICB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0ZXh0KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy50cmltKSB7XG4gICAgdGV4dCA9IHRleHQudHJpbSgpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuXG4vKipcbiAqIEVzY2FwZSBjw6FjIGvDvSB04buxIMSR4bq3YyBiaeG7h3QgSFRNTCB0aMOgbmggSFRNTCBlbnRpdGllcyDEkeG7gyB0csOhbmggWFNTLlxuICogQHBhcmFtIHN0ciBDaHXhu5dpIGPhuqduIGVzY2FwZVxuICogQHJldHVybnMgQ2h14buXaSBhbiB0b8OgbiAoJiDihpIgJmFtcDssIDwg4oaSICZsdDssID4g4oaSICZndDssIFwiIOKGkiAmcXVvdDssICcg4oaSICYjMDM5OylcbiAqIEBleGFtcGxlIGVzY2FwZUh0bWwoJzxzY3JpcHQ+Jykg4oaSICcmbHQ7c2NyaXB0Jmd0OydcbiAqL1xuZXhwb3J0IGNvbnN0IGVzY2FwZUh0bWwgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykucmVwbGFjZSgvJy9nLCAnJiMwMzk7Jyk7XG59O1xuXG4vKipcbiAqIEdp4bqjaSBtw6MgY2h14buXaSBIVE1MIGVudGl0aWVzIHbhu4EgZOG6oW5nIGvDvSB04buxIGfhu5FjLlxuICogU+G7rSBk4bulbmcgdGjhursgdGV4dGFyZWEgxJHhu4MgZ2nhuqNpIG3DoyBhbiB0b8OgbiwgaOG7lyB0cuG7oyBtdWx0aS1sZXZlbCBlbmNvZGluZy5cbiAqIEBwYXJhbSBzdHIgQ2h14buXaSBIVE1MIGVuY29kZWQgY+G6p24gZ2nhuqNpIG3Do1xuICogQHJldHVybnMgQ2h14buXaSBn4buRYyBzYXUga2hpIGRlY29kZVxuICogQGV4YW1wbGUgZGVjb2RlRXNjYXBlSHRtbCgnJmx0O2ImZ3Q7Jykg4oaSICc8Yj4nXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNvZGVFc2NhcGVIdG1sID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaHRtbFRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG5cbiAgaHRtbFRhZy5pbm5lckhUTUwgPSBzdHI7XG4gIHdoaWxlIChzdHIpIHtcbiAgICBpZiAoc3RyID09PSBodG1sVGFnLnZhbHVlKSB7XG4gICAgICBzdHIgPSBodG1sVGFnLnZhbHVlO1xuICAgICAgaHRtbFRhZy5yZW1vdmUoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzdHIgPSBodG1sVGFnLnZhbHVlO1xuICAgIGh0bWxUYWcuaW5uZXJIVE1MID0gc3RyO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogWMOzYSBk4bqldSB0aeG6v25nIFZp4buHdCBraOG7j2kgY2h14buXaSwgY2h1eeG7g24gdOG6pXQgY+G6oyBrw70gdOG7sSBjw7MgZOG6pXUgduG7gSBk4bqhbmcgTGF0aW4gY8ahIGLhuqNuLlxuICogSOG7lyB0cuG7oyBj4bqjIGNo4buvIHRoxrDhu51uZyBs4bqrbiBob2EuXG4gKiBAcGFyYW0gc3RyIENodeG7l2kgdGnhur9uZyBWaeG7h3QgY+G6p24geMOzYSBk4bqldVxuICogQHJldHVybnMgQ2h14buXaSDEkcOjIHjDs2EgZOG6pXUgKHZkOiAnTmd1eeG7hW4gVsSDbiBBbicg4oaSICdOZ3V5ZW4gVmFuIEFuJylcbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGV0ZVVuaWNvZGUgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OgfMOhfOG6oXzhuqN8w6N8w6J84bqnfOG6pXzhuq184bqpfOG6q3zEg3zhurF84bqvfOG6t3zhurN84bq1L2csICdhJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFfOG7hS9nLCAnZScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw6x8w6184buLfOG7iXzEqS9nLCAnaScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8O5fMO6fOG7pXzhu6d8xal8xrB84burfOG7qXzhu7F84butfOG7ry9nLCAndScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgv4buzfMO9fOG7tXzhu7d84bu5L2csICd5Jyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw4B8w4F84bqgfOG6onzDg3zDgnzhuqZ84bqkfOG6rHzhuqh84bqqfMSCfOG6sHzhuq584bq2fOG6snzhurQvZywgJ0EnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OIfMOJfOG6uHzhurp84bq8fMOKfOG7gHzhur584buGfOG7gnzhu4QvZywgJ0UnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OMfMONfOG7inzhu4h8xKgvZywgJ0knKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OSfMOTfOG7jHzhu458w5V8w5R84buSfOG7kHzhu5h84buUfOG7lnzGoHzhu5x84buafOG7onzhu5584bugL2csICdPJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DmXzDmnzhu6R84bumfMWofMavfOG7qnzhu6h84buwfOG7rHzhu64vZywgJ1UnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL+G7snzDnXzhu7R84bu2fOG7uC9nLCAnWScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvxJAvZywgJ0QnKTtcblxuICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDMwMHxcXHUwMzAxfFxcdTAzMDN8XFx1MDMwOXxcXHUwMzIzL2csICcnKTsgLy8gzIAgzIEgzIMgzIkgzKMgIGh1eeG7gW4sIHPhuq9jLCBuZ8OjLCBo4buPaSwgbuG6t25nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMkM2fFxcdTAzMDZ8XFx1MDMxQi9nLCAnJyk7IC8vIMuGIMyGIMybICDDgiwgw4osIMSCLCDGoCwgxq9cblxuICByZXR1cm4gc3RyLm5vcm1hbGl6ZSgnTkZDJyk7XG59O1xuXG4vKipcbiAqIFjDs2EgdOG6pXQgY+G6oyBlbW9qaSBraOG7j2kgY2h14buXaSB2xINuIGLhuqNuLlxuICogU+G7rSBk4bulbmcgcGF0dGVybiByZWdleCB04burIGBwYXR0ZXJuRW1vamkoKWAgxJHhu4Mgbmjhuq1uIGRp4buHbiB0b8OgbiBi4buZIGVtb2ppIFVuaWNvZGUuXG4gKiBAcGFyYW0gdGV4dCBDaHXhu5dpIGPhuqduIHjDs2EgZW1vamlcbiAqIEByZXR1cm5zIENodeG7l2kgxJHDoyDEkcaw4bujYyB4w7NhIGVtb2ppXG4gKiBAZXhhbXBsZSByZW1vdmVFbW9qaSgnSGVsbG8g8J+YgCBXb3JsZCDwn46JJykg4oaSICdIZWxsbyAgV29ybGQgJ1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRW1vamkgPSAodGV4dDogc3RyaW5nKSA9PiB7XG4gIGlmICghdGV4dCB8fCAhdGV4dC50cmltKCkpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHJldHVybiB0ZXh0LnJlcGxhY2UocGF0dGVybkVtb2ppKCksICcnKTtcbn07XG4iXX0=
|
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test
|
|
2
|
+
/**
|
|
3
|
+
* Hàm kiểm tra mặc định — phát hiện ứng dụng đang chạy trong iframe/embed frame
|
|
4
|
+
* bằng cách so sánh `window.parent` với `window.top`.
|
|
5
|
+
* Có thể bị ghi đè bởi `updateFunctionCheckEmbedFrame` cho môi trường tùy chỉnh.
|
|
6
|
+
*/
|
|
2
7
|
let functionCheck = () => {
|
|
3
8
|
return window.parent !== window.top;
|
|
4
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Ghi đè hàm kiểm tra embed frame bằng một hàm logic tùy chỉnh.
|
|
12
|
+
* Hữu ích trong môi trường Micro-frontend hoặc khi cần mock cho testing.
|
|
13
|
+
*
|
|
14
|
+
* @param functionCustom Hàm trả về `true` nếu app đang chạy trong iframe/embed frame
|
|
15
|
+
* @example
|
|
16
|
+
* // Micro-frontend: luôn coi là embed
|
|
17
|
+
* updateFunctionCheckEmbedFrame(() => true);
|
|
18
|
+
*
|
|
19
|
+
* // Testing: luôn coi là không embed
|
|
20
|
+
* updateFunctionCheckEmbedFrame(() => false);
|
|
21
|
+
*/
|
|
5
22
|
export const updateFunctionCheckEmbedFrame = (functionCustom) => {
|
|
6
23
|
functionCheck = functionCustom;
|
|
7
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Kiểm tra ứng dụng hiện tại có đang được nhúng trong iframe/embed frame hay không.
|
|
27
|
+
* Sử dụng hàm logic đang được đăng ký (mặc định hoặc custom).
|
|
28
|
+
*
|
|
29
|
+
* @returns `true` nếu app đang chạy trong iframe/embed, `false` nếu đang chạy standalone
|
|
30
|
+
* @example
|
|
31
|
+
* if (isEmbedFrame()) {
|
|
32
|
+
* // Ẩn header, sidebar vì đã có container bên ngoài quản lý
|
|
33
|
+
* }
|
|
34
|
+
*/
|
|
8
35
|
export const isEmbedFrame = () => {
|
|
9
36
|
return functionCheck();
|
|
10
37
|
};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY2hlY2stZW1iZWQtZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9mdW5jdGlvbi1jaGVjay1lbWJlZC1mcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3RUFBd0U7QUFFeEU7Ozs7R0FJRztBQUNILElBQUksYUFBYSxHQUFHLEdBQUcsRUFBRTtJQUN2QixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsY0FBNkIsRUFBRSxFQUFFO0lBQzdFLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQVksRUFBRTtJQUN4QyxPQUFPLGFBQWEsRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vTk9URTogRG8gbMOgIGZ1bmN0aW9uIHRydXnhu4FuIHThu6sgYsOqbiBuZ2/DoGkgdsOgbyBuw6puIHPhur0ga2jDtG5nIGPDsyB1bml0IHRlc3RcblxuLyoqXG4gKiBIw6BtIGtp4buDbSB0cmEgbeG6t2MgxJHhu4tuaCDigJQgcGjDoXQgaGnhu4duIOG7qW5nIGThu6VuZyDEkWFuZyBjaOG6oXkgdHJvbmcgaWZyYW1lL2VtYmVkIGZyYW1lXG4gKiBi4bqxbmcgY8OhY2ggc28gc8OhbmggYHdpbmRvdy5wYXJlbnRgIHbhu5tpIGB3aW5kb3cudG9wYC5cbiAqIEPDsyB0aOG7gyBi4buLIGdoaSDEkcOoIGLhu59pIGB1cGRhdGVGdW5jdGlvbkNoZWNrRW1iZWRGcmFtZWAgY2hvIG3DtGkgdHLGsOG7nW5nIHTDuXkgY2jhu4luaC5cbiAqL1xubGV0IGZ1bmN0aW9uQ2hlY2sgPSAoKSA9PiB7XG4gIHJldHVybiB3aW5kb3cucGFyZW50ICE9PSB3aW5kb3cudG9wO1xufTtcblxuLyoqXG4gKiBHaGkgxJHDqCBow6BtIGtp4buDbSB0cmEgZW1iZWQgZnJhbWUgYuG6sW5nIG3hu5l0IGjDoG0gbG9naWMgdMO5eSBjaOG7iW5oLlxuICogSOG7r3Ugw61jaCB0cm9uZyBtw7RpIHRyxrDhu51uZyBNaWNyby1mcm9udGVuZCBob+G6t2Mga2hpIGPhuqduIG1vY2sgY2hvIHRlc3RpbmcuXG4gKlxuICogQHBhcmFtIGZ1bmN0aW9uQ3VzdG9tIEjDoG0gdHLhuqMgduG7gSBgdHJ1ZWAgbuG6v3UgYXBwIMSRYW5nIGNo4bqheSB0cm9uZyBpZnJhbWUvZW1iZWQgZnJhbWVcbiAqIEBleGFtcGxlXG4gKiAvLyBNaWNyby1mcm9udGVuZDogbHXDtG4gY29pIGzDoCBlbWJlZFxuICogdXBkYXRlRnVuY3Rpb25DaGVja0VtYmVkRnJhbWUoKCkgPT4gdHJ1ZSk7XG4gKlxuICogLy8gVGVzdGluZzogbHXDtG4gY29pIGzDoCBraMO0bmcgZW1iZWRcbiAqIHVwZGF0ZUZ1bmN0aW9uQ2hlY2tFbWJlZEZyYW1lKCgpID0+IGZhbHNlKTtcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZ1bmN0aW9uQ2hlY2tFbWJlZEZyYW1lID0gKGZ1bmN0aW9uQ3VzdG9tOiAoKSA9PiBib29sZWFuKSA9PiB7XG4gIGZ1bmN0aW9uQ2hlY2sgPSBmdW5jdGlvbkN1c3RvbTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDhu6luZyBk4bulbmcgaGnhu4duIHThuqFpIGPDsyDEkWFuZyDEkcaw4bujYyBuaMO6bmcgdHJvbmcgaWZyYW1lL2VtYmVkIGZyYW1lIGhheSBraMO0bmcuXG4gKiBT4butIGThu6VuZyBow6BtIGxvZ2ljIMSRYW5nIMSRxrDhu6NjIMSRxINuZyBrw70gKG3hurdjIMSR4buLbmggaG/hurdjIGN1c3RvbSkuXG4gKlxuICogQHJldHVybnMgYHRydWVgIG7hur91IGFwcCDEkWFuZyBjaOG6oXkgdHJvbmcgaWZyYW1lL2VtYmVkLCBgZmFsc2VgIG7hur91IMSRYW5nIGNo4bqheSBzdGFuZGFsb25lXG4gKiBAZXhhbXBsZVxuICogaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gKiAgIC8vIOG6qG4gaGVhZGVyLCBzaWRlYmFyIHbDrCDEkcOjIGPDsyBjb250YWluZXIgYsOqbiBuZ2/DoGkgcXXhuqNuIGzDvVxuICogfVxuICovXG5leHBvcnQgY29uc3QgaXNFbWJlZEZyYW1lID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZnVuY3Rpb25DaGVjaygpO1xufTtcbiJdfQ==
|
package/esm2022/pattern.mjs
CHANGED
|
@@ -1,62 +1,142 @@
|
|
|
1
1
|
/* eslint-disable no-useless-escape */
|
|
2
|
+
/**
|
|
3
|
+
* Returns regex for email validation
|
|
4
|
+
* @returns {RegExp}
|
|
5
|
+
*/
|
|
2
6
|
export const patternEmail = () => {
|
|
3
7
|
return /^[A-z0-9]+[A-z0-9\_\.\+\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\_\.\+\-]*[A-z0-9]\.[A-z0-9]+[A-z0-9\_\.\+\-]*[A-z0-9]$/;
|
|
4
8
|
};
|
|
5
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Returns regex for protocol in URL (http, https, ftp)
|
|
11
|
+
* @returns {RegExp}
|
|
12
|
+
*/
|
|
13
|
+
export const patternProtocolUrl = () => {
|
|
6
14
|
return /(http|https|ftp):/;
|
|
7
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Returns regex for full URL validation
|
|
18
|
+
* @returns {RegExp}
|
|
19
|
+
*/
|
|
8
20
|
export const patternUrl = () => {
|
|
9
21
|
return /^(http|https|ftp):(\/){2}[^\s]+[.]{1}[^\s]+$/;
|
|
10
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Returns regex for host part of URL
|
|
25
|
+
* @returns {RegExp}
|
|
26
|
+
*/
|
|
11
27
|
export const patternHostUrl = () => {
|
|
12
28
|
return /^((https|http|ftp):[/]{2}[^/\s]+)/;
|
|
13
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Returns regex for domain validation
|
|
32
|
+
* @returns {RegExp}
|
|
33
|
+
*/
|
|
14
34
|
export const patternDomain = () => {
|
|
15
|
-
return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\.[a-zA-Z]{2,
|
|
35
|
+
return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\.[a-zA-Z]{2,})+$/;
|
|
16
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Returns regex for Vietnamese mobile phone validation
|
|
39
|
+
* @returns {RegExp}
|
|
40
|
+
*/
|
|
17
41
|
export const patternMobilePhone = () => {
|
|
18
42
|
return /^(\+?84|0|84)([0-9]{9})$/;
|
|
19
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Returns regex for general phone number validation
|
|
46
|
+
* @returns {RegExp}
|
|
47
|
+
*/
|
|
20
48
|
export const patternPhone = () => {
|
|
21
49
|
return /^(\+?84|[0-9]|84)([0-9]{2,9})$/;
|
|
22
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Returns regex for digits
|
|
53
|
+
* @returns {RegExp}
|
|
54
|
+
*/
|
|
23
55
|
export const patternNumber = () => {
|
|
24
56
|
return /\d+/g;
|
|
25
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Returns regex for encoded URI characters
|
|
60
|
+
* @returns {RegExp}
|
|
61
|
+
*/
|
|
26
62
|
export const patternEncodeUri = () => {
|
|
27
63
|
return /%([0-9A-F]{2})/g;
|
|
28
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* Returns regex for standard name (alphanumeric and spaces)
|
|
67
|
+
* @returns {RegExp}
|
|
68
|
+
*/
|
|
29
69
|
export const patternName = () => {
|
|
30
70
|
return /^\w+[A-Za-z\s\d]+$/;
|
|
31
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* Returns regex for UTF-8 name (including Vietnamese characters)
|
|
74
|
+
* @returns {RegExp}
|
|
75
|
+
*/
|
|
32
76
|
export const patternNameUtf8 = () => {
|
|
33
77
|
return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;
|
|
34
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Returns regex for special characters in name
|
|
81
|
+
* @returns {RegExp}
|
|
82
|
+
*/
|
|
35
83
|
export const patternNameSpecial = () => {
|
|
36
84
|
return /[~!@#$%^&*()-+=<>,?\/\\:;"']/;
|
|
37
85
|
};
|
|
86
|
+
/**
|
|
87
|
+
* Returns regex for profile name
|
|
88
|
+
* @returns {RegExp}
|
|
89
|
+
*/
|
|
38
90
|
export const patternNameProfile = () => {
|
|
39
91
|
return /([\w\W\d\s]+)+/;
|
|
40
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* Returns regex for emojis
|
|
95
|
+
* @returns {RegExp}
|
|
96
|
+
*/
|
|
41
97
|
export const patternEmoji = () => {
|
|
42
98
|
return /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g;
|
|
43
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* Returns regex for matching field replacement markers (e.g. {{field}})
|
|
102
|
+
* @returns {RegExp}
|
|
103
|
+
*/
|
|
44
104
|
export const patternRuleFieldReplace = () => {
|
|
45
105
|
return /[{]{2}[a-zA-Z_-]+[}]{2}/g;
|
|
46
106
|
};
|
|
107
|
+
/**
|
|
108
|
+
* Returns regex for extracting field name from replacement markers
|
|
109
|
+
* @returns {RegExp}
|
|
110
|
+
*/
|
|
47
111
|
export const patternGetFieldByRuleFieldReplace = () => {
|
|
48
112
|
return /[a-zA-Z_-]+/g;
|
|
49
113
|
};
|
|
114
|
+
/**
|
|
115
|
+
* Returns regex for PEM format validation
|
|
116
|
+
* @returns {RegExp}
|
|
117
|
+
*/
|
|
50
118
|
export const patternPem = () => {
|
|
51
119
|
return /^(0|1):([0-9]{1,2}):(\{\{path-api\}\}):([a-zA-Z0-9\/]+)$/g;
|
|
52
120
|
};
|
|
121
|
+
/**
|
|
122
|
+
* Returns regex for tax ID validation
|
|
123
|
+
* @returns {RegExp}
|
|
124
|
+
*/
|
|
53
125
|
export const patternTax = () => {
|
|
54
126
|
return /^([0-9]){10}(-[0-9]{3})?$/;
|
|
55
127
|
};
|
|
128
|
+
/**
|
|
129
|
+
* Returns regex for key validation (identical to tax regex)
|
|
130
|
+
* @returns {RegExp}
|
|
131
|
+
*/
|
|
56
132
|
export const patternKey = () => {
|
|
57
133
|
return /^([0-9]){10}(-[0-9]{3})?$/;
|
|
58
134
|
};
|
|
135
|
+
/**
|
|
136
|
+
* Returns regex for account validation (must contain @)
|
|
137
|
+
* @returns {RegExp}
|
|
138
|
+
*/
|
|
59
139
|
export const patternAccount = () => {
|
|
60
140
|
return /^(?=.*@)[a-z0-9@._-]{2,63}$/;
|
|
61
141
|
};
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL3BhdHRlcm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDL0IsT0FBTyw2R0FBNkcsQ0FBQztBQUN2SCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7SUFDckMsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO0lBQzdCLE9BQU8sOENBQThDLENBQUM7QUFDeEQsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtJQUNqQyxPQUFPLG1DQUFtQyxDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7SUFDaEMsT0FBTywrR0FBK0csQ0FBQztBQUN6SCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7SUFDckMsT0FBTywwQkFBMEIsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFO0lBQy9CLE9BQU8sZ0NBQWdDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO0lBQzlCLE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtJQUNsQyxPQUFPLHFKQUFxSixDQUFDO0FBQy9KLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxPQUFPLDhCQUE4QixDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDL0IsT0FBTyxvR0FBb0csQ0FBQztBQUM5RyxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLEVBQUU7SUFDMUMsT0FBTywwQkFBMEIsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxHQUFHLEVBQUU7SUFDcEQsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtJQUM3QixPQUFPLDJEQUEyRCxDQUFDO0FBQ3JFLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7SUFDN0IsT0FBTywyQkFBMkIsQ0FBQztBQUNyQyxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO0lBQzdCLE9BQU8sMkJBQTJCLENBQUM7QUFDckMsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtJQUNqQyxPQUFPLDZCQUE2QixDQUFDO0FBQ3ZDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbi8qKlxuICogUmV0dXJucyByZWdleCBmb3IgZW1haWwgdmFsaWRhdGlvblxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5FbWFpbCA9ICgpID0+IHtcbiAgcmV0dXJuIC9eW0EtejAtOV0rW0EtejAtOVxcX1xcLlxcK1xcLV0qW0EtejAtOV1AW0EtejAtOV0rW0EtejAtOVxcX1xcLlxcK1xcLV0qW0EtejAtOV1cXC5bQS16MC05XStbQS16MC05XFxfXFwuXFwrXFwtXSpbQS16MC05XSQvO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBwcm90b2NvbCBpbiBVUkwgKGh0dHAsIGh0dHBzLCBmdHApXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVyblByb3RvY29sVXJsID0gKCkgPT4ge1xuICByZXR1cm4gLyhodHRwfGh0dHBzfGZ0cCk6Lztcbn07XG5cbi8qKlxuICogUmV0dXJucyByZWdleCBmb3IgZnVsbCBVUkwgdmFsaWRhdGlvblxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5VcmwgPSAoKSA9PiB7XG4gIHJldHVybiAvXihodHRwfGh0dHBzfGZ0cCk6KFxcLyl7Mn1bXlxcc10rWy5dezF9W15cXHNdKyQvO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBob3N0IHBhcnQgb2YgVVJMXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybkhvc3RVcmwgPSAoKSA9PiB7XG4gIHJldHVybiAvXigoaHR0cHN8aHR0cHxmdHApOlsvXXsyfVteL1xcc10rKS87XG59O1xuXG4vKipcbiAqIFJldHVybnMgcmVnZXggZm9yIGRvbWFpbiB2YWxpZGF0aW9uXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybkRvbWFpbiA9ICgpID0+IHtcbiAgcmV0dXJuIC9eKFthLXpBLVowLTldKSgoW2EtejAtOS1dezEsNjF9KT9bYS16MC05XXsxfSk/KFxcLlthLXowLTldKChbYS16MC05LV17MSw2MX0pP1thLXowLTldezF9KT8pPyhcXC5bYS16QS1aXXsyLH0pKyQvO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBWaWV0bmFtZXNlIG1vYmlsZSBwaG9uZSB2YWxpZGF0aW9uXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybk1vYmlsZVBob25lID0gKCkgPT4ge1xuICByZXR1cm4gL14oXFwrPzg0fDB8ODQpKFswLTldezl9KSQvO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBnZW5lcmFsIHBob25lIG51bWJlciB2YWxpZGF0aW9uXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVyblBob25lID0gKCkgPT4ge1xuICByZXR1cm4gL14oXFwrPzg0fFswLTldfDg0KShbMC05XXsyLDl9KSQvO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBkaWdpdHNcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKi9cbmV4cG9ydCBjb25zdCBwYXR0ZXJuTnVtYmVyID0gKCkgPT4ge1xuICByZXR1cm4gL1xcZCsvZztcbn07XG5cbi8qKlxuICogUmV0dXJucyByZWdleCBmb3IgZW5jb2RlZCBVUkkgY2hhcmFjdGVyc1xuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5FbmNvZGVVcmkgPSAoKSA9PiB7XG4gIHJldHVybiAvJShbMC05QS1GXXsyfSkvZztcbn07XG5cbi8qKlxuICogUmV0dXJucyByZWdleCBmb3Igc3RhbmRhcmQgbmFtZSAoYWxwaGFudW1lcmljIGFuZCBzcGFjZXMpXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybk5hbWUgPSAoKSA9PiB7XG4gIHJldHVybiAvXlxcdytbQS1aYS16XFxzXFxkXSskLztcbn07XG5cbi8qKlxuICogUmV0dXJucyByZWdleCBmb3IgVVRGLTggbmFtZSAoaW5jbHVkaW5nIFZpZXRuYW1lc2UgY2hhcmFjdGVycylcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKi9cbmV4cG9ydCBjb25zdCBwYXR0ZXJuTmFtZVV0ZjggPSAoKSA9PiB7XG4gIHJldHVybiAvXlsgw6DDoeG6o8Oj4bqhxIPhuq/hurHhurXhurfhurPDouG6p+G6peG6reG6q+G6qcSRw6jDqeG6u+G6veG6ucOq4buB4bq/4buD4buF4buHw6zDreG7icSp4buLw7LDs+G7j8O14buNw7Thu5Phu5Hhu5Xhu5fhu5nGoeG7neG7m+G7n+G7oeG7o8O5w7rhu6fFqeG7pcaw4bur4bup4but4buv4bux4buzw73hu7fhu7nDgMOB4bqiw4PhuqDEguG6ruG6sOG6tOG6tuG6ssOC4bqm4bqk4bqs4bqq4bqoxJDDiMOJ4bq64bq84bq4w4rhu4Dhur7hu4Lhu4Thu4bDjMON4buIxKjhu4rDksOT4buOw5Xhu4zDlOG7kuG7kOG7lOG7luG7mMag4buc4bua4bue4bug4buiw5nDmuG7psWo4bukxq/hu6rhu6jhu6zhu67hu7Dhu7LDneG7tuG7uEEtWmEtejAtOV0rJC87XG59O1xuXG4vKipcbiAqIFJldHVybnMgcmVnZXggZm9yIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBuYW1lXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybk5hbWVTcGVjaWFsID0gKCkgPT4ge1xuICByZXR1cm4gL1t+IUAjJCVeJiooKS0rPTw+LD9cXC9cXFxcOjtcIiddLztcbn07XG5cbi8qKlxuICogUmV0dXJucyByZWdleCBmb3IgcHJvZmlsZSBuYW1lXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybk5hbWVQcm9maWxlID0gKCkgPT4ge1xuICByZXR1cm4gLyhbXFx3XFxXXFxkXFxzXSspKy87XG59O1xuXG4vKipcbiAqIFJldHVybnMgcmVnZXggZm9yIGVtb2ppc1xuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5FbW9qaSA9ICgpID0+IHtcbiAgcmV0dXJuIC8oXFx1MDBhOXxcXHUwMGFlfFtcXHUyMDAwLVxcdTMzMDBdfFxcdWQ4M2NbXFx1ZDAwMC1cXHVkZmZmXXxcXHVkODNkW1xcdWQwMDAtXFx1ZGZmZl18XFx1ZDgzZVtcXHVkMDAwLVxcdWRmZmZdKS9nO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBtYXRjaGluZyBmaWVsZCByZXBsYWNlbWVudCBtYXJrZXJzIChlLmcuIHt7ZmllbGR9fSlcbiAqIEByZXR1cm5zIHtSZWdFeHB9XG4gKi9cbmV4cG9ydCBjb25zdCBwYXR0ZXJuUnVsZUZpZWxkUmVwbGFjZSA9ICgpID0+IHtcbiAgcmV0dXJuIC9be117Mn1bYS16QS1aXy1dK1t9XXsyfS9nO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciBleHRyYWN0aW5nIGZpZWxkIG5hbWUgZnJvbSByZXBsYWNlbWVudCBtYXJrZXJzXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybkdldEZpZWxkQnlSdWxlRmllbGRSZXBsYWNlID0gKCkgPT4ge1xuICByZXR1cm4gL1thLXpBLVpfLV0rL2c7XG59O1xuXG4vKipcbiAqIFJldHVybnMgcmVnZXggZm9yIFBFTSBmb3JtYXQgdmFsaWRhdGlvblxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5QZW0gPSAoKSA9PiB7XG4gIHJldHVybiAvXigwfDEpOihbMC05XXsxLDJ9KTooXFx7XFx7cGF0aC1hcGlcXH1cXH0pOihbYS16QS1aMC05XFwvXSspJC9nO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHJlZ2V4IGZvciB0YXggSUQgdmFsaWRhdGlvblxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5UYXggPSAoKSA9PiB7XG4gIHJldHVybiAvXihbMC05XSl7MTB9KC1bMC05XXszfSk/JC87XG59O1xuXG4vKipcbiAqIFJldHVybnMgcmVnZXggZm9yIGtleSB2YWxpZGF0aW9uIChpZGVudGljYWwgdG8gdGF4IHJlZ2V4KVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqL1xuZXhwb3J0IGNvbnN0IHBhdHRlcm5LZXkgPSAoKSA9PiB7XG4gIHJldHVybiAvXihbMC05XSl7MTB9KC1bMC05XXszfSk/JC87XG59O1xuXG4vKipcbiAqIFJldHVybnMgcmVnZXggZm9yIGFjY291bnQgdmFsaWRhdGlvbiAobXVzdCBjb250YWluIEApXG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5leHBvcnQgY29uc3QgcGF0dGVybkFjY291bnQgPSAoKSA9PiB7XG4gIHJldHVybiAvXig/PS4qQClbYS16MC05QC5fLV17Miw2M30kLztcbn07XG4iXX0=
|
package/esm2022/trace.mjs
CHANGED
|
@@ -21,6 +21,13 @@ const ignorePatterns = [
|
|
|
21
21
|
/vite/,
|
|
22
22
|
/node_modules/,
|
|
23
23
|
];
|
|
24
|
+
/**
|
|
25
|
+
* Trả về danh sách tên các hàm trong stack trace hiện tại.
|
|
26
|
+
* Đã lọc bỏ các hàm nội bộ của Angular, RxJS, Zone.js và các thư viện hệ thống.
|
|
27
|
+
* Hữu ích cho việc logging hoặc debugging để biết source gọi đến function hiện tại.
|
|
28
|
+
*
|
|
29
|
+
* @returns {string[]} Mảng chứa tên các hàm theo thứ tự từ gốc đến ngọn (ngược callback stack).
|
|
30
|
+
*/
|
|
24
31
|
export const traceStack = () => {
|
|
25
32
|
const stack = new Error().stack;
|
|
26
33
|
if (!stack)
|
|
@@ -47,4 +54,4 @@ export const traceStack = () => {
|
|
|
47
54
|
.filter((fn, idx, arr) => fn !== 'anonymous' && arr.indexOf(fn) === idx)
|
|
48
55
|
.reverse());
|
|
49
56
|
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy90cmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGNBQWMsR0FBRztJQUNyQix5QkFBeUI7SUFDekIsNkRBQTZEO0lBQzdELG9CQUFvQjtJQUNwQix3QkFBd0I7SUFFeEIsYUFBYTtJQUNiLGFBQWE7SUFFYixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLDhCQUE4QjtJQUM5QixZQUFZO0lBQ1osVUFBVTtJQUNWLFdBQVc7SUFDWCxrQkFBa0I7SUFFbEIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixlQUFlO0lBQ2YsYUFBYTtJQUViLFVBQVU7SUFDVixTQUFTO0lBQ1QsTUFBTTtJQUNOLGNBQWM7Q0FDTixDQUFDO0FBRVg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQWEsRUFBRTtJQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNoQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXRCLE9BQU8sQ0FDTCxLQUFLO1NBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7U0FDdkMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN2RSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLGdCQUFnQjtRQUNoQixrQ0FBa0M7UUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEMsU0FBUztRQUNULDZCQUE2QjtRQUM3QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztRQUNGLGlDQUFpQztTQUNoQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFdBQVcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQztTQUN2RSxPQUFPLEVBQUUsQ0FDYixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaWdub3JlUGF0dGVybnMgPSBbXG4gIC8vIFJ4SlMgLyBhc3luYyBpbnRlcm5hbHNcbiAgL15hdFxccytPYmplY3RcXC4obmV4dHxlcnJvcnxjb21wbGV0ZXxzdWJzY3JpYmV8dW5zdWJzY3JpYmUpXFxiLyxcbiAgL15hdFxccytTdWJzY3JpYmVyXFwuLyxcbiAgL15hdFxccytTYWZlU3Vic2NyaWJlclxcLi8sXG5cbiAgLy8gVFMgaGVscGVyc1xuICAvXmF0XFxzK19fXFx3Ky8sXG5cbiAgLy8gWm9uZS5qcyAvIEFuZ3VsYXJcbiAgL1pvbmVBd2FyZVByb21pc2UvLFxuICAvXmF0XFxzK25ld1xccytab25lQXdhcmVQcm9taXNlLyxcbiAgL15hdFxccytab25lLyxcbiAgL3pvbmVcXC5qcy8sXG4gIC9jb3JlXFwubWpzLyxcbiAgL3BsYXRmb3JtLWJyb3dzZXIvLFxuXG4gIC8vIEJyb3dzZXIgLyBET01cbiAgL15hdFxccytIVE1MLyxcbiAgL15hdFxccytQcm9taXNlLyxcbiAgLzxhbm9ueW1vdXM+LyxcblxuICAvLyBCdW5kbGVyXG4gIC93ZWJwYWNrLyxcbiAgL3ZpdGUvLFxuICAvbm9kZV9tb2R1bGVzLyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogVHLhuqMgduG7gSBkYW5oIHPDoWNoIHTDqm4gY8OhYyBow6BtIHRyb25nIHN0YWNrIHRyYWNlIGhp4buHbiB04bqhaS5cbiAqIMSQw6MgbOG7jWMgYuG7jyBjw6FjIGjDoG0gbuG7mWkgYuG7mSBj4bunYSBBbmd1bGFyLCBSeEpTLCBab25lLmpzIHbDoCBjw6FjIHRoxrAgdmnhu4duIGjhu4cgdGjhu5FuZy5cbiAqIEjhu691IMOtY2ggY2hvIHZp4buHYyBsb2dnaW5nIGhv4bq3YyBkZWJ1Z2dpbmcgxJHhu4MgYmnhur90IHNvdXJjZSBn4buNaSDEkeG6v24gZnVuY3Rpb24gaGnhu4duIHThuqFpLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gTeG6o25nIGNo4bupYSB0w6puIGPDoWMgaMOgbSB0aGVvIHRo4bupIHThu7EgdOG7qyBn4buRYyDEkeG6v24gbmfhu41uIChuZ8aw4bujYyBjYWxsYmFjayBzdGFjaykuXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFjZVN0YWNrID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgaWYgKCFzdGFjaykgcmV0dXJuIFtdO1xuXG4gIHJldHVybiAoXG4gICAgc3RhY2tcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5zbGljZSgyKSAvLyBi4buPIEVycm9yICsgY3VycmVudCBmdW5jdGlvblxuICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiAhaWdub3JlUGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KGxpbmUpKSlcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgLy8gQ2hyb21lIC8gRWRnZVxuICAgICAgICAvLyBhdCBmdW5jdGlvbk5hbWUgKGZpbGU6bGluZTpjb2wpXG4gICAgICAgIGxldCBtYXRjaCA9IGxpbmUubWF0Y2goL2F0XFxzKyguKj8pXFxzK1xcKC8pO1xuICAgICAgICBpZiAobWF0Y2g/LlsxXSkgcmV0dXJuIG1hdGNoWzFdO1xuXG4gICAgICAgIC8vIFNhZmFyaVxuICAgICAgICAvLyBmdW5jdGlvbk5hbWVAZmlsZTpsaW5lOmNvbFxuICAgICAgICBtYXRjaCA9IGxpbmUubWF0Y2goL14oLio/KUAvKTtcbiAgICAgICAgaWYgKG1hdGNoPy5bMV0pIHJldHVybiBtYXRjaFsxXTtcblxuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgICB9KVxuICAgICAgLy8gbG/huqFpIGR1cGxpY2F0ZSAmIGFub255bW91cyByw6FjXG4gICAgICAuZmlsdGVyKChmbiwgaWR4LCBhcnIpID0+IGZuICE9PSAnYW5vbnltb3VzJyAmJiBhcnIuaW5kZXhPZihmbikgPT09IGlkeClcbiAgICAgIC5yZXZlcnNlKClcbiAgKTtcbn07XG4iXX0=
|
|
@@ -58,6 +58,14 @@ export const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSigna
|
|
|
58
58
|
}
|
|
59
59
|
return data;
|
|
60
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* Chuyển đổi một đối tượng signal (có thể lồng nhau) thành đối tượng plain object/array/map/set.
|
|
63
|
+
* @param data Dữ liệu signal hoặc đối tượng chứa signal cần chuyển đổi.
|
|
64
|
+
* @param isCloneDeep Có thực hiện sao chép sâu dữ liệu trong quá trình chuyển đổi hay không. Mặc định là true.
|
|
65
|
+
* @param seen Dùng nội bộ để tránh lặp vô hạn (WeakMap).
|
|
66
|
+
* @param options Tùy chọn chuyển đổi (ví dụ: convertWhenFirstItemArrayNotIsSignal).
|
|
67
|
+
* @returns Đối tượng plain object đã được "giải nén" mọi signal bên trong.
|
|
68
|
+
*/
|
|
61
69
|
export const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap(), options) => {
|
|
62
70
|
let ignoreCheckSeenHasDataAfterWhile = false;
|
|
63
71
|
while (isSignal(data) && !seen.has(data)) {
|
|
@@ -122,10 +130,15 @@ export const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakM
|
|
|
122
130
|
}
|
|
123
131
|
return result;
|
|
124
132
|
};
|
|
133
|
+
/**
|
|
134
|
+
* Unwrap một giá trị cho đến khi không còn là signal nữa.
|
|
135
|
+
* @param data Giá trị (có thể là lồng nhiều cấp signal) cần unwrap.
|
|
136
|
+
* @returns Giá trị cuối cùng bên trong signal.
|
|
137
|
+
*/
|
|
125
138
|
export const unwrapSignal = (data) => {
|
|
126
139
|
while (isSignal(data)) {
|
|
127
140
|
data = data();
|
|
128
141
|
}
|
|
129
142
|
return data;
|
|
130
143
|
};
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLXdheS1zaWduYWwtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvdHdvLXdheS1zaWduYWwtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFVLElBQVMsRUFBRSxvQkFBb0IsR0FBRyxJQUFJLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLHNDQUFzQyxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBSyxFQUFFO0lBQy9MLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBTSxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7WUFDNUMs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QVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBTSxDQUFDLENBQUM7UUFDdEksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBWSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBWSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBd0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRCw2REFBNkQ7WUFDN0QsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUcsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQVcsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtJQUN4QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBpc1NpZ25hbCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNBc3luY09iamVjdCwgaXNNYXAsIGlzUmV0dXJuQXNJc09iamVjdCwgaXNTZXQgfSBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIHRow6BuaCBzaWduYWxcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIGNodXnhu4NuIMSR4buVaSB0aMOgbmggc2lnbmFsXG4gKiBAcGFyYW0gY2xvbmVEZWVwSWZOb3RTaWduYWwgQ8OzIHRo4buxYyBoaeG7h24gc2FvIGNow6lwIHPDonUgZOG7ryBsaeG7h3UgdHLGsOG7m2Mga2hpIGNodXnhu4NuIMSR4buVaSBoYXkga2jDtG5nIG7hur91IGRhdGEga2jDtG5nIHBo4bqjaSBzaWduYWwuIE3hurdjIMSR4buLbmggbMOgIHRydWUuXG4gKiDEkOG6t3QgZmFsc2UgbuG6v3UgbXXhu5FuIGdp4buvIG5ndXnDqm4gdGhhbSBjaGnhur91IMSR4bq/biBk4buvIGxp4buHdSBn4buRYy5cbiAqIE7hur91IG114buRbiBzYW8gY2jDqXAgc8OidSDEkeG7kWkgdMaw4bujbmcgc2lnbmFsIHRow6wgxJHhurd0IGNsb25lRGVlcElmTm90U2lnbmFsIGzDoCB0cnVlIHbDoCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCBsw6AgdHJ1ZS5cbiAqIEBwYXJhbSBpc1NpZ25hbFByaW1pdGl2ZVR5cGUgQ8OzIGNodXnhu4NuIMSR4buVaSBjw6FjIGdpw6EgdHLhu4sgbmd1ecOqbiB0aOG7p3kgKHN0cmluZywgbnVtYmVyLCBib29sZWFuKSB0aMOgbmggc2lnbmFsIGhheSBraMO0bmcuIE3hurdjIMSR4buLbmggbMOgIGZhbHNlLlxuICogxJDhurd0IHRydWUgbuG6v3UgbXXhu5FuIGLhu41jIGPDoWMgZ2nDoSB0cuG7iyBuZ3V5w6puIHRo4buneSB0cm9uZyBzaWduYWwuXG4gKiBAcGFyYW0gYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwgQ8OzIHRp4bq/cCB04bulYyB0w6xtIGtp4bq/bSB2w6AgY2h1eeG7g24gxJHhu5VpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGLDqm4gdHJvbmcgc2lnbmFsIGhheSBraMO0bmcuIE3hurdjIMSR4buLbmggbMOgIGZhbHNlLlxuICogxJDhurd0IHRydWUgbuG6v3UgbXXhu5FuIHTDrG0gdsOgIGNodXnhu4NuIMSR4buVaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBiw6puIHRyb25nIHNpZ25hbCBob+G6t2MgY2jDrW5oIG7DsyB0aMOgbmggc2lnbmFsIG3hu5tpLlxuICogQHJldHVybnMgROG7ryBsaeG7h3UgxJHDoyDEkcaw4bujYyBjaHV54buDbiDEkeG7lWkgdGhlbyBraeG7g3UgVFxuICovXG5leHBvcnQgY29uc3QgY29udmVydE9iamVjdFRvU2lnbmFsID0gPFQgPSBhbnk+KGRhdGE6IGFueSwgY2xvbmVEZWVwSWZOb3RTaWduYWwgPSB0cnVlLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUgPSBmYWxzZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwgPSBmYWxzZSwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBUID0+IHtcbiAgaWYgKChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JykgJiYgIWlzU2lnbmFsKGRhdGEpKSB7XG4gICAgcmV0dXJuIChpc1NpZ25hbFByaW1pdGl2ZVR5cGUgPyBzaWduYWwoZGF0YSkgOiBkYXRhKSBhcyBUO1xuICB9XG4gIGlmIChzZWVuLmhhcyhkYXRhKSkge1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmICghYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChkYXRhKCksIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsLCBzZWVuKSk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICBzZWVuLnNldChkYXRhLCBzaWduYWwoZGF0YS5tYXAoKGl0ZW0pID0+IGNvbnZlcnRPYmplY3RUb1NpZ25hbChpdGVtLCBjbG9uZURlZXBJZk5vdFNpZ25hbCwgaXNTaWduYWxQcmltaXRpdmVUeXBlLCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCwgc2VlbikpKSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNNYXAoZGF0YSkpIHtcbiAgICBjb25zdCBtYXBDb3B5ID0gbmV3IE1hcCgpO1xuICAgIEFycmF5LmZyb20oZGF0YS5rZXlzKCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoa2V5LCBjb252ZXJ0T2JqZWN0VG9TaWduYWwoZGF0YS5nZXQoa2V5KSwgY2xvbmVEZWVwSWZOb3RTaWduYWwsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwpKTtcbiAgICB9KTtcbiAgICBzZWVuLnNldChkYXRhLCBzaWduYWwobWFwQ29weSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgLy8gQuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgYXN5bmNcbiAgaWYgKGlzQXN5bmNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG5cbiAgZGF0YSA9IHNpZ25hbChjbG9uZURlZXBJZk5vdFNpZ25hbCA/IHsgLi4uZGF0YSB9IDogZGF0YSk7XG4gIHNlZW4uc2V0KGRhdGEsIGRhdGEpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGEoKVtrZXldO1xuICAgIC8vIELhu48gcXVhIGPDoWMgxJHhu5FpIHTGsOG7o25nIG5ndXkgaGnhu4NtIHbDoCDEkeG6t2MgYmnhu4d0XG4gICAgaWYgKGlzUmV0dXJuQXNJc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEoKSwga2V5KSkge1xuICAgICAgZGF0YSgpW2tleV0gPSBjb252ZXJ0T2JqZWN0VG9TaWduYWwodmFsdWUsIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YSBhcyBUO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRTaWduYWxUb09iamVjdCA9IDxUID0gYW55PihkYXRhOiBhbnksIGlzQ2xvbmVEZWVwID0gdHJ1ZSwgc2VlbiA9IG5ldyBXZWFrTWFwKCksIG9wdGlvbnM/OiB7IGNvbnZlcnRXaGVuRmlyc3RJdGVtQXJyYXlOb3RJc1NpZ25hbD86IGJvb2xlYW4gfSk6IFQgPT4ge1xuICBsZXQgaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgPSBmYWxzZTtcbiAgd2hpbGUgKGlzU2lnbmFsKGRhdGEpICYmICFzZWVuLmhhcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhdGFDb252ZXJ0ID0gKGRhdGEgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj4pKCk7XG4gICAgaWYgKHR5cGVvZiBkYXRhQ29udmVydCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChkYXRhQ29udmVydCA9PT0gbnVsbCB8fCBpc1JldHVybkFzSXNPYmplY3QoZGF0YUNvbnZlcnQpKSB7XG4gICAgICAgIHJldHVybiBkYXRhQ29udmVydCBhcyBUO1xuICAgICAgfVxuICAgICAgc2Vlbi5zZXQoZGF0YUNvbnZlcnQgYXMgb2JqZWN0LCBkYXRhQ29udmVydCk7XG4gICAgICBkYXRhID0gZGF0YUNvbnZlcnQ7XG4gICAgICBpZ25vcmVDaGVja1NlZW5IYXNEYXRhQWZ0ZXJXaGlsZSA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YUNvbnZlcnQpO1xuICAgIGRhdGEgPSBkYXRhQ29udmVydDtcbiAgfVxuXG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBpc1JldHVybkFzSXNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmICghaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgJiYgc2Vlbi5oYXMoZGF0YSkpIHtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgIGlmICghb3B0aW9ucz8uY29udmVydFdoZW5GaXJzdEl0ZW1BcnJheU5vdElzU2lnbmFsICYmICFpc1NpZ25hbChkYXRhWzBdKSkge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gY29udmVydFNpZ25hbFRvT2JqZWN0KGlzQ2xvbmVEZWVwID8gY2xvbmVEZWVwKGl0ZW0pIDogaXRlbSwgaXNDbG9uZURlZXAsIHNlZW4sIG9wdGlvbnMpKSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNNYXAoZGF0YSkpIHtcbiAgICBjb25zdCBtYXBDb3B5ID0gbmV3IE1hcCgpO1xuICAgIEFycmF5LmZyb20oZGF0YS5rZXlzKCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoa2V5LCBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAoZGF0YS5nZXQoa2V5KSkgOiBkYXRhLmdldChrZXkpLCBpc0Nsb25lRGVlcCwgc2Vlbiwgb3B0aW9ucykpO1xuICAgIH0pO1xuICAgIHNlZW4uc2V0KGRhdGEsIG1hcENvcHkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzU2V0KGRhdGEpKSB7XG4gICAgY29uc3Qgc2V0Q29weSA9IG5ldyBTZXQoKTtcbiAgICBBcnJheS5mcm9tKGRhdGEudmFsdWVzKCkpLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAodmFsdWUpIDogdmFsdWUsIGlzQ2xvbmVEZWVwLCBzZWVuLCBvcHRpb25zKSk7XG4gICAgfSk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgc2V0Q29weSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICAvLyBC4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyBuZ3V5IGhp4buDbSB2w6AgxJHhurdjIGJp4buHdFxuICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IGlzQ2xvbmVEZWVwID8ge30gOiBkYXRhO1xuICBzZWVuLnNldChkYXRhLCByZXN1bHQpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAvLyBC4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyBuZ3V5IGhp4buDbSDEkeG7gyB0csOhbmggbWF4aW11bSBjYWxsIHN0YWNrXG4gICAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdFtrZXldID0gY29udmVydFNpZ25hbFRvT2JqZWN0KGlzQ2xvbmVEZWVwID8gY2xvbmVEZWVwKHZhbHVlKSA6IHZhbHVlLCBpc0Nsb25lRGVlcCwgc2Vlbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuZXhwb3J0IGNvbnN0IHVud3JhcFNpZ25hbCA9IChkYXRhOiBhbnkpID0+IHtcbiAgd2hpbGUgKGlzU2lnbmFsKGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEoKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn07XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLXdheS1zaWduYWwtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvdHdvLXdheS1zaWduYWwtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFVLElBQVMsRUFBRSxvQkFBb0IsR0FBRyxJQUFJLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLHNDQUFzQyxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBSyxFQUFFO0lBQy9MLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBTSxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7WUFDNUMs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QyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQU0sQ0FBQyxDQUFDO1FBQ3RJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5SCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQVksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN6RyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQVksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQXdCLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEQsNkRBQTZEO1lBQzdELElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFHLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO0lBQ3hDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGlzU2lnbmFsLCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0FzeW5jT2JqZWN0LCBpc01hcCwgaXNSZXR1cm5Bc0lzT2JqZWN0LCBpc1NldCB9IGZyb20gJy4vZGFuZ2Vyb3VzLW9iamVjdCc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG4vKipcbiAqIENodXnhu4NuIMSR4buVaSBt4buZdCDEkeG7kWkgdMaw4bujbmcgaG/hurdjIGdpw6EgdHLhu4sgdGjDoG5oIHNpZ25hbFxuICogQHBhcmFtIGRhdGEgROG7ryBsaeG7h3UgY+G6p24gY2h1eeG7g24gxJHhu5VpIHRow6BuaCBzaWduYWxcbiAqIEBwYXJhbSBjbG9uZURlZXBJZk5vdFNpZ25hbCBDw7MgdGjhu7FjIGhp4buHbiBzYW8gY2jDqXAgc8OidSBk4buvIGxp4buHdSB0csaw4bubYyBraGkgY2h1eeG7g24gxJHhu5VpIGhheSBraMO0bmcgbuG6v3UgZGF0YSBraMO0bmcgcGjhuqNpIHNpZ25hbC4gTeG6t2MgxJHhu4tuaCBsw6AgdHJ1ZS5cbiAqIMSQ4bq3dCBmYWxzZSBu4bq/dSBtdeG7kW4gZ2nhu68gbmd1ecOqbiB0aGFtIGNoaeG6v3UgxJHhur9uIGThu68gbGnhu4d1IGfhu5FjLlxuICogTuG6v3UgbXXhu5FuIHNhbyBjaMOpcCBzw6J1IMSR4buRaSB0xrDhu6NuZyBzaWduYWwgdGjDrCDEkeG6t3QgY2xvbmVEZWVwSWZOb3RTaWduYWwgbMOgIHRydWUgdsOgIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsIGzDoCB0cnVlLlxuICogQHBhcmFtIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSBDw7MgY2h1eeG7g24gxJHhu5VpIGPDoWMgZ2nDoSB0cuG7iyBuZ3V5w6puIHRo4buneSAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4pIHRow6BuaCBzaWduYWwgaGF5IGtow7RuZy4gTeG6t2MgxJHhu4tuaCBsw6AgZmFsc2UuXG4gKiDEkOG6t3QgdHJ1ZSBu4bq/dSBtdeG7kW4gYuG7jWMgY8OhYyBnacOhIHRy4buLIG5ndXnDqm4gdGjhu6d5IHRyb25nIHNpZ25hbC5cbiAqIEBwYXJhbSBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCBDw7MgdGnhur9wIHThu6VjIHTDrG0ga2nhur9tIHbDoCBjaHV54buDbiDEkeG7lWkgY8OhYyDEkeG7kWkgdMaw4bujbmcgYsOqbiB0cm9uZyBzaWduYWwgaGF5IGtow7RuZy4gTeG6t2MgxJHhu4tuaCBsw6AgZmFsc2UuXG4gKiDEkOG6t3QgdHJ1ZSBu4bq/dSBtdeG7kW4gdMOsbSB2w6AgY2h1eeG7g24gxJHhu5VpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGLDqm4gdHJvbmcgc2lnbmFsIGhv4bq3YyBjaMOtbmggbsOzIHRow6BuaCBzaWduYWwgbeG7m2kuXG4gKiBAcmV0dXJucyBE4buvIGxp4buHdSDEkcOjIMSRxrDhu6NjIGNodXnhu4NuIMSR4buVaSB0aGVvIGtp4buDdSBUXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0T2JqZWN0VG9TaWduYWwgPSA8VCA9IGFueT4oZGF0YTogYW55LCBjbG9uZURlZXBJZk5vdFNpZ25hbCA9IHRydWUsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSA9IGZhbHNlLCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCA9IGZhbHNlLCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IFQgPT4ge1xuICBpZiAoKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSAmJiAhaXNTaWduYWwoZGF0YSkpIHtcbiAgICByZXR1cm4gKGlzU2lnbmFsUHJpbWl0aXZlVHlwZSA/IHNpZ25hbChkYXRhKSA6IGRhdGEpIGFzIFQ7XG4gIH1cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzU2lnbmFsKGRhdGEpKSB7XG4gICAgaWYgKCFhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCkge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgY29udmVydE9iamVjdFRvU2lnbmFsKGRhdGEoKSwgY2xvbmVEZWVwSWZOb3RTaWduYWwsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwsIHNlZW4pKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChkYXRhLm1hcCgoaXRlbSkgPT4gY29udmVydE9iamVjdFRvU2lnbmFsKGl0ZW0sIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsLCBzZWVuKSkpIGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChpc01hcChkYXRhKSkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgQXJyYXkuZnJvbShkYXRhLmtleXMoKSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBtYXBDb3B5LnNldChrZXksIGNvbnZlcnRPYmplY3RUb1NpZ25hbChkYXRhLmdldChrZXkpLCBjbG9uZURlZXBJZk5vdFNpZ25hbCwgaXNTaWduYWxQcmltaXRpdmVUeXBlLCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCkpO1xuICAgIH0pO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChtYXBDb3B5KSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICAvLyBC4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyBhc3luY1xuICBpZiAoaXNBc3luY09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gIH1cblxuICBkYXRhID0gc2lnbmFsKGNsb25lRGVlcElmTm90U2lnbmFsID8geyAuLi5kYXRhIH0gOiBkYXRhKTtcbiAgc2Vlbi5zZXQoZGF0YSwgZGF0YSk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEoKSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YSgpW2tleV07XG4gICAgLy8gQuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgbmd1eSBoaeG7g20gdsOgIMSR4bq3YyBiaeG7h3RcbiAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSgpLCBrZXkpKSB7XG4gICAgICBkYXRhKClba2V5XSA9IGNvbnZlcnRPYmplY3RUb1NpZ25hbCh2YWx1ZSwgY2xvbmVEZWVwSWZOb3RTaWduYWwsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhIGFzIFQ7XG59O1xuXG4vKipcbiAqIENodXnhu4NuIMSR4buVaSBt4buZdCDEkeG7kWkgdMaw4bujbmcgc2lnbmFsIChjw7MgdGjhu4MgbOG7k25nIG5oYXUpIHRow6BuaCDEkeG7kWkgdMaw4bujbmcgcGxhaW4gb2JqZWN0L2FycmF5L21hcC9zZXQuXG4gKiBAcGFyYW0gZGF0YSBE4buvIGxp4buHdSBzaWduYWwgaG/hurdjIMSR4buRaSB0xrDhu6NuZyBjaOG7qWEgc2lnbmFsIGPhuqduIGNodXnhu4NuIMSR4buVaS5cbiAqIEBwYXJhbSBpc0Nsb25lRGVlcCBDw7MgdGjhu7FjIGhp4buHbiBzYW8gY2jDqXAgc8OidSBk4buvIGxp4buHdSB0cm9uZyBxdcOhIHRyw6xuaCBjaHV54buDbiDEkeG7lWkgaGF5IGtow7RuZy4gTeG6t2MgxJHhu4tuaCBsw6AgdHJ1ZS5cbiAqIEBwYXJhbSBzZWVuIETDuW5nIG7hu5lpIGLhu5kgxJHhu4MgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiAoV2Vha01hcCkuXG4gKiBAcGFyYW0gb3B0aW9ucyBUw7l5IGNo4buNbiBjaHV54buDbiDEkeG7lWkgKHbDrSBk4bulOiBjb252ZXJ0V2hlbkZpcnN0SXRlbUFycmF5Tm90SXNTaWduYWwpLlxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHBsYWluIG9iamVjdCDEkcOjIMSRxrDhu6NjIFwiZ2nhuqNpIG7DqW5cIiBt4buNaSBzaWduYWwgYsOqbiB0cm9uZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRTaWduYWxUb09iamVjdCA9IDxUID0gYW55PihkYXRhOiBhbnksIGlzQ2xvbmVEZWVwID0gdHJ1ZSwgc2VlbiA9IG5ldyBXZWFrTWFwKCksIG9wdGlvbnM/OiB7IGNvbnZlcnRXaGVuRmlyc3RJdGVtQXJyYXlOb3RJc1NpZ25hbD86IGJvb2xlYW4gfSk6IFQgPT4ge1xuICBsZXQgaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgPSBmYWxzZTtcbiAgd2hpbGUgKGlzU2lnbmFsKGRhdGEpICYmICFzZWVuLmhhcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhdGFDb252ZXJ0ID0gKGRhdGEgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj4pKCk7XG4gICAgaWYgKHR5cGVvZiBkYXRhQ29udmVydCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChkYXRhQ29udmVydCA9PT0gbnVsbCB8fCBpc1JldHVybkFzSXNPYmplY3QoZGF0YUNvbnZlcnQpKSB7XG4gICAgICAgIHJldHVybiBkYXRhQ29udmVydCBhcyBUO1xuICAgICAgfVxuICAgICAgc2Vlbi5zZXQoZGF0YUNvbnZlcnQgYXMgb2JqZWN0LCBkYXRhQ29udmVydCk7XG4gICAgICBkYXRhID0gZGF0YUNvbnZlcnQ7XG4gICAgICBpZ25vcmVDaGVja1NlZW5IYXNEYXRhQWZ0ZXJXaGlsZSA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YUNvbnZlcnQpO1xuICAgIGRhdGEgPSBkYXRhQ29udmVydDtcbiAgfVxuXG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBpc1JldHVybkFzSXNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmICghaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgJiYgc2Vlbi5oYXMoZGF0YSkpIHtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgIGlmICghb3B0aW9ucz8uY29udmVydFdoZW5GaXJzdEl0ZW1BcnJheU5vdElzU2lnbmFsICYmICFpc1NpZ25hbChkYXRhWzBdKSkge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gY29udmVydFNpZ25hbFRvT2JqZWN0KGlzQ2xvbmVEZWVwID8gY2xvbmVEZWVwKGl0ZW0pIDogaXRlbSwgaXNDbG9uZURlZXAsIHNlZW4sIG9wdGlvbnMpKSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNNYXAoZGF0YSkpIHtcbiAgICBjb25zdCBtYXBDb3B5ID0gbmV3IE1hcCgpO1xuICAgIEFycmF5LmZyb20oZGF0YS5rZXlzKCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoa2V5LCBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAoZGF0YS5nZXQoa2V5KSkgOiBkYXRhLmdldChrZXkpLCBpc0Nsb25lRGVlcCwgc2Vlbiwgb3B0aW9ucykpO1xuICAgIH0pO1xuICAgIHNlZW4uc2V0KGRhdGEsIG1hcENvcHkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzU2V0KGRhdGEpKSB7XG4gICAgY29uc3Qgc2V0Q29weSA9IG5ldyBTZXQoKTtcbiAgICBBcnJheS5mcm9tKGRhdGEudmFsdWVzKCkpLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAodmFsdWUpIDogdmFsdWUsIGlzQ2xvbmVEZWVwLCBzZWVuLCBvcHRpb25zKSk7XG4gICAgfSk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgc2V0Q29weSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICAvLyBC4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyBuZ3V5IGhp4buDbSB2w6AgxJHhurdjIGJp4buHdFxuICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IGlzQ2xvbmVEZWVwID8ge30gOiBkYXRhO1xuICBzZWVuLnNldChkYXRhLCByZXN1bHQpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAvLyBC4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyBuZ3V5IGhp4buDbSDEkeG7gyB0csOhbmggbWF4aW11bSBjYWxsIHN0YWNrXG4gICAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdFtrZXldID0gY29udmVydFNpZ25hbFRvT2JqZWN0KGlzQ2xvbmVEZWVwID8gY2xvbmVEZWVwKHZhbHVlKSA6IHZhbHVlLCBpc0Nsb25lRGVlcCwgc2Vlbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuLyoqXG4gKiBVbndyYXAgbeG7mXQgZ2nDoSB0cuG7iyBjaG8gxJHhur9uIGtoaSBraMO0bmcgY8OybiBsw6Agc2lnbmFsIG7hu69hLlxuICogQHBhcmFtIGRhdGEgR2nDoSB0cuG7iyAoY8OzIHRo4buDIGzDoCBs4buTbmcgbmhp4buBdSBj4bqlcCBzaWduYWwpIGPhuqduIHVud3JhcC5cbiAqIEByZXR1cm5zIEdpw6EgdHLhu4sgY3Xhu5FpIGPDuW5nIGLDqm4gdHJvbmcgc2lnbmFsLlxuICovXG5leHBvcnQgY29uc3QgdW53cmFwU2lnbmFsID0gKGRhdGE6IGFueSkgPT4ge1xuICB3aGlsZSAoaXNTaWduYWwoZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSgpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufTtcbiJdfQ==
|