@tanwan/utils 1.1.0 → 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 (452) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/addClass.cjs +19 -0
  3. package/dist/addClass.d.cts +16 -0
  4. package/dist/addClass.d.ts +17 -0
  5. package/dist/addClass.js +19 -0
  6. package/dist/{string/camelCase.d.cts → camelCase.d.cts} +1 -2
  7. package/dist/{string/camelCase.d.ts → camelCase.d.ts} +1 -2
  8. package/dist/{string/camelCase.js → camelCase.js} +0 -2
  9. package/dist/{string/capitalize.d.cts → capitalize.d.cts} +1 -2
  10. package/dist/{string/capitalize.d.ts → capitalize.d.ts} +1 -2
  11. package/dist/{string/capitalize.js → capitalize.js} +0 -2
  12. package/dist/{array/chunk.d.cts → chunk.d.cts} +1 -2
  13. package/dist/{array/chunk.d.ts → chunk.d.ts} +1 -2
  14. package/dist/{array/chunk.js → chunk.js} +0 -2
  15. package/dist/{number/clamp.d.cts → clamp.d.cts} +1 -2
  16. package/dist/{number/clamp.d.ts → clamp.d.ts} +1 -2
  17. package/dist/{number/clamp.js → clamp.js} +0 -2
  18. package/dist/convertCurrencyToChinese.cjs +56 -0
  19. package/dist/convertCurrencyToChinese.d.cts +18 -0
  20. package/dist/convertCurrencyToChinese.d.ts +19 -0
  21. package/dist/convertCurrencyToChinese.js +56 -0
  22. package/dist/copyToClipboard.cjs +38 -0
  23. package/dist/copyToClipboard.d.cts +17 -0
  24. package/dist/copyToClipboard.d.ts +18 -0
  25. package/dist/copyToClipboard.js +38 -0
  26. package/dist/createElement.cjs +27 -0
  27. package/dist/createElement.d.cts +21 -0
  28. package/dist/createElement.d.ts +22 -0
  29. package/dist/createElement.js +27 -0
  30. package/dist/{function/debounce.d.cts → debounce.d.cts} +1 -2
  31. package/dist/{function/debounce.d.ts → debounce.d.ts} +1 -2
  32. package/dist/{function/debounce.js → debounce.js} +0 -2
  33. package/dist/debounceSubmit.cjs +34 -0
  34. package/dist/debounceSubmit.d.cts +22 -0
  35. package/dist/debounceSubmit.d.ts +23 -0
  36. package/dist/debounceSubmit.js +34 -0
  37. package/dist/decodeBase64.cjs +19 -0
  38. package/dist/decodeBase64.d.cts +16 -0
  39. package/dist/decodeBase64.d.ts +17 -0
  40. package/dist/decodeBase64.js +19 -0
  41. package/dist/{base/deepClone.cjs → deepClone.cjs} +2 -2
  42. package/dist/{base/deepClone.d.cts → deepClone.d.cts} +1 -2
  43. package/dist/{base/deepClone.d.ts → deepClone.d.ts} +1 -2
  44. package/dist/{base/deepClone.js → deepClone.js} +0 -2
  45. package/dist/deepMerge.cjs +39 -0
  46. package/dist/deepMerge.d.cts +25 -0
  47. package/dist/deepMerge.d.ts +26 -0
  48. package/dist/deepMerge.js +39 -0
  49. package/dist/{function/delay.d.cts → delay.d.cts} +1 -2
  50. package/dist/{function/delay.d.ts → delay.d.ts} +1 -2
  51. package/dist/{function/delay.js → delay.js} +0 -2
  52. package/dist/difference.cjs +24 -0
  53. package/dist/difference.d.cts +20 -0
  54. package/dist/difference.d.ts +21 -0
  55. package/dist/difference.js +24 -0
  56. package/dist/downloadFile.cjs +31 -0
  57. package/dist/downloadFile.d.cts +20 -0
  58. package/dist/downloadFile.d.ts +21 -0
  59. package/dist/downloadFile.js +31 -0
  60. package/dist/encodeBase64.cjs +20 -0
  61. package/dist/encodeBase64.d.cts +17 -0
  62. package/dist/encodeBase64.d.ts +18 -0
  63. package/dist/encodeBase64.js +20 -0
  64. package/dist/{array/flatten.d.cts → flatten.d.cts} +1 -2
  65. package/dist/{array/flatten.d.ts → flatten.d.ts} +1 -2
  66. package/dist/{array/flatten.js → flatten.js} +0 -2
  67. package/dist/formatBankCard.cjs +19 -0
  68. package/dist/formatBankCard.d.cts +16 -0
  69. package/dist/formatBankCard.d.ts +17 -0
  70. package/dist/formatBankCard.js +19 -0
  71. package/dist/formatCurrency.cjs +7 -0
  72. package/dist/formatCurrency.d.cts +27 -0
  73. package/dist/formatCurrency.d.ts +28 -0
  74. package/dist/formatCurrency.js +7 -0
  75. package/dist/{date/formatDate.d.cts → formatDate.d.cts} +1 -2
  76. package/dist/{date/formatDate.d.ts → formatDate.d.ts} +1 -2
  77. package/dist/{date/formatDate.js → formatDate.js} +0 -2
  78. package/dist/formatFileSize.cjs +33 -0
  79. package/dist/formatFileSize.d.cts +19 -0
  80. package/dist/formatFileSize.d.ts +20 -0
  81. package/dist/formatFileSize.js +33 -0
  82. package/dist/formatIdCard.cjs +21 -0
  83. package/dist/formatIdCard.d.cts +17 -0
  84. package/dist/formatIdCard.d.ts +18 -0
  85. package/dist/formatIdCard.js +21 -0
  86. package/dist/formatPhone.cjs +21 -0
  87. package/dist/formatPhone.d.cts +17 -0
  88. package/dist/formatPhone.d.ts +18 -0
  89. package/dist/formatPhone.js +21 -0
  90. package/dist/{number/formatThousands.d.cts → formatThousands.d.cts} +1 -2
  91. package/dist/{number/formatThousands.d.ts → formatThousands.d.ts} +1 -2
  92. package/dist/{number/formatThousands.js → formatThousands.js} +0 -2
  93. package/dist/generateCode.cjs +29 -0
  94. package/dist/generateCode.d.cts +19 -0
  95. package/dist/generateCode.d.ts +20 -0
  96. package/dist/generateCode.js +29 -0
  97. package/dist/getAge.cjs +30 -0
  98. package/dist/getAge.d.cts +18 -0
  99. package/dist/getAge.d.ts +19 -0
  100. package/dist/getAge.js +30 -0
  101. package/dist/getByPath.cjs +29 -0
  102. package/dist/getByPath.d.cts +20 -0
  103. package/dist/getByPath.d.ts +21 -0
  104. package/dist/getByPath.js +29 -0
  105. package/dist/getCssVar.cjs +22 -0
  106. package/dist/getCssVar.d.cts +18 -0
  107. package/dist/getCssVar.d.ts +19 -0
  108. package/dist/getCssVar.js +22 -0
  109. package/dist/{date/getRelativeTime.d.cts → getRelativeTime.d.cts} +1 -2
  110. package/dist/{date/getRelativeTime.d.ts → getRelativeTime.d.ts} +1 -2
  111. package/dist/{date/getRelativeTime.js → getRelativeTime.js} +0 -2
  112. package/dist/getScrollTop.cjs +28 -0
  113. package/dist/getScrollTop.d.cts +18 -0
  114. package/dist/getScrollTop.d.ts +19 -0
  115. package/dist/getScrollTop.js +28 -0
  116. package/dist/getStorage.cjs +27 -0
  117. package/dist/getStorage.d.cts +18 -0
  118. package/dist/getStorage.d.ts +19 -0
  119. package/dist/getStorage.js +27 -0
  120. package/dist/getStyle.cjs +20 -0
  121. package/dist/getStyle.d.cts +17 -0
  122. package/dist/getStyle.d.ts +18 -0
  123. package/dist/getStyle.js +20 -0
  124. package/dist/getTextWidth.cjs +26 -0
  125. package/dist/getTextWidth.d.cts +16 -0
  126. package/dist/getTextWidth.d.ts +17 -0
  127. package/dist/getTextWidth.js +26 -0
  128. package/dist/{array/groupBy.d.cts → groupBy.d.cts} +1 -2
  129. package/dist/{array/groupBy.d.ts → groupBy.d.ts} +1 -2
  130. package/dist/{array/groupBy.js → groupBy.js} +0 -2
  131. package/dist/hasClass.cjs +19 -0
  132. package/dist/hasClass.d.cts +16 -0
  133. package/dist/hasClass.d.ts +17 -0
  134. package/dist/hasClass.js +19 -0
  135. package/dist/index.cjs +180 -54
  136. package/dist/index.d.cts +91 -28
  137. package/dist/index.d.ts +91 -28
  138. package/dist/index.iife.js +1 -1
  139. package/dist/index.js +91 -28
  140. package/dist/insertAfter.cjs +19 -0
  141. package/dist/insertAfter.d.cts +15 -0
  142. package/dist/insertAfter.d.ts +16 -0
  143. package/dist/insertAfter.js +19 -0
  144. package/dist/intersection.cjs +24 -0
  145. package/dist/intersection.d.cts +20 -0
  146. package/dist/intersection.d.ts +21 -0
  147. package/dist/intersection.js +24 -0
  148. package/dist/invert.cjs +21 -0
  149. package/dist/invert.d.cts +16 -0
  150. package/dist/invert.d.ts +17 -0
  151. package/dist/invert.js +21 -0
  152. package/dist/{base/isArray.d.cts → isArray.d.cts} +1 -2
  153. package/dist/{base/isArray.d.ts → isArray.d.ts} +1 -2
  154. package/dist/{base/isArray.js → isArray.js} +0 -2
  155. package/dist/isBrowser.cjs +17 -0
  156. package/dist/isBrowser.d.cts +14 -0
  157. package/dist/isBrowser.d.ts +15 -0
  158. package/dist/isBrowser.js +17 -0
  159. package/dist/isDate.cjs +18 -0
  160. package/dist/isDate.d.cts +15 -0
  161. package/dist/isDate.d.ts +16 -0
  162. package/dist/isDate.js +18 -0
  163. package/dist/{base/isEmpty.cjs → isEmpty.cjs} +2 -2
  164. package/dist/{base/isEmpty.d.cts → isEmpty.d.cts} +1 -2
  165. package/dist/{base/isEmpty.d.ts → isEmpty.d.ts} +1 -2
  166. package/dist/{base/isEmpty.js → isEmpty.js} +0 -2
  167. package/dist/isFunction.cjs +19 -0
  168. package/dist/isFunction.d.cts +16 -0
  169. package/dist/isFunction.d.ts +17 -0
  170. package/dist/isFunction.js +19 -0
  171. package/dist/isInViewport.cjs +22 -0
  172. package/dist/isInViewport.d.cts +17 -0
  173. package/dist/isInViewport.d.ts +18 -0
  174. package/dist/isInViewport.js +22 -0
  175. package/dist/isNil.cjs +19 -0
  176. package/dist/isNil.d.cts +16 -0
  177. package/dist/isNil.d.ts +17 -0
  178. package/dist/isNil.js +19 -0
  179. package/dist/isNumber.cjs +19 -0
  180. package/dist/isNumber.d.cts +16 -0
  181. package/dist/isNumber.d.ts +17 -0
  182. package/dist/isNumber.js +19 -0
  183. package/dist/{base/isObject.d.cts → isObject.d.cts} +1 -2
  184. package/dist/{base/isObject.d.ts → isObject.d.ts} +1 -2
  185. package/dist/{base/isObject.js → isObject.js} +0 -2
  186. package/dist/isPrimitive.cjs +21 -0
  187. package/dist/isPrimitive.d.cts +18 -0
  188. package/dist/isPrimitive.d.ts +19 -0
  189. package/dist/isPrimitive.js +21 -0
  190. package/dist/isPromise.cjs +18 -0
  191. package/dist/isPromise.d.cts +15 -0
  192. package/dist/isPromise.d.ts +16 -0
  193. package/dist/isPromise.js +18 -0
  194. package/dist/{base/isString.d.cts → isString.d.cts} +1 -2
  195. package/dist/{base/isString.d.ts → isString.d.ts} +1 -2
  196. package/dist/{base/isString.js → isString.js} +0 -2
  197. package/dist/joinUrl.cjs +25 -0
  198. package/dist/joinUrl.d.cts +19 -0
  199. package/dist/joinUrl.d.ts +20 -0
  200. package/dist/joinUrl.js +25 -0
  201. package/dist/{string/kebabCase.d.cts → kebabCase.d.cts} +1 -2
  202. package/dist/{string/kebabCase.d.ts → kebabCase.d.ts} +1 -2
  203. package/dist/{string/kebabCase.js → kebabCase.js} +0 -2
  204. package/dist/lazyLoadImages.cjs +36 -0
  205. package/dist/lazyLoadImages.d.cts +19 -0
  206. package/dist/lazyLoadImages.d.ts +20 -0
  207. package/dist/lazyLoadImages.js +36 -0
  208. package/dist/listToTree.cjs +25 -0
  209. package/dist/listToTree.d.cts +32 -0
  210. package/dist/listToTree.d.ts +33 -0
  211. package/dist/listToTree.js +25 -0
  212. package/dist/mapValues.cjs +25 -0
  213. package/dist/mapValues.d.cts +20 -0
  214. package/dist/mapValues.d.ts +21 -0
  215. package/dist/mapValues.js +25 -0
  216. package/dist/maskString.cjs +28 -0
  217. package/dist/maskString.d.cts +24 -0
  218. package/dist/maskString.d.ts +25 -0
  219. package/dist/maskString.js +28 -0
  220. package/dist/memoize.cjs +32 -0
  221. package/dist/memoize.d.cts +22 -0
  222. package/dist/memoize.d.ts +23 -0
  223. package/dist/memoize.js +32 -0
  224. package/dist/off.cjs +22 -0
  225. package/dist/off.d.cts +19 -0
  226. package/dist/off.d.ts +20 -0
  227. package/dist/off.js +22 -0
  228. package/dist/{object/omit.d.cts → omit.d.cts} +1 -2
  229. package/dist/{object/omit.d.ts → omit.d.ts} +1 -2
  230. package/dist/{object/omit.js → omit.js} +0 -2
  231. package/dist/on.cjs +21 -0
  232. package/dist/on.d.cts +18 -0
  233. package/dist/on.d.ts +19 -0
  234. package/dist/on.js +21 -0
  235. package/dist/once.cjs +31 -0
  236. package/dist/once.d.cts +20 -0
  237. package/dist/once.d.ts +21 -0
  238. package/dist/once.js +31 -0
  239. package/dist/{url/parseQueryString.d.cts → parseQueryString.d.cts} +1 -2
  240. package/dist/{url/parseQueryString.d.ts → parseQueryString.d.ts} +1 -2
  241. package/dist/{url/parseQueryString.js → parseQueryString.js} +0 -2
  242. package/dist/pascalCase.cjs +18 -0
  243. package/dist/pascalCase.d.cts +15 -0
  244. package/dist/pascalCase.d.ts +16 -0
  245. package/dist/pascalCase.js +18 -0
  246. package/dist/{object/pick.d.cts → pick.d.cts} +1 -2
  247. package/dist/{object/pick.d.ts → pick.d.ts} +1 -2
  248. package/dist/{object/pick.js → pick.js} +0 -2
  249. package/dist/{number/randomInt.d.cts → randomInt.d.cts} +1 -2
  250. package/dist/{number/randomInt.d.ts → randomInt.d.ts} +1 -2
  251. package/dist/{number/randomInt.js → randomInt.js} +0 -2
  252. package/dist/{array/range.d.cts → range.d.cts} +1 -2
  253. package/dist/{array/range.d.ts → range.d.ts} +1 -2
  254. package/dist/{array/range.js → range.js} +0 -2
  255. package/dist/removeClass.cjs +19 -0
  256. package/dist/removeClass.d.cts +16 -0
  257. package/dist/removeClass.d.ts +17 -0
  258. package/dist/removeClass.js +19 -0
  259. package/dist/removeElement.cjs +17 -0
  260. package/dist/removeElement.d.cts +14 -0
  261. package/dist/removeElement.d.ts +15 -0
  262. package/dist/removeElement.js +17 -0
  263. package/dist/removeStorage.cjs +19 -0
  264. package/dist/removeStorage.d.cts +14 -0
  265. package/dist/removeStorage.d.ts +15 -0
  266. package/dist/removeStorage.js +19 -0
  267. package/dist/retry.cjs +27 -0
  268. package/dist/retry.d.cts +17 -0
  269. package/dist/retry.d.ts +18 -0
  270. package/dist/retry.js +27 -0
  271. package/dist/sample.cjs +20 -0
  272. package/dist/sample.d.cts +16 -0
  273. package/dist/sample.d.ts +17 -0
  274. package/dist/sample.js +20 -0
  275. package/dist/scrollToElement.cjs +23 -0
  276. package/dist/scrollToElement.d.cts +16 -0
  277. package/dist/scrollToElement.d.ts +17 -0
  278. package/dist/scrollToElement.js +23 -0
  279. package/dist/setCssVar.cjs +22 -0
  280. package/dist/setCssVar.d.cts +18 -0
  281. package/dist/setCssVar.d.ts +19 -0
  282. package/dist/setCssVar.js +22 -0
  283. package/dist/setStorage.cjs +25 -0
  284. package/dist/setStorage.d.cts +17 -0
  285. package/dist/setStorage.d.ts +18 -0
  286. package/dist/setStorage.js +25 -0
  287. package/dist/setStyle.cjs +22 -0
  288. package/dist/setStyle.d.cts +19 -0
  289. package/dist/setStyle.d.ts +20 -0
  290. package/dist/setStyle.js +22 -0
  291. package/dist/{array/shuffle.d.cts → shuffle.d.cts} +1 -2
  292. package/dist/{array/shuffle.d.ts → shuffle.d.ts} +1 -2
  293. package/dist/{array/shuffle.js → shuffle.js} +0 -2
  294. package/dist/snakeCase.cjs +18 -0
  295. package/dist/snakeCase.d.cts +15 -0
  296. package/dist/snakeCase.d.ts +16 -0
  297. package/dist/snakeCase.js +18 -0
  298. package/dist/sortBy.cjs +30 -0
  299. package/dist/sortBy.d.cts +20 -0
  300. package/dist/sortBy.d.ts +21 -0
  301. package/dist/sortBy.js +30 -0
  302. package/dist/{url/stringifyQueryString.d.cts → stringifyQueryString.d.cts} +1 -2
  303. package/dist/{url/stringifyQueryString.d.ts → stringifyQueryString.d.ts} +1 -2
  304. package/dist/{url/stringifyQueryString.js → stringifyQueryString.js} +0 -2
  305. package/dist/{function/throttle.d.cts → throttle.d.cts} +1 -2
  306. package/dist/{function/throttle.d.ts → throttle.d.ts} +1 -2
  307. package/dist/{function/throttle.js → throttle.js} +0 -2
  308. package/dist/toggleClass.cjs +22 -0
  309. package/dist/toggleClass.d.cts +19 -0
  310. package/dist/toggleClass.d.ts +20 -0
  311. package/dist/toggleClass.js +22 -0
  312. package/dist/treeFind.cjs +34 -0
  313. package/dist/treeFind.d.cts +25 -0
  314. package/dist/treeFind.d.ts +26 -0
  315. package/dist/treeFind.js +34 -0
  316. package/dist/treeToList.cjs +33 -0
  317. package/dist/treeToList.d.cts +24 -0
  318. package/dist/treeToList.d.ts +25 -0
  319. package/dist/treeToList.js +33 -0
  320. package/dist/truncate.cjs +23 -0
  321. package/dist/truncate.d.cts +19 -0
  322. package/dist/truncate.d.ts +20 -0
  323. package/dist/truncate.js +23 -0
  324. package/dist/uniqBy.cjs +30 -0
  325. package/dist/uniqBy.d.cts +20 -0
  326. package/dist/uniqBy.d.ts +21 -0
  327. package/dist/uniqBy.js +30 -0
  328. package/dist/{array/unique.d.cts → unique.d.cts} +1 -2
  329. package/dist/{array/unique.d.ts → unique.d.ts} +1 -2
  330. package/dist/{array/unique.js → unique.js} +0 -2
  331. package/dist/{string/uuid.d.cts → uuid.d.cts} +1 -2
  332. package/dist/{string/uuid.d.ts → uuid.d.ts} +1 -2
  333. package/dist/{string/uuid.js → uuid.js} +0 -2
  334. package/dist/validateEmail.cjs +19 -0
  335. package/dist/validateEmail.d.cts +16 -0
  336. package/dist/validateEmail.d.ts +17 -0
  337. package/dist/validateEmail.js +19 -0
  338. package/dist/validateIdCard.cjs +62 -0
  339. package/dist/validateIdCard.d.cts +15 -0
  340. package/dist/validateIdCard.d.ts +16 -0
  341. package/dist/validateIdCard.js +62 -0
  342. package/dist/validatePhone.cjs +19 -0
  343. package/dist/validatePhone.d.cts +16 -0
  344. package/dist/validatePhone.d.ts +17 -0
  345. package/dist/validatePhone.js +19 -0
  346. package/package.json +340 -83
  347. package/dist/array/chunk.d.cts.map +0 -1
  348. package/dist/array/chunk.d.ts.map +0 -1
  349. package/dist/array/chunk.js.map +0 -1
  350. package/dist/array/flatten.d.cts.map +0 -1
  351. package/dist/array/flatten.d.ts.map +0 -1
  352. package/dist/array/flatten.js.map +0 -1
  353. package/dist/array/groupBy.d.cts.map +0 -1
  354. package/dist/array/groupBy.d.ts.map +0 -1
  355. package/dist/array/groupBy.js.map +0 -1
  356. package/dist/array/range.d.cts.map +0 -1
  357. package/dist/array/range.d.ts.map +0 -1
  358. package/dist/array/range.js.map +0 -1
  359. package/dist/array/shuffle.d.cts.map +0 -1
  360. package/dist/array/shuffle.d.ts.map +0 -1
  361. package/dist/array/shuffle.js.map +0 -1
  362. package/dist/array/unique.d.cts.map +0 -1
  363. package/dist/array/unique.d.ts.map +0 -1
  364. package/dist/array/unique.js.map +0 -1
  365. package/dist/base/deepClone.d.cts.map +0 -1
  366. package/dist/base/deepClone.d.ts.map +0 -1
  367. package/dist/base/deepClone.js.map +0 -1
  368. package/dist/base/isArray.d.cts.map +0 -1
  369. package/dist/base/isArray.d.ts.map +0 -1
  370. package/dist/base/isArray.js.map +0 -1
  371. package/dist/base/isEmpty.d.cts.map +0 -1
  372. package/dist/base/isEmpty.d.ts.map +0 -1
  373. package/dist/base/isEmpty.js.map +0 -1
  374. package/dist/base/isObject.d.cts.map +0 -1
  375. package/dist/base/isObject.d.ts.map +0 -1
  376. package/dist/base/isObject.js.map +0 -1
  377. package/dist/base/isString.d.cts.map +0 -1
  378. package/dist/base/isString.d.ts.map +0 -1
  379. package/dist/base/isString.js.map +0 -1
  380. package/dist/date/formatDate.d.cts.map +0 -1
  381. package/dist/date/formatDate.d.ts.map +0 -1
  382. package/dist/date/formatDate.js.map +0 -1
  383. package/dist/date/getRelativeTime.d.cts.map +0 -1
  384. package/dist/date/getRelativeTime.d.ts.map +0 -1
  385. package/dist/date/getRelativeTime.js.map +0 -1
  386. package/dist/function/debounce.d.cts.map +0 -1
  387. package/dist/function/debounce.d.ts.map +0 -1
  388. package/dist/function/debounce.js.map +0 -1
  389. package/dist/function/delay.d.cts.map +0 -1
  390. package/dist/function/delay.d.ts.map +0 -1
  391. package/dist/function/delay.js.map +0 -1
  392. package/dist/function/throttle.d.cts.map +0 -1
  393. package/dist/function/throttle.d.ts.map +0 -1
  394. package/dist/function/throttle.js.map +0 -1
  395. package/dist/number/clamp.d.cts.map +0 -1
  396. package/dist/number/clamp.d.ts.map +0 -1
  397. package/dist/number/clamp.js.map +0 -1
  398. package/dist/number/formatThousands.d.cts.map +0 -1
  399. package/dist/number/formatThousands.d.ts.map +0 -1
  400. package/dist/number/formatThousands.js.map +0 -1
  401. package/dist/number/randomInt.d.cts.map +0 -1
  402. package/dist/number/randomInt.d.ts.map +0 -1
  403. package/dist/number/randomInt.js.map +0 -1
  404. package/dist/object/omit.d.cts.map +0 -1
  405. package/dist/object/omit.d.ts.map +0 -1
  406. package/dist/object/omit.js.map +0 -1
  407. package/dist/object/pick.d.cts.map +0 -1
  408. package/dist/object/pick.d.ts.map +0 -1
  409. package/dist/object/pick.js.map +0 -1
  410. package/dist/string/camelCase.d.cts.map +0 -1
  411. package/dist/string/camelCase.d.ts.map +0 -1
  412. package/dist/string/camelCase.js.map +0 -1
  413. package/dist/string/capitalize.d.cts.map +0 -1
  414. package/dist/string/capitalize.d.ts.map +0 -1
  415. package/dist/string/capitalize.js.map +0 -1
  416. package/dist/string/kebabCase.d.cts.map +0 -1
  417. package/dist/string/kebabCase.d.ts.map +0 -1
  418. package/dist/string/kebabCase.js.map +0 -1
  419. package/dist/string/uuid.d.cts.map +0 -1
  420. package/dist/string/uuid.d.ts.map +0 -1
  421. package/dist/string/uuid.js.map +0 -1
  422. package/dist/url/parseQueryString.d.cts.map +0 -1
  423. package/dist/url/parseQueryString.d.ts.map +0 -1
  424. package/dist/url/parseQueryString.js.map +0 -1
  425. package/dist/url/stringifyQueryString.d.cts.map +0 -1
  426. package/dist/url/stringifyQueryString.d.ts.map +0 -1
  427. package/dist/url/stringifyQueryString.js.map +0 -1
  428. /package/dist/{string/camelCase.cjs → camelCase.cjs} +0 -0
  429. /package/dist/{string/capitalize.cjs → capitalize.cjs} +0 -0
  430. /package/dist/{array/chunk.cjs → chunk.cjs} +0 -0
  431. /package/dist/{number/clamp.cjs → clamp.cjs} +0 -0
  432. /package/dist/{function/debounce.cjs → debounce.cjs} +0 -0
  433. /package/dist/{function/delay.cjs → delay.cjs} +0 -0
  434. /package/dist/{array/flatten.cjs → flatten.cjs} +0 -0
  435. /package/dist/{date/formatDate.cjs → formatDate.cjs} +0 -0
  436. /package/dist/{number/formatThousands.cjs → formatThousands.cjs} +0 -0
  437. /package/dist/{date/getRelativeTime.cjs → getRelativeTime.cjs} +0 -0
  438. /package/dist/{array/groupBy.cjs → groupBy.cjs} +0 -0
  439. /package/dist/{base/isArray.cjs → isArray.cjs} +0 -0
  440. /package/dist/{base/isObject.cjs → isObject.cjs} +0 -0
  441. /package/dist/{base/isString.cjs → isString.cjs} +0 -0
  442. /package/dist/{string/kebabCase.cjs → kebabCase.cjs} +0 -0
  443. /package/dist/{object/omit.cjs → omit.cjs} +0 -0
  444. /package/dist/{url/parseQueryString.cjs → parseQueryString.cjs} +0 -0
  445. /package/dist/{object/pick.cjs → pick.cjs} +0 -0
  446. /package/dist/{number/randomInt.cjs → randomInt.cjs} +0 -0
  447. /package/dist/{array/range.cjs → range.cjs} +0 -0
  448. /package/dist/{array/shuffle.cjs → shuffle.cjs} +0 -0
  449. /package/dist/{url/stringifyQueryString.cjs → stringifyQueryString.cjs} +0 -0
  450. /package/dist/{function/throttle.cjs → throttle.cjs} +0 -0
  451. /package/dist/{array/unique.cjs → unique.cjs} +0 -0
  452. /package/dist/{string/uuid.cjs → uuid.cjs} +0 -0
