@libs-ui/utils 0.2.355-9 → 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.
Files changed (52) hide show
  1. package/README.md +633 -2
  2. package/base64.d.ts +25 -0
  3. package/cache.d.ts +73 -0
  4. package/collection.d.ts +12 -0
  5. package/color.d.ts +37 -0
  6. package/communicate-micro.d.ts +34 -1
  7. package/crypto-3rd.d.ts +12 -0
  8. package/crypto.d.ts +17 -0
  9. package/dangerous-object.d.ts +8 -1
  10. package/data.d.ts +5 -3
  11. package/date.d.ts +12 -0
  12. package/dom.d.ts +56 -0
  13. package/download.d.ts +21 -0
  14. package/esm2022/base64.mjs +27 -2
  15. package/esm2022/cache.mjs +74 -1
  16. package/esm2022/collection.mjs +13 -1
  17. package/esm2022/color.mjs +38 -1
  18. package/esm2022/communicate-micro.mjs +37 -5
  19. package/esm2022/crypto-3rd.mjs +13 -1
  20. package/esm2022/crypto.mjs +18 -1
  21. package/esm2022/dangerous-object.mjs +11 -2
  22. package/esm2022/data.mjs +6 -4
  23. package/esm2022/date.mjs +13 -1
  24. package/esm2022/dom.mjs +57 -1
  25. package/esm2022/download.mjs +22 -1
  26. package/esm2022/file.mjs +54 -1
  27. package/esm2022/format-number.mjs +31 -3
  28. package/esm2022/format-text.mjs +73 -2
  29. package/esm2022/function-check-embed-frame.mjs +28 -1
  30. package/esm2022/pattern.mjs +83 -3
  31. package/esm2022/trace.mjs +8 -1
  32. package/esm2022/two-way-signal-object.mjs +14 -1
  33. package/esm2022/uri.mjs +22 -3
  34. package/esm2022/url-search-params.mjs +68 -1
  35. package/esm2022/url.mjs +10 -1
  36. package/esm2022/uuid.mjs +7 -1
  37. package/esm2022/xss-filter.mjs +14 -1
  38. package/fesm2022/libs-ui-utils.mjs +723 -21
  39. package/fesm2022/libs-ui-utils.mjs.map +1 -1
  40. package/file.d.ts +53 -0
  41. package/format-number.d.ts +29 -1
  42. package/format-text.d.ts +71 -0
  43. package/function-check-embed-frame.d.ts +22 -0
  44. package/package.json +2 -2
  45. package/pattern.d.ts +81 -1
  46. package/trace.d.ts +7 -0
  47. package/two-way-signal-object.d.ts +13 -0
  48. package/uri.d.ts +20 -0
  49. package/url-search-params.d.ts +67 -0
  50. package/url.d.ts +9 -0
  51. package/uuid.d.ts +6 -0
  52. 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
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9kb3dubG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFFeEMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1RCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBQ0YsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFDRixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLE9BQWUsRUFBRSxRQUFnQixFQUFFLFFBQWtCLEVBQUUsRUFBRTtJQUMvRixNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEMsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ25DLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDeEMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUN0QyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFlBQThCLEVBQUUsZ0JBQXlCLEVBQUUsUUFBaUIsRUFBRSxFQUFFO0lBQ3ZILE1BQU0sYUFBYSxHQUFHLFlBQVksRUFBRSxHQUFHLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksU0FBUyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnZlcnRCYXNlNjRUb0Jsb2IgfSBmcm9tICcuL2Jhc2U2NCc7XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeVVybFVzZVhtbFJlcXVlc3QgPSAoZmlsZVVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHhtbFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICB4bWxSZXF1ZXN0Lm9wZW4oJ0dFVCcsIGZpbGVVcmwsIHRydWUpO1xuICB4bWxSZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgeG1sUmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHhtbFJlcXVlc3QucmVzcG9uc2UpO1xuXG4gICAgZG93bmxvYWRGaWxlQnlVcmwodXJsLCBmaWxlbmFtZSk7XG4gIH07XG4gIHhtbFJlcXVlc3Qub25sb2FkID0gKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHhtbFJlcXVlc3QucmVzcG9uc2UpO1xuXG4gICAgZG93bmxvYWRGaWxlQnlVcmwodXJsLCBmaWxlbmFtZSk7XG4gIH07XG4gIHhtbFJlcXVlc3Quc2VuZCgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRmlsZUJ5VXJsID0gYXN5bmMgKGZpbGVVcmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgb25seU9wZW4/OiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IGRvd25sb2FkRmlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgaWYgKCFvbmx5T3Blbikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZVVybCk7XG5cbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG5cbiAgICAgIGZpbGVVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIH1cbiAgfVxuICBkb3dubG9hZEZpbGVFbGVtZW50LmhyZWYgPSBmaWxlVXJsO1xuICBkb3dubG9hZEZpbGVFbGVtZW50LmRvd25sb2FkID0gZmlsZW5hbWU7XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQudGFyZ2V0ID0gJ19ibGFuayc7XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQuY2xpY2soKTtcbiAgZG93bmxvYWRGaWxlRWxlbWVudC5yZW1vdmUoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZEltYWdlRnJvbUVMZW1lbnQgPSAoaW1hZ2VFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50LCB0eXBlRmlsZURvd25sb2FkPzogc3RyaW5nLCBuYW1lRmlsZT86IHN0cmluZykgPT4ge1xuICBjb25zdCBwYXJlbnRFbGVtZW50ID0gaW1hZ2VFbGVtZW50Py5zcmM7XG4gIGNvbnN0IGJsb2JEYXRhID0gY29udmVydEJhc2U2NFRvQmxvYihwYXJlbnRFbGVtZW50KTtcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtibG9iRGF0YV0sIHsgdHlwZTogdHlwZUZpbGVEb3dubG9hZCB8fCAnaW1hZ2UvcG5nJyB9KTtcbiAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgbGluay5ocmVmID0gdXJsO1xuICBsaW5rLmRvd25sb2FkID0gbmFtZUZpbGUgfHwgJ2JhcmNvZGUnO1xuICBsaW5rLmNsaWNrKCk7XG59O1xuIl19
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
- const lang = UtilsCache.getLang();
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LW51bWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2Zvcm1hdC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBc0IsRUFBVSxFQUFFO0lBQzdELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVsQyxJQUFJLElBQUksS0FBSyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQXNCLEVBQUUsbUJBQXdDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLElBQWEsRUFBTyxFQUFFO0lBQ3hNLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXBDLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hELEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLElBQUksVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwRCxVQUFVLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDekQsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssc0JBQXNCLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFaEQsT0FBTyxHQUFHLEdBQUcsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsRSxPQUFPLEdBQUcsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEMsSUFBSSxJQUFJLEtBQUssc0JBQXNCLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxPQUFPLEtBQUs7YUFDVCxRQUFRLEVBQUU7YUFDVixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUNqQixPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFV0aWxzQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMgfSBmcm9tICcuL2xhbmd1YWdlJztcblxuLyoqXG4gKiBDaHXhuqluIGjDs2EgY2h14buXaSBz4buRIHRoZW8gbG9jYWxlIGhp4buHbiB04bqhaSB24buBIGThuqFuZyBz4buRIHRo4buxYyAocGFyc2VhYmxlKS5cbiAqIC0gVuG7m2kgKipFTioqOiBYw7NhIGThuqV1IHBo4bqpeSAoYCxgKSDigJQgZOG6pXUgcGjDom4gdMOhY2ggaMOgbmcgbmdow6xuLlxuICogLSBW4bubaSAqKlZJKio6IFjDs2EgZOG6pXUgY2jhuqVtIChgLmApIHbDoCDEkeG7lWkgZOG6pXUgcGjhuql5IChgLGApIHRow6BuaCBk4bqldSBjaOG6pW0gKGAuYCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIENodeG7l2kgaG/hurdjIHPhu5EgY+G6p24gY2h14bqpbiBow7NhXG4gKiBAcmV0dXJucyBDaHXhu5dpIHPhu5EgxJHDoyDEkcaw4bujYyBjaHXhuqluIGjDs2EgKGtow7RuZyBk4bqldSBwaMOibiBjw6FjaCBsb2NhbGUpXG4gKiBAZXhhbXBsZVxuICogLy8gRU46IFwiMSwyMzQsNTY3XCIg4oaSIFwiMTIzNDU2N1wiXG4gKiAvLyBWSTogXCIxLjIzNC41NjcsODlcIiDihpIgXCIxMjM0NTY3Ljg5XCJcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdE51bWJlciA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGFuZyA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpO1xuXG4gIGlmIChsYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucmVwbGFjZSgvWyxdL2csICcnKTtcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1suXS9nLCAnJykucmVwbGFjZSgvWyxdL2csICcuJyk7XG59O1xuXG4vKipcbiAqIMSQ4buLbmggZOG6oW5nIHbDoCBoaeG7g24gdGjhu4sgc+G7kSB0aGVvIG5nw7RuIG5n4buvIChWSS9FTikgduG7m2kgY8OhYyB0w7l5IGNo4buNbiBsaW5oIGhv4bqhdC5cbiAqIFjhu60gbMO9IHPhu5Egw6JtLCBwaOG6p24gdGjhuq1wIHBow6JuLCBsw6BtIHRyw7JuIHbDoCBk4bqldSBwaMOibiBjw6FjaCBow6BuZyBuZ2jDrG4uXG4gKlxuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgc+G7kSBob+G6t2MgY2h14buXaSBz4buRIMSR4bqndSB2w6BvXG4gKiBAcGFyYW0gYWNjZXB0TmVnYXRpdmVWYWx1ZSBDw7MgY2jhuqVwIG5o4bqtbiBz4buRIMOibSBraMO0bmcgKGZhbHNlIOKGkiB0cuG6oyB24buBIDAgbuG6v3UgdmFsdWUgPD0gMClcbiAqIEBwYXJhbSBwYXJzZUZpeGVkIFPhu5EgY2jhu68gc+G7kSB0aOG6rXAgcGjDom4gbXXhu5FuIGdp4buvIGzhuqFpICht4bq3YyDEkeG7i25oOiAxKVxuICogQHBhcmFtIGlnbm9yZUZvcm1hdFNlcGFyYXRvciBC4buPIHF1YSBixrDhu5tjIGNodeG6qW4gaMOzYSBk4bqldSBwaMOibiBjw6FjaCAoa2hpIHZhbHVlIMSRw6MgbMOgIHPhu5EgdGh14bqnbilcbiAqIEBwYXJhbSBpZ25vcmVQYXJzZUZsb2F0IELhu48gcXVhIGLGsOG7m2MgbMOgbSB0csOybiAoZ2nhu68gbmd1ecOqbiBwaOG6p24gdGjhuq1wIHBow6JuKVxuICogQHBhcmFtIGxhbmcgTmfDtG4gbmfhu68gaGnhu4NuIHRo4buLICgndmknIGhv4bq3YyAnZW4nKSwgbeG6t2MgxJHhu4tuaCBs4bqleSB04burIGNhY2hlXG4gKiBAcmV0dXJucyBDaHXhu5dpIHPhu5EgxJHDoyBmb3JtYXQgdGhlbyBsb2NhbGUgKHZkOiBcIjEuMjM0LjU2Nyw4OVwiIGhv4bq3YyBcIjEsMjM0LDU2Ny44OVwiKVxuICogQGV4YW1wbGVcbiAqIC8vIFZJLCAyIGNo4buvIHPhu5EgdGjhuq1wIHBow6JuXG4gKiB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoMTIzNDU2Ny44OTEsIHRydWUsIDIpIOKGkiBcIjEuMjM0LjU2Nyw4OVwiXG4gKiAvLyBFTiwgMiBjaOG7ryBz4buRIHRo4bqtcCBwaMOiblxuICogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKDEyMzQ1NjcuODkxLCB0cnVlLCAyLCBmYWxzZSwgZmFsc2UsICdlbicpIOKGkiBcIjEsMjM0LDU2Ny44OVwiXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3Qgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIGFjY2VwdE5lZ2F0aXZlVmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQsIHBhcnNlRml4ZWQgPSAxLCBpZ25vcmVGb3JtYXRTZXBhcmF0b3IgPSBmYWxzZSwgaWdub3JlUGFyc2VGbG9hdCA9IGZhbHNlLCBsYW5nPzogc3RyaW5nKTogYW55ID0+IHtcbiAgbGFuZyA9IGxhbmcgfHwgVXRpbHNDYWNoZS5nZXRMYW5nKCk7XG5cbiAgaWYgKCFgJHt2YWx1ZX1gLnRyaW0oKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNOaWwodmFsdWUpIHx8ICghYWNjZXB0TmVnYXRpdmVWYWx1ZSAmJiArdmFsdWUgPD0gMCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaWdub3JlRm9ybWF0U2VwYXJhdG9yKSB7XG4gICAgdmFsdWUgPSBmb3JtYXROdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgY29uc3QgaXNGbG9hdCA9IHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKTtcbiAgY29uc3QgW2ludFN0ciwgZmxvYXRTdHJdID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gIGlmICghZmxvYXRTdHI/Lmxlbmd0aCkge1xuICAgIHBhcnNlRml4ZWQgPSAwO1xuICB9XG4gIGNvbnN0IHJvdW5kID0gKHZhbHVlOiBudW1iZXIsIHBhcnNlRml4ZWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZpeGVkID0gTWF0aC5wb3coMTAsIHBhcnNlRml4ZWQpO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBmaXhlZCkgLyBmaXhlZDtcbiAgfTtcblxuICBpZiAocGFyc2VGaXhlZCA+IChmbG9hdFN0cj8ubGVuZ3RoIHx8IDApKSB7XG4gICAgY29uc3QgbWF4UGFyc2VGaXhlZCA9IGFjY2VwdE5lZ2F0aXZlVmFsdWUgJiYgK3ZhbHVlIDwgMCA/IDE3IDogMTY7XG4gICAgY29uc3QgZml4ZWQgPSBtYXhQYXJzZUZpeGVkIC0gKGludFN0cj8ubGVuZ3RoIHx8IDApO1xuXG4gICAgcGFyc2VGaXhlZCA9IHBhcnNlRml4ZWQgPCBmaXhlZCA/IHBhcnNlRml4ZWQgOiBmaXhlZDtcbiAgfVxuXG4gIGlmIChpc0Zsb2F0ICYmICFpZ25vcmVQYXJzZUZsb2F0KSB7XG4gICAgdmFsdWUgPSBwYXJzZUZsb2F0KHJvdW5kKCt2YWx1ZSwgcGFyc2VGaXhlZCkudG9GaXhlZChwYXJzZUZpeGVkKSk7XG4gIH1cblxuICAvLyBY4butIGzDvSBraMO0bmcgZm9ybWF0IGThu68gbGnhu4d1IHBo4bqnbiB0aOG6rXAgcGjDom5cbiAgY29uc3QgdmFsdWVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpO1xuICBjb25zdCBpbmRleCA9IHZhbHVlU3RyaW5nLmluZGV4T2YoJy4nKTtcblxuICBpZiAoaW5kZXggIT09IC0xICYmIChwYXJzZUZpeGVkID4gMyB8fCBpZ25vcmVQYXJzZUZsb2F0KSkge1xuICAgIGxldCBkZWNpbWFsUGFydCA9IHZhbHVlU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIHZhbHVlU3RyaW5nLmxlbmd0aCk7XG4gICAgbGV0IGludCA9IHZhbHVlU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCArIDEpO1xuXG4gICAgaWYgKGlnbm9yZVBhcnNlRmxvYXQpIHtcbiAgICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc3Vic3RyaW5nKDAsIHBhcnNlRml4ZWQpO1xuICAgIH1cbiAgICBpZiAobGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTikge1xuICAgICAgaW50ID0gaW50LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XG5cbiAgICAgIHJldHVybiBgJHtpbnR9JHtkZWNpbWFsUGFydH1gO1xuICAgIH1cbiAgICBpbnQgPSBpbnQucmVwbGFjZSgnLicsICcsJykucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJy4nKTtcblxuICAgIHJldHVybiBgJHtpbnR9JHtkZWNpbWFsUGFydH1gO1xuICB9XG4gIGlmIChpbmRleCA9PT0gLTEgfHwgcGFyc2VGaXhlZCA8PSAzKSB7XG4gICAgaWYgKGxhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoJy4nLCAnLCcpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJy4nKTtcbiAgfVxufTtcbiJdfQ==