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 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
 
@@ -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;
@@ -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;
@@ -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()];
@@ -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
- var dataAllMap = new Map();
134
- Object.entries(paramsA || {}).forEach(function (_a) {
135
- var _b = __read(_a, 2),
136
- k = _b[0],
137
- v = _b[1];
138
- dataAllMap.set(k, v);
139
- }); //浅拷贝A属性
140
- Object.entries(paramsB || {}).forEach(function (_a) {
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
- k = _b[0],
143
- v = _b[1];
144
- // dataBMap.set(k, v);
145
- if ([undefined, null].includes(dataAllMap.get(k))) {
146
- dataAllMap.set(k, v);
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
- var newData = {};
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) => any;
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) => any;
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): any;
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): any;
59
+ function minDecryptData(encodedData: string, pwd?: string): string | undefined;
60
60
  }
61
61
  export default PasswordUtil;
@@ -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;
@@ -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;
@@ -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;
@@ -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()];
@@ -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
- var dataAllMap = new Map();
144
- Object.entries(paramsA || {}).forEach(function (_a) {
145
- var _b = __read(_a, 2),
146
- k = _b[0],
147
- v = _b[1];
148
- dataAllMap.set(k, v);
149
- }); //浅拷贝A属性
150
- Object.entries(paramsB || {}).forEach(function (_a) {
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
- k = _b[0],
153
- v = _b[1];
154
- // dataBMap.set(k, v);
155
- if ([undefined, null].includes(dataAllMap.get(k))) {
156
- dataAllMap.set(k, v);
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
- var newData = {};
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) => any;
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) => any;
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): any;
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): any;
59
+ function minDecryptData(encodedData: string, pwd?: string): string | undefined;
60
60
  }
61
61
  export default PasswordUtil;
@@ -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;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tools-min-ns",
3
3
  "description": "工具包适用于前端以及node",
4
- "version": "1.18.19",
4
+ "version": "1.18.21",
5
5
  "main": "lib/index.js",
6
6
  "license": "MIT",
7
7
  "author": "nanshen",