@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/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # @tanwan/utils
2
+
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 扁平化导出路径:简化 import 路径从 `@tanwan/utils/array/chunk` 到 `@tanwan/utils/chunk`。
8
+
9
+ ## 1.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 新增 9 个实用工具函数:isEmpty (base), pick/omit (object), range/groupBy (array), uuid (string), delay (function), parseQueryString/stringifyQueryString (url)
14
+
15
+ ## 1.0.0
16
+
17
+ ### Major Changes
18
+
19
+ - 初始化第一波版本
@@ -0,0 +1,19 @@
1
+ //#region src/dom/addClass/index.ts
2
+ /**
3
+ * 给元素添加 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要添加的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import addClass from '@tanwan/utils/addClass'
11
+ * addClass(el, 'active')
12
+ * addClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ function addClass(el, className) {
16
+ el.classList.add(...className.split(/\s+/).filter(Boolean));
17
+ }
18
+ //#endregion
19
+ module.exports = addClass;
@@ -0,0 +1,16 @@
1
+ //#region src/dom/addClass/index.d.ts
2
+ /**
3
+ * 给元素添加 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要添加的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import addClass from '@tanwan/utils/addClass'
11
+ * addClass(el, 'active')
12
+ * addClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ declare function addClass(el: Element, className: string): void;
16
+ export = addClass;
@@ -0,0 +1,17 @@
1
+ //#region src/dom/addClass/index.d.ts
2
+ /**
3
+ * 给元素添加 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要添加的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import addClass from '@tanwan/utils/addClass'
11
+ * addClass(el, 'active')
12
+ * addClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ declare function addClass(el: Element, className: string): void;
16
+ //#endregion
17
+ export { addClass as default };
@@ -0,0 +1,19 @@
1
+ //#region src/dom/addClass/index.ts
2
+ /**
3
+ * 给元素添加 CSS class
4
+ *
5
+ * @param el - DOM 元素
6
+ * @param className - 要添加的 class(支持空格分隔多个)
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import addClass from '@tanwan/utils/addClass'
11
+ * addClass(el, 'active')
12
+ * addClass(el, 'foo bar')
13
+ * ```
14
+ */
15
+ function addClass(el, className) {
16
+ el.classList.add(...className.split(/\s+/).filter(Boolean));
17
+ }
18
+ //#endregion
19
+ export { addClass as default };
@@ -3,5 +3,4 @@
3
3
  * 将字符串转换为驼峰命名
4
4
  */
5
5
  declare function camelCase(str: string, capital?: boolean): string;
6
- export = camelCase;
7
- //# sourceMappingURL=camelCase.d.cts.map
6
+ export = camelCase;
@@ -4,5 +4,4 @@
4
4
  */
5
5
  declare function camelCase(str: string, capital?: boolean): string;
6
6
  //#endregion
7
- export { camelCase as default };
8
- //# sourceMappingURL=camelCase.d.ts.map
7
+ export { camelCase as default };
@@ -9,5 +9,3 @@ function camelCase(str, capital = false) {
9
9
  }
10
10
  //#endregion
11
11
  export { camelCase as default };
12
-
13
- //# sourceMappingURL=camelCase.js.map
@@ -9,5 +9,4 @@
9
9
  * ```
10
10
  */
11
11
  declare function capitalize(str: string): string;
12
- export = capitalize;
13
- //# sourceMappingURL=capitalize.d.cts.map
12
+ export = capitalize;
@@ -10,5 +10,4 @@
10
10
  */
11
11
  declare function capitalize(str: string): string;
12
12
  //#endregion
13
- export { capitalize as default };
14
- //# sourceMappingURL=capitalize.d.ts.map
13
+ export { capitalize as default };
@@ -14,5 +14,3 @@ function capitalize(str) {
14
14
  }
15
15
  //#endregion
16
16
  export { capitalize as default };
17
-
18
- //# sourceMappingURL=capitalize.js.map
@@ -9,5 +9,4 @@
9
9
  * ```
10
10
  */
11
11
  declare function chunk<T>(arr: T[], size: number): T[][];
12
- export = chunk;
13
- //# sourceMappingURL=chunk.d.cts.map
12
+ export = chunk;
@@ -10,5 +10,4 @@
10
10
  */
11
11
  declare function chunk<T>(arr: T[], size: number): T[][];
12
12
  //#endregion
13
- export { chunk as default };
14
- //# sourceMappingURL=chunk.d.ts.map
13
+ export { chunk as default };
@@ -15,5 +15,3 @@ function chunk(arr, size) {
15
15
  }
