tools-min-ns 1.18.19 → 1.18.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/esm/base/BaseUtil.d.ts +15 -0
- package/esm/base/BaseUtil.js +45 -0
- package/esm/check/CheckUtil.js +2 -2
- package/esm/object/ObjectUtil.js +29 -21
- package/esm/pwd/PasswordUtil.d.ts +5 -5
- package/esm/pwd/PasswordUtil.js +4 -4
- package/esm/storage/StorageUtil.d.ts +1 -1
- package/esm/transfer/TransferUtil.d.ts +15 -0
- package/esm/transfer/TransferUtil.js +77 -0
- package/lib/base/BaseUtil.d.ts +15 -0
- package/lib/base/BaseUtil.js +45 -0
- package/lib/check/CheckUtil.js +2 -2
- package/lib/object/ObjectUtil.js +29 -21
- package/lib/pwd/PasswordUtil.d.ts +5 -5
- package/lib/pwd/PasswordUtil.js +4 -4
- package/lib/storage/StorageUtil.d.ts +1 -1
- package/lib/transfer/TransferUtil.d.ts +15 -0
- package/lib/transfer/TransferUtil.js +77 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,6 +5,17 @@ pnpm i tools-min-ns --save
|
|
|
5
5
|
```
|
|
6
6
|
|
|
7
7
|
# updates
|
|
8
|
+
## v1.18.21
|
|
9
|
+
add: BaseUtil.compareVersions
|
|
10
|
+
add: BaseUtil.isVersionGreater
|
|
11
|
+
add: BaseUtil.isVersionEqual
|
|
12
|
+
add: TransferUtil.blendHexWithAlpha
|
|
13
|
+
add: TransferUtil.hexToRgba
|
|
14
|
+
fix: ObjectUtil.mergeParams
|
|
15
|
+
|
|
16
|
+
## v1.18.20
|
|
17
|
+
fix: 解密失败为undefined
|
|
18
|
+
|
|
8
19
|
## v1.18.19
|
|
9
20
|
fix: streamsaver 按需引入
|
|
10
21
|
|
package/esm/base/BaseUtil.d.ts
CHANGED
|
@@ -95,5 +95,20 @@ declare namespace BaseUtil {
|
|
|
95
95
|
* isNotEmpty(null) => false
|
|
96
96
|
*/
|
|
97
97
|
const isNotEmpty: (obj: any) => boolean;
|
|
98
|
+
/**
|
|
99
|
+
* 比较两个版本号
|
|
100
|
+
* @param version1 第一个版本号
|
|
101
|
+
* @param version2 第二个版本号
|
|
102
|
+
* @returns 1: version1 > version2, -1: version1 < version2, 0: version1 = version2
|
|
103
|
+
*/
|
|
104
|
+
function compareVersions(version1: string, version2: string): number;
|
|
105
|
+
/**
|
|
106
|
+
* 判断version1是否大于version2
|
|
107
|
+
*/
|
|
108
|
+
function isVersionGreater(version1: string | undefined, version2: string | undefined): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* 判断两个版本是否相等
|
|
111
|
+
*/
|
|
112
|
+
function isVersionEqual(version1: string | undefined, version2: string | undefined): boolean;
|
|
98
113
|
}
|
|
99
114
|
export default BaseUtil;
|
package/esm/base/BaseUtil.js
CHANGED
|
@@ -154,5 +154,50 @@ var BaseUtil;
|
|
|
154
154
|
BaseUtil.isNotEmpty = function (obj) {
|
|
155
155
|
return !BaseUtil.isEmpty(obj);
|
|
156
156
|
};
|
|
157
|
+
/**
|
|
158
|
+
* 比较两个版本号
|
|
159
|
+
* @param version1 第一个版本号
|
|
160
|
+
* @param version2 第二个版本号
|
|
161
|
+
* @returns 1: version1 > version2, -1: version1 < version2, 0: version1 = version2
|
|
162
|
+
*/
|
|
163
|
+
function compareVersions(version1, version2) {
|
|
164
|
+
// 移除可能存在的 'v' 前缀
|
|
165
|
+
var v1 = version1.replace(/^v/, '');
|
|
166
|
+
var v2 = version2.replace(/^v/, '');
|
|
167
|
+
// 分割版本号并转换为数字数组
|
|
168
|
+
var parts1 = v1.split('.').map(function (part) {
|
|
169
|
+
return parseInt(part, 10);
|
|
170
|
+
});
|
|
171
|
+
var parts2 = v2.split('.').map(function (part) {
|
|
172
|
+
return parseInt(part, 10);
|
|
173
|
+
});
|
|
174
|
+
// 确保两个数组长度相同,短的用0补齐
|
|
175
|
+
var maxLength = Math.max(parts1.length, parts2.length);
|
|
176
|
+
while (parts1.length < maxLength) parts1.push(0);
|
|
177
|
+
while (parts2.length < maxLength) parts2.push(0);
|
|
178
|
+
// 逐位比较
|
|
179
|
+
for (var i = 0; i < maxLength; i++) {
|
|
180
|
+
if (parts1[i] > parts2[i]) return 1;
|
|
181
|
+
if (parts1[i] < parts2[i]) return -1;
|
|
182
|
+
}
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
BaseUtil.compareVersions = compareVersions;
|
|
186
|
+
/**
|
|
187
|
+
* 判断version1是否大于version2
|
|
188
|
+
*/
|
|
189
|
+
function isVersionGreater(version1, version2) {
|
|
190
|
+
if (!version1 || !version2) return false;
|
|
191
|
+
return compareVersions(version1, version2) > 0;
|
|
192
|
+
}
|
|
193
|
+
BaseUtil.isVersionGreater = isVersionGreater;
|
|
194
|
+
/**
|
|
195
|
+
* 判断两个版本是否相等
|
|
196
|
+
*/
|
|
197
|
+
function isVersionEqual(version1, version2) {
|
|
198
|
+
if (!version1 || !version2) return false;
|
|
199
|
+
return compareVersions(version1, version2) === 0;
|
|
200
|
+
}
|
|
201
|
+
BaseUtil.isVersionEqual = isVersionEqual;
|
|
157
202
|
})(BaseUtil || (BaseUtil = {}));
|
|
158
203
|
export default BaseUtil;
|
package/esm/check/CheckUtil.js
CHANGED
|
@@ -522,11 +522,11 @@ var CheckUtil;
|
|
|
522
522
|
return __generator(this, function (_a) {
|
|
523
523
|
if (!value) return [2 /*return*/, Promise.resolve()];
|
|
524
524
|
if (type === 'MOBILE_AES') {
|
|
525
|
-
if (CheckUtil.checkAny(PasswordUtil.strDecrypt(value), 'MOBILE')) return [2 /*return*/, Promise.resolve()];
|
|
525
|
+
if (CheckUtil.checkAny(PasswordUtil.strDecrypt(value) || '', 'MOBILE')) return [2 /*return*/, Promise.resolve()];
|
|
526
526
|
return [2 /*return*/, Promise.reject(new Error((options === null || options === void 0 ? void 0 : options.errMsg) || "\u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u8F93\u5165\u6B63\u786E\u7684".concat(msg, "\uFF01")))];
|
|
527
527
|
}
|
|
528
528
|
if (type === 'ID_CARD_AES') {
|
|
529
|
-
if (CheckUtil.checkAny(PasswordUtil.strDecrypt(value), 'ID_CARD')) return [2 /*return*/, Promise.resolve()];
|
|
529
|
+
if (CheckUtil.checkAny(PasswordUtil.strDecrypt(value) || '', 'ID_CARD')) return [2 /*return*/, Promise.resolve()];
|
|
530
530
|
return [2 /*return*/, Promise.reject(new Error((options === null || options === void 0 ? void 0 : options.errMsg) || "\u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u8F93\u5165\u6B63\u786E\u7684".concat(msg, "\uFF01")))];
|
|
531
531
|
}
|
|
532
532
|
if (CheckUtil.checkAny(value, type)) return [2 /*return*/, Promise.resolve()];
|
package/esm/object/ObjectUtil.js
CHANGED
|
@@ -128,31 +128,39 @@ var ObjectUtil;
|
|
|
128
128
|
var isAObj = BaseUtil.isObject(paramsA);
|
|
129
129
|
var isBObj = BaseUtil.isObject(paramsB);
|
|
130
130
|
if (!isAObj && !isBObj) return {};
|
|
131
|
-
if (BaseUtil.isEmpty(paramsA) || !isAObj) return paramsB;
|
|
132
|
-
if (BaseUtil.isEmpty(paramsB) || !isBObj) return paramsA;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
131
|
+
if (BaseUtil.isEmpty(paramsA) || !isAObj) return deepClone(paramsB);
|
|
132
|
+
if (BaseUtil.isEmpty(paramsB) || !isBObj) return deepClone(paramsA);
|
|
133
|
+
return deepMerge(paramsA, paramsB);
|
|
134
|
+
}
|
|
135
|
+
ObjectUtil.mergeParams = mergeParams;
|
|
136
|
+
/**
|
|
137
|
+
* 深度合并两个对象
|
|
138
|
+
* @param target 目标对象(优先级高)
|
|
139
|
+
* @param source 源对象
|
|
140
|
+
* @returns 合并后的新对象
|
|
141
|
+
*/
|
|
142
|
+
function deepMerge(target, source) {
|
|
143
|
+
var result = deepClone(target);
|
|
144
|
+
if (!BaseUtil.isObject(source)) {
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
Object.entries(source || {}).forEach(function (_a) {
|
|
141
148
|
var _b = __read(_a, 2),
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
149
|
+
key = _b[0],
|
|
150
|
+
sourceValue = _b[1];
|
|
151
|
+
var targetValue = result[key];
|
|
152
|
+
// 如果目标对象中该属性为 null 或 undefined,直接使用源对象的值
|
|
153
|
+
if ([undefined, null].includes(targetValue)) {
|
|
154
|
+
result[key] = deepClone(sourceValue);
|
|
147
155
|
}
|
|
156
|
+
// 如果两个都是对象,则递归合并
|
|
157
|
+
else if (BaseUtil.isObject(targetValue) && BaseUtil.isObject(sourceValue)) {
|
|
158
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
159
|
+
}
|
|
160
|
+
// 其他情况保持目标对象的值(A优先级高于B)
|
|
148
161
|
});
|
|
149
|
-
|
|
150
|
-
dataAllMap.forEach(function (v, k) {
|
|
151
|
-
newData[k] = v;
|
|
152
|
-
});
|
|
153
|
-
return newData;
|
|
162
|
+
return result;
|
|
154
163
|
}
|
|
155
|
-
ObjectUtil.mergeParams = mergeParams;
|
|
156
164
|
/**
|
|
157
165
|
* 获取对象的唯一hash
|
|
158
166
|
* @param obj
|
|
@@ -12,7 +12,7 @@ declare namespace PasswordUtil {
|
|
|
12
12
|
* @example
|
|
13
13
|
* strEncrypt('XX') => 3f231e9c5040a51a663a4e12ddd509fc31f201caf95f
|
|
14
14
|
*/
|
|
15
|
-
const strEncrypt: (str: string, pwd?: string) => string;
|
|
15
|
+
const strEncrypt: (str: string, pwd?: string) => string | undefined;
|
|
16
16
|
/**
|
|
17
17
|
* AES解密函数
|
|
18
18
|
* @param str 待解密字符串
|
|
@@ -20,7 +20,7 @@ declare namespace PasswordUtil {
|
|
|
20
20
|
* @example
|
|
21
21
|
* strDecrypt('3f231e9c5040a51a663a4e12ddd509fc31f201caf95f') => XX
|
|
22
22
|
*/
|
|
23
|
-
const strDecrypt: (str: string, pwd?: string) =>
|
|
23
|
+
const strDecrypt: (str: string, pwd?: string) => string | undefined;
|
|
24
24
|
/**
|
|
25
25
|
* MD5加密函数
|
|
26
26
|
* @param str 待加密字符串
|
|
@@ -28,7 +28,7 @@ declare namespace PasswordUtil {
|
|
|
28
28
|
* @example
|
|
29
29
|
* str2MD5('1111') => ea69274f6555a750bec9985a07f80455
|
|
30
30
|
*/
|
|
31
|
-
const str2MD5: (str: string, pwd?: string) =>
|
|
31
|
+
const str2MD5: (str: string, pwd?: string) => string | undefined;
|
|
32
32
|
/**
|
|
33
33
|
* 加密函数
|
|
34
34
|
* @param {Object} data - 要加密的 JSON 对象
|
|
@@ -42,7 +42,7 @@ declare namespace PasswordUtil {
|
|
|
42
42
|
* @param {string} pwd - 密钥
|
|
43
43
|
* @returns {Object} 解密后的 JSON 对象
|
|
44
44
|
*/
|
|
45
|
-
function xorDecryptData(encodedData: string, pwd?: string):
|
|
45
|
+
function xorDecryptData(encodedData: string, pwd?: string): string | undefined;
|
|
46
46
|
/**
|
|
47
47
|
* 加密函数
|
|
48
48
|
* @param {Object} data - 要加密的 JSON 对象
|
|
@@ -56,6 +56,6 @@ declare namespace PasswordUtil {
|
|
|
56
56
|
* @param {string} pwd - 密钥
|
|
57
57
|
* @returns {Object} 解密后的 JSON 对象
|
|
58
58
|
*/
|
|
59
|
-
function minDecryptData(encodedData: string, pwd?: string):
|
|
59
|
+
function minDecryptData(encodedData: string, pwd?: string): string | undefined;
|
|
60
60
|
}
|
|
61
61
|
export default PasswordUtil;
|
package/esm/pwd/PasswordUtil.js
CHANGED
|
@@ -22,7 +22,7 @@ var PasswordUtil;
|
|
|
22
22
|
if (pwd === void 0) {
|
|
23
23
|
pwd = defaultPwd;
|
|
24
24
|
}
|
|
25
|
-
if (!str) return
|
|
25
|
+
if (!str) return undefined;
|
|
26
26
|
var key = CryptoJS.enc.Utf8.parse(pwd);
|
|
27
27
|
var srcs = CryptoJS.enc.Utf8.parse(str);
|
|
28
28
|
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
|
|
@@ -42,7 +42,7 @@ var PasswordUtil;
|
|
|
42
42
|
if (pwd === void 0) {
|
|
43
43
|
pwd = defaultPwd;
|
|
44
44
|
}
|
|
45
|
-
if (str == '') return
|
|
45
|
+
if (str == '') return undefined;
|
|
46
46
|
var key = CryptoJS.enc.Utf8.parse(pwd);
|
|
47
47
|
var decrypt = CryptoJS.AES.decrypt(decodeURIComponent(str), key, {
|
|
48
48
|
mode: CryptoJS.mode.ECB,
|
|
@@ -61,7 +61,7 @@ var PasswordUtil;
|
|
|
61
61
|
if (pwd === void 0) {
|
|
62
62
|
pwd = defaultMD5Key;
|
|
63
63
|
}
|
|
64
|
-
if (!str) return
|
|
64
|
+
if (!str) return undefined;
|
|
65
65
|
return CryptoJS.MD5(pwd + str).toString();
|
|
66
66
|
};
|
|
67
67
|
/**
|
|
@@ -103,7 +103,7 @@ var PasswordUtil;
|
|
|
103
103
|
}
|
|
104
104
|
return JSON.parse(decompressed); // 解析 JSON
|
|
105
105
|
} catch (error) {
|
|
106
|
-
return
|
|
106
|
+
return undefined;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
PasswordUtil.xorDecryptData = xorDecryptData;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SessionOpts } from '../types';
|
|
2
2
|
declare namespace StorageUtil {
|
|
3
3
|
function setItem<T>(name: string, data: T, opts?: SessionOpts): void;
|
|
4
|
-
function getItem<T>(name: string, opts?: SessionOpts): T;
|
|
4
|
+
function getItem<T>(name: string, opts?: SessionOpts): T | undefined;
|
|
5
5
|
function removeItem(name: string, opts?: SessionOpts): void;
|
|
6
6
|
function clear(opts?: SessionOpts): void;
|
|
7
7
|
function clearTitle(opts?: SessionOpts): void;
|
|
@@ -96,5 +96,20 @@ declare namespace TransferUtil {
|
|
|
96
96
|
* @param n - 保留小数默认2
|
|
97
97
|
*/
|
|
98
98
|
const getFileSizeByBytes: (bytes: number, n?: number, render?: ((num: number, unit: string) => any) | undefined) => any;
|
|
99
|
+
/**
|
|
100
|
+
* 十六进制转rgba
|
|
101
|
+
* @param hex
|
|
102
|
+
* @param alpha
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
function hexToRgba(hex: string, alpha?: number): string;
|
|
106
|
+
/**
|
|
107
|
+
* 颜色混合计算
|
|
108
|
+
* @param hex
|
|
109
|
+
* @param alpha
|
|
110
|
+
* @param backgroundColor
|
|
111
|
+
* @returns 背景下与带透明度的#xxx颜色视觉效果相近的不透明十六进制颜色
|
|
112
|
+
*/
|
|
113
|
+
function blendHexWithAlpha(hex: string, alpha: number, backgroundColor?: string): string | undefined;
|
|
99
114
|
}
|
|
100
115
|
export default TransferUtil;
|
|
@@ -326,5 +326,82 @@ var TransferUtil;
|
|
|
326
326
|
var unit = sizes[i];
|
|
327
327
|
return (_a = render === null || render === void 0 ? void 0 : render(num, unit)) !== null && _a !== void 0 ? _a : num + unit;
|
|
328
328
|
};
|
|
329
|
+
/**
|
|
330
|
+
* 十六进制转rgba
|
|
331
|
+
* @param hex
|
|
332
|
+
* @param alpha
|
|
333
|
+
* @returns
|
|
334
|
+
*/
|
|
335
|
+
function hexToRgba(hex, alpha) {
|
|
336
|
+
if (alpha === void 0) {
|
|
337
|
+
alpha = 1;
|
|
338
|
+
}
|
|
339
|
+
// 移除#号(如果存在)
|
|
340
|
+
// eslint-disable-next-line no-param-reassign
|
|
341
|
+
hex = hex.replace('#', '');
|
|
342
|
+
// 确保是6位十六进制
|
|
343
|
+
if (hex.length === 3) {
|
|
344
|
+
// eslint-disable-next-line no-param-reassign
|
|
345
|
+
hex = hex.split('').map(function (char) {
|
|
346
|
+
return char + char;
|
|
347
|
+
}).join('');
|
|
348
|
+
}
|
|
349
|
+
// 提取RGB值
|
|
350
|
+
var r = parseInt(hex.substring(0, 2), 16);
|
|
351
|
+
var g = parseInt(hex.substring(2, 4), 16);
|
|
352
|
+
var b = parseInt(hex.substring(4, 6), 16);
|
|
353
|
+
// 返回rgba格式
|
|
354
|
+
return "rgba(".concat(r, ",").concat(g, ",").concat(b, ",").concat(alpha, ")");
|
|
355
|
+
}
|
|
356
|
+
TransferUtil.hexToRgba = hexToRgba;
|
|
357
|
+
/**
|
|
358
|
+
* 颜色混合计算
|
|
359
|
+
* @param hex
|
|
360
|
+
* @param alpha
|
|
361
|
+
* @param backgroundColor
|
|
362
|
+
* @returns 背景下与带透明度的#xxx颜色视觉效果相近的不透明十六进制颜色
|
|
363
|
+
*/
|
|
364
|
+
function blendHexWithAlpha(hex, alpha, backgroundColor) {
|
|
365
|
+
if (backgroundColor === void 0) {
|
|
366
|
+
backgroundColor = '#ffffff';
|
|
367
|
+
}
|
|
368
|
+
if (!hex || !alpha) return undefined;
|
|
369
|
+
// 移除#号
|
|
370
|
+
// eslint-disable-next-line no-param-reassign
|
|
371
|
+
hex = hex.replace('#', '');
|
|
372
|
+
// eslint-disable-next-line no-param-reassign
|
|
373
|
+
backgroundColor = backgroundColor.replace('#', '');
|
|
374
|
+
// 确保是6位十六进制
|
|
375
|
+
if (hex.length === 3) {
|
|
376
|
+
// eslint-disable-next-line no-param-reassign
|
|
377
|
+
hex = hex.split('').map(function (char) {
|
|
378
|
+
return char + char;
|
|
379
|
+
}).join('');
|
|
380
|
+
}
|
|
381
|
+
if (backgroundColor.length === 3) {
|
|
382
|
+
// eslint-disable-next-line no-param-reassign
|
|
383
|
+
backgroundColor = backgroundColor.split('').map(function (char) {
|
|
384
|
+
return char + char;
|
|
385
|
+
}).join('');
|
|
386
|
+
}
|
|
387
|
+
// 提取前景色RGB值
|
|
388
|
+
var fgR = parseInt(hex.substring(0, 2), 16);
|
|
389
|
+
var fgG = parseInt(hex.substring(2, 4), 16);
|
|
390
|
+
var fgB = parseInt(hex.substring(4, 6), 16);
|
|
391
|
+
// 提取背景色RGB值
|
|
392
|
+
var bgR = parseInt(backgroundColor.substring(0, 2), 16);
|
|
393
|
+
var bgG = parseInt(backgroundColor.substring(2, 4), 16);
|
|
394
|
+
var bgB = parseInt(backgroundColor.substring(4, 6), 16);
|
|
395
|
+
// 颜色混合公式:result = foreground * alpha + background * (1 - alpha)
|
|
396
|
+
var blendedR = Math.round(fgR * alpha + bgR * (1 - alpha));
|
|
397
|
+
var blendedG = Math.round(fgG * alpha + bgG * (1 - alpha));
|
|
398
|
+
var blendedB = Math.round(fgB * alpha + bgB * (1 - alpha));
|
|
399
|
+
// 转换回十六进制
|
|
400
|
+
var toHex = function toHex(value) {
|
|
401
|
+
return value.toString(16).padStart(2, '0').toLowerCase();
|
|
402
|
+
};
|
|
403
|
+
return "#".concat(toHex(blendedR)).concat(toHex(blendedG)).concat(toHex(blendedB));
|
|
404
|
+
}
|
|
405
|
+
TransferUtil.blendHexWithAlpha = blendHexWithAlpha;
|
|
329
406
|
})(TransferUtil || (TransferUtil = {}));
|
|
330
407
|
export default TransferUtil;
|
package/lib/base/BaseUtil.d.ts
CHANGED
|
@@ -95,5 +95,20 @@ declare namespace BaseUtil {
|
|
|
95
95
|
* isNotEmpty(null) => false
|
|
96
96
|
*/
|
|
97
97
|
const isNotEmpty: (obj: any) => boolean;
|
|
98
|
+
/**
|
|
99
|
+
* 比较两个版本号
|
|
100
|
+
* @param version1 第一个版本号
|
|
101
|
+
* @param version2 第二个版本号
|
|
102
|
+
* @returns 1: version1 > version2, -1: version1 < version2, 0: version1 = version2
|
|
103
|
+
*/
|
|
104
|
+
function compareVersions(version1: string, version2: string): number;
|
|
105
|
+
/**
|
|
106
|
+
* 判断version1是否大于version2
|
|
107
|
+
*/
|
|
108
|
+
function isVersionGreater(version1: string | undefined, version2: string | undefined): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* 判断两个版本是否相等
|
|
111
|
+
*/
|
|
112
|
+
function isVersionEqual(version1: string | undefined, version2: string | undefined): boolean;
|
|
98
113
|
}
|
|
99
114
|
export default BaseUtil;
|
package/lib/base/BaseUtil.js
CHANGED
|
@@ -159,5 +159,50 @@ var BaseUtil;
|
|
|
159
159
|
BaseUtil.isNotEmpty = function (obj) {
|
|
160
160
|
return !BaseUtil.isEmpty(obj);
|
|
161
161
|
};
|
|
162
|
+
/**
|
|
163
|
+
* 比较两个版本号
|
|
164
|
+
* @param version1 第一个版本号
|
|
165
|
+
* @param version2 第二个版本号
|
|
166
|
+
* @returns 1: version1 > version2, -1: version1 < version2, 0: version1 = version2
|
|
167
|
+
*/
|
|
168
|
+
function compareVersions(version1, version2) {
|
|
169
|
+
// 移除可能存在的 'v' 前缀
|
|
170
|
+
var v1 = version1.replace(/^v/, '');
|
|
171
|
+
var v2 = version2.replace(/^v/, '');
|
|
172
|
+
// 分割版本号并转换为数字数组
|
|
173
|
+
var parts1 = v1.split('.').map(function (part) {
|
|
174
|
+
return parseInt(part, 10);
|
|
175
|
+
});
|
|
176
|
+
var parts2 = v2.split('.').map(function (part) {
|
|
177
|
+
return parseInt(part, 10);
|
|
178
|
+
});
|
|
179
|
+
// 确保两个数组长度相同,短的用0补齐
|
|
180
|
+
var maxLength = Math.max(parts1.length, parts2.length);
|
|
181
|
+
while (parts1.length < maxLength) parts1.push(0);
|
|
182
|
+
while (parts2.length < maxLength) parts2.push(0);
|
|
183
|
+
// 逐位比较
|
|
184
|
+
for (var i = 0; i < maxLength; i++) {
|
|
185
|
+
if (parts1[i] > parts2[i]) return 1;
|
|
186
|
+
if (parts1[i] < parts2[i]) return -1;
|
|
187
|
+
}
|
|
188
|
+
return 0;
|
|
189
|
+
}
|
|
190
|
+
BaseUtil.compareVersions = compareVersions;
|
|
191
|
+
/**
|
|
192
|
+
* 判断version1是否大于version2
|
|
193
|
+
*/
|
|
194
|
+
function isVersionGreater(version1, version2) {
|
|
195
|
+
if (!version1 || !version2) return false;
|
|
196
|
+
return compareVersions(version1, version2) > 0;
|
|
197
|
+
}
|
|
198
|
+
BaseUtil.isVersionGreater = isVersionGreater;
|
|
199
|
+
/**
|
|
200
|
+
* 判断两个版本是否相等
|
|
201
|
+
*/
|
|
202
|
+
function isVersionEqual(version1, version2) {
|
|
203
|
+
if (!version1 || !version2) return false;
|
|
204
|
+
return compareVersions(version1, version2) === 0;
|
|
205
|
+
}
|
|
206
|
+
BaseUtil.isVersionEqual = isVersionEqual;
|
|
162
207
|
})(BaseUtil || (BaseUtil = {}));
|
|
163
208
|
exports.default = BaseUtil;
|
package/lib/check/CheckUtil.js
CHANGED
|
@@ -532,11 +532,11 @@ var CheckUtil;
|
|
|
532
532
|
return __generator(this, function (_a) {
|
|
533
533
|
if (!value) return [2 /*return*/, Promise.resolve()];
|
|
534
534
|
if (type === 'MOBILE_AES') {
|
|
535
|
-
if (CheckUtil.checkAny(PasswordUtil_1.default.strDecrypt(value), 'MOBILE')) return [2 /*return*/, Promise.resolve()];
|
|
535
|
+
if (CheckUtil.checkAny(PasswordUtil_1.default.strDecrypt(value) || '', 'MOBILE')) return [2 /*return*/, Promise.resolve()];
|
|
536
536
|
return [2 /*return*/, Promise.reject(new Error((options === null || options === void 0 ? void 0 : options.errMsg) || "\u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u8F93\u5165\u6B63\u786E\u7684".concat(msg, "\uFF01")))];
|
|
537
537
|
}
|
|
538
538
|
if (type === 'ID_CARD_AES') {
|
|
539
|
-
if (CheckUtil.checkAny(PasswordUtil_1.default.strDecrypt(value), 'ID_CARD')) return [2 /*return*/, Promise.resolve()];
|
|
539
|
+
if (CheckUtil.checkAny(PasswordUtil_1.default.strDecrypt(value) || '', 'ID_CARD')) return [2 /*return*/, Promise.resolve()];
|
|
540
540
|
return [2 /*return*/, Promise.reject(new Error((options === null || options === void 0 ? void 0 : options.errMsg) || "\u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u8F93\u5165\u6B63\u786E\u7684".concat(msg, "\uFF01")))];
|
|
541
541
|
}
|
|
542
542
|
if (CheckUtil.checkAny(value, type)) return [2 /*return*/, Promise.resolve()];
|
package/lib/object/ObjectUtil.js
CHANGED
|
@@ -138,31 +138,39 @@ var ObjectUtil;
|
|
|
138
138
|
var isAObj = BaseUtil_1.default.isObject(paramsA);
|
|
139
139
|
var isBObj = BaseUtil_1.default.isObject(paramsB);
|
|
140
140
|
if (!isAObj && !isBObj) return {};
|
|
141
|
-
if (BaseUtil_1.default.isEmpty(paramsA) || !isAObj) return paramsB;
|
|
142
|
-
if (BaseUtil_1.default.isEmpty(paramsB) || !isBObj) return paramsA;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
141
|
+
if (BaseUtil_1.default.isEmpty(paramsA) || !isAObj) return deepClone(paramsB);
|
|
142
|
+
if (BaseUtil_1.default.isEmpty(paramsB) || !isBObj) return deepClone(paramsA);
|
|
143
|
+
return deepMerge(paramsA, paramsB);
|
|
144
|
+
}
|
|
145
|
+
ObjectUtil.mergeParams = mergeParams;
|
|
146
|
+
/**
|
|
147
|
+
* 深度合并两个对象
|
|
148
|
+
* @param target 目标对象(优先级高)
|
|
149
|
+
* @param source 源对象
|
|
150
|
+
* @returns 合并后的新对象
|
|
151
|
+
*/
|
|
152
|
+
function deepMerge(target, source) {
|
|
153
|
+
var result = deepClone(target);
|
|
154
|
+
if (!BaseUtil_1.default.isObject(source)) {
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
Object.entries(source || {}).forEach(function (_a) {
|
|
151
158
|
var _b = __read(_a, 2),
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
key = _b[0],
|
|
160
|
+
sourceValue = _b[1];
|
|
161
|
+
var targetValue = result[key];
|
|
162
|
+
// 如果目标对象中该属性为 null 或 undefined,直接使用源对象的值
|
|
163
|
+
if ([undefined, null].includes(targetValue)) {
|
|
164
|
+
result[key] = deepClone(sourceValue);
|
|
157
165
|
}
|
|
166
|
+
// 如果两个都是对象,则递归合并
|
|
167
|
+
else if (BaseUtil_1.default.isObject(targetValue) && BaseUtil_1.default.isObject(sourceValue)) {
|
|
168
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
169
|
+
}
|
|
170
|
+
// 其他情况保持目标对象的值(A优先级高于B)
|
|
158
171
|
});
|
|
159
|
-
|
|
160
|
-
dataAllMap.forEach(function (v, k) {
|
|
161
|
-
newData[k] = v;
|
|
162
|
-
});
|
|
163
|
-
return newData;
|
|
172
|
+
return result;
|
|
164
173
|
}
|
|
165
|
-
ObjectUtil.mergeParams = mergeParams;
|
|
166
174
|
/**
|
|
167
175
|
* 获取对象的唯一hash
|
|
168
176
|
* @param obj
|
|
@@ -12,7 +12,7 @@ declare namespace PasswordUtil {
|
|
|
12
12
|
* @example
|
|
13
13
|
* strEncrypt('XX') => 3f231e9c5040a51a663a4e12ddd509fc31f201caf95f
|
|
14
14
|
*/
|
|
15
|
-
const strEncrypt: (str: string, pwd?: string) => string;
|
|
15
|
+
const strEncrypt: (str: string, pwd?: string) => string | undefined;
|
|
16
16
|
/**
|
|
17
17
|
* AES解密函数
|
|
18
18
|
* @param str 待解密字符串
|
|
@@ -20,7 +20,7 @@ declare namespace PasswordUtil {
|
|
|
20
20
|
* @example
|
|
21
21
|
* strDecrypt('3f231e9c5040a51a663a4e12ddd509fc31f201caf95f') => XX
|
|
22
22
|
*/
|
|
23
|
-
const strDecrypt: (str: string, pwd?: string) =>
|
|
23
|
+
const strDecrypt: (str: string, pwd?: string) => string | undefined;
|
|
24
24
|
/**
|
|
25
25
|
* MD5加密函数
|
|
26
26
|
* @param str 待加密字符串
|
|
@@ -28,7 +28,7 @@ declare namespace PasswordUtil {
|
|
|
28
28
|
* @example
|
|
29
29
|
* str2MD5('1111') => ea69274f6555a750bec9985a07f80455
|
|
30
30
|
*/
|
|
31
|
-
const str2MD5: (str: string, pwd?: string) =>
|
|
31
|
+
const str2MD5: (str: string, pwd?: string) => string | undefined;
|
|
32
32
|
/**
|
|
33
33
|
* 加密函数
|
|
34
34
|
* @param {Object} data - 要加密的 JSON 对象
|
|
@@ -42,7 +42,7 @@ declare namespace PasswordUtil {
|
|
|
42
42
|
* @param {string} pwd - 密钥
|
|
43
43
|
* @returns {Object} 解密后的 JSON 对象
|
|
44
44
|
*/
|
|
45
|
-
function xorDecryptData(encodedData: string, pwd?: string):
|
|
45
|
+
function xorDecryptData(encodedData: string, pwd?: string): string | undefined;
|
|
46
46
|
/**
|
|
47
47
|
* 加密函数
|
|
48
48
|
* @param {Object} data - 要加密的 JSON 对象
|
|
@@ -56,6 +56,6 @@ declare namespace PasswordUtil {
|
|
|
56
56
|
* @param {string} pwd - 密钥
|
|
57
57
|
* @returns {Object} 解密后的 JSON 对象
|
|
58
58
|
*/
|
|
59
|
-
function minDecryptData(encodedData: string, pwd?: string):
|
|
59
|
+
function minDecryptData(encodedData: string, pwd?: string): string | undefined;
|
|
60
60
|
}
|
|
61
61
|
export default PasswordUtil;
|
package/lib/pwd/PasswordUtil.js
CHANGED
|
@@ -32,7 +32,7 @@ var PasswordUtil;
|
|
|
32
32
|
if (pwd === void 0) {
|
|
33
33
|
pwd = defaultPwd;
|
|
34
34
|
}
|
|
35
|
-
if (!str) return
|
|
35
|
+
if (!str) return undefined;
|
|
36
36
|
var key = crypto_1.default.enc.Utf8.parse(pwd);
|
|
37
37
|
var srcs = crypto_1.default.enc.Utf8.parse(str);
|
|
38
38
|
var encrypted = crypto_1.default.AES.encrypt(srcs, key, {
|
|
@@ -52,7 +52,7 @@ var PasswordUtil;
|
|
|
52
52
|
if (pwd === void 0) {
|
|
53
53
|
pwd = defaultPwd;
|
|
54
54
|
}
|
|
55
|
-
if (str == '') return
|
|
55
|
+
if (str == '') return undefined;
|
|
56
56
|
var key = crypto_1.default.enc.Utf8.parse(pwd);
|
|
57
57
|
var decrypt = crypto_1.default.AES.decrypt(decodeURIComponent(str), key, {
|
|
58
58
|
mode: crypto_1.default.mode.ECB,
|
|
@@ -71,7 +71,7 @@ var PasswordUtil;
|
|
|
71
71
|
if (pwd === void 0) {
|
|
72
72
|
pwd = defaultMD5Key;
|
|
73
73
|
}
|
|
74
|
-
if (!str) return
|
|
74
|
+
if (!str) return undefined;
|
|
75
75
|
return crypto_1.default.MD5(pwd + str).toString();
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
@@ -113,7 +113,7 @@ var PasswordUtil;
|
|
|
113
113
|
}
|
|
114
114
|
return JSON.parse(decompressed); // 解析 JSON
|
|
115
115
|
} catch (error) {
|
|
116
|
-
return
|
|
116
|
+
return undefined;
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
PasswordUtil.xorDecryptData = xorDecryptData;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SessionOpts } from '../types';
|
|
2
2
|
declare namespace StorageUtil {
|
|
3
3
|
function setItem<T>(name: string, data: T, opts?: SessionOpts): void;
|
|
4
|
-
function getItem<T>(name: string, opts?: SessionOpts): T;
|
|
4
|
+
function getItem<T>(name: string, opts?: SessionOpts): T | undefined;
|
|
5
5
|
function removeItem(name: string, opts?: SessionOpts): void;
|
|
6
6
|
function clear(opts?: SessionOpts): void;
|
|
7
7
|
function clearTitle(opts?: SessionOpts): void;
|
|
@@ -96,5 +96,20 @@ declare namespace TransferUtil {
|
|
|
96
96
|
* @param n - 保留小数默认2
|
|
97
97
|
*/
|
|
98
98
|
const getFileSizeByBytes: (bytes: number, n?: number, render?: ((num: number, unit: string) => any) | undefined) => any;
|
|
99
|
+
/**
|
|
100
|
+
* 十六进制转rgba
|
|
101
|
+
* @param hex
|
|
102
|
+
* @param alpha
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
function hexToRgba(hex: string, alpha?: number): string;
|
|
106
|
+
/**
|
|
107
|
+
* 颜色混合计算
|
|
108
|
+
* @param hex
|
|
109
|
+
* @param alpha
|
|
110
|
+
* @param backgroundColor
|
|
111
|
+
* @returns 背景下与带透明度的#xxx颜色视觉效果相近的不透明十六进制颜色
|
|
112
|
+
*/
|
|
113
|
+
function blendHexWithAlpha(hex: string, alpha: number, backgroundColor?: string): string | undefined;
|
|
99
114
|
}
|
|
100
115
|
export default TransferUtil;
|
|
@@ -336,5 +336,82 @@ var TransferUtil;
|
|
|
336
336
|
var unit = sizes[i];
|
|
337
337
|
return (_a = render === null || render === void 0 ? void 0 : render(num, unit)) !== null && _a !== void 0 ? _a : num + unit;
|
|
338
338
|
};
|
|
339
|
+
/**
|
|
340
|
+
* 十六进制转rgba
|
|
341
|
+
* @param hex
|
|
342
|
+
* @param alpha
|
|
343
|
+
* @returns
|
|
344
|
+
*/
|
|
345
|
+
function hexToRgba(hex, alpha) {
|
|
346
|
+
if (alpha === void 0) {
|
|
347
|
+
alpha = 1;
|
|
348
|
+
}
|
|
349
|
+
// 移除#号(如果存在)
|
|
350
|
+
// eslint-disable-next-line no-param-reassign
|
|
351
|
+
hex = hex.replace('#', '');
|
|
352
|
+
// 确保是6位十六进制
|
|
353
|
+
if (hex.length === 3) {
|
|
354
|
+
// eslint-disable-next-line no-param-reassign
|
|
355
|
+
hex = hex.split('').map(function (char) {
|
|
356
|
+
return char + char;
|
|
357
|
+
}).join('');
|
|
358
|
+
}
|
|
359
|
+
// 提取RGB值
|
|
360
|
+
var r = parseInt(hex.substring(0, 2), 16);
|
|
361
|
+
var g = parseInt(hex.substring(2, 4), 16);
|
|
362
|
+
var b = parseInt(hex.substring(4, 6), 16);
|
|
363
|
+
// 返回rgba格式
|
|
364
|
+
return "rgba(".concat(r, ",").concat(g, ",").concat(b, ",").concat(alpha, ")");
|
|
365
|
+
}
|
|
366
|
+
TransferUtil.hexToRgba = hexToRgba;
|
|
367
|
+
/**
|
|
368
|
+
* 颜色混合计算
|
|
369
|
+
* @param hex
|
|
370
|
+
* @param alpha
|
|
371
|
+
* @param backgroundColor
|
|
372
|
+
* @returns 背景下与带透明度的#xxx颜色视觉效果相近的不透明十六进制颜色
|
|
373
|
+
*/
|
|
374
|
+
function blendHexWithAlpha(hex, alpha, backgroundColor) {
|
|
375
|
+
if (backgroundColor === void 0) {
|
|
376
|
+
backgroundColor = '#ffffff';
|
|
377
|
+
}
|
|
378
|
+
if (!hex || !alpha) return undefined;
|
|
379
|
+
// 移除#号
|
|
380
|
+
// eslint-disable-next-line no-param-reassign
|
|
381
|
+
hex = hex.replace('#', '');
|
|
382
|
+
// eslint-disable-next-line no-param-reassign
|
|
383
|
+
backgroundColor = backgroundColor.replace('#', '');
|
|
384
|
+
// 确保是6位十六进制
|
|
385
|
+
if (hex.length === 3) {
|
|
386
|
+
// eslint-disable-next-line no-param-reassign
|
|
387
|
+
hex = hex.split('').map(function (char) {
|
|
388
|
+
return char + char;
|
|
389
|
+
}).join('');
|
|
390
|
+
}
|
|
391
|
+
if (backgroundColor.length === 3) {
|
|
392
|
+
// eslint-disable-next-line no-param-reassign
|
|
393
|
+
backgroundColor = backgroundColor.split('').map(function (char) {
|
|
394
|
+
return char + char;
|
|
395
|
+
}).join('');
|
|
396
|
+
}
|
|
397
|
+
// 提取前景色RGB值
|
|
398
|
+
var fgR = parseInt(hex.substring(0, 2), 16);
|
|
399
|
+
var fgG = parseInt(hex.substring(2, 4), 16);
|
|
400
|
+
var fgB = parseInt(hex.substring(4, 6), 16);
|
|
401
|
+
// 提取背景色RGB值
|
|
402
|
+
var bgR = parseInt(backgroundColor.substring(0, 2), 16);
|
|
403
|
+
var bgG = parseInt(backgroundColor.substring(2, 4), 16);
|
|
404
|
+
var bgB = parseInt(backgroundColor.substring(4, 6), 16);
|
|
405
|
+
// 颜色混合公式:result = foreground * alpha + background * (1 - alpha)
|
|
406
|
+
var blendedR = Math.round(fgR * alpha + bgR * (1 - alpha));
|
|
407
|
+
var blendedG = Math.round(fgG * alpha + bgG * (1 - alpha));
|
|
408
|
+
var blendedB = Math.round(fgB * alpha + bgB * (1 - alpha));
|
|
409
|
+
// 转换回十六进制
|
|
410
|
+
var toHex = function toHex(value) {
|
|
411
|
+
return value.toString(16).padStart(2, '0').toLowerCase();
|
|
412
|
+
};
|
|
413
|
+
return "#".concat(toHex(blendedR)).concat(toHex(blendedG)).concat(toHex(blendedB));
|
|
414
|
+
}
|
|
415
|
+
TransferUtil.blendHexWithAlpha = blendHexWithAlpha;
|
|
339
416
|
})(TransferUtil || (TransferUtil = {}));
|
|
340
417
|
exports.default = TransferUtil;
|