package/dist/once.cjs ADDED
@@ -0,0 +1,31 @@
1
+ //#region src/function/once/index.ts
2
+ /**
3
+ * 包装函数,确保它只执行一次,后续调用返回第一次的结果
4
+ *
5
+ * @param fn - 需要只执行一次的函数
6
+ * @returns 包装后的函数
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import once from '@tanwan/utils/once'
11
+ * const initialize = once(() => {
12
+ * console.log('只执行一次')
13
+ * return 'done'
14
+ * })
15
+ * initialize() // 'done'(输出日志)
16
+ * initialize() // 'done'(不输出日志)
17
+ * ```
18
+ */
19
+ function once(fn) {
20
+ let called = false;
21
+ let result;
22
+ return ((...args) => {
23
+ if (!called) {
24
+ called = true;
25
+ result = fn(...args);
26
+ }
27
+ return result;
28
+ });
29
+ }
30
+ //#endregion
31
+ module.exports = once;
@@ -0,0 +1,20 @@
1
+ //#region src/function/once/index.d.ts
2
+ /**
3
+ * 包装函数,确保它只执行一次,后续调用返回第一次的结果
4
+ *
5
+ * @param fn - 需要只执行一次的函数
6
+ * @returns 包装后的函数
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import once from '@tanwan/utils/once'
11
+ * const initialize = once(() => {
12
+ * console.log('只执行一次')
13
+ * return 'done'
14
+ * })
15
+ * initialize() // 'done'(输出日志)
16
+ * initialize() // 'done'(不输出日志)
17
+ * ```
18
+ */
19
+ declare function once<T extends (...args: unknown[]) => unknown>(fn: T): T;
20
+ export = once;
package/dist/once.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ //#region src/function/once/index.d.ts
2
+ /**
3
+ * 包装函数,确保它只执行一次,后续调用返回第一次的结果
4
+ *
5
+ * @param fn - 需要只执行一次的函数
6
+ * @returns 包装后的函数
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import once from '@tanwan/utils/once'
11
+ * const initialize = once(() => {
12
+ * console.log('只执行一次')
13
+ * return 'done'
14
+ * })
15
+ * initialize() // 'done'(输出日志)
16
+ * initialize() // 'done'(不输出日志)
17
+ * ```
18
+ */
19
+ declare function once<T extends (...args: unknown[]) => unknown>(fn: T): T;
20
+ //#endregion
21
+ export { once as default };
package/dist/once.js ADDED
@@ -0,0 +1,31 @@
1
+ //#region src/function/once/index.ts
2
+ /**
3
+ * 包装函数,确保它只执行一次,后续调用返回第一次的结果
4
+ *
5
+ * @param fn - 需要只执行一次的函数
6
+ * @returns 包装后的函数
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import once from '@tanwan/utils/once'
11
+ * const initialize = once(() => {
12
+ * console.log('只执行一次')
13
+ * return 'done'
14
+ * })
15
+ * initialize() // 'done'(输出日志)
16
+ * initialize() // 'done'(不输出日志)
17
+ * ```
18
+ */
19
+ function once(fn) {
20
+ let called = false;
21
+ let result;
22
+ return ((...args) => {
23
+ if (!called) {
24
+ called = true;
25
+ result = fn(...args);
26
+ }
27
+ return result;
28
+ });
29
+ }
30
+ //#endregion
31
+ export { once as default };
@@ -18,5 +18,4 @@
18
18
  * ```
19
19
  */
20
20
  declare function parseQueryString(query?: string): Record<string, string | number | boolean | (string | number | boolean)[]>;
21
- export = parseQueryString;
22
- //# sourceMappingURL=parseQueryString.d.cts.map
21
+ export = parseQueryString;
@@ -19,5 +19,4 @@
19
19
  */
20
20
  declare function parseQueryString(query?: string): Record<string, string | number | boolean | (string | number | boolean)[]>;
21
21
  //#endregion
22
- export { parseQueryString as default };
23
- //# sourceMappingURL=parseQueryString.d.ts.map
22
+ export { parseQueryString as default };
@@ -46,5 +46,3 @@ function parseValue(value) {
46
46
  }
47
47
  //#endregion
48
48
  export { parseQueryString as default };
49
-
50
- //# sourceMappingURL=parseQueryString.js.map
@@ -0,0 +1,18 @@
1
+ //#region src/string/pascalCase/index.ts
2
+ /**
3
+ * 将字符串转换为帕斯卡命名(PascalCase)
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import pascalCase from '@tanwan/utils/pascalCase'
8
+ * pascalCase('foo-bar') // 'FooBar'
9
+ * pascalCase('foo_bar') // 'FooBar'
10
+ * pascalCase('foo bar') // 'FooBar'
11
+ * pascalCase('fooBar') // 'FooBar'
12
+ * ```
13
+ */
14
+ function pascalCase(str) {
15
+ return str.replace(/[-_.\s]+(\w|$)/g, (_, c) => c.toUpperCase()).replace(/^[a-z]/, (c) => c.toUpperCase());
16
+ }
17
+ //#endregion
18
+ module.exports = pascalCase;
@@ -0,0 +1,15 @@
1
+ //#region src/string/pascalCase/index.d.ts
2
+ /**
3
+ * 将字符串转换为帕斯卡命名(PascalCase)
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import pascalCase from '@tanwan/utils/pascalCase'
8
+ * pascalCase('foo-bar') // 'FooBar'
9
+ * pascalCase('foo_bar') // 'FooBar'
10
+ * pascalCase('foo bar') // 'FooBar'
11
+ * pascalCase('fooBar') // 'FooBar'
12
+ * ```
13
+ */
14
+ declare function pascalCase(str: string): string;
15
+ export = pascalCase;
@@ -0,0 +1,16 @@
1
+ //#region src/string/pascalCase/index.d.ts
2
+ /**
3
+ * 将字符串转换为帕斯卡命名(PascalCase)
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import pascalCase from '@tanwan/utils/pascalCase'
8
+ * pascalCase('foo-bar') // 'FooBar'
9
+ * pascalCase('foo_bar') // 'FooBar'
10
+ * pascalCase('foo bar') // 'FooBar'
11
+ * pascalCase('fooBar') // 'FooBar'
12
+ * ```
13
+ */
14
+ declare function pascalCase(str: string): string;
15
+ //#endregion
16
+ export { pascalCase as default };
@@ -0,0 +1,18 @@
1
+ //#region src/string/pascalCase/index.ts
2
+ /**
3
+ * 将字符串转换为帕斯卡命名(PascalCase)
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import pascalCase from '@tanwan/utils/pascalCase'
8
+ * pascalCase('foo-bar') // 'FooBar'
9
+ * pascalCase('foo_bar') // 'FooBar'
10
+ * pascalCase('foo bar') // 'FooBar'
11
+ * pascalCase('fooBar') // 'FooBar'
12
+ * ```
13
+ */
14
+ function pascalCase(str) {
15
+ return str.replace(/[-_.\s]+(\w|$)/g, (_, c) => c.toUpperCase()).replace(/^[a-z]/, (c) => c.toUpperCase());
16
+ }
17
+ //#endregion
18
+ export { pascalCase as default };
@@ -14,5 +14,4 @@
14
14
  * ```
15
15
  */
16
16
  declare function pick<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
17
- export = pick;
18
- //# sourceMappingURL=pick.d.cts.map
17
+ export = pick;
@@ -15,5 +15,4 @@
15
15
  */
16
16
  declare function pick<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
17
17
  //#endregion
18
- export { pick as default };
19
- //# sourceMappingURL=pick.d.ts.map
18
+ export { pick as default };
@@ -20,5 +20,3 @@ function pick(obj, keys) {
20
20
  }
21
21
  //#endregion
22
22
  export { pick as default };
23
-
24
- //# sourceMappingURL=pick.js.map
@@ -9,5 +9,4 @@
9
9
  * ```
