@ivujs/i-utils 2.0.0 → 2.1.1

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.
Files changed (228) hide show
  1. package/README.md +40 -42
  2. package/dist/cjs/ID-card/index.cjs +21 -13
  3. package/dist/cjs/array/index.cjs +40 -34
  4. package/dist/cjs/clipboard/index.cjs +14 -10
  5. package/dist/cjs/color/index.cjs +73 -59
  6. package/dist/cjs/constants/date.cjs +55 -1
  7. package/dist/cjs/constants/id-card.cjs +42 -1
  8. package/dist/cjs/constants/keycode.cjs +117 -2
  9. package/dist/cjs/constants/lang.cjs +7 -1
  10. package/dist/cjs/constants/math.cjs +9 -1
  11. package/dist/cjs/constants/regexp.cjs +33 -10
  12. package/dist/cjs/constants/sort.cjs +10 -1
  13. package/dist/cjs/cookie/index.cjs +16 -13
  14. package/dist/cjs/crypto/base64/base64.cjs +398 -206
  15. package/dist/cjs/crypto/base64/index.cjs +58 -35
  16. package/dist/cjs/crypto/md5/index.cjs +33 -8
  17. package/dist/cjs/crypto/md5/md5.cjs +298 -844
  18. package/dist/cjs/crypto/sha256/index.cjs +95 -0
  19. package/dist/cjs/crypto/sha256/sha256.cjs +557 -0
  20. package/dist/cjs/crypto/sm3/index.cjs +27 -0
  21. package/dist/cjs/crypto/sm3/sm3.cjs +200 -0
  22. package/dist/cjs/crypto/sm4/index.cjs +101 -0
  23. package/dist/cjs/crypto/sm4/sm4.cjs +498 -0
  24. package/dist/cjs/date/index.cjs +420 -340
  25. package/dist/cjs/desensitized/index.cjs +21 -18
  26. package/dist/cjs/device/index.cjs +33 -30
  27. package/dist/cjs/dom/index.cjs +26 -23
  28. package/dist/cjs/file/index.cjs +51 -41
  29. package/dist/cjs/function/index.cjs +22 -19
  30. package/dist/cjs/id/index.cjs +6 -2
  31. package/dist/cjs/index.cjs +110 -127
  32. package/dist/cjs/keycode/index.cjs +9 -12
  33. package/dist/cjs/math/index.cjs +113 -81
  34. package/dist/cjs/number/index.cjs +10 -7
  35. package/dist/cjs/object/index.cjs +77 -30
  36. package/dist/cjs/pagination/index.cjs +25 -10
  37. package/dist/cjs/random/index.cjs +8 -5
  38. package/dist/cjs/regexp/index.cjs +23 -20
  39. package/dist/cjs/storage/index.cjs +4 -1
  40. package/dist/cjs/storage/localStorage.cjs +5 -5
  41. package/dist/cjs/storage/sessionStorage.cjs +6 -6
  42. package/dist/cjs/string/index.cjs +66 -63
  43. package/dist/cjs/url/index.cjs +83 -80
  44. package/dist/cjs/validate/index.cjs +122 -106
  45. package/dist/es/ID-card/index.d.ts +19 -14
  46. package/dist/es/ID-card/index.mjs +22 -14
  47. package/dist/es/array/index.d.ts +56 -50
  48. package/dist/es/array/index.mjs +40 -34
  49. package/dist/es/clipboard/index.d.ts +10 -7
  50. package/dist/es/clipboard/index.mjs +14 -10
  51. package/dist/es/color/index.d.ts +28 -25
  52. package/dist/es/color/index.mjs +73 -59
  53. package/dist/es/constants/date.d.ts +58 -174
  54. package/dist/es/constants/date.mjs +55 -1
  55. package/dist/es/constants/id-card.d.ts +45 -43
  56. package/dist/es/constants/id-card.mjs +42 -1
  57. package/dist/es/constants/index.d.ts +11 -7
  58. package/dist/es/constants/keycode.d.ts +119 -103
  59. package/dist/es/constants/keycode.mjs +117 -2
  60. package/dist/es/constants/lang.d.ts +10 -4
  61. package/dist/es/constants/lang.mjs +7 -1
  62. package/dist/es/constants/math.d.ts +12 -4
  63. package/dist/es/constants/math.mjs +9 -1
  64. package/dist/es/constants/regexp.d.ts +27 -24
  65. package/dist/es/constants/regexp.mjs +33 -10
  66. package/dist/es/constants/sort.d.ts +13 -5
  67. package/dist/es/constants/sort.mjs +10 -1
  68. package/dist/es/cookie/index.d.ts +13 -13
  69. package/dist/es/cookie/index.mjs +16 -13
  70. package/dist/es/crypto/base64/base64.d.ts +8 -5
  71. package/dist/es/crypto/base64/base64.mjs +393 -204
  72. package/dist/es/crypto/base64/index.d.ts +41 -24
  73. package/dist/es/crypto/base64/index.mjs +53 -32
  74. package/dist/es/crypto/index.d.ts +8 -8
  75. package/dist/es/crypto/md5/index.d.ts +20 -7
  76. package/dist/es/crypto/md5/index.mjs +32 -9
  77. package/dist/es/crypto/md5/md5.d.ts +9 -142
  78. package/dist/es/crypto/md5/md5.mjs +299 -844
  79. package/dist/es/crypto/sha256/index.d.ts +52 -0
  80. package/dist/es/crypto/sha256/index.mjs +86 -0
  81. package/dist/es/crypto/sha256/sha256.d.ts +82 -0
  82. package/dist/es/crypto/sha256/sha256.mjs +548 -0
  83. package/dist/es/crypto/sm3/index.d.ts +13 -0
  84. package/dist/es/crypto/sm3/index.mjs +24 -0
  85. package/dist/es/crypto/sm3/sm3.d.ts +3 -0
  86. package/dist/es/crypto/sm3/sm3.mjs +197 -0
  87. package/dist/es/crypto/sm4/index.d.ts +56 -0
  88. package/dist/es/crypto/sm4/index.mjs +95 -0
  89. package/dist/es/crypto/sm4/sm4.d.ts +48 -0
  90. package/dist/es/crypto/sm4/sm4.mjs +490 -0
  91. package/dist/es/date/index.d.ts +269 -179
  92. package/dist/es/date/index.mjs +417 -340
  93. package/dist/es/desensitized/index.d.ts +26 -23
  94. package/dist/es/desensitized/index.mjs +21 -18
  95. package/dist/es/device/index.d.ts +31 -25
  96. package/dist/es/device/index.mjs +33 -30
  97. package/dist/es/dom/index.d.ts +32 -29
  98. package/dist/es/dom/index.mjs +26 -23
  99. package/dist/es/file/index.d.ts +30 -30
  100. package/dist/es/file/index.mjs +51 -41
  101. package/dist/es/function/index.d.ts +10 -7
  102. package/dist/es/function/index.mjs +22 -19
  103. package/dist/es/id/index.d.ts +3 -0
  104. package/dist/es/id/index.mjs +6 -2
  105. package/dist/es/index.d.ts +24 -25
  106. package/dist/es/index.mjs +6 -23
  107. package/dist/es/keycode/index.d.ts +6 -6
  108. package/dist/es/keycode/index.mjs +9 -12
  109. package/dist/es/math/index.d.ts +37 -37
  110. package/dist/es/math/index.mjs +113 -81
  111. package/dist/es/number/index.d.ts +7 -7
  112. package/dist/es/number/index.mjs +10 -7
  113. package/dist/es/object/index.d.ts +20 -19
  114. package/dist/es/object/index.mjs +77 -30
  115. package/dist/es/pagination/index.d.ts +39 -6
  116. package/dist/es/pagination/index.mjs +25 -10
  117. package/dist/es/random/index.d.ts +10 -7
  118. package/dist/es/random/index.mjs +8 -5
  119. package/dist/es/regexp/index.d.ts +30 -30
  120. package/dist/es/regexp/index.mjs +23 -20
  121. package/dist/es/storage/index.d.ts +10 -4
  122. package/dist/es/storage/index.mjs +4 -1
  123. package/dist/es/storage/localStorage.d.ts +9 -9
  124. package/dist/es/storage/localStorage.mjs +5 -5
  125. package/dist/es/storage/sessionStorage.d.ts +9 -9
  126. package/dist/es/storage/sessionStorage.mjs +6 -6
  127. package/dist/es/string/index.d.ts +62 -59
  128. package/dist/es/string/index.mjs +66 -63
  129. package/dist/es/url/index.d.ts +65 -65
  130. package/dist/es/url/index.mjs +83 -80
  131. package/dist/es/validate/index.d.ts +83 -80
  132. package/dist/es/validate/index.mjs +122 -106
  133. package/dist/index.d.ts +2643 -2803
  134. package/dist/lib/index.full.umd.js +3609 -9494
  135. package/dist/lib/index.full.umd.min.js +2 -64
  136. package/dist/lib/index.full.umd.min.js.map +1 -1
  137. package/dist/resolver/auto-imports.cjs +40 -31
  138. package/dist/resolver/auto-imports.mjs +40 -31
  139. package/dist/resolver/index.cjs +1 -2
  140. package/dist/resolver/index.d.ts +1 -1
  141. package/dist/resolver/index.mjs +1 -2
  142. package/package.json +96 -90
  143. package/dist/cjs/crypto/aes/aes.cjs +0 -480
  144. package/dist/cjs/crypto/aes/index.cjs +0 -27
  145. package/dist/cjs/crypto/base32/base32.cjs +0 -357
  146. package/dist/cjs/crypto/base32/index.cjs +0 -41
  147. package/dist/cjs/crypto/des/des.cjs +0 -257
  148. package/dist/cjs/crypto/des/index.cjs +0 -28
  149. package/dist/cjs/crypto/sha/sha1/index.cjs +0 -24
  150. package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -529
  151. package/dist/cjs/crypto/sha/sha256/index.cjs +0 -43
  152. package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -595
  153. package/dist/cjs/crypto/sha/sha3/index.cjs +0 -41
  154. package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -624
  155. package/dist/cjs/crypto/sha/sha512/index.cjs +0 -81
  156. package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -950
  157. package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -149
  158. package/dist/cjs/crypto/sm/lib/ec.cjs +0 -315
  159. package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1608
  160. package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -158
  161. package/dist/cjs/crypto/sm/lib/utils.cjs +0 -170
  162. package/dist/cjs/crypto/sm/sm2/index.cjs +0 -112
  163. package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -231
  164. package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
  165. package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -93
  166. package/dist/cjs/crypto/sm/sm4/index.cjs +0 -27
  167. package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -327
  168. package/dist/cjs/crypto/tea/index.cjs +0 -25
  169. package/dist/cjs/crypto/tea/tea.cjs +0 -187
  170. package/dist/cjs/weapp/index.cjs +0 -142
  171. package/dist/es/crypto/aes/aes.d.ts +0 -156
  172. package/dist/es/crypto/aes/aes.mjs +0 -478
  173. package/dist/es/crypto/aes/index.d.ts +0 -16
  174. package/dist/es/crypto/aes/index.mjs +0 -24
  175. package/dist/es/crypto/base32/base32.d.ts +0 -3
  176. package/dist/es/crypto/base32/base32.mjs +0 -353
  177. package/dist/es/crypto/base32/index.d.ts +0 -24
  178. package/dist/es/crypto/base32/index.mjs +0 -36
  179. package/dist/es/crypto/des/des.d.ts +0 -52
  180. package/dist/es/crypto/des/des.mjs +0 -255
  181. package/dist/es/crypto/des/index.d.ts +0 -14
  182. package/dist/es/crypto/des/index.mjs +0 -25
  183. package/dist/es/crypto/sha/index.d.ts +0 -4
  184. package/dist/es/crypto/sha/sha1/index.d.ts +0 -13
  185. package/dist/es/crypto/sha/sha1/index.mjs +0 -21
  186. package/dist/es/crypto/sha/sha1/sha1.d.ts +0 -2
  187. package/dist/es/crypto/sha/sha1/sha1.mjs +0 -526
  188. package/dist/es/crypto/sha/sha256/index.d.ts +0 -26
  189. package/dist/es/crypto/sha/sha256/index.mjs +0 -38
  190. package/dist/es/crypto/sha/sha256/sha256.d.ts +0 -4
  191. package/dist/es/crypto/sha/sha256/sha256.mjs +0 -590
  192. package/dist/es/crypto/sha/sha3/index.d.ts +0 -24
  193. package/dist/es/crypto/sha/sha3/index.mjs +0 -36
  194. package/dist/es/crypto/sha/sha3/sha3.d.ts +0 -4
  195. package/dist/es/crypto/sha/sha3/sha3.mjs +0 -619
  196. package/dist/es/crypto/sha/sha512/index.d.ts +0 -52
  197. package/dist/es/crypto/sha/sha512/index.mjs +0 -72
  198. package/dist/es/crypto/sha/sha512/sha512.d.ts +0 -8
  199. package/dist/es/crypto/sha/sha512/sha512.mjs +0 -941
  200. package/dist/es/crypto/sm/index.d.ts +0 -3
  201. package/dist/es/crypto/sm/lib/asn1.d.ts +0 -12
  202. package/dist/es/crypto/sm/lib/asn1.mjs +0 -146
  203. package/dist/es/crypto/sm/lib/ec.d.ts +0 -126
  204. package/dist/es/crypto/sm/lib/ec.mjs +0 -312
  205. package/dist/es/crypto/sm/lib/jsbn.d.ts +0 -198
  206. package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1605
  207. package/dist/es/crypto/sm/lib/sm3.d.ts +0 -5
  208. package/dist/es/crypto/sm/lib/sm3.mjs +0 -155
  209. package/dist/es/crypto/sm/lib/utils.d.ts +0 -53
  210. package/dist/es/crypto/sm/lib/utils.mjs +0 -158
  211. package/dist/es/crypto/sm/sm2/index.d.ts +0 -71
  212. package/dist/es/crypto/sm/sm2/index.mjs +0 -101
  213. package/dist/es/crypto/sm/sm2/sm2.d.ts +0 -34
  214. package/dist/es/crypto/sm/sm2/sm2.mjs +0 -220
  215. package/dist/es/crypto/sm/sm3/index.d.ts +0 -7
  216. package/dist/es/crypto/sm/sm3/index.mjs +0 -13
  217. package/dist/es/crypto/sm/sm3/sm3.d.ts +0 -1
  218. package/dist/es/crypto/sm/sm3/sm3.mjs +0 -91
  219. package/dist/es/crypto/sm/sm4/index.d.ts +0 -16
  220. package/dist/es/crypto/sm/sm4/index.mjs +0 -24
  221. package/dist/es/crypto/sm/sm4/sm4.d.ts +0 -2
  222. package/dist/es/crypto/sm/sm4/sm4.mjs +0 -324
  223. package/dist/es/crypto/tea/index.d.ts +0 -14
  224. package/dist/es/crypto/tea/index.mjs +0 -22
  225. package/dist/es/crypto/tea/tea.d.ts +0 -69
  226. package/dist/es/crypto/tea/tea.mjs +0 -185
  227. package/dist/es/weapp/index.d.ts +0 -57
  228. package/dist/es/weapp/index.mjs +0 -131
