@cloudcome/utils-core 1.1.1 → 1.2.0

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 (291) hide show
  1. package/dist/array.cjs +129 -0
  2. package/dist/array.cjs.map +1 -0
  3. package/dist/array.d.ts +171 -0
  4. package/dist/array.mjs +129 -0
  5. package/dist/array.mjs.map +1 -0
  6. package/dist/async.cjs +219 -0
  7. package/dist/async.cjs.map +1 -0
  8. package/dist/async.d.ts +137 -0
  9. package/dist/async.mjs +219 -0
  10. package/dist/async.mjs.map +1 -0
  11. package/dist/base64.cjs +16 -0
  12. package/dist/base64.cjs.map +1 -0
  13. package/dist/base64.d.ts +7 -0
  14. package/dist/base64.mjs +16 -0
  15. package/dist/base64.mjs.map +1 -0
  16. package/dist/cache.cjs +79 -0
  17. package/dist/cache.cjs.map +1 -0
  18. package/dist/cache.d.ts +90 -0
  19. package/dist/cache.mjs +79 -0
  20. package/dist/cache.mjs.map +1 -0
  21. package/{src/color/contrast.ts → dist/color/contrast.d.ts} +2 -12
  22. package/dist/color/distance.d.ts +8 -0
  23. package/dist/color/helpers.d.ts +2 -0
  24. package/dist/color/hex-hsl.d.ts +3 -0
  25. package/{src/color/hex-hsv.ts → dist/color/hex-hsv.d.ts} +3 -11
  26. package/{src/color/hex-hwb.ts → dist/color/hex-hwb.d.ts} +3 -11
  27. package/dist/color/hex-rgb.d.ts +18 -0
  28. package/{src/color/hsl-lighten.ts → dist/color/hsl-lighten.d.ts} +2 -7
  29. package/{src/color/hsv-brighten.ts → dist/color/hsv-brighten.d.ts} +2 -7
  30. package/{src/color/luminance.ts → dist/color/luminance.d.ts} +2 -9
  31. package/{src/color/mix.ts → dist/color/mix.d.ts} +2 -10
  32. package/dist/color/rgb-hsl.d.ts +23 -0
  33. package/{src/color/rgb-hsv.ts → dist/color/rgb-hsv.d.ts} +3 -30
  34. package/dist/color/rgb-hwb.d.ts +29 -0
  35. package/{src/color/rgb-lab.ts → dist/color/rgb-lab.d.ts} +3 -11
  36. package/dist/color/rgb-whiter.d.ts +12 -0
  37. package/dist/color/rgb-xyz.d.ts +22 -0
  38. package/{src/color/types.ts → dist/color/types.d.ts} +30 -12
  39. package/{src/color/xyz-lab.ts → dist/color/xyz-lab.d.ts} +3 -32
  40. package/dist/color.cjs +250 -0
  41. package/dist/color.cjs.map +1 -0
  42. package/dist/color.mjs +250 -0
  43. package/dist/color.mjs.map +1 -0
  44. package/dist/const.cjs +14 -0
  45. package/dist/const.cjs.map +1 -0
  46. package/dist/const.mjs +15 -0
  47. package/dist/const.mjs.map +1 -0
  48. package/dist/core.cjs +250 -0
  49. package/dist/core.cjs.map +1 -0
  50. package/dist/core.mjs +251 -0
  51. package/dist/core.mjs.map +1 -0
  52. package/dist/crypto/md5.d.mts +1 -0
  53. package/dist/crypto/sha1.d.mts +1 -0
  54. package/dist/crypto/sha256.d.mts +1 -0
  55. package/dist/crypto/sha512.d.mts +1 -0
  56. package/dist/crypto.cjs +812 -0
  57. package/dist/crypto.cjs.map +1 -0
  58. package/{src/crypto.ts → dist/crypto.d.ts} +4 -20
  59. package/dist/crypto.mjs +812 -0
  60. package/dist/crypto.mjs.map +1 -0
  61. package/dist/date/const.d.ts +6 -0
  62. package/dist/date/core.d.ts +52 -0
  63. package/dist/date/days.d.ts +23 -0
  64. package/{src/date/is.ts → dist/date/is.d.ts} +8 -102
  65. package/dist/date/relative.d.ts +44 -0
  66. package/dist/date/start-end.d.ts +73 -0
  67. package/dist/date/timezone.d.ts +67 -0
  68. package/dist/date/weeks.d.ts +72 -0
  69. package/dist/date.cjs +239 -0
  70. package/dist/date.cjs.map +1 -0
  71. package/dist/date.mjs +241 -0
  72. package/dist/date.mjs.map +1 -0
  73. package/dist/dict.cjs +2 -0
  74. package/dist/dict.cjs.map +1 -0
  75. package/dist/dict.mjs +2 -0
  76. package/dist/dict.mjs.map +1 -0
  77. package/dist/each.cjs +18 -0
  78. package/dist/each.cjs.map +1 -0
  79. package/dist/each.mjs +19 -0
  80. package/dist/each.mjs.map +1 -0
  81. package/dist/easing.cjs +151 -0
  82. package/dist/easing.cjs.map +1 -0
  83. package/dist/easing.d.ts +46 -0
  84. package/dist/easing.mjs +151 -0
  85. package/dist/easing.mjs.map +1 -0
  86. package/dist/emitter.cjs +94 -0
  87. package/dist/emitter.cjs.map +1 -0
  88. package/dist/emitter.d.ts +68 -0
  89. package/dist/emitter.mjs +94 -0
  90. package/dist/emitter.mjs.map +1 -0
  91. package/dist/enum.cjs +58 -0
  92. package/dist/enum.cjs.map +1 -0
  93. package/dist/enum.d.ts +68 -0
  94. package/dist/enum.mjs +58 -0
  95. package/dist/enum.mjs.map +1 -0
  96. package/dist/env.cjs +28 -0
  97. package/dist/env.cjs.map +1 -0
  98. package/{src/env.ts → dist/env.d.ts} +6 -30
  99. package/dist/env.mjs +28 -0
  100. package/dist/env.mjs.map +1 -0
  101. package/dist/error.cjs +12 -0
  102. package/dist/error.cjs.map +1 -0
  103. package/{src/error.ts → dist/error.d.ts} +3 -12
  104. package/dist/error.mjs +12 -0
  105. package/dist/error.mjs.map +1 -0
  106. package/dist/exception.cjs +22 -0
  107. package/dist/exception.cjs.map +1 -0
  108. package/dist/exception.d.ts +31 -0
  109. package/dist/exception.mjs +22 -0
  110. package/dist/exception.mjs.map +1 -0
  111. package/dist/fn.cjs +76 -0
  112. package/dist/fn.cjs.map +1 -0
  113. package/dist/fn.d.ts +102 -0
  114. package/dist/fn.mjs +76 -0
  115. package/dist/fn.mjs.map +1 -0
  116. package/dist/index.cjs +5 -0
  117. package/dist/index.cjs.map +1 -0
  118. package/dist/index.d.ts +1 -0
  119. package/dist/index.mjs +5 -0
  120. package/dist/index.mjs.map +1 -0
  121. package/dist/merge.cjs +87 -0
  122. package/dist/merge.cjs.map +1 -0
  123. package/dist/merge.mjs +88 -0
  124. package/dist/merge.mjs.map +1 -0
  125. package/dist/number.cjs +14 -0
  126. package/dist/number.cjs.map +1 -0
  127. package/dist/number.d.ts +153 -0
  128. package/dist/number.mjs +14 -0
  129. package/dist/number.mjs.map +1 -0
  130. package/{src/object/each.ts → dist/object/each.d.ts} +3 -23
  131. package/dist/object/get-set.d.ts +111 -0
  132. package/dist/object/is.d.ts +32 -0
  133. package/dist/object/merge.d.ts +72 -0
  134. package/{src/object/process.ts → dist/object/process.d.ts} +4 -38
  135. package/dist/object.cjs +130 -0
  136. package/dist/object.cjs.map +1 -0
  137. package/dist/object.mjs +130 -0
  138. package/dist/object.mjs.map +1 -0
  139. package/dist/path.cjs +77 -0
  140. package/dist/path.cjs.map +1 -0
  141. package/dist/path.d.ts +82 -0
  142. package/dist/path.mjs +77 -0
  143. package/dist/path.mjs.map +1 -0
  144. package/dist/promise.cjs +62 -0
  145. package/dist/promise.cjs.map +1 -0
  146. package/{src/promise.ts → dist/promise.d.ts} +6 -67
  147. package/dist/promise.mjs +62 -0
  148. package/dist/promise.mjs.map +1 -0
  149. package/dist/qs.cjs +47 -0
  150. package/dist/qs.cjs.map +1 -0
  151. package/{src/qs.ts → dist/qs.d.ts} +3 -60
  152. package/dist/qs.mjs +47 -0
  153. package/dist/qs.mjs.map +1 -0
  154. package/dist/regexp.cjs +66 -0
  155. package/dist/regexp.cjs.map +1 -0
  156. package/dist/regexp.d.ts +65 -0
  157. package/dist/regexp.mjs +66 -0
  158. package/dist/regexp.mjs.map +1 -0
  159. package/dist/string.cjs +16 -0
  160. package/dist/string.cjs.map +1 -0
  161. package/dist/string.d.ts +80 -0
  162. package/dist/string.mjs +16 -0
  163. package/dist/string.mjs.map +1 -0
  164. package/dist/string2.cjs +157 -0
  165. package/dist/string2.cjs.map +1 -0
  166. package/dist/string2.mjs +158 -0
  167. package/dist/string2.mjs.map +1 -0
  168. package/dist/time/from.d.ts +14 -0
  169. package/dist/time/to.d.ts +38 -0
  170. package/dist/time.cjs +82 -0
  171. package/dist/time.cjs.map +1 -0
  172. package/dist/time.mjs +82 -0
  173. package/dist/time.mjs.map +1 -0
  174. package/dist/timer.cjs +119 -0
  175. package/dist/timer.cjs.map +1 -0
  176. package/dist/timer.d.ts +96 -0
  177. package/{src/timer.ts → dist/timer.mjs} +17 -124
  178. package/dist/timer.mjs.map +1 -0
  179. package/dist/tree.cjs +125 -0
  180. package/dist/tree.cjs.map +1 -0
  181. package/{src/tree.ts → dist/tree.d.ts} +41 -225
  182. package/dist/tree.mjs +125 -0
  183. package/dist/tree.mjs.map +1 -0
  184. package/dist/type.cjs +78 -0
  185. package/dist/type.cjs.map +1 -0
  186. package/{src/type.ts → dist/type.d.ts} +20 -96
  187. package/dist/type.mjs +78 -0
  188. package/dist/type.mjs.map +1 -0
  189. package/dist/types.cjs +2 -0
  190. package/dist/types.cjs.map +1 -0
  191. package/{src/types.ts → dist/types.d.ts} +12 -33
  192. package/dist/types.mjs +2 -0
  193. package/dist/types.mjs.map +1 -0
  194. package/dist/unique.cjs +46 -0
  195. package/dist/unique.cjs.map +1 -0
  196. package/dist/unique.d.ts +22 -0
  197. package/dist/unique.mjs +46 -0
  198. package/dist/unique.mjs.map +1 -0
  199. package/dist/url.cjs +37 -0
  200. package/dist/url.cjs.map +1 -0
  201. package/dist/url.d.ts +53 -0
  202. package/dist/url.mjs +37 -0
  203. package/dist/url.mjs.map +1 -0
  204. package/dist/version.cjs +33 -0
  205. package/dist/version.cjs.map +1 -0
  206. package/dist/version.d.ts +32 -0
  207. package/dist/version.mjs +33 -0
  208. package/dist/version.mjs.map +1 -0
  209. package/package.json +8 -2
  210. package/CHANGELOG.md +0 -52
  211. package/src/array.ts +0 -312
  212. package/src/async.ts +0 -379
  213. package/src/base64.ts +0 -20
  214. package/src/cache.ts +0 -146
  215. package/src/color/distance.ts +0 -28
  216. package/src/color/helpers.ts +0 -23
  217. package/src/color/hex-hsl.ts +0 -11
  218. package/src/color/hex-rgb.ts +0 -39
  219. package/src/color/rgb-hsl.ts +0 -53
  220. package/src/color/rgb-hwb.ts +0 -56
  221. package/src/color/rgb-whiter.ts +0 -22
  222. package/src/color/rgb-xyz.ts +0 -62
  223. package/src/crypto/md5.mjs +0 -357
  224. package/src/crypto/sha1.mjs +0 -300
  225. package/src/crypto/sha256.mjs +0 -310
  226. package/src/crypto/sha512.mjs +0 -459
  227. package/src/date/const.ts +0 -6
  228. package/src/date/core.ts +0 -162
  229. package/src/date/days.ts +0 -51
  230. package/src/date/relative.ts +0 -92
  231. package/src/date/start-end.ts +0 -246
  232. package/src/date/timezone.ts +0 -220
  233. package/src/date/weeks.ts +0 -100
  234. package/src/dts/global.d.ts +0 -27
  235. package/src/easing.ts +0 -166
  236. package/src/emitter.ts +0 -117
  237. package/src/enum.ts +0 -171
  238. package/src/exception.ts +0 -68
  239. package/src/fn.ts +0 -197
  240. package/src/index.ts +0 -1
  241. package/src/number.ts +0 -236
  242. package/src/object/get-set.ts +0 -273
  243. package/src/object/is.ts +0 -128
  244. package/src/object/merge.ts +0 -180
  245. package/src/path.ts +0 -188
  246. package/src/regexp.ts +0 -156
  247. package/src/string.ts +0 -146
  248. package/src/time/from.ts +0 -57
  249. package/src/time/to.ts +0 -106
  250. package/src/unique.ts +0 -77
  251. package/src/url.ts +0 -93
  252. package/src/version.ts +0 -71
  253. package/test/array.test.ts +0 -332
  254. package/test/async-real.test.ts +0 -39
  255. package/test/async.test.ts +0 -375
  256. package/test/base64.test.ts +0 -32
  257. package/test/cache.test.ts +0 -83
  258. package/test/color.test.ts +0 -163
  259. package/test/crypto.test.ts +0 -34
  260. package/test/date-tz.test.ts +0 -206
  261. package/test/date.test.ts +0 -353
  262. package/test/easing.test.ts +0 -33
  263. package/test/emitter.test.ts +0 -71
  264. package/test/enum.test.ts +0 -113
  265. package/test/env.test.ts +0 -69
  266. package/test/error.test.ts +0 -58
  267. package/test/exception.test.ts +0 -43
  268. package/test/fn.test.ts +0 -263
  269. package/test/helpers.ts +0 -23
  270. package/test/index.test.ts +0 -6
  271. package/test/number.test.ts +0 -213
  272. package/test/object.test.ts +0 -309
  273. package/test/path.test.ts +0 -156
  274. package/test/promise.test.ts +0 -199
  275. package/test/qs.test.ts +0 -79
  276. package/test/regexp.test.ts +0 -97
  277. package/test/string.test.ts +0 -150
  278. package/test/time.test.ts +0 -214
  279. package/test/timer.test.ts +0 -114
  280. package/test/tree.test.ts +0 -348
  281. package/test/type.test.ts +0 -226
  282. package/test/unique.test.ts +0 -71
  283. package/test/url.test.ts +0 -136
  284. package/test/version.test.ts +0 -52
  285. package/tsconfig.json +0 -31
  286. package/vite.config.mts +0 -114
  287. /package/{src/color.ts → dist/color.d.ts} +0 -0
  288. /package/{src/date.ts → dist/date.d.ts} +0 -0
  289. /package/{src/dict.ts → dist/dict.d.ts} +0 -0
  290. /package/{src/object.ts → dist/object.d.ts} +0 -0
  291. /package/{src/time.ts → dist/time.d.ts} +0 -0
