@libs-ui/utils 0.2.351-0 → 0.2.352-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm2022/index.mjs CHANGED
@@ -29,4 +29,6 @@ export * from './random';
29
29
  export * from './dangerous-object';
30
30
  export * from './collection';
31
31
  export * from './data';
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RvbSc7XG5leHBvcnQgKiBmcm9tICcuL3VybC1zZWFyY2gtcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vdXVpZCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvcic7XG5leHBvcnQgKiBmcm9tICcuL2NyeXB0byc7XG5leHBvcnQgKiBmcm9tICcuL2NyeXB0by0zcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktY29kZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC1udW1iZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tdW5pY2F0ZS1taWNybyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9uLWNoZWNrLWVtYmVkLWZyYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcGF0dGVybic7XG5leHBvcnQgKiBmcm9tICcuL3hzcy1maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi90d28td2F5LXNpZ25hbC1vYmplY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZG93bmxvYWQnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlNjQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmplY3QtdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXJpJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0LXRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtc21hcnQtYXhpcy1zY2FsZSc7XG5leHBvcnQgKiBmcm9tICcuL3JhbmRvbSc7XG5leHBvcnQgKiBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YSc7XG4iXX0=
32
+ export * from './url';
33
+ export * from './trace';
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RvbSc7XG5leHBvcnQgKiBmcm9tICcuL3VybC1zZWFyY2gtcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vdXVpZCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvcic7XG5leHBvcnQgKiBmcm9tICcuL2NyeXB0byc7XG5leHBvcnQgKiBmcm9tICcuL2NyeXB0by0zcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktY29kZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC1udW1iZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tdW5pY2F0ZS1taWNybyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9uLWNoZWNrLWVtYmVkLWZyYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcGF0dGVybic7XG5leHBvcnQgKiBmcm9tICcuL3hzcy1maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi90d28td2F5LXNpZ25hbC1vYmplY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZG93bmxvYWQnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlNjQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmplY3QtdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXJpJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0LXRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtc21hcnQtYXhpcy1zY2FsZSc7XG5leHBvcnQgKiBmcm9tICcuL3JhbmRvbSc7XG5leHBvcnQgKiBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3VybCc7XG5leHBvcnQgKiBmcm9tICcuL3RyYWNlJztcbiJdfQ==
@@ -0,0 +1,50 @@
1
+ const ignorePatterns = [
2
+ // RxJS / async internals
3
+ /^at\s+Object\.(next|error|complete|subscribe|unsubscribe)\b/,
4
+ /^at\s+Subscriber\./,
5
+ /^at\s+SafeSubscriber\./,
6
+ // TS helpers
7
+ /^at\s+__\w+/,
8
+ // Zone.js / Angular
9
+ /ZoneAwarePromise/,
10
+ /^at\s+new\s+ZoneAwarePromise/,
11
+ /^at\s+Zone/,
12
+ /zone\.js/,
13
+ /core\.mjs/,
14
+ /platform-browser/,
15
+ // Browser / DOM
16
+ /^at\s+HTML/,
17
+ /^at\s+Promise/,
18
+ /<anonymous>/,
19
+ // Bundler
20
+ /webpack/,
21
+ /vite/,
22
+ /node_modules/,
23
+ ];
24
+ export const traceStack = () => {
25
+ const stack = new Error().stack;
26
+ if (!stack)
27
+ return [];
28
+ return (stack
29
+ .split('\n')
30
+ .slice(2) // bỏ Error + current function
31
+ .map((line) => line.trim())
32
+ .filter((line) => !ignorePatterns.some((pattern) => pattern.test(line)))
33
+ .map((line) => {
34
+ // Chrome / Edge
35
+ // at functionName (file:line:col)
36
+ let match = line.match(/at\s+(.*?)\s+\(/);
37
+ if (match?.[1])
38
+ return match[1];
39
+ // Safari
40
+ // functionName@file:line:col
41
+ match = line.match(/^(.*?)@/);
42
+ if (match?.[1])
43
+ return match[1];
44
+ return 'anonymous';
45
+ })
46
+ // loại duplicate & anonymous rác
47
+ .filter((fn, idx, arr) => fn !== 'anonymous' && arr.indexOf(fn) === idx)
48
+ .reverse());
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy90cmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGNBQWMsR0FBRztJQUNyQix5QkFBeUI7SUFDekIsNkRBQTZEO0lBQzdELG9CQUFvQjtJQUNwQix3QkFBd0I7SUFFeEIsYUFBYTtJQUNiLGFBQWE7SUFFYixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLDhCQUE4QjtJQUM5QixZQUFZO0lBQ1osVUFBVTtJQUNWLFdBQVc7SUFDWCxrQkFBa0I7SUFFbEIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixlQUFlO0lBQ2YsYUFBYTtJQUViLFVBQVU7SUFDVixTQUFTO0lBQ1QsTUFBTTtJQUNOLGNBQWM7Q0FDTixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQWEsRUFBRTtJQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNoQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXRCLE9BQU8sQ0FDTCxLQUFLO1NBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7U0FDdkMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN2RSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLGdCQUFnQjtRQUNoQixrQ0FBa0M7UUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEMsU0FBUztRQUNULDZCQUE2QjtRQUM3QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztRQUNGLGlDQUFpQztTQUNoQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFdBQVcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQztTQUN2RSxPQUFPLEVBQUUsQ0FDYixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaWdub3JlUGF0dGVybnMgPSBbXG4gIC8vIFJ4SlMgLyBhc3luYyBpbnRlcm5hbHNcbiAgL15hdFxccytPYmplY3RcXC4obmV4dHxlcnJvcnxjb21wbGV0ZXxzdWJzY3JpYmV8dW5zdWJzY3JpYmUpXFxiLyxcbiAgL15hdFxccytTdWJzY3JpYmVyXFwuLyxcbiAgL15hdFxccytTYWZlU3Vic2NyaWJlclxcLi8sXG5cbiAgLy8gVFMgaGVscGVyc1xuICAvXmF0XFxzK19fXFx3Ky8sXG5cbiAgLy8gWm9uZS5qcyAvIEFuZ3VsYXJcbiAgL1pvbmVBd2FyZVByb21pc2UvLFxuICAvXmF0XFxzK25ld1xccytab25lQXdhcmVQcm9taXNlLyxcbiAgL15hdFxccytab25lLyxcbiAgL3pvbmVcXC5qcy8sXG4gIC9jb3JlXFwubWpzLyxcbiAgL3BsYXRmb3JtLWJyb3dzZXIvLFxuXG4gIC8vIEJyb3dzZXIgLyBET01cbiAgL15hdFxccytIVE1MLyxcbiAgL15hdFxccytQcm9taXNlLyxcbiAgLzxhbm9ueW1vdXM+LyxcblxuICAvLyBCdW5kbGVyXG4gIC93ZWJwYWNrLyxcbiAgL3ZpdGUvLFxuICAvbm9kZV9tb2R1bGVzLyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCB0cmFjZVN0YWNrID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgaWYgKCFzdGFjaykgcmV0dXJuIFtdO1xuXG4gIHJldHVybiAoXG4gICAgc3RhY2tcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5zbGljZSgyKSAvLyBi4buPIEVycm9yICsgY3VycmVudCBmdW5jdGlvblxuICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiAhaWdub3JlUGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KGxpbmUpKSlcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgLy8gQ2hyb21lIC8gRWRnZVxuICAgICAgICAvLyBhdCBmdW5jdGlvbk5hbWUgKGZpbGU6bGluZTpjb2wpXG4gICAgICAgIGxldCBtYXRjaCA9IGxpbmUubWF0Y2goL2F0XFxzKyguKj8pXFxzK1xcKC8pO1xuICAgICAgICBpZiAobWF0Y2g/LlsxXSkgcmV0dXJuIG1hdGNoWzFdO1xuXG4gICAgICAgIC8vIFNhZmFyaVxuICAgICAgICAvLyBmdW5jdGlvbk5hbWVAZmlsZTpsaW5lOmNvbFxuICAgICAgICBtYXRjaCA9IGxpbmUubWF0Y2goL14oLio/KUAvKTtcbiAgICAgICAgaWYgKG1hdGNoPy5bMV0pIHJldHVybiBtYXRjaFsxXTtcblxuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgICB9KVxuICAgICAgLy8gbG/huqFpIGR1cGxpY2F0ZSAmIGFub255bW91cyByw6FjXG4gICAgICAuZmlsdGVyKChmbiwgaWR4LCBhcnIpID0+IGZuICE9PSAnYW5vbnltb3VzJyAmJiBhcnIuaW5kZXhPZihmbikgPT09IGlkeClcbiAgICAgIC5yZXZlcnNlKClcbiAgKTtcbn07XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export const normalizeUrl = (rawUrl) => {
2
+ const url = new URL(rawUrl);
3
+ url.pathname = url.pathname.replace(/\/{2,}/g, '/');
4
+ return url.toString();
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWMsRUFBVSxFQUFFO0lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBub3JtYWxpemVVcmwgPSAocmF3VXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJhd1VybCk7XG4gIHVybC5wYXRobmFtZSA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cXC97Mix9L2csICcvJyk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn07XG4iXX0=
@@ -3223,9 +3223,65 @@ const getObjectSize = (obj) => {
3223
3223
  }
3224
3224
  };
3225
3225
 
3226
+ const normalizeUrl = (rawUrl) => {
3227
+ const url = new URL(rawUrl);
3228
+ url.pathname = url.pathname.replace(/\/{2,}/g, '/');
3229
+ return url.toString();
3230
+ };
3231
+
3232
+ const ignorePatterns = [
3233
+ // RxJS / async internals
3234
+ /^at\s+Object\.(next|error|complete|subscribe|unsubscribe)\b/,
3235
+ /^at\s+Subscriber\./,
3236
+ /^at\s+SafeSubscriber\./,
3237
+ // TS helpers
3238
+ /^at\s+__\w+/,
3239
+ // Zone.js / Angular
3240
+ /ZoneAwarePromise/,
3241
+ /^at\s+new\s+ZoneAwarePromise/,
3242
+ /^at\s+Zone/,
3243
+ /zone\.js/,
3244
+ /core\.mjs/,
3245
+ /platform-browser/,
3246
+ // Browser / DOM
3247
+ /^at\s+HTML/,
3248
+ /^at\s+Promise/,
3249
+ /<anonymous>/,
3250
+ // Bundler
3251
+ /webpack/,
3252
+ /vite/,
3253
+ /node_modules/,
3254
+ ];
3255
+ const traceStack = () => {
3256
+ const stack = new Error().stack;
3257
+ if (!stack)
3258
+ return [];
3259
+ return (stack
3260
+ .split('\n')
3261
+ .slice(2) // bỏ Error + current function
3262
+ .map((line) => line.trim())
3263
+ .filter((line) => !ignorePatterns.some((pattern) => pattern.test(line)))
3264
+ .map((line) => {
3265
+ // Chrome / Edge
3266
+ // at functionName (file:line:col)
3267
+ let match = line.match(/at\s+(.*?)\s+\(/);
3268
+ if (match?.[1])
3269
+ return match[1];
3270
+ // Safari
3271
+ // functionName@file:line:col
3272
+ match = line.match(/^(.*?)@/);
3273
+ if (match?.[1])
3274
+ return match[1];
3275
+ return 'anonymous';
3276
+ })
3277
+ // loại duplicate & anonymous rác
3278
+ .filter((fn, idx, arr) => fn !== 'anonymous' && arr.indexOf(fn) === idx)
3279
+ .reverse());
3280
+ };
3281
+
3226
3282
  /**
3227
3283
  * Generated bundle index. Do not edit.
3228
3284
  */
3229
3285
 
3230
- export { AudioExtList, CHARACTER_DATA_EMPTY, COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE, DEFAULT_START_PAGE_0, DocumentExtList, ENCODE_URI_PATTERN, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, ExcelExtList, ImageExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT, PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT, UtilsCache, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, UtilsKeyCodeConstant, UtilsLanguageConstants, UtilsUrlSearchParams, VideoExtList, addArrayToSet, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertObjectToSignal, convertSetToArray, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, detectAndCleanNearWhiteColors, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getKeyCacheByArrayObject, getLabelBySizeFile, getObjectSize, getSmartAxisScale, getViewport, groupBy, hasDangerousConstructorName, highlightByKeyword, isArray, isAsyncObject, isBrowserAPIObject, isBrowserGlobalObject, isBuiltInObject, isDOMObject, isDangerousObject, isDayjsObject, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isFile, isFrameworkObject, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isMap, isNearWhite, isNil, isRegExp, isReturnAsIsObject, isSafeToProcess, isSet, isSkippableObject, isSpecialObject, isTouchDevice, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patterProtocolUrl, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternRuleFieldReplace, patternTax, patternUrl, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setPatternCheckTimeUTC, setStylesElement, uniqBy, unwrapSignal, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
3286
+ export { AudioExtList, CHARACTER_DATA_EMPTY, COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE, DEFAULT_START_PAGE_0, DocumentExtList, ENCODE_URI_PATTERN, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, ExcelExtList, ImageExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT, PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT, UtilsCache, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, UtilsKeyCodeConstant, UtilsLanguageConstants, UtilsUrlSearchParams, VideoExtList, addArrayToSet, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertObjectToSignal, convertSetToArray, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, detectAndCleanNearWhiteColors, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getKeyCacheByArrayObject, getLabelBySizeFile, getObjectSize, getSmartAxisScale, getViewport, groupBy, hasDangerousConstructorName, highlightByKeyword, isArray, isAsyncObject, isBrowserAPIObject, isBrowserGlobalObject, isBuiltInObject, isDOMObject, isDangerousObject, isDayjsObject, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isFile, isFrameworkObject, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isMap, isNearWhite, isNil, isRegExp, isReturnAsIsObject, isSafeToProcess, isSet, isSkippableObject, isSpecialObject, isTouchDevice, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, normalizeUrl, omitBy, patterProtocolUrl, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternRuleFieldReplace, patternTax, patternUrl, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setPatternCheckTimeUTC, setStylesElement, traceStack, uniqBy, unwrapSignal, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
3231
3287
  //# sourceMappingURL=libs-ui-utils.mjs.map