16
16
  //#endregion
17
17
  export { chunk as default };
18
-
19
- //# sourceMappingURL=chunk.js.map
@@ -10,5 +10,4 @@
10
10
  * ```
11
11
  */
12
12
  declare function clamp(value: number, min: number, max: number): number;
13
- export = clamp;
14
- //# sourceMappingURL=clamp.d.cts.map
13
+ export = clamp;
@@ -11,5 +11,4 @@
11
11
  */
12
12
  declare function clamp(value: number, min: number, max: number): number;
13
13
  //#endregion
14
- export { clamp as default };
15
- //# sourceMappingURL=clamp.d.ts.map
14
+ export { clamp as default };
@@ -14,5 +14,3 @@ function clamp(value, min, max) {
14
14
  }
15
15
  //#endregion
16
16
  export { clamp as default };
17
-
18
- //# sourceMappingURL=clamp.js.map
@@ -0,0 +1,56 @@
1
+ //#region src/business/convertCurrencyToChinese/index.ts
2
+ /**
3
+ * 金额转为中文大写
4
+ *
5
+ * @param amount - 金额数值
6
+ * @returns 中文大写金额字符串
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
11
+ * convertCurrencyToChinese(1234.56)
12
+ * // '壹仟贰佰叁拾肆元伍角陆分'
13
+ * convertCurrencyToChinese(0)
14
+ * // '零元整'
15
+ * ```
16
+ */
17
+ function convertCurrencyToChinese(amount) {
18
+ if (amount === 0) return "零元整";
19
+ const digits = "零壹贰叁肆伍陆柒捌玖";
20
+ const units = [
21
+ "",
22
+ "拾",
23
+ "佰",
24
+ "仟"
25
+ ];
26
+ const bigUnits = [
27
+ "",
28
+ "万",
29
+ "亿"
30
+ ];
31
+ const [intPart, decimalPart] = amount.toFixed(2).split(".");
32
+ const intLen = intPart.length;
33
+ let result = "";
34
+ for (let i = 0; i < intLen; i++) {
35
+ const digit = Number.parseInt(intPart[i]);
36
+ const pos = intLen - 1 - i;
37
+ const unitIdx = pos % 4;
38
+ const bigIdx = Math.floor(pos / 4);
39
+ if (digit !== 0) result += digits[digit] + units[unitIdx];
40
+ else if (i < intLen - 1 && intPart[i + 1] !== "0") result += digits[0];
41
+ if (unitIdx === 0 && bigIdx > 0) {
42
+ if (intPart.substring(i + 1).replace(/0+$/, "").length > 0) result += bigUnits[bigIdx];
43
+ }
44
+ }
45
+ result += "元";
46
+ const jiao = Number.parseInt(decimalPart[0]);
47
+ const fen = Number.parseInt(decimalPart[1]);
48
+ if (jiao === 0 && fen === 0) result += "整";
49
+ else {
50
+ if (jiao > 0) result += digits[jiao] + "角";
51
+ if (fen > 0) result += digits[fen] + "分";
52
+ }
53
+ return result;
54
+ }
55
+ //#endregion
56
+ module.exports = convertCurrencyToChinese;
@@ -0,0 +1,18 @@
1
+ //#region src/business/convertCurrencyToChinese/index.d.ts
2
+ /**
3
+ * 金额转为中文大写
4
+ *
5
+ * @param amount - 金额数值
6
+ * @returns 中文大写金额字符串
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
11
+ * convertCurrencyToChinese(1234.56)
12
+ * // '壹仟贰佰叁拾肆元伍角陆分'
13
+ * convertCurrencyToChinese(0)
14
+ * // '零元整'
15
+ * ```
16
+ */
17
+ declare function convertCurrencyToChinese(amount: number): string;
18
+ export = convertCurrencyToChinese;
@@ -0,0 +1,19 @@
1
+ //#region src/business/convertCurrencyToChinese/index.d.ts
2
+ /**
3
+ * 金额转为中文大写
4
+ *
5
+ * @param amount - 金额数值
6
+ * @returns 中文大写金额字符串
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
11
+ * convertCurrencyToChinese(1234.56)
12
+ * // '壹仟贰佰叁拾肆元伍角陆分'
13
+ * convertCurrencyToChinese(0)
14
+ * // '零元整'
15
+ * ```
16
+ */
17
+ declare function convertCurrencyToChinese(amount: number): string;
18
+ //#endregion
19
+ export { convertCurrencyToChinese as default };
@@ -0,0 +1,56 @@
1
+ //#region src/business/convertCurrencyToChinese/index.ts
2
+ /**
3
+ * 金额转为中文大写
4
+ *
5
+ * @param amount - 金额数值
6
+ * @returns 中文大写金额字符串
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
11
+ * convertCurrencyToChinese(1234.56)
12
+ * // '壹仟贰佰叁拾肆元伍角陆分'
13
+ * convertCurrencyToChinese(0)
14
+ * // '零元整'
15
+ * ```
16
+ */
17
+ function convertCurrencyToChinese(amount) {
18
+ if (amount === 0) return "零元整";
19
+ const digits = "零壹贰叁肆伍陆柒捌玖";
20
+ const units = [
21
+ "",
22
+ "拾",
23
+ "佰",
24
+ "仟"
25
+ ];
26
+ const bigUnits = [
27
+ "",
28
+ "万",
29
+ "亿"
30
+ ];
31
+ const [intPart, decimalPart] = amount.toFixed(2).split(".");
32
+ const intLen = intPart.length;
33
+ let result = "";
34
+ for (let i = 0; i < intLen; i++) {
35
+ const digit = Number.parseInt(intPart[i]);
36
+ const pos = intLen - 1 - i;
37
+ const unitIdx = pos % 4;
38
+ const bigIdx = Math.floor(pos / 4);
39
+ if (digit !== 0) result += digits[digit] + units[unitIdx];
40
+ else if (i < intLen - 1 && intPart[i + 1] !== "0") result += digits[0];
41
+ if (unitIdx === 0 && bigIdx > 0) {
42
+ if (intPart.substring(i + 1).replace(/0+$/, "").length > 0) result += bigUnits[bigIdx];
43
+ }
44
+ }
45
+ result += "元";
46
+ const jiao = Number.parseInt(decimalPart[0]);
47
+ const fen = Number.parseInt(decimalPart[1]);
48
+ if (jiao === 0 && fen === 0) result += "整";
49
+ else {
50
+ if (jiao > 0) result += digits[jiao] + "角";
51
+ if (fen > 0) result += digits[fen] + "分";
52
+ }
53
+ return result;
54
+ }
55
+ //#endregion
56
+ export { convertCurrencyToChinese as default };
@@ -0,0 +1,38 @@
1
+ //#region src/business/copyToClipboard/index.ts
2
+ /**
3
+ * 复制文本到剪贴板
4
+ *
5
+ * 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
6
+ *
7
+ * @param text - 要复制的文本
8
+ * @returns 是否复制成功
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import copyToClipboard from '@tanwan/utils/copyToClipboard'
13
+ * await copyToClipboard('Hello World')
14
+ * ```
15
+ */
16
+ async function copyToClipboard(text) {
17
+ try {
18
+ if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
19
+ await navigator.clipboard.writeText(text);
20
+ return true;
21
+ }
22
+ } catch {}
23
+ const textarea = document.createElement("textarea");
24
+ textarea.value = text;
25
+ textarea.style.position = "fixed";
26
+ textarea.style.opacity = "0";
27
+ document.body.appendChild(textarea);
28
+ textarea.select();
29
+ try {
30
+ return document.execCommand("copy");
31
+ } catch {
32
+ return false;
33
+ } finally {
34
+ document.body.removeChild(textarea);
35
+ }
36
+ }
37
+ //#endregion
38
+ module.exports = copyToClipboard;
@@ -0,0 +1,17 @@
1
+ //#region src/business/copyToClipboard/index.d.ts
2
+ /**
3
+ * 复制文本到剪贴板
4
+ *
5
+ * 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
6
+ *
7
+ * @param text - 要复制的文本
8
+ * @returns 是否复制成功
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import copyToClipboard from '@tanwan/utils/copyToClipboard'
13
+ * await copyToClipboard('Hello World')
14
+ * ```
15
+ */
16
+ declare function copyToClipboard(text: string): Promise<boolean>;
17
+ export = copyToClipboard;
@@ -0,0 +1,18 @@
1
+ //#region src/business/copyToClipboard/index.d.ts
2
+ /**
3
+ * 复制文本到剪贴板
4
+ *
5
+ * 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
6
+ *
7
+ * @param text - 要复制的文本
8
+ * @returns 是否复制成功
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import copyToClipboard from '@tanwan/utils/copyToClipboard'
13
+ * await copyToClipboard('Hello World')
14
+ * ```
15
+ */
16
+ declare function copyToClipboard(text: string): Promise<boolean>;
17
+ //#endregion
18
+ export { copyToClipboard as default };
@@ -0,0 +1,38 @@
1
+ //#region src/business/copyToClipboard/index.ts
2
+ /**
3
+ * 复制文本到剪贴板
4
+ *
5
+ * 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
6
+ *
7
+ * @param text - 要复制的文本
8
+ * @returns 是否复制成功
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import copyToClipboard from '@tanwan/utils/copyToClipboard'
13
+ * await copyToClipboard('Hello World')
14
+ * ```
15
+ */
16
+ async function copyToClipboard(text) {
17
+ try {
18
+ if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
19
+ await navigator.clipboard.writeText(text);
20
+ return true;
21
+ }
22
+ } catch {}
23
+ const textarea = document.createElement("textarea");
24
+ textarea.value = text;
25
+ textarea.style.position = "fixed";
26
+ textarea.style.opacity = "0";
27
+ document.body.appendChild(textarea);
28
+ textarea.select();
29
+ try {
30
+ return document.execCommand("copy");
31
+ } catch {
32
+ return false;
33
+ } finally {
34
+ document.body.removeChild(textarea);
35
+ }
36
+ }
37
+ //#endregion
38
+ export { copyToClipboard as default };
@@ -0,0 +1,27 @@
1
+ //#region src/dom/createElement/index.ts
2
+ /**
3
+ * 快捷创建元素并设置属性
4
+ *
5
+ * @param tag - HTML 标签名
6
+ * @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
7
+ * @param children - 子节点(文本、元素或元素数组)
8
+ * @returns 创建的 DOM 元素
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import createElement from '@tanwan/utils/createElement'
13
+ * createElement('div', { class: 'card' }, 'Hello')
14
+ * createElement('ul', { id: 'list' },
15
+ * createElement('li', {}, 'Item 1'),
16
+ * createElement('li', {}, 'Item 2'),
17
+ * )
18
+ * ```
19
+ */
20
+ function createElement(tag, attrs = {}, ...children) {
21
+ const el = document.createElement(tag);
22
+ for (const key of Object.keys(attrs)) el.setAttribute(key, attrs[key]);
23
+ for (const child of children) el.appendChild(typeof child === "string" ? document.createTextNode(child) : child);
24
+ return el;
25
+ }
26
+ //#endregion
27
+ module.exports = createElement;
@@ -0,0 +1,21 @@
1
+ //#region src/dom/createElement/index.d.ts
2
+ /**
3
+ * 快捷创建元素并设置属性
4
+ *
5
+ * @param tag - HTML 标签名
6
+ * @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
7
+ * @param children - 子节点(文本、元素或元素数组)
8
+ * @returns 创建的 DOM 元素
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import createElement from '@tanwan/utils/createElement'
13
+ * createElement('div', { class: 'card' }, 'Hello')
14
+ * createElement('ul', { id: 'list' },
15
+ * createElement('li', {}, 'Item 1'),
16
+ * createElement('li', {}, 'Item 2'),
17
+ * )
18
+ * ```
19
+ */
20
+ declare function createElement<K extends keyof HTMLElementTagNameMap>(tag: K, attrs?: Record<string, string>, ...children: (string | Node)[]): HTMLElementTagNameMap[K];
21
+ export = createElement;
@@ -0,0 +1,22 @@
1
+ //#region src/dom/createElement/index.d.ts
2
+ /**
3
+ * 快捷创建元素并设置属性
4
+ *
5
+ * @param tag - HTML 标签名
6
+ * @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
7
+ * @param children - 子节点(文本、元素或元素数组)
8
+ * @returns 创建的 DOM 元素
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import createElement from '@tanwan/utils/createElement'
13
+ * createElement('div', { class: 'card' }, 'Hello')
14
+ * createElement('ul', { id: 'list' },
15
+ * createElement('li', {}, 'Item 1'),
16
+ * createElement('li', {}, 'Item 2'),
17
+ * )
18
+ * ```
19
+ */
20
+ declare function createElement<K extends keyof HTMLElementTagNameMap>(tag: K, attrs?: Record<string, string>, ...children: (string | Node)[]): HTMLElementTagNameMap[K];
21
+ //#endregion
22
+ export { createElement as default };
@@ -0,0 +1,27 @@
1
+ //#region src/dom/createElement/index.ts
2
+ /**
3
+ * 快捷创建元素并设置属性
4
+ *
5
+ * @param tag - HTML 标签名
6
+ * @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
7
+ * @param children - 子节点(文本、元素或元素数组)
8
+ * @returns 创建的 DOM 元素
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import createElement from '@tanwan/utils/createElement'
13
+ * createElement('div', { class: 'card' }, 'Hello')
14
+ * createElement('ul', { id: 'list' },
15
+ * createElement('li', {}, 'Item 1'),
16
+ * createElement('li', {}, 'Item 2'),
17
+ * )
18
+ * ```
19
+ */
20
+ function createElement(tag, attrs = {}, ...children) {
21
+ const el = document.createElement(tag);
22
+ for (const key of Object.keys(attrs)) el.setAttribute(key, attrs[key]);
23
+ for (const child of children) el.appendChild(typeof child === "string" ? document.createTextNode(child) : child);
24
+ return el;
25
+ }
26
+ //#endregion
27
+ export { createElement as default };
@@ -10,5 +10,4 @@
10
10
  * ```
11
11
  */
12
12
  declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate?: boolean): (...args: Parameters<T>) => void;
13
- export = debounce;
14
- //# sourceMappingURL=debounce.d.cts.map
13
+ export = debounce;
@@ -11,5 +11,4 @@
11
11
  */
12
12
  declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate?: boolean): (...args: Parameters<T>) => void;
13
13
  //#endregion
14
- export { debounce as default };
15
- //# sourceMappingURL=debounce.d.ts.map
14
+ export { debounce as default };
@@ -27,5 +27,3 @@ function debounce(func, wait, immediate = false) {
27
27
  }
28
28
  //#endregion
29
29
  export { debounce as default };
30
-
31
- //# sourceMappingURL=debounce.js.map
@@ -0,0 +1,34 @@
1
+ //#region src/business/debounceSubmit/index.ts
2
+ /**
3
+ * 包装异步函数,防止重复提交
4
+ *
5
+ * 在函数执行期间,后续调用会被忽略直到第一次调用完成
6
+ *
7
+ * @param fn - 异步提交函数
8
+ * @returns 包装后的函数
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import debounceSubmit from '@tanwan/utils/debounceSubmit'
13
+ * const submit = debounceSubmit(async (data: FormData) => {
14
+ * await fetch('/api/submit', { method: 'POST', body: data })
15
+ * })
16
+ *
17
+ * await submit(formData) // 第一次执行
18
+ * await submit(formData) // 忽略(上一次还在执行中)
19
+ * ```
20
+ */
21
+ function debounceSubmit(fn) {
22
+ let pending = false;
23
+ return (async (...args) => {
24
+ if (pending) return;
25
+ pending = true;
26
+ try {
27
+ return await fn(...args);
28
+ } finally {
29
+ pending = false;
30
+ }
31
+ });
32
+ }
33
+ //#endregion
34
+ module.exports = debounceSubmit;
@@ -0,0 +1,22 @@
1
+ //#region src/business/debounceSubmit/index.d.ts
2
+ /**
3
+ * 包装异步函数,防止重复提交
4
+ *
5
+ * 在函数执行期间,后续调用会被忽略直到第一次调用完成
6
+ *
7
+ * @param fn - 异步提交函数
8
+ * @returns 包装后的函数
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import debounceSubmit from '@tanwan/utils/debounceSubmit'
13
+ * const submit = debounceSubmit(async (data: FormData) => {
14
+ * await fetch('/api/submit', { method: 'POST', body: data })
15
+ * })
16
+ *
17
+ * await submit(formData) // 第一次执行
18
+ * await submit(formData) // 忽略(上一次还在执行中)
19
+ * ```
20
+ */
21
+ declare function debounceSubmit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T): T;
22
+ export = debounceSubmit;
@@ -0,0 +1,23 @@
1
+ //#region src/business/debounceSubmit/index.d.ts
2
+ /**
3
+ * 包装异步函数,防止重复提交
4
+ *
5
+ * 在函数执行期间,后续调用会被忽略直到第一次调用完成
6
+ *
7
+ * @param fn - 异步提交函数
8
+ * @returns 包装后的函数
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import debounceSubmit from '@tanwan/utils/debounceSubmit'
13
+ * const submit = debounceSubmit(async (data: FormData) => {
14
+ * await fetch('/api/submit', { method: 'POST', body: data })
15
+ * })
16
+ *
17
+ * await submit(formData) // 第一次执行
18
+ * await submit(formData) // 忽略(上一次还在执行中)
19
+ * ```
20
+ */
21
+ declare function debounceSubmit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T): T;
22
+ //#endregion
23
+ export { debounceSubmit as default };