@@ -1,158 +1,93 @@
1
- import type { AnyArray, AnyAsyncFunction, AnyFunction, AnyObject } from './types';
2
-
1
+ import { AnyArray, AnyAsyncFunction, AnyFunction, AnyObject } from './types';
3
2
  /**
4
3
  * 获取未知类型的类型名称
5
4
  * @param unknown - 未知类型的值
6
5
  * @returns 类型名称字符串
7
6
  */
8
- export function typeIs(
9
- unknown: unknown,
10
- ):
11
- | 'string'
12
- | 'number'
13
- | 'boolean'
14
- | 'object'
15
- | 'array'
16
- | 'function'
17
- | 'null'
18
- | 'undefined'
19
- | 'symbol'
20
- | 'bigint'
21
- | 'error'
22
- | 'promise'
23
- | string {
24
- return Object.prototype.toString.call(unknown).slice(8, -1).toLowerCase();
25
- }
26
-
7
+ export declare function typeIs(unknown: unknown): 'string' | 'number' | 'boolean' | 'object' | 'array' | 'function' | 'null' | 'undefined' | 'symbol' | 'bigint' | 'error' | 'promise' | string;
27
8
  /**
28
9
  * 检查值是否为字符串
29
10
  * @param unknown - 未知类型的值
30
11
  * @returns 如果值为字符串则返回 true,否则返回 false
31
12
  */