10
10
  */
11
11
  declare function randomInt(min: number, max: number): number;
12
- export = randomInt;
13
- //# sourceMappingURL=randomInt.d.cts.map
12
+ export = randomInt;
@@ -10,5 +10,4 @@
10
10
  */
11
11
  declare function randomInt(min: number, max: number): number;
12
12
  //#endregion
13
- export { randomInt as default };
14
- //# sourceMappingURL=randomInt.d.ts.map
13
+ export { randomInt as default };
@@ -13,5 +13,3 @@ function randomInt(min, max) {
13
13
  }
14
14
  //#endregion
15
15
  export { randomInt as default };
16
-
17
- //# sourceMappingURL=randomInt.js.map
@@ -17,5 +17,4 @@
17
17
  * ```
18
18
  */
19
19
  declare function range(start: number, end: number, step?: number): number[];
20
- export = range;
21
- //# sourceMappingURL=range.d.cts.map
20
+ export = range;
@@ -18,5 +18,4 @@
18
18
  */
19
19
  declare function range(start: number, end: number, step?: number): number[];
20
20
  //#endregion
21
- export { range as default };
22
- //# sourceMappingURL=range.d.ts.map
21
+ export { range as default };
@@ -25,5 +25,3 @@ function range(start, end, step = 1) {
25
25
  }
26
26
  //#endregion
27
27
  export { range as default };
28
-
29
- //# sourceMappingURL=range.js.map
@@ -0,0 +1,19 @@
1
+ //#region src/dom/removeClass/index.ts
2
+ /**
3
+ * 移除元素的 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要移除的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import removeClass from '@tanwan/utils/removeClass'
11
+ * removeClass(el, 'active')
12
+ * removeClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ function removeClass(el, className) {
16
+ el.classList.remove(...className.split(/\s+/).filter(Boolean));
17
+ }
18
+ //#endregion
19
+ module.exports = removeClass;
@@ -0,0 +1,16 @@
1
+ //#region src/dom/removeClass/index.d.ts
2
+ /**
3
+ * 移除元素的 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要移除的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import removeClass from '@tanwan/utils/removeClass'
11
+ * removeClass(el, 'active')
12
+ * removeClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ declare function removeClass(el: Element, className: string): void;
16
+ export = removeClass;
@@ -0,0 +1,17 @@
1
+ //#region src/dom/removeClass/index.d.ts
2
+ /**
3
+ * 移除元素的 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要移除的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import removeClass from '@tanwan/utils/removeClass'
11
+ * removeClass(el, 'active')
12
+ * removeClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ declare function removeClass(el: Element, className: string): void;
16
+ //#endregion
17
+ export { removeClass as default };
@@ -0,0 +1,19 @@
1
+ //#region src/dom/removeClass/index.ts
2
+ /**
3
+ * 移除元素的 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要移除的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import removeClass from '@tanwan/utils/removeClass'
11
+ * removeClass(el, 'active')
12
+ * removeClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ function removeClass(el, className) {
16
+ el.classList.remove(...className.split(/\s+/).filter(Boolean));
17
+ }
18
+ //#endregion
19
+ export { removeClass as default };
@@ -0,0 +1,17 @@
1
+ //#region src/dom/removeElement/index.ts
2
+ /**
3
+ * 安全地移除元素
4
+ *
5
+ * @param el - 要移除的 DOM 元素
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeElement from '@tanwan/utils/removeElement'
10
+ * removeElement(document.getElementById('banner'))
11
+ * ```
12
+ */
13
+ function removeElement(el) {
14
+ el.remove();
15
+ }
16
+ //#endregion
17
+ module.exports = removeElement;
@@ -0,0 +1,14 @@
1
+ //#region src/dom/removeElement/index.d.ts
2
+ /**
3
+ * 安全地移除元素
4
+ *
5
+ * @param el - 要移除的 DOM 元素
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeElement from '@tanwan/utils/removeElement'
10
+ * removeElement(document.getElementById('banner'))
11
+ * ```
12
+ */
13
+ declare function removeElement(el: Element): void;
14
+ export = removeElement;
@@ -0,0 +1,15 @@
1
+ //#region src/dom/removeElement/index.d.ts
2
+ /**
3
+ * 安全地移除元素
4
+ *
5
+ * @param el - 要移除的 DOM 元素
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeElement from '@tanwan/utils/removeElement'
10
+ * removeElement(document.getElementById('banner'))
11
+ * ```
12
+ */
13
+ declare function removeElement(el: Element): void;
14
+ //#endregion
15
+ export { removeElement as default };
@@ -0,0 +1,17 @@
1
+ //#region src/dom/removeElement/index.ts
2
+ /**
3
+ * 安全地移除元素
4
+ *
5
+ * @param el - 要移除的 DOM 元素
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeElement from '@tanwan/utils/removeElement'
10
+ * removeElement(document.getElementById('banner'))
11
+ * ```
12
+ */
13
+ function removeElement(el) {
14
+ el.remove();
15
+ }
16
+ //#endregion
17
+ export { removeElement as default };
@@ -0,0 +1,19 @@
1
+ //#region src/storage/removeStorage/index.ts
2
+ /**
3
+ * 安全地从 localStorage 删除指定键
4
+ *
5
+ * @param key - 存储键名
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeStorage from '@tanwan/utils/removeStorage'
10
+ * removeStorage('user')
11
+ * ```
12
+ */
13
+ function removeStorage(key) {
14
+ try {
15
+ localStorage.removeItem(key);
16
+ } catch {}
17
+ }
18
+ //#endregion
19
+ module.exports = removeStorage;
@@ -0,0 +1,14 @@
1
+ //#region src/storage/removeStorage/index.d.ts
2
+ /**
3
+ * 安全地从 localStorage 删除指定键
4
+ *
5
+ * @param key - 存储键名
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeStorage from '@tanwan/utils/removeStorage'
10
+ * removeStorage('user')
11
+ * ```
12
+ */
13
+ declare function removeStorage(key: string): void;
14
+ export = removeStorage;
@@ -0,0 +1,15 @@
1
+ //#region src/storage/removeStorage/index.d.ts
2
+ /**
3
+ * 安全地从 localStorage 删除指定键
4
+ *
5
+ * @param key - 存储键名
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeStorage from '@tanwan/utils/removeStorage'
10
+ * removeStorage('user')
11
+ * ```
12
+ */
13
+ declare function removeStorage(key: string): void;
14
+ //#endregion
15
+ export { removeStorage as default };
@@ -0,0 +1,19 @@
1
+ //#region src/storage/removeStorage/index.ts
2
+ /**
3
+ * 安全地从 localStorage 删除指定键
4
+ *
5
+ * @param key - 存储键名
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import removeStorage from '@tanwan/utils/removeStorage'
10
+ * removeStorage('user')
11
+ * ```
12
+ */
13
+ function removeStorage(key) {
14
+ try {
15
+ localStorage.removeItem(key);
16
+ } catch {}
17
+ }
18
+ //#endregion
19
+ export { removeStorage as default };
package/dist/retry.cjs ADDED
@@ -0,0 +1,27 @@
1
+ //#region src/business/retry/index.ts
2
+ /**
3
+ * 异步函数失败自动重试
4
+ *
5
+ * @param fn - 返回 Promise 的函数
6
+ * @param maxRetries - 最大重试次数,默认 3
7
+ * @param delayMs - 每次重试间隔(ms),默认 1000
8
+ * @returns 执行结果
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import retry from '@tanwan/utils/retry'
13
+ * const data = await retry(() => fetch('/api/data').then(r => r.json()), 3, 1000)
14
+ * ```
15
+ */
16
+ async function retry(fn, maxRetries = 3, delayMs = 1e3) {
17
+ let lastError;
18
+ for (let attempt = 0; attempt <= maxRetries; attempt++) try {
19
+ return await fn();
20
+ } catch (error) {
21
+ lastError = error;
22
+ if (attempt < maxRetries) await new Promise((resolve) => setTimeout(resolve, delayMs));
23
+ }
24
+ throw lastError;
25
+ }
26
+ //#endregion
27
+ module.exports = retry;
@@ -0,0 +1,17 @@
1
+ //#region src/business/retry/index.d.ts
2
+ /**
3
+ * 异步函数失败自动重试
4
+ *
5
+ * @param fn - 返回 Promise 的函数
6
+ * @param maxRetries - 最大重试次数,默认 3
7
+ * @param delayMs - 每次重试间隔(ms),默认 1000
8
+ * @returns 执行结果
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import retry from '@tanwan/utils/retry'
13
+ * const data = await retry(() => fetch('/api/data').then(r => r.json()), 3, 1000)
14
+ * ```
15
+ */
16
+ declare function retry<T>(fn: () => Promise<T>, maxRetries?: number, delayMs?: number): Promise<T>;
17
+ export = retry;
@@ -0,0 +1,18 @@
1
+ //#region src/business/retry/index.d.ts
2
+ /**
3
+ * 异步函数失败自动重试
4
+ *
5
+ * @param fn - 返回 Promise 的函数
6
+ * @param maxRetries - 最大重试次数,默认 3
7
+ * @param delayMs - 每次重试间隔(ms),默认 1000
8
+ * @returns 执行结果
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import retry from '@tanwan/utils/retry'
13
+ * const data = await retry(() => fetch('/api/data').then(r => r.json()), 3, 1000)
14
+ * ```
15
+ */
16
+ declare function retry<T>(fn: () => Promise<T>, maxRetries?: number, delayMs?: number): Promise<T>;
17
+ //#endregion
18
+ export { retry as default };
package/dist/retry.js ADDED
@@ -0,0 +1,27 @@
1
+ //#region src/business/retry/index.ts
2
+ /**
3
+ * 异步函数失败自动重试
4
+ *
5
+ * @param fn - 返回 Promise 的函数
6
+ * @param maxRetries - 最大重试次数,默认 3
7
+ * @param delayMs - 每次重试间隔(ms),默认 1000
8
+ * @returns 执行结果
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import retry from '@tanwan/utils/retry'
13
+ * const data = await retry(() => fetch('/api/data').then(r => r.json()), 3, 1000)
14
+ * ```
15
+ */
16
+ async function retry(fn, maxRetries = 3, delayMs = 1e3) {
17
+ let lastError;
18
+ for (let attempt = 0; attempt <= maxRetries; attempt++) try {
19
+ return await fn();
20
+ } catch (error) {
21
+ lastError = error;
22
+ if (attempt < maxRetries) await new Promise((resolve) => setTimeout(resolve, delayMs));
23
+ }
24
+ throw lastError;
25
+ }
26
+ //#endregion
27
+ export { retry as default };
@@ -0,0 +1,20 @@
1
+ //#region src/array/sample/index.ts
2
+ /**
3
+ * 从数组中随机取一个元素
4
+ *
5
+ * @param arr - 源数组
6
+ * @returns 随机元素,数组为空时返回 `undefined`
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import sample from '@tanwan/utils/sample'
11
+ * sample([1, 2, 3, 4]) // 可能返回 2
12
+ * sample([]) // undefined
13
+ * ```
14
+ */
15
+ function sample(arr) {
16
+ if (arr.length === 0) return void 0;
17
+ return arr[Math.floor(Math.random() * arr.length)];
18
+ }
19
+ //#endregion
20
+ module.exports = sample;
@@ -0,0 +1,16 @@
1
+ //#region src/array/sample/index.d.ts
2
+ /**
3
+ * 从数组中随机取一个元素
4
+ *
5
+ * @param arr - 源数组
6
+ * @returns 随机元素,数组为空时返回 `undefined`
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import sample from '@tanwan/utils/sample'
11
+ * sample([1, 2, 3, 4]) // 可能返回 2
12
+ * sample([]) // undefined
13
+ * ```
14
+ */
15
+ declare function sample<T>(arr: T[]): T | undefined;
16
+ export = sample;
@@ -0,0 +1,17 @@
1
+ //#region src/array/sample/index.d.ts
2
+ /**
3
+ * 从数组中随机取一个元素
4
+ *
5
+ * @param arr - 源数组
6
+ * @returns 随机元素,数组为空时返回 `undefined`
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import sample from '@tanwan/utils/sample'
11
+ * sample([1, 2, 3, 4]) // 可能返回 2
12
+ * sample([]) // undefined
13
+ * ```
14
+ */
15
+ declare function sample<T>(arr: T[]): T | undefined;
16
+ //#endregion
17
+ export { sample as default };
package/dist/sample.js ADDED
@@ -0,0 +1,20 @@
1
+ //#region src/array/sample/index.ts
2
+ /**
3
+ * 从数组中随机取一个元素
4
+ *
5
+ * @param arr - 源数组
6
+ * @returns 随机元素,数组为空时返回 `undefined`
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import sample from '@tanwan/utils/sample'
11
+ * sample([1, 2, 3, 4]) // 可能返回 2
12
+ * sample([]) // undefined
13
+ * ```
14
+ */
15
+ function sample(arr) {
16
+ if (arr.length === 0) return void 0;
17
+ return arr[Math.floor(Math.random() * arr.length)];
18
+ }
19
+ //#endregion
20
+ export { sample as default };