@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/dom.mjs
CHANGED
|
@@ -4,13 +4,24 @@ import { finalize, fromEvent, mergeMap, startWith, takeUntil, tap } from 'rxjs';
|
|
|
4
4
|
import { set } from './helpers';
|
|
5
5
|
let parser = null;
|
|
6
6
|
let bowserParser = null;
|
|
7
|
+
/**
|
|
8
|
+
* Lấy thông tin thiết bị và trình duyệt (Sử dụng thư viện Bowser).
|
|
9
|
+
* @returns Đối tượng Parser chứa thông tin OS, Browser, Platform...
|
|
10
|
+
*/
|
|
7
11
|
export const getDeviceInfo = () => {
|
|
8
12
|
if (!bowserParser) {
|
|
9
13
|
bowserParser = Bowser.getParser(window.navigator.userAgent);
|
|
10
14
|
}
|
|
11
15
|
return bowserParser;
|
|
12
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* Kiểm tra xem thiết bị hiện tại có hỗ trợ cảm ứng (Touch) không.
|
|
19
|
+
* @returns true nếu là thiết bị cảm ứng
|
|
20
|
+
*/
|
|
13
21
|
export const isTouchDevice = () => ('onpointerdown' in navigator && navigator.maxTouchPoints > 0) || 'ontouchstart' in window || (window.matchMedia?.('(pointer: coarse)').matches ?? false);
|
|
22
|
+
/**
|
|
23
|
+
* Xác định tên sự kiện click phù hợp cho thiết bị (click cho desktop, pointerdown cho touch).
|
|
24
|
+
*/
|
|
14
25
|
export const getEventNameHandleClick = (() => {
|
|
15
26
|
if (isTouchDevice()) {
|
|
16
27
|
return 'pointerdown';
|
|
@@ -18,12 +29,22 @@ export const getEventNameHandleClick = (() => {
|
|
|
18
29
|
const deviceInfo = getDeviceInfo();
|
|
19
30
|
return deviceInfo.isPlatform('desktop') ? 'click' : 'touchstart';
|
|
20
31
|
})();
|
|
32
|
+
/**
|
|
33
|
+
* Chuyển đổi một chuỗi HTML thành đối tượng Document.
|
|
34
|
+
* @param htmlStr Chuỗi HTML cần parse
|
|
35
|
+
* @returns Đối tượng Document tương ứng
|
|
36
|
+
*/
|
|
21
37
|
export const getDocumentByString = (htmlStr) => {
|
|
22
38
|
if (!parser) {
|
|
23
39
|
parser = new DOMParser();
|
|
24
40
|
}
|
|
25
41
|
return parser.parseFromString(htmlStr, 'text/html');
|
|
26
42
|
};
|
|
43
|
+
/**
|
|
44
|
+
* Sao chép các thuộc tính cơ bản của IBoundingClientRect.
|
|
45
|
+
* @param rect Đối tượng IBoundingClientRect gốc
|
|
46
|
+
* @returns Đối tượng IBoundingClientRect đã được copy
|
|
47
|
+
*/
|
|
27
48
|
export const cloneIBoundingClientRect = (rect) => {
|
|
28
49
|
return {
|
|
29
50
|
top: rect['top'],
|
|
@@ -33,13 +54,28 @@ export const cloneIBoundingClientRect = (rect) => {
|
|
|
33
54
|
bottom: rect['bottom'],
|
|
34
55
|
};
|
|
35
56
|
};
|
|
57
|
+
/**
|
|
58
|
+
* Gán nhiều thuộc tính CSS style cho một Element.
|
|
59
|
+
* @param el Phần tử HTML cần gán style
|
|
60
|
+
* @param styles Đối tượng chứa các style (ví dụ: { color: 'red', display: 'block' })
|
|
61
|
+
*/
|
|
36
62
|
export const setStylesElement = (el, styles) => {
|
|
37
63
|
Object.keys(styles).forEach((key) => set(el, `style.${key}`, styles[key]));
|
|
38
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* Lấy kích thước Viewport hiển thị của cửa sổ trình duyệt.
|
|
67
|
+
* @param win Đối tượng Window (mặc định là window)
|
|
68
|
+
* @returns Đối tượng chứa width và height
|
|
69
|
+
*/
|
|
39
70
|
export const getViewport = (win = window) => {
|
|
40
71
|
const doc = win.document.documentElement, body = win.document.getElementsByTagName('body')[0], w = win.innerWidth || doc.clientWidth || body.clientWidth, h = win.innerHeight || doc.clientHeight || body.clientHeight;
|
|
41
72
|
return { width: w, height: h };
|
|
42
73
|
};
|
|
74
|
+
/**
|
|
75
|
+
* Thiết lập vị trí con trỏ (caret) cho thẻ Input hoặc Textarea.
|
|
76
|
+
* @param element Thẻ input hoặc textarea
|
|
77
|
+
* @param position Vị trí cần đặt con trỏ
|
|
78
|
+
*/
|
|
43
79
|
export const setCaretPosition = (element, position) => {
|
|
44
80
|
if (!element || !element.setSelectionRange) {
|
|
45
81
|
return;
|
|
@@ -47,6 +83,14 @@ export const setCaretPosition = (element, position) => {
|
|
|
47
83
|
element.focus();
|
|
48
84
|
element.setSelectionRange(position, position);
|
|
49
85
|
};
|
|
86
|
+
/**
|
|
87
|
+
* Kiểm tra xem một phần tử có đang hiển thị trong vùng nhìn thấy (viewport) của một container không.
|
|
88
|
+
* @param container Element cha chứa vùng scroll
|
|
89
|
+
* @param element Element cần kiểm tra
|
|
90
|
+
* @param elementScroll (Tùy chọn) Element đại diện cho vùng scroll nếu khác container
|
|
91
|
+
* @param maxTopLeft (Tùy chọn) Offset bổ sung để kiểm tra
|
|
92
|
+
* @returns true nếu nằm trong vùng nhìn thấy
|
|
93
|
+
*/
|
|
50
94
|
export const checkViewInScreen = (container, element, elementScroll, maxTopLeft) => {
|
|
51
95
|
if (!container || !element) {
|
|
52
96
|
return false;
|
|
@@ -74,6 +118,13 @@ export const checkViewInScreen = (container, element, elementScroll, maxTopLeft)
|
|
|
74
118
|
}
|
|
75
119
|
return false;
|
|
76
120
|
};
|
|
121
|
+
/**
|
|
122
|
+
* Kiểm tra xem tọa độ chuột hiện tại có nằm trong vùng của một Element không.
|
|
123
|
+
* @param mousePosition Đối tượng chứa clientX, clientY
|
|
124
|
+
* @param element Element cần kiểm tra
|
|
125
|
+
* @param rect (Tùy chọn) Bounding rect đã có sẵn để tối ưu hiệu năng
|
|
126
|
+
* @returns true nếu chuột đang đè lên phần tử
|
|
127
|
+
*/
|
|
77
128
|
export const checkMouseOverInContainer = (mousePosition, element, rect) => {
|
|
78
129
|
if (!element && !rect) {
|
|
79
130
|
return false;
|
|
@@ -88,6 +139,11 @@ export const checkMouseOverInContainer = (mousePosition, element, rect) => {
|
|
|
88
139
|
}
|
|
89
140
|
return false;
|
|
90
141
|
};
|
|
142
|
+
/**
|
|
143
|
+
* Tạo sự kiện Kéo-Thả (Drag) nâng cao dựa trên RxJS cho một Element.
|
|
144
|
+
* @param config Cấu hình sự kiện (element, các hàm callback, destroyRef)
|
|
145
|
+
* @returns Observable phát ra sự kiện mousemove trong quá trình kéo
|
|
146
|
+
*/
|
|
91
147
|
export const getDragEventByElement = (config) => {
|
|
92
148
|
let timer;
|
|
93
149
|
const addClass = () => {
|
|
@@ -123,4 +179,4 @@ export const getDragEventByElement = (config) => {
|
|
|
123
179
|
}), takeUntil(mouseup));
|
|
124
180
|
return mouseDown.pipe(mergeMap((e) => (config.isStartWithMouseDownEvent ? mousemove.pipe(startWith(e)) : mousemove)), takeUntilDestroyed(config.destroyRef), finalize(removeClass));
|
|
125
181
|
};
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoQyxJQUFJLE1BQU0sR0FBcUIsSUFBSSxDQUFDO0FBQ3BDLElBQUksWUFBWSxHQUFnQyxJQUFJLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtJQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQVksRUFBRSxDQUFDLENBQUMsZUFBZSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLGNBQWMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7QUFFdE0sTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDM0MsSUFBSSxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxNQUFNLFVB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Q0FDdEYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDUixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsV0FBVyxFQUFFLENBQUM7UUFDZCxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBYSxNQUFNLENBQUMsZ0JBQWdCLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDNUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDUixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUNuQixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUMxRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQ3JDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDdEIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcblxuaW1wb3J0IEJvd3NlciBmcm9tICdib3dzZXInO1xuaW1wb3J0IHsgZmluYWxpemUsIGZyb21FdmVudCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNldCB9IGZyb20gJy4vaGVscGVycyc7XG5cbmxldCBwYXJzZXI6IERPTVBhcnNlciB8IG51bGwgPSBudWxsO1xubGV0IGJvd3NlclBhcnNlcjogQm93c2VyLlBhcnNlci5QYXJzZXIgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IGdldERldmljZUluZm8gPSAoKSA9PiB7XG4gIGlmICghYm93c2VyUGFyc2VyKSB7XG4gICAgYm93c2VyUGFyc2VyID0gQm93c2VyLmdldFBhcnNlcih3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cbiAgcmV0dXJuIGJvd3NlclBhcnNlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RvdWNoRGV2aWNlID0gKCk6IGJvb2xlYW4gPT4gKCdvbnBvaW50ZXJkb3duJyBpbiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMCkgfHwgJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICh3aW5kb3cubWF0Y2hNZWRpYT8uKCcocG9pbnRlcjogY29hcnNlKScpLm1hdGNoZXMgPz8gZmFsc2UpO1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnROYW1lSGFuZGxlQ2xpY2sgPSAoKCkgPT4ge1xuICBpZiAoaXNUb3VjaERldmljZSgpKSB7XG4gICAgcmV0dXJuICdwb2ludGVyZG93bic7XG4gIH1cbiAgY29uc3QgZGV2aWNlSW5mbyA9IGdldERldmljZUluZm8oKTtcblxuICByZXR1cm4gZGV2aWNlSW5mby5pc1BsYXRmb3JtKCdkZXNrdG9wJykgPyAnY2xpY2snIDogJ3RvdWNoc3RhcnQnO1xufSkoKTtcblxuZXhwb3J0IGNvbnN0IGdldERvY3VtZW50QnlTdHJpbmcgPSAoaHRtbFN0cjogc3RyaW5nKTogRG9jdW1lbnQgPT4ge1xuICBpZiAoIXBhcnNlcikge1xuICAgIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgfVxuICByZXR1cm4gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sU3RyLCAndGV4dC9odG1sJyk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0ID0gKHJlY3Q6IElCb3VuZGluZ0NsaWVudFJlY3QpOiBJQm91bmRpbmdDbGllbnRSZWN0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHJlY3RbJ3RvcCddLFxuICAgIGxlZnQ6IHJlY3RbJ2xlZnQnXSxcbiAgICB3aWR0aDogcmVjdFsnd2lkdGgnXSxcbiAgICBoZWlnaHQ6IHJlY3RbJ2hlaWdodCddLFxuICAgIGJvdHRvbTogcmVjdFsnYm90dG9tJ10sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0U3R5bGVzRWxlbWVudCA9IChlbDogSFRNTEVsZW1lbnQsIHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiBzZXQoZWwsIGBzdHlsZS4ke2tleX1gLCBzdHlsZXNba2V5XSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0ID0gKHdpbjogV2luZG93ID0gd2luZG93KTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9ID0+IHtcbiAgY29uc3QgZG9jID0gd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBib2R5ID0gd2luLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0sXG4gICAgdyA9IHdpbi5pbm5lcldpZHRoIHx8IGRvYy5jbGllbnRXaWR0aCB8fCBib2R5LmNsaWVudFdpZHRoLFxuICAgIGggPSB3aW4uaW5uZXJIZWlnaHQgfHwgZG9jLmNsaWVudEhlaWdodCB8fCBib2R5LmNsaWVudEhlaWdodDtcblxuICByZXR1cm4geyB3aWR0aDogdywgaGVpZ2h0OiBoIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9IChlbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudCwgcG9zaXRpb246IG51bWJlcik6IHZvaWQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5mb2N1cygpO1xuICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tWaWV3SW5TY3JlZW4gPSAoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgZWxlbWVudDogSFRNTEVsZW1lbnQsIGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCwgbWF4VG9wTGVmdD86IHsgdG9wPzogbnVtYmVyOyBsZWZ0PzogbnVtYmVyIH0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjb250YWluZXIgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0Q29udGFpbmVyID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG5cbiAgaWYgKGVsZW1lbnRTY3JvbGwpIHtcbiAgICBjb25zdCByZWN0RWxlbWVudFNjcm9sbCA9IGVsZW1lbnRTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZWN0Q29udGFpbmVyWydsZWZ0J10gPSByZWN0RWxlbWVudFNjcm9sbC5sZWZ0O1xuICAgIHJlY3RDb250YWluZXJbJ3RvcCddID0gcmVjdEVsZW1lbnRTY3JvbGwudG9wO1xuICB9XG5cbiAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7IGxlZnQsIHRvcCB9ID0gcmVjdEVsZW1lbnQ7XG4gIGNvbnN0IHRvcENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ3RvcCddO1xuICBjb25zdCBsZWZ0Q29udGFpbmVyID0gcmVjdENvbnRhaW5lclsnbGVmdCddO1xuICBjb25zdCB3aWR0aENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ3dpZHRoJ107XG4gIGNvbnN0IGhlaWdodENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ2hlaWdodCddO1xuICBjb25zdCBzY3JvbGxUb3BDb250YWluZXIgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICBjb25zdCBzY3JvbGxMZWZ0Q29udGFpbmVyID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XG4gIGNvbnN0IGxpbWl0VG9wID0gdG9wQ29udGFpbmVyICsgc2Nyb2xsVG9wQ29udGFpbmVyICsgaGVpZ2h0Q29udGFpbmVyO1xuICBjb25zdCBsaW1pdExlZnQgPSBsZWZ0Q29udGFpbmVyICsgc2Nyb2xsTGVmdENvbnRhaW5lciArIHdpZHRoQ29udGFpbmVyO1xuXG4gIGNvbnN0IG1heFRvcEl0ZW0gPSB0b3AgKyAobWF4VG9wTGVmdD8udG9wIHx8IDApO1xuICBjb25zdCBtYXhMZWZ0SXRlbSA9IGxlZnQgKyAobWF4VG9wTGVmdD8ubGVmdCB8fCAwKTtcblxuICBpZiAodG9wQ29udGFpbmVyIDw9IG1heFRvcEl0ZW0gJiYgbWF4VG9wSXRlbSA8PSBsaW1pdFRvcCAmJiBsZWZ0Q29udGFpbmVyIDw9IG1heExlZnRJdGVtICYmIG1heExlZnRJdGVtIDw9IGxpbWl0TGVmdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIgPSAobW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LCBlbGVtZW50PzogSFRNTEVsZW1lbnQsIHJlY3Q/OiBET01SZWN0KTogYm9vbGVhbiA9PiB7XG4gIGlmICghZWxlbWVudCAmJiAhcmVjdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCByZWN0RWxlbWVudCA9IHJlY3QgfHwgZWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgKHt9IGFzIERPTVJlY3QpO1xuICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdEVsZW1lbnQ7XG4gIGNvbnN0IGxpbWl0TGVmdCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgbGltaXRUb3AgPSB0b3AgKyBoZWlnaHQ7XG4gIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gbW91c2VQb3NpdGlvbjtcbiAgaWYgKGxlZnQgPD0gY2xpZW50WCAmJiBjbGllbnRYIDw9IGxpbWl0TGVmdCAmJiB0b3AgPD0gY2xpZW50WSAmJiBjbGllbnRZIDw9IGxpbWl0VG9wKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50ID0gKGNvbmZpZzoge1xuICBlbGVtZW50TW91c2VEb3duOiBIVE1MRWxlbWVudDtcbiAgZnVuY3Rpb25Nb3VzZURvd24/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGlzU3RhcnRXaXRoTW91c2VEb3duRXZlbnQ/OiBib29sZWFuO1xuICBlbGVtZW50TW91c2VNb3ZlPzogSFRNTEVsZW1lbnQ7XG4gIGZ1bmN0aW9uTW91c2VNb3ZlPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBlbGVtZW50TW91c2VVcD86IEhUTUxFbGVtZW50O1xuICBmdW5jdGlvbk1vdXNlVXA/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWY7XG59KSA9PiB7XG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIGNvbnN0IGFkZENsYXNzID0gKCkgPT4ge1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJyFzZWxlY3Qtbm9uZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCchY3Vyc29yLWdyYWJiaW5nJyk7XG4gICAgfSwgMjUwKTtcbiAgfTtcbiAgY29uc3QgcmVtb3ZlQ2xhc3MgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCchc2VsZWN0LW5vbmUnKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJyFjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9O1xuICBmcm9tRXZlbnQoY29uZmlnLmVsZW1lbnRNb3VzZURvd24sICdtb3VzZWxlYXZlJylcbiAgICAucGlwZShcbiAgICAgIHRhcCgoKSA9PiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2N1cnNvci1wb2ludGVyJykpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKGNvbmZpZy5kZXN0cm95UmVmKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG4gIGZyb21FdmVudChjb25maWcuZWxlbWVudE1vdXNlRG93biwgJ21vdXNlZW50ZXInKVxuICAgIC5waXBlKFxuICAgICAgdGFwKCgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnY3Vyc29yLXBvaW50ZXInKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoY29uZmlnLmRlc3Ryb3lSZWYpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBjb25zdCBtb3VzZURvd24gPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29uZmlnLmVsZW1lbnRNb3VzZURvd24sICdtb3VzZWRvd24nKS5waXBlKFxuICAgIHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGFkZENsYXNzKCk7XG4gICAgICBjb25maWcuZnVuY3Rpb25Nb3VzZURvd24/LihlKTtcbiAgICB9KVxuICApO1xuICBjb25zdCBtb3VzZXVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbmZpZy5lbGVtZW50TW91c2VVcCB8fCBkb2N1bWVudCwgJ21vdXNldXAnKS5waXBlKFxuICAgIHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJlbW92ZUNsYXNzKCk7XG4gICAgICBjb25maWcuZnVuY3Rpb25Nb3VzZVVwPy4oZSk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBtb3VzZW1vdmUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29uZmlnLmVsZW1lbnRNb3VzZU1vdmUgfHwgZG9jdW1lbnQsICdtb3VzZW1vdmUnKS5waXBlKFxuICAgIHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbmZpZy5mdW5jdGlvbk1vdXNlTW92ZT8uKGUpO1xuICAgIH0pLFxuICAgIHRha2VVbnRpbChtb3VzZXVwKVxuICApO1xuXG4gIHJldHVybiBtb3VzZURvd24ucGlwZShcbiAgICBtZXJnZU1hcCgoZTogTW91c2VFdmVudCkgPT4gKGNvbmZpZy5pc1N0YXJ0V2l0aE1vdXNlRG93bkV2ZW50ID8gbW91c2Vtb3ZlLnBpcGUoc3RhcnRXaXRoKGUpKSA6IG1vdXNlbW92ZSkpLFxuICAgIHRha2VVbnRpbERlc3Ryb3llZChjb25maWcuZGVzdHJveVJlZiksXG4gICAgZmluYWxpemUocmVtb3ZlQ2xhc3MpXG4gICk7XG59O1xuIl19
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoQyxJQUFJLE1BQU0sR0FBcUIsSUFBSSxDQUFDO0FBQ3BDLElBQUksWUFBWSxHQUFnQyxJQUFJLENBQUM7QUFFckQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtJQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQVksRUFBRSxDQUFDLENBQUMsZUFBZSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLGNBQWMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7QUFFdE07O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUMzQyxJQUFJLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDcEIsT0FB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LENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFhLE1BQU0sQ0FBQyxjQUFjLElBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDUixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsV0FBVyxFQUFFLENBQUM7UUFDZCxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBYSxNQUFNLENBQUMsZ0JBQWdCLElBQUksUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDNUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDUixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUNuQixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUMxRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQ3JDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDdEIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcblxuaW1wb3J0IEJvd3NlciBmcm9tICdib3dzZXInO1xuaW1wb3J0IHsgZmluYWxpemUsIGZyb21FdmVudCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNldCB9IGZyb20gJy4vaGVscGVycyc7XG5cbmxldCBwYXJzZXI6IERPTVBhcnNlciB8IG51bGwgPSBudWxsO1xubGV0IGJvd3NlclBhcnNlcjogQm93c2VyLlBhcnNlci5QYXJzZXIgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBM4bqleSB0aMO0bmcgdGluIHRoaeG6v3QgYuG7iyB2w6AgdHLDrG5oIGR1eeG7h3QgKFPhu60gZOG7pW5nIHRoxrAgdmnhu4duIEJvd3NlcikuXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgUGFyc2VyIGNo4bupYSB0aMO0bmcgdGluIE9TLCBCcm93c2VyLCBQbGF0Zm9ybS4uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RGV2aWNlSW5mbyA9ICgpID0+IHtcbiAgaWYgKCFib3dzZXJQYXJzZXIpIHtcbiAgICBib3dzZXJQYXJzZXIgPSBCb3dzZXIuZ2V0UGFyc2VyKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuICByZXR1cm4gYm93c2VyUGFyc2VyO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSB0aGnhur90IGLhu4sgaGnhu4duIHThuqFpIGPDsyBo4buXIHRy4bujIGPhuqNtIOG7qW5nIChUb3VjaCkga2jDtG5nLlxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBsw6AgdGhp4bq/dCBi4buLIGPhuqNtIOG7qW5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RvdWNoRGV2aWNlID0gKCk6IGJvb2xlYW4gPT4gKCdvbnBvaW50ZXJkb3duJyBpbiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMCkgfHwgJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICh3aW5kb3cubWF0Y2hNZWRpYT8uKCcocG9pbnRlcjogY29hcnNlKScpLm1hdGNoZXMgPz8gZmFsc2UpO1xuXG4vKipcbiAqIFjDoWMgxJHhu4tuaCB0w6puIHPhu7Ega2nhu4duIGNsaWNrIHBow7kgaOG7o3AgY2hvIHRoaeG6v3QgYuG7iyAoY2xpY2sgY2hvIGRlc2t0b3AsIHBvaW50ZXJkb3duIGNobyB0b3VjaCkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFdmVudE5hbWVIYW5kbGVDbGljayA9ICgoKSA9PiB7XG4gIGlmIChpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICByZXR1cm4gJ3BvaW50ZXJkb3duJztcbiAgfVxuICBjb25zdCBkZXZpY2VJbmZvID0gZ2V0RGV2aWNlSW5mbygpO1xuXG4gIHJldHVybiBkZXZpY2VJbmZvLmlzUGxhdGZvcm0oJ2Rlc2t0b3AnKSA/ICdjbGljaycgOiAndG91Y2hzdGFydCc7XG59KSgpO1xuXG4vKipcbiAqIENodXnhu4NuIMSR4buVaSBt4buZdCBjaHXhu5dpIEhUTUwgdGjDoG5oIMSR4buRaSB0xrDhu6NuZyBEb2N1bWVudC5cbiAqIEBwYXJhbSBodG1sU3RyIENodeG7l2kgSFRNTCBj4bqnbiBwYXJzZVxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIERvY3VtZW50IHTGsMahbmcg4bupbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERvY3VtZW50QnlTdHJpbmcgPSAoaHRtbFN0cjogc3RyaW5nKTogRG9jdW1lbnQgPT4ge1xuICBpZiAoIXBhcnNlcikge1xuICAgIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgfVxuICByZXR1cm4gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sU3RyLCAndGV4dC9odG1sJyk7XG59O1xuXG4vKipcbiAqIFNhbyBjaMOpcCBjw6FjIHRodeG7mWMgdMOtbmggY8ahIGLhuqNuIGPhu6dhIElCb3VuZGluZ0NsaWVudFJlY3QuXG4gKiBAcGFyYW0gcmVjdCDEkOG7kWkgdMaw4bujbmcgSUJvdW5kaW5nQ2xpZW50UmVjdCBn4buRY1xuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIElCb3VuZGluZ0NsaWVudFJlY3QgxJHDoyDEkcaw4bujYyBjb3B5XG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QgPSAocmVjdDogSUJvdW5kaW5nQ2xpZW50UmVjdCk6IElCb3VuZGluZ0NsaWVudFJlY3QgPT4ge1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdFsndG9wJ10sXG4gICAgbGVmdDogcmVjdFsnbGVmdCddLFxuICAgIHdpZHRoOiByZWN0Wyd3aWR0aCddLFxuICAgIGhlaWdodDogcmVjdFsnaGVpZ2h0J10sXG4gICAgYm90dG9tOiByZWN0Wydib3R0b20nXSxcbiAgfTtcbn07XG5cbi8qKlxuICogR8OhbiBuaGnhu4F1IHRodeG7mWMgdMOtbmggQ1NTIHN0eWxlIGNobyBt4buZdCBFbGVtZW50LlxuICogQHBhcmFtIGVsIFBo4bqnbiB04butIEhUTUwgY+G6p24gZ8OhbiBzdHlsZVxuICogQHBhcmFtIHN0eWxlcyDEkOG7kWkgdMaw4bujbmcgY2jhu6lhIGPDoWMgc3R5bGUgKHbDrSBk4bulOiB7IGNvbG9yOiAncmVkJywgZGlzcGxheTogJ2Jsb2NrJyB9KVxuICovXG5leHBvcnQgY29uc3Qgc2V0U3R5bGVzRWxlbWVudCA9IChlbDogSFRNTEVsZW1lbnQsIHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiBzZXQoZWwsIGBzdHlsZS4ke2tleX1gLCBzdHlsZXNba2V5XSkpO1xufTtcblxuLyoqXG4gKiBM4bqleSBrw61jaCB0aMaw4bubYyBWaWV3cG9ydCBoaeG7g24gdGjhu4sgY+G7p2EgY+G7rWEgc+G7lSB0csOsbmggZHV54buHdC5cbiAqIEBwYXJhbSB3aW4gxJDhu5FpIHTGsOG7o25nIFdpbmRvdyAobeG6t2MgxJHhu4tuaCBsw6Agd2luZG93KVxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIGNo4bupYSB3aWR0aCB2w6AgaGVpZ2h0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydCA9ICh3aW46IFdpbmRvdyA9IHdpbmRvdyk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IGRvYyA9IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgYm9keSA9IHdpbi5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLFxuICAgIHcgPSB3aW4uaW5uZXJXaWR0aCB8fCBkb2MuY2xpZW50V2lkdGggfHwgYm9keS5jbGllbnRXaWR0aCxcbiAgICBoID0gd2luLmlubmVySGVpZ2h0IHx8IGRvYy5jbGllbnRIZWlnaHQgfHwgYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgcmV0dXJuIHsgd2lkdGg6IHcsIGhlaWdodDogaCB9O1xufTtcblxuLyoqXG4gKiBUaGnhur90IGzhuq1wIHbhu4sgdHLDrSBjb24gdHLhu48gKGNhcmV0KSBjaG8gdGjhursgSW5wdXQgaG/hurdjIFRleHRhcmVhLlxuICogQHBhcmFtIGVsZW1lbnQgVGjhursgaW5wdXQgaG/hurdjIHRleHRhcmVhXG4gKiBAcGFyYW0gcG9zaXRpb24gVuG7iyB0csOtIGPhuqduIMSR4bq3dCBjb24gdHLhu49cbiAqL1xuZXhwb3J0IGNvbnN0IHNldENhcmV0UG9zaXRpb24gPSAoZWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQsIHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQuZm9jdXMoKTtcbiAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3NpdGlvbiwgcG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBwaOG6p24gdOG7rSBjw7MgxJFhbmcgaGnhu4NuIHRo4buLIHRyb25nIHbDuW5nIG5ow6xuIHRo4bqleSAodmlld3BvcnQpIGPhu6dhIG3hu5l0IGNvbnRhaW5lciBraMO0bmcuXG4gKiBAcGFyYW0gY29udGFpbmVyIEVsZW1lbnQgY2hhIGNo4bupYSB2w7luZyBzY3JvbGxcbiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgY+G6p24ga2nhu4NtIHRyYVxuICogQHBhcmFtIGVsZW1lbnRTY3JvbGwgKFTDuXkgY2jhu41uKSBFbGVtZW50IMSR4bqhaSBkaeG7h24gY2hvIHbDuW5nIHNjcm9sbCBu4bq/dSBraMOhYyBjb250YWluZXJcbiAqIEBwYXJhbSBtYXhUb3BMZWZ0IChUw7l5IGNo4buNbikgT2Zmc2V0IGLhu5Ugc3VuZyDEkeG7gyBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IG7hurFtIHRyb25nIHbDuW5nIG5ow6xuIHRo4bqleVxuICovXG5leHBvcnQgY29uc3QgY2hlY2tWaWV3SW5TY3JlZW4gPSAoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgZWxlbWVudDogSFRNTEVsZW1lbnQsIGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCwgbWF4VG9wTGVmdD86IHsgdG9wPzogbnVtYmVyOyBsZWZ0PzogbnVtYmVyIH0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjb250YWluZXIgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0Q29udGFpbmVyID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG5cbiAgaWYgKGVsZW1lbnRTY3JvbGwpIHtcbiAgICBjb25zdCByZWN0RWxlbWVudFNjcm9sbCA9IGVsZW1lbnRTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZWN0Q29udGFpbmVyWydsZWZ0J10gPSByZWN0RWxlbWVudFNjcm9sbC5sZWZ0O1xuICAgIHJlY3RDb250YWluZXJbJ3RvcCddID0gcmVjdEVsZW1lbnRTY3JvbGwudG9wO1xuICB9XG5cbiAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7IGxlZnQsIHRvcCB9ID0gcmVjdEVsZW1lbnQ7XG4gIGNvbnN0IHRvcENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ3RvcCddO1xuICBjb25zdCBsZWZ0Q29udGFpbmVyID0gcmVjdENvbnRhaW5lclsnbGVmdCddO1xuICBjb25zdCB3aWR0aENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ3dpZHRoJ107XG4gIGNvbnN0IGhlaWdodENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ2hlaWdodCddO1xuICBjb25zdCBzY3JvbGxUb3BDb250YWluZXIgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICBjb25zdCBzY3JvbGxMZWZ0Q29udGFpbmVyID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XG4gIGNvbnN0IGxpbWl0VG9wID0gdG9wQ29udGFpbmVyICsgc2Nyb2xsVG9wQ29udGFpbmVyICsgaGVpZ2h0Q29udGFpbmVyO1xuICBjb25zdCBsaW1pdExlZnQgPSBsZWZ0Q29udGFpbmVyICsgc2Nyb2xsTGVmdENvbnRhaW5lciArIHdpZHRoQ29udGFpbmVyO1xuXG4gIGNvbnN0IG1heFRvcEl0ZW0gPSB0b3AgKyAobWF4VG9wTGVmdD8udG9wIHx8IDApO1xuICBjb25zdCBtYXhMZWZ0SXRlbSA9IGxlZnQgKyAobWF4VG9wTGVmdD8ubGVmdCB8fCAwKTtcblxuICBpZiAodG9wQ29udGFpbmVyIDw9IG1heFRvcEl0ZW0gJiYgbWF4VG9wSXRlbSA8PSBsaW1pdFRvcCAmJiBsZWZ0Q29udGFpbmVyIDw9IG1heExlZnRJdGVtICYmIG1heExlZnRJdGVtIDw9IGxpbWl0TGVmdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSB04buNYSDEkeG7mSBjaHXhu5l0IGhp4buHbiB04bqhaSBjw7MgbuG6sW0gdHJvbmcgdsO5bmcgY+G7p2EgbeG7mXQgRWxlbWVudCBraMO0bmcuXG4gKiBAcGFyYW0gbW91c2VQb3NpdGlvbiDEkOG7kWkgdMaw4bujbmcgY2jhu6lhIGNsaWVudFgsIGNsaWVudFlcbiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgY+G6p24ga2nhu4NtIHRyYVxuICogQHBhcmFtIHJlY3QgKFTDuXkgY2jhu41uKSBCb3VuZGluZyByZWN0IMSRw6MgY8OzIHPhurVuIMSR4buDIHThu5FpIMawdSBoaeG7h3UgbsSDbmdcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgY2h14buZdCDEkWFuZyDEkcOoIGzDqm4gcGjhuqduIHThu61cbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIgPSAobW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LCBlbGVtZW50PzogSFRNTEVsZW1lbnQsIHJlY3Q/OiBET01SZWN0KTogYm9vbGVhbiA9PiB7XG4gIGlmICghZWxlbWVudCAmJiAhcmVjdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCByZWN0RWxlbWVudCA9IHJlY3QgfHwgZWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgKHt9IGFzIERPTVJlY3QpO1xuICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdEVsZW1lbnQ7XG4gIGNvbnN0IGxpbWl0TGVmdCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgbGltaXRUb3AgPSB0b3AgKyBoZWlnaHQ7XG4gIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gbW91c2VQb3NpdGlvbjtcbiAgaWYgKGxlZnQgPD0gY2xpZW50WCAmJiBjbGllbnRYIDw9IGxpbWl0TGVmdCAmJiB0b3AgPD0gY2xpZW50WSAmJiBjbGllbnRZIDw9IGxpbWl0VG9wKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFThuqFvIHPhu7Ega2nhu4duIEvDqW8tVGjhuqMgKERyYWcpIG7Dom5nIGNhbyBk4buxYSB0csOqbiBSeEpTIGNobyBt4buZdCBFbGVtZW50LlxuICogQHBhcmFtIGNvbmZpZyBD4bqldSBow6xuaCBz4buxIGtp4buHbiAoZWxlbWVudCwgY8OhYyBow6BtIGNhbGxiYWNrLCBkZXN0cm95UmVmKVxuICogQHJldHVybnMgT2JzZXJ2YWJsZSBwaMOhdCByYSBz4buxIGtp4buHbiBtb3VzZW1vdmUgdHJvbmcgcXXDoSB0csOsbmgga8Opb1xuICovXG5leHBvcnQgY29uc3QgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50ID0gKGNvbmZpZzoge1xuICBlbGVtZW50TW91c2VEb3duOiBIVE1MRWxlbWVudDtcbiAgZnVuY3Rpb25Nb3VzZURvd24/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGlzU3RhcnRXaXRoTW91c2VEb3duRXZlbnQ/OiBib29sZWFuO1xuICBlbGVtZW50TW91c2VNb3ZlPzogSFRNTEVsZW1lbnQ7XG4gIGZ1bmN0aW9uTW91c2VNb3ZlPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBlbGVtZW50TW91c2VVcD86IEhUTUxFbGVtZW50O1xuICBmdW5jdGlvbk1vdXNlVXA/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWY7XG59KSA9PiB7XG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIGNvbnN0IGFkZENsYXNzID0gKCkgPT4ge1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJyFzZWxlY3Qtbm9uZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCchY3Vyc29yLWdyYWJiaW5nJyk7XG4gICAgfSwgMjUwKTtcbiAgfTtcbiAgY29uc3QgcmVtb3ZlQ2xhc3MgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCchc2VsZWN0LW5vbmUnKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJyFjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9O1xuICBmcm9tRXZlbnQoY29uZmlnLmVsZW1lbnRNb3VzZURvd24sICdtb3VzZWxlYXZlJylcbiAgICAucGlwZShcbiAgICAgIHRhcCgoKSA9PiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2N1cnNvci1wb2ludGVyJykpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKGNvbmZpZy5kZXN0cm95UmVmKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG4gIGZyb21FdmVudChjb25maWcuZWxlbWVudE1vdXNlRG93biwgJ21vdXNlZW50ZXInKVxuICAgIC5waXBlKFxuICAgICAgdGFwKCgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnY3Vyc29yLXBvaW50ZXInKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoY29uZmlnLmRlc3Ryb3lSZWYpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBjb25zdCBtb3VzZURvd24gPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29uZmlnLmVsZW1lbnRNb3VzZURvd24sICdtb3VzZWRvd24nKS5waXBlKFxuICAgIHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGFkZENsYXNzKCk7XG4gICAgICBjb25maWcuZnVuY3Rpb25Nb3VzZURvd24/LihlKTtcbiAgICB9KVxuICApO1xuICBjb25zdCBtb3VzZXVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbmZpZy5lbGVtZW50TW91c2VVcCB8fCBkb2N1bWVudCwgJ21vdXNldXAnKS5waXBlKFxuICAgIHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJlbW92ZUNsYXNzKCk7XG4gICAgICBjb25maWcuZnVuY3Rpb25Nb3VzZVVwPy4oZSk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBtb3VzZW1vdmUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29uZmlnLmVsZW1lbnRNb3VzZU1vdmUgfHwgZG9jdW1lbnQsICdtb3VzZW1vdmUnKS5waXBlKFxuICAgIHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbmZpZy5mdW5jdGlvbk1vdXNlTW92ZT8uKGUpO1xuICAgIH0pLFxuICAgIHRha2VVbnRpbChtb3VzZXVwKVxuICApO1xuXG4gIHJldHVybiBtb3VzZURvd24ucGlwZShcbiAgICBtZXJnZU1hcCgoZTogTW91c2VFdmVudCkgPT4gKGNvbmZpZy5pc1N0YXJ0V2l0aE1vdXNlRG93bkV2ZW50ID8gbW91c2Vtb3ZlLnBpcGUoc3RhcnRXaXRoKGUpKSA6IG1vdXNlbW92ZSkpLFxuICAgIHRha2VVbnRpbERlc3Ryb3llZChjb25maWcuZGVzdHJveVJlZiksXG4gICAgZmluYWxpemUocmVtb3ZlQ2xhc3MpXG4gICk7XG59O1xuIl19
|
package/esm2022/download.mjs
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { convertBase64ToBlob } from './base64';
|
|
2
|
+
/**
|
|
3
|
+
* Tải file từ URL bằng XMLHttpRequest.
|
|
4
|
+
* Khác với `downloadFileByUrl`, hàm này sử dụng XHR để tải file, hữu ích hơn
|
|
5
|
+
* trong các trường hợp cần header tùy chỉnh hoặc gọi API nội bộ.
|
|
6
|
+
* @param fileUrl URL của file cần tải
|
|
7
|
+
* @param filename Tên file sẽ được lưu về máy
|
|
8
|
+
*/
|
|
2
9
|
export const downloadFileByUrlUseXmlRequest = (fileUrl, filename) => {
|
|
3
10
|
const xmlRequest = new XMLHttpRequest();
|
|
4
11
|
xmlRequest.open('GET', fileUrl, true);
|
|
@@ -13,6 +20,13 @@ export const downloadFileByUrlUseXmlRequest = (fileUrl, filename) => {
|
|
|
13
20
|
};
|
|
14
21
|
xmlRequest.send();
|
|
15
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Tải file từ URL bằng cách tạo thẻ `<a>` ảo và kích hoạt sự kiện click.
|
|
25
|
+
* Hỗ trợ chế độ mở file trên tab mới (onlyOpen) hoặc tải xuống thực sự.
|
|
26
|
+
* @param fileUrl URL trực tiếp của file hoặc Blob URL
|
|
27
|
+
* @param filename Tên file sẽ được lưu khi tải về
|
|
28
|
+
* @param onlyOpen Nếu `true`, chỉ mở file trong tab mới thay vì tải về
|
|
29
|
+
*/
|
|
16
30
|
export const downloadFileByUrl = async (fileUrl, filename, onlyOpen) => {
|
|
17
31
|
const downloadFileElement = document.createElement('a');
|
|
18
32
|
if (!onlyOpen) {
|
|
@@ -28,6 +42,13 @@ export const downloadFileByUrl = async (fileUrl, filename, onlyOpen) => {
|
|
|
28
42
|
downloadFileElement.click();
|
|
29
43
|
downloadFileElement.remove();
|
|
30
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Tải ảnh từ một phần tử `<img>` dựa trên thuộc tính `src` (hỗ trợ Base64 Data URL).
|
|
47
|
+
* Thường dùng để cho phép người dùng lưu ảnh barcode, QR code về máy.
|
|
48
|
+
* @param imageElement Phần tử `<img>` cần lấy ảnh
|
|
49
|
+
* @param typeFileDownload Loại MIME của file (mặc định: 'image/png')
|
|
50
|
+
* @param nameFile Tên file sẽ được lưu (mặc định: 'barcode')
|
|
51
|
+
*/
|
|
31
52
|
export const downloadImageFromELement = (imageElement, typeFileDownload, nameFile) => {
|
|
32
53
|
const parentElement = imageElement?.src;
|
|
33
54
|
const blobData = convertBase64ToBlob(parentElement);
|
|
@@ -38,4 +59,4 @@ export const downloadImageFromELement = (imageElement, typeFileDownload, nameFil
|
|
|
38
59
|
link.download = nameFile || 'barcode';
|
|
39
60
|
link.click();
|
|
40
61
|
};
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9kb3dubG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFFeEMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1RCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBQ0YsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFDRixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLE9BQWUsRUFBRSxRQUFnQixFQUFFLFFBQWtCLEVBQUUsRUFBRTtJQUMvRixNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEMsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ25DLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDeEMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUN0QyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFlBQThCLEVBQUUsZ0JBQXlCLEVBQUUsUUFBaUIsRUFBRSxFQUFFO0lBQ3ZILE1BQU0sYUFBYSxHQUFHLFlBQVksRUFBRSxHQUFHLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksU0FBUyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnZlcnRCYXNlNjRUb0Jsb2IgfSBmcm9tICcuL2Jhc2U2NCc7XG5cbi8qKlxuICogVOG6o2kgZmlsZSB04burIFVSTCBi4bqxbmcgWE1MSHR0cFJlcXVlc3QuXG4gKiBLaMOhYyB24bubaSBgZG93bmxvYWRGaWxlQnlVcmxgLCBow6BtIG7DoHkgc+G7rSBk4bulbmcgWEhSIMSR4buDIHThuqNpIGZpbGUsIGjhu691IMOtY2ggaMahblxuICogdHJvbmcgY8OhYyB0csaw4budbmcgaOG7o3AgY+G6p24gaGVhZGVyIHTDuXkgY2jhu4luaCBob+G6t2MgZ+G7jWkgQVBJIG7hu5lpIGLhu5kuXG4gKiBAcGFyYW0gZmlsZVVybCBVUkwgY+G7p2EgZmlsZSBj4bqnbiB04bqjaVxuICogQHBhcmFtIGZpbGVuYW1lIFTDqm4gZmlsZSBz4bq9IMSRxrDhu6NjIGzGsHUgduG7gSBtw6F5XG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeVVybFVzZVhtbFJlcXVlc3QgPSAoZmlsZVVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHhtbFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICB4bWxSZXF1ZXN0Lm9wZW4oJ0dFVCcsIGZpbGVVcmwsIHRydWUpO1xuICB4bWxSZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgeG1sUmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHhtbFJlcXVlc3QucmVzcG9uc2UpO1xuXG4gICAgZG93bmxvYWRGaWxlQnlVcmwodXJsLCBmaWxlbmFtZSk7XG4gIH07XG4gIHhtbFJlcXVlc3Qub25sb2FkID0gKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHhtbFJlcXVlc3QucmVzcG9uc2UpO1xuXG4gICAgZG93bmxvYWRGaWxlQnlVcmwodXJsLCBmaWxlbmFtZSk7XG4gIH07XG4gIHhtbFJlcXVlc3Quc2VuZCgpO1xufTtcblxuLyoqXG4gKiBU4bqjaSBmaWxlIHThu6sgVVJMIGLhurFuZyBjw6FjaCB04bqhbyB0aOG6uyBgPGE+YCDhuqNvIHbDoCBrw61jaCBob+G6oXQgc+G7sSBraeG7h24gY2xpY2suXG4gKiBI4buXIHRy4bujIGNo4bq/IMSR4buZIG3hu58gZmlsZSB0csOqbiB0YWIgbeG7m2kgKG9ubHlPcGVuKSBob+G6t2MgdOG6o2kgeHXhu5FuZyB0aOG7sWMgc+G7sS5cbiAqIEBwYXJhbSBmaWxlVXJsIFVSTCB0cuG7sWMgdGnhur9wIGPhu6dhIGZpbGUgaG/hurdjIEJsb2IgVVJMXG4gKiBAcGFyYW0gZmlsZW5hbWUgVMOqbiBmaWxlIHPhur0gxJHGsOG7o2MgbMawdSBraGkgdOG6o2kgduG7gVxuICogQHBhcmFtIG9ubHlPcGVuIE7hur91IGB0cnVlYCwgY2jhu4kgbeG7nyBmaWxlIHRyb25nIHRhYiBt4bubaSB0aGF5IHbDrCB04bqjaSB24buBXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeVVybCA9IGFzeW5jIChmaWxlVXJsOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIG9ubHlPcGVuPzogYm9vbGVhbikgPT4ge1xuICBjb25zdCBkb3dubG9hZEZpbGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXG4gIGlmICghb25seU9wZW4pIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGVVcmwpO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xuXG4gICAgICBmaWxlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB9XG4gIH1cbiAgZG93bmxvYWRGaWxlRWxlbWVudC5ocmVmID0gZmlsZVVybDtcbiAgZG93bmxvYWRGaWxlRWxlbWVudC5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICBkb3dubG9hZEZpbGVFbGVtZW50LnRhcmdldCA9ICdfYmxhbmsnO1xuICBkb3dubG9hZEZpbGVFbGVtZW50LmNsaWNrKCk7XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQucmVtb3ZlKCk7XG59O1xuXG4vKipcbiAqIFThuqNpIOG6o25oIHThu6sgbeG7mXQgcGjhuqduIHThu60gYDxpbWc+YCBk4buxYSB0csOqbiB0aHXhu5ljIHTDrW5oIGBzcmNgICho4buXIHRy4bujIEJhc2U2NCBEYXRhIFVSTCkuXG4gKiBUaMaw4budbmcgZMO5bmcgxJHhu4MgY2hvIHBow6lwIG5nxrDhu51pIGTDuW5nIGzGsHUg4bqjbmggYmFyY29kZSwgUVIgY29kZSB24buBIG3DoXkuXG4gKiBAcGFyYW0gaW1hZ2VFbGVtZW50IFBo4bqnbiB04butIGA8aW1nPmAgY+G6p24gbOG6pXkg4bqjbmhcbiAqIEBwYXJhbSB0eXBlRmlsZURvd25sb2FkIExv4bqhaSBNSU1FIGPhu6dhIGZpbGUgKG3hurdjIMSR4buLbmg6ICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIG5hbWVGaWxlIFTDqm4gZmlsZSBz4bq9IMSRxrDhu6NjIGzGsHUgKG3hurdjIMSR4buLbmg6ICdiYXJjb2RlJylcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkSW1hZ2VGcm9tRUxlbWVudCA9IChpbWFnZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQsIHR5cGVGaWxlRG93bmxvYWQ/OiBzdHJpbmcsIG5hbWVGaWxlPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBpbWFnZUVsZW1lbnQ/LnNyYztcbiAgY29uc3QgYmxvYkRhdGEgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHBhcmVudEVsZW1lbnQpO1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Jsb2JEYXRhXSwgeyB0eXBlOiB0eXBlRmlsZURvd25sb2FkIHx8ICdpbWFnZS9wbmcnIH0pO1xuICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblxuICBsaW5rLmhyZWYgPSB1cmw7XG4gIGxpbmsuZG93bmxvYWQgPSBuYW1lRmlsZSB8fCAnYmFyY29kZSc7XG4gIGxpbmsuY2xpY2soKTtcbn07XG4iXX0=
|
package/esm2022/file.mjs
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { convertBase64ToBlob } from './base64';
|
|
2
2
|
import { get, set } from './helpers';
|
|
3
3
|
import { uuid } from './uuid';
|
|
4
|
+
/** Kiểm tra file có phải là ảnh không (image/*). */
|
|
4
5
|
export const isTypeImage = (file) => (file.type.match(/image.*/) ? true : false);
|
|
6
|
+
/** Kiểm tra file có phải là video không (video/*). */
|
|
5
7
|
export const isTypeVideo = (file) => (file.type.match(/video.*/) ? true : false);
|
|
8
|
+
/** Kiểm tra file có phải là audio không (audio/*). */
|
|
6
9
|
export const isTypeAudio = (file) => (file.type.match(/audio.*/) ? true : false);
|
|
10
|
+
/** Kiểm tra giá trị có phải là đối tượng File không. */
|
|
7
11
|
export const isTypeFile = (file) => (file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false);
|
|
12
|
+
/** Danh sách extension/MIME type của file Excel. */
|
|
8
13
|
export const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
|
|
14
|
+
/** Danh sách extension/MIME type của tài liệu (Word, Excel, PDF, JSON...). */
|
|
9
15
|
export const DocumentExtList = [
|
|
10
16
|
'doc',
|
|
11
17
|
'docx',
|
|
@@ -26,13 +32,40 @@ export const DocumentExtList = [
|
|
|
26
32
|
'application/json',
|
|
27
33
|
'application/xml',
|
|
28
34
|
];
|
|
35
|
+
/**
|
|
36
|
+
* Kiểm tra extension có thuộc danh sách tài liệu được chấp nhận không.
|
|
37
|
+
* @param ext Extension hoặc MIME type cần kiểm tra
|
|
38
|
+
* @param listExt Danh sách tùy chỉnh (mặc định là DocumentExtList)
|
|
39
|
+
*/
|
|
29
40
|
export const isIncludeDocumentExtList = (ext, listExt = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);
|
|
41
|
+
/** Danh sách extension/MIME type của ảnh. */
|
|
30
42
|
export const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png', 'webp'];
|
|
43
|
+
/**
|
|
44
|
+
* Kiểm tra extension có thuộc danh sách ảnh không.
|
|
45
|
+
* @param ext Extension hoặc MIME type cần kiểm tra
|
|
46
|
+
* @param listExt Danh sách tùy chỉnh (mặc định là ImageExtList)
|
|
47
|
+
*/
|
|
31
48
|
export const isIncludeImageExtList = (ext, listExt = ImageExtList) => listExt.includes(ext);
|
|
49
|
+
/** Danh sách extension/MIME type của video. */
|
|
32
50
|
export const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];
|
|
51
|
+
/**
|
|
52
|
+
* Kiểm tra extension có thuộc danh sách video không.
|
|
53
|
+
* @param ext Extension hoặc MIME type cần kiểm tra
|
|
54
|
+
*/
|
|
33
55
|
export const isIncludeVideoExtList = (ext, listExt = VideoExtList) => listExt.includes(ext);
|
|
56
|
+
/** Danh sách extension/MIME type của audio. */
|
|
34
57
|
export const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];
|
|
58
|
+
/**
|
|
59
|
+
* Kiểm tra extension có thuộc danh sách audio không.
|
|
60
|
+
* @param ext Extension hoặc MIME type cần kiểm tra
|
|
61
|
+
*/
|
|
35
62
|
export const isIncludeAudioExtList = (ext, listExt = AudioExtList) => listExt.includes(ext);
|
|
63
|
+
/**
|
|
64
|
+
* Lấy phần mở rộng (extension) của một file.
|
|
65
|
+
* Hỗ trợ cả đối tượng File gốc của Browser và IFile (interface nội bộ).
|
|
66
|
+
* @param file Đối tượng File hoặc IFile
|
|
67
|
+
* @returns Extension dạng chữ thường (vd: "jpg", "pdf") hoặc undefined
|
|
68
|
+
*/
|
|
36
69
|
export const getFileExtension = (file) => {
|
|
37
70
|
if (file instanceof File && file.type) {
|
|
38
71
|
return (file.type.split('/').pop() || '').toLowerCase();
|
|
@@ -56,17 +89,37 @@ export const getFileExtension = (file) => {
|
|
|
56
89
|
}
|
|
57
90
|
return (dots.pop() || '').toLowerCase();
|
|
58
91
|
};
|
|
92
|
+
/**
|
|
93
|
+
* Định dạng kích thước file dạng chuỗi dễ đọc (KB hoặc MB).
|
|
94
|
+
* @param size Kích thước file tính bằng byte
|
|
95
|
+
* @param toFixed Số chữ số thập phân (mặc định: 2)
|
|
96
|
+
* @returns Chuỗi định dạng (vd: " 1.50 MB", " 512.00 KB")
|
|
97
|
+
*/
|
|
59
98
|
export const getLabelBySizeFile = (size, toFixed = 2) => {
|
|
60
99
|
if (size < 1024 * 1024) {
|
|
61
100
|
return ` ${(size / 1024).toFixed(toFixed)} KB`;
|
|
62
101
|
}
|
|
63
102
|
return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;
|
|
64
103
|
};
|
|
104
|
+
/**
|
|
105
|
+
* Chuyển đổi đối tượng Blob thành File.
|
|
106
|
+
* Tự động xác định phần mở rộng từ MIME type của Blob.
|
|
107
|
+
* @param blob Đối tượng Blob cần chuyển
|
|
108
|
+
* @param fileName Tên file mong muốn (mặc định: UUID ngẫu nhiên)
|
|
109
|
+
* @returns Đối tượng File tương ứng
|
|
110
|
+
*/
|
|
65
111
|
export const convertBlobToFile = (blob, fileName) => {
|
|
66
112
|
const type = blob.type.split('/')[1];
|
|
67
113
|
const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;
|
|
68
114
|
return new File([blob], name, { type: blob.type, lastModified: Date.now() });
|
|
69
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* Tải file từ URL và chuyển về đối tượng File.
|
|
118
|
+
* Sử dụng XHR + FileReader để đọc nội dung, sau đó chuyển Base64 → Blob → File.
|
|
119
|
+
* @param url URL của file cần tải
|
|
120
|
+
* @param fileName Tên file mong muốn (mặc định: timestamp)
|
|
121
|
+
* @returns Promise trả về File hoặc undefined nếu thất bại
|
|
122
|
+
*/
|
|
70
123
|
export const convertUrlToFile = (url, fileName) => {
|
|
71
124
|
return new Promise((resolve, reject) => {
|
|
72
125
|
const xhr = new XMLHttpRequest();
|
|
@@ -87,4 +140,4 @@ export const convertUrlToFile = (url, fileName) => {
|
|
|
87
140
|
xhr.send();
|
|
88
141
|
});
|
|
89
142
|
};
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FB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QUMsR0FBRyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckIsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmlsZSB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgY29udmVydEJhc2U2NFRvQmxvYiB9IGZyb20gJy4vYmFzZTY0JztcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuL3V1aWQnO1xuXG5leHBvcnQgY29uc3QgaXNUeXBlSW1hZ2UgPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IChmaWxlLnR5cGUubWF0Y2goL2ltYWdlLiovKSA/IHRydWUgOiBmYWxzZSk7XG5leHBvcnQgY29uc3QgaXNUeXBlVmlkZW8gPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IChmaWxlLnR5cGUubWF0Y2goL3ZpZGVvLiovKSA/IHRydWUgOiBmYWxzZSk7XG5leHBvcnQgY29uc3QgaXNUeXBlQXVkaW8gPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IChmaWxlLnR5cGUubWF0Y2goL2F1ZGlvLiovKSA/IHRydWUgOiBmYWxzZSk7XG5leHBvcnQgY29uc3QgaXNUeXBlRmlsZSA9IChmaWxlOiBGaWxlKSA9PiAoZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZpbGUpID09PSAnW29iamVjdCBGaWxlXScgPyB0cnVlIDogZmFsc2UpO1xuXG5leHBvcnQgY29uc3QgRXhjZWxFeHRMaXN0ID0gWyd4bHMnLCAneGxzeCcsICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXTtcbmV4cG9ydCBjb25zdCBEb2N1bWVudEV4dExpc3QgPSBbXG4gICdkb2MnLFxuICAnZG9jeCcsXG4gICd4bHMnLFxuICAneGxzeCcsXG4gICdwcHQnLFxuICAncHB0eCcsXG4gICdwZGYnLFxuICAnanNvbicsXG4gICd4bWwnLFxuICAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsXG4gICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcbiAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgJ2FwcGxpY2F0aW9uL3htbCcsXG5dO1xuZXhwb3J0IGNvbnN0IGlzSW5jbHVkZURvY3VtZW50RXh0TGlzdCA9IChleHQ6IHN0cmluZywgbGlzdEV4dDogQXJyYXk8c3RyaW5nPiA9IERvY3VtZW50RXh0TGlzdCkgPT4gbGlzdEV4dC5pbmNsdWRlcyhleHQpIHx8IGxpc3RFeHQuaW5jbHVkZXMoYGFwcGxpY2F0aW9uLyR7ZXh0fWApO1xuXG5leHBvcnQgY29uc3QgSW1hZ2VFeHRMaXN0ID0gWydnaWYnLCAnanBnJywgJ2pwZWcnLCAncG5nJywgJ2ltYWdlL2dpZicsICdpbWFnZS9qcGVnJywgJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJ3dlYnAnXTtcbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVJbWFnZUV4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBJbWFnZUV4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KTtcblxuZXhwb3J0IGNvbnN0IFZpZGVvRXh0TGlzdCA9IFsnbXA0JywgJ21vdicsICdtcGcnLCAnYXZpJywgJ3dtdicsICd2aWRlby9tcDQnLCAndmlkZW8vcXVpY2t0aW1lJywgJ3ZpZGVvL21wZWcnLCAndmlkZW8veC1tc3ZpZGVvJywgJ3ZpZGVvL3gtbXMtd212J107XG5leHBvcnQgY29uc3QgaXNJbmNsdWRlVmlkZW9FeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gVmlkZW9FeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCk7XG5leHBvcnQgY29uc3QgQXVkaW9FeHRMaXN0ID0gWydtcDMnLCAnd2F2JywgJ29nZycsICdhYWMnLCAnbTRhJywgJ2ZsYWMnLCAnd21hJywgJ2F1ZGlvL21wZWcnLCAnYXVkaW8vd2F2JywgJ2F1ZGlvL29nZycsICdhdWRpby9hYWMnLCAnYXVkaW8vbXA0JywgJ2F1ZGlvL2ZsYWMnLCAnYXVkaW8veC1tcy13bWEnXTtcbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVBdWRpb0V4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBBdWRpb0V4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVFeHRlbnNpb24gPSAoZmlsZTogSUZpbGUgfCBGaWxlKSA9PiB7XG4gIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnR5cGUpIHtcbiAgICByZXR1cm4gKGZpbGUudHlwZS5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIGZpbGUgPSBmaWxlIGFzIElGaWxlO1xuICBpZiAoZmlsZS5taW1ldHlwZSB8fCBmaWxlLmZpbGU/LnR5cGUpIHtcbiAgICByZXR1cm4gZmlsZS5taW1ldHlwZSB8fCBmaWxlLmZpbGU/LnR5cGU7XG4gIH1cblxuICBsZXQgZmlsZU5hbWUgPSBmaWxlLm5hbWUgYXMgc3RyaW5nO1xuICBjb25zdCB1cmwgPSBnZXQoZmlsZSwgJ3VybCcpIHx8IGdldChmaWxlLCAnb3JpZ2luX3VybCcpO1xuICBpZiAoIWZpbGVOYW1lICYmICF1cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFmaWxlTmFtZSAmJiB1cmwpIHtcbiAgICBmaWxlTmFtZSA9IHVybC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnO1xuICAgIHNldChmaWxlLCAnbmFtZScsIGZpbGVOYW1lKTtcbiAgfVxuICBjb25zdCBkb3RzID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcblxuICBpZiAoIWRvdHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gKGRvdHMucG9wKCkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGFiZWxCeVNpemVGaWxlID0gKHNpemU6IG51bWJlciwgdG9GaXhlZCA9IDIpID0+IHtcbiAgaWYgKHNpemUgPCAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgICR7KHNpemUgLyAxMDI0KS50b0ZpeGVkKHRvRml4ZWQpfSBLQmA7XG4gIH1cblxuICByZXR1cm4gYCAkeyhzaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCh0b0ZpeGVkKX0gTUJgO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRCbG9iVG9GaWxlID0gKGJsb2I6IEJsb2IsIGZpbGVOYW1lPzogc3RyaW5nKTogRmlsZSA9PiB7XG4gIGNvbnN0IHR5cGUgPSBibG9iLnR5cGUuc3BsaXQoJy8nKVsxXTtcbiAgY29uc3QgbmFtZSA9IGZpbGVOYW1lID8gYCR7ZmlsZU5hbWUuc3BsaXQoJy4nKVswXX0uJHt0eXBlfWAgOiBgJHt1dWlkKCl9LiR7dHlwZX1gO1xuXG4gIHJldHVybiBuZXcgRmlsZShbYmxvYl0sIG5hbWUsIHsgdHlwZTogYmxvYi50eXBlLCBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCkgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFVybFRvRmlsZSA9ICh1cmw6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbGUgfCB1bmRlZmluZWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmVzb2x2ZShjb252ZXJ0QmxvYlRvRmlsZShmaWxlLCBmaWxlTmFtZSB8fCBEYXRlLm5vdygpLnRvTG9jYWxlU3RyaW5nKCkpKTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH07XG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICB4aHIuc2VuZCgpO1xuICB9KTtcbn07XG4iXX0=
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUYsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUYsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUYsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxl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SUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFDRixHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckIsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmlsZSB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgY29udmVydEJhc2U2NFRvQmxvYiB9IGZyb20gJy4vYmFzZTY0JztcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuL3V1aWQnO1xuXG4vKiogS2nhu4NtIHRyYSBmaWxlIGPDsyBwaOG6o2kgbMOgIOG6o25oIGtow7RuZyAoaW1hZ2UvKikuICovXG5leHBvcnQgY29uc3QgaXNUeXBlSW1hZ2UgPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IChmaWxlLnR5cGUubWF0Y2goL2ltYWdlLiovKSA/IHRydWUgOiBmYWxzZSk7XG4vKiogS2nhu4NtIHRyYSBmaWxlIGPDsyBwaOG6o2kgbMOgIHZpZGVvIGtow7RuZyAodmlkZW8vKikuICovXG5leHBvcnQgY29uc3QgaXNUeXBlVmlkZW8gPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IChmaWxlLnR5cGUubWF0Y2goL3ZpZGVvLiovKSA/IHRydWUgOiBmYWxzZSk7XG4vKiogS2nhu4NtIHRyYSBmaWxlIGPDsyBwaOG6o2kgbMOgIGF1ZGlvIGtow7RuZyAoYXVkaW8vKikuICovXG5leHBvcnQgY29uc3QgaXNUeXBlQXVkaW8gPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IChmaWxlLnR5cGUubWF0Y2goL2F1ZGlvLiovKSA/IHRydWUgOiBmYWxzZSk7XG4vKiogS2nhu4NtIHRyYSBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIMSR4buRaSB0xrDhu6NuZyBGaWxlIGtow7RuZy4gKi9cbmV4cG9ydCBjb25zdCBpc1R5cGVGaWxlID0gKGZpbGU6IEZpbGUpID0+IChmaWxlIGluc3RhbmNlb2YgRmlsZSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmlsZSkgPT09ICdbb2JqZWN0IEZpbGVdJyA/IHRydWUgOiBmYWxzZSk7XG5cbi8qKiBEYW5oIHPDoWNoIGV4dGVuc2lvbi9NSU1FIHR5cGUgY+G7p2EgZmlsZSBFeGNlbC4gKi9cbmV4cG9ydCBjb25zdCBFeGNlbEV4dExpc3QgPSBbJ3hscycsICd4bHN4JywgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCddO1xuXG4vKiogRGFuaCBzw6FjaCBleHRlbnNpb24vTUlNRSB0eXBlIGPhu6dhIHTDoGkgbGnhu4d1IChXb3JkLCBFeGNlbCwgUERGLCBKU09OLi4uKS4gKi9cbmV4cG9ydCBjb25zdCBEb2N1bWVudEV4dExpc3QgPSBbXG4gICdkb2MnLFxuICAnZG9jeCcsXG4gICd4bHMnLFxuICAneGxzeCcsXG4gICdwcHQnLFxuICAncHB0eCcsXG4gICdwZGYnLFxuICAnanNvbicsXG4gICd4bWwnLFxuICAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsXG4gICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcbiAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgJ2FwcGxpY2F0aW9uL3htbCcsXG5dO1xuXG4vKipcbiAqIEtp4buDbSB0cmEgZXh0ZW5zaW9uIGPDsyB0aHXhu5ljIGRhbmggc8OhY2ggdMOgaSBsaeG7h3UgxJHGsOG7o2MgY2jhuqVwIG5o4bqtbiBraMO0bmcuXG4gKiBAcGFyYW0gZXh0IEV4dGVuc2lvbiBob+G6t2MgTUlNRSB0eXBlIGPhuqduIGtp4buDbSB0cmFcbiAqIEBwYXJhbSBsaXN0RXh0IERhbmggc8OhY2ggdMO5eSBjaOG7iW5oICht4bq3YyDEkeG7i25oIGzDoCBEb2N1bWVudEV4dExpc3QpXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVEb2N1bWVudEV4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBEb2N1bWVudEV4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KSB8fCBsaXN0RXh0LmluY2x1ZGVzKGBhcHBsaWNhdGlvbi8ke2V4dH1gKTtcblxuLyoqIERhbmggc8OhY2ggZXh0ZW5zaW9uL01JTUUgdHlwZSBj4bunYSDhuqNuaC4gKi9cbmV4cG9ydCBjb25zdCBJbWFnZUV4dExpc3QgPSBbJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnaW1hZ2UvZ2lmJywgJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnd2VicCddO1xuXG4vKipcbiAqIEtp4buDbSB0cmEgZXh0ZW5zaW9uIGPDsyB0aHXhu5ljIGRhbmggc8OhY2gg4bqjbmgga2jDtG5nLlxuICogQHBhcmFtIGV4dCBFeHRlbnNpb24gaG/hurdjIE1JTUUgdHlwZSBj4bqnbiBraeG7g20gdHJhXG4gKiBAcGFyYW0gbGlzdEV4dCBEYW5oIHPDoWNoIHTDuXkgY2jhu4luaCAobeG6t2MgxJHhu4tuaCBsw6AgSW1hZ2VFeHRMaXN0KVxuICovXG5leHBvcnQgY29uc3QgaXNJbmNsdWRlSW1hZ2VFeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gSW1hZ2VFeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCk7XG5cbi8qKiBEYW5oIHPDoWNoIGV4dGVuc2lvbi9NSU1FIHR5cGUgY+G7p2EgdmlkZW8uICovXG5leHBvcnQgY29uc3QgVmlkZW9FeHRMaXN0ID0gWydtcDQnLCAnbW92JywgJ21wZycsICdhdmknLCAnd212JywgJ3ZpZGVvL21wNCcsICd2aWRlby9xdWlja3RpbWUnLCAndmlkZW8vbXBlZycsICd2aWRlby94LW1zdmlkZW8nLCAndmlkZW8veC1tcy13bXYnXTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIGV4dGVuc2lvbiBjw7MgdGh14buZYyBkYW5oIHPDoWNoIHZpZGVvIGtow7RuZy5cbiAqIEBwYXJhbSBleHQgRXh0ZW5zaW9uIGhv4bq3YyBNSU1FIHR5cGUgY+G6p24ga2nhu4NtIHRyYVxuICovXG5leHBvcnQgY29uc3QgaXNJbmNsdWRlVmlkZW9FeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gVmlkZW9FeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCk7XG5cbi8qKiBEYW5oIHPDoWNoIGV4dGVuc2lvbi9NSU1FIHR5cGUgY+G7p2EgYXVkaW8uICovXG5leHBvcnQgY29uc3QgQXVkaW9FeHRMaXN0ID0gWydtcDMnLCAnd2F2JywgJ29nZycsICdhYWMnLCAnbTRhJywgJ2ZsYWMnLCAnd21hJywgJ2F1ZGlvL21wZWcnLCAnYXVkaW8vd2F2JywgJ2F1ZGlvL29nZycsICdhdWRpby9hYWMnLCAnYXVkaW8vbXA0JywgJ2F1ZGlvL2ZsYWMnLCAnYXVkaW8veC1tcy13bWEnXTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIGV4dGVuc2lvbiBjw7MgdGh14buZYyBkYW5oIHPDoWNoIGF1ZGlvIGtow7RuZy5cbiAqIEBwYXJhbSBleHQgRXh0ZW5zaW9uIGhv4bq3YyBNSU1FIHR5cGUgY+G6p24ga2nhu4NtIHRyYVxuICovXG5leHBvcnQgY29uc3QgaXNJbmNsdWRlQXVkaW9FeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gQXVkaW9FeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCk7XG5cbi8qKlxuICogTOG6pXkgcGjhuqduIG3hu58gcuG7mW5nIChleHRlbnNpb24pIGPhu6dhIG3hu5l0IGZpbGUuXG4gKiBI4buXIHRy4bujIGPhuqMgxJHhu5FpIHTGsOG7o25nIEZpbGUgZ+G7kWMgY+G7p2EgQnJvd3NlciB2w6AgSUZpbGUgKGludGVyZmFjZSBu4buZaSBi4buZKS5cbiAqIEBwYXJhbSBmaWxlIMSQ4buRaSB0xrDhu6NuZyBGaWxlIGhv4bq3YyBJRmlsZVxuICogQHJldHVybnMgRXh0ZW5zaW9uIGThuqFuZyBjaOG7ryB0aMaw4budbmcgKHZkOiBcImpwZ1wiLCBcInBkZlwiKSBob+G6t2MgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaWxlRXh0ZW5zaW9uID0gKGZpbGU6IElGaWxlIHwgRmlsZSkgPT4ge1xuICBpZiAoZmlsZSBpbnN0YW5jZW9mIEZpbGUgJiYgZmlsZS50eXBlKSB7XG4gICAgcmV0dXJuIChmaWxlLnR5cGUuc3BsaXQoJy8nKS5wb3AoKSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICBmaWxlID0gZmlsZSBhcyBJRmlsZTtcbiAgaWYgKGZpbGUubWltZXR5cGUgfHwgZmlsZS5maWxlPy50eXBlKSB7XG4gICAgcmV0dXJuIGZpbGUubWltZXR5cGUgfHwgZmlsZS5maWxlPy50eXBlO1xuICB9XG5cbiAgbGV0IGZpbGVOYW1lID0gZmlsZS5uYW1lIGFzIHN0cmluZztcbiAgY29uc3QgdXJsID0gZ2V0KGZpbGUsICd1cmwnKSB8fCBnZXQoZmlsZSwgJ29yaWdpbl91cmwnKTtcbiAgaWYgKCFmaWxlTmFtZSAmJiAhdXJsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghZmlsZU5hbWUgJiYgdXJsKSB7XG4gICAgZmlsZU5hbWUgPSB1cmwuc3BsaXQoJy8nKS5wb3AoKSB8fCAnJztcbiAgICBzZXQoZmlsZSwgJ25hbWUnLCBmaWxlTmFtZSk7XG4gIH1cbiAgY29uc3QgZG90cyA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XG5cbiAgaWYgKCFkb3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIChkb3RzLnBvcCgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiDEkOG7i25oIGThuqFuZyBrw61jaCB0aMaw4bubYyBmaWxlIGThuqFuZyBjaHXhu5dpIGThu4UgxJHhu41jIChLQiBob+G6t2MgTUIpLlxuICogQHBhcmFtIHNpemUgS8OtY2ggdGjGsOG7m2MgZmlsZSB0w61uaCBi4bqxbmcgYnl0ZVxuICogQHBhcmFtIHRvRml4ZWQgU+G7kSBjaOG7ryBz4buRIHRo4bqtcCBwaMOibiAobeG6t2MgxJHhu4tuaDogMilcbiAqIEByZXR1cm5zIENodeG7l2kgxJHhu4tuaCBk4bqhbmcgKHZkOiBcIiAxLjUwIE1CXCIsIFwiIDUxMi4wMCBLQlwiKVxuICovXG5leHBvcnQgY29uc3QgZ2V0TGFiZWxCeVNpemVGaWxlID0gKHNpemU6IG51bWJlciwgdG9GaXhlZCA9IDIpID0+IHtcbiAgaWYgKHNpemUgPCAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgICR7KHNpemUgLyAxMDI0KS50b0ZpeGVkKHRvRml4ZWQpfSBLQmA7XG4gIH1cblxuICByZXR1cm4gYCAkeyhzaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCh0b0ZpeGVkKX0gTUJgO1xufTtcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgxJHhu5FpIHTGsOG7o25nIEJsb2IgdGjDoG5oIEZpbGUuXG4gKiBU4buxIMSR4buZbmcgeMOhYyDEkeG7i25oIHBo4bqnbiBt4bufIHLhu5luZyB04burIE1JTUUgdHlwZSBj4bunYSBCbG9iLlxuICogQHBhcmFtIGJsb2IgxJDhu5FpIHTGsOG7o25nIEJsb2IgY+G6p24gY2h1eeG7g25cbiAqIEBwYXJhbSBmaWxlTmFtZSBUw6puIGZpbGUgbW9uZyBtdeG7kW4gKG3hurdjIMSR4buLbmg6IFVVSUQgbmfhuqt1IG5oacOqbilcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBGaWxlIHTGsMahbmcg4bupbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRCbG9iVG9GaWxlID0gKGJsb2I6IEJsb2IsIGZpbGVOYW1lPzogc3RyaW5nKTogRmlsZSA9PiB7XG4gIGNvbnN0IHR5cGUgPSBibG9iLnR5cGUuc3BsaXQoJy8nKVsxXTtcbiAgY29uc3QgbmFtZSA9IGZpbGVOYW1lID8gYCR7ZmlsZU5hbWUuc3BsaXQoJy4nKVswXX0uJHt0eXBlfWAgOiBgJHt1dWlkKCl9LiR7dHlwZX1gO1xuXG4gIHJldHVybiBuZXcgRmlsZShbYmxvYl0sIG5hbWUsIHsgdHlwZTogYmxvYi50eXBlLCBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCkgfSk7XG59O1xuXG4vKipcbiAqIFThuqNpIGZpbGUgdOG7qyBVUkwgdsOgIGNodXnhu4NuIHbhu4EgxJHhu5FpIHTGsOG7o25nIEZpbGUuXG4gKiBT4butIGThu6VuZyBYSFIgKyBGaWxlUmVhZGVyIMSR4buDIMSR4buNYyBu4buZaSBkdW5nLCBzYXUgxJHDsyBjaHV54buDbiBCYXNlNjQg4oaSIEJsb2Ig4oaSIEZpbGUuXG4gKiBAcGFyYW0gdXJsIFVSTCBj4bunYSBmaWxlIGPhuqduIHThuqNpXG4gKiBAcGFyYW0gZmlsZU5hbWUgVMOqbiBmaWxlIG1vbmcgbXXhu5FuICht4bq3YyDEkeG7i25oOiB0aW1lc3RhbXApXG4gKiBAcmV0dXJucyBQcm9taXNlIHRy4bqjIHbhu4EgRmlsZSBob+G6t2MgdW5kZWZpbmVkIG7hur91IHRo4bqldCBi4bqhaVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFVybFRvRmlsZSA9ICh1cmw6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbGUgfCB1bmRlZmluZWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmVzb2x2ZShjb252ZXJ0QmxvYlRvRmlsZShmaWxlLCBmaWxlTmFtZSB8fCBEYXRlLm5vdygpLnRvTG9jYWxlU3RyaW5nKCkpKTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH07XG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICB4aHIuc2VuZCgpO1xuICB9KTtcbn07XG4iXX0=
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { UtilsCache } from './cache';
|
|
2
2
|
import { isNil } from './helpers';
|
|
3
3
|
import { UtilsLanguageConstants } from './language';
|
|
4
|
+
/**
|
|
5
|
+
* Chuẩn hóa chuỗi số theo locale hiện tại về dạng số thực (parseable).
|
|
6
|
+
* - Với **EN**: Xóa dấu phẩy (`,`) — dấu phân tách hàng nghìn.
|
|
7
|
+
* - Với **VI**: Xóa dấu chấm (`.`) và đổi dấu phẩy (`,`) thành dấu chấm (`.`).
|
|
8
|
+
*
|
|
9
|
+
* @param value Chuỗi hoặc số cần chuẩn hóa
|
|
10
|
+
* @returns Chuỗi số đã được chuẩn hóa (không dấu phân cách locale)
|
|
11
|
+
* @example
|
|
12
|
+
* // EN: "1,234,567" → "1234567"
|
|
13
|
+
* // VI: "1.234.567,89" → "1234567.89"
|
|
14
|
+
*/
|
|
4
15
|
export const formatNumber = (value) => {
|
|
5
16
|
const lang = UtilsCache.getLang();
|
|
6
17
|
if (lang === UtilsLanguageConstants.EN) {
|
|
@@ -8,9 +19,26 @@ export const formatNumber = (value) => {
|
|
|
8
19
|
}
|
|
9
20
|
return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');
|
|
10
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Định dạng và hiển thị số theo ngôn ngữ (VI/EN) với các tùy chọn linh hoạt.
|
|
24
|
+
* Xử lý số âm, phần thập phân, làm tròn và dấu phân cách hàng nghìn.
|
|
25
|
+
*
|
|
26
|
+
* @param value Giá trị số hoặc chuỗi số đầu vào
|
|
27
|
+
* @param acceptNegativeValue Có chấp nhận số âm không (false → trả về 0 nếu value <= 0)
|
|
28
|
+
* @param parseFixed Số chữ số thập phân muốn giữ lại (mặc định: 1)
|
|
29
|
+
* @param ignoreFormatSeparator Bỏ qua bước chuẩn hóa dấu phân cách (khi value đã là số thuần)
|
|
30
|
+
* @param ignoreParseFloat Bỏ qua bước làm tròn (giữ nguyên phần thập phân)
|
|
31
|
+
* @param lang Ngôn ngữ hiển thị ('vi' hoặc 'en'), mặc định lấy từ cache
|
|
32
|
+
* @returns Chuỗi số đã format theo locale (vd: "1.234.567,89" hoặc "1,234,567.89")
|
|
33
|
+
* @example
|
|
34
|
+
* // VI, 2 chữ số thập phân
|
|
35
|
+
* viewDataNumberByLanguage(1234567.891, true, 2) → "1.234.567,89"
|
|
36
|
+
* // EN, 2 chữ số thập phân
|
|
37
|
+
* viewDataNumberByLanguage(1234567.891, true, 2, false, false, 'en') → "1,234,567.89"
|
|
38
|
+
*/
|
|
11
39
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
-
export const viewDataNumberByLanguage = (value, acceptNegativeValue, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false) => {
|
|
13
|
-
|
|
40
|
+
export const viewDataNumberByLanguage = (value, acceptNegativeValue, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false, lang) => {
|
|
41
|
+
lang = lang || UtilsCache.getLang();
|
|
14
42
|
if (!`${value}`.trim()) {
|
|
15
43
|
return '';
|
|
16
44
|
}
|
|
@@ -63,4 +91,4 @@ export const viewDataNumberByLanguage = (value, acceptNegativeValue, parseFixed
|
|
|
63
91
|
.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
|
64
92
|
}
|
|
65
93
|
};
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LW51bWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2Zvcm1hdC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFzQixFQUFVLEVBQUU7SUFDN0QsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRWxDLElBQUksSUFBSSxLQUFLLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQXNCLEVBQUUsbUJBQXdDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxFQUFPLEVBQUU7SUFDekwsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRWxDLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FB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QU8sQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsRSxPQUFPLEdBQUcsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEMsSUFBSSxJQUFJLEtBQUssc0JBQXNCLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxPQUFPLEtBQUs7YUFDVCxRQUFRLEVBQUU7YUFDVixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUNqQixPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFV0aWxzQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMgfSBmcm9tICcuL2xhbmd1YWdlJztcblxuZXhwb3J0IGNvbnN0IGZvcm1hdE51bWJlciA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGFuZyA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpO1xuXG4gIGlmIChsYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucmVwbGFjZSgvWyxdL2csICcnKTtcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1suXS9nLCAnJykucmVwbGFjZSgvWyxdL2csICcuJyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCBhY2NlcHROZWdhdGl2ZVZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkLCBwYXJzZUZpeGVkID0gMSwgaWdub3JlRm9ybWF0U2VwYXJhdG9yID0gZmFsc2UsIGlnbm9yZVBhcnNlRmxvYXQgPSBmYWxzZSk6IGFueSA9PiB7XG4gIGNvbnN0IGxhbmcgPSBVdGlsc0NhY2hlLmdldExhbmcoKTtcblxuICBpZiAoIWAke3ZhbHVlfWAudHJpbSgpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc05pbCh2YWx1ZSkgfHwgKCFhY2NlcHROZWdhdGl2ZVZhbHVlICYmICt2YWx1ZSA8PSAwKSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpZ25vcmVGb3JtYXRTZXBhcmF0b3IpIHtcbiAgICB2YWx1ZSA9IGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gIH1cblxuICBjb25zdCBpc0Zsb2F0ID0gdmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygnLicpO1xuICBjb25zdCBbaW50U3RyLCBmbG9hdFN0cl0gPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG5cbiAgaWYgKCFmbG9hdFN0cj8ubGVuZ3RoKSB7XG4gICAgcGFyc2VGaXhlZCA9IDA7XG4gIH1cbiAgY29uc3Qgcm91bmQgPSAodmFsdWU6IG51bWJlciwgcGFyc2VGaXhlZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZml4ZWQgPSBNYXRoLnBvdygxMCwgcGFyc2VGaXhlZCk7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGZpeGVkKSAvIGZpeGVkO1xuICB9O1xuXG4gIGlmIChwYXJzZUZpeGVkID4gKGZsb2F0U3RyPy5sZW5ndGggfHwgMCkpIHtcbiAgICBjb25zdCBtYXhQYXJzZUZpeGVkID0gYWNjZXB0TmVnYXRpdmVWYWx1ZSAmJiArdmFsdWUgPCAwID8gMTcgOiAxNjtcbiAgICBjb25zdCBmaXhlZCA9IG1heFBhcnNlRml4ZWQgLSAoaW50U3RyPy5sZW5ndGggfHwgMCk7XG5cbiAgICBwYXJzZUZpeGVkID0gcGFyc2VGaXhlZCA8IGZpeGVkID8gcGFyc2VGaXhlZCA6IGZpeGVkO1xuICB9XG5cbiAgaWYgKGlzRmxvYXQgJiYgIWlnbm9yZVBhcnNlRmxvYXQpIHtcbiAgICB2YWx1ZSA9IHBhcnNlRmxvYXQocm91bmQoK3ZhbHVlLCBwYXJzZUZpeGVkKS50b0ZpeGVkKHBhcnNlRml4ZWQpKTtcbiAgfVxuXG4gIC8vIFjhu60gbMO9IGtow7RuZyBmb3JtYXQgZOG7ryBsaeG7h3UgcGjhuqduIHRo4bqtcCBwaMOiblxuICBjb25zdCB2YWx1ZVN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGluZGV4ID0gdmFsdWVTdHJpbmcuaW5kZXhPZignLicpO1xuXG4gIGlmIChpbmRleCAhPT0gLTEgJiYgKHBhcnNlRml4ZWQgPiAzIHx8IGlnbm9yZVBhcnNlRmxvYXQpKSB7XG4gICAgbGV0IGRlY2ltYWxQYXJ0ID0gdmFsdWVTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgdmFsdWVTdHJpbmcubGVuZ3RoKTtcbiAgICBsZXQgaW50ID0gdmFsdWVTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSk7XG5cbiAgICBpZiAoaWdub3JlUGFyc2VGbG9hdCkge1xuICAgICAgZGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zdWJzdHJpbmcoMCwgcGFyc2VGaXhlZCk7XG4gICAgfVxuICAgIGlmIChsYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgICBpbnQgPSBpbnQucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcblxuICAgICAgcmV0dXJuIGAke2ludH0ke2RlY2ltYWxQYXJ0fWA7XG4gICAgfVxuICAgIGludCA9IGludC5yZXBsYWNlKCcuJywgJywnKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLicpO1xuXG4gICAgcmV0dXJuIGAke2ludH0ke2RlY2ltYWxQYXJ0fWA7XG4gIH1cbiAgaWYgKGluZGV4ID09PSAtMSB8fCBwYXJzZUZpeGVkIDw9IDMpIHtcbiAgICBpZiAobGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTikge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucmVwbGFjZSgnLicsICcsJylcbiAgICAgIC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLicpO1xuICB9XG59O1xuIl19
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LW51bWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2Zvcm1hdC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBc0IsRUFBVSxFQUFFO0lBQzdELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVsQyxJQUFJLElBQUksS0FBSyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQXNCLEVBQUUsbUJBQXdDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLElBQWEsRUFBTyxFQUFFO0lBQ3hNLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXBDLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFF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Q0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsRSxPQUFPLEdBQUcsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEMsSUFBSSxJQUFJLEtBQUssc0JBQXNCLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxPQUFPLEtBQUs7YUFDVCxRQUFRLEVBQUU7YUFDVixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUNqQixPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFV0aWxzQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMgfSBmcm9tICcuL2xhbmd1YWdlJztcblxuLyoqXG4gKiBDaHXhuqluIGjDs2EgY2h14buXaSBz4buRIHRoZW8gbG9jYWxlIGhp4buHbiB04bqhaSB24buBIGThuqFuZyBz4buRIHRo4buxYyAocGFyc2VhYmxlKS5cbiAqIC0gVuG7m2kgKipFTioqOiBYw7NhIGThuqV1IHBo4bqpeSAoYCxgKSDigJQgZOG6pXUgcGjDom4gdMOhY2ggaMOgbmcgbmdow6xuLlxuICogLSBW4bubaSAqKlZJKio6IFjDs2EgZOG6pXUgY2jhuqVtIChgLmApIHbDoCDEkeG7lWkgZOG6pXUgcGjhuql5IChgLGApIHRow6BuaCBk4bqldSBjaOG6pW0gKGAuYCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIENodeG7l2kgaG/hurdjIHPhu5EgY+G6p24gY2h14bqpbiBow7NhXG4gKiBAcmV0dXJucyBDaHXhu5dpIHPhu5EgxJHDoyDEkcaw4bujYyBjaHXhuqluIGjDs2EgKGtow7RuZyBk4bqldSBwaMOibiBjw6FjaCBsb2NhbGUpXG4gKiBAZXhhbXBsZVxuICogLy8gRU46IFwiMSwyMzQsNTY3XCIg4oaSIFwiMTIzNDU2N1wiXG4gKiAvLyBWSTogXCIxLjIzNC41NjcsODlcIiDihpIgXCIxMjM0NTY3Ljg5XCJcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdE51bWJlciA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGFuZyA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpO1xuXG4gIGlmIChsYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucmVwbGFjZSgvWyxdL2csICcnKTtcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1suXS9nLCAnJykucmVwbGFjZSgvWyxdL2csICcuJyk7XG59O1xuXG4vKipcbiAqIMSQ4buLbmggZOG6oW5nIHbDoCBoaeG7g24gdGjhu4sgc+G7kSB0aGVvIG5nw7RuIG5n4buvIChWSS9FTikgduG7m2kgY8OhYyB0w7l5IGNo4buNbiBsaW5oIGhv4bqhdC5cbiAqIFjhu60gbMO9IHPhu5Egw6JtLCBwaOG6p24gdGjhuq1wIHBow6JuLCBsw6BtIHRyw7JuIHbDoCBk4bqldSBwaMOibiBjw6FjaCBow6BuZyBuZ2jDrG4uXG4gKlxuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgc+G7kSBob+G6t2MgY2h14buXaSBz4buRIMSR4bqndSB2w6BvXG4gKiBAcGFyYW0gYWNjZXB0TmVnYXRpdmVWYWx1ZSBDw7MgY2jhuqVwIG5o4bqtbiBz4buRIMOibSBraMO0bmcgKGZhbHNlIOKGkiB0cuG6oyB24buBIDAgbuG6v3UgdmFsdWUgPD0gMClcbiAqIEBwYXJhbSBwYXJzZUZpeGVkIFPhu5EgY2jhu68gc+G7kSB0aOG6rXAgcGjDom4gbXXhu5FuIGdp4buvIGzhuqFpICht4bq3YyDEkeG7i25oOiAxKVxuICogQHBhcmFtIGlnbm9yZUZvcm1hdFNlcGFyYXRvciBC4buPIHF1YSBixrDhu5tjIGNodeG6qW4gaMOzYSBk4bqldSBwaMOibiBjw6FjaCAoa2hpIHZhbHVlIMSRw6MgbMOgIHPhu5EgdGh14bqnbilcbiAqIEBwYXJhbSBpZ25vcmVQYXJzZUZsb2F0IELhu48gcXVhIGLGsOG7m2MgbMOgbSB0csOybiAoZ2nhu68gbmd1ecOqbiBwaOG6p24gdGjhuq1wIHBow6JuKVxuICogQHBhcmFtIGxhbmcgTmfDtG4gbmfhu68gaGnhu4NuIHRo4buLICgndmknIGhv4bq3YyAnZW4nKSwgbeG6t2MgxJHhu4tuaCBs4bqleSB04burIGNhY2hlXG4gKiBAcmV0dXJucyBDaHXhu5dpIHPhu5EgxJHDoyBmb3JtYXQgdGhlbyBsb2NhbGUgKHZkOiBcIjEuMjM0LjU2Nyw4OVwiIGhv4bq3YyBcIjEsMjM0LDU2Ny44OVwiKVxuICogQGV4YW1wbGVcbiAqIC8vIFZJLCAyIGNo4buvIHPhu5EgdGjhuq1wIHBow6JuXG4gKiB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoMTIzNDU2Ny44OTEsIHRydWUsIDIpIOKGkiBcIjEuMjM0LjU2Nyw4OVwiXG4gKiAvLyBFTiwgMiBjaOG7ryBz4buRIHRo4bqtcCBwaMOiblxuICogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKDEyMzQ1NjcuODkxLCB0cnVlLCAyLCBmYWxzZSwgZmFsc2UsICdlbicpIOKGkiBcIjEsMjM0LDU2Ny44OVwiXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3Qgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIGFjY2VwdE5lZ2F0aXZlVmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQsIHBhcnNlRml4ZWQgPSAxLCBpZ25vcmVGb3JtYXRTZXBhcmF0b3IgPSBmYWxzZSwgaWdub3JlUGFyc2VGbG9hdCA9IGZhbHNlLCBsYW5nPzogc3RyaW5nKTogYW55ID0+IHtcbiAgbGFuZyA9IGxhbmcgfHwgVXRpbHNDYWNoZS5nZXRMYW5nKCk7XG5cbiAgaWYgKCFgJHt2YWx1ZX1gLnRyaW0oKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNOaWwodmFsdWUpIHx8ICghYWNjZXB0TmVnYXRpdmVWYWx1ZSAmJiArdmFsdWUgPD0gMCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaWdub3JlRm9ybWF0U2VwYXJhdG9yKSB7XG4gICAgdmFsdWUgPSBmb3JtYXROdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgY29uc3QgaXNGbG9hdCA9IHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKTtcbiAgY29uc3QgW2ludFN0ciwgZmxvYXRTdHJdID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gIGlmICghZmxvYXRTdHI/Lmxlbmd0aCkge1xuICAgIHBhcnNlRml4ZWQgPSAwO1xuICB9XG4gIGNvbnN0IHJvdW5kID0gKHZhbHVlOiBudW1iZXIsIHBhcnNlRml4ZWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZpeGVkID0gTWF0aC5wb3coMTAsIHBhcnNlRml4ZWQpO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBmaXhlZCkgLyBmaXhlZDtcbiAgfTtcblxuICBpZiAocGFyc2VGaXhlZCA+IChmbG9hdFN0cj8ubGVuZ3RoIHx8IDApKSB7XG4gICAgY29uc3QgbWF4UGFyc2VGaXhlZCA9IGFjY2VwdE5lZ2F0aXZlVmFsdWUgJiYgK3ZhbHVlIDwgMCA/IDE3IDogMTY7XG4gICAgY29uc3QgZml4ZWQgPSBtYXhQYXJzZUZpeGVkIC0gKGludFN0cj8ubGVuZ3RoIHx8IDApO1xuXG4gICAgcGFyc2VGaXhlZCA9IHBhcnNlRml4ZWQgPCBmaXhlZCA/IHBhcnNlRml4ZWQgOiBmaXhlZDtcbiAgfVxuXG4gIGlmIChpc0Zsb2F0ICYmICFpZ25vcmVQYXJzZUZsb2F0KSB7XG4gICAgdmFsdWUgPSBwYXJzZUZsb2F0KHJvdW5kKCt2YWx1ZSwgcGFyc2VGaXhlZCkudG9GaXhlZChwYXJzZUZpeGVkKSk7XG4gIH1cblxuICAvLyBY4butIGzDvSBraMO0bmcgZm9ybWF0IGThu68gbGnhu4d1IHBo4bqnbiB0aOG6rXAgcGjDom5cbiAgY29uc3QgdmFsdWVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpO1xuICBjb25zdCBpbmRleCA9IHZhbHVlU3RyaW5nLmluZGV4T2YoJy4nKTtcblxuICBpZiAoaW5kZXggIT09IC0xICYmIChwYXJzZUZpeGVkID4gMyB8fCBpZ25vcmVQYXJzZUZsb2F0KSkge1xuICAgIGxldCBkZWNpbWFsUGFydCA9IHZhbHVlU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIHZhbHVlU3RyaW5nLmxlbmd0aCk7XG4gICAgbGV0IGludCA9IHZhbHVlU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCArIDEpO1xuXG4gICAgaWYgKGlnbm9yZVBhcnNlRmxvYXQpIHtcbiAgICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc3Vic3RyaW5nKDAsIHBhcnNlRml4ZWQpO1xuICAgIH1cbiAgICBpZiAobGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTikge1xuICAgICAgaW50ID0gaW50LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XG5cbiAgICAgIHJldHVybiBgJHtpbnR9JHtkZWNpbWFsUGFydH1gO1xuICAgIH1cbiAgICBpbnQgPSBpbnQucmVwbGFjZSgnLicsICcsJykucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJy4nKTtcblxuICAgIHJldHVybiBgJHtpbnR9JHtkZWNpbWFsUGFydH1gO1xuICB9XG4gIGlmIChpbmRleCA9PT0gLTEgfHwgcGFyc2VGaXhlZCA8PSAzKSB7XG4gICAgaWYgKGxhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoJy4nLCAnLCcpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJy4nKTtcbiAgfVxufTtcbiJdfQ==
|