32
- export function isString(unknown: unknown): unknown is string {
33
- return typeof unknown === 'string';
34
- }
35
-
13
+ export declare function isString(unknown: unknown): unknown is string;
36
14
  /**
37
15
  * 检查值是否为布尔值
38
16
  * @param unknown - 未知类型的值
39
17
  * @returns 如果值为布尔值则返回 true,否则返回 false
40
18
  */
41
- export function isBoolean(unknown: unknown): unknown is boolean {
42
- return typeof unknown === 'boolean';
43
- }
44
-
19
+ export declare function isBoolean(unknown: unknown): unknown is boolean;
45
20
  /**
46
21
  * 检查值是否为符号
47
22
  * @param unknown - 未知类型的值
48
23
  * @returns 如果值为符号则返回 true,否则返回 false
49
24
  */
50
- export function isSymbol(unknown: unknown): unknown is symbol {
51
- return typeof unknown === 'symbol';
52
- }
53
-
25
+ export declare function isSymbol(unknown: unknown): unknown is symbol;
54
26
  /**
55
27
  * 检查值是否为大整数
56
28
  * @param unknown - 未知类型的值
57
29
  * @returns 如果值为大整数则返回 true,否则返回 false
58
30
  */
59
- export function isBigInt(unknown: unknown): unknown is bigint {
60
- return typeof unknown === 'bigint';
61
- }
62
-
31
+ export declare function isBigInt(unknown: unknown): unknown is bigint;
63
32
  /**
64
33
  * 检查值是否为数字
65
34
  * @param unknown - 未知类型的值
66
35
  * @returns 如果值为数字且不是 NaN 则返回 true,否则返回 false
67
36
  */
68
- export function isNumber(unknown: unknown): unknown is number {
69
- return typeof unknown === 'number' && !Number.isNaN(unknown);
70
- }
71
-
37
+ export declare function isNumber(unknown: unknown): unknown is number;
72
38
  /**
73
39
  * 检查值是否为 undefined
74
40
  * @param unknown - 未知类型的值
75
41
  * @returns 如果值为 undefined 则返回 true,否则返回 false
76
42
  */
77
- export function isUndefined(unknown: unknown): unknown is undefined {
78
- return typeof unknown === 'undefined';
79
- }
80
-
43
+ export declare function isUndefined(unknown: unknown): unknown is undefined;
81
44
  /**
82
45
  * 检查值是否为 void
83
46
  * @param unknown - 未知类型的值
84
47
  * @returns 如果值为 undefined 则返回 true,否则返回 false
85
48
  */
86
- // biome-ignore lint/suspicious/noConfusingVoidType: <explanation>
87
- export function isVoid(unknown: unknown): unknown is void {
88
- return isUndefined(unknown);
89
- }
90
-
49
+ export declare function isVoid(unknown: unknown): unknown is void;
91
50
  /**
92
51
  * 永不执行,用于 switch-case/if-else 类型断言
93
52
  * @param unknown - 永远不会执行的值
94
53
  */
95
- export function isNever(unknown: never) {
96
- //
97
- }
98
-
54
+ export declare function isNever(unknown: never): void;
99
55
  /**
100
56
  * 检查值是否为 null
101
57
  * @param unknown - 未知类型的值
102
58
  * @returns 如果值为 null 则返回 true,否则返回 false
103
59
  */
104
- export function isNull(unknown: unknown): unknown is null {
105
- return unknown === null;
106
- }
107
-
60
+ export declare function isNull(unknown: unknown): unknown is null;
108
61
  /**
109
62
  * 检查值是否为 nullish(null 或 undefined 或 void)
110
63
  * @param unknown - 未知类型的值
111
64
  * @returns 如果值为 null 或 undefined 或 void 则返回 true,否则返回 false
112
65
  */
113
- // biome-ignore lint/suspicious/noConfusingVoidType: <explanation>
114
- export function isNullish(unknown: unknown): unknown is null | undefined | void {
115
- return isNull(unknown) || isUndefined(unknown) || isVoid(unknown);
116
- }
117
-
66
+ export declare function isNullish(unknown: unknown): unknown is null | undefined | void;
118
67
  /**
119
68
  * 检查值是否为原始类型(null 或 非对象)
120
69
  * @param unknown - 未知类型的值
121
70
  * @returns 如果值为原始类型则返回 true,否则返回 false
122
71
  */
123
- export function isPrimitive(
124
- unknown: unknown,
125
- ): unknown is string | number | boolean | symbol | bigint | null | undefined {
126
- return isNull(unknown) || !(typeof unknown === 'object' || typeof unknown === 'function');
127
- }
128
-
72
+ export declare function isPrimitive(unknown: unknown): unknown is string | number | boolean | symbol | bigint | null | undefined;
129
73
  /**
130
74
  * 检查值是否为对象,但要注意,此时的对象类型是包含了数组和函数
131
75
  * @param unknown - 未知类型的值
132
76
  * @returns 如果值为对象则返回 true,否则返回 false
133
77
  */
134
- export function isObject(unknown: unknown): unknown is AnyObject {
135
- return typeIs(unknown) === 'object';
136
- }
137
-
78
+ export declare function isObject(unknown: unknown): unknown is AnyObject;
138
79
  /**
139
80
  * 检查值是否为数组
140
81
  * @param unknown - 未知类型的值
141
82
  * @returns 如果值为数组则返回 true,否则返回 false
142
83
  */
143
- export function isArray(unknown: unknown): unknown is AnyArray {
144
- return Array.isArray(unknown);
145
- }
146
-
84
+ export declare function isArray(unknown: unknown): unknown is AnyArray;
147
85
  /**
148
86
  * 检查值是否为函数
149
87
  * @param unknown - 未知类型的值
150
88
  * @returns 如果值为函数则返回 true,否则返回 false
151
89
  */
