@allahjs/utils 0.0.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 (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/browser/cookieUtils/index.cjs +100 -0
  5. package/dist/browser/cookieUtils/index.cjs.map +1 -0
  6. package/dist/browser/cookieUtils/index.d.ts +55 -0
  7. package/dist/browser/domUtils/index.cjs +237 -0
  8. package/dist/browser/domUtils/index.cjs.map +1 -0
  9. package/dist/browser/domUtils/index.d.ts +116 -0
  10. package/dist/browser/index.cjs +12 -0
  11. package/dist/browser/index.cjs.map +1 -0
  12. package/dist/browser/index.d.ts +3 -0
  13. package/dist/browser/urlUtils/index.cjs +262 -0
  14. package/dist/browser/urlUtils/index.cjs.map +1 -0
  15. package/dist/browser/urlUtils/index.d.ts +72 -0
  16. package/dist/core/arrayUtils/index.cjs +109 -0
  17. package/dist/core/arrayUtils/index.cjs.map +1 -0
  18. package/dist/core/arrayUtils/index.d.ts +67 -0
  19. package/dist/core/asyncUtils/index.cjs +180 -0
  20. package/dist/core/asyncUtils/index.cjs.map +1 -0
  21. package/dist/core/asyncUtils/index.d.ts +80 -0
  22. package/dist/core/colorUtils/index.cjs +38 -0
  23. package/dist/core/colorUtils/index.cjs.map +1 -0
  24. package/dist/core/colorUtils/index.d.ts +10 -0
  25. package/dist/core/cryptoUtils/index.cjs +428 -0
  26. package/dist/core/cryptoUtils/index.cjs.map +1 -0
  27. package/dist/core/cryptoUtils/index.d.ts +132 -0
  28. package/dist/core/dateUtils/index.cjs +245 -0
  29. package/dist/core/dateUtils/index.cjs.map +1 -0
  30. package/dist/core/dateUtils/index.d.ts +117 -0
  31. package/dist/core/index.cjs +34 -0
  32. package/dist/core/index.cjs.map +1 -0
  33. package/dist/core/index.d.ts +118 -0
  34. package/dist/core/numberUtils/index.cjs +126 -0
  35. package/dist/core/numberUtils/index.cjs.map +1 -0
  36. package/dist/core/numberUtils/index.d.ts +91 -0
  37. package/dist/core/objectUtils/index.cjs +249 -0
  38. package/dist/core/objectUtils/index.cjs.map +1 -0
  39. package/dist/core/objectUtils/index.d.ts +91 -0
  40. package/dist/core/pageUtils/index.cjs +74 -0
  41. package/dist/core/pageUtils/index.cjs.map +1 -0
  42. package/dist/core/pageUtils/index.d.ts +52 -0
  43. package/dist/core/stringUtils/index.cjs +163 -0
  44. package/dist/core/stringUtils/index.cjs.map +1 -0
  45. package/dist/core/stringUtils/index.d.ts +69 -0
  46. package/dist/core/validationUtils/index.cjs +154 -0
  47. package/dist/core/validationUtils/index.cjs.map +1 -0
  48. package/dist/core/validationUtils/index.d.ts +87 -0
  49. package/dist/esm/browser/cookieUtils/index.d.ts +55 -0
  50. package/dist/esm/browser/cookieUtils/index.js +96 -0
  51. package/dist/esm/browser/cookieUtils/index.js.map +1 -0
  52. package/dist/esm/browser/domUtils/index.d.ts +116 -0
  53. package/dist/esm/browser/domUtils/index.js +233 -0
  54. package/dist/esm/browser/domUtils/index.js.map +1 -0
  55. package/dist/esm/browser/index.d.ts +3 -0
  56. package/dist/esm/browser/index.js +4 -0
  57. package/dist/esm/browser/index.js.map +1 -0
  58. package/dist/esm/browser/urlUtils/index.d.ts +72 -0
  59. package/dist/esm/browser/urlUtils/index.js +248 -0
  60. package/dist/esm/browser/urlUtils/index.js.map +1 -0
  61. package/dist/esm/core/arrayUtils/index.d.ts +67 -0
  62. package/dist/esm/core/arrayUtils/index.js +105 -0
  63. package/dist/esm/core/arrayUtils/index.js.map +1 -0
  64. package/dist/esm/core/asyncUtils/index.d.ts +80 -0
  65. package/dist/esm/core/asyncUtils/index.js +175 -0
  66. package/dist/esm/core/asyncUtils/index.js.map +1 -0
  67. package/dist/esm/core/colorUtils/index.d.ts +10 -0
  68. package/dist/esm/core/colorUtils/index.js +34 -0
  69. package/dist/esm/core/colorUtils/index.js.map +1 -0
  70. package/dist/esm/core/cryptoUtils/index.d.ts +132 -0
  71. package/dist/esm/core/cryptoUtils/index.js +424 -0
  72. package/dist/esm/core/cryptoUtils/index.js.map +1 -0
  73. package/dist/esm/core/dateUtils/index.d.ts +117 -0
  74. package/dist/esm/core/dateUtils/index.js +241 -0
  75. package/dist/esm/core/dateUtils/index.js.map +1 -0
  76. package/dist/esm/core/index.d.ts +118 -0
  77. package/dist/esm/core/index.js +30 -0
  78. package/dist/esm/core/index.js.map +1 -0
  79. package/dist/esm/core/numberUtils/index.d.ts +91 -0
  80. package/dist/esm/core/numberUtils/index.js +122 -0
  81. package/dist/esm/core/numberUtils/index.js.map +1 -0
  82. package/dist/esm/core/objectUtils/index.d.ts +91 -0
  83. package/dist/esm/core/objectUtils/index.js +245 -0
  84. package/dist/esm/core/objectUtils/index.js.map +1 -0
  85. package/dist/esm/core/pageUtils/index.d.ts +52 -0
  86. package/dist/esm/core/pageUtils/index.js +66 -0
  87. package/dist/esm/core/pageUtils/index.js.map +1 -0
  88. package/dist/esm/core/stringUtils/index.d.ts +69 -0
  89. package/dist/esm/core/stringUtils/index.js +159 -0
  90. package/dist/esm/core/stringUtils/index.js.map +1 -0
  91. package/dist/esm/core/validationUtils/index.d.ts +87 -0
  92. package/dist/esm/core/validationUtils/index.js +150 -0
  93. package/dist/esm/core/validationUtils/index.js.map +1 -0
  94. package/dist/esm/index.d.ts +22 -0
  95. package/dist/esm/index.js +26 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/request/ReqQueue/index.js +59 -0
  98. package/dist/esm/request/ReqQueue/index.js.map +1 -0
  99. package/dist/esm/request/httpCode/index.js +49 -0
  100. package/dist/esm/request/httpCode/index.js.map +1 -0
  101. package/dist/esm/request/httpUtils/index.js +359 -0
  102. package/dist/esm/request/httpUtils/index.js.map +1 -0
  103. package/dist/esm/request/index.d.ts +15 -0
  104. package/dist/esm/request/index.js +166 -0
  105. package/dist/esm/request/index.js.map +1 -0
  106. package/dist/esm/request/typings/index.d.ts +184 -0
  107. package/dist/esm/request/uniRequest/index.js +62 -0
  108. package/dist/esm/request/uniRequest/index.js.map +1 -0
  109. package/dist/esm/types/data/index.d.ts +188 -0
  110. package/dist/esm/types/data/index.js +13 -0
  111. package/dist/esm/types/data/index.js.map +1 -0
  112. package/dist/esm/types/index.d.ts +1 -0
  113. package/dist/esm/types/index.js +2 -0
  114. package/dist/esm/types/index.js.map +1 -0
  115. package/dist/esm/uniapp/Tips/index.d.ts +295 -0
  116. package/dist/esm/uniapp/Tips/index.js +498 -0
  117. package/dist/esm/uniapp/Tips/index.js.map +1 -0
  118. package/dist/esm/uniapp/cloudUtils/index.d.ts +56 -0
  119. package/dist/esm/uniapp/cloudUtils/index.js +90 -0
  120. package/dist/esm/uniapp/cloudUtils/index.js.map +1 -0
  121. package/dist/esm/uniapp/index.d.ts +3 -0
  122. package/dist/esm/uniapp/index.js +4 -0
  123. package/dist/esm/uniapp/index.js.map +1 -0
  124. package/dist/esm/uniapp/uniUtils/index.d.ts +113 -0
  125. package/dist/esm/uniapp/uniUtils/index.js +199 -0
  126. package/dist/esm/uniapp/uniUtils/index.js.map +1 -0
  127. package/dist/index.cjs +88 -0
  128. package/dist/index.cjs.map +1 -0
  129. package/dist/index.d.ts +22 -0
  130. package/dist/request/ReqQueue/index.cjs +63 -0
  131. package/dist/request/ReqQueue/index.cjs.map +1 -0
  132. package/dist/request/httpCode/index.cjs +52 -0
  133. package/dist/request/httpCode/index.cjs.map +1 -0
  134. package/dist/request/httpUtils/index.cjs +365 -0
  135. package/dist/request/httpUtils/index.cjs.map +1 -0
  136. package/dist/request/index.cjs +170 -0
  137. package/dist/request/index.cjs.map +1 -0
  138. package/dist/request/index.d.ts +15 -0
  139. package/dist/request/typings/index.d.ts +184 -0
  140. package/dist/request/uniRequest/index.cjs +66 -0
  141. package/dist/request/uniRequest/index.cjs.map +1 -0
  142. package/dist/types/data/index.cjs +15 -0
  143. package/dist/types/data/index.cjs.map +1 -0
  144. package/dist/types/data/index.d.ts +188 -0
  145. package/dist/types/index.cjs +8 -0
  146. package/dist/types/index.cjs.map +1 -0
  147. package/dist/types/index.d.ts +1 -0
  148. package/dist/uniapp/Tips/index.cjs +521 -0
  149. package/dist/uniapp/Tips/index.cjs.map +1 -0
  150. package/dist/uniapp/Tips/index.d.ts +295 -0
  151. package/dist/uniapp/cloudUtils/index.cjs +92 -0
  152. package/dist/uniapp/cloudUtils/index.cjs.map +1 -0
  153. package/dist/uniapp/cloudUtils/index.d.ts +56 -0
  154. package/dist/uniapp/index.cjs +53 -0
  155. package/dist/uniapp/index.cjs.map +1 -0
  156. package/dist/uniapp/index.d.ts +3 -0
  157. package/dist/uniapp/uniUtils/index.cjs +213 -0
  158. package/dist/uniapp/uniUtils/index.cjs.map +1 -0
  159. package/dist/uniapp/uniUtils/index.d.ts +113 -0
  160. package/package.json +129 -0
@@ -0,0 +1,163 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var index = require('../dateUtils/index.cjs');
6
+
7
+ /**
8
+ * 字符串工具函数
9
+ */
10
+ /**
11
+ * 字符串工具对象
12
+ */
13
+ const stringUtils = {
14
+ /**
15
+ * 首字母大写
16
+ * @param str 输入字符串
17
+ * @returns 首字母大写的字符串
18
+ */
19
+ capitalize(str) {
20
+ if (!str)
21
+ return str;
22
+ return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
23
+ },
24
+ /**
25
+ * 驼峰命名转换
26
+ * @param str 输入字符串
27
+ * @returns 驼峰命名的字符串
28
+ */
29
+ toCamelCase(str) {
30
+ return str.replace(/[-_\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '');
31
+ },
32
+ /**
33
+ * 短横线命名转换
34
+ * @param str 输入字符串
35
+ * @returns 短横线命名的字符串
36
+ */
37
+ toKebabCase(str) {
38
+ return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
39
+ },
40
+ /**
41
+ * 下划线命名转换
42
+ * @param str 输入字符串
43
+ * @returns 下划线命名的字符串
44
+ */
45
+ toSnakeCase(str) {
46
+ return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();
47
+ },
48
+ /**
49
+ * 截断字符串
50
+ * @param str 输入字符串
51
+ * @param length 最大长度
52
+ * @param suffix 后缀,默认为 '...'
53
+ * @returns 截断后的字符串
54
+ */
55
+ truncate(str, length, suffix = '...') {
56
+ if (str.length <= length)
57
+ return str;
58
+ return str.slice(0, length - suffix.length) + suffix;
59
+ },
60
+ /**
61
+ * 移除字符串两端空白字符
62
+ * @param str 输入字符串
63
+ * @returns 处理后的字符串
64
+ */
65
+ trim(str) {
66
+ return str.replace(/^\s+|\s+$/g, '');
67
+ },
68
+ /**
69
+ * 生成随机字符串
70
+ * @param length 长度
71
+ * @param chars 字符集,默认为字母数字
72
+ * @returns 随机字符串
73
+ */
74
+ randomString(length, chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
75
+ let result = '';
76
+ for (let i = 0; i < length; i++) {
77
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
78
+ }
79
+ return result;
80
+ },
81
+ /**
82
+ * 构建金额字符串
83
+ * @param num 金额数值
84
+ * @returns 金额字符串
85
+ */
86
+ buildMoneyStr(str) {
87
+ if (!str)
88
+ return '0';
89
+ str = str.toString();
90
+ // 先找到小数点的位置
91
+ let smallMoney = '';
92
+ let money = '';
93
+ if (str.indexOf('.') > 0) {
94
+ smallMoney = str.substring(str.indexOf('.'));
95
+ // 计算前面那部分的钱
96
+ money = str.substring(0, str.indexOf('.'));
97
+ }
98
+ else {
99
+ money = str;
100
+ }
101
+ let num = (money || 0).toString();
102
+ let result = '';
103
+ while (num.length > 3) {
104
+ result = `,${num.slice(-3)}${result}`;
105
+ num = num.slice(0, num.length - 3);
106
+ }
107
+ if (num) {
108
+ result = num + result + smallMoney;
109
+ }
110
+ return result;
111
+ },
112
+ /**
113
+ * 替换对象或者数组中的空值
114
+ */
115
+ replaceEmpty: (data, replaceStr = '-') => {
116
+ if (data) {
117
+ if (Array.isArray(data)) {
118
+ data.forEach((item, index) => {
119
+ // 只对对象进行处理
120
+ if (typeof item === 'object') {
121
+ data[index] = stringUtils.replaceEmpty(item, replaceStr);
122
+ }
123
+ });
124
+ }
125
+ else if (typeof data === 'object') {
126
+ Object.keys(data).forEach(key => {
127
+ // 不对时间进行处理
128
+ if (key.includes('date') || key.includes('Date')) {
129
+ // 使用安全的时间格式化
130
+ data[key] = index.default.safeFormat(data[key]);
131
+ }
132
+ else if (key.includes('time') || key.includes('Time')) {
133
+ // 使用安全的时间格式化
134
+ data[key] = index.default.safeFormat(data[key], 'YYYY-MM-DD HH:mm:ss');
135
+ }
136
+ else if (data[key] === null || data[key] === undefined || data[key] === '') {
137
+ data[key] = replaceStr;
138
+ }
139
+ else if (typeof data[key] === 'object') {
140
+ data[key] = stringUtils.replaceEmpty(data[key], replaceStr);
141
+ }
142
+ });
143
+ }
144
+ }
145
+ return data;
146
+ },
147
+ /**
148
+ * 替换指定的字段为 -
149
+ */
150
+ replaceFieldsEmpty: (data, fields, replaceStr = '-') => {
151
+ if (data && fields && fields.length > 0) {
152
+ fields.forEach(field => {
153
+ if (data[field] === null || data[field] === undefined || data[field] === '') {
154
+ data[field] = replaceStr;
155
+ }
156
+ });
157
+ }
158
+ return data;
159
+ },
160
+ };
161
+
162
+ exports.default = stringUtils;
163
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/core/stringUtils/index.ts"],"sourcesContent":[null],"names":["dateUtils"],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 字符串工具函数
3
+ */
4
+ /**
5
+ * 字符串工具对象
6
+ */
7
+ declare const stringUtils: {
8
+ /**
9
+ * 首字母大写
10
+ * @param str 输入字符串
11
+ * @returns 首字母大写的字符串
12
+ */
13
+ capitalize(str: string): string;
14
+ /**
15
+ * 驼峰命名转换
16
+ * @param str 输入字符串
17
+ * @returns 驼峰命名的字符串
18
+ */
19
+ toCamelCase(str: string): string;
20
+ /**
21
+ * 短横线命名转换
22
+ * @param str 输入字符串
23
+ * @returns 短横线命名的字符串
24
+ */
25
+ toKebabCase(str: string): string;
26
+ /**
27
+ * 下划线命名转换
28
+ * @param str 输入字符串
29
+ * @returns 下划线命名的字符串
30
+ */
31
+ toSnakeCase(str: string): string;
32
+ /**
33
+ * 截断字符串
34
+ * @param str 输入字符串
35
+ * @param length 最大长度
36
+ * @param suffix 后缀,默认为 '...'
37
+ * @returns 截断后的字符串
38
+ */
39
+ truncate(str: string, length: number, suffix?: string): string;
40
+ /**
41
+ * 移除字符串两端空白字符
42
+ * @param str 输入字符串
43
+ * @returns 处理后的字符串
44
+ */
45
+ trim(str: string): string;
46
+ /**
47
+ * 生成随机字符串
48
+ * @param length 长度
49
+ * @param chars 字符集,默认为字母数字
50
+ * @returns 随机字符串
51
+ */
52
+ randomString(length: number, chars?: string): string;
53
+ /**
54
+ * 构建金额字符串
55
+ * @param num 金额数值
56
+ * @returns 金额字符串
57
+ */
58
+ buildMoneyStr(str: number | string): string;
59
+ /**
60
+ * 替换对象或者数组中的空值
61
+ */
62
+ replaceEmpty: (data: any, replaceStr?: string) => any;
63
+ /**
64
+ * 替换指定的字段为 -
65
+ */
66
+ replaceFieldsEmpty: (data: any, fields: string[], replaceStr?: string) => any;
67
+ };
68
+
69
+ export { stringUtils as default };
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * 验证工具函数
7
+ */
8
+ /**
9
+ * 验证工具对象
10
+ */
11
+ const validationUtils = {
12
+ /**
13
+ * 验证邮箱格式
14
+ * @param email 邮箱地址
15
+ * @returns 是否为有效邮箱
16
+ */
17
+ isEmail(email) {
18
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
19
+ return emailRegex.test(email);
20
+ },
21
+ /**
22
+ * 验证手机号格式(中国大陆)
23
+ * @param phone 手机号
24
+ * @returns 是否为有效手机号
25
+ */
26
+ isPhone(phone) {
27
+ const phoneRegex = /^1[3-9]\d{9}$/;
28
+ return phoneRegex.test(phone);
29
+ },
30
+ /**
31
+ * 验证身份证号格式(中国大陆)
32
+ * @param idCard 身份证号
33
+ * @returns 是否为有效身份证号
34
+ */
35
+ isIdCard(idCard) {
36
+ const idCardRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
37
+ return idCardRegex.test(idCard);
38
+ },
39
+ /**
40
+ * 验证URL格式
41
+ * @param url URL地址
42
+ * @returns 是否为有效URL
43
+ */
44
+ isUrl(url) {
45
+ try {
46
+ new URL(url);
47
+ return true;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ },
53
+ /**
54
+ * 验证IP地址格式
55
+ * @param ip IP地址
56
+ * @returns 是否为有效IP地址
57
+ */
58
+ isIp(ip) {
59
+ const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
60
+ return ipRegex.test(ip);
61
+ },
62
+ /**
63
+ * 验证密码强度
64
+ * @param password 密码
65
+ * @param options 选项
66
+ * @returns 密码强度等级 0-4
67
+ */
68
+ passwordStrength(password, options = {}) {
69
+ const { minLength = 8, requireUppercase = true, requireLowercase = true, requireNumbers = true, requireSpecialChars = true } = options;
70
+ let score = 0;
71
+ // 长度检查
72
+ if (password.length >= minLength)
73
+ score++;
74
+ // 大写字母
75
+ if (!requireUppercase || /[A-Z]/.test(password))
76
+ score++;
77
+ // 小写字母
78
+ if (!requireLowercase || /[a-z]/.test(password))
79
+ score++;
80
+ // 数字
81
+ if (!requireNumbers || /\d/.test(password))
82
+ score++;
83
+ // 特殊字符
84
+ if (!requireSpecialChars || /[!@#$%^&*(),.?":{}|<>]/.test(password))
85
+ score++;
86
+ return score;
87
+ },
88
+ /**
89
+ * 验证银行卡号格式
90
+ * @param cardNumber 银行卡号
91
+ * @returns 是否为有效银行卡号
92
+ */
93
+ isBankCard(cardNumber) {
94
+ // 移除空格和连字符
95
+ const cleaned = cardNumber.replace(/[\s-]/g, '');
96
+ // 检查是否全为数字且长度在13-19位之间
97
+ if (!/^\d{13,19}$/.test(cleaned))
98
+ return false;
99
+ // Luhn算法验证
100
+ let sum = 0;
101
+ let isEven = false;
102
+ for (let i = cleaned.length - 1; i >= 0; i--) {
103
+ let digit = parseInt(cleaned[i]);
104
+ if (isEven) {
105
+ digit *= 2;
106
+ if (digit > 9) {
107
+ digit -= 9;
108
+ }
109
+ }
110
+ sum += digit;
111
+ isEven = !isEven;
112
+ }
113
+ return sum % 10 === 0;
114
+ },
115
+ /**
116
+ * 验证中文字符
117
+ * @param text 文本
118
+ * @returns 是否包含中文字符
119
+ */
120
+ hasChinese(text) {
121
+ return /[\u4e00-\u9fa5]/.test(text);
122
+ },
123
+ /**
124
+ * 验证只包含中文字符
125
+ * @param text 文本
126
+ * @returns 是否只包含中文字符
127
+ */
128
+ isChineseOnly(text) {
129
+ return /^[\u4e00-\u9fa5]+$/.test(text);
130
+ },
131
+ /**
132
+ * 验证数字范围
133
+ * @param value 值
134
+ * @param min 最小值
135
+ * @param max 最大值
136
+ * @returns 是否在范围内
137
+ */
138
+ isInRange(value, min, max) {
139
+ return value >= min && value <= max;
140
+ },
141
+ /**
142
+ * 验证字符串长度范围
143
+ * @param str 字符串
144
+ * @param min 最小长度
145
+ * @param max 最大长度
146
+ * @returns 是否在长度范围内
147
+ */
148
+ isLengthInRange(str, min, max) {
149
+ return str.length >= min && str.length <= max;
150
+ }
151
+ };
152
+
153
+ exports.default = validationUtils;
154
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/core/validationUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 验证工具函数
3
+ */
4
+ /**
5
+ * 验证工具对象
6
+ */
7
+ declare const validationUtils: {
8
+ /**
9
+ * 验证邮箱格式
10
+ * @param email 邮箱地址
11
+ * @returns 是否为有效邮箱
12
+ */
13
+ isEmail(email: string): boolean;
14
+ /**
15
+ * 验证手机号格式(中国大陆)
16
+ * @param phone 手机号
17
+ * @returns 是否为有效手机号
18
+ */
19
+ isPhone(phone: string): boolean;
20
+ /**
21
+ * 验证身份证号格式(中国大陆)
22
+ * @param idCard 身份证号
23
+ * @returns 是否为有效身份证号
24
+ */
25
+ isIdCard(idCard: string): boolean;
26
+ /**
27
+ * 验证URL格式
28
+ * @param url URL地址
29
+ * @returns 是否为有效URL
30
+ */
31
+ isUrl(url: string): boolean;
32
+ /**
33
+ * 验证IP地址格式
34
+ * @param ip IP地址
35
+ * @returns 是否为有效IP地址
36
+ */
37
+ isIp(ip: string): boolean;
38
+ /**
39
+ * 验证密码强度
40
+ * @param password 密码
41
+ * @param options 选项
42
+ * @returns 密码强度等级 0-4
43
+ */
44
+ passwordStrength(password: string, options?: {
45
+ minLength?: number;
46
+ requireUppercase?: boolean;
47
+ requireLowercase?: boolean;
48
+ requireNumbers?: boolean;
49
+ requireSpecialChars?: boolean;
50
+ }): number;
51
+ /**
52
+ * 验证银行卡号格式
53
+ * @param cardNumber 银行卡号
54
+ * @returns 是否为有效银行卡号
55
+ */
56
+ isBankCard(cardNumber: string): boolean;
57
+ /**
58
+ * 验证中文字符
59
+ * @param text 文本
60
+ * @returns 是否包含中文字符
61
+ */
62
+ hasChinese(text: string): boolean;
63
+ /**
64
+ * 验证只包含中文字符
65
+ * @param text 文本
66
+ * @returns 是否只包含中文字符
67
+ */
68
+ isChineseOnly(text: string): boolean;
69
+ /**
70
+ * 验证数字范围
71
+ * @param value 值
72
+ * @param min 最小值
73
+ * @param max 最大值
74
+ * @returns 是否在范围内
75
+ */
76
+ isInRange(value: number, min: number, max: number): boolean;
77
+ /**
78
+ * 验证字符串长度范围
79
+ * @param str 字符串
80
+ * @param min 最小长度
81
+ * @param max 最大长度
82
+ * @returns 是否在长度范围内
83
+ */
84
+ isLengthInRange(str: string, min: number, max: number): boolean;
85
+ };
86
+
87
+ export { validationUtils as default };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Cookie操作工具类
3
+ * 提供cookie的读取、设置、删除等功能
4
+ */
5
+ declare const cookieUtils: {
6
+ /**
7
+ * 读取指定名称的cookie值
8
+ * @param name cookie名称
9
+ * @returns cookie值,如果不存在则返回null
10
+ */
11
+ read(name: string): string | null;
12
+ /**
13
+ * 设置cookie
14
+ * @param name cookie名称
15
+ * @param value cookie值
16
+ * @param options cookie选项
17
+ */
18
+ set(name: string, value: string, options?: {
19
+ expires?: Date | number;
20
+ path?: string;
21
+ domain?: string;
22
+ secure?: boolean;
23
+ sameSite?: "Strict" | "Lax" | "None";
24
+ }): void;
25
+ /**
26
+ * 删除指定名称的cookie
27
+ * @param name cookie名称
28
+ * @param options cookie选项(path和domain需要与设置时一致)
29
+ */
30
+ remove(name: string, options?: {
31
+ path?: string;
32
+ domain?: string;
33
+ }): void;
34
+ /**
35
+ * 获取所有cookie
36
+ * @returns 包含所有cookie的对象
37
+ */
38
+ getAll(): Record<string, string>;
39
+ /**
40
+ * 检查cookie是否存在
41
+ * @param name cookie名称
42
+ * @returns 是否存在
43
+ */
44
+ exists(name: string): boolean;
45
+ /**
46
+ * 清除所有cookie
47
+ * @param options cookie选项
48
+ */
49
+ clearAll(options?: {
50
+ path?: string;
51
+ domain?: string;
52
+ }): void;
53
+ };
54
+
55
+ export { cookieUtils as default };
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Cookie操作工具类
3
+ * 提供cookie的读取、设置、删除等功能
4
+ */
5
+ const cookieUtils = {
6
+ /**
7
+ * 读取指定名称的cookie值
8
+ * @param name cookie名称
9
+ * @returns cookie值,如果不存在则返回null
10
+ */
11
+ read(name) {
12
+ const match = document.cookie.match(new RegExp(`(^|;\\s*)(${name})=([^;]*)`));
13
+ return match ? decodeURIComponent(match[3]) : null;
14
+ },
15
+ /**
16
+ * 设置cookie
17
+ * @param name cookie名称
18
+ * @param value cookie值
19
+ * @param options cookie选项
20
+ */
21
+ set(name, value, options = {}) {
22
+ let cookieString = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
23
+ if (options.expires) {
24
+ if (typeof options.expires === 'number') {
25
+ // 如果是数字,表示天数
26
+ const date = new Date();
27
+ date.setTime(date.getTime() + options.expires * 24 * 60 * 60 * 1000);
28
+ cookieString += `; expires=${date.toUTCString()}`;
29
+ }
30
+ else {
31
+ cookieString += `; expires=${options.expires.toUTCString()}`;
32
+ }
33
+ }
34
+ if (options.path) {
35
+ cookieString += `; path=${options.path}`;
36
+ }
37
+ if (options.domain) {
38
+ cookieString += `; domain=${options.domain}`;
39
+ }
40
+ if (options.secure) {
41
+ cookieString += '; secure';
42
+ }
43
+ if (options.sameSite) {
44
+ cookieString += `; samesite=${options.sameSite}`;
45
+ }
46
+ document.cookie = cookieString;
47
+ },
48
+ /**
49
+ * 删除指定名称的cookie
50
+ * @param name cookie名称
51
+ * @param options cookie选项(path和domain需要与设置时一致)
52
+ */
53
+ remove(name, options = {}) {
54
+ this.set(name, '', {
55
+ ...options,
56
+ expires: new Date(0)
57
+ });
58
+ },
59
+ /**
60
+ * 获取所有cookie
61
+ * @returns 包含所有cookie的对象
62
+ */
63
+ getAll() {
64
+ const cookies = {};
65
+ if (document.cookie) {
66
+ document.cookie.split(';').forEach(cookie => {
67
+ const [name, value] = cookie.trim().split('=');
68
+ if (name && value) {
69
+ cookies[decodeURIComponent(name)] = decodeURIComponent(value);
70
+ }
71
+ });
72
+ }
73
+ return cookies;
74
+ },
75
+ /**
76
+ * 检查cookie是否存在
77
+ * @param name cookie名称
78
+ * @returns 是否存在
79
+ */
80
+ exists(name) {
81
+ return this.read(name) !== null;
82
+ },
83
+ /**
84
+ * 清除所有cookie
85
+ * @param options cookie选项
86
+ */
87
+ clearAll(options = {}) {
88
+ const cookies = this.getAll();
89
+ Object.keys(cookies).forEach(name => {
90
+ this.remove(name, options);
91
+ });
92
+ }
93
+ };
94
+
95
+ export { cookieUtils as default };
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/browser/cookieUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}