@libs-ui/utils 0.1.1-1

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 (65) hide show
  1. package/README.md +3 -0
  2. package/base64.d.ts +5 -0
  3. package/cache.d.ts +42 -0
  4. package/color.d.ts +11 -0
  5. package/communicate-micro.d.ts +16 -0
  6. package/constants.d.ts +10 -0
  7. package/crypto-3rd.d.ts +7 -0
  8. package/crypto.d.ts +8 -0
  9. package/dangerous-object.d.ts +79 -0
  10. package/date.d.ts +44 -0
  11. package/dom.d.ts +52 -0
  12. package/download.d.ts +3 -0
  13. package/esm2022/base64.mjs +43 -0
  14. package/esm2022/cache.mjs +388 -0
  15. package/esm2022/color.mjs +133 -0
  16. package/esm2022/communicate-micro.mjs +149 -0
  17. package/esm2022/constants.mjs +11 -0
  18. package/esm2022/crypto-3rd.mjs +38 -0
  19. package/esm2022/crypto.mjs +41 -0
  20. package/esm2022/dangerous-object.mjs +149 -0
  21. package/esm2022/date.mjs +191 -0
  22. package/esm2022/dom.mjs +256 -0
  23. package/esm2022/download.mjs +41 -0
  24. package/esm2022/file.mjs +90 -0
  25. package/esm2022/format-number.mjs +66 -0
  26. package/esm2022/format-text.mjs +149 -0
  27. package/esm2022/function-check-embed-frame.mjs +10 -0
  28. package/esm2022/get-smart-axis-scale.mjs +174 -0
  29. package/esm2022/helpers.mjs +651 -0
  30. package/esm2022/http-params.mjs +80 -0
  31. package/esm2022/index.mjs +30 -0
  32. package/esm2022/inject-token.mjs +5 -0
  33. package/esm2022/key-cache.mjs +31 -0
  34. package/esm2022/key-code.mjs +123 -0
  35. package/esm2022/language.mjs +70 -0
  36. package/esm2022/libs-ui-utils.mjs +5 -0
  37. package/esm2022/pattern.mjs +62 -0
  38. package/esm2022/random.mjs +42 -0
  39. package/esm2022/two-way-signal-object.mjs +131 -0
  40. package/esm2022/uri.mjs +25 -0
  41. package/esm2022/url-search-params.mjs +99 -0
  42. package/esm2022/uuid.mjs +18 -0
  43. package/esm2022/xss-filter.mjs +10 -0
  44. package/fesm2022/libs-ui-utils.mjs +3234 -0
  45. package/fesm2022/libs-ui-utils.mjs.map +1 -0
  46. package/file.d.ts +18 -0
  47. package/format-number.d.ts +2 -0
  48. package/format-text.d.ts +11 -0
  49. package/function-check-embed-frame.d.ts +2 -0
  50. package/get-smart-axis-scale.d.ts +34 -0
  51. package/helpers.d.ts +270 -0
  52. package/http-params.d.ts +37 -0
  53. package/index.d.ts +29 -0
  54. package/inject-token.d.ts +4 -0
  55. package/key-cache.d.ts +1 -0
  56. package/key-code.d.ts +122 -0
  57. package/language.d.ts +37 -0
  58. package/package.json +29 -0
  59. package/pattern.d.ts +20 -0
  60. package/random.d.ts +3 -0
  61. package/two-way-signal-object.d.ts +15 -0
  62. package/uri.d.ts +5 -0
  63. package/url-search-params.d.ts +25 -0
  64. package/uuid.d.ts +1 -0
  65. package/xss-filter.d.ts +3 -0