152
- export function isFunction(unknown: unknown): unknown is AnyFunction {
153
- return typeof unknown === 'function';
154
- }
155
-
90
+ export declare function isFunction(unknown: unknown): unknown is AnyFunction;
156
91
  /**
157
92
  * 检查值是否为异步函数
158
93
  * @param unknown - 需要检查的值
@@ -165,33 +100,22 @@ export function isFunction(unknown: unknown): unknown is AnyFunction {
165
100
  * isAsyncFunction(() => {}); // false
166
101
  * ```
167
102
  */
168
- export function isAsyncFunction(unknown: unknown): unknown is AnyAsyncFunction {
169
- return isFunction(unknown) && unknown.constructor.name === 'AsyncFunction';
170
- }
171
-
103
+ export declare function isAsyncFunction(unknown: unknown): unknown is AnyAsyncFunction;
172
104
  /**
173
105
  * 检查值是否为 Error 类型
174
106
  * @param unknown - 未知类型的值
175
107
  * @returns 如果值为 Error 类型则返回 true,否则返回 false
176
108
  */
177
- export function isError(unknown: unknown): unknown is Error {
178
- return unknown instanceof Error;
179
- }
180
-
109
+ export declare function isError(unknown: unknown): unknown is Error;
181
110
  /**
182
111
  * 检查值是否为 Promise 类型
183
112
  * @param unknown - 未知类型的值
184
113
  * @returns 如果值为 Promise 类型则返回 true,否则返回 false
185
114
  */
186
- export function isPromise<T>(unknown: unknown): unknown is Promise<T> {
187
- return typeIs(unknown) === 'promise';
188
- }
189
-
115
+ export declare function isPromise<T>(unknown: unknown): unknown is Promise<T>;
190
116
  /**
191
117
  * 检查值是否为 Date 类型
192
118
  * @param unknown - 未知类型的值
193
119
  * @returns 如果值为 Date 类型则返回 true,否则返回 false
194
120
  */