@@ -1,9 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ /**
4
+ * @module 校验
5
+ */
3
6
  /**
4
7
  * 判断是整数
5
8
  * @param {*} value 参数
6
- * @returns {Boolean} result 返回结果
9
+ * @returns {boolean} result 返回结果
7
10
  */
8
11
  function isInteger(value) {
9
12
  return Number.isInteger(value);
@@ -11,15 +14,15 @@ function isInteger(value) {
11
14
  /**
12
15
  * 判断是小数
13
16
  * @param {*} value 参数
14
- * @returns {Boolean} result 返回结果
17
+ * @returns {boolean} result 返回结果
15
18
  */
16
19
  function isDecimal(value) {
17
20
  return /^\d+\.\d+$/.test(value);
18
21
  }
19
22
  /**
20
23
  * 判断类型是数字 Number
21
- * @param {Number} value 参数
22
- * @returns {Boolean} 返回结果
24
+ * @param {*} value 参数
25
+ * @returns {boolean} 返回结果
23
26
  */
24
27
  function isNumber(value) {
25
28
  return Object.prototype.toString.call(value).slice(8, -1) === "Number";
@@ -27,7 +30,7 @@ function isNumber(value) {
27
30
  /**
28
31
  * 判断类型是字符串 String
29
32
  * @param {*} value 参数
30
- * @returns {Boolean} 返回结果
33
+ * @returns {boolean} 返回结果
31
34
  */
32
35
  function isString(value) {
33
36
  return Object.prototype.toString.call(value).slice(8, -1) === "String";
@@ -35,7 +38,7 @@ function isString(value) {
35
38
  /**
36
39
  * 判断类型是数组 Array
37
40
  * @param {*} value 参数
38
- * @returns {Boolean} 返回结果
41
+ * @returns {boolean} 返回结果
39
42
  */
40
43
  function isArray(value) {
41
44
  return Object.prototype.toString.call(value).slice(8, -1) === "Array";
@@ -43,23 +46,23 @@ function isArray(value) {
43
46
  /**
44
47
  * 判断类型是对象 Object
45
48
  * @param {*} value 参数
46
- * @returns {Boolean} 返回结果
49
+ * @returns {boolean} 返回结果
47
50
  */
48
51
  function isObject(value) {
49
52
  return Object.prototype.toString.call(value).slice(8, -1) === "Object";
50
53
  }
51
54
  /**
52
- * 判断类型是布尔 Boolean
55
+ * 判断类型是布尔 boolean
53
56
  * @param {*} value 参数
54
- * @returns {Boolean} 返回结果
57
+ * @returns {boolean} 返回结果
55
58
  */
56
59
  function isBoolean(value) {
57
- return Object.prototype.toString.call(value).slice(8, -1) === "Boolean";
60
+ return Object.prototype.toString.call(value).slice(8, -1) === "boolean";
58
61
  }
59
62
  /**
60
63
  * 判断类型是日期 Date
61
64
  * @param {*} value 参数
62
- * @returns {Boolean} 返回结果
65
+ * @returns {boolean} 返回结果
63
66
  */
64
67
  function isDate(value) {
65
68
  return Object.prototype.toString.call(value).slice(8, -1) === "Date";
@@ -67,7 +70,7 @@ function isDate(value) {
67
70
  /**
68
71
  * 判断类型是函数 Function
69
72
  * @param {*} value 参数
70
- * @returns {Boolean} 返回结果
73
+ * @returns {boolean} 返回结果
71
74
  */
72
75
  function isFunction(value) {
73
76
  return Object.prototype.toString.call(value).slice(8, -1) === "Function";
@@ -76,12 +79,12 @@ function isFunction(value) {
76
79
  * 判断类型是函数字符串 FunctionString
77
80
  * @description 支持普通函数,异步函数,箭头函数
78
81
  * @param {*} value 参数
79
- * @returns {Boolean} 返回结果
82
+ * @returns {boolean} 返回结果
80
83
  */
81
84
  function isFunctionString(value) {
82
85
  if (value) {
83
86
  try {
84
- let fn = new Function(`return ${value}`)();
87
+ const fn = new Function(`return ${value}`)();
85
88
  return typeof fn === "function";
86
89
  }
87
90
  catch (e) {
@@ -96,7 +99,7 @@ function isFunctionString(value) {
96
99
  /**
97
100
  * 判断类型是异步函数 AsyncFunction
98
101
  * @param {*} value 参数
99
- * @returns {Boolean} 返回结果
102
+ * @returns {boolean} 返回结果
100
103
  */
101
104
  function isAsyncFunction(value) {
102
105
  return Object.prototype.toString.call(value).slice(8, -1) === "AsyncFunction";
@@ -104,7 +107,7 @@ function isAsyncFunction(value) {
104
107
  /**
105
108
  * 判断类型是 Symbol
106
109
  * @param {*} value 参数
107
- * @returns {Boolean} 返回结果
110
+ * @returns {boolean} 返回结果
108
111
  */
109
112
  function isSymbol(value) {
110
113
  return Object.prototype.toString.call(value).slice(8, -1) === "Symbol";
@@ -112,7 +115,7 @@ function isSymbol(value) {
112
115
  /**
113
116
  * 判断类型是正则 RegExp
114
117
  * @param {*} value 参数
115
- * @returns {Boolean} 返回结果
118
+ * @returns {boolean} 返回结果
116
119
  */
117
120
  function isRegExp(value) {
118
121
  return Object.prototype.toString.call(value).slice(8, -1) === "RegExp";
@@ -120,7 +123,7 @@ function isRegExp(value) {
120
123
  /**
121
124
  * 判断类型是错误 Error
122
125
  * @param {*} value 参数
123
- * @returns {Boolean} 返回结果
126
+ * @returns {boolean} 返回结果
124
127
  */
125
128
  function isError(value) {
126
129
  return Object.prototype.toString.call(value).slice(8, -1) === "Error";
@@ -128,7 +131,7 @@ function isError(value) {
128
131
  /**
129
132
  * 判断类型是 Promise
130
133
  * @param {*} value 参数
131
- * @returns {Boolean} 返回结果
134
+ * @returns {boolean} 返回结果
132
135
  */
133
136
  function isPromise(value) {
134
137
  return Object.prototype.toString.call(value).slice(8, -1) === "Promise";
@@ -136,7 +139,7 @@ function isPromise(value) {
136
139
  /**
137
140
  *判断类型是 Map
138
141
  * @param {*} value 参数
139
- * @returns {Boolean} 返回结果
142
+ * @returns {boolean} 返回结果
140
143
  */
141
144
  function isMap(value) {
142
145
  return Object.prototype.toString.call(value).slice(8, -1) === "Map";
@@ -144,7 +147,7 @@ function isMap(value) {
144
147
  /**
145
148
  * 判断类型是 WeakMap
146
149
  * @param {*} value 参数
147
- * @returns {Boolean} 返回结果
150
+ * @returns {boolean} 返回结果
148
151
  */
149
152
  function isWeakMap(value) {
150
153
  return Object.prototype.toString.call(value).slice(8, -1) === "WeakMap";
@@ -152,7 +155,7 @@ function isWeakMap(value) {
152
155
  /**
153
156
  * 判断类型是 Set
154
157
  * @param {*} value 参数
155
- * @returns {Boolean} 返回结果
158
+ * @returns {boolean} 返回结果
156
159
  */
157
160
  function isSet(value) {
158
161
  return Object.prototype.toString.call(value).slice(8, -1) === "Set";
@@ -160,7 +163,7 @@ function isSet(value) {
160
163
  /**
161
164
  * 判断类型是 WeakSet
162
165
  * @param {*} value 参数
163
- * @returns {Boolean} 返回结果
166
+ * @returns {boolean} 返回结果
164
167
  */
165
168
  function isWeakSet(value) {
166
169
  return Object.prototype.toString.call(value).slice(8, -1) === "WeakSet";
@@ -168,7 +171,7 @@ function isWeakSet(value) {
168
171
  /**
169
172
  * 判断类型是 BigInt
170
173
  * @param {*} value 参数
171
- * @returns {Boolean} 返回结果
174
+ * @returns {boolean} 返回结果
172
175
  */
173
176
  function isBigInt(value) {
174
177
  return Object.prototype.toString.call(value).slice(8, -1) === "BigInt";
@@ -176,7 +179,7 @@ function isBigInt(value) {
176
179
  /**
177
180
  * 判断类型是 Json
178
181
  * @param {*} value 参数
179
- * @returns {Boolean} 返回结果
182
+ * @returns {boolean} 返回结果
180
183
  */
181
184
  function isJson(value) {
182
185
  try {
@@ -191,7 +194,7 @@ function isJson(value) {
191
194
  /**
192
195
  * 判断值为真
193
196
  * @param {*} value 校验的参数
194
- * @returns {Boolean} 返回结果
197
+ * @returns {boolean} 返回结果
195
198
  */
196
199
  function isTrue(value) {
197
200
  return !isFalse(value);
@@ -199,7 +202,7 @@ function isTrue(value) {
199
202
  /**
200
203
  * 判断值为假
201
204
  * @param {*} value 校验的参数
202
- * @returns {Boolean} 返回结果
205
+ * @returns {boolean} 返回结果
203
206
  */
204
207
  function isFalse(value) {
205
208
  return (value === undefined ||
@@ -213,7 +216,7 @@ function isFalse(value) {
213
216
  /**
214
217
  * 判断非数字
215
218
  * @param {*} value 参数
216
- * @returns {Boolean} 返回结果
219
+ * @returns {boolean} 返回结果
217
220
  */
218
221
  function isNaN(value) {
219
222
  // window的isNaN函数是有缺陷的,空数组/数组有一个元素,null,空字符串 都会被认为是数字
@@ -223,7 +226,7 @@ function isNaN(value) {
223
226
  * 判断是数字
224
227
  * @description 等同于isNumber()
225
228
  * @param {*} value 参数
226
- * @returns {Boolean} 返回结果
229
+ * @returns {boolean} 返回结果
227
230
  */
228
231
  function isNotNaN(value) {
229
232
  return !isNaN(value);
@@ -232,7 +235,7 @@ function isNotNaN(value) {
232
235
  * 判断对象为空
233
236
  * @description 判断值是否为空,如果对象初始化了值则不为空
234
237
  * @param {*} value 校验的参数
235
- * @returns {Boolean} 返回结果
238
+ * @returns {boolean} 返回结果
236
239
  */
237
240
  function isNull(value) {
238
241
  return value === undefined || value === null || value === "";
@@ -241,7 +244,7 @@ function isNull(value) {
241
244
  * 判断对象不为空
242
245
  * @description 判断值是否为空,如果对象初始化了值则不为空
243
246
  * @param {*} value 校验的参数
244
- * @returns {Boolean} 返回结果
247
+ * @returns {boolean} 返回结果
245
248
  */
246
249
  function isNotNull(value) {
247
250
  return !isNull(value);
@@ -250,7 +253,7 @@ function isNotNull(value) {
250
253
  * 判断值为空
251
254
  * @description 判断是否是有意义不为空的值,如果值是{},[]空的数据则为空
252
255
  * @param {*} value 校验的参数
253
- * @returns {Boolean} 返回结果
256
+ * @returns {boolean} 返回结果
254
257
  */
255
258
  function isEmpty(value) {
256
259
  if (isNull(value))
@@ -273,7 +276,7 @@ function isEmpty(value) {
273
276
  * 判断值不为空
274
277
  * @description 判断是否是有意义不为空的值,如果值是{},[]空的数据则为空
275
278
  * @param {*} value 校验的参数
276
- * @returns {Boolean} 返回结果
279
+ * @returns {boolean} 返回结果
277
280
  */
278
281
  function isNotEmpty(value) {
279
282
  return !isEmpty(value);
@@ -282,7 +285,7 @@ function isNotEmpty(value) {
282
285
  * 判断值是空白的
283
286
  * @description 同时会校验空值,空对象,以及空白符号
284
287
  * @param {*} value 校验的参数
285
- * @returns {Boolean} 返回结果
288
+ * @returns {boolean} 返回结果
286
289
  */
287
290
  function isBlank(value) {
288
291
  return isEmpty(value) || /^\s*$/.test(value);
@@ -291,7 +294,7 @@ function isBlank(value) {
291
294
  * 判断值不是空白的
292
295
  * @description 同时会校验空值,空对象,以及空白符号
293
296
  * @param {*} value 校验的参数
294
- * @returns {Boolean} 返回结果
297
+ * @returns {boolean} 返回结果
295
298
  */
296
299
  function isNotBlank(value) {
297
300
  return !isBlank(value);
@@ -299,7 +302,7 @@ function isNotBlank(value) {
299
302
  /**
300
303
  * 判断值是undefined
301
304
  * @param {*} value 校验的参数
302
- * @returns {Boolean} 返回结果
305
+ * @returns {boolean} 返回结果
303
306
  */
304
307
  function isUndefined(value) {
305
308
  return value === undefined;
@@ -307,7 +310,7 @@ function isUndefined(value) {
307
310
  /**
308
311
  * 判断值不是undefined
309
312
  * @param {*} value 校验的参数
310
- * @returns {Boolean} 返回结果
313
+ * @returns {boolean} 返回结果
311
314
  */
312
315
  function isNotUndefined(value) {
313
316
  return !isUndefined(value);
@@ -315,115 +318,128 @@ function isNotUndefined(value) {
315
318
  /* 数据比较 */
316
319
  /**
317
320
  * 判断两个值是否相等
318
- * @param {String|Number} value1 参数1
319
- * @param {String|Number} value2 参数2
320
- * @returns {Boolean} 返回结果
321
+ * @param {*} value1 参数1
322
+ * @param {*} value2 参数2
323
+ * @returns {boolean} 返回结果
321
324
  */
322
325
  function equals(value1, value2) {
323
326
  return Object.is(value1, value2);
324
327
  }
325
328
  /**
326
329
  * 判断两个值是否相等(忽略大小写)
327
- * @param {String|Number} value1 参数1
328
- * @param {String|Number} value2 参数2
329
- * @returns {Boolean} 返回结果
330
+ * @param {*} value1 参数1
331
+ * @param {*} value2 参数2
332
+ * @returns {boolean} 返回结果
330
333
  */
331
334
  function equalsIgnoreCase(value1, value2) {
332
335
  return Object.is(value1.toLowerCase(), value2.toLowerCase());
333
336
  }
334
337
  /**
335
338
  * 深度对比数据
336
- * @description 可以对比任意数据,对象,数组,日期等也可深度对比,对象不区分先后顺序
339
+ * @description 可以对比任意数据,对象、数组、日期等也可深度对比,对象不区分先后顺序
337
340
  * @param {*} x 数据1
338
- * @param {*} y 数据2
339
- * @returns {Boolean} 返回结果
340
- */
341
- function deepCompare(x, y) {
342
- let i, l, leftChain, rightChain;
343
- function compare2Objects(x, y) {
344
- let p;
345
- // remember that NaN === NaN returns false
346
- // and isNaN(undefined) returns true
347
- if (isNaN(x) && isNaN(y) && typeof x === "number" && typeof y === "number") {
341
+ * @param {*} args 数据2
342
+ * @returns {boolean} 返回对比结果
343
+ */
344
+ function deepCompare(x, ...args) {
345
+ let leftChain = [];
346
+ let rightChain = [];
347
+ // 核心对比函数(添加严格类型标注)
348
+ const compare2Objects = (xObj, yObj) => {
349
+ // 1. 处理 NaN 特殊场景(NaN === NaN 返回 false,需单独判断)
350
+ if (Number.isNaN(xObj) && Number.isNaN(yObj)) {
348
351
  return true;
349
352
  }
350
- // Compare primitives and functions.
351
- // Check if both arguments link to the same object.
352
- // Especially useful on the step where we compare prototypes
353
- if (x === y) {
353
+ // 2. 原始类型/引用同一对象 直接对比
354
+ if (xObj === yObj) {
354
355
  return true;
355
356
  }
356
- // Works in case when functions are created in constructor.
357
- // Comparing dates is a common scenario. Another built-ins?
358
- // We can even handle functions passed across iframes
359
- if ((typeof x === "function" && typeof y === "function") ||
360
- (x instanceof Date && y instanceof Date) ||
361
- (x instanceof RegExp && y instanceof RegExp) ||
362
- (x instanceof String && y instanceof String) ||
363
- (x instanceof Number && y instanceof Number)) {
364
- return x.toString() === y.toString();
357
+ // 3. 特殊内置对象对比(函数/日期/正则/包装对象)
358
+ const typeOfX = typeof xObj;
359
+ const typeOfY = typeof yObj;
360
+ // 函数对比:通过 toString 比较内容
361
+ if (typeOfX === "function" && typeOfY === "function") {
362
+ return xObj.toString() === yObj.toString();
363
+ }
364
+ // 日期对象对比:时间戳一致则相等
365
+ if (xObj instanceof Date && yObj instanceof Date) {
366
+ return xObj.getTime() === yObj.getTime();
365
367
  }
366
- // At last checking prototypes as good as we can
367
- if (!(x instanceof Object && y instanceof Object)) {
368
+ // 正则对象对比:源文本+标志位一致则相等
369
+ if (xObj instanceof RegExp && yObj instanceof RegExp) {
370
+ return xObj.source === yObj.source && xObj.flags === yObj.flags;
371
+ }
372
+ // 字符串/数字包装对象对比
373
+ if ((xObj instanceof String && yObj instanceof String) || (xObj instanceof Number && yObj instanceof Number)) {
374
+ return xObj.toString() === yObj.toString();
375
+ }
376
+ // 4. 非对象类型(排除上述特殊类型后)直接返回 false
377
+ if (!(xObj instanceof Object && yObj instanceof Object)) {
368
378
  return false;
369
379
  }
370
- if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {
380
+ // 5. 原型链/构造函数校验
381
+ if (xObj.isPrototypeOf(yObj) || yObj.isPrototypeOf(xObj)) {
371
382
  return false;
372
383
  }
373
- if (x.constructor !== y.constructor) {
384
+ if (xObj.constructor !== yObj.constructor) {
374
385
  return false;
375
386
  }
376
- if (x.prototype !== y.prototype) {
387
+ if (xObj.prototype !== yObj.prototype) {
377
388
  return false;
378
389
  }
379
- // Check for infinitive linking loops
380
- if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {
390
+ // 6. 循环引用检测(避免无限递归)
391
+ if (leftChain.includes(xObj) || rightChain.includes(yObj)) {
381
392
  return false;
382
393
  }
383
- // Quick checking of one object being a subset of another.
384
- for (p in y) {
385
- if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
394
+ // 7. 遍历对象属性,对比键存在性和类型
395
+ const xObjKeys = Object.keys(xObj);
396
+ const yObjKeys = Object.keys(yObj);
397
+ // 先对比属性数量(数量不同直接不相等)
398
+ if (xObjKeys.length !== yObjKeys.length) {
399
+ return false;
400
+ }
401
+ // 遍历所有属性,校验存在性、类型、值
402
+ for (const p of yObjKeys) {
403
+ if (Object.prototype.hasOwnProperty.call(xObj, p) !== Object.prototype.hasOwnProperty.call(yObj, p)) {
386
404
  return false;
387
405
  }
388
- else if (typeof y[p] !== typeof x[p]) {
406
+ const xProp = xObj[p];
407
+ const yProp = yObj[p];
408
+ if (typeof xProp !== typeof yProp) {
389
409
  return false;
390
410
  }
391
411
  }
392
- for (p in x) {
393
- if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
394
- return false;
395
- }
396
- else if (typeof y[p] !== typeof x[p]) {
397
- return false;
412
+ // 深度对比属性值
413
+ for (const p of xObjKeys) {
414
+ const xProp = xObj[p];
415
+ const yProp = yObj[p];
416
+ if (typeof xProp === "object" || typeof xProp === "function") {
417
+ leftChain.push(xObj);
418
+ rightChain.push(yObj);
419
+ if (!compare2Objects(xProp, yProp)) {
420
+ return false;
421
+ }
422
+ leftChain.pop();
423
+ rightChain.pop();
398
424
  }
399
- switch (typeof x[p]) {
400
- case "object":
401
- case "function":
402
- leftChain.push(x);
403
- rightChain.push(y);
404
- if (!compare2Objects(x[p], y[p])) {
405
- return false;
406
- }
407
- leftChain.pop();
408
- rightChain.pop();
409
- break;
410
- default:
411
- if (x[p] !== y[p]) {
412
- return false;
413
- }
414
- break;
425
+ else {
426
+ if (xProp !== yProp) {
427
+ return false;
428
+ }
415
429
  }
416
430
  }
417
431
  return true;
432
+ };
433
+ // 边界处理:参数数量不足时的兜底
434
+ if (arguments.length < 2) {
435
+ console.warn("deepCompare 需要至少两个对比参数");
436
+ return true;
418
437
  }
419
- if (arguments.length < 1) {
420
- return true; // Die silently? Don't know how to handle such case, please help...
421
- // throw "Need two or more arguments to compare";
422
- }
423
- for (i = 1, l = arguments.length; i < l; i++) {
438
+ // 遍历所有传入的参数(支持对比多个值)
439
+ for (const y of args) {
424
440
  leftChain = [];
425
441
  rightChain = [];
426
- if (!compare2Objects(arguments[0], arguments[i])) {
442
+ if (!compare2Objects(x, y)) {
427
443
  return false;
428
444
  }
429
445
  }
@@ -1,31 +1,36 @@
1
1
  /**
2
2
  * 根据身份证号码获取信息
3
3
  * @description 能获取到 籍贯,出生日期,年龄,性别
4
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
4
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
5
5
  * @returns {Object} 返回身份证信息对象
6
6
  */
7
- export function getInfoByIDCard(idCard: string): Object;
7
+ export declare function getInfoByIDCard(idCard: string): {
8
+ province: string | undefined;
9
+ birthday: string | undefined;
10
+ age: number | undefined;
11
+ sex: string | undefined;
12
+ } | undefined;
8
13
  /**
9
14
  * 根据身份证号码获得生日
10
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
11
- * @returns {String} 返回生日
15
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
16
+ * @returns {string} 返回生日
12
17
  */
13
- export function getBirthdayByIDCard(idCard: string): string;
18
+ export declare function getBirthdayByIDCard(idCard: string): string | undefined;
14
19
  /**
15
20
  * 根据身份证号码获得年龄
16
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
17
- * @returns {Number} 返回年龄
21
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
22
+ * @returns {number} 返回年龄
18
23
  */
19
- export function getAgeByIDCard(idCard: string): number;
24
+ export declare function getAgeByIDCard(idCard: string): number | undefined;
20
25
  /**
21
26
  * 根据身份证号码获得性别
22
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
23
- * @returns {String} 返回性别
27
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
28
+ * @returns {string} 返回性别
24
29
  */
25
- export function getSexByIDCard(idCard: string): string;
30
+ export declare function getSexByIDCard(idCard: string): string | undefined;
26
31
  /**
27
32
  * 根据身份证号码获得省份
28
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
29
- * @returns {String} 返回省份
33
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
34
+ * @returns {string} 返回省份
30
35
  */
31
- export function getProvinceByIDCard(idCard: string): string;
36
+ export declare function getProvinceByIDCard(idCard: string): string | undefined;
@@ -1,11 +1,14 @@
1
1
  import { isNull } from '../validate/index.mjs';
2
- import { getAge, parseDate } from '../date/index.mjs';
2
+ import { getAge, toDate } from '../date/index.mjs';
3
3
  import { ID_CARD } from '../constants/id-card.mjs';
4
4
 
5
+ /**
6
+ * @module 身份证号码
7
+ */
5
8
  /**
6
9
  * 根据身份证号码获取信息
7
10
  * @description 能获取到 籍贯,出生日期,年龄,性别
8
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
11
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
9
12
  * @returns {Object} 返回身份证信息对象
10
13
  */
11
14
  function getInfoByIDCard(idCard) {
@@ -24,8 +27,8 @@ function getInfoByIDCard(idCard) {
24
27
  }
25
28
  /**
26
29
  * 根据身份证号码获得生日
27
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
28
- * @returns {String} 返回生日
30
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
31
+ * @returns {string} 返回生日
29
32
  */
30
33
  function getBirthdayByIDCard(idCard) {
31
34
  if (isNull(idCard))
@@ -41,23 +44,25 @@ function getBirthdayByIDCard(idCard) {
41
44
  }
42
45
  /**
43
46
  * 根据身份证号码获得年龄
44
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
45
- * @returns {Number} 返回年龄
47
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
48
+ * @returns {number} 返回年龄
46
49
  */
47
50
  function getAgeByIDCard(idCard) {
48
51
  if (isNull(idCard))
49
52
  return;
50
- let birthday = getBirthdayByIDCard(idCard);
51
- return getAge(parseDate(birthday));
53
+ const birthday = getBirthdayByIDCard(idCard);
54
+ if (birthday) {
55
+ return getAge(toDate(String(birthday)));
56
+ }
52
57
  }
53
58
  /**
54
59
  * 根据身份证号码获得性别
55
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
56
- * @returns {String} 返回性别
60
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
61
+ * @returns {string} 返回性别
57
62
  */
58
63
  function getSexByIDCard(idCard) {
59
64
  if (isNull(idCard))
60
- return;
65
+ return undefined;
61
66
  // 15位身份证
62
67
  if (idCard.length === 15) {
63
68
  return Number(idCard.substring(14)) % 2 === 0 ? ID_CARD.SEX.WOMAN : ID_CARD.SEX.MAN;
@@ -69,13 +74,16 @@ function getSexByIDCard(idCard) {
69
74
  }
70
75
  /**
71
76
  * 根据身份证号码获得省份
72
- * @param {String} idCard 身份证号码,支持一代15位和二代18位
73
- * @returns {String} 返回省份
77
+ * @param {string} idCard 身份证号码,支持一代15位和二代18位
78
+ * @returns {string} 返回省份
74
79
  */
75
80
  function getProvinceByIDCard(idCard) {
76
81
  if (isNull(idCard))
77
82
  return;
78
- return ID_CARD.PROVINCE[idCard.substring(0, 2)];
83
+ const prefix = idCard.substring(0, 2);
84
+ if (prefix) {
85
+ return ID_CARD.PROVINCE[prefix];
86
+ }
79
87
  }
80
88
 
81
89
  export { getAgeByIDCard, getBirthdayByIDCard, getInfoByIDCard, getProvinceByIDCard, getSexByIDCard };