@libs-ui/utils 0.2.306-5 → 0.2.306-7
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/date.d.ts +5 -10
- package/esm2022/date.mjs +10 -8
- package/esm2022/helpers.mjs +80 -15
- package/fesm2022/libs-ui-utils.mjs +210 -144
- package/fesm2022/libs-ui-utils.mjs.map +1 -1
- package/helpers.d.ts +47 -2
- package/package.json +2 -2
|
@@ -3,7 +3,7 @@ import Quill from 'quill';
|
|
|
3
3
|
import { fromEvent, tap, takeUntil, mergeMap, startWith, finalize, lastValueFrom, timer, Subject, filter, Observable } from 'rxjs';
|
|
4
4
|
import CryptoES from 'crypto-es';
|
|
5
5
|
import { HttpParams } from '@angular/common/http';
|
|
6
|
-
import { isSignal, TemplateRef, ElementRef,
|
|
6
|
+
import { isSignal, signal, TemplateRef, ElementRef, InjectionToken } from '@angular/core';
|
|
7
7
|
import dayjs from 'dayjs';
|
|
8
8
|
import 'dayjs/locale/en';
|
|
9
9
|
import 'dayjs/locale/vi';
|
|
@@ -1304,15 +1304,17 @@ const updateFunctionFormatDate = (functionCustom) => {
|
|
|
1304
1304
|
* @param config.formatOfDate định dạng thời gian đang được truyền vào
|
|
1305
1305
|
*/
|
|
1306
1306
|
const getDayjs = (config) => {
|
|
1307
|
+
// helper cast để tránh lặp lại kiểu điều kiện ở các return
|
|
1308
|
+
const out = (v) => v;
|
|
1307
1309
|
if (!config) {
|
|
1308
|
-
return dayjs().tz();
|
|
1310
|
+
return out(dayjs().tz());
|
|
1309
1311
|
}
|
|
1310
1312
|
config.date = !config.date && config.returnDayjsIfConfigDateNotExist ? dayjs().tz() : config.date;
|
|
1311
1313
|
if (typeof config.date === 'number') {
|
|
1312
1314
|
config.date = dayjs.unix(config.date);
|
|
1313
1315
|
}
|
|
1314
1316
|
if (!config.date) {
|
|
1315
|
-
return undefined;
|
|
1317
|
+
return out(undefined);
|
|
1316
1318
|
}
|
|
1317
1319
|
let { date, utc, formatOfDate } = config;
|
|
1318
1320
|
while (isSignal(date)) {
|
|
@@ -1326,18 +1328,18 @@ const getDayjs = (config) => {
|
|
|
1326
1328
|
}
|
|
1327
1329
|
if (utc) {
|
|
1328
1330
|
if (formatOfDate) {
|
|
1329
|
-
return dayjs(date, formatOfDate).utc();
|
|
1331
|
+
return out(dayjs(date, formatOfDate).utc());
|
|
1330
1332
|
}
|
|
1331
1333
|
const dateInputIsUTC = (dayjs.isDayjs(date) && date.isUTC()) || (typeof date === 'string' && date.includes('Z'));
|
|
1332
1334
|
if (dateInputIsUTC) {
|
|
1333
|
-
return dayjs(date);
|
|
1335
|
+
return out(dayjs(date));
|
|
1334
1336
|
}
|
|
1335
|
-
return dayjs(date).utc();
|
|
1337
|
+
return out(dayjs(date).utc());
|
|
1336
1338
|
}
|
|
1337
1339
|
if (typeof date === 'string' && !date.includes('Z') && !date.includes('+')) {
|
|
1338
|
-
return (formatOfDate ? dayjs.tz(date, formatOfDate, config.localeZone || timeZoneSetup) : dayjs.tz(date, config.localeZone || timeZoneSetup));
|
|
1340
|
+
return out(formatOfDate ? dayjs.tz(date, formatOfDate, config.localeZone || timeZoneSetup) : dayjs.tz(date, config.localeZone || timeZoneSetup));
|
|
1339
1341
|
}
|
|
1340
|
-
return (formatOfDate ? dayjs(date, formatOfDate) : dayjs(date)).tz();
|
|
1342
|
+
return out((formatOfDate ? dayjs(date, formatOfDate) : dayjs(date)).tz());
|
|
1341
1343
|
};
|
|
1342
1344
|
/**
|
|
1343
1345
|
* @description Kiểm tra xem hai ngày có khác nhau không (khác ngày trong tuần)
|
|
@@ -1539,6 +1541,127 @@ class UtilsHttpParamsRequest extends HttpParams {
|
|
|
1539
1541
|
// "pathVariable-name": '124',
|
|
1540
1542
|
// };
|
|
1541
1543
|
|
|
1544
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1545
|
+
/**
|
|
1546
|
+
* Chuyển đổi một đối tượng hoặc giá trị thành signal
|
|
1547
|
+
* @param data Dữ liệu cần chuyển đổi thành signal
|
|
1548
|
+
* @param cloneDeepIfNotSignal Có thực hiện sao chép sâu dữ liệu trước khi chuyển đổi hay không nếu data không phải signal. Mặc định là true.
|
|
1549
|
+
* Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.
|
|
1550
|
+
* Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.
|
|
1551
|
+
* @param isSignalPrimitiveType Có chuyển đổi các giá trị nguyên thủy (string, number, boolean) thành signal hay không. Mặc định là false.
|
|
1552
|
+
* Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.
|
|
1553
|
+
* @param acceptConvertObjectInnerWritableSignal Có tiếp tục tìm kiếm và chuyển đổi các đối tượng bên trong signal hay không. Mặc định là false.
|
|
1554
|
+
* Đặt true nếu muốn tìm và chuyển đổi các đối tượng bên trong signal hoặc chính nó thành signal mới.
|
|
1555
|
+
* @returns Dữ liệu đã được chuyển đổi theo kiểu T
|
|
1556
|
+
*/
|
|
1557
|
+
const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSignalPrimitiveType = false, acceptConvertObjectInnerWritableSignal = false, seen = new WeakMap()) => {
|
|
1558
|
+
if ((data === null || typeof data !== 'object') && !isSignal(data)) {
|
|
1559
|
+
return (isSignalPrimitiveType ? signal(data) : data);
|
|
1560
|
+
}
|
|
1561
|
+
if (seen.has(data)) {
|
|
1562
|
+
return seen.get(data);
|
|
1563
|
+
}
|
|
1564
|
+
if (isSignal(data)) {
|
|
1565
|
+
if (!acceptConvertObjectInnerWritableSignal) {
|
|
1566
|
+
return data;
|
|
1567
|
+
}
|
|
1568
|
+
seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));
|
|
1569
|
+
return seen.get(data);
|
|
1570
|
+
}
|
|
1571
|
+
if (Array.isArray(data)) {
|
|
1572
|
+
seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))));
|
|
1573
|
+
return seen.get(data);
|
|
1574
|
+
}
|
|
1575
|
+
if (data instanceof Map) {
|
|
1576
|
+
const mapCopy = new Map();
|
|
1577
|
+
Array.from(data.keys()).forEach((key) => {
|
|
1578
|
+
mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));
|
|
1579
|
+
});
|
|
1580
|
+
seen.set(data, signal(mapCopy));
|
|
1581
|
+
return seen.get(data);
|
|
1582
|
+
}
|
|
1583
|
+
if (data instanceof Promise || data instanceof Observable) {
|
|
1584
|
+
return data;
|
|
1585
|
+
}
|
|
1586
|
+
data = signal(cloneDeepIfNotSignal ? { ...data } : data);
|
|
1587
|
+
seen.set(data, data);
|
|
1588
|
+
for (const key in data()) {
|
|
1589
|
+
const value = data()[key];
|
|
1590
|
+
if (value instanceof TemplateRef ||
|
|
1591
|
+
value instanceof File ||
|
|
1592
|
+
value instanceof Blob ||
|
|
1593
|
+
Object.prototype.toString.call(value) === '[object File]' ||
|
|
1594
|
+
value instanceof ElementRef ||
|
|
1595
|
+
value instanceof Element ||
|
|
1596
|
+
value instanceof Date ||
|
|
1597
|
+
value instanceof RegExp ||
|
|
1598
|
+
value instanceof Set ||
|
|
1599
|
+
value instanceof Map ||
|
|
1600
|
+
value instanceof Promise ||
|
|
1601
|
+
value instanceof Observable ||
|
|
1602
|
+
value instanceof HttpParams) {
|
|
1603
|
+
continue;
|
|
1604
|
+
}
|
|
1605
|
+
if (Object.prototype.hasOwnProperty.call(data(), key)) {
|
|
1606
|
+
data()[key] = convertObjectToSignal(value, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal);
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
return data;
|
|
1610
|
+
};
|
|
1611
|
+
const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap()) => {
|
|
1612
|
+
let ignoreCheckSeenHasDataAfterWhile = false;
|
|
1613
|
+
while (isSignal(data) && !seen.has(data)) {
|
|
1614
|
+
const dataConvert = data();
|
|
1615
|
+
if (typeof dataConvert === 'object') {
|
|
1616
|
+
if (dataConvert === null) {
|
|
1617
|
+
return dataConvert;
|
|
1618
|
+
}
|
|
1619
|
+
seen.set(dataConvert, dataConvert);
|
|
1620
|
+
data = dataConvert;
|
|
1621
|
+
ignoreCheckSeenHasDataAfterWhile = true;
|
|
1622
|
+
break;
|
|
1623
|
+
}
|
|
1624
|
+
seen.set(data, dataConvert);
|
|
1625
|
+
data = dataConvert;
|
|
1626
|
+
}
|
|
1627
|
+
if (data === null || typeof data === 'function' || typeof data !== 'object') {
|
|
1628
|
+
return data;
|
|
1629
|
+
}
|
|
1630
|
+
if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {
|
|
1631
|
+
return seen.get(data);
|
|
1632
|
+
}
|
|
1633
|
+
if (Array.isArray(data)) {
|
|
1634
|
+
if (!isSignal(data[0])) {
|
|
1635
|
+
return data;
|
|
1636
|
+
}
|
|
1637
|
+
seen.set(data, data.map((item) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen)));
|
|
1638
|
+
return seen.get(data);
|
|
1639
|
+
}
|
|
1640
|
+
if (data instanceof Map) {
|
|
1641
|
+
const mapCopy = new Map();
|
|
1642
|
+
Array.from(data.keys()).forEach((key) => {
|
|
1643
|
+
mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep));
|
|
1644
|
+
});
|
|
1645
|
+
seen.set(data, mapCopy);
|
|
1646
|
+
return seen.get(data);
|
|
1647
|
+
}
|
|
1648
|
+
if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {
|
|
1649
|
+
return data;
|
|
1650
|
+
}
|
|
1651
|
+
if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable || data instanceof HttpParams) {
|
|
1652
|
+
return data;
|
|
1653
|
+
}
|
|
1654
|
+
const result = isCloneDeep ? {} : data;
|
|
1655
|
+
seen.set(data, result);
|
|
1656
|
+
for (const key in data) {
|
|
1657
|
+
const value = data[key];
|
|
1658
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
1659
|
+
result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep);
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
return result;
|
|
1663
|
+
};
|
|
1664
|
+
|
|
1542
1665
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1543
1666
|
/**Các hàm tương tự thư viện lodash */
|
|
1544
1667
|
/**
|
|
@@ -1551,7 +1674,10 @@ class UtilsHttpParamsRequest extends HttpParams {
|
|
|
1551
1674
|
* isNil(0); // false
|
|
1552
1675
|
* isNil('hello'); // false
|
|
1553
1676
|
*/
|
|
1554
|
-
const isNil = (value) => {
|
|
1677
|
+
const isNil = (value, options) => {
|
|
1678
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
1679
|
+
value = convertSignalToObject(value);
|
|
1680
|
+
}
|
|
1555
1681
|
return value === null || value === undefined;
|
|
1556
1682
|
};
|
|
1557
1683
|
/**
|
|
@@ -1567,11 +1693,74 @@ const isNil = (value) => {
|
|
|
1567
1693
|
* isEmpty([1, 2, 3]); // false
|
|
1568
1694
|
* isEmpty({ a: 1 }); // false
|
|
1569
1695
|
*/
|
|
1570
|
-
const isEmpty = (value) => {
|
|
1571
|
-
|
|
1572
|
-
value = value
|
|
1696
|
+
const isEmpty = (value, options) => {
|
|
1697
|
+
if (options?.ignoreUnWrapSignal) {
|
|
1698
|
+
value = convertSignalToObject(value);
|
|
1699
|
+
}
|
|
1700
|
+
if (options?.ignoreCheckFalsy) {
|
|
1701
|
+
return isEmptyTypeObject(value);
|
|
1702
|
+
}
|
|
1703
|
+
if (options?.ignoreCheckTypeObj) {
|
|
1704
|
+
return isFalsy(value, { ignoreZero: true });
|
|
1705
|
+
}
|
|
1706
|
+
return isFalsy(value, { ignoreZero: true }) || isEmptyTypeObject(value);
|
|
1707
|
+
};
|
|
1708
|
+
/**
|
|
1709
|
+
* Kiểm tra xem một giá trị có phải là object rỗng hay không
|
|
1710
|
+
* @param value Giá trị cần kiểm tra
|
|
1711
|
+
* @returns true nếu giá trị là object rỗng, false nếu không
|
|
1712
|
+
* @example
|
|
1713
|
+
* isEmptyTypeObject({}); // true
|
|
1714
|
+
* isEmptyTypeObject({ a: 1 }); // false
|
|
1715
|
+
*/
|
|
1716
|
+
const isEmptyTypeObject = (value) => {
|
|
1717
|
+
return typeof value === 'object' && (JSON.stringify(value) === '{}' || JSON.stringify(value) === '[]');
|
|
1718
|
+
};
|
|
1719
|
+
/**
|
|
1720
|
+
* Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không
|
|
1721
|
+
* @param value Giá trị cần kiểm tra
|
|
1722
|
+
* @param options Cấu hình tùy chọn
|
|
1723
|
+
* @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0
|
|
1724
|
+
* @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không
|
|
1725
|
+
* @example
|
|
1726
|
+
* isTruthy(null); // false
|
|
1727
|
+
* isTruthy(''); // false
|
|
1728
|
+
* isTruthy(undefined); // false
|
|
1729
|
+
* isTruthy(0); // false
|
|
1730
|
+
* isTruthy({}); // false
|
|
1731
|
+
* isTruthy(0, { ignoreZero: true }); // true
|
|
1732
|
+
*/
|
|
1733
|
+
const isTruthy = (value, options) => {
|
|
1734
|
+
return !isFalsy(value, options);
|
|
1735
|
+
};
|
|
1736
|
+
/**
|
|
1737
|
+
* Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không
|
|
1738
|
+
* @param value Giá trị cần kiểm tra
|
|
1739
|
+
* @param options Cấu hình tùy chọn
|
|
1740
|
+
* @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0
|
|
1741
|
+
* @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không
|
|
1742
|
+
* @example
|
|
1743
|
+
* isFalsy(null); // true
|
|
1744
|
+
* isFalsy(''); // true
|
|
1745
|
+
* isFalsy(undefined); // true
|
|
1746
|
+
* isFalsy(0); // true
|
|
1747
|
+
* isFalsy({}); // false
|
|
1748
|
+
* isFalsy(0, { ignoreZero: true }); // false
|
|
1749
|
+
*/
|
|
1750
|
+
const isFalsy = (value, options) => {
|
|
1751
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
1752
|
+
value = convertSignalToObject(value);
|
|
1753
|
+
}
|
|
1754
|
+
if (isNil(value)) {
|
|
1755
|
+
return true;
|
|
1756
|
+
}
|
|
1757
|
+
if (options?.ignoreZero) {
|
|
1758
|
+
return value === '';
|
|
1573
1759
|
}
|
|
1574
|
-
|
|
1760
|
+
if (options?.ignoreCheckString) {
|
|
1761
|
+
return value === 0;
|
|
1762
|
+
}
|
|
1763
|
+
return value === '' || value === 0;
|
|
1575
1764
|
};
|
|
1576
1765
|
/**
|
|
1577
1766
|
* Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện
|
|
@@ -1916,7 +2105,7 @@ const keyBy = (data, key) => {
|
|
|
1916
2105
|
* // }
|
|
1917
2106
|
*/
|
|
1918
2107
|
const groupBy = (data, key) => {
|
|
1919
|
-
if (!data || !data.length || !Object.keys(get(data, '0')).length || !key) {
|
|
2108
|
+
if (!data || !data.length || !Object.keys(get(data, '[0]')).length || !key) {
|
|
1920
2109
|
return {};
|
|
1921
2110
|
}
|
|
1922
2111
|
return data.reduce((dir, nextItem) => {
|
|
@@ -1985,6 +2174,11 @@ const range = (start, end, step) => {
|
|
|
1985
2174
|
* isEqual({a:1}, {a:1}); // true
|
|
1986
2175
|
*/
|
|
1987
2176
|
const isEqual = (value1, value2, options) => {
|
|
2177
|
+
// Handle signals
|
|
2178
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
2179
|
+
value1 = convertSignalToObject(value1);
|
|
2180
|
+
value2 = convertSignalToObject(value2);
|
|
2181
|
+
}
|
|
1988
2182
|
const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};
|
|
1989
2183
|
if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {
|
|
1990
2184
|
return true;
|
|
@@ -1992,13 +2186,6 @@ const isEqual = (value1, value2, options) => {
|
|
|
1992
2186
|
if (ignoreExactlyDataType) {
|
|
1993
2187
|
return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);
|
|
1994
2188
|
}
|
|
1995
|
-
// Handle signals
|
|
1996
|
-
while (isSignal(value1)) {
|
|
1997
|
-
value1 = value1();
|
|
1998
|
-
}
|
|
1999
|
-
while (isSignal(value2)) {
|
|
2000
|
-
value2 = value2();
|
|
2001
|
-
}
|
|
2002
2189
|
if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {
|
|
2003
2190
|
return false;
|
|
2004
2191
|
}
|
|
@@ -2036,7 +2223,7 @@ const isEqual = (value1, value2, options) => {
|
|
|
2036
2223
|
* uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]
|
|
2037
2224
|
*/
|
|
2038
2225
|
const uniqBy = (data, key) => {
|
|
2039
|
-
if (!key || !data?.length || typeof get(data, '0') !== 'object') {
|
|
2226
|
+
if (!key || !data?.length || typeof get(data, '[0]') !== 'object') {
|
|
2040
2227
|
// Xử lý mảng chứa signal values
|
|
2041
2228
|
if (data[0] && isSignal(data[0])) {
|
|
2042
2229
|
const seen = new Set();
|
|
@@ -2458,127 +2645,6 @@ const xssFilter = async (data) => {
|
|
|
2458
2645
|
return await functionXssFilter(data);
|
|
2459
2646
|
};
|
|
2460
2647
|
|
|
2461
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2462
|
-
/**
|
|
2463
|
-
* Chuyển đổi một đối tượng hoặc giá trị thành signal
|
|
2464
|
-
* @param data Dữ liệu cần chuyển đổi thành signal
|
|
2465
|
-
* @param cloneDeepIfNotSignal Có thực hiện sao chép sâu dữ liệu trước khi chuyển đổi hay không nếu data không phải signal. Mặc định là true.
|
|
2466
|
-
* Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.
|
|
2467
|
-
* Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.
|
|
2468
|
-
* @param isSignalPrimitiveType Có chuyển đổi các giá trị nguyên thủy (string, number, boolean) thành signal hay không. Mặc định là false.
|
|
2469
|
-
* Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.
|
|
2470
|
-
* @param acceptConvertObjectInnerWritableSignal Có tiếp tục tìm kiếm và chuyển đổi các đối tượng bên trong signal hay không. Mặc định là false.
|
|
2471
|
-
* Đặt true nếu muốn tìm và chuyển đổi các đối tượng bên trong signal hoặc chính nó thành signal mới.
|
|
2472
|
-
* @returns Dữ liệu đã được chuyển đổi theo kiểu T
|
|
2473
|
-
*/
|
|
2474
|
-
const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSignalPrimitiveType = false, acceptConvertObjectInnerWritableSignal = false, seen = new WeakMap()) => {
|
|
2475
|
-
if ((data === null || typeof data !== 'object') && !isSignal(data)) {
|
|
2476
|
-
return (isSignalPrimitiveType ? signal(data) : data);
|
|
2477
|
-
}
|
|
2478
|
-
if (seen.has(data)) {
|
|
2479
|
-
return seen.get(data);
|
|
2480
|
-
}
|
|
2481
|
-
if (isSignal(data)) {
|
|
2482
|
-
if (!acceptConvertObjectInnerWritableSignal) {
|
|
2483
|
-
return data;
|
|
2484
|
-
}
|
|
2485
|
-
seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));
|
|
2486
|
-
return seen.get(data);
|
|
2487
|
-
}
|
|
2488
|
-
if (Array.isArray(data)) {
|
|
2489
|
-
seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))));
|
|
2490
|
-
return seen.get(data);
|
|
2491
|
-
}
|
|
2492
|
-
if (data instanceof Map) {
|
|
2493
|
-
const mapCopy = new Map();
|
|
2494
|
-
Array.from(data.keys()).forEach((key) => {
|
|
2495
|
-
mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));
|
|
2496
|
-
});
|
|
2497
|
-
seen.set(data, signal(mapCopy));
|
|
2498
|
-
return seen.get(data);
|
|
2499
|
-
}
|
|
2500
|
-
if (data instanceof Promise || data instanceof Observable) {
|
|
2501
|
-
return data;
|
|
2502
|
-
}
|
|
2503
|
-
data = signal(cloneDeepIfNotSignal ? { ...data } : data);
|
|
2504
|
-
seen.set(data, data);
|
|
2505
|
-
for (const key in data()) {
|
|
2506
|
-
const value = data()[key];
|
|
2507
|
-
if (value instanceof TemplateRef ||
|
|
2508
|
-
value instanceof File ||
|
|
2509
|
-
value instanceof Blob ||
|
|
2510
|
-
Object.prototype.toString.call(value) === '[object File]' ||
|
|
2511
|
-
value instanceof ElementRef ||
|
|
2512
|
-
value instanceof Element ||
|
|
2513
|
-
value instanceof Date ||
|
|
2514
|
-
value instanceof RegExp ||
|
|
2515
|
-
value instanceof Set ||
|
|
2516
|
-
value instanceof Map ||
|
|
2517
|
-
value instanceof Promise ||
|
|
2518
|
-
value instanceof Observable ||
|
|
2519
|
-
value instanceof HttpParams) {
|
|
2520
|
-
continue;
|
|
2521
|
-
}
|
|
2522
|
-
if (Object.prototype.hasOwnProperty.call(data(), key)) {
|
|
2523
|
-
data()[key] = convertObjectToSignal(value, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal);
|
|
2524
|
-
}
|
|
2525
|
-
}
|
|
2526
|
-
return data;
|
|
2527
|
-
};
|
|
2528
|
-
const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap()) => {
|
|
2529
|
-
let ignoreCheckSeenHasDataAfterWhile = false;
|
|
2530
|
-
while (isSignal(data) && !seen.has(data)) {
|
|
2531
|
-
const dataConvert = data();
|
|
2532
|
-
if (typeof dataConvert === 'object') {
|
|
2533
|
-
if (dataConvert === null) {
|
|
2534
|
-
return dataConvert;
|
|
2535
|
-
}
|
|
2536
|
-
seen.set(dataConvert, dataConvert);
|
|
2537
|
-
data = dataConvert;
|
|
2538
|
-
ignoreCheckSeenHasDataAfterWhile = true;
|
|
2539
|
-
break;
|
|
2540
|
-
}
|
|
2541
|
-
seen.set(data, dataConvert);
|
|
2542
|
-
data = dataConvert;
|
|
2543
|
-
}
|
|
2544
|
-
if (data === null || typeof data === 'function' || typeof data !== 'object') {
|
|
2545
|
-
return data;
|
|
2546
|
-
}
|
|
2547
|
-
if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {
|
|
2548
|
-
return seen.get(data);
|
|
2549
|
-
}
|
|
2550
|
-
if (Array.isArray(data)) {
|
|
2551
|
-
if (!isSignal(data[0])) {
|
|
2552
|
-
return data;
|
|
2553
|
-
}
|
|
2554
|
-
seen.set(data, data.map((item) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen)));
|
|
2555
|
-
return seen.get(data);
|
|
2556
|
-
}
|
|
2557
|
-
if (data instanceof Map) {
|
|
2558
|
-
const mapCopy = new Map();
|
|
2559
|
-
Array.from(data.keys()).forEach((key) => {
|
|
2560
|
-
mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep));
|
|
2561
|
-
});
|
|
2562
|
-
seen.set(data, mapCopy);
|
|
2563
|
-
return seen.get(data);
|
|
2564
|
-
}
|
|
2565
|
-
if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {
|
|
2566
|
-
return data;
|
|
2567
|
-
}
|
|
2568
|
-
if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable || data instanceof HttpParams) {
|
|
2569
|
-
return data;
|
|
2570
|
-
}
|
|
2571
|
-
const result = isCloneDeep ? {} : data;
|
|
2572
|
-
seen.set(data, result);
|
|
2573
|
-
for (const key in data) {
|
|
2574
|
-
const value = data[key];
|
|
2575
|
-
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
2576
|
-
result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep);
|
|
2577
|
-
}
|
|
2578
|
-
}
|
|
2579
|
-
return result;
|
|
2580
|
-
};
|
|
2581
|
-
|
|
2582
2648
|
const ENCODE_URI_PATTERN = /%([0-9A-F]{2})/g;
|
|
2583
2649
|
const decodeURI = (value) => {
|
|
2584
2650
|
return decodeURIComponent(value
|
|
@@ -2990,5 +3056,5 @@ const createUniqueRandomIntGenerator = (min, max) => {
|
|
|
2990
3056
|
* Generated bundle index. Do not edit.
|
|
2991
3057
|
*/
|
|
2992
3058
|
|
|
2993
|
-
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, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertHtmlToDivBlocks, convertObjectToSignal, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeltaFromHTML, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getHTMLFromQuill, getKeyCacheByArrayObject, getLabelBySizeFile, getPlatFromBrowser, getSmartAxisScale, getViewport, groupBy, highlightByKeyword, insertContentWithRange, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isNil, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternPhoneNormal, patternRuleFieldReplace, patternTax, patternUrl, processPasteData, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setStylesElement, uniqBy, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
|
|
3059
|
+
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, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertHtmlToDivBlocks, convertObjectToSignal, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeltaFromHTML, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getHTMLFromQuill, getKeyCacheByArrayObject, getLabelBySizeFile, getPlatFromBrowser, getSmartAxisScale, getViewport, groupBy, highlightByKeyword, insertContentWithRange, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isNil, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternPhoneNormal, patternRuleFieldReplace, patternTax, patternUrl, processPasteData, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setStylesElement, uniqBy, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
|
|
2994
3060
|
//# sourceMappingURL=libs-ui-utils.mjs.map
|