195
- export function isDate(unknown: unknown): unknown is Date {
196
- return unknown instanceof Date;
197
- }
121
+ export declare function isDate(unknown: unknown): unknown is Date;
package/dist/type.mjs ADDED
@@ -0,0 +1,78 @@
1
+ function typeIs(unknown) {
2
+ return Object.prototype.toString.call(unknown).slice(8, -1).toLowerCase();
3
+ }
4
+ function isString(unknown) {
5
+ return typeof unknown === "string";
6
+ }
7
+ function isBoolean(unknown) {
8
+ return typeof unknown === "boolean";
9
+ }
10
+ function isSymbol(unknown) {
11
+ return typeof unknown === "symbol";
12
+ }
13
+ function isBigInt(unknown) {
14
+ return typeof unknown === "bigint";
15
+ }
16
+ function isNumber(unknown) {
17
+ return typeof unknown === "number" && !Number.isNaN(unknown);
18
+ }
19
+ function isUndefined(unknown) {
20
+ return typeof unknown === "undefined";
21
+ }
22
+ function isVoid(unknown) {
23
+ return isUndefined(unknown);
24
+ }
25
+ function isNever(unknown) {
26
+ }
27
+ function isNull(unknown) {
28
+ return unknown === null;
29
+ }
30
+ function isNullish(unknown) {
31
+ return isNull(unknown) || isUndefined(unknown) || isVoid(unknown);
32
+ }
33
+ function isPrimitive(unknown) {
34
+ return isNull(unknown) || !(typeof unknown === "object" || typeof unknown === "function");
35
+ }
36
+ function isObject(unknown) {
37
+ return typeIs(unknown) === "object";
38
+ }
39
+ function isArray(unknown) {
40
+ return Array.isArray(unknown);
41
+ }
42
+ function isFunction(unknown) {
43
+ return typeof unknown === "function";
44
+ }
45
+ function isAsyncFunction(unknown) {
46
+ return isFunction(unknown) && unknown.constructor.name === "AsyncFunction";
47
+ }
48
+ function isError(unknown) {
49
+ return unknown instanceof Error;
50
+ }
51
+ function isPromise(unknown) {
52
+ return typeIs(unknown) === "promise";
53
+ }
54
+ function isDate(unknown) {
55
+ return unknown instanceof Date;
56
+ }
57
+ export {
58
+ isArray,
59
+ isAsyncFunction,
60
+ isBigInt,
61
+ isBoolean,
62
+ isDate,
63
+ isError,
64
+ isFunction,
65
+ isNever,
66
+ isNull,
67
+ isNullish,
68
+ isNumber,
69
+ isObject,
70
+ isPrimitive,
71
+ isPromise,
72
+ isString,
73
+ isSymbol,
74
+ isUndefined,
75
+ isVoid,
76
+ typeIs
77
+ };
78
+ //# sourceMappingURL=type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.mjs","sources":["../src/type.ts"],"sourcesContent":["import type { AnyArray, AnyAsyncFunction, AnyFunction, AnyObject } from './types';\n\n/**\n * 获取未知类型的类型名称\n * @param unknown - 未知类型的值\n * @returns 类型名称字符串\n */\nexport function typeIs(\n unknown: unknown,\n):\n | 'string'\n | 'number'\n | 'boolean'\n | 'object'\n | 'array'\n | 'function'\n | 'null'\n | 'undefined'\n | 'symbol'\n | 'bigint'\n | 'error'\n | 'promise'\n | string {\n return Object.prototype.toString.call(unknown).slice(8, -1).toLowerCase();\n}\n\n/**\n * 检查值是否为字符串\n * @param unknown - 未知类型的值\n * @returns 如果值为字符串则返回 true,否则返回 false\n */\nexport function isString(unknown: unknown): unknown is string {\n return typeof unknown === 'string';\n}\n\n/**\n * 检查值是否为布尔值\n * @param unknown - 未知类型的值\n * @returns 如果值为布尔值则返回 true,否则返回 false\n */\nexport function isBoolean(unknown: unknown): unknown is boolean {\n return typeof unknown === 'boolean';\n}\n\n/**\n * 检查值是否为符号\n * @param unknown - 未知类型的值\n * @returns 如果值为符号则返回 true,否则返回 false\n */\nexport function isSymbol(unknown: unknown): unknown is symbol {\n return typeof unknown === 'symbol';\n}\n\n/**\n * 检查值是否为大整数\n * @param unknown - 未知类型的值\n * @returns 如果值为大整数则返回 true,否则返回 false\n */\nexport function isBigInt(unknown: unknown): unknown is bigint {\n return typeof unknown === 'bigint';\n}\n\n/**\n * 检查值是否为数字\n * @param unknown - 未知类型的值\n * @returns 如果值为数字且不是 NaN 则返回 true,否则返回 false\n */\nexport function isNumber(unknown: unknown): unknown is number {\n return typeof unknown === 'number' && !Number.isNaN(unknown);\n}\n\n/**\n * 检查值是否为 undefined\n * @param unknown - 未知类型的值\n * @returns 如果值为 undefined 则返回 true,否则返回 false\n */\nexport function isUndefined(unknown: unknown): unknown is undefined {\n return typeof unknown === 'undefined';\n}\n\n/**\n * 检查值是否为 void\n * @param unknown - 未知类型的值\n * @returns 如果值为 undefined 则返回 true,否则返回 false\n */\n// biome-ignore lint/suspicious/noConfusingVoidType: <explanation>\nexport function isVoid(unknown: unknown): unknown is void {\n return isUndefined(unknown);\n}\n\n/**\n * 永不执行,用于 switch-case/if-else 类型断言\n * @param unknown - 永远不会执行的值\n */\nexport function isNever(unknown: never) {\n //\n}\n\n/**\n * 检查值是否为 null\n * @param unknown - 未知类型的值\n * @returns 如果值为 null 则返回 true,否则返回 false\n */\nexport function isNull(unknown: unknown): unknown is null {\n return unknown === null;\n}\n\n/**\n * 检查值是否为 nullish(null 或 undefined 或 void)\n * @param unknown - 未知类型的值\n * @returns 如果值为 null 或 undefined 或 void 则返回 true,否则返回 false\n */\n// biome-ignore lint/suspicious/noConfusingVoidType: <explanation>\nexport function isNullish(unknown: unknown): unknown is null | undefined | void {\n return isNull(unknown) || isUndefined(unknown) || isVoid(unknown);\n}\n\n/**\n * 检查值是否为原始类型(null 或 非对象)\n * @param unknown - 未知类型的值\n * @returns 如果值为原始类型则返回 true,否则返回 false\n */\nexport function isPrimitive(\n unknown: unknown,\n): unknown is string | number | boolean | symbol | bigint | null | undefined {\n return isNull(unknown) || !(typeof unknown === 'object' || typeof unknown === 'function');\n}\n\n/**\n * 检查值是否为对象,但要注意,此时的对象类型是包含了数组和函数\n * @param unknown - 未知类型的值\n * @returns 如果值为对象则返回 true,否则返回 false\n */\nexport function isObject(unknown: unknown): unknown is AnyObject {\n return typeIs(unknown) === 'object';\n}\n\n/**\n * 检查值是否为数组\n * @param unknown - 未知类型的值\n * @returns 如果值为数组则返回 true,否则返回 false\n */\nexport function isArray(unknown: unknown): unknown is AnyArray {\n return Array.isArray(unknown);\n}\n\n/**\n * 检查值是否为函数\n * @param unknown - 未知类型的值\n * @returns 如果值为函数则返回 true,否则返回 false\n */\nexport function isFunction(unknown: unknown): unknown is AnyFunction {\n return typeof unknown === 'function';\n}\n\n/**\n * 检查值是否为异步函数\n * @param unknown - 需要检查的值\n * @returns 如果值为异步函数则返回 true,否则返回 false\n * @example\n * ```typescript\n * async function example() {}\n *\n * isAsyncFunction(example); // true\n * isAsyncFunction(() => {}); // false\n * ```\n */\nexport function isAsyncFunction(unknown: unknown): unknown is AnyAsyncFunction {\n return isFunction(unknown) && unknown.constructor.name === 'AsyncFunction';\n}\n\n/**\n * 检查值是否为 Error 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Error 类型则返回 true,否则返回 false\n */\nexport function isError(unknown: unknown): unknown is Error {\n return unknown instanceof Error;\n}\n\n/**\n * 检查值是否为 Promise 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Promise 类型则返回 true,否则返回 false\n */\nexport function isPromise<T>(unknown: unknown): unknown is Promise<T> {\n return typeIs(unknown) === 'promise';\n}\n\n/**\n * 检查值是否为 Date 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Date 类型则返回 true,否则返回 false\n */\nexport function isDate(unknown: unknown): unknown is Date {\n return unknown instanceof Date;\n}\n"],"names":[],"mappings":"AAOO,SAAS,OACd,SAcS;AACF,SAAA,OAAO,UAAU,SAAS,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,YAAY;AAC1E;AAOO,SAAS,SAAS,SAAqC;AAC5D,SAAO,OAAO,YAAY;AAC5B;AAOO,SAAS,UAAU,SAAsC;AAC9D,SAAO,OAAO,YAAY;AAC5B;AAOO,SAAS,SAAS,SAAqC;AAC5D,SAAO,OAAO,YAAY;AAC5B;AAOO,SAAS,SAAS,SAAqC;AAC5D,SAAO,OAAO,YAAY;AAC5B;AAOO,SAAS,SAAS,SAAqC;AAC5D,SAAO,OAAO,YAAY,YAAY,CAAC,OAAO,MAAM,OAAO;AAC7D;AAOO,SAAS,YAAY,SAAwC;AAClE,SAAO,OAAO,YAAY;AAC5B;AAQO,SAAS,OAAO,SAAmC;AACxD,SAAO,YAAY,OAAO;AAC5B;AAMO,SAAS,QAAQ,SAAgB;AAExC;AAOO,SAAS,OAAO,SAAmC;AACxD,SAAO,YAAY;AACrB;AAQO,SAAS,UAAU,SAAsD;AAC9E,SAAO,OAAO,OAAO,KAAK,YAAY,OAAO,KAAK,OAAO,OAAO;AAClE;AAOO,SAAS,YACd,SAC2E;AACpE,SAAA,OAAO,OAAO,KAAK,EAAE,OAAO,YAAY,YAAY,OAAO,YAAY;AAChF;AAOO,SAAS,SAAS,SAAwC;AACxD,SAAA,OAAO,OAAO,MAAM;AAC7B;AAOO,SAAS,QAAQ,SAAuC;AACtD,SAAA,MAAM,QAAQ,OAAO;AAC9B;AAOO,SAAS,WAAW,SAA0C;AACnE,SAAO,OAAO,YAAY;AAC5B;AAcO,SAAS,gBAAgB,SAA+C;AAC7E,SAAO,WAAW,OAAO,KAAK,QAAQ,YAAY,SAAS;AAC7D;AAOO,SAAS,QAAQ,SAAoC;AAC1D,SAAO,mBAAmB;AAC5B;AAOO,SAAS,UAAa,SAAyC;AAC7D,SAAA,OAAO,OAAO,MAAM;AAC7B;AAOO,SAAS,OAAO,SAAmC;AACxD,SAAO,mBAAmB;AAC5B;"}
package/dist/types.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -2,7 +2,6 @@
2
2
  * 任意对象
3
3
  */
4
4
  export type AnyObject = Record<PropertyKey, unknown>;
5
-
6
5
  /**
7
6
  * 返回对象的所有键名,并且键名都是字符串类型
8
7
  * @example
@@ -11,68 +10,48 @@ export type AnyObject = Record<PropertyKey, unknown>;
11
10
  * // 'a' | '2'
12
11
  * ```
13
12
  */
14
- export type KeysOf<T> = { [P in keyof T]: P extends string ? P : P extends number ? `${P}` : never }[keyof T];
15
-
13
+ export type KeysOf<T> = {
14
+ [P in keyof T]: P extends string ? P : P extends number ? `${P}` : never;
15
+ }[keyof T];
16
16
  /**
17
17
  * 任意数组
18
18
  */
19
19
  export type AnyArray = Array<unknown>;
20
-
21
20
  /**
22
21
  * 任意函数
23
22
  */
24
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
25
23
  export type AnyFunction = (...args: any[]) => any;
26
-
27
24
  /**
28
25
  * 任意异步函数
29
26
  */
30
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
31
27
  export type AnyAsyncFunction = (...args: any[]) => Promise<any>;
32
-
33
28
  /**
34
29
  * 可能是 Promise 的类型
35
30
  */
36
31
  export type MaybePromise<T> = T | Promise<T>;
37
-
38
32
  /**
39
33
  * 可能是可执行的类型
40
34
  */
41
35
  export type MaybeCallable<T> = T | (() => T);
42
-
43
36
  /**
44
37
  * 深度部分类型
45
38
  */