@@ -0,0 +1,149 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { Subject, filter, fromEvent, takeUntil } from 'rxjs';
3
+ import { decrypt, encrypt } from './crypto';
4
+ import { decrypt3rd, encrypt3rd } from './crypto-3rd';
5
+ import { isEmbedFrame } from './function-check-embed-frame';
6
+ import { UtilsCache } from './cache';
7
+ import { COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE } from './constants';
8
+ export class UtilsCommunicateMicroKeyGlobal {
9
+ static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';
10
+ }
11
+ export class UtilsCommunicateMicro {
12
+ static initdEvent;
13
+ static subs = new Map();
14
+ static allMessageSub = new Subject();
15
+ static initEvent(currentWindow, onDestroy) {
16
+ if (this.initdEvent) {
17
+ return;
18
+ }
19
+ this.initdEvent = true;
20
+ if (!this.subs.get(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE)) {
21
+ this.subs.set(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);
22
+ }
23
+ fromEvent(currentWindow, 'message')
24
+ .pipe(takeUntil(onDestroy))
25
+ .subscribe((e) => {
26
+ const event = { data: { ...e.data } };
27
+ const data = event.data;
28
+ const type = data.type;
29
+ if (!type) {
30
+ return this.allMessageSub.next(event);
31
+ }
32
+ const sub = UtilsCommunicateMicro.GetMessage(type);
33
+ if (!type || !data.response) {
34
+ return;
35
+ }
36
+ try {
37
+ if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {
38
+ data.response = JSON.parse(decrypt3rd(data.response));
39
+ sub.next(event);
40
+ this.allMessageSub.next(event);
41
+ return;
42
+ }
43
+ data.response = JSON.parse(decrypt(data.response));
44
+ sub.next(event);
45
+ this.allMessageSub.next(event);
46
+ }
47
+ catch (error) {
48
+ console.log(error);
49
+ sub.next(event);
50
+ this.allMessageSub.next(event);
51
+ }
52
+ });
53
+ UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage)
54
+ .pipe(filter((e) => e.data.response !== UtilsCache.idService), takeUntil(onDestroy))
55
+ .subscribe(() => {
56
+ console.log('clear all cache by event');
57
+ UtilsCache.ClearAll();
58
+ });
59
+ }
60
+ static PostMessageToParent(data) {
61
+ data = this.convertData(data);
62
+ try {
63
+ if (isEmbedFrame()) {
64
+ window?.parent?.postMessage(data, '*');
65
+ return;
66
+ }
67
+ window?.top?.postMessage(data, '*');
68
+ }
69
+ catch (error) {
70
+ console.log(error);
71
+ }
72
+ }
73
+ static PostMessageToChildren(data) {
74
+ data = this.convertData(data);
75
+ const iframes = document.querySelectorAll('iframe');
76
+ Array.from(iframes).forEach((iframe) => {
77
+ iframe?.contentWindow?.postMessage(data, '*');
78
+ });
79
+ }
80
+ static PostMessageToOpener(data) {
81
+ if (!window.opener) {
82
+ return;
83
+ }
84
+ data = this.convertData(data);
85
+ window.opener.postMessage(data, '*');
86
+ }
87
+ static convertData(data) {
88
+ if (!data || !data.type || !data.response) {
89
+ return data;
90
+ }
91
+ data = { ...data };
92
+ const type = data.type;
93
+ if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {
94
+ try {
95
+ JSON.parse(decrypt3rd(data.response));
96
+ return data;
97
+ }
98
+ catch (_) {
99
+ data.response = encrypt3rd(JSON.stringify(data.response));
100
+ return data;
101
+ }
102
+ }
103
+ try {
104
+ JSON.parse(decrypt(data.response));
105
+ return data;
106
+ }
107
+ catch (_) {
108
+ data.response = encrypt(JSON.stringify(data.response));
109
+ return data;
110
+ }
111
+ }
112
+ static GetMessage(messageType) {
113
+ if (!this.initdEvent) {
114
+ throw Error('chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component');
115
+ }
116
+ if (typeof messageType === 'string') {
117
+ let sub = this.subs.get(messageType);
118
+ if (!sub) {
119
+ sub = new Subject();
120
+ this.subs.set(messageType, sub);
121
+ return sub;
122
+ }
123
+ return sub;
124
+ }
125
+ if (!Array.isArray(messageType) || !messageType.length) {
126
+ throw new Error('message type empty');
127
+ }
128
+ if (messageType.length === 1) {
129
+ return this.GetMessage(messageType[0]);
130
+ }
131
+ const types = messageType.sort().join(';');
132
+ let sub = this.subs.get(types);
133
+ if (sub) {
134
+ return sub;
135
+ }
136
+ sub = new Subject();
137
+ this.subs.set(types, sub);
138
+ this.initSubject(sub, messageType);
139
+ return sub;
140
+ }
141
+ static initSubject(subRoot, messageType) {
142
+ messageType.forEach((key) => {
143
+ this.GetMessage(key).subscribe((e) => {
144
+ subRoot.next(e);
145
+ });
146
+ });
147
+ }
148
+ }
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXVuaWNhdGUtbWljcm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jb21tdW5pY2F0ZS1taWNyby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkcsTUFBTSxPQUFPLDhCQUE4QjtJQUNsQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7O0FBRzFELE1BQU0sT0FBTyxxQkFBcUI7SUFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBVztJQUM1QixNQUFNLENBQUMsSUFBSSxHQUF1QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzVELE1BQU0sQ0FBQyxhQUFhLEdBQTBCLElBQUksT0FBTyxFQUFFLENBQUM7SUFFN0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFxQixFQUFFLFNBQXdCO1FBQ3JFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsSUFB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LENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBTdWJqZWN0LCBmaWx0ZXIsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWNyeXB0LCBlbmNyeXB0IH0gZnJvbSAnLi9jcnlwdG8nO1xuaW1wb3J0IHsgZGVjcnlwdDNyZCwgZW5jcnlwdDNyZCB9IGZyb20gJy4vY3J5cHRvLTNyZCc7XG5pbXBvcnQgeyBpc0VtYmVkRnJhbWUgfSBmcm9tICcuL2Z1bmN0aW9uLWNoZWNrLWVtYmVkLWZyYW1lJztcbmltcG9ydCB7IFV0aWxzQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IENPTU1VTklDQVRFX01JQ1JPX0tFWV9HRVRfQUxMX01FU1NBR0UsIENPTU1VTklDQVRFX01JQ1JPX1BSRUZJWF9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0IGNsYXNzIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCB7XG4gIHB1YmxpYyBzdGF0aWMgS0VZX01FU1NBR0VfTU9EQUwgPSAnTElCU19VSV9NT0RFTF9FVkVOVCc7XG59XG5cbmV4cG9ydCBjbGFzcyBVdGlsc0NvbW11bmljYXRlTWljcm8ge1xuICBwcml2YXRlIHN0YXRpYyBpbml0ZEV2ZW50PzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgc3ViczogTWFwPHN0cmluZywgU3ViamVjdDxNZXNzYWdlRXZlbnQ+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgYWxsTWVzc2FnZVN1YjogU3ViamVjdDxNZXNzYWdlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgc3RhdGljIGluaXRFdmVudChjdXJyZW50V2luZG93OiBXaW5kb3csIG9uRGVzdHJveTogU3ViamVjdDx2b2lkPikge1xuICAgIGlmICh0aGlzLmluaXRkRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0ZEV2ZW50ID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuc3Vicy5nZXQoQ09NTVVOSUNBVEVfTUlDUk9fS0VZX0dFVF9BTExfTUVTU0FHRSkpIHtcbiAgICAgIHRoaXMuc3Vicy5zZXQoQ09NTVVOSUNBVEVfTUlDUk9fS0VZX0dFVF9BTExfTUVTU0FHRSwgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLmFsbE1lc3NhZ2VTdWIpO1xuICAgIH1cblxuICAgIGZyb21FdmVudDxNZXNzYWdlRXZlbnQ+KGN1cnJlbnRXaW5kb3csICdtZXNzYWdlJylcbiAgICAgIC5waXBlKHRha2VVbnRpbChvbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICBjb25zdCBldmVudCA9IHsgZGF0YTogeyAuLi5lLmRhdGEgfSB9IGFzIE1lc3NhZ2VFdmVudDtcblxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGRhdGEudHlwZTtcblxuICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hbGxNZXNzYWdlU3ViLm5leHQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YiA9IFV0aWxzQ29tbXVuaWNhdGVNaWNyby5HZXRNZXNzYWdlKHR5cGUpO1xuXG4gICAgICAgIGlmICghdHlwZSB8fCAhZGF0YS5yZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlLmluY2x1ZGVzKENPTU1VTklDQVRFX01JQ1JPX1BSRUZJWF9UWVBFKSkge1xuICAgICAgICAgICAgZGF0YS5yZXNwb25zZSA9IEpTT04ucGFyc2UoZGVjcnlwdDNyZChkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgICAgICBzdWIubmV4dChldmVudCk7XG4gICAgICAgICAgICB0aGlzLmFsbE1lc3NhZ2VTdWIubmV4dChldmVudCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YS5yZXNwb25zZSA9IEpTT04ucGFyc2UoZGVjcnlwdChkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgICAgc3ViLm5leHQoZXZlbnQpO1xuICAgICAgICAgIHRoaXMuYWxsTWVzc2FnZVN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgc3ViLm5leHQoZXZlbnQpO1xuICAgICAgICAgIHRoaXMuYWxsTWVzc2FnZVN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uR2V0TWVzc2FnZShVdGlsc0NhY2hlLnR5cGVLZXlDbGVhckxvY2FsU3RvcmFnZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGUpID0+IGUuZGF0YS5yZXNwb25zZSAhPT0gVXRpbHNDYWNoZS5pZFNlcnZpY2UpLFxuICAgICAgICB0YWtlVW50aWwob25EZXN0cm95KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGVhciBhbGwgY2FjaGUgYnkgZXZlbnQnKTtcbiAgICAgICAgVXRpbHNDYWNoZS5DbGVhckFsbCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhOiBhbnkpIHtcbiAgICBkYXRhID0gdGhpcy5jb252ZXJ0RGF0YShkYXRhKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICAgIHdpbmRvdz8ucGFyZW50Py5wb3N0TWVzc2FnZShkYXRhLCAnKicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2luZG93Py50b3A/LnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgUG9zdE1lc3NhZ2VUb0NoaWxkcmVuKGRhdGE6IGFueSkge1xuICAgIGRhdGEgPSB0aGlzLmNvbnZlcnREYXRhKGRhdGEpO1xuICAgIGNvbnN0IGlmcmFtZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcblxuICAgIEFycmF5LmZyb20oaWZyYW1lcykuZm9yRWFjaCgoaWZyYW1lKSA9PiB7XG4gICAgICBpZnJhbWU/LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgUG9zdE1lc3NhZ2VUb09wZW5lcihkYXRhOiBhbnkpIHtcbiAgICBpZiAoIXdpbmRvdy5vcGVuZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuY29udmVydERhdGEoZGF0YSk7XG5cbiAgICB3aW5kb3cub3BlbmVyLnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb252ZXJ0RGF0YShkYXRhOiBhbnkpIHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudHlwZSB8fCAhZGF0YS5yZXNwb25zZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGRhdGEgPSB7IC4uLmRhdGEgfTtcbiAgICBjb25zdCB0eXBlID0gZGF0YS50eXBlO1xuXG4gICAgaWYgKHR5cGUuaW5jbHVkZXMoQ09NTVVOSUNBVEVfTUlDUk9fUFJFRklYX1RZUEUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBKU09OLnBhcnNlKGRlY3J5cHQzcmQoZGF0YS5yZXNwb25zZSkpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBkYXRhLnJlc3BvbnNlID0gZW5jcnlwdDNyZChKU09OLnN0cmluZ2lmeShkYXRhLnJlc3BvbnNlKSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBKU09OLnBhcnNlKGRlY3J5cHQoZGF0YS5yZXNwb25zZSkpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBkYXRhLnJlc3BvbnNlID0gZW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhLnJlc3BvbnNlKSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBHZXRNZXNzYWdlKG1lc3NhZ2VUeXBlOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogU3ViamVjdDxNZXNzYWdlRXZlbnQ+IHtcbiAgICBpZiAoIXRoaXMuaW5pdGRFdmVudCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ2NoxrBhIGtoxqFpIHThuqFvIGjDoG0gbOG6r25nIG5naGUgc+G7sSBraeG7h24sIGfhu41pIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5pbml0RXZlbnQod2luZG93KSB04bqhaSByb290IGNvbXBvbmVudCcpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1lc3NhZ2VUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IHN1YiA9IHRoaXMuc3Vicy5nZXQobWVzc2FnZVR5cGUpO1xuXG4gICAgICBpZiAoIXN1Yikge1xuICAgICAgICBzdWIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnN1YnMuc2V0KG1lc3NhZ2VUeXBlLCBzdWIpO1xuXG4gICAgICAgIHJldHVybiBzdWI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdWI7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlVHlwZSkgfHwgIW1lc3NhZ2VUeXBlLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXNzYWdlIHR5cGUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2VUeXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuR2V0TWVzc2FnZShtZXNzYWdlVHlwZVswXSk7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVzID0gbWVzc2FnZVR5cGUuc29ydCgpLmpvaW4oJzsnKTtcblxuICAgIGxldCBzdWIgPSB0aGlzLnN1YnMuZ2V0KHR5cGVzKTtcblxuICAgIGlmIChzdWIpIHtcbiAgICAgIHJldHVybiBzdWI7XG4gICAgfVxuXG4gICAgc3ViID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLnN1YnMuc2V0KHR5cGVzLCBzdWIpO1xuICAgIHRoaXMuaW5pdFN1YmplY3Qoc3ViLCBtZXNzYWdlVHlwZSk7XG5cbiAgICByZXR1cm4gc3ViO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdFN1YmplY3Qoc3ViUm9vdDogU3ViamVjdDxNZXNzYWdlRXZlbnQ+LCBtZXNzYWdlVHlwZTogQXJyYXk8c3RyaW5nPikge1xuICAgIG1lc3NhZ2VUeXBlLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpcy5HZXRNZXNzYWdlKGtleSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgIHN1YlJvb3QubmV4dChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';
2
+ export const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';
3
+ export const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';
4
+ export const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';
5
+ export const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';
6
+ export const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';
7
+ export const CHARACTER_DATA_EMPTY = '__';
8
+ export const DEFAULT_START_PAGE_0 = 'defaultStartPage0';
9
+ export const COMMUNICATE_MICRO_PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';
10
+ export const COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDBCQUEwQixDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLDRCQUE0QixDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLG9DQUFvQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLG9DQUFvQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHFDQUFxQyxDQUFDO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHFDQUFxQyxDQUFDO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRywyQkFBMkIsQ0FBQztBQUN6RSxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEID0gJ2kxOG5fdmFsaWRfZW1wdHlfbWVzc2FnZSc7XG5leHBvcnQgY29uc3QgRVJST1JfTUVTU0FHRV9QQVRURU5fVkFMSUQgPSAnaTE4bl92YWxpZF9wYXR0ZXJuX21lc3NhZ2UnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VfTUlOX1ZBTElEID0gJ2kxOG5fbWVzc2FnZV9lcnJvcl9pbnB1dF9taW5fdmFsdWUnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VfTUFYX1ZBTElEID0gJ2kxOG5fbWVzc2FnZV9lcnJvcl9pbnB1dF9tYXhfdmFsdWUnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VfTUlOX0xFTkdUSCA9ICdpMThuX21lc3NhZ2VfZXJyb3JfaW5wdXRfbWluX2xlbmd0aCc7XG5leHBvcnQgY29uc3QgRVJST1JfTUVTU0FHRV9NQVhfTEVOR1RIID0gJ2kxOG5fbWVzc2FnZV9lcnJvcl9pbnB1dF9tYXhfbGVuZ3RoJztcbmV4cG9ydCBjb25zdCBDSEFSQUNURVJfREFUQV9FTVBUWSA9ICdfXyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFSVF9QQUdFXzAgPSAnZGVmYXVsdFN0YXJ0UGFnZTAnO1xuZXhwb3J0IGNvbnN0IENPTU1VTklDQVRFX01JQ1JPX1BSRUZJWF9UWVBFID0gJzNSRF9JTlRFR1JBVEVfTUlDUk9fU0lURV8nO1xuZXhwb3J0IGNvbnN0IENPTU1VTklDQVRFX01JQ1JPX0tFWV9HRVRfQUxMX01FU1NBR0UgPSAnTUlDUk9fU0lURVNfQUxMX01FU1NBR0UnO1xuIl19
@@ -0,0 +1,38 @@
1
+ import CryptoES from 'crypto-es';
2
+ let key = '12~@#loqwsxacva(3rdhaq12';
3
+ /**
4
+ * @description Thiết lập key mã hóa
5
+ * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.
6
+ */
7
+ export const setKeyCrypto3rd = (value) => {
8
+ if (value.length !== 24 && value.length !== 32) {
9
+ throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);
10
+ }
11
+ key = value;
12
+ };
13
+ const keyStore = () => {
14
+ return key;
15
+ };
16
+ export const encrypt3rd = (plainData) => {
17
+ if (!keyStore()) {
18
+ throw Error('lỗi chưa setup key mã hóa');
19
+ }
20
+ const key = CryptoES.enc.Hex.parse(keyStore());
21
+ const iv = CryptoES.enc.Hex.parse(keyStore());
22
+ const mode = CryptoES.mode.CBC;
23
+ const padding = CryptoES.pad.Pkcs7;
24
+ const options = { iv: iv, mode: mode, padding: padding };
25
+ return CryptoES.AES.encrypt(plainData, key, options).toString();
26
+ };
27
+ export const decrypt3rd = (encryptedData) => {
28
+ if (!keyStore()) {
29
+ throw Error('lỗi chưa setup key mã hóa');
30
+ }
31
+ const key = CryptoES.enc.Hex.parse(keyStore());
32
+ const iv = CryptoES.enc.Hex.parse(keyStore());
33
+ const mode = CryptoES.mode.CBC;
34
+ const padding = CryptoES.pad.Pkcs7;
35
+ const options = { iv: iv, mode: mode, padding: padding };
36
+ return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLTNyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2NyeXB0by0zcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRWpDLElBQUksR0FBRyxHQUFHLDBCQUEwQixDQUFDO0FBRXJDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQy9DLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sNENBQTRDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtJQUNwQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQWlCLEVBQVUsRUFBRTtJQUN0RCxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNoQixNQUFNLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFFekQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQXFCLEVBQVUsRUFBRTtJQUMxRCxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNoQixNQUFNLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFFekQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDcnlwdG9FUyBmcm9tICdjcnlwdG8tZXMnO1xuXG5sZXQga2V5ID0gJzEyfkAjbG9xd3N4YWN2YSgzcmRoYXExMic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoaeG6v3QgbOG6rXAga2V5IG3DoyBow7NhXG4gKiBAcGFyYW0gdmFsdWUga2V5IG3DoyBow7NhLCDEkeG7mSBkw6BpIGLhurFuZyAyNCBob+G6t2MgMzIga8O9IHThu7EuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRLZXlDcnlwdG8zcmQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUubGVuZ3RoICE9PSAyNCAmJiB2YWx1ZS5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgRXJyb3IoYGtleS5sZW5ndGggPSAke3ZhbHVlLmxlbmd0aH07IEtleSBwaOG6o2kgbMOgIDEgY2h14buXaSBkw6BpIDI0IGhv4bq3YyAzMiBrw70gdOG7sWApO1xuICB9XG4gIGtleSA9IHZhbHVlO1xufTtcblxuY29uc3Qga2V5U3RvcmUgPSAoKSA9PiB7XG4gIHJldHVybiBrZXk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jcnlwdDNyZCA9IChwbGFpbkRhdGE6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICgha2V5U3RvcmUoKSkge1xuICAgIHRocm93IEVycm9yKCds4buXaSBjaMawYSBzZXR1cCBrZXkgbcOjIGjDs2EnKTtcbiAgfVxuICBjb25zdCBrZXkgPSBDcnlwdG9FUy5lbmMuSGV4LnBhcnNlKGtleVN0b3JlKCkpO1xuICBjb25zdCBpdiA9IENyeXB0b0VTLmVuYy5IZXgucGFyc2Uoa2V5U3RvcmUoKSk7XG4gIGNvbnN0IG1vZGUgPSBDcnlwdG9FUy5tb2RlLkNCQztcbiAgY29uc3QgcGFkZGluZyA9IENyeXB0b0VTLnBhZC5Qa2NzNztcbiAgY29uc3Qgb3B0aW9ucyA9IHsgaXY6IGl2LCBtb2RlOiBtb2RlLCBwYWRkaW5nOiBwYWRkaW5nIH07XG5cbiAgcmV0dXJuIENyeXB0b0VTLkFFUy5lbmNyeXB0KHBsYWluRGF0YSwga2V5LCBvcHRpb25zKS50b1N0cmluZygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHQzcmQgPSAoZW5jcnlwdGVkRGF0YTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFrZXlTdG9yZSgpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ2zhu5dpIGNoxrBhIHNldHVwIGtleSBtw6MgaMOzYScpO1xuICB9XG4gIGNvbnN0IGtleSA9IENyeXB0b0VTLmVuYy5IZXgucGFyc2Uoa2V5U3RvcmUoKSk7XG4gIGNvbnN0IGl2ID0gQ3J5cHRvRVMuZW5jLkhleC5wYXJzZShrZXlTdG9yZSgpKTtcbiAgY29uc3QgbW9kZSA9IENyeXB0b0VTLm1vZGUuQ0JDO1xuICBjb25zdCBwYWRkaW5nID0gQ3J5cHRvRVMucGFkLlBrY3M3O1xuICBjb25zdCBvcHRpb25zID0geyBpdjogaXYsIG1vZGU6IG1vZGUsIHBhZGRpbmc6IHBhZGRpbmcgfTtcblxuICByZXR1cm4gQ3J5cHRvRVMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkRGF0YSwga2V5LCBvcHRpb25zKS50b1N0cmluZyhDcnlwdG9FUy5lbmMuVXRmOCk7XG59O1xuIl19
@@ -0,0 +1,41 @@
1
+ import CryptoES from 'crypto-es';
2
+ let key = '12~@#loqwsxacva(3rdhaq12';
3
+ /**
4
+ * @description Thiết lập key mã hóa
5
+ * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.
6
+ */
7
+ export const setKeyCrypto = (value) => {
8
+ if (value.length !== 24 && value.length !== 32) {
9
+ throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);
10
+ }
11
+ key = value;
12
+ };
13
+ const keyStore = () => {
14
+ return key;
15
+ };
16
+ export const encrypt = (plainData) => {
17
+ if (!keyStore()) {
18
+ throw Error('lỗi chưa setup key mã hóa');
19
+ }
20
+ const key = CryptoES.enc.Hex.parse(keyStore());
21
+ const iv = CryptoES.enc.Hex.parse(keyStore());
22
+ const mode = CryptoES.mode.CBC;
23
+ const padding = CryptoES.pad.Pkcs7;
24
+ const options = { iv: iv, mode: mode, padding: padding };
25
+ return CryptoES.AES.encrypt(plainData, key, options).toString();
26
+ };
27
+ export const decrypt = (encryptedData) => {
28
+ if (!keyStore()) {
29
+ throw Error('lỗi chưa setup key mã hóa');
30
+ }
31
+ const key = CryptoES.enc.Hex.parse(keyStore());
32
+ const iv = CryptoES.enc.Hex.parse(keyStore());
33
+ const mode = CryptoES.mode.CBC;
34
+ const padding = CryptoES.pad.Pkcs7;
35
+ const options = { iv: iv, mode: mode, padding: padding };
36
+ return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);
37
+ };
38
+ export const md5 = (plainData) => {
39
+ return CryptoES.MD5(plainData).toString();
40
+ };
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvY3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUVqQyxJQUFJLEdBQUcsR0FBRywwQkFBMEIsQ0FBQztBQUVyQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUM1QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDL0MsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxNQUFNLDRDQUE0QyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUNELEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7SUFDcEIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUU7SUFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDaEIsTUFBTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0MsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXpELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxhQUFxQixFQUFVLEVBQUU7SUFDdkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDaEIsTUFBTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0MsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXpELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUU7SUFDdkMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDcnlwdG9FUyBmcm9tICdjcnlwdG8tZXMnO1xuXG5sZXQga2V5ID0gJzEyfkAjbG9xd3N4YWN2YSgzcmRoYXExMic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoaeG6v3QgbOG6rXAga2V5IG3DoyBow7NhXG4gKiBAcGFyYW0gdmFsdWUga2V5IG3DoyBow7NhLCDEkeG7mSBkw6BpIGLhurFuZyAyNCBob+G6t2MgMzIga8O9IHThu7EuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRLZXlDcnlwdG8gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUubGVuZ3RoICE9PSAyNCAmJiB2YWx1ZS5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgRXJyb3IoYGtleS5sZW5ndGggPSAke3ZhbHVlLmxlbmd0aH07IEtleSBwaOG6o2kgbMOgIDEgY2h14buXaSBkw6BpIDI0IGhv4bq3YyAzMiBrw70gdOG7sWApO1xuICB9XG4gIGtleSA9IHZhbHVlO1xufTtcblxuY29uc3Qga2V5U3RvcmUgPSAoKSA9PiB7XG4gIHJldHVybiBrZXk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChwbGFpbkRhdGE6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICgha2V5U3RvcmUoKSkge1xuICAgIHRocm93IEVycm9yKCds4buXaSBjaMawYSBzZXR1cCBrZXkgbcOjIGjDs2EnKTtcbiAgfVxuICBjb25zdCBrZXkgPSBDcnlwdG9FUy5lbmMuSGV4LnBhcnNlKGtleVN0b3JlKCkpO1xuICBjb25zdCBpdiA9IENyeXB0b0VTLmVuYy5IZXgucGFyc2Uoa2V5U3RvcmUoKSk7XG4gIGNvbnN0IG1vZGUgPSBDcnlwdG9FUy5tb2RlLkNCQztcbiAgY29uc3QgcGFkZGluZyA9IENyeXB0b0VTLnBhZC5Qa2NzNztcbiAgY29uc3Qgb3B0aW9ucyA9IHsgaXY6IGl2LCBtb2RlOiBtb2RlLCBwYWRkaW5nOiBwYWRkaW5nIH07XG5cbiAgcmV0dXJuIENyeXB0b0VTLkFFUy5lbmNyeXB0KHBsYWluRGF0YSwga2V5LCBvcHRpb25zKS50b1N0cmluZygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoZW5jcnlwdGVkRGF0YTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFrZXlTdG9yZSgpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ2zhu5dpIGNoxrBhIHNldHVwIGtleSBtw6MgaMOzYScpO1xuICB9XG4gIGNvbnN0IGtleSA9IENyeXB0b0VTLmVuYy5IZXgucGFyc2Uoa2V5U3RvcmUoKSk7XG4gIGNvbnN0IGl2ID0gQ3J5cHRvRVMuZW5jLkhleC5wYXJzZShrZXlTdG9yZSgpKTtcbiAgY29uc3QgbW9kZSA9IENyeXB0b0VTLm1vZGUuQ0JDO1xuICBjb25zdCBwYWRkaW5nID0gQ3J5cHRvRVMucGFkLlBrY3M3O1xuICBjb25zdCBvcHRpb25zID0geyBpdjogaXYsIG1vZGU6IG1vZGUsIHBhZGRpbmc6IHBhZGRpbmcgfTtcblxuICByZXR1cm4gQ3J5cHRvRVMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkRGF0YSwga2V5LCBvcHRpb25zKS50b1N0cmluZyhDcnlwdG9FUy5lbmMuVXRmOCk7XG59O1xuXG5leHBvcnQgY29uc3QgbWQ1ID0gKHBsYWluRGF0YTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBDcnlwdG9FUy5NRDUocGxhaW5EYXRhKS50b1N0cmluZygpO1xufTtcbiJdfQ==
@@ -0,0 +1,149 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { HttpParams } from '@angular/common/http';
3
+ import { TemplateRef, ElementRef } from '@angular/core';
4
+ import dayjs from 'dayjs';
5
+ import { Observable } from 'rxjs';
6
+ /**
7
+ * Danh sách các constructor name nguy hiểm
8
+ */
9
+ const DANGEROUS_CONSTRUCTOR_NAMES = ['Window', 'Document', 'HTMLDocument', 'HTMLElement', 'Element', 'Node', 'Location', 'Navigator', 'Screen', 'History', 'Storage', 'Console', 'Performance'];
10
+ /**
11
+ * Kiểm tra xem đối tượng có phải là browser global object không
12
+ */
13
+ export const isBrowserGlobalObject = (obj) => {
14
+ if (obj === null || typeof obj !== 'object') {
15
+ return false;
16
+ }
17
+ return obj instanceof Window || obj instanceof Document || obj === window || obj === document || obj === globalThis;
18
+ };
19
+ /**
20
+ * Kiểm tra xem đối tượng có phải là DOM object không
21
+ */
22
+ export const isDOMObject = (obj) => {
23
+ if (obj === null || typeof obj !== 'object') {
24
+ return false;
25
+ }
26
+ return obj instanceof HTMLElement || obj instanceof Node || obj instanceof Element;
27
+ };
28
+ /**
29
+ * Kiểm tra xem đối tượng có phải là browser API object không
30
+ */
31
+ export const isBrowserAPIObject = (obj) => {
32
+ if (obj === null || typeof obj !== 'object' || typeof window === 'undefined') {
33
+ return false;
34
+ }
35
+ return obj === window.location || obj === window.navigator || obj === window.screen || obj === window.history || obj === window.localStorage || obj === window.sessionStorage || obj === window.console || obj === window.performance;
36
+ };
37
+ /**
38
+ * Kiểm tra constructor name có nằm trong danh sách nguy hiểm không
39
+ */
40
+ export const hasDangerousConstructorName = (obj) => {
41
+ if (obj === null || typeof obj !== 'object') {
42
+ return false;
43
+ }
44
+ const constructorName = obj.constructor?.name;
45
+ return constructorName && DANGEROUS_CONSTRUCTOR_NAMES.includes(constructorName);
46
+ };
47
+ /**
48
+ * Kiểm tra xem đối tượng có phải là DOM object hoặc browser object nguy hiểm không
49
+ * Những đối tượng này có thể gây ra circular reference và maximum call stack
50
+ */
51
+ export const isDangerousObject = (obj) => {
52
+ if (obj === null || typeof obj !== 'object') {
53
+ return false;
54
+ }
55
+ return isBrowserGlobalObject(obj) || isDOMObject(obj) || isBrowserAPIObject(obj) || hasDangerousConstructorName(obj);
56
+ };
57
+ /**
58
+ * Kiểm tra đối tượng có phải là Angular/Framework object không
59
+ */
60
+ export const isFrameworkObject = (obj) => {
61
+ if (obj === null || typeof obj !== 'object') {
62
+ return false;
63
+ }
64
+ return obj instanceof TemplateRef || obj instanceof ElementRef;
65
+ };
66
+ /**
67
+ * Kiểm tra đối tượng có phải là File/Blob object không
68
+ */
69
+ export const isFile = (obj) => {
70
+ if (obj === null || typeof obj !== 'object') {
71
+ return false;
72
+ }
73
+ return obj instanceof File || obj instanceof Blob || Object.prototype.toString.call(obj) === '[object File]';
74
+ };
75
+ /**
76
+ * Kiểm tra đối tượng có phải là Built-in object không
77
+ */
78
+ export const isBuiltInObject = (obj) => {
79
+ if (obj === null || typeof obj !== 'object') {
80
+ return false;
81
+ }
82
+ return obj instanceof Date || isRegExp(obj) || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);
83
+ };
84
+ /**
85
+ * Kiểm tra đối tượng có phải là RegExp object không
86
+ */
87
+ export const isRegExp = (obj) => {
88
+ return obj instanceof RegExp;
89
+ };
90
+ /**
91
+ * Kiểm tra đối tượng có phải là Async object không
92
+ */
93
+ export const isAsyncObject = (obj) => {
94
+ if (obj === null || typeof obj !== 'object') {
95
+ return false;
96
+ }
97
+ return obj instanceof Promise || obj instanceof Observable;
98
+ };
99
+ /**
100
+ * Kiểm tra đối tượng có phải là Special object cần bỏ qua không
101
+ * Bao gồm: Framework objects, File objects, Built-in objects, Async objects
102
+ */
103
+ export const isSpecialObject = (obj) => {
104
+ return isFrameworkObject(obj) || isFile(obj) || isBuiltInObject(obj) || isAsyncObject(obj);
105
+ };
106
+ /**
107
+ * Kiểm tra đối tượng có phải là dayjs object không
108
+ */
109
+ export const isDayjsObject = (obj) => {
110
+ return dayjs.isDayjs(obj);
111
+ };
112
+ /**
113
+ * Kiểm tra đối tượng có phải là object cần bỏ qua trong quá trình convert không
114
+ */
115
+ export const isSkippableObject = (obj) => {
116
+ return isDangerousObject(obj) || isSpecialObject(obj);
117
+ };
118
+ /**
119
+ * Kiểm tra đối tượng có phải là Map object không
120
+ */
121
+ export const isMap = (obj) => {
122
+ return obj instanceof Map;
123
+ };
124
+ /**
125
+ * Kiểm tra đối tượng có phải là Set object không
126
+ */
127
+ export const isSet = (obj) => {
128
+ return obj instanceof Set;
129
+ };
130
+ /**
131
+ * Kiểm tra đối tượng có phải là Array object không
132
+ */
133
+ export const isArray = (obj) => {
134
+ return Array.isArray(obj);
135
+ };
136
+ /**
137
+ * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không
138
+ * Bao gồm: dangerous objects, special objects, dayjs objects
139
+ */
140
+ export const isReturnAsIsObject = (obj) => {
141
+ return isSkippableObject(obj) || isDayjsObject(obj);
142
+ };
143
+ /**
144
+ * Kiểm tra xem đối tượng có an toàn để clone/convert không
145
+ */
146
+ export const isSafeToProcess = (obj) => {
147
+ return !isDangerousObject(obj);
148
+ };
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFuZ2Vyb3VzLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2Rhbmdlcm91cy1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLDJCQUEyQixHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFVLENBQUM7QUFFek07O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQVEsRUFBb0UsRUFBRTtJQUNsSCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxHQUFHLFlBQVksTUFBTSxJQUFJLEdBQUcsWUFBWSxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxVQUFVLENBQUM7QUFDdEgsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQXVDLEVBQUU7SUFDM0UsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxD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QUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBVSxHQUFRLEVBQXlCLEVBQUU7SUFDaEUsT0FBTyxHQUFHLFlBQVksR0FBRyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQVUsR0FBUSxFQUFpQixFQUFFO0lBQ3hELE9BQU8sR0FBRyxZQUFZLEdBQUcsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFVLEdBQVEsRUFBbUIsRUFBRTtJQUM1RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUN0RCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVEsRUFBVyxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBkYXlqcywgeyBEYXlqcyB9IGZyb20gJ2RheWpzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBEYW5oIHPDoWNoIGPDoWMgY29uc3RydWN0b3IgbmFtZSBuZ3V5IGhp4buDbVxuICovXG5jb25zdCBEQU5HRVJPVVNfQ09OU1RSVUNUT1JfTkFNRVMgPSBbJ1dpbmRvdycsICdEb2N1bWVudCcsICdIVE1MRG9jdW1lbnQnLCAnSFRNTEVsZW1lbnQnLCAnRWxlbWVudCcsICdOb2RlJywgJ0xvY2F0aW9uJywgJ05hdmlnYXRvcicsICdTY3JlZW4nLCAnSGlzdG9yeScsICdTdG9yYWdlJywgJ0NvbnNvbGUnLCAnUGVyZm9ybWFuY2UnXSBhcyBjb25zdDtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgYnJvd3NlciBnbG9iYWwgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNCcm93c2VyR2xvYmFsT2JqZWN0ID0gKG9iajogYW55KTogb2JqIGlzIFdpbmRvdyB8IERvY3VtZW50IHwgV2luZG93IHwgRG9jdW1lbnQgfCB0eXBlb2YgZ2xvYmFsVGhpcyA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFdpbmRvdyB8fCBvYmogaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBvYmogPT09IHdpbmRvdyB8fCBvYmogPT09IGRvY3VtZW50IHx8IG9iaiA9PT0gZ2xvYmFsVGhpcztcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIERPTSBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTU9iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBIVE1MRWxlbWVudCB8IE5vZGUgfCBFbGVtZW50ID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgb2JqIGluc3RhbmNlb2YgTm9kZSB8fCBvYmogaW5zdGFuY2VvZiBFbGVtZW50O1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgYnJvd3NlciBBUEkgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNCcm93c2VyQVBJT2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiA9PT0gd2luZG93LmxvY2F0aW9uIHx8IG9iaiA9PT0gd2luZG93Lm5hdmlnYXRvciB8fCBvYmogPT09IHdpbmRvdy5zY3JlZW4gfHwgb2JqID09PSB3aW5kb3cuaGlzdG9yeSB8fCBvYmogPT09IHdpbmRvdy5sb2NhbFN0b3JhZ2UgfHwgb2JqID09PSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgfHwgb2JqID09PSB3aW5kb3cuY29uc29sZSB8fCBvYmogPT09IHdpbmRvdy5wZXJmb3JtYW5jZTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSBjb25zdHJ1Y3RvciBuYW1lIGPDsyBu4bqxbSB0cm9uZyBkYW5oIHPDoWNoIG5ndXkgaGnhu4NtIGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaGFzRGFuZ2Vyb3VzQ29uc3RydWN0b3JOYW1lID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gb2JqLmNvbnN0cnVjdG9yPy5uYW1lO1xuICByZXR1cm4gY29uc3RydWN0b3JOYW1lICYmIERBTkdFUk9VU19DT05TVFJVQ1RPUl9OQU1FUy5pbmNsdWRlcyhjb25zdHJ1Y3Rvck5hbWUgYXMgYW55KTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIERPTSBvYmplY3QgaG/hurdjIGJyb3dzZXIgb2JqZWN0IG5ndXkgaGnhu4NtIGtow7RuZ1xuICogTmjhu69uZyDEkeG7kWkgdMaw4bujbmcgbsOgeSBjw7MgdGjhu4MgZ8OieSByYSBjaXJjdWxhciByZWZlcmVuY2UgdsOgIG1heGltdW0gY2FsbCBzdGFja1xuICovXG5leHBvcnQgY29uc3QgaXNEYW5nZXJvdXNPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0Jyb3dzZXJHbG9iYWxPYmplY3Qob2JqKSB8fCBpc0RPTU9iamVjdChvYmopIHx8IGlzQnJvd3NlckFQSU9iamVjdChvYmopIHx8IGhhc0Rhbmdlcm91c0NvbnN0cnVjdG9yTmFtZShvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBBbmd1bGFyL0ZyYW1ld29yayBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZyYW1ld29ya09iamVjdCA9IDxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBUZW1wbGF0ZVJlZjxUPiB8IEVsZW1lbnRSZWY8VD4gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBvYmogaW5zdGFuY2VvZiBFbGVtZW50UmVmO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBGaWxlL0Jsb2Igb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWxlID0gKG9iajogYW55KTogb2JqIGlzIEZpbGUgfCBCbG9iID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRmlsZSB8fCBvYmogaW5zdGFuY2VvZiBCbG9iIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBGaWxlXSc7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEJ1aWx0LWluIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVpbHRJbk9iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBEYXRlIHwgUmVnRXhwIHwgSHR0cFBhcmFtcyA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgaXNSZWdFeHAob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBIdHRwUGFyYW1zIHx8ICgnaGFzT3duUHJvcGVydHknIGluIG9iaiAmJiAnX19uZ0NvbnRleHRfXycgaW4gb2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgUmVnRXhwIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVnRXhwID0gKG9iajogYW55KTogb2JqIGlzIFJlZ0V4cCA9PiB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBSZWdFeHA7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEFzeW5jIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXN5bmNPYmplY3QgPSA8VCA9IGFueT4ob2JqOiBhbnkpOiBvYmogaXMgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBQcm9taXNlIHx8IG9iaiBpbnN0YW5jZW9mIE9ic2VydmFibGU7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIFNwZWNpYWwgb2JqZWN0IGPhuqduIGLhu48gcXVhIGtow7RuZ1xuICogQmFvIGfhu5NtOiBGcmFtZXdvcmsgb2JqZWN0cywgRmlsZSBvYmplY3RzLCBCdWlsdC1pbiBvYmplY3RzLCBBc3luYyBvYmplY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NwZWNpYWxPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGlzRnJhbWV3b3JrT2JqZWN0KG9iaikgfHwgaXNGaWxlKG9iaikgfHwgaXNCdWlsdEluT2JqZWN0KG9iaikgfHwgaXNBc3luY09iamVjdChvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBkYXlqcyBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RheWpzT2JqZWN0ID0gKG9iajogYW55KTogb2JqIGlzIERheWpzID0+IHtcbiAgcmV0dXJuIGRheWpzLmlzRGF5anMob2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IGPhuqduIGLhu48gcXVhIHRyb25nIHF1w6EgdHLDrG5oIGNvbnZlcnQga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NraXBwYWJsZU9iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEYW5nZXJvdXNPYmplY3Qob2JqKSB8fCBpc1NwZWNpYWxPYmplY3Qob2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgTWFwIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTWFwID0gPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIE1hcDxzdHJpbmcsIFQ+ID0+IHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE1hcDtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgU2V0IG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2V0ID0gPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIFNldDxUPiA9PiB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBTZXQ7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEFycmF5IG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSA8VCA9IGFueT4ob2JqOiBhbnkpOiBvYmogaXMgQXJyYXk8VD4gPT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBvYmplY3QgY+G6p24gdHLhuqMgduG7gSBuZ3V5w6puIHRy4bqhbmcga2jDtG5nXG4gKiBCYW8gZ+G7k206IGRhbmdlcm91cyBvYmplY3RzLCBzcGVjaWFsIG9iamVjdHMsIGRheWpzIG9iamVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuQXNJc09iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNTa2lwcGFibGVPYmplY3Qob2JqKSB8fCBpc0RheWpzT2JqZWN0KG9iaik7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIMSR4buRaSB0xrDhu6NuZyBjw7MgYW4gdG/DoG4gxJHhu4MgY2xvbmUvY29udmVydCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2FmZVRvUHJvY2VzcyA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gIWlzRGFuZ2Vyb3VzT2JqZWN0KG9iaik7XG59O1xuIl19