@cloudcome/utils-core 1.1.0 → 1.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 (292) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE +21 -0
  3. package/package.json +279 -1
  4. package/src/array.ts +312 -0
  5. package/src/async.ts +379 -0
  6. package/src/base64.ts +20 -0
  7. package/src/cache.ts +146 -0
  8. package/{dist/color/contrast.d.ts → src/color/contrast.ts} +12 -2
  9. package/src/color/distance.ts +28 -0
  10. package/src/color/helpers.ts +23 -0
  11. package/src/color/hex-hsl.ts +11 -0
  12. package/{dist/color/hex-hsv.d.ts → src/color/hex-hsv.ts} +11 -3
  13. package/{dist/color/hex-hwb.d.ts → src/color/hex-hwb.ts} +11 -3
  14. package/src/color/hex-rgb.ts +39 -0
  15. package/{dist/color/hsl-lighten.d.ts → src/color/hsl-lighten.ts} +7 -2
  16. package/{dist/color/hsv-brighten.d.ts → src/color/hsv-brighten.ts} +7 -2
  17. package/{dist/color/luminance.d.ts → src/color/luminance.ts} +9 -2
  18. package/{dist/color/mix.d.ts → src/color/mix.ts} +10 -2
  19. package/src/color/rgb-hsl.ts +53 -0
  20. package/{dist/color/rgb-hsv.d.ts → src/color/rgb-hsv.ts} +30 -3
  21. package/src/color/rgb-hwb.ts +56 -0
  22. package/{dist/color/rgb-lab.d.ts → src/color/rgb-lab.ts} +11 -3
  23. package/src/color/rgb-whiter.ts +22 -0
  24. package/src/color/rgb-xyz.ts +62 -0
  25. package/{dist/color/types.d.ts → src/color/types.ts} +12 -30
  26. package/{dist/color/xyz-lab.d.ts → src/color/xyz-lab.ts} +32 -3
  27. package/src/crypto/md5.mjs +357 -0
  28. package/src/crypto/sha1.mjs +300 -0
  29. package/src/crypto/sha256.mjs +310 -0
  30. package/src/crypto/sha512.mjs +459 -0
  31. package/{dist/crypto.d.ts → src/crypto.ts} +20 -4
  32. package/src/date/const.ts +6 -0
  33. package/src/date/core.ts +162 -0
  34. package/src/date/days.ts +51 -0
  35. package/{dist/date/is.d.ts → src/date/is.ts} +102 -8
  36. package/src/date/relative.ts +92 -0
  37. package/src/date/start-end.ts +246 -0
  38. package/src/date/timezone.ts +220 -0
  39. package/src/date/weeks.ts +100 -0
  40. package/src/dts/global.d.ts +27 -0
  41. package/src/easing.ts +166 -0
  42. package/src/emitter.ts +117 -0
  43. package/src/enum.ts +171 -0
  44. package/{dist/env.d.ts → src/env.ts} +30 -6
  45. package/{dist/error.d.ts → src/error.ts} +12 -3
  46. package/src/exception.ts +68 -0
  47. package/src/fn.ts +197 -0
  48. package/src/index.ts +1 -0
  49. package/src/number.ts +236 -0
  50. package/{dist/object/each.d.ts → src/object/each.ts} +23 -3
  51. package/src/object/get-set.ts +273 -0
  52. package/src/object/is.ts +128 -0
  53. package/src/object/merge.ts +180 -0
  54. package/{dist/object/process.d.ts → src/object/process.ts} +38 -4
  55. package/src/path.ts +188 -0
  56. package/{dist/promise.d.ts → src/promise.ts} +67 -6
  57. package/{dist/qs.d.ts → src/qs.ts} +60 -3
  58. package/src/regexp.ts +156 -0
  59. package/src/string.ts +146 -0
  60. package/src/time/from.ts +57 -0
  61. package/src/time/to.ts +106 -0
  62. package/{dist/timer.mjs → src/timer.ts} +124 -17
  63. package/{dist/tree.d.ts → src/tree.ts} +225 -41
  64. package/{dist/type.d.ts → src/type.ts} +96 -20
  65. package/{dist/types.d.ts → src/types.ts} +33 -12
  66. package/src/unique.ts +77 -0
  67. package/src/url.ts +93 -0
  68. package/src/version.ts +71 -0
  69. package/test/array.test.ts +332 -0
  70. package/test/async-real.test.ts +39 -0
  71. package/test/async.test.ts +375 -0
  72. package/test/base64.test.ts +32 -0
  73. package/test/cache.test.ts +83 -0
  74. package/test/color.test.ts +163 -0
  75. package/test/crypto.test.ts +34 -0
  76. package/test/date-tz.test.ts +206 -0
  77. package/test/date.test.ts +353 -0
  78. package/test/easing.test.ts +33 -0
  79. package/test/emitter.test.ts +71 -0
  80. package/test/enum.test.ts +113 -0
  81. package/test/env.test.ts +69 -0
  82. package/test/error.test.ts +58 -0
  83. package/test/exception.test.ts +43 -0
  84. package/test/fn.test.ts +263 -0
  85. package/test/helpers.ts +23 -0
  86. package/test/index.test.ts +6 -0
  87. package/test/number.test.ts +213 -0
  88. package/test/object.test.ts +309 -0
  89. package/test/path.test.ts +156 -0
  90. package/test/promise.test.ts +199 -0
  91. package/test/qs.test.ts +79 -0
  92. package/test/regexp.test.ts +97 -0
  93. package/test/string.test.ts +150 -0
  94. package/test/time.test.ts +214 -0
  95. package/test/timer.test.ts +114 -0
  96. package/test/tree.test.ts +348 -0
  97. package/test/type.test.ts +226 -0
  98. package/test/unique.test.ts +71 -0
  99. package/test/url.test.ts +136 -0
  100. package/test/version.test.ts +52 -0
  101. package/tsconfig.json +31 -0
  102. package/vite.config.mts +114 -0
  103. package/dist/array.cjs +0 -129
  104. package/dist/array.cjs.map +0 -1
  105. package/dist/array.d.ts +0 -171
  106. package/dist/array.mjs +0 -129
  107. package/dist/array.mjs.map +0 -1
  108. package/dist/async.cjs +0 -219
  109. package/dist/async.cjs.map +0 -1
  110. package/dist/async.d.ts +0 -137
  111. package/dist/async.mjs +0 -219
  112. package/dist/async.mjs.map +0 -1
  113. package/dist/base64.cjs +0 -16
  114. package/dist/base64.cjs.map +0 -1
  115. package/dist/base64.d.ts +0 -7
  116. package/dist/base64.mjs +0 -16
  117. package/dist/base64.mjs.map +0 -1
  118. package/dist/cache.cjs +0 -79
  119. package/dist/cache.cjs.map +0 -1
  120. package/dist/cache.d.ts +0 -90
  121. package/dist/cache.mjs +0 -79
  122. package/dist/cache.mjs.map +0 -1
  123. package/dist/color/distance.d.ts +0 -8
  124. package/dist/color/helpers.d.ts +0 -2
  125. package/dist/color/hex-hsl.d.ts +0 -3
  126. package/dist/color/hex-rgb.d.ts +0 -18
  127. package/dist/color/rgb-hsl.d.ts +0 -23
  128. package/dist/color/rgb-hwb.d.ts +0 -29
  129. package/dist/color/rgb-whiter.d.ts +0 -12
  130. package/dist/color/rgb-xyz.d.ts +0 -22
  131. package/dist/color.cjs +0 -250
  132. package/dist/color.cjs.map +0 -1
  133. package/dist/color.mjs +0 -250
  134. package/dist/color.mjs.map +0 -1
  135. package/dist/const.cjs +0 -14
  136. package/dist/const.cjs.map +0 -1
  137. package/dist/const.mjs +0 -15
  138. package/dist/const.mjs.map +0 -1
  139. package/dist/core.cjs +0 -250
  140. package/dist/core.cjs.map +0 -1
  141. package/dist/core.mjs +0 -251
  142. package/dist/core.mjs.map +0 -1
  143. package/dist/crypto/md5.d.mts +0 -1
  144. package/dist/crypto/sha1.d.mts +0 -1
  145. package/dist/crypto/sha256.d.mts +0 -1
  146. package/dist/crypto/sha512.d.mts +0 -1
  147. package/dist/crypto.cjs +0 -812
  148. package/dist/crypto.cjs.map +0 -1
  149. package/dist/crypto.mjs +0 -812
  150. package/dist/crypto.mjs.map +0 -1
  151. package/dist/date/const.d.ts +0 -6
  152. package/dist/date/core.d.ts +0 -52
  153. package/dist/date/days.d.ts +0 -23
  154. package/dist/date/relative.d.ts +0 -44
  155. package/dist/date/start-end.d.ts +0 -73
  156. package/dist/date/timezone.d.ts +0 -67
  157. package/dist/date/weeks.d.ts +0 -72
  158. package/dist/date.cjs +0 -239
  159. package/dist/date.cjs.map +0 -1
  160. package/dist/date.mjs +0 -241
  161. package/dist/date.mjs.map +0 -1
  162. package/dist/dict.cjs +0 -2
  163. package/dist/dict.cjs.map +0 -1
  164. package/dist/dict.mjs +0 -2
  165. package/dist/dict.mjs.map +0 -1
  166. package/dist/each.cjs +0 -18
  167. package/dist/each.cjs.map +0 -1
  168. package/dist/each.mjs +0 -19
  169. package/dist/each.mjs.map +0 -1
  170. package/dist/easing.cjs +0 -151
  171. package/dist/easing.cjs.map +0 -1
  172. package/dist/easing.d.ts +0 -46
  173. package/dist/easing.mjs +0 -151
  174. package/dist/easing.mjs.map +0 -1
  175. package/dist/emitter.cjs +0 -94
  176. package/dist/emitter.cjs.map +0 -1
  177. package/dist/emitter.d.ts +0 -68
  178. package/dist/emitter.mjs +0 -94
  179. package/dist/emitter.mjs.map +0 -1
  180. package/dist/enum.cjs +0 -58
  181. package/dist/enum.cjs.map +0 -1
  182. package/dist/enum.d.ts +0 -68
  183. package/dist/enum.mjs +0 -58
  184. package/dist/enum.mjs.map +0 -1
  185. package/dist/env.cjs +0 -28
  186. package/dist/env.cjs.map +0 -1
  187. package/dist/env.mjs +0 -28
  188. package/dist/env.mjs.map +0 -1
  189. package/dist/error.cjs +0 -12
  190. package/dist/error.cjs.map +0 -1
  191. package/dist/error.mjs +0 -12
  192. package/dist/error.mjs.map +0 -1
  193. package/dist/exception.cjs +0 -22
  194. package/dist/exception.cjs.map +0 -1
  195. package/dist/exception.d.ts +0 -31
  196. package/dist/exception.mjs +0 -22
  197. package/dist/exception.mjs.map +0 -1
  198. package/dist/fn.cjs +0 -76
  199. package/dist/fn.cjs.map +0 -1
  200. package/dist/fn.d.ts +0 -102
  201. package/dist/fn.mjs +0 -76
  202. package/dist/fn.mjs.map +0 -1
  203. package/dist/index.cjs +0 -5
  204. package/dist/index.cjs.map +0 -1
  205. package/dist/index.d.ts +0 -1
  206. package/dist/index.mjs +0 -5
  207. package/dist/index.mjs.map +0 -1
  208. package/dist/merge.cjs +0 -87
  209. package/dist/merge.cjs.map +0 -1
  210. package/dist/merge.mjs +0 -88
  211. package/dist/merge.mjs.map +0 -1
  212. package/dist/number.cjs +0 -11
  213. package/dist/number.cjs.map +0 -1
  214. package/dist/number.d.ts +0 -137
  215. package/dist/number.mjs +0 -11
  216. package/dist/number.mjs.map +0 -1
  217. package/dist/object/get-set.d.ts +0 -111
  218. package/dist/object/is.d.ts +0 -32
  219. package/dist/object/merge.d.ts +0 -72
  220. package/dist/object.cjs +0 -130
  221. package/dist/object.cjs.map +0 -1
  222. package/dist/object.mjs +0 -130
  223. package/dist/object.mjs.map +0 -1
  224. package/dist/path.cjs +0 -77
  225. package/dist/path.cjs.map +0 -1
  226. package/dist/path.d.ts +0 -82
  227. package/dist/path.mjs +0 -77
  228. package/dist/path.mjs.map +0 -1
  229. package/dist/promise.cjs +0 -62
  230. package/dist/promise.cjs.map +0 -1
  231. package/dist/promise.mjs +0 -62
  232. package/dist/promise.mjs.map +0 -1
  233. package/dist/qs.cjs +0 -47
  234. package/dist/qs.cjs.map +0 -1
  235. package/dist/qs.mjs +0 -47
  236. package/dist/qs.mjs.map +0 -1
  237. package/dist/regexp.cjs +0 -66
  238. package/dist/regexp.cjs.map +0 -1
  239. package/dist/regexp.d.ts +0 -65
  240. package/dist/regexp.mjs +0 -66
  241. package/dist/regexp.mjs.map +0 -1
  242. package/dist/string.cjs +0 -16
  243. package/dist/string.cjs.map +0 -1
  244. package/dist/string.d.ts +0 -80
  245. package/dist/string.mjs +0 -16
  246. package/dist/string.mjs.map +0 -1
  247. package/dist/string2.cjs +0 -147
  248. package/dist/string2.cjs.map +0 -1
  249. package/dist/string2.mjs +0 -148
  250. package/dist/string2.mjs.map +0 -1
  251. package/dist/time/from.d.ts +0 -14
  252. package/dist/time/to.d.ts +0 -38
  253. package/dist/time.cjs +0 -82
  254. package/dist/time.cjs.map +0 -1
  255. package/dist/time.mjs +0 -82
  256. package/dist/time.mjs.map +0 -1
  257. package/dist/timer.cjs +0 -119
  258. package/dist/timer.cjs.map +0 -1
  259. package/dist/timer.d.ts +0 -96
  260. package/dist/timer.mjs.map +0 -1
  261. package/dist/tree.cjs +0 -125
  262. package/dist/tree.cjs.map +0 -1
  263. package/dist/tree.mjs +0 -125
  264. package/dist/tree.mjs.map +0 -1
  265. package/dist/type.cjs +0 -78
  266. package/dist/type.cjs.map +0 -1
  267. package/dist/type.mjs +0 -78
  268. package/dist/type.mjs.map +0 -1
  269. package/dist/types.cjs +0 -2
  270. package/dist/types.cjs.map +0 -1
  271. package/dist/types.mjs +0 -2
  272. package/dist/types.mjs.map +0 -1
  273. package/dist/unique.cjs +0 -46
  274. package/dist/unique.cjs.map +0 -1
  275. package/dist/unique.d.ts +0 -22
  276. package/dist/unique.mjs +0 -46
  277. package/dist/unique.mjs.map +0 -1
  278. package/dist/url.cjs +0 -37
  279. package/dist/url.cjs.map +0 -1
  280. package/dist/url.d.ts +0 -53
  281. package/dist/url.mjs +0 -37
  282. package/dist/url.mjs.map +0 -1
  283. package/dist/version.cjs +0 -33
  284. package/dist/version.cjs.map +0 -1
  285. package/dist/version.d.ts +0 -32
  286. package/dist/version.mjs +0 -33
  287. package/dist/version.mjs.map +0 -1
  288. /package/{dist/color.d.ts → src/color.ts} +0 -0
  289. /package/{dist/date.d.ts → src/date.ts} +0 -0
  290. /package/{dist/dict.d.ts → src/dict.ts} +0 -0
  291. /package/{dist/object.d.ts → src/object.ts} +0 -0
  292. /package/{dist/time.d.ts → src/time.ts} +0 -0