46
- export type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T;
47
-
48
- // https://juejin.cn/post/6994102811218673700#heading-24
49
-
50
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
51
- export type UnionToIntersection<T> = (T extends any ? (arg: T) => void : never) extends (arg: infer U) => void
52
- ? U
53
- : never;
54
- // type T0 = UnionToIntersection<{ key1: string } | { key2: number }>;
55
-
39
+ export type DeepPartial<T> = T extends object ? {
40
+ [P in keyof T]?: DeepPartial<T[P]>;
41
+ } : T;
42
+ export type UnionToIntersection<T> = (T extends any ? (arg: T) => void : never) extends (arg: infer U) => void ? U : never;
56
43
  /**
57
44
  * 从联合类型中提取最后一个类型
58
45
  * @template U - 联合类型
59
46
  */
60
47
  type _UnionLast<U> = UnionToIntersection<U extends U ? (x: U) => 0 : never> extends (x: infer L) => 0 ? L : never;
61
-
62
48
  /**
63
49
  * 将联合类型转换为元组类型
64
50
  * @template U - 联合类型
65
51
  * @template Last - 联合类型中的最后一个类型
66
52
  */
67
- export type UnionToTuple<U, Last = _UnionLast<U>> = [U] extends [never]
68
- ? []
69
- : [...UnionToTuple<Exclude<U, Last>>, Last];
70
-
71
- // type T2 = LastInUnion<'a' | 'b' | 'c' | 'd'>;
72
- // type T3 = UnionToTuple<'a' | 'b' | 'c' | 'd'>;
73
- // ['a', 'b', 'c', 'd']
74
-
75
- // https://juejin.cn/post/7187963986875252795#heading-4
76
- // type Merged = MergeIntersection<{ a: string } & { b: number }>;
77
- // { a: string; b: number }
78
- export type MergeIntersection<A> = A extends infer T ? { [Key in keyof T]: T[Key] } : never;
53
+ export type UnionToTuple<U, Last = _UnionLast<U>> = [U] extends [never] ? [] : [...UnionToTuple<Exclude<U, Last>>, Last];
54
+ export type MergeIntersection<A> = A extends infer T ? {
55
+ [Key in keyof T]: T[Key];
56
+ } : never;
57
+ export {};
package/dist/types.mjs ADDED
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const number = require("./string2.cjs");
4
+ const type = require("./type.cjs");
5
+ let lastTimestamp = 0;
6
+ let lastSafePadding = 0;
7
+ function uniqueBigInt(randomLength = 0) {
8
+ const now = Date.now();
9
+ if (now !== lastTimestamp) {
10
+ lastTimestamp = now;
11
+ lastSafePadding = 0;
12
+ }
13
+ let randomPart = "";
14
+ if (randomLength > 0) {
15
+ const randomMin = 10 ** (randomLength - 1);
16
+ const randomMax = 10 ** randomLength - 1;
17
+ randomPart = String(number.randomNumber(randomMin, randomMax));
18
+ }
19
+ return BigInt(randomPart + lastSafePadding++ + now);
20
+ }
21
+ const _randomChar = (dict) => {
22
+ const poolIndex = number.randomNumber(0, dict.length - 1);
23
+ return dict[poolIndex];
24
+ };
25
+ function uniqueString(minLength, dict) {
26
+ let finalLength = 0;
27
+ let finalDict = number.STRING_DICT;
28
+ if (type.isString(dict)) {
29
+ finalLength = minLength;
30
+ finalDict = dict;
31
+ } else if (type.isNumber(minLength)) {
32
+ finalLength = minLength;
33
+ } else if (type.isString(minLength)) {
34
+ finalDict = minLength;
35
+ }
36
+ let uniqueString2 = number.numberConvert(uniqueBigInt(), finalDict);
37
+ let insertLength = finalLength - uniqueString2.length;
38
+ if (insertLength <= 0) return uniqueString2;
39
+ while (insertLength--) {
40
+ uniqueString2 += _randomChar(finalDict);
41
+ }
42
+ return uniqueString2;
43
+ }
44
+ exports.uniqueBigInt = uniqueBigInt;
45
+ exports.uniqueString = uniqueString;
46
+ //# sourceMappingURL=unique.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique.cjs","sources":["../src/unique.ts"],"sourcesContent":["import { numberConvert, randomNumber } from './number';\nimport { STRING_DICT } from './string';\nimport { isNumber, isString } from './type';\n\nlet lastTimestamp = 0;\nlet lastSafePadding = 0;\n\n/**\n * 生成一个唯一的 BigInt 值。\n *\n * @param randomLength - 可选参数,指定随机部分的长度,默认为 0。\n * 如果大于 0,则会在结果中附加指定长度的随机数。\n * @returns 返回一个唯一的 BigInt 值,包含时间戳、随机部分(如果有)以及递增的填充值。\n */\nexport function uniqueBigInt(randomLength = 0): bigint {\n const now = Date.now();\n\n if (now !== lastTimestamp) {\n lastTimestamp = now;\n lastSafePadding = 0;\n }\n\n let randomPart = '';\n\n if (randomLength > 0) {\n const randomMin = 10 ** (randomLength - 1);\n const randomMax = 10 ** randomLength - 1;\n randomPart = String(randomNumber(randomMin, randomMax));\n }\n\n return BigInt(randomPart + lastSafePadding++ + now);\n}\n\nconst _randomChar = (dict: string): string => {\n const poolIndex = randomNumber(0, dict.length - 1);\n\n return dict[poolIndex];\n};\n\n/**\n * 生成一个唯一的字符串。\n *\n * @param minLength - 可选参数,指定生成字符串的最小长度。\n * 如果未提供或为字符串类型,则使用默认长度。\n * @param dict - 可选参数,指定生成字符串时使用的字符集。\n * 如果未提供,则使用默认字符集 `STRING_DICT`。\n * @returns 返回一个唯一的字符串,包含时间戳、随机部分(如果有)以及递增的填充值。\n * 如果指定了 `length`,则返回值的长度将被调整到指定长度。\n */\nexport function uniqueString(minLength: number, dict: string): string;\nexport function uniqueString(minLength: number): string;\nexport function uniqueString(dict: string): string;\nexport function uniqueString(): string;\nexport function uniqueString(minLength?: number | string, dict?: string) {\n let finalLength = 0;\n let finalDict = STRING_DICT;\n\n if (isString(dict)) {\n finalLength = minLength as number;\n finalDict = dict;\n } else if (isNumber(minLength)) {\n finalLength = minLength;\n } else if (isString(minLength)) {\n finalDict = minLength;\n }\n\n let uniqueString = numberConvert(uniqueBigInt(), finalDict);\n let insertLength = finalLength - uniqueString.length;\n\n if (insertLength <= 0) return uniqueString;\n\n while (insertLength--) {\n uniqueString += _randomChar(finalDict);\n }\n\n return uniqueString;\n}\n"],"names":["randomNumber","STRING_DICT","isString","isNumber","uniqueString","numberConvert"],"mappings":";;;;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;AASN,SAAA,aAAa,eAAe,GAAW;AAC/C,QAAA,MAAM,KAAK,IAAI;AAErB,MAAI,QAAQ,eAAe;AACT,oBAAA;AACE,sBAAA;AAAA,EAAA;AAGpB,MAAI,aAAa;AAEjB,MAAI,eAAe,GAAG;AACd,UAAA,YAAY,OAAO,eAAe;AAClC,UAAA,YAAY,MAAM,eAAe;AACvC,iBAAa,OAAOA,OAAAA,aAAa,WAAW,SAAS,CAAC;AAAA,EAAA;AAGjD,SAAA,OAAO,aAAa,oBAAoB,GAAG;AACpD;AAEA,MAAM,cAAc,CAAC,SAAyB;AAC5C,QAAM,YAAYA,OAAAA,aAAa,GAAG,KAAK,SAAS,CAAC;AAEjD,SAAO,KAAK,SAAS;AACvB;AAgBgB,SAAA,aAAa,WAA6B,MAAe;AACvE,MAAI,cAAc;AAClB,MAAI,YAAYC,OAAA;AAEZ,MAAAC,KAAAA,SAAS,IAAI,GAAG;AACJ,kBAAA;AACF,gBAAA;AAAA,EAAA,WACHC,KAAAA,SAAS,SAAS,GAAG;AAChB,kBAAA;AAAA,EAAA,WACLD,KAAAA,SAAS,SAAS,GAAG;AAClB,gBAAA;AAAA,EAAA;AAGd,MAAIE,gBAAeC,OAAAA,cAAc,aAAa,GAAG,SAAS;AACtD,MAAA,eAAe,cAAcD,cAAa;AAE1C,MAAA,gBAAgB,EAAUA,QAAAA;AAE9B,SAAO,gBAAgB;AACrBA,qBAAgB,YAAY,SAAS;AAAA,EAAA;AAGhCA,SAAAA;AACT;;;"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 生成一个唯一的 BigInt 值。
3
+ *
4
+ * @param randomLength - 可选参数,指定随机部分的长度,默认为 0。
5
+ * 如果大于 0,则会在结果中附加指定长度的随机数。
6
+ * @returns 返回一个唯一的 BigInt 值,包含时间戳、随机部分(如果有)以及递增的填充值。
7
+ */
8
+ export declare function uniqueBigInt(randomLength?: number): bigint;
9
+ /**
10
+ * 生成一个唯一的字符串。
11
+ *
12
+ * @param minLength - 可选参数,指定生成字符串的最小长度。
13
+ * 如果未提供或为字符串类型,则使用默认长度。
14
+ * @param dict - 可选参数,指定生成字符串时使用的字符集。
15
+ * 如果未提供,则使用默认字符集 `STRING_DICT`。
16
+ * @returns 返回一个唯一的字符串,包含时间戳、随机部分(如果有)以及递增的填充值。
17
+ * 如果指定了 `length`,则返回值的长度将被调整到指定长度。
18
+ */
19
+ export declare function uniqueString(minLength: number, dict: string): string;
20
+ export declare function uniqueString(minLength: number): string;
21
+ export declare function uniqueString(dict: string): string;
22
+ export declare function uniqueString(): string;
@@ -0,0 +1,46 @@
1
+ import { n as numberConvert, S as STRING_DICT, r as randomNumber } from "./string2.mjs";
2
+ import { isString, isNumber } from "./type.mjs";
3
+ let lastTimestamp = 0;
4
+ let lastSafePadding = 0;
5
+ function uniqueBigInt(randomLength = 0) {
6
+ const now = Date.now();
7
+ if (now !== lastTimestamp) {
8
+ lastTimestamp = now;
9
+ lastSafePadding = 0;
10
+ }
11
+ let randomPart = "";
12
+ if (randomLength > 0) {
13
+ const randomMin = 10 ** (randomLength - 1);
14
+ const randomMax = 10 ** randomLength - 1;
15
+ randomPart = String(randomNumber(randomMin, randomMax));
16
+ }
17
+ return BigInt(randomPart + lastSafePadding++ + now);
18
+ }
19
+ const _randomChar = (dict) => {
20
+ const poolIndex = randomNumber(0, dict.length - 1);
21
+ return dict[poolIndex];
22
+ };
23
+ function uniqueString(minLength, dict) {
24
+ let finalLength = 0;
25
+ let finalDict = STRING_DICT;
26
+ if (isString(dict)) {
27
+ finalLength = minLength;
28
+ finalDict = dict;
29
+ } else if (isNumber(minLength)) {
30
+ finalLength = minLength;
31
+ } else if (isString(minLength)) {
32
+ finalDict = minLength;
33
+ }
34
+ let uniqueString2 = numberConvert(uniqueBigInt(), finalDict);
35
+ let insertLength = finalLength - uniqueString2.length;
36
+ if (insertLength <= 0) return uniqueString2;
37
+ while (insertLength--) {
38
+ uniqueString2 += _randomChar(finalDict);
39
+ }
40
+ return uniqueString2;
41
+ }
42
+ export {
43
+ uniqueBigInt,
44
+ uniqueString
45
+ };
46
+ //# sourceMappingURL=unique.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique.mjs","sources":["../src/unique.ts"],"sourcesContent":["import { numberConvert, randomNumber } from './number';\nimport { STRING_DICT } from './string';\nimport { isNumber, isString } from './type';\n\nlet lastTimestamp = 0;\nlet lastSafePadding = 0;\n\n/**\n * 生成一个唯一的 BigInt 值。\n *\n * @param randomLength - 可选参数,指定随机部分的长度,默认为 0。\n * 如果大于 0,则会在结果中附加指定长度的随机数。\n * @returns 返回一个唯一的 BigInt 值,包含时间戳、随机部分(如果有)以及递增的填充值。\n */\nexport function uniqueBigInt(randomLength = 0): bigint {\n const now = Date.now();\n\n if (now !== lastTimestamp) {\n lastTimestamp = now;\n lastSafePadding = 0;\n }\n\n let randomPart = '';\n\n if (randomLength > 0) {\n const randomMin = 10 ** (randomLength - 1);\n const randomMax = 10 ** randomLength - 1;\n randomPart = String(randomNumber(randomMin, randomMax));\n }\n\n return BigInt(randomPart + lastSafePadding++ + now);\n}\n\nconst _randomChar = (dict: string): string => {\n const poolIndex = randomNumber(0, dict.length - 1);\n\n return dict[poolIndex];\n};\n\n/**\n * 生成一个唯一的字符串。\n *\n * @param minLength - 可选参数,指定生成字符串的最小长度。\n * 如果未提供或为字符串类型,则使用默认长度。\n * @param dict - 可选参数,指定生成字符串时使用的字符集。\n * 如果未提供,则使用默认字符集 `STRING_DICT`。\n * @returns 返回一个唯一的字符串,包含时间戳、随机部分(如果有)以及递增的填充值。\n * 如果指定了 `length`,则返回值的长度将被调整到指定长度。\n */\nexport function uniqueString(minLength: number, dict: string): string;\nexport function uniqueString(minLength: number): string;\nexport function uniqueString(dict: string): string;\nexport function uniqueString(): string;\nexport function uniqueString(minLength?: number | string, dict?: string) {\n let finalLength = 0;\n let finalDict = STRING_DICT;\n\n if (isString(dict)) {\n finalLength = minLength as number;\n finalDict = dict;\n } else if (isNumber(minLength)) {\n finalLength = minLength;\n } else if (isString(minLength)) {\n finalDict = minLength;\n }\n\n let uniqueString = numberConvert(uniqueBigInt(), finalDict);\n let insertLength = finalLength - uniqueString.length;\n\n if (insertLength <= 0) return uniqueString;\n\n while (insertLength--) {\n uniqueString += _randomChar(finalDict);\n }\n\n return uniqueString;\n}\n"],"names":["uniqueString"],"mappings":";;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;AASN,SAAA,aAAa,eAAe,GAAW;AAC/C,QAAA,MAAM,KAAK,IAAI;AAErB,MAAI,QAAQ,eAAe;AACT,oBAAA;AACE,sBAAA;AAAA,EAAA;AAGpB,MAAI,aAAa;AAEjB,MAAI,eAAe,GAAG;AACd,UAAA,YAAY,OAAO,eAAe;AAClC,UAAA,YAAY,MAAM,eAAe;AACvC,iBAAa,OAAO,aAAa,WAAW,SAAS,CAAC;AAAA,EAAA;AAGjD,SAAA,OAAO,aAAa,oBAAoB,GAAG;AACpD;AAEA,MAAM,cAAc,CAAC,SAAyB;AAC5C,QAAM,YAAY,aAAa,GAAG,KAAK,SAAS,CAAC;AAEjD,SAAO,KAAK,SAAS;AACvB;AAgBgB,SAAA,aAAa,WAA6B,MAAe;AACvE,MAAI,cAAc;AAClB,MAAI,YAAY;AAEZ,MAAA,SAAS,IAAI,GAAG;AACJ,kBAAA;AACF,gBAAA;AAAA,EAAA,WACH,SAAS,SAAS,GAAG;AAChB,kBAAA;AAAA,EAAA,WACL,SAAS,SAAS,GAAG;AAClB,gBAAA;AAAA,EAAA;AAGd,MAAIA,gBAAe,cAAc,aAAa,GAAG,SAAS;AACtD,MAAA,eAAe,cAAcA,cAAa;AAE1C,MAAA,gBAAgB,EAAUA,QAAAA;AAE9B,SAAO,gBAAgB;AACrBA,qBAAgB,YAAY,SAAS;AAAA,EAAA;AAGhCA,SAAAA;AACT;"}
package/dist/url.cjs ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function urlParse(url) {
4
+ let result = null;
5
+ try {
6
+ result = new globalThis.URL(url);
7
+ } catch (e) {
8
+ }
9
+ const protocol = (result == null ? void 0 : result.protocol) || "";
10
+ const host = (result == null ? void 0 : result.host) || "";
11
+ return {
12
+ protocol,
13
+ host,
14
+ hostname: (result == null ? void 0 : result.hostname) || "",
15
+ port: (result == null ? void 0 : result.port) || "",
16
+ pathname: (result == null ? void 0 : result.pathname) || "",
17
+ search: (result == null ? void 0 : result.search) || "",
18
+ hash: (result == null ? void 0 : result.hash) || "",
19
+ username: (result == null ? void 0 : result.username) || "",
20
+ password: (result == null ? void 0 : result.password) || ""
21
+ };
22
+ }
23
+ function urlStringify(url) {
24
+ const { protocol, hostname, port, pathname, search, hash, username, password } = url;
25
+ return [
26
+ protocol ? `${protocol}//` : "",
27
+ username && password ? `${username}:${password}@` : "",
28
+ hostname,
29
+ port ? `:${port}` : "",
30
+ pathname,
31
+ search,
32
+ hash
33
+ ].filter(Boolean).join("");
34
+ }
35
+ exports.urlParse = urlParse;
36
+ exports.urlStringify = urlStringify;
37
+ //# sourceMappingURL=url.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.cjs","sources":["../src/url.ts"],"sourcesContent":["/**\n * 表示解析后的 URL 组件。\n */\nexport type TURLMeta = {\n /**\n * 协议部分,包含冒号,例如 \"https:\"。\n */\n protocol: string;\n /**\n * 主机部分,包括主机名和端口。\n */\n host: string;\n /**\n * 主机名部分。\n */\n hostname: string;\n /**\n * 端口部分。\n */\n port: string;\n /**\n * 路径部分。\n */\n pathname: string;\n /**\n * 查询字符串部分。\n */\n search: string;\n /**\n * 哈希部分。\n */\n hash: string;\n /**\n * 用户名部分。\n */\n username: string;\n /**\n * 密码部分。\n */\n password: string;\n};\n\n/**\n * 解析 URL 字符串为组件对象。\n * @param url - 需要解析的 URL 字符串。\n * @returns 包含解析后 URL 组件的对象。\n */\nexport function urlParse(url: string): TURLMeta {\n let result: URL | null = null;\n\n try {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n result = new globalThis.URL(url);\n } catch (e) {\n // ignore\n }\n\n const protocol = result?.protocol || '';\n const host = result?.host || '';\n\n return {\n protocol,\n host,\n hostname: result?.hostname || '',\n port: result?.port || '',\n pathname: result?.pathname || '',\n search: result?.search || '',\n hash: result?.hash || '',\n username: result?.username || '',\n password: result?.password || '',\n };\n}\n\n/**\n * 将 URLInfo 对象转换回 URL 字符串。\n * @param url - 需要转换的 URLInfo 对象。\n * @returns 转换后的 URL 字符串。\n */\nexport function urlStringify(url: TURLMeta) {\n const { protocol, hostname, port, pathname, search, hash, username, password } = url;\n return [\n protocol ? `${protocol}//` : '',\n username && password ? `${username}:${password}@` : '',\n hostname,\n port ? `:${port}` : '',\n pathname,\n search,\n hash,\n ]\n .filter(Boolean)\n .join('');\n}\n"],"names":[],"mappings":";;AA+CO,SAAS,SAAS,KAAuB;AAC9C,MAAI,SAAqB;AAErB,MAAA;AAGO,aAAA,IAAI,WAAW,IAAI,GAAG;AAAA,WACxB,GAAG;AAAA,EAAA;AAIN,QAAA,YAAW,iCAAQ,aAAY;AAC/B,QAAA,QAAO,iCAAQ,SAAQ;AAEtB,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAU,iCAAQ,aAAY;AAAA,IAC9B,OAAM,iCAAQ,SAAQ;AAAA,IACtB,WAAU,iCAAQ,aAAY;AAAA,IAC9B,SAAQ,iCAAQ,WAAU;AAAA,IAC1B,OAAM,iCAAQ,SAAQ;AAAA,IACtB,WAAU,iCAAQ,aAAY;AAAA,IAC9B,WAAU,iCAAQ,aAAY;AAAA,EAChC;AACF;AAOO,SAAS,aAAa,KAAe;AACpC,QAAA,EAAE,UAAU,UAAU,MAAM,UAAU,QAAQ,MAAM,UAAU,SAAA,IAAa;AAC1E,SAAA;AAAA,IACL,WAAW,GAAG,QAAQ,OAAO;AAAA,IAC7B,YAAY,WAAW,GAAG,QAAQ,IAAI,QAAQ,MAAM;AAAA,IACpD;AAAA,IACA,OAAO,IAAI,IAAI,KAAK;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EAEC,EAAA,OAAO,OAAO,EACd,KAAK,EAAE;AACZ;;;"}
package/dist/url.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 表示解析后的 URL 组件。
3
+ */
4
+ export type TURLMeta = {
5
+ /**
6
+ * 协议部分,包含冒号,例如 "https:"。
7
+ */
8
+ protocol: string;
9
+ /**
10
+ * 主机部分,包括主机名和端口。
11
+ */
12
+ host: string;
13
+ /**
14
+ * 主机名部分。
15
+ */
16
+ hostname: string;
17
+ /**
18
+ * 端口部分。
19
+ */
20
+ port: string;
21
+ /**
22
+ * 路径部分。
23
+ */
24
+ pathname: string;
25
+ /**
26
+ * 查询字符串部分。
27
+ */
28
+ search: string;
29
+ /**
30
+ * 哈希部分。
31
+ */
32
+ hash: string;
33
+ /**
34
+ * 用户名部分。
35
+ */
36
+ username: string;
37
+ /**
38
+ * 密码部分。
39
+ */
40
+ password: string;
41
+ };
42
+ /**
43
+ * 解析 URL 字符串为组件对象。
44
+ * @param url - 需要解析的 URL 字符串。
45
+ * @returns 包含解析后 URL 组件的对象。
46
+ */
47
+ export declare function urlParse(url: string): TURLMeta;
48
+ /**
49
+ * 将 URLInfo 对象转换回 URL 字符串。
50
+ * @param url - 需要转换的 URLInfo 对象。
51
+ * @returns 转换后的 URL 字符串。
52
+ */
53
+ export declare function urlStringify(url: TURLMeta): string;