tools-min-ns 1.18.20 → 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,14 @@ 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
+
8
16
  ## v1.18.20
9
17
  fix: 解密失败为undefined
10
18
 
@@ -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;
@@ -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
@@ -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;
@@ -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
@@ -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.20",
4
+ "version": "1.18.21",
5
5
  "main": "lib/index.js",
6
6
  "license": "MIT",
7
7
  "author": "nanshen",