package/dist/path.d.ts DELETED
@@ -1,82 +0,0 @@
1
- /**
2
- * 判断是否是绝对路径
3
- * @param {string} path - 路径字符串
4
- * @returns {boolean} - 如果是绝对路径则返回true,否则返回false
5
- * @example
6
- * ```typescript
7
- * const isAbs = isAbsolutePath('/path/to/file');
8
- * console.log(isAbs); // 输出: true
9
- * ```
10
- */
11
- export declare function isAbsolutePath(path: string): boolean;
12
- /**
13
- * 判断是否是相对路径
14
- * @param {string} path - 路径字符串
15
- * @returns {boolean} - 如果是相对路径则返回true,否则返回false
16
- * @example
17
- * ```typescript
18
- * const isRel = isRelativePath('path/to/file');
19
- * console.log(isRel); // 输出: true
20
- * ```
21
- */
22
- export declare function isRelativePath(path: string): boolean;
23
- /**
24
- * 标准化路径
25
- * @param {string} path - 要标准化的路径字符串。
26
- * @returns {string} - 标准化后的路径字符串。
27
- * @example
28
- * ```typescript
29
- * const normalizedPath = pathNormalize('/path///to///file');
30
- * console.log(normalizedPath); // 输出: '/path/to/file'
31
- * ```
32
- */
33
- export declare function pathNormalize(path: string): string;
34
- /**
35
- * 路径合并
36
- * @param {string} from - 起始路径。
37
- * @param {...string[]} to - 要合并的路径片段。
38
- * @returns {string} - 合并后的路径字符串。
39
- * @example
40
- * ```typescript
41
- * const fullPath = pathJoin('/path', '/to', 'file');
42
- * console.log(fullPath); // 输出: '/path/to/file'
43
- * ```
44
- */
45
- export declare function pathJoin(from: string, ...to: string[]): string;
46
- /**
47
- * 解析路径
48
- * @param {string} from - 起始路径
49
- * @param {...string[]} to - 要解析的路径片段
50
- * @returns {string} - 解析后的绝对路径
51
- * @example
52
- * ```typescript
53
- * const resolvedPath = pathResolve('/path', '/to', 'file');
54
- * console.log(resolvedPath); // 输出: '/to/file'
55
- * ```
56
- */
57
- export declare function pathResolve(from: string, ...to: string[]): string;
58
- /**
59
- * 将相对路径转换为标准的相对路径格式(添加'./'前缀)
60
- *
61
- * @param {string} path - 要处理的路径字符串
62
- * @returns {string} 处理后的路径字符串
63
- *
64
- * @example <caption>处理绝对路径</caption>
65
- * ```typescript
66
- * const result = pathRelativize('/path/to/file');
67
- * console.log(result); // 输出: '/path/to/file'
68
- * ```
69
- *
70
- * @example <caption>处理已带'./'前缀的相对路径</caption>
71
- * ```typescript
72
- * const result = pathRelativize('./path/to/file');
73
- * console.log(result); // 输出: './path/to/file'
74
- * ```
75
- *
76
- * @example <caption>处理不带'./'前缀的相对路径</caption>
77
- * ```typescript
78
- * const result = pathRelativize('path/to/file');
79
- * console.log(result); // 输出: './path/to/file'
80
- * ```
81
- */
82
- export declare function pathRelativize(path: string): string;
package/dist/path.mjs DELETED
@@ -1,77 +0,0 @@
1
- import { arrayEach } from "./array.mjs";
2
- function _isCurrentSlice(slice) {
3
- return slice === ".";
4
- }
5
- function _isParentSlice(slice) {
6
- return slice === "..";
7
- }
8
- function isAbsolutePath(path) {
9
- return path.startsWith("/");
10
- }
11
- function isRelativePath(path) {
12
- return !isAbsolutePath(path);
13
- }
14
- function pathNormalize(path) {
15
- const slices = path.replace(/\\/g, "/").replace(/\/{2,}/g, "/").replace(/\.{3,}/g, "..").replace(/\/\.\//g, "/").split("/").map((point) => point.trim());
16
- const points = [];
17
- const isAbs = slices[0] === "";
18
- const push = (point) => {
19
- points.push(point);
20
- };
21
- const back = () => {
22
- if (points.length === 1 && isAbs) return;
23
- if (points.length === 0 || points.at(-1) === "..") {
24
- points.push("..");
25
- } else {
26
- points.pop();
27
- }
28
- };
29
- for (const slice of slices) {
30
- const isCurrent = _isCurrentSlice(slice);
31
- const isParent = _isParentSlice(slice);
32
- if (isCurrent) {
33
- continue;
34
- }
35
- if (isParent) {
36
- back();
37
- continue;
38
- }
39
- push(slice);
40
- }
41
- return points.join("/");
42
- }
43
- function pathJoin(from, ...to) {
44
- return pathNormalize([from, ...to].join("/"));
45
- }
46
- function pathResolve(from, ...to) {
47
- const paths = [from, ...to].map(pathNormalize);
48
- let lastStartPath = from;
49
- let lastStartIndex = 0;
50
- arrayEach(
51
- paths,
52
- (path, index) => {
53
- if (isAbsolutePath(path)) {
54
- lastStartPath = path;
55
- lastStartIndex = index;
56
- return false;
57
- }
58
- },
59
- true
60
- );
61
- return pathJoin(lastStartPath, ...paths.slice(lastStartIndex + 1));
62
- }
63
- function pathRelativize(path) {
64
- if (isAbsolutePath(path)) return path;
65
- if (path.startsWith("./")) return path;
66
- if (path.startsWith("../")) return path;
67
- return `./${path}`;
68
- }
69
- export {
70
- isAbsolutePath,
71
- isRelativePath,
72
- pathJoin,
73
- pathNormalize,
74
- pathRelativize,
75
- pathResolve
76
- };
77
- //# sourceMappingURL=path.mjs.map
package/dist/path.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"path.mjs","sources":["../src/path.ts"],"sourcesContent":["import { arrayEach } from './array';\n\n/**\n * 判断是否是当前目录标记\n * @param {string} slice - 路径片段\n * @returns {boolean} - 如果是当前目录标记'.'则返回true,否则返回false\n */\nfunction _isCurrentSlice(slice: string): boolean {\n return slice === '.';\n}\n\n/**\n * 判断是否是上级目录标记\n * @param {string} slice - 路径片段\n * @returns {boolean} - 如果是上级目录标记'..'则返回true,否则返回false\n */\nfunction _isParentSlice(slice: string): boolean {\n return slice === '..';\n}\n\n/**\n * 判断是否是绝对路径\n * @param {string} path - 路径字符串\n * @returns {boolean} - 如果是绝对路径则返回true,否则返回false\n * @example\n * ```typescript\n * const isAbs = isAbsolutePath('/path/to/file');\n * console.log(isAbs); // 输出: true\n * ```\n */\nexport function isAbsolutePath(path: string): boolean {\n return path.startsWith('/');\n}\n\n/**\n * 判断是否是相对路径\n * @param {string} path - 路径字符串\n * @returns {boolean} - 如果是相对路径则返回true,否则返回false\n * @example\n * ```typescript\n * const isRel = isRelativePath('path/to/file');\n * console.log(isRel); // 输出: true\n * ```\n */\nexport function isRelativePath(path: string): boolean {\n return !isAbsolutePath(path);\n}\n\n/**\n * 标准化路径\n * @param {string} path - 要标准化的路径字符串。\n * @returns {string} - 标准化后的路径字符串。\n * @example\n * ```typescript\n * const normalizedPath = pathNormalize('/path///to///file');\n * console.log(normalizedPath); // 输出: '/path/to/file'\n * ```\n */\nexport function pathNormalize(path: string): string {\n const slices = path\n .replace(/\\\\/g, '/')\n .replace(/\\/{2,}/g, '/')\n .replace(/\\.{3,}/g, '..')\n .replace(/\\/\\.\\//g, '/')\n .split('/')\n .map((point) => point.trim());\n const points: string[] = [];\n const isAbs = slices[0] === '';\n\n const push = (point: string) => {\n points.push(point);\n };\n\n const back = () => {\n // 绝对路径不能退到根目录\n if (points.length === 1 && isAbs) return;\n\n //\n if (points.length === 0 || points.at(-1) === '..') {\n points.push('..');\n } else {\n points.pop();\n }\n };\n\n for (const slice of slices) {\n const isCurrent = _isCurrentSlice(slice);\n const isParent = _isParentSlice(slice);\n\n // // 未进入实际路径\n // if (!inPoints) {\n // push(slice);\n // inPoints = !isCurrent && !isParent;\n // continue;\n // }\n\n if (isCurrent) {\n continue;\n }\n\n if (isParent) {\n back();\n continue;\n }\n\n push(slice);\n }\n\n return points.join('/');\n}\n\n/**\n * 路径合并\n * @param {string} from - 起始路径。\n * @param {...string[]} to - 要合并的路径片段。\n * @returns {string} - 合并后的路径字符串。\n * @example\n * ```typescript\n * const fullPath = pathJoin('/path', '/to', 'file');\n * console.log(fullPath); // 输出: '/path/to/file'\n * ```\n */\nexport function pathJoin(from: string, ...to: string[]): string {\n return pathNormalize([from, ...to].join('/'));\n}\n\n/**\n * 解析路径\n * @param {string} from - 起始路径\n * @param {...string[]} to - 要解析的路径片段\n * @returns {string} - 解析后的绝对路径\n * @example\n * ```typescript\n * const resolvedPath = pathResolve('/path', '/to', 'file');\n * console.log(resolvedPath); // 输出: '/to/file'\n * ```\n */\nexport function pathResolve(from: string, ...to: string[]): string {\n const paths = [from, ...to].map(pathNormalize);\n\n let lastStartPath = from;\n let lastStartIndex = 0;\n\n arrayEach(\n paths,\n (path, index) => {\n if (isAbsolutePath(path)) {\n lastStartPath = path;\n lastStartIndex = index;\n return false;\n }\n },\n true,\n );\n\n return pathJoin(lastStartPath, ...paths.slice(lastStartIndex + 1));\n}\n\n/**\n * 将相对路径转换为标准的相对路径格式(添加'./'前缀)\n *\n * @param {string} path - 要处理的路径字符串\n * @returns {string} 处理后的路径字符串\n *\n * @example <caption>处理绝对路径</caption>\n * ```typescript\n * const result = pathRelativize('/path/to/file');\n * console.log(result); // 输出: '/path/to/file'\n * ```\n *\n * @example <caption>处理已带'./'前缀的相对路径</caption>\n * ```typescript\n * const result = pathRelativize('./path/to/file');\n * console.log(result); // 输出: './path/to/file'\n * ```\n *\n * @example <caption>处理不带'./'前缀的相对路径</caption>\n * ```typescript\n * const result = pathRelativize('path/to/file');\n * console.log(result); // 输出: './path/to/file'\n * ```\n */\nexport function pathRelativize(path: string): string {\n if (isAbsolutePath(path)) return path;\n if (path.startsWith('./')) return path;\n if (path.startsWith('../')) return path;\n return `./${path}`;\n}\n"],"names":[],"mappings":";AAOA,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,UAAU;AACnB;AAOA,SAAS,eAAe,OAAwB;AAC9C,SAAO,UAAU;AACnB;AAYO,SAAS,eAAe,MAAuB;AAC7C,SAAA,KAAK,WAAW,GAAG;AAC5B;AAYO,SAAS,eAAe,MAAuB;AAC7C,SAAA,CAAC,eAAe,IAAI;AAC7B;AAYO,SAAS,cAAc,MAAsB;AAC5C,QAAA,SAAS,KACZ,QAAQ,OAAO,GAAG,EAClB,QAAQ,WAAW,GAAG,EACtB,QAAQ,WAAW,IAAI,EACvB,QAAQ,WAAW,GAAG,EACtB,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAA,CAAM;AAC9B,QAAM,SAAmB,CAAC;AACpB,QAAA,QAAQ,OAAO,CAAC,MAAM;AAEtB,QAAA,OAAO,CAAC,UAAkB;AAC9B,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,QAAM,OAAO,MAAM;AAEb,QAAA,OAAO,WAAW,KAAK,MAAO;AAGlC,QAAI,OAAO,WAAW,KAAK,OAAO,GAAG,EAAE,MAAM,MAAM;AACjD,aAAO,KAAK,IAAI;AAAA,IAAA,OACX;AACL,aAAO,IAAI;AAAA,IAAA;AAAA,EAEf;AAEA,aAAW,SAAS,QAAQ;AACpB,UAAA,YAAY,gBAAgB,KAAK;AACjC,UAAA,WAAW,eAAe,KAAK;AASrC,QAAI,WAAW;AACb;AAAA,IAAA;AAGF,QAAI,UAAU;AACP,WAAA;AACL;AAAA,IAAA;AAGF,SAAK,KAAK;AAAA,EAAA;AAGL,SAAA,OAAO,KAAK,GAAG;AACxB;AAagB,SAAA,SAAS,SAAiB,IAAsB;AACvD,SAAA,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC;AAC9C;AAagB,SAAA,YAAY,SAAiB,IAAsB;AACjE,QAAM,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,aAAa;AAE7C,MAAI,gBAAgB;AACpB,MAAI,iBAAiB;AAErB;AAAA,IACE;AAAA,IACA,CAAC,MAAM,UAAU;AACX,UAAA,eAAe,IAAI,GAAG;AACR,wBAAA;AACC,yBAAA;AACV,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IACA;AAAA,EACF;AAEA,SAAO,SAAS,eAAe,GAAG,MAAM,MAAM,iBAAiB,CAAC,CAAC;AACnE;AA0BO,SAAS,eAAe,MAAsB;AAC/C,MAAA,eAAe,IAAI,EAAU,QAAA;AACjC,MAAI,KAAK,WAAW,IAAI,EAAU,QAAA;AAClC,MAAI,KAAK,WAAW,KAAK,EAAU,QAAA;AACnC,SAAO,KAAK,IAAI;AAClB;"}
package/dist/promise.cjs DELETED
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const type = require("./type.cjs");
4
- function isPromiseLike(unknown) {
5
- return type.isPromise(unknown) || type.isObject(unknown) && typeof unknown.then === "function";
6
- }
7
- async function promiseDelay(ms = 0, ctrl) {
8
- return new Promise((resolve) => {
9
- const t = setTimeout(resolve, ms);
10
- if (ctrl) {
11
- ctrl.signal.addEventListener("abort", () => {
12
- clearTimeout(t);
13
- resolve();
14
- });
15
- }
16
- });
17
- }
18
- async function promiseTimeout(promise, ms) {
19
- const ctrl = new AbortController();
20
- const result = await Promise.race([
21
- promise,
22
- promiseDelay(ms, ctrl).then(() => {
23
- throw new Error("timeout");
24
- })
25
- ]);
26
- ctrl.abort();
27
- return result;
28
- }
29
- function promiseWhen(condition, ms = 10) {
30
- return new Promise((resolve, reject) => {
31
- const check = () => {
32
- if (condition()) {
33
- resolve();
34
- } else {
35
- setTimeout(check, ms);
36
- }
37
- };
38
- check();
39
- });
40
- }
41
- function promiseShared(promise) {
42
- return new Promise((resolve, reject) => {
43
- promise.then(resolve, reject);
44
- });
45
- }
46
- function createMinDelayPromise(ms) {
47
- const startTime = Date.now();
48
- return async function end() {
49
- const endTime = Date.now();
50
- const waitTime = ms - (endTime - startTime);
51
- if (waitTime > 0) {
52
- await promiseDelay(waitTime);
53
- }
54
- };
55
- }
56
- exports.createMinDelayPromise = createMinDelayPromise;
57
- exports.isPromiseLike = isPromiseLike;
58
- exports.promiseDelay = promiseDelay;
59
- exports.promiseShared = promiseShared;
60
- exports.promiseTimeout = promiseTimeout;
61
- exports.promiseWhen = promiseWhen;
62
- //# sourceMappingURL=promise.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promise.cjs","sources":["../src/promise.ts"],"sourcesContent":["import { isObject, isPromise } from './type';\n\n/**\n * 检查给定的值是否为 Promise 类似对象。\n * @param unknown - 要检查的值。\n * @returns 如果值是 Promise 类似对象,则返回 `true`,否则返回 `false`。\n */\nexport function isPromiseLike<T>(unknown: unknown): unknown is Promise<T> {\n return isPromise(unknown) || (isObject(unknown) && typeof (unknown as unknown as Promise<T>).then === 'function');\n}\n\n/**\n * 等待一定时间后解决 Promise\n * @param ms - 等待的毫秒数,默认为 0\n * @param ctrl - 可选的 AbortController,用于提前终止等待\n * @returns 一个 Promise,等待指定时间后解决\n */\nexport async function promiseDelay(ms = 0, ctrl?: AbortController) {\n return new Promise<void>((resolve) => {\n const t = setTimeout(resolve, ms);\n\n if (ctrl) {\n ctrl.signal.addEventListener('abort', () => {\n clearTimeout(t);\n resolve();\n });\n }\n });\n}\n\n/**\n * 使 Promise 在指定时间内执行,超时则拒绝\n * @param promise - 要执行的 Promise\n * @param ms - 超时的毫秒数\n * @returns 如果 Promise 在指定时间内解决,则返回其结果;否则抛出 \"timeout\" 错误\n * @throws {Error} 如果 Promise 超时,抛出 \"timeout\" 错误\n */\nexport async function promiseTimeout<T>(promise: Promise<T>, ms: number) {\n const ctrl = new AbortController();\n const result = await Promise.race([\n promise,\n promiseDelay(ms, ctrl).then(() => {\n throw new Error('timeout');\n }),\n ]);\n ctrl.abort();\n return result;\n}\n\n/**\n * 在指定条件满足时解决 Promise\n * @param condition - 一个返回布尔值的函数,用于检查条件是否满足\n * @param ms - 检查条件的时间间隔(毫秒),默认为 10\n * @returns 一个 Promise,在条件满足时解决\n */\nexport function promiseWhen(condition: () => boolean, ms = 10) {\n return new Promise<void>((resolve, reject) => {\n const check = () => {\n if (condition()) {\n resolve();\n } else {\n setTimeout(check, ms);\n }\n };\n\n check();\n });\n}\n\n/**\n * 创建一个与给定 Promise 共享状态的新 Promise。\n * 新的 Promise 不具备 resolve 或 reject 的能力,它仅反映原始 Promise 的状态。\n * @param promise - 要共享状态的原始 Promise。\n * @returns 一个新的 Promise,其状态与给定的 Promise 完全相同。\n * @example\n * const { promise: p1 } = Promise.withResolvers();\n * const sp1 = sharedPromise(p1);\n * const sp2 = sharedPromise(p1);\n * // 此时 sp1、sp2 完全共享 p1 的状态,自身并不具备 resolve 或 reject 的能力\n */\nexport function promiseShared<T>(promise: Promise<T>) {\n return new Promise<T>((resolve, reject) => {\n promise.then(resolve, reject);\n });\n}\n\n/**\n * 创建一个最小等待时间的函数\n * @param {number} ms - 最小等待时间(毫秒)\n * @returns {function} 返回一个异步函数,该函数会确保从 createMinDelayPromise 调用到其执行的时间至少为 ms 毫秒\n * @example\n * const end = createMinDelayPromise(1000);\n * // 执行一些操作\n * await end(); // 确保从 createMinDelayPromise 调用到这里的总时间至少为 1000 毫秒\n */\nexport function createMinDelayPromise(ms: number) {\n const startTime = Date.now();\n /**\n * 确保最小等待时间的结束函数\n * @async\n * @function end\n * @returns {Promise<void>} 在达到最小等待时间后解决\n */\n return async function end() {\n const endTime = Date.now();\n const waitTime = ms - (endTime - startTime);\n if (waitTime > 0) {\n await promiseDelay(waitTime);\n }\n };\n}\n"],"names":["isPromise","isObject"],"mappings":";;;AAOO,SAAS,cAAiB,SAAyC;AACjE,SAAAA,KAAA,UAAU,OAAO,KAAMC,KAAA,SAAS,OAAO,KAAK,OAAQ,QAAkC,SAAS;AACxG;AAQsB,eAAA,aAAa,KAAK,GAAG,MAAwB;AAC1D,SAAA,IAAI,QAAc,CAAC,YAAY;AAC9B,UAAA,IAAI,WAAW,SAAS,EAAE;AAEhC,QAAI,MAAM;AACH,WAAA,OAAO,iBAAiB,SAAS,MAAM;AAC1C,qBAAa,CAAC;AACN,gBAAA;AAAA,MAAA,CACT;AAAA,IAAA;AAAA,EACH,CACD;AACH;AASsB,eAAA,eAAkB,SAAqB,IAAY;AACjE,QAAA,OAAO,IAAI,gBAAgB;AAC3B,QAAA,SAAS,MAAM,QAAQ,KAAK;AAAA,IAChC;AAAA,IACA,aAAa,IAAI,IAAI,EAAE,KAAK,MAAM;AAC1B,YAAA,IAAI,MAAM,SAAS;AAAA,IAC1B,CAAA;AAAA,EAAA,CACF;AACD,OAAK,MAAM;AACJ,SAAA;AACT;AAQgB,SAAA,YAAY,WAA0B,KAAK,IAAI;AAC7D,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,UAAM,QAAQ,MAAM;AAClB,UAAI,aAAa;AACP,gBAAA;AAAA,MAAA,OACH;AACL,mBAAW,OAAO,EAAE;AAAA,MAAA;AAAA,IAExB;AAEM,UAAA;AAAA,EAAA,CACP;AACH;AAaO,SAAS,cAAiB,SAAqB;AACpD,SAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACjC,YAAA,KAAK,SAAS,MAAM;AAAA,EAAA,CAC7B;AACH;AAWO,SAAS,sBAAsB,IAAY;AAC1C,QAAA,YAAY,KAAK,IAAI;AAO3B,SAAO,eAAe,MAAM;AACpB,UAAA,UAAU,KAAK,IAAI;AACnB,UAAA,WAAW,MAAM,UAAU;AACjC,QAAI,WAAW,GAAG;AAChB,YAAM,aAAa,QAAQ;AAAA,IAAA;AAAA,EAE/B;AACF;;;;;;;"}
package/dist/promise.mjs DELETED
@@ -1,62 +0,0 @@
1
- import { isPromise, isObject } from "./type.mjs";
2
- function isPromiseLike(unknown) {
3
- return isPromise(unknown) || isObject(unknown) && typeof unknown.then === "function";
4
- }
5
- async function promiseDelay(ms = 0, ctrl) {
6
- return new Promise((resolve) => {
7
- const t = setTimeout(resolve, ms);
8
- if (ctrl) {
9
- ctrl.signal.addEventListener("abort", () => {
10
- clearTimeout(t);
11
- resolve();
12
- });
13
- }
14
- });
15
- }
16
- async function promiseTimeout(promise, ms) {
17
- const ctrl = new AbortController();
18
- const result = await Promise.race([
19
- promise,
20
- promiseDelay(ms, ctrl).then(() => {
21
- throw new Error("timeout");
22
- })
23
- ]);
24
- ctrl.abort();
25
- return result;
26
- }
27
- function promiseWhen(condition, ms = 10) {
28
- return new Promise((resolve, reject) => {
29
- const check = () => {
30
- if (condition()) {
31
- resolve();
32
- } else {
33
- setTimeout(check, ms);
34
- }
35
- };
36
- check();
37
- });
38
- }
39
- function promiseShared(promise) {
40
- return new Promise((resolve, reject) => {
41
- promise.then(resolve, reject);
42
- });
43
- }
44
- function createMinDelayPromise(ms) {
45
- const startTime = Date.now();
46
- return async function end() {
47
- const endTime = Date.now();
48
- const waitTime = ms - (endTime - startTime);
49
- if (waitTime > 0) {
50
- await promiseDelay(waitTime);
51
- }
52
- };
53
- }
54
- export {
55
- createMinDelayPromise,
56
- isPromiseLike,
57
- promiseDelay,
58
- promiseShared,
59
- promiseTimeout,
60
- promiseWhen
61
- };
62
- //# sourceMappingURL=promise.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promise.mjs","sources":["../src/promise.ts"],"sourcesContent":["import { isObject, isPromise } from './type';\n\n/**\n * 检查给定的值是否为 Promise 类似对象。\n * @param unknown - 要检查的值。\n * @returns 如果值是 Promise 类似对象,则返回 `true`,否则返回 `false`。\n */\nexport function isPromiseLike<T>(unknown: unknown): unknown is Promise<T> {\n return isPromise(unknown) || (isObject(unknown) && typeof (unknown as unknown as Promise<T>).then === 'function');\n}\n\n/**\n * 等待一定时间后解决 Promise\n * @param ms - 等待的毫秒数,默认为 0\n * @param ctrl - 可选的 AbortController,用于提前终止等待\n * @returns 一个 Promise,等待指定时间后解决\n */\nexport async function promiseDelay(ms = 0, ctrl?: AbortController) {\n return new Promise<void>((resolve) => {\n const t = setTimeout(resolve, ms);\n\n if (ctrl) {\n ctrl.signal.addEventListener('abort', () => {\n clearTimeout(t);\n resolve();\n });\n }\n });\n}\n\n/**\n * 使 Promise 在指定时间内执行,超时则拒绝\n * @param promise - 要执行的 Promise\n * @param ms - 超时的毫秒数\n * @returns 如果 Promise 在指定时间内解决,则返回其结果;否则抛出 \"timeout\" 错误\n * @throws {Error} 如果 Promise 超时,抛出 \"timeout\" 错误\n */\nexport async function promiseTimeout<T>(promise: Promise<T>, ms: number) {\n const ctrl = new AbortController();\n const result = await Promise.race([\n promise,\n promiseDelay(ms, ctrl).then(() => {\n throw new Error('timeout');\n }),\n ]);\n ctrl.abort();\n return result;\n}\n\n/**\n * 在指定条件满足时解决 Promise\n * @param condition - 一个返回布尔值的函数,用于检查条件是否满足\n * @param ms - 检查条件的时间间隔(毫秒),默认为 10\n * @returns 一个 Promise,在条件满足时解决\n */\nexport function promiseWhen(condition: () => boolean, ms = 10) {\n return new Promise<void>((resolve, reject) => {\n const check = () => {\n if (condition()) {\n resolve();\n } else {\n setTimeout(check, ms);\n }\n };\n\n check();\n });\n}\n\n/**\n * 创建一个与给定 Promise 共享状态的新 Promise。\n * 新的 Promise 不具备 resolve 或 reject 的能力,它仅反映原始 Promise 的状态。\n * @param promise - 要共享状态的原始 Promise。\n * @returns 一个新的 Promise,其状态与给定的 Promise 完全相同。\n * @example\n * const { promise: p1 } = Promise.withResolvers();\n * const sp1 = sharedPromise(p1);\n * const sp2 = sharedPromise(p1);\n * // 此时 sp1、sp2 完全共享 p1 的状态,自身并不具备 resolve 或 reject 的能力\n */\nexport function promiseShared<T>(promise: Promise<T>) {\n return new Promise<T>((resolve, reject) => {\n promise.then(resolve, reject);\n });\n}\n\n/**\n * 创建一个最小等待时间的函数\n * @param {number} ms - 最小等待时间(毫秒)\n * @returns {function} 返回一个异步函数,该函数会确保从 createMinDelayPromise 调用到其执行的时间至少为 ms 毫秒\n * @example\n * const end = createMinDelayPromise(1000);\n * // 执行一些操作\n * await end(); // 确保从 createMinDelayPromise 调用到这里的总时间至少为 1000 毫秒\n */\nexport function createMinDelayPromise(ms: number) {\n const startTime = Date.now();\n /**\n * 确保最小等待时间的结束函数\n * @async\n * @function end\n * @returns {Promise<void>} 在达到最小等待时间后解决\n */\n return async function end() {\n const endTime = Date.now();\n const waitTime = ms - (endTime - startTime);\n if (waitTime > 0) {\n await promiseDelay(waitTime);\n }\n };\n}\n"],"names":[],"mappings":";AAOO,SAAS,cAAiB,SAAyC;AACjE,SAAA,UAAU,OAAO,KAAM,SAAS,OAAO,KAAK,OAAQ,QAAkC,SAAS;AACxG;AAQsB,eAAA,aAAa,KAAK,GAAG,MAAwB;AAC1D,SAAA,IAAI,QAAc,CAAC,YAAY;AAC9B,UAAA,IAAI,WAAW,SAAS,EAAE;AAEhC,QAAI,MAAM;AACH,WAAA,OAAO,iBAAiB,SAAS,MAAM;AAC1C,qBAAa,CAAC;AACN,gBAAA;AAAA,MAAA,CACT;AAAA,IAAA;AAAA,EACH,CACD;AACH;AASsB,eAAA,eAAkB,SAAqB,IAAY;AACjE,QAAA,OAAO,IAAI,gBAAgB;AAC3B,QAAA,SAAS,MAAM,QAAQ,KAAK;AAAA,IAChC;AAAA,IACA,aAAa,IAAI,IAAI,EAAE,KAAK,MAAM;AAC1B,YAAA,IAAI,MAAM,SAAS;AAAA,IAC1B,CAAA;AAAA,EAAA,CACF;AACD,OAAK,MAAM;AACJ,SAAA;AACT;AAQgB,SAAA,YAAY,WAA0B,KAAK,IAAI;AAC7D,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,UAAM,QAAQ,MAAM;AAClB,UAAI,aAAa;AACP,gBAAA;AAAA,MAAA,OACH;AACL,mBAAW,OAAO,EAAE;AAAA,MAAA;AAAA,IAExB;AAEM,UAAA;AAAA,EAAA,CACP;AACH;AAaO,SAAS,cAAiB,SAAqB;AACpD,SAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACjC,YAAA,KAAK,SAAS,MAAM;AAAA,EAAA,CAC7B;AACH;AAWO,SAAS,sBAAsB,IAAY;AAC1C,QAAA,YAAY,KAAK,IAAI;AAO3B,SAAO,eAAe,MAAM;AACpB,UAAA,UAAU,KAAK,IAAI;AACnB,UAAA,WAAW,MAAM,UAAU;AACjC,QAAI,WAAW,GAAG;AAChB,YAAM,aAAa,QAAQ;AAAA,IAAA;AAAA,EAE/B;AACF;"}
package/dist/qs.cjs DELETED
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const each = require("./each.cjs");
4
- const type = require("./type.cjs");
5
- function qsParse(queryString, parser) {
6
- const sp = new globalThis.URLSearchParams(queryString.replace(/^.*\?/, ""));
7
- const qsObject = {};
8
- for (const [key, val] of sp.entries()) {
9
- const valFinal = parser ? parser(val, key, qsObject) : val;
10
- if (type.isNullish(valFinal)) continue;
11
- if (Object.hasOwn(qsObject, key)) {
12
- if (!type.isArray(qsObject[key])) qsObject[key] = [qsObject[key]];
13
- qsObject[key].push(val);
14
- } else {
15
- qsObject[key] = valFinal;
16
- }
17
- }
18
- return qsObject;
19
- }
20
- const defaultWriter = (val) => {
21
- if (type.isString(val)) return val;
22
- if (type.isNumber(val)) return String(val);
23
- if (type.isBoolean(val)) return val ? "true" : "false";
24
- if (type.isDate(val)) return val.toISOString();
25
- return null;
26
- };
27
- function qsStringify(qsObject, stringify = defaultWriter) {
28
- const sp = new globalThis.URLSearchParams();
29
- const pushPairs = (val, key) => {
30
- const valFinal = stringify(val, String(key), qsObject);
31
- if (type.isNullish(valFinal)) return;
32
- sp.append(key, valFinal);
33
- };
34
- each.objectEach(qsObject, (val, key) => {
35
- if (type.isArray(val)) {
36
- for (const it of val) {
37
- pushPairs(it, key);
38
- }
39
- } else {
40
- pushPairs(val, key);
41
- }
42
- });
43
- return sp.toString();
44
- }
45
- exports.qsParse = qsParse;
46
- exports.qsStringify = qsStringify;
47
- //# sourceMappingURL=qs.cjs.map
package/dist/qs.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"qs.cjs","sources":["../src/qs.ts"],"sourcesContent":["import { objectEach } from './object';\nimport { isArray, isBoolean, isDate, isNull, isNullish, isNumber, isString, isUndefined } from './type';\nimport type { AnyObject } from './types';\n\n/**\n * 查询字符串解析函数\n * @template T - 解析后返回的对象类型\n * @callback QSReader\n * @param {string} value - 查询字符串的值\n * @param {string} key - 查询字符串的键\n * @param {T} qsObject - 当前解析的对象\n * @returns {unknown} 解析后的值,如果返回 undefined 或 null 则不会添加到对象中\n * @example\n * const parser: QSReader<MyObject> = (value, key, obj) => {\n * if (key === 'date') return new Date(value);\n * return value;\n * };\n */\nexport type QSReader<T extends AnyObject> = (value: string, key: string, qsObject: T) => unknown;\n\n/**\n * 解析查询字符串为对象\n * @template T - 返回的对象类型\n * @param {string} queryString - 要解析的查询字符串\n * @param {QSReader<T>} [parser] - 自定义解析函数\n * @returns {T} 解析后的对象\n * @example\n * const obj = qsParse('name=John&age=30');\n * // { name: 'John', age: '30' }\n *\n * const obj2 = qsParse('date=2023-01-01', (val, key) => {\n * if (key === 'date') return new Date(val);\n * return val;\n * });\n * // { date: Date('2023-01-01') }\n */\nexport function qsParse<T extends AnyObject>(queryString: string, parser?: QSReader<T>): T {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n const sp = new globalThis.URLSearchParams(queryString.replace(/^.*\\?/, ''));\n const qsObject = {} as T;\n\n for (const [key, val] of sp.entries()) {\n const valFinal = parser ? parser(val, key, qsObject) : val;\n\n if (isNullish(valFinal)) continue;\n\n if (Object.hasOwn(qsObject, key)) {\n // @ts-expect-error\n if (!isArray(qsObject[key])) qsObject[key] = [qsObject[key]];\n (qsObject[key] as unknown[]).push(val);\n } else {\n // @ts-expect-error\n qsObject[key] = valFinal;\n }\n }\n\n return qsObject;\n}\n\n/**\n * 查询字符串序列化函数\n * @template T - 要序列化的对象类型\n * @callback QSWriter\n * @param {unknown} value - 要序列化的值\n * @param {string} key - 对象的键\n * @param {T} query - 当前序列化的对象\n * @returns {string | null} 序列化后的字符串,如果返回 null 则忽略该键值对\n * @example\n * const writer: QSWriter<MyObject> = (val, key) => {\n * if (val instanceof Date) return val.toISOString();\n * return String(val);\n * };\n */\nexport type QSWriter<T extends AnyObject = AnyObject> = (value: unknown, key: string, query: T) => string | null;\nconst defaultWriter: QSWriter<AnyObject> = (val: unknown) => {\n if (isString(val)) return val;\n if (isNumber(val)) return String(val);\n if (isBoolean(val)) return val ? 'true' : 'false';\n if (isDate(val)) return val.toISOString();\n return null;\n};\n\n/**\n * 将对象序列化为查询字符串\n * @template T - 要序列化的对象类型\n * @param {T} qsObject - 要序列化的对象\n * @param {QSWriter<T>} [stringify=defaultWriter] - 自定义序列化函数\n * @returns {string} 序列化后的查询字符串\n * @example\n * const str = qsStringify({ name: 'John', age: 30 });\n * // 'name=John&age=30'\n *\n * const str2 = qsStringify({ date: new Date('2023-01-01') });\n * // 'date=2023-01-01T00:00:00.000Z'\n */\nexport function qsStringify<T extends AnyObject>(qsObject: T, stringify: QSWriter<T> = defaultWriter): string {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n const sp = new globalThis.URLSearchParams();\n const pushPairs = (val: unknown, key: string) => {\n const valFinal = stringify(val, String(key), qsObject);\n if (isNullish(valFinal)) return;\n\n sp.append(key, valFinal);\n };\n\n objectEach(qsObject, (val, key: string) => {\n if (isArray(val)) {\n for (const it of val) {\n pushPairs(it, key);\n }\n } else {\n pushPairs(val, key);\n }\n });\n\n return sp.toString();\n}\n"],"names":["isNullish","isArray","isString","isNumber","isBoolean","isDate","objectEach"],"mappings":";;;;AAoCgB,SAAA,QAA6B,aAAqB,QAAyB;AAGnF,QAAA,KAAK,IAAI,WAAW,gBAAgB,YAAY,QAAQ,SAAS,EAAE,CAAC;AAC1E,QAAM,WAAW,CAAC;AAElB,aAAW,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW;AACrC,UAAM,WAAW,SAAS,OAAO,KAAK,KAAK,QAAQ,IAAI;AAEnD,QAAAA,KAAAA,UAAU,QAAQ,EAAG;AAEzB,QAAI,OAAO,OAAO,UAAU,GAAG,GAAG;AAEhC,UAAI,CAACC,KAAA,QAAQ,SAAS,GAAG,CAAC,EAAY,UAAA,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;AAC1D,eAAS,GAAG,EAAgB,KAAK,GAAG;AAAA,IAAA,OAChC;AAEL,eAAS,GAAG,IAAI;AAAA,IAAA;AAAA,EAClB;AAGK,SAAA;AACT;AAiBA,MAAM,gBAAqC,CAAC,QAAiB;AACvD,MAAAC,KAAA,SAAS,GAAG,EAAU,QAAA;AAC1B,MAAIC,KAAS,SAAA,GAAG,EAAG,QAAO,OAAO,GAAG;AACpC,MAAIC,KAAU,UAAA,GAAG,EAAG,QAAO,MAAM,SAAS;AAC1C,MAAIC,KAAO,OAAA,GAAG,EAAG,QAAO,IAAI,YAAY;AACjC,SAAA;AACT;AAegB,SAAA,YAAiC,UAAa,YAAyB,eAAuB;AAGtG,QAAA,KAAK,IAAI,WAAW,gBAAgB;AACpC,QAAA,YAAY,CAAC,KAAc,QAAgB;AAC/C,UAAM,WAAW,UAAU,KAAK,OAAO,GAAG,GAAG,QAAQ;AACjD,QAAAL,KAAAA,UAAU,QAAQ,EAAG;AAEtB,OAAA,OAAO,KAAK,QAAQ;AAAA,EACzB;AAEWM,OAAAA,WAAA,UAAU,CAAC,KAAK,QAAgB;AACrC,QAAAL,KAAAA,QAAQ,GAAG,GAAG;AAChB,iBAAW,MAAM,KAAK;AACpB,kBAAU,IAAI,GAAG;AAAA,MAAA;AAAA,IACnB,OACK;AACL,gBAAU,KAAK,GAAG;AAAA,IAAA;AAAA,EACpB,CACD;AAED,SAAO,GAAG,SAAS;AACrB;;;"}
package/dist/qs.mjs DELETED
@@ -1,47 +0,0 @@
1
- import { o as objectEach } from "./each.mjs";
2
- import { isNullish, isArray, isString, isNumber, isBoolean, isDate } from "./type.mjs";
3
- function qsParse(queryString, parser) {
4
- const sp = new globalThis.URLSearchParams(queryString.replace(/^.*\?/, ""));
5
- const qsObject = {};
6
- for (const [key, val] of sp.entries()) {
7
- const valFinal = parser ? parser(val, key, qsObject) : val;
8
- if (isNullish(valFinal)) continue;
9
- if (Object.hasOwn(qsObject, key)) {
10
- if (!isArray(qsObject[key])) qsObject[key] = [qsObject[key]];
11
- qsObject[key].push(val);
12
- } else {
13
- qsObject[key] = valFinal;
14
- }
15
- }
16
- return qsObject;
17
- }
18
- const defaultWriter = (val) => {
19
- if (isString(val)) return val;
20
- if (isNumber(val)) return String(val);
21
- if (isBoolean(val)) return val ? "true" : "false";
22
- if (isDate(val)) return val.toISOString();
23
- return null;
24
- };
25
- function qsStringify(qsObject, stringify = defaultWriter) {
26
- const sp = new globalThis.URLSearchParams();
27
- const pushPairs = (val, key) => {
28
- const valFinal = stringify(val, String(key), qsObject);
29
- if (isNullish(valFinal)) return;
30
- sp.append(key, valFinal);
31
- };
32
- objectEach(qsObject, (val, key) => {
33
- if (isArray(val)) {
34
- for (const it of val) {
35
- pushPairs(it, key);
36
- }
37
- } else {
38
- pushPairs(val, key);
39
- }
40
- });
41
- return sp.toString();
42
- }
43
- export {
44
- qsParse,
45
- qsStringify
46
- };
47
- //# sourceMappingURL=qs.mjs.map
package/dist/qs.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"qs.mjs","sources":["../src/qs.ts"],"sourcesContent":["import { objectEach } from './object';\nimport { isArray, isBoolean, isDate, isNull, isNullish, isNumber, isString, isUndefined } from './type';\nimport type { AnyObject } from './types';\n\n/**\n * 查询字符串解析函数\n * @template T - 解析后返回的对象类型\n * @callback QSReader\n * @param {string} value - 查询字符串的值\n * @param {string} key - 查询字符串的键\n * @param {T} qsObject - 当前解析的对象\n * @returns {unknown} 解析后的值,如果返回 undefined 或 null 则不会添加到对象中\n * @example\n * const parser: QSReader<MyObject> = (value, key, obj) => {\n * if (key === 'date') return new Date(value);\n * return value;\n * };\n */\nexport type QSReader<T extends AnyObject> = (value: string, key: string, qsObject: T) => unknown;\n\n/**\n * 解析查询字符串为对象\n * @template T - 返回的对象类型\n * @param {string} queryString - 要解析的查询字符串\n * @param {QSReader<T>} [parser] - 自定义解析函数\n * @returns {T} 解析后的对象\n * @example\n * const obj = qsParse('name=John&age=30');\n * // { name: 'John', age: '30' }\n *\n * const obj2 = qsParse('date=2023-01-01', (val, key) => {\n * if (key === 'date') return new Date(val);\n * return val;\n * });\n * // { date: Date('2023-01-01') }\n */\nexport function qsParse<T extends AnyObject>(queryString: string, parser?: QSReader<T>): T {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n const sp = new globalThis.URLSearchParams(queryString.replace(/^.*\\?/, ''));\n const qsObject = {} as T;\n\n for (const [key, val] of sp.entries()) {\n const valFinal = parser ? parser(val, key, qsObject) : val;\n\n if (isNullish(valFinal)) continue;\n\n if (Object.hasOwn(qsObject, key)) {\n // @ts-expect-error\n if (!isArray(qsObject[key])) qsObject[key] = [qsObject[key]];\n (qsObject[key] as unknown[]).push(val);\n } else {\n // @ts-expect-error\n qsObject[key] = valFinal;\n }\n }\n\n return qsObject;\n}\n\n/**\n * 查询字符串序列化函数\n * @template T - 要序列化的对象类型\n * @callback QSWriter\n * @param {unknown} value - 要序列化的值\n * @param {string} key - 对象的键\n * @param {T} query - 当前序列化的对象\n * @returns {string | null} 序列化后的字符串,如果返回 null 则忽略该键值对\n * @example\n * const writer: QSWriter<MyObject> = (val, key) => {\n * if (val instanceof Date) return val.toISOString();\n * return String(val);\n * };\n */\nexport type QSWriter<T extends AnyObject = AnyObject> = (value: unknown, key: string, query: T) => string | null;\nconst defaultWriter: QSWriter<AnyObject> = (val: unknown) => {\n if (isString(val)) return val;\n if (isNumber(val)) return String(val);\n if (isBoolean(val)) return val ? 'true' : 'false';\n if (isDate(val)) return val.toISOString();\n return null;\n};\n\n/**\n * 将对象序列化为查询字符串\n * @template T - 要序列化的对象类型\n * @param {T} qsObject - 要序列化的对象\n * @param {QSWriter<T>} [stringify=defaultWriter] - 自定义序列化函数\n * @returns {string} 序列化后的查询字符串\n * @example\n * const str = qsStringify({ name: 'John', age: 30 });\n * // 'name=John&age=30'\n *\n * const str2 = qsStringify({ date: new Date('2023-01-01') });\n * // 'date=2023-01-01T00:00:00.000Z'\n */\nexport function qsStringify<T extends AnyObject>(qsObject: T, stringify: QSWriter<T> = defaultWriter): string {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n const sp = new globalThis.URLSearchParams();\n const pushPairs = (val: unknown, key: string) => {\n const valFinal = stringify(val, String(key), qsObject);\n if (isNullish(valFinal)) return;\n\n sp.append(key, valFinal);\n };\n\n objectEach(qsObject, (val, key: string) => {\n if (isArray(val)) {\n for (const it of val) {\n pushPairs(it, key);\n }\n } else {\n pushPairs(val, key);\n }\n });\n\n return sp.toString();\n}\n"],"names":[],"mappings":";;AAoCgB,SAAA,QAA6B,aAAqB,QAAyB;AAGnF,QAAA,KAAK,IAAI,WAAW,gBAAgB,YAAY,QAAQ,SAAS,EAAE,CAAC;AAC1E,QAAM,WAAW,CAAC;AAElB,aAAW,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW;AACrC,UAAM,WAAW,SAAS,OAAO,KAAK,KAAK,QAAQ,IAAI;AAEnD,QAAA,UAAU,QAAQ,EAAG;AAEzB,QAAI,OAAO,OAAO,UAAU,GAAG,GAAG;AAEhC,UAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAY,UAAA,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;AAC1D,eAAS,GAAG,EAAgB,KAAK,GAAG;AAAA,IAAA,OAChC;AAEL,eAAS,GAAG,IAAI;AAAA,IAAA;AAAA,EAClB;AAGK,SAAA;AACT;AAiBA,MAAM,gBAAqC,CAAC,QAAiB;AACvD,MAAA,SAAS,GAAG,EAAU,QAAA;AAC1B,MAAI,SAAS,GAAG,EAAG,QAAO,OAAO,GAAG;AACpC,MAAI,UAAU,GAAG,EAAG,QAAO,MAAM,SAAS;AAC1C,MAAI,OAAO,GAAG,EAAG,QAAO,IAAI,YAAY;AACjC,SAAA;AACT;AAegB,SAAA,YAAiC,UAAa,YAAyB,eAAuB;AAGtG,QAAA,KAAK,IAAI,WAAW,gBAAgB;AACpC,QAAA,YAAY,CAAC,KAAc,QAAgB;AAC/C,UAAM,WAAW,UAAU,KAAK,OAAO,GAAG,GAAG,QAAQ;AACjD,QAAA,UAAU,QAAQ,EAAG;AAEtB,OAAA,OAAO,KAAK,QAAQ;AAAA,EACzB;AAEW,aAAA,UAAU,CAAC,KAAK,QAAgB;AACrC,QAAA,QAAQ,GAAG,GAAG;AAChB,iBAAW,MAAM,KAAK;AACpB,kBAAU,IAAI,GAAG;AAAA,MAAA;AAAA,IACnB,OACK;AACL,gBAAU,KAAK,GAAG;AAAA,IAAA;AAAA,EACpB,CACD;AAED,SAAO,GAAG,SAAS;AACrB;"}
package/dist/regexp.cjs DELETED
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const specialRE = /[.*+?^=!:${}()|[\]/\\-]/g;
4
- function regexpEscape(string) {
5
- return string.replace(specialRE, "\\$&");
6
- }
7
- const EMAIL_RE = /^\w+[-+.\w]*@([a-z\d-]+\.)+[a-z]{2,5}$/i;
8
- function isEmail(value) {
9
- return EMAIL_RE.test(value);
10
- }
11
- const PHONE_RE = /^1\d{10}$/;
12
- function isPhone(value) {
13
- return PHONE_RE.test(value);
14
- }
15
- const IDNO_RE = /^(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|7[1]|8[1-2]|9[1])\d{4}(18|19|20)\d{2}[01]\d[0123]\d{4}[\dxX]$/;
16
- function isIDNo(value) {
17
- const isSameFormat = IDNO_RE.test(value);
18
- if (!isSameFormat) return false;
19
- const year = Number(value.slice(6, 10));
20
- const month = Number(value.slice(10, 12));
21
- const date = Number(value.slice(12, 14));
22
- const d = new Date(year, month - 1, date);
23
- const isSameDate = d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === date;
24
- if (!isSameDate) return false;
25
- const coefficientList = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
26
- const residueList = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
27
- let sum = 0;
28
- for (let start = 0; start < 17; start++) {
29
- sum += Number(value.slice(start, start + 1)) * coefficientList[start];
30
- }
31
- return residueList[sum % 11] === value.slice(-1);
32
- }
33
- const URL_RE = /^https?:\/\/(([a-z\d-]+\.)+[a-z]{2,5}|(\d{1,3}\.){3}\d{1,3})(:[1-9]\d{0,4})?(\/|\/[\w#!:.?+=&%@'/()-]+)?$/i;
34
- function isURL(value) {
35
- return URL_RE.test(value);
36
- }
37
- const IPV4_RE = /^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/;
38
- function isIPV4(value) {
39
- return IPV4_RE.test(value);
40
- }
41
- const INTEGER_RE = /^(-?[1-9]\d*|0)$/;
42
- function isInteger(value) {
43
- return INTEGER_RE.test(value);
44
- }
45
- const FLOAT_RE = /^-?([1-9]\d*|0)\.\d+$/;
46
- function isFloat(value) {
47
- return FLOAT_RE.test(value);
48
- }
49
- function isNumerical(value) {
50
- return isInteger(value) || isFloat(value);
51
- }
52
- const DIGIT_RE = /^\d+$/;
53
- function isDigit(value) {
54
- return DIGIT_RE.test(value);
55
- }
56
- exports.isDigit = isDigit;
57
- exports.isEmail = isEmail;
58
- exports.isFloat = isFloat;
59
- exports.isIDNo = isIDNo;
60
- exports.isIPV4 = isIPV4;
61
- exports.isInteger = isInteger;
62
- exports.isNumerical = isNumerical;
63
- exports.isPhone = isPhone;
64
- exports.isURL = isURL;
65
- exports.regexpEscape = regexpEscape;
66
- //# sourceMappingURL=regexp.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"regexp.cjs","sources":["../src/regexp.ts"],"sourcesContent":["const specialRE = /[.*+?^=!:${}()|[\\]/\\\\-]/g;\n\n/**\n * 编码处理正则表达式\n * @example\n * ```js\n * reEscape('/$')\n * // => '\\\\/\\\\$'\n * ```\n * @param {string} string\n * @returns {string}\n */\nexport function regexpEscape(string: string): string {\n return string.replace(specialRE, '\\\\$&');\n}\n\n// 邮箱\nconst EMAIL_RE = /^\\w+[-+.\\w]*@([a-z\\d-]+\\.)+[a-z]{2,5}$/i;\n/**\n * 判断字符串是否为邮箱格式,不对邮箱真实性做验证,如域名是否正确等\n * @param {string} value\n * @returns {boolean}\n */\nexport function isEmail(value: string): boolean {\n return EMAIL_RE.test(value);\n}\n\n// 手机号码\nconst PHONE_RE = /^1\\d{10}$/;\n/**\n * 判断字符串是否为宽松手机格式,即首位为 1 的 11 位数字都属于手机号\n * @param {string} value\n * @returns {boolean}\n */\nexport function isPhone(value: string): boolean {\n return PHONE_RE.test(value);\n}\n\n// 身份证号码\n// http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/\n// [\"北京市\", \"天津市\", \"河北省\", \"山西省\", \"内蒙古自治区\",\n// \"辽宁省\", \"吉林省\", \"黑龙江省\",\n// \"上海市\", \"江苏省\", \"浙江省\", \"安徽省\", \"福建省\", \"江西省\", \"山东省\",\n// \"河南省\", \"湖北省\", \"湖南省\", \"广东省\", \"广西壮族自治区\", \"海南省\",\n// \"重庆市\", \"四川省\", \"贵州省\", \"云南省\", \"西藏自治区\",\n// \"陕西省\", \"甘肃省\", \"青海省\",\"宁夏回族自治区\", \"新疆维吾尔自治区\",\n// \"台湾省\",\n// \"香港特别行政区\", \"澳门特别行政区\"]\n// [\"11\", \"12\", \"13\", \"14\", \"15\",\n// \"21\", \"22\", \"23\",\n// \"31\", \"32\", \"33\", \"34\", \"35\", \"36\", \"37\",\n// \"41\", \"42\", \"43\", \"44\", \"45\", \"46\",\n// \"50\", \"51\", \"52\", \"53\", \"54\",\n// \"61\", \"62\", \"63\", \"64\", \"65\",\n// \"71\",\n// \"81\", \"82\"]\n// 91 国外\nconst IDNO_RE =\n /^(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|7[1]|8[1-2]|9[1])\\d{4}(18|19|20)\\d{2}[01]\\d[0123]\\d{4}[\\dxX]$/;\n/**\n * 判断字符串是否为身份证号码格式\n * @param {string} value\n * @returns {boolean}\n */\nexport function isIDNo(value: string): boolean {\n const isSameFormat = IDNO_RE.test(value);\n\n if (!isSameFormat) return false;\n\n const year = Number(value.slice(6, 10));\n const month = Number(value.slice(10, 12));\n const date = Number(value.slice(12, 14));\n const d = new Date(year, month - 1, date);\n const isSameDate = d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === date;\n\n if (!isSameDate) return false;\n\n // 将身份证号码前面的17位数分别乘以不同的系数;\n // 从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2\n // 将这17位数字和系数相乘的结果相加;\n // 用加出来和除以11,看余数是多少;\n // 余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字;\n // 其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2\n // 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。\n const coefficientList = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const residueList = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let sum = 0;\n\n for (let start = 0; start < 17; start++) {\n sum += Number(value.slice(start, start + 1)) * coefficientList[start];\n }\n\n return residueList[sum % 11] === value.slice(-1);\n}\n\n// url\nconst URL_RE =\n /^https?:\\/\\/(([a-z\\d-]+\\.)+[a-z]{2,5}|(\\d{1,3}\\.){3}\\d{1,3})(:[1-9]\\d{0,4})?(\\/|\\/[\\w#!:.?+=&%@'/()-]+)?$/i;\n/**\n * 判断字符串是否为 url 格式,仅支持 http 协议,支持域名或者 ipV4\n * @param {string} value\n * @returns {boolean}\n */\nexport function isURL(value: string): boolean {\n return URL_RE.test(value);\n}\n\n// ipv4\nconst IPV4_RE = /^(?:(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n/**\n * 判断字符串是否为 IPV4 格式,不对 ip 真实性做验证\n * @param {string} value\n * @returns {boolean}\n */\nexport function isIPV4(value: string): boolean {\n return IPV4_RE.test(value);\n}\n\nconst INTEGER_RE = /^(-?[1-9]\\d*|0)$/;\n/**\n * 判断字符串是否为整数(自然数),即 ...,-3,-2,-1,0,1,2,3,...\n * @param {string} value\n * @returns {boolean}\n */\nexport function isInteger(value: string): boolean {\n return INTEGER_RE.test(value);\n}\n\nconst FLOAT_RE = /^-?([1-9]\\d*|0)\\.\\d+$/;\n/**\n * 判断字符串是否为浮点数,即必须有小数点的有理数\n * @param {string} value\n * @returns {boolean}\n */\nexport function isFloat(value: string): boolean {\n return FLOAT_RE.test(value);\n}\n\n/**\n * 判断字符串是否为正确数值,包括整数和浮点数\n * @param {string} value\n * @returns {boolean}\n */\nexport function isNumerical(value: string): boolean {\n return isInteger(value) || isFloat(value);\n}\n\nconst DIGIT_RE = /^\\d+$/;\n/**\n * 判断字符串是否为数字,例如六位数字短信验证码(093031)\n * @param {string} value\n * @returns {boolean}\n */\nexport function isDigit(value: string): boolean {\n return DIGIT_RE.test(value);\n}\n"],"names":[],"mappings":";;AAAA,MAAM,YAAY;AAYX,SAAS,aAAa,QAAwB;AAC5C,SAAA,OAAO,QAAQ,WAAW,MAAM;AACzC;AAGA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;AAGA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;AAqBA,MAAM,UACJ;AAMK,SAAS,OAAO,OAAwB;AACvC,QAAA,eAAe,QAAQ,KAAK,KAAK;AAEnC,MAAA,CAAC,aAAqB,QAAA;AAE1B,QAAM,OAAO,OAAO,MAAM,MAAM,GAAG,EAAE,CAAC;AACtC,QAAM,QAAQ,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AACxC,QAAM,OAAO,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AACvC,QAAM,IAAI,IAAI,KAAK,MAAM,QAAQ,GAAG,IAAI;AACxC,QAAM,aAAa,EAAE,YAAY,MAAM,QAAQ,EAAE,SAAS,IAAI,MAAM,SAAS,EAAE,QAAc,MAAA;AAEzF,MAAA,CAAC,WAAmB,QAAA;AASxB,QAAM,kBAAkB,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAC5E,QAAM,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC1E,MAAI,MAAM;AAEV,WAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS;AAChC,WAAA,OAAO,MAAM,MAAM,OAAO,QAAQ,CAAC,CAAC,IAAI,gBAAgB,KAAK;AAAA,EAAA;AAGtE,SAAO,YAAY,MAAM,EAAE,MAAM,MAAM,MAAM,EAAE;AACjD;AAGA,MAAM,SACJ;AAMK,SAAS,MAAM,OAAwB;AACrC,SAAA,OAAO,KAAK,KAAK;AAC1B;AAGA,MAAM,UAAU;AAMT,SAAS,OAAO,OAAwB;AACtC,SAAA,QAAQ,KAAK,KAAK;AAC3B;AAEA,MAAM,aAAa;AAMZ,SAAS,UAAU,OAAwB;AACzC,SAAA,WAAW,KAAK,KAAK;AAC9B;AAEA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;AAOO,SAAS,YAAY,OAAwB;AAClD,SAAO,UAAU,KAAK,KAAK,QAAQ,KAAK;AAC1C;AAEA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;;;;;;;;;;;"}
package/dist/regexp.d.ts DELETED
@@ -1,65 +0,0 @@
1
- /**
2
- * 编码处理正则表达式
3
- * @example
4
- * ```js
5
- * reEscape('/$')
6
- * // => '\\/\\$'
7
- * ```
8
- * @param {string} string
9
- * @returns {string}
10
- */
11
- export declare function regexpEscape(string: string): string;
12
- /**
13
- * 判断字符串是否为邮箱格式,不对邮箱真实性做验证,如域名是否正确等
14
- * @param {string} value
15
- * @returns {boolean}
16
- */
17
- export declare function isEmail(value: string): boolean;
18
- /**
19
- * 判断字符串是否为宽松手机格式,即首位为 1 的 11 位数字都属于手机号
20
- * @param {string} value
21
- * @returns {boolean}
22
- */
23
- export declare function isPhone(value: string): boolean;
24
- /**
25
- * 判断字符串是否为身份证号码格式
26
- * @param {string} value
27
- * @returns {boolean}
28
- */
29
- export declare function isIDNo(value: string): boolean;
30
- /**
31
- * 判断字符串是否为 url 格式,仅支持 http 协议,支持域名或者 ipV4
32
- * @param {string} value
33
- * @returns {boolean}
34
- */
35
- export declare function isURL(value: string): boolean;
36
- /**
37
- * 判断字符串是否为 IPV4 格式,不对 ip 真实性做验证
38
- * @param {string} value
39
- * @returns {boolean}
40
- */
41
- export declare function isIPV4(value: string): boolean;
42
- /**
43
- * 判断字符串是否为整数(自然数),即 ...,-3,-2,-1,0,1,2,3,...
44
- * @param {string} value
45
- * @returns {boolean}
46
- */
47
- export declare function isInteger(value: string): boolean;
48
- /**
49
- * 判断字符串是否为浮点数,即必须有小数点的有理数
50
- * @param {string} value
51
- * @returns {boolean}
52
- */
53
- export declare function isFloat(value: string): boolean;
54
- /**
55
- * 判断字符串是否为正确数值,包括整数和浮点数
56
- * @param {string} value
57
- * @returns {boolean}
58
- */
59
- export declare function isNumerical(value: string): boolean;
60
- /**
61
- * 判断字符串是否为数字,例如六位数字短信验证码(093031)
62
- * @param {string} value
63
- * @returns {boolean}
64
- */
65
- export declare function isDigit(value: string): boolean;