tools-for-js 1.5.0 → 1.5.2
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 +1 -0
- package/lib/index.js +12 -0
- package/lib/utils/common.js +9 -7
- package/lib/utils/object.js +19 -2
- package/lib/utils/string.js +33 -12
- package/lib/utils/test.js +19 -0
- package/lib/utils/time.js +8 -6
- package/package.json +1 -1
package/README.md
CHANGED
package/lib/index.js
CHANGED
|
@@ -177,6 +177,12 @@ Object.defineProperty(exports, "getTimeDistance", {
|
|
|
177
177
|
return _time.getTimeDistance;
|
|
178
178
|
}
|
|
179
179
|
});
|
|
180
|
+
Object.defineProperty(exports, "getValByKey", {
|
|
181
|
+
enumerable: true,
|
|
182
|
+
get: function get() {
|
|
183
|
+
return _object.getValByKey;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
180
186
|
Object.defineProperty(exports, "getValueFromArray", {
|
|
181
187
|
enumerable: true,
|
|
182
188
|
get: function get() {
|
|
@@ -207,6 +213,12 @@ Object.defineProperty(exports, "isExpires", {
|
|
|
207
213
|
return _time.isExpires;
|
|
208
214
|
}
|
|
209
215
|
});
|
|
216
|
+
Object.defineProperty(exports, "isJSONString", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function get() {
|
|
219
|
+
return _object.isJSONString;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
210
222
|
Object.defineProperty(exports, "lowercaseKeys", {
|
|
211
223
|
enumerable: true,
|
|
212
224
|
get: function get() {
|
package/lib/utils/common.js
CHANGED
|
@@ -90,18 +90,20 @@ var isEmpty = exports.isEmpty = function isEmpty(params) {
|
|
|
90
90
|
var isEqual = exports.isEqual = function isEqual(a, b) {
|
|
91
91
|
// 类型为基本类型时,如果相等,则返回true
|
|
92
92
|
if (a === b) return true;
|
|
93
|
-
if (IsType('Object', a) && IsType('Object', b)
|
|
94
|
-
//
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
if (IsType('Object', a) && IsType('Object', b)) {
|
|
94
|
+
// 若两个参数都为对象,先判断对象长度是否相同,再遍历对象内元素是否相同
|
|
95
|
+
if (Object.keys(a).length !== Object.keys(b).length) return false;
|
|
96
|
+
for (var k in a) {
|
|
97
|
+
if (a.hasOwnProperty(k)) {
|
|
98
|
+
if (!isEqual(a[k], b[k])) {
|
|
98
99
|
// 对象中具有不相同属性 返回false
|
|
99
100
|
return false;
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
} else if (IsType('Array', a) && IsType('Array', b)
|
|
104
|
-
//
|
|
104
|
+
} else if (IsType('Array', a) && IsType('Array', b)) {
|
|
105
|
+
// 若两个参数都为数组,则先判断数组长度是否相同,遍历数组元素是否相同
|
|
106
|
+
if (a.length !== b.length) return false;
|
|
105
107
|
for (var i = 0, length = a.length; i < length; i++) {
|
|
106
108
|
if (!isEqual(a[i], b[i])) {
|
|
107
109
|
// 如果数组元素中具有不相同元素,返回false
|
package/lib/utils/object.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.getValByKey = void 0;
|
|
7
|
+
exports.isJSONString = isJSONString;
|
|
8
|
+
exports.objectToQs = void 0;
|
|
7
9
|
/*******
|
|
8
10
|
* @description: 将对象转换为查询字符串
|
|
9
11
|
* @author: 琴时
|
|
@@ -32,4 +34,19 @@ var getValByKey = exports.getValByKey = function getValByKey(obj, key) {
|
|
|
32
34
|
value = value[keys[i]];
|
|
33
35
|
}
|
|
34
36
|
return value;
|
|
35
|
-
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/*******
|
|
40
|
+
* @description: 判断是否为json字符串
|
|
41
|
+
* @author: 琴时
|
|
42
|
+
* @param {String} str
|
|
43
|
+
* @return {Object|Boolean}
|
|
44
|
+
*/
|
|
45
|
+
function isJSONString(str) {
|
|
46
|
+
try {
|
|
47
|
+
var res = JSON.parse(str);
|
|
48
|
+
return res;
|
|
49
|
+
} catch (e) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
package/lib/utils/string.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.splitString = splitString;
|
|
|
9
9
|
exports.splitToFileName = splitToFileName;
|
|
10
10
|
exports.toCode = void 0;
|
|
11
11
|
var _random = require("./random");
|
|
12
|
+
var _common = require("./common");
|
|
12
13
|
var _utf8_encode = function _utf8_encode(string) {
|
|
13
14
|
string = string ? string.toString() : '';
|
|
14
15
|
string = string.replace(/\r\n/g, '\n');
|
|
@@ -56,18 +57,28 @@ var _utf8_decode = function _utf8_decode(utf_text) {
|
|
|
56
57
|
/*******
|
|
57
58
|
* @description: 字符加密
|
|
58
59
|
* @author: 琴时
|
|
59
|
-
* @param {
|
|
60
|
-
* @
|
|
60
|
+
* @param {*} input
|
|
61
|
+
* @param {String} key [盐值]
|
|
62
|
+
* @param {Number} expires [有效期/毫秒|不传则永久有效]
|
|
63
|
+
* @return {String} [''|null|undefined==>'']
|
|
61
64
|
*/
|
|
62
|
-
var encrypt = exports.encrypt = function encrypt(input, key) {
|
|
63
|
-
if (
|
|
65
|
+
var encrypt = exports.encrypt = function encrypt(input, key, expires) {
|
|
66
|
+
if ((0, _common.IsType)('Object', input) || (0, _common.IsType)('Array', input) || (0, _common.IsType)('Number', input)) {
|
|
67
|
+
input = JSON.stringify(input);
|
|
68
|
+
} else if (!input) return '';
|
|
64
69
|
// 取65位字符
|
|
65
70
|
var _keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
66
71
|
var output = '';
|
|
67
72
|
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
68
73
|
var i = 0;
|
|
69
74
|
input = _utf8_encode(input);
|
|
70
|
-
|
|
75
|
+
key = key || '';
|
|
76
|
+
if (expires) {
|
|
77
|
+
var et = Date.now() + Number(expires);
|
|
78
|
+
input = "".concat(et, ":").concat(key, ":").concat(input);
|
|
79
|
+
} else {
|
|
80
|
+
input = "".concat((0, _random.randomCode)(6), ":").concat(key, ":").concat(input);
|
|
81
|
+
}
|
|
71
82
|
while (i < input.length) {
|
|
72
83
|
chr1 = input.charCodeAt(i++);
|
|
73
84
|
chr2 = input.charCodeAt(i++);
|
|
@@ -90,6 +101,7 @@ var encrypt = exports.encrypt = function encrypt(input, key) {
|
|
|
90
101
|
* @description: 字符解密
|
|
91
102
|
* @author: 琴时
|
|
92
103
|
* @param {String} input
|
|
104
|
+
* @param {String} key [盐值]
|
|
93
105
|
* @return {String}
|
|
94
106
|
*/
|
|
95
107
|
var decrypt = exports.decrypt = function decrypt(input, key) {
|
|
@@ -118,21 +130,30 @@ var decrypt = exports.decrypt = function decrypt(input, key) {
|
|
|
118
130
|
}
|
|
119
131
|
}
|
|
120
132
|
output = _utf8_decode(output);
|
|
133
|
+
key = key || ''; // 盐值
|
|
121
134
|
var symbol = ":".concat(key, ":"); // 盐字段切割符号
|
|
122
|
-
|
|
135
|
+
output = output.split(symbol);
|
|
136
|
+
if (output.length === 1) return '';
|
|
137
|
+
if (output[0] > 6 && /^\d+$/.test(output[0])) {
|
|
138
|
+
var nt = Date.now();
|
|
139
|
+
if (nt > output[0]) return '';
|
|
140
|
+
}
|
|
141
|
+
return output[1] || '';
|
|
123
142
|
};
|
|
124
143
|
|
|
125
144
|
/*******
|
|
126
145
|
* @description: 校验加密字符
|
|
127
146
|
* @author: 琴时
|
|
128
|
-
* @param {
|
|
129
|
-
* @param {String} crypt
|
|
130
|
-
* @param {*} key
|
|
147
|
+
* @param {*} input [明文]
|
|
148
|
+
* @param {String} crypt [密文]
|
|
149
|
+
* @param {*} key [盐值]
|
|
131
150
|
* @return {Boolean}
|
|
132
151
|
*/
|
|
133
|
-
var checkCrypt = exports.checkCrypt = function checkCrypt(
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
var checkCrypt = exports.checkCrypt = function checkCrypt(input, crypt, key) {
|
|
153
|
+
if ((0, _common.IsType)('Object', input) || (0, _common.IsType)('Array', input) || (0, _common.IsType)('Number', input)) {
|
|
154
|
+
input = JSON.stringify(input);
|
|
155
|
+
}
|
|
156
|
+
return input === decrypt(crypt, key);
|
|
136
157
|
};
|
|
137
158
|
|
|
138
159
|
/*******
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* 新API */
|
|
4
|
+
// 1. 深克隆测试
|
|
5
|
+
var objectDeepClone = function objectDeepClone() {
|
|
6
|
+
var obj = {
|
|
7
|
+
id: 1,
|
|
8
|
+
name: '张三',
|
|
9
|
+
sex: '男',
|
|
10
|
+
age: 30,
|
|
11
|
+
child: {
|
|
12
|
+
name: '李四',
|
|
13
|
+
sex: '男',
|
|
14
|
+
age: 18
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var cloneObj = structuredClone(obj);
|
|
18
|
+
cloneObj.child.name = '王五';
|
|
19
|
+
};
|
package/lib/utils/time.js
CHANGED
|
@@ -19,13 +19,15 @@ _dayjs["default"].locale('zh-cn'); // 全局使用
|
|
|
19
19
|
* @return {Date}
|
|
20
20
|
*/
|
|
21
21
|
var createDate = exports.createDate = function createDate(date) {
|
|
22
|
-
var
|
|
23
|
-
var
|
|
22
|
+
var regexS = /^\d*$/; // 判断是否为时间戳
|
|
23
|
+
var regexT = /^(?=.*T)(?=.*).*$/; // 判断是否为时间字符串==>2021-05-19T16:00:00.000Z
|
|
24
|
+
var regexC = /[\u4e00-\u9fa5]/; // 判断是否存在中文 ==> Thu May 20 2021 00:00:00 GMT+0800 (中国标准时间)
|
|
24
25
|
if (!date) return new Date(); // 不传参数
|
|
25
|
-
if (
|
|
26
|
-
// 时间戳
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
if (regexS.test(date)) {
|
|
27
|
+
date = parseInt(date); // 时间戳
|
|
28
|
+
} else if (regexC.test(date)) {
|
|
29
|
+
date = Date.parse(date);
|
|
30
|
+
} else if (typeof date === 'string' && !regexT.test(date)) {
|
|
29
31
|
//兼容ios: 将时间字符串中的'-'替换成'/' 2021-05-20 00:00:00=>2021/05/20 00:00:00
|
|
30
32
|
date = "".concat(date).replace(/-/g, '/');
|
|
31
33
|
}
|