@vielzeug/toolkit 1.1.2 → 2.0.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 (764) hide show
  1. package/README.md +419 -0
  2. package/dist/array/chunk.cjs +2 -2
  3. package/dist/array/chunk.cjs.map +1 -1
  4. package/dist/array/chunk.d.ts +29 -0
  5. package/dist/array/chunk.d.ts.map +1 -0
  6. package/dist/array/chunk.js +22 -24
  7. package/dist/array/chunk.js.map +1 -1
  8. package/dist/array/contains.cjs +2 -2
  9. package/dist/array/contains.cjs.map +1 -1
  10. package/dist/array/contains.d.ts +19 -0
  11. package/dist/array/contains.d.ts.map +1 -0
  12. package/dist/array/contains.js +12 -9
  13. package/dist/array/contains.js.map +1 -1
  14. package/dist/array/fold.cjs +2 -0
  15. package/dist/array/fold.cjs.map +1 -0
  16. package/dist/array/fold.d.ts +21 -0
  17. package/dist/array/fold.d.ts.map +1 -0
  18. package/dist/array/fold.js +19 -0
  19. package/dist/array/fold.js.map +1 -0
  20. package/dist/array/group.cjs +2 -2
  21. package/dist/array/group.cjs.map +1 -1
  22. package/dist/array/group.d.ts +19 -0
  23. package/dist/array/group.d.ts.map +1 -0
  24. package/dist/array/group.js +18 -15
  25. package/dist/array/group.js.map +1 -1
  26. package/dist/array/index.d.ts +16 -0
  27. package/dist/array/index.d.ts.map +1 -0
  28. package/dist/array/keyBy.cjs +2 -0
  29. package/dist/array/keyBy.cjs.map +1 -0
  30. package/dist/array/keyBy.d.ts +20 -0
  31. package/dist/array/keyBy.d.ts.map +1 -0
  32. package/dist/array/keyBy.js +19 -0
  33. package/dist/array/keyBy.js.map +1 -0
  34. package/dist/array/list.cjs +2 -2
  35. package/dist/array/list.cjs.map +1 -1
  36. package/dist/array/list.d.ts +58 -0
  37. package/dist/array/list.d.ts.map +1 -0
  38. package/dist/array/list.js +103 -106
  39. package/dist/array/list.js.map +1 -1
  40. package/dist/array/pick.cjs +2 -2
  41. package/dist/array/pick.cjs.map +1 -1
  42. package/dist/array/pick.d.ts +19 -0
  43. package/dist/array/pick.d.ts.map +1 -0
  44. package/dist/array/pick.js +15 -14
  45. package/dist/array/pick.js.map +1 -1
  46. package/dist/array/remoteList.cjs +2 -2
  47. package/dist/array/remoteList.cjs.map +1 -1
  48. package/dist/array/remoteList.d.ts +64 -0
  49. package/dist/array/remoteList.d.ts.map +1 -0
  50. package/dist/array/remoteList.js +121 -122
  51. package/dist/array/remoteList.js.map +1 -1
  52. package/dist/array/replace.cjs +2 -0
  53. package/dist/array/replace.cjs.map +1 -0
  54. package/dist/array/replace.d.ts +20 -0
  55. package/dist/array/replace.d.ts.map +1 -0
  56. package/dist/array/replace.js +19 -0
  57. package/dist/array/replace.js.map +1 -0
  58. package/dist/array/rotate.cjs +2 -0
  59. package/dist/array/rotate.cjs.map +1 -0
  60. package/dist/array/rotate.d.ts +22 -0
  61. package/dist/array/rotate.d.ts.map +1 -0
  62. package/dist/array/rotate.js +19 -0
  63. package/dist/array/rotate.js.map +1 -0
  64. package/dist/array/search.cjs +2 -2
  65. package/dist/array/search.cjs.map +1 -1
  66. package/dist/array/search.d.ts +19 -0
  67. package/dist/array/search.d.ts.map +1 -0
  68. package/dist/array/search.js +23 -13
  69. package/dist/array/search.js.map +1 -1
  70. package/dist/array/select.cjs +2 -2
  71. package/dist/array/select.cjs.map +1 -1
  72. package/dist/array/select.d.ts +21 -0
  73. package/dist/array/select.d.ts.map +1 -0
  74. package/dist/array/select.js +16 -15
  75. package/dist/array/select.js.map +1 -1
  76. package/dist/array/sort.cjs +2 -2
  77. package/dist/array/sort.cjs.map +1 -1
  78. package/dist/array/sort.d.ts +26 -0
  79. package/dist/array/sort.d.ts.map +1 -0
  80. package/dist/array/sort.js +18 -12
  81. package/dist/array/sort.js.map +1 -1
  82. package/dist/array/toggle.cjs +2 -0
  83. package/dist/array/toggle.cjs.map +1 -0
  84. package/dist/array/toggle.d.ts +29 -0
  85. package/dist/array/toggle.d.ts.map +1 -0
  86. package/dist/array/toggle.js +9 -0
  87. package/dist/array/toggle.js.map +1 -0
  88. package/dist/array/uniq.cjs +2 -2
  89. package/dist/array/uniq.cjs.map +1 -1
  90. package/dist/array/uniq.d.ts +21 -0
  91. package/dist/array/uniq.d.ts.map +1 -0
  92. package/dist/array/uniq.js +15 -17
  93. package/dist/array/uniq.js.map +1 -1
  94. package/dist/async/attempt.cjs +2 -2
  95. package/dist/async/attempt.cjs.map +1 -1
  96. package/dist/async/attempt.d.ts +40 -0
  97. package/dist/async/attempt.d.ts.map +1 -0
  98. package/dist/async/attempt.js +19 -14
  99. package/dist/async/attempt.js.map +1 -1
  100. package/dist/async/defer.cjs +2 -2
  101. package/dist/async/defer.cjs.map +1 -1
  102. package/dist/async/defer.d.ts +23 -0
  103. package/dist/async/defer.d.ts.map +1 -0
  104. package/dist/async/defer.js +12 -9
  105. package/dist/async/defer.js.map +1 -1
  106. package/dist/async/index.d.ts +12 -0
  107. package/dist/async/index.d.ts.map +1 -0
  108. package/dist/async/parallel.cjs +2 -2
  109. package/dist/async/parallel.cjs.map +1 -1
  110. package/dist/async/parallel.d.ts +31 -0
  111. package/dist/async/parallel.d.ts.map +1 -0
  112. package/dist/async/parallel.js +26 -27
  113. package/dist/async/parallel.js.map +1 -1
  114. package/dist/async/pool.cjs +2 -2
  115. package/dist/async/pool.cjs.map +1 -1
  116. package/dist/async/pool.d.ts +21 -0
  117. package/dist/async/pool.d.ts.map +1 -0
  118. package/dist/async/pool.js +23 -21
  119. package/dist/async/pool.js.map +1 -1
  120. package/dist/async/predict.cjs +2 -2
  121. package/dist/async/predict.cjs.map +1 -1
  122. package/dist/async/predict.d.ts +24 -0
  123. package/dist/async/predict.d.ts.map +1 -0
  124. package/dist/async/predict.js +10 -12
  125. package/dist/async/predict.js.map +1 -1
  126. package/dist/async/queue.cjs +2 -2
  127. package/dist/async/queue.cjs.map +1 -1
  128. package/dist/async/queue.d.ts +43 -0
  129. package/dist/async/queue.d.ts.map +1 -0
  130. package/dist/async/queue.js +52 -56
  131. package/dist/async/queue.js.map +1 -1
  132. package/dist/async/race.cjs +2 -2
  133. package/dist/async/race.cjs.map +1 -1
  134. package/dist/async/race.d.ts +16 -0
  135. package/dist/async/race.d.ts.map +1 -0
  136. package/dist/async/race.js +8 -7
  137. package/dist/async/race.js.map +1 -1
  138. package/dist/async/retry.cjs +2 -2
  139. package/dist/async/retry.cjs.map +1 -1
  140. package/dist/async/retry.d.ts +32 -0
  141. package/dist/async/retry.d.ts.map +1 -0
  142. package/dist/async/retry.js +19 -24
  143. package/dist/async/retry.js.map +1 -1
  144. package/dist/async/scheduler.cjs +2 -0
  145. package/dist/async/scheduler.cjs.map +1 -0
  146. package/dist/async/scheduler.d.ts +51 -0
  147. package/dist/async/scheduler.d.ts.map +1 -0
  148. package/dist/async/scheduler.js +43 -0
  149. package/dist/async/scheduler.js.map +1 -0
  150. package/dist/async/sleep.cjs +2 -2
  151. package/dist/async/sleep.cjs.map +1 -1
  152. package/dist/async/sleep.d.ts +16 -0
  153. package/dist/async/sleep.d.ts.map +1 -0
  154. package/dist/async/sleep.js +11 -11
  155. package/dist/async/sleep.js.map +1 -1
  156. package/dist/async/waitFor.cjs +2 -2
  157. package/dist/async/waitFor.cjs.map +1 -1
  158. package/dist/async/waitFor.d.ts +33 -0
  159. package/dist/async/waitFor.d.ts.map +1 -0
  160. package/dist/async/waitFor.js +29 -36
  161. package/dist/async/waitFor.js.map +1 -1
  162. package/dist/date/expires.cjs +2 -2
  163. package/dist/date/expires.cjs.map +1 -1
  164. package/dist/date/expires.d.ts +15 -0
  165. package/dist/date/expires.d.ts.map +1 -0
  166. package/dist/date/expires.js +11 -10
  167. package/dist/date/expires.js.map +1 -1
  168. package/dist/date/index.d.ts +4 -0
  169. package/dist/date/index.d.ts.map +1 -0
  170. package/dist/date/interval.cjs +2 -2
  171. package/dist/date/interval.cjs.map +1 -1
  172. package/dist/date/interval.d.ts +25 -0
  173. package/dist/date/interval.d.ts.map +1 -0
  174. package/dist/date/interval.js +31 -37
  175. package/dist/date/interval.js.map +1 -1
  176. package/dist/date/timeDiff.cjs +2 -2
  177. package/dist/date/timeDiff.cjs.map +1 -1
  178. package/dist/date/timeDiff.d.ts +24 -0
  179. package/dist/date/timeDiff.d.ts.map +1 -0
  180. package/dist/date/timeDiff.js +58 -25
  181. package/dist/date/timeDiff.js.map +1 -1
  182. package/dist/function/assert.cjs +2 -3
  183. package/dist/function/assert.cjs.map +1 -1
  184. package/dist/function/assert.d.ts +38 -0
  185. package/dist/function/assert.d.ts.map +1 -0
  186. package/dist/function/assert.js +13 -11
  187. package/dist/function/assert.js.map +1 -1
  188. package/dist/function/assertParams.cjs +2 -2
  189. package/dist/function/assertParams.cjs.map +1 -1
  190. package/dist/function/assertParams.d.ts +24 -0
  191. package/dist/function/assertParams.d.ts.map +1 -0
  192. package/dist/function/assertParams.js +13 -12
  193. package/dist/function/assertParams.js.map +1 -1
  194. package/dist/function/compare.cjs +2 -2
  195. package/dist/function/compare.cjs.map +1 -1
  196. package/dist/function/compare.d.ts +23 -0
  197. package/dist/function/compare.d.ts.map +1 -0
  198. package/dist/function/compare.js +22 -21
  199. package/dist/function/compare.js.map +1 -1
  200. package/dist/function/compareBy.cjs +2 -2
  201. package/dist/function/compareBy.cjs.map +1 -1
  202. package/dist/function/compareBy.d.ts +24 -0
  203. package/dist/function/compareBy.d.ts.map +1 -0
  204. package/dist/function/compareBy.js +15 -14
  205. package/dist/function/compareBy.js.map +1 -1
  206. package/dist/function/compose.cjs +2 -2
  207. package/dist/function/compose.cjs.map +1 -1
  208. package/dist/function/compose.d.ts +22 -0
  209. package/dist/function/compose.d.ts.map +1 -0
  210. package/dist/function/compose.js +10 -13
  211. package/dist/function/compose.js.map +1 -1
  212. package/dist/function/curry.cjs +2 -2
  213. package/dist/function/curry.cjs.map +1 -1
  214. package/dist/function/curry.d.ts +21 -0
  215. package/dist/function/curry.d.ts.map +1 -0
  216. package/dist/function/curry.js +8 -7
  217. package/dist/function/curry.js.map +1 -1
  218. package/dist/function/debounce.cjs +2 -2
  219. package/dist/function/debounce.cjs.map +1 -1
  220. package/dist/function/debounce.d.ts +12 -0
  221. package/dist/function/debounce.d.ts.map +1 -0
  222. package/dist/function/debounce.js +34 -26
  223. package/dist/function/debounce.js.map +1 -1
  224. package/dist/function/fp.cjs +2 -2
  225. package/dist/function/fp.cjs.map +1 -1
  226. package/dist/function/fp.d.ts +24 -0
  227. package/dist/function/fp.d.ts.map +1 -0
  228. package/dist/function/fp.js +6 -10
  229. package/dist/function/fp.js.map +1 -1
  230. package/dist/function/index.d.ts +13 -0
  231. package/dist/function/index.d.ts.map +1 -0
  232. package/dist/function/memo.cjs +2 -2
  233. package/dist/function/memo.cjs.map +1 -1
  234. package/dist/function/memo.d.ts +30 -0
  235. package/dist/function/memo.d.ts.map +1 -0
  236. package/dist/function/memo.js +16 -24
  237. package/dist/function/memo.js.map +1 -1
  238. package/dist/function/once.cjs +2 -2
  239. package/dist/function/once.cjs.map +1 -1
  240. package/dist/function/once.d.ts +24 -0
  241. package/dist/function/once.d.ts.map +1 -0
  242. package/dist/function/once.js +10 -10
  243. package/dist/function/once.js.map +1 -1
  244. package/dist/function/pipe.cjs +2 -2
  245. package/dist/function/pipe.cjs.map +1 -1
  246. package/dist/function/pipe.d.ts +23 -0
  247. package/dist/function/pipe.d.ts.map +1 -0
  248. package/dist/function/pipe.js +10 -10
  249. package/dist/function/pipe.js.map +1 -1
  250. package/dist/function/throttle.cjs +2 -2
  251. package/dist/function/throttle.cjs.map +1 -1
  252. package/dist/function/throttle.d.ts +21 -0
  253. package/dist/function/throttle.d.ts.map +1 -0
  254. package/dist/function/throttle.js +45 -37
  255. package/dist/function/throttle.js.map +1 -1
  256. package/dist/index.cjs +1 -2
  257. package/dist/index.d.ts +77 -2813
  258. package/dist/index.d.ts.map +1 -0
  259. package/dist/index.js +75 -253
  260. package/dist/math/abs.cjs +2 -2
  261. package/dist/math/abs.cjs.map +1 -1
  262. package/dist/math/abs.d.ts +17 -0
  263. package/dist/math/abs.d.ts.map +1 -0
  264. package/dist/math/abs.js +7 -6
  265. package/dist/math/abs.js.map +1 -1
  266. package/dist/math/allocate.cjs +2 -2
  267. package/dist/math/allocate.cjs.map +1 -1
  268. package/dist/math/allocate.d.ts +24 -0
  269. package/dist/math/allocate.d.ts.map +1 -0
  270. package/dist/math/allocate.js +20 -28
  271. package/dist/math/allocate.js.map +1 -1
  272. package/dist/math/average.cjs +2 -2
  273. package/dist/math/average.cjs.map +1 -1
  274. package/dist/math/average.d.ts +16 -0
  275. package/dist/math/average.d.ts.map +1 -0
  276. package/dist/math/average.js +13 -24
  277. package/dist/math/average.js.map +1 -1
  278. package/dist/math/clamp.cjs +2 -2
  279. package/dist/math/clamp.cjs.map +1 -1
  280. package/dist/math/clamp.d.ts +18 -0
  281. package/dist/math/clamp.d.ts.map +1 -0
  282. package/dist/math/clamp.js +7 -6
  283. package/dist/math/clamp.js.map +1 -1
  284. package/dist/math/distribute.cjs +2 -2
  285. package/dist/math/distribute.cjs.map +1 -1
  286. package/dist/math/distribute.d.ts +24 -0
  287. package/dist/math/distribute.d.ts.map +1 -0
  288. package/dist/math/distribute.js +14 -17
  289. package/dist/math/distribute.js.map +1 -1
  290. package/dist/math/index.d.ts +14 -0
  291. package/dist/math/index.d.ts.map +1 -0
  292. package/dist/math/linspace.cjs +2 -0
  293. package/dist/math/linspace.cjs.map +1 -0
  294. package/dist/math/linspace.d.ts +19 -0
  295. package/dist/math/linspace.d.ts.map +1 -0
  296. package/dist/math/linspace.js +11 -0
  297. package/dist/math/linspace.js.map +1 -0
  298. package/dist/math/max.cjs +2 -2
  299. package/dist/math/max.cjs.map +1 -1
  300. package/dist/math/max.d.ts +23 -0
  301. package/dist/math/max.d.ts.map +1 -0
  302. package/dist/math/max.js +10 -11
  303. package/dist/math/max.js.map +1 -1
  304. package/dist/math/median.cjs +2 -2
  305. package/dist/math/median.cjs.map +1 -1
  306. package/dist/math/median.d.ts +17 -0
  307. package/dist/math/median.d.ts.map +1 -0
  308. package/dist/math/median.js +11 -10
  309. package/dist/math/median.js.map +1 -1
  310. package/dist/math/min.cjs +2 -2
  311. package/dist/math/min.cjs.map +1 -1
  312. package/dist/math/min.d.ts +23 -0
  313. package/dist/math/min.d.ts.map +1 -0
  314. package/dist/math/min.js +10 -11
  315. package/dist/math/min.js.map +1 -1
  316. package/dist/math/percent.cjs +2 -0
  317. package/dist/math/percent.cjs.map +1 -0
  318. package/dist/math/percent.d.ts +19 -0
  319. package/dist/math/percent.d.ts.map +1 -0
  320. package/dist/math/percent.js +8 -0
  321. package/dist/math/percent.js.map +1 -0
  322. package/dist/math/range.cjs +2 -2
  323. package/dist/math/range.cjs.map +1 -1
  324. package/dist/math/range.d.ts +23 -0
  325. package/dist/math/range.d.ts.map +1 -0
  326. package/dist/math/range.js +28 -17
  327. package/dist/math/range.js.map +1 -1
  328. package/dist/math/round.cjs +2 -2
  329. package/dist/math/round.cjs.map +1 -1
  330. package/dist/math/round.d.ts +21 -0
  331. package/dist/math/round.d.ts.map +1 -0
  332. package/dist/math/round.js +9 -8
  333. package/dist/math/round.js.map +1 -1
  334. package/dist/math/sum.cjs +2 -2
  335. package/dist/math/sum.cjs.map +1 -1
  336. package/dist/math/sum.d.ts +17 -0
  337. package/dist/math/sum.d.ts.map +1 -0
  338. package/dist/math/sum.js +11 -14
  339. package/dist/math/sum.js.map +1 -1
  340. package/dist/money/currency.cjs +2 -2
  341. package/dist/money/currency.cjs.map +1 -1
  342. package/dist/money/currency.d.ts +30 -0
  343. package/dist/money/currency.d.ts.map +1 -0
  344. package/dist/money/currency.js +19 -47
  345. package/dist/money/currency.js.map +1 -1
  346. package/dist/money/exchange.cjs +2 -2
  347. package/dist/money/exchange.cjs.map +1 -1
  348. package/dist/money/exchange.d.ts +29 -0
  349. package/dist/money/exchange.d.ts.map +1 -0
  350. package/dist/money/exchange.js +12 -12
  351. package/dist/money/exchange.js.map +1 -1
  352. package/dist/money/index.d.ts +4 -0
  353. package/dist/money/index.d.ts.map +1 -0
  354. package/dist/money/types.d.ts +9 -0
  355. package/dist/money/types.d.ts.map +1 -0
  356. package/dist/object/diff.cjs +2 -2
  357. package/dist/object/diff.cjs.map +1 -1
  358. package/dist/object/diff.d.ts +26 -0
  359. package/dist/object/diff.d.ts.map +1 -0
  360. package/dist/object/diff.js +19 -17
  361. package/dist/object/diff.js.map +1 -1
  362. package/dist/object/index.d.ts +9 -0
  363. package/dist/object/index.d.ts.map +1 -0
  364. package/dist/object/merge.cjs +2 -2
  365. package/dist/object/merge.cjs.map +1 -1
  366. package/dist/object/merge.d.ts +44 -0
  367. package/dist/object/merge.d.ts.map +1 -0
  368. package/dist/object/merge.js +27 -21
  369. package/dist/object/merge.js.map +1 -1
  370. package/dist/object/parseJSON.cjs +2 -2
  371. package/dist/object/parseJSON.cjs.map +1 -1
  372. package/dist/object/parseJSON.d.ts +32 -0
  373. package/dist/object/parseJSON.d.ts.map +1 -0
  374. package/dist/object/parseJSON.js +17 -18
  375. package/dist/object/parseJSON.js.map +1 -1
  376. package/dist/object/path.cjs +2 -2
  377. package/dist/object/path.cjs.map +1 -1
  378. package/dist/object/path.d.ts +32 -0
  379. package/dist/object/path.d.ts.map +1 -0
  380. package/dist/object/path.js +25 -23
  381. package/dist/object/path.js.map +1 -1
  382. package/dist/object/proxy.cjs +2 -0
  383. package/dist/object/proxy.cjs.map +1 -0
  384. package/dist/object/proxy.d.ts +30 -0
  385. package/dist/object/proxy.d.ts.map +1 -0
  386. package/dist/object/proxy.js +21 -0
  387. package/dist/object/proxy.js.map +1 -0
  388. package/dist/object/prune.cjs +2 -0
  389. package/dist/object/prune.cjs.map +1 -0
  390. package/dist/object/prune.d.ts +21 -0
  391. package/dist/object/prune.d.ts.map +1 -0
  392. package/dist/object/prune.js +31 -0
  393. package/dist/object/prune.js.map +1 -0
  394. package/dist/object/seek.cjs +2 -2
  395. package/dist/object/seek.cjs.map +1 -1
  396. package/dist/object/seek.d.ts +2 -0
  397. package/dist/object/seek.d.ts.map +1 -0
  398. package/dist/object/seek.js +25 -12
  399. package/dist/object/seek.js.map +1 -1
  400. package/dist/object/stash.cjs +2 -0
  401. package/dist/object/stash.cjs.map +1 -0
  402. package/dist/object/stash.d.ts +45 -0
  403. package/dist/object/stash.d.ts.map +1 -0
  404. package/dist/object/stash.js +99 -0
  405. package/dist/object/stash.js.map +1 -0
  406. package/dist/random/draw.cjs +2 -2
  407. package/dist/random/draw.cjs.map +1 -1
  408. package/dist/random/draw.d.ts +16 -0
  409. package/dist/random/draw.d.ts.map +1 -0
  410. package/dist/random/draw.js +13 -10
  411. package/dist/random/draw.js.map +1 -1
  412. package/dist/random/index.d.ts +5 -0
  413. package/dist/random/index.d.ts.map +1 -0
  414. package/dist/random/random.cjs +2 -2
  415. package/dist/random/random.cjs.map +1 -1
  416. package/dist/random/random.d.ts +14 -0
  417. package/dist/random/random.d.ts.map +1 -0
  418. package/dist/random/random.js +16 -9
  419. package/dist/random/random.js.map +1 -1
  420. package/dist/random/shuffle.cjs +2 -2
  421. package/dist/random/shuffle.cjs.map +1 -1
  422. package/dist/random/shuffle.d.ts +17 -0
  423. package/dist/random/shuffle.d.ts.map +1 -0
  424. package/dist/random/shuffle.js +18 -14
  425. package/dist/random/shuffle.js.map +1 -1
  426. package/dist/random/uuid.cjs +2 -2
  427. package/dist/random/uuid.cjs.map +1 -1
  428. package/dist/random/uuid.d.ts +12 -0
  429. package/dist/random/uuid.d.ts.map +1 -0
  430. package/dist/random/uuid.js +7 -9
  431. package/dist/random/uuid.js.map +1 -1
  432. package/dist/string/_caseUtils.cjs +2 -2
  433. package/dist/string/_caseUtils.cjs.map +1 -1
  434. package/dist/string/_caseUtils.d.ts +13 -0
  435. package/dist/string/_caseUtils.d.ts.map +1 -0
  436. package/dist/string/_caseUtils.js +8 -8
  437. package/dist/string/_caseUtils.js.map +1 -1
  438. package/dist/string/camelCase.cjs +2 -2
  439. package/dist/string/camelCase.cjs.map +1 -1
  440. package/dist/string/camelCase.d.ts +14 -0
  441. package/dist/string/camelCase.d.ts.map +1 -0
  442. package/dist/string/camelCase.js +8 -7
  443. package/dist/string/camelCase.js.map +1 -1
  444. package/dist/string/index.d.ts +7 -0
  445. package/dist/string/index.d.ts.map +1 -0
  446. package/dist/string/kebabCase.cjs +2 -2
  447. package/dist/string/kebabCase.cjs.map +1 -1
  448. package/dist/string/kebabCase.d.ts +15 -0
  449. package/dist/string/kebabCase.d.ts.map +1 -0
  450. package/dist/string/kebabCase.js +8 -7
  451. package/dist/string/kebabCase.js.map +1 -1
  452. package/dist/string/pascalCase.cjs +2 -2
  453. package/dist/string/pascalCase.cjs.map +1 -1
  454. package/dist/string/pascalCase.d.ts +15 -0
  455. package/dist/string/pascalCase.d.ts.map +1 -0
  456. package/dist/string/pascalCase.js +8 -7
  457. package/dist/string/pascalCase.js.map +1 -1
  458. package/dist/string/similarity.cjs +2 -2
  459. package/dist/string/similarity.cjs.map +1 -1
  460. package/dist/string/similarity.d.ts +20 -0
  461. package/dist/string/similarity.d.ts.map +1 -0
  462. package/dist/string/similarity.js +20 -36
  463. package/dist/string/similarity.js.map +1 -1
  464. package/dist/string/snakeCase.cjs +2 -2
  465. package/dist/string/snakeCase.cjs.map +1 -1
  466. package/dist/string/snakeCase.d.ts +15 -0
  467. package/dist/string/snakeCase.d.ts.map +1 -0
  468. package/dist/string/snakeCase.js +8 -7
  469. package/dist/string/snakeCase.js.map +1 -1
  470. package/dist/string/truncate.cjs +2 -2
  471. package/dist/string/truncate.cjs.map +1 -1
  472. package/dist/string/truncate.d.ts +28 -0
  473. package/dist/string/truncate.d.ts.map +1 -0
  474. package/dist/string/truncate.js +20 -17
  475. package/dist/string/truncate.js.map +1 -1
  476. package/dist/toolkit.cjs +2 -0
  477. package/dist/toolkit.cjs.map +1 -0
  478. package/dist/toolkit.js +1523 -0
  479. package/dist/toolkit.js.map +1 -0
  480. package/dist/typed/index.d.ts +24 -0
  481. package/dist/typed/index.d.ts.map +1 -0
  482. package/dist/typed/is.cjs +2 -2
  483. package/dist/typed/is.cjs.map +1 -1
  484. package/dist/typed/is.d.ts +95 -0
  485. package/dist/typed/is.d.ts.map +1 -0
  486. package/dist/typed/is.js +54 -42
  487. package/dist/typed/is.js.map +1 -1
  488. package/dist/typed/isArray.cjs +2 -2
  489. package/dist/typed/isArray.cjs.map +1 -1
  490. package/dist/typed/isArray.d.ts +16 -0
  491. package/dist/typed/isArray.d.ts.map +1 -0
  492. package/dist/typed/isArray.js +8 -8
  493. package/dist/typed/isArray.js.map +1 -1
  494. package/dist/typed/isBoolean.cjs +2 -2
  495. package/dist/typed/isBoolean.cjs.map +1 -1
  496. package/dist/typed/isBoolean.d.ts +23 -0
  497. package/dist/typed/isBoolean.d.ts.map +1 -0
  498. package/dist/typed/isBoolean.js +7 -6
  499. package/dist/typed/isBoolean.js.map +1 -1
  500. package/dist/typed/isDate.cjs +2 -2
  501. package/dist/typed/isDate.cjs.map +1 -1
  502. package/dist/typed/isDate.d.ts +16 -0
  503. package/dist/typed/isDate.d.ts.map +1 -0
  504. package/dist/typed/isDate.js +7 -8
  505. package/dist/typed/isDate.js.map +1 -1
  506. package/dist/typed/isDefined.cjs +2 -2
  507. package/dist/typed/isDefined.cjs.map +1 -1
  508. package/dist/typed/isDefined.d.ts +19 -0
  509. package/dist/typed/isDefined.d.ts.map +1 -0
  510. package/dist/typed/isDefined.js +7 -6
  511. package/dist/typed/isDefined.js.map +1 -1
  512. package/dist/typed/isEmpty.cjs +2 -2
  513. package/dist/typed/isEmpty.cjs.map +1 -1
  514. package/dist/typed/isEmpty.d.ts +24 -0
  515. package/dist/typed/isEmpty.d.ts.map +1 -0
  516. package/dist/typed/isEmpty.js +8 -9
  517. package/dist/typed/isEmpty.js.map +1 -1
  518. package/dist/typed/isEqual.cjs +2 -2
  519. package/dist/typed/isEqual.cjs.map +1 -1
  520. package/dist/typed/isEqual.d.ts +24 -0
  521. package/dist/typed/isEqual.d.ts.map +1 -0
  522. package/dist/typed/isEqual.js +27 -28
  523. package/dist/typed/isEqual.js.map +1 -1
  524. package/dist/typed/isEven.cjs +2 -2
  525. package/dist/typed/isEven.cjs.map +1 -1
  526. package/dist/typed/isEven.d.ts +9 -0
  527. package/dist/typed/isEven.d.ts.map +1 -0
  528. package/dist/typed/isEven.js +7 -6
  529. package/dist/typed/isEven.js.map +1 -1
  530. package/dist/typed/isFunction.cjs +2 -2
  531. package/dist/typed/isFunction.cjs.map +1 -1
  532. package/dist/typed/isFunction.d.ts +16 -0
  533. package/dist/typed/isFunction.d.ts.map +1 -0
  534. package/dist/typed/isFunction.js +7 -8
  535. package/dist/typed/isFunction.js.map +1 -1
  536. package/dist/typed/isMatch.cjs +2 -2
  537. package/dist/typed/isMatch.cjs.map +1 -1
  538. package/dist/typed/isMatch.d.ts +23 -0
  539. package/dist/typed/isMatch.d.ts.map +1 -0
  540. package/dist/typed/isMatch.js +16 -18
  541. package/dist/typed/isMatch.js.map +1 -1
  542. package/dist/typed/isNegative.cjs +2 -2
  543. package/dist/typed/isNegative.cjs.map +1 -1
  544. package/dist/typed/isNegative.d.ts +26 -0
  545. package/dist/typed/isNegative.d.ts.map +1 -0
  546. package/dist/typed/isNegative.js +7 -6
  547. package/dist/typed/isNegative.js.map +1 -1
  548. package/dist/typed/isNil.cjs +2 -2
  549. package/dist/typed/isNil.cjs.map +1 -1
  550. package/dist/typed/isNil.d.ts +17 -0
  551. package/dist/typed/isNil.d.ts.map +1 -0
  552. package/dist/typed/isNil.js +7 -8
  553. package/dist/typed/isNil.js.map +1 -1
  554. package/dist/typed/isNumber.cjs +2 -2
  555. package/dist/typed/isNumber.cjs.map +1 -1
  556. package/dist/typed/isNumber.d.ts +16 -0
  557. package/dist/typed/isNumber.d.ts.map +1 -0
  558. package/dist/typed/isNumber.js +8 -8
  559. package/dist/typed/isNumber.js.map +1 -1
  560. package/dist/typed/isObject.cjs +2 -2
  561. package/dist/typed/isObject.cjs.map +1 -1
  562. package/dist/typed/isObject.d.ts +19 -0
  563. package/dist/typed/isObject.d.ts.map +1 -0
  564. package/dist/typed/isObject.js +8 -8
  565. package/dist/typed/isObject.js.map +1 -1
  566. package/dist/typed/isOdd.cjs +2 -2
  567. package/dist/typed/isOdd.cjs.map +1 -1
  568. package/dist/typed/isOdd.d.ts +9 -0
  569. package/dist/typed/isOdd.d.ts.map +1 -0
  570. package/dist/typed/isOdd.js +7 -6
  571. package/dist/typed/isOdd.js.map +1 -1
  572. package/dist/typed/isPositive.cjs +2 -2
  573. package/dist/typed/isPositive.cjs.map +1 -1
  574. package/dist/typed/isPositive.d.ts +26 -0
  575. package/dist/typed/isPositive.d.ts.map +1 -0
  576. package/dist/typed/isPositive.js +7 -6
  577. package/dist/typed/isPositive.js.map +1 -1
  578. package/dist/typed/isPrimitive.cjs +2 -2
  579. package/dist/typed/isPrimitive.cjs.map +1 -1
  580. package/dist/typed/isPrimitive.d.ts +18 -0
  581. package/dist/typed/isPrimitive.d.ts.map +1 -0
  582. package/dist/typed/isPrimitive.js +8 -9
  583. package/dist/typed/isPrimitive.js.map +1 -1
  584. package/dist/typed/isPromise.cjs +2 -2
  585. package/dist/typed/isPromise.cjs.map +1 -1
  586. package/dist/typed/isPromise.d.ts +17 -0
  587. package/dist/typed/isPromise.d.ts.map +1 -0
  588. package/dist/typed/isPromise.js +7 -9
  589. package/dist/typed/isPromise.js.map +1 -1
  590. package/dist/typed/isRegex.cjs +2 -2
  591. package/dist/typed/isRegex.cjs.map +1 -1
  592. package/dist/typed/isRegex.d.ts +21 -0
  593. package/dist/typed/isRegex.d.ts.map +1 -0
  594. package/dist/typed/isRegex.js +7 -6
  595. package/dist/typed/isRegex.js.map +1 -1
  596. package/dist/typed/isString.cjs +2 -2
  597. package/dist/typed/isString.cjs.map +1 -1
  598. package/dist/typed/isString.d.ts +16 -0
  599. package/dist/typed/isString.d.ts.map +1 -0
  600. package/dist/typed/isString.js +8 -8
  601. package/dist/typed/isString.js.map +1 -1
  602. package/dist/typed/isWithin.cjs +2 -2
  603. package/dist/typed/isWithin.cjs.map +1 -1
  604. package/dist/typed/isWithin.d.ts +20 -0
  605. package/dist/typed/isWithin.d.ts.map +1 -0
  606. package/dist/typed/isWithin.js +9 -9
  607. package/dist/typed/isWithin.js.map +1 -1
  608. package/dist/typed/isZero.cjs +2 -2
  609. package/dist/typed/isZero.cjs.map +1 -1
  610. package/dist/typed/isZero.d.ts +25 -0
  611. package/dist/typed/isZero.d.ts.map +1 -0
  612. package/dist/typed/isZero.js +7 -6
  613. package/dist/typed/isZero.js.map +1 -1
  614. package/dist/typed/typeOf.cjs +2 -2
  615. package/dist/typed/typeOf.cjs.map +1 -1
  616. package/dist/typed/typeOf.d.ts +30 -0
  617. package/dist/typed/typeOf.d.ts.map +1 -0
  618. package/dist/typed/typeOf.js +11 -13
  619. package/dist/typed/typeOf.js.map +1 -1
  620. package/dist/types.d.ts +9 -0
  621. package/dist/types.d.ts.map +1 -0
  622. package/package.json +77 -12
  623. package/dist/array/aggregate.cjs +0 -2
  624. package/dist/array/aggregate.cjs.map +0 -1
  625. package/dist/array/aggregate.js +0 -16
  626. package/dist/array/aggregate.js.map +0 -1
  627. package/dist/array/alternate.cjs +0 -2
  628. package/dist/array/alternate.cjs.map +0 -1
  629. package/dist/array/alternate.js +0 -9
  630. package/dist/array/alternate.js.map +0 -1
  631. package/dist/array/arrange.cjs +0 -2
  632. package/dist/array/arrange.cjs.map +0 -1
  633. package/dist/array/arrange.js +0 -6
  634. package/dist/array/arrange.js.map +0 -1
  635. package/dist/array/compact.cjs +0 -2
  636. package/dist/array/compact.cjs.map +0 -1
  637. package/dist/array/compact.js +0 -9
  638. package/dist/array/compact.js.map +0 -1
  639. package/dist/array/every.cjs +0 -2
  640. package/dist/array/every.cjs.map +0 -1
  641. package/dist/array/every.js +0 -14
  642. package/dist/array/every.js.map +0 -1
  643. package/dist/array/filter.cjs +0 -2
  644. package/dist/array/filter.cjs.map +0 -1
  645. package/dist/array/filter.js +0 -14
  646. package/dist/array/filter.js.map +0 -1
  647. package/dist/array/find.cjs +0 -2
  648. package/dist/array/find.cjs.map +0 -1
  649. package/dist/array/find.js +0 -14
  650. package/dist/array/find.js.map +0 -1
  651. package/dist/array/findIndex.cjs +0 -2
  652. package/dist/array/findIndex.cjs.map +0 -1
  653. package/dist/array/findIndex.js +0 -14
  654. package/dist/array/findIndex.js.map +0 -1
  655. package/dist/array/findLast.cjs +0 -2
  656. package/dist/array/findLast.cjs.map +0 -1
  657. package/dist/array/findLast.js +0 -14
  658. package/dist/array/findLast.js.map +0 -1
  659. package/dist/array/flatten.cjs +0 -2
  660. package/dist/array/flatten.cjs.map +0 -1
  661. package/dist/array/flatten.js +0 -7
  662. package/dist/array/flatten.js.map +0 -1
  663. package/dist/array/map.cjs +0 -2
  664. package/dist/array/map.cjs.map +0 -1
  665. package/dist/array/map.js +0 -18
  666. package/dist/array/map.js.map +0 -1
  667. package/dist/array/reduce.cjs +0 -2
  668. package/dist/array/reduce.cjs.map +0 -1
  669. package/dist/array/reduce.js +0 -16
  670. package/dist/array/reduce.js.map +0 -1
  671. package/dist/array/shift.cjs +0 -2
  672. package/dist/array/shift.cjs.map +0 -1
  673. package/dist/array/shift.js +0 -13
  674. package/dist/array/shift.js.map +0 -1
  675. package/dist/array/some.cjs +0 -2
  676. package/dist/array/some.cjs.map +0 -1
  677. package/dist/array/some.js +0 -14
  678. package/dist/array/some.js.map +0 -1
  679. package/dist/array/substitute.cjs +0 -2
  680. package/dist/array/substitute.cjs.map +0 -1
  681. package/dist/array/substitute.js +0 -13
  682. package/dist/array/substitute.js.map +0 -1
  683. package/dist/async/delay.cjs +0 -2
  684. package/dist/async/delay.cjs.map +0 -1
  685. package/dist/async/delay.js +0 -8
  686. package/dist/async/delay.js.map +0 -1
  687. package/dist/function/proxy.cjs +0 -2
  688. package/dist/function/proxy.cjs.map +0 -1
  689. package/dist/function/proxy.js +0 -22
  690. package/dist/function/proxy.js.map +0 -1
  691. package/dist/function/prune.cjs +0 -2
  692. package/dist/function/prune.cjs.map +0 -1
  693. package/dist/function/prune.js +0 -30
  694. package/dist/function/prune.js.map +0 -1
  695. package/dist/function/worker.cjs +0 -14
  696. package/dist/function/worker.cjs.map +0 -1
  697. package/dist/function/worker.js +0 -29
  698. package/dist/function/worker.js.map +0 -1
  699. package/dist/index.cjs.map +0 -1
  700. package/dist/index.js.map +0 -1
  701. package/dist/logit/dist/logit.cjs +0 -2
  702. package/dist/logit/dist/logit.cjs.map +0 -1
  703. package/dist/logit/dist/logit.js +0 -263
  704. package/dist/logit/dist/logit.js.map +0 -1
  705. package/dist/math/add.cjs +0 -2
  706. package/dist/math/add.cjs.map +0 -1
  707. package/dist/math/add.js +0 -9
  708. package/dist/math/add.js.map +0 -1
  709. package/dist/math/boil.cjs +0 -2
  710. package/dist/math/boil.cjs.map +0 -1
  711. package/dist/math/boil.js +0 -17
  712. package/dist/math/boil.js.map +0 -1
  713. package/dist/math/divide.cjs +0 -2
  714. package/dist/math/divide.cjs.map +0 -1
  715. package/dist/math/divide.js +0 -11
  716. package/dist/math/divide.js.map +0 -1
  717. package/dist/math/multiply.cjs +0 -2
  718. package/dist/math/multiply.cjs.map +0 -1
  719. package/dist/math/multiply.js +0 -9
  720. package/dist/math/multiply.js.map +0 -1
  721. package/dist/math/rate.cjs +0 -2
  722. package/dist/math/rate.cjs.map +0 -1
  723. package/dist/math/rate.js +0 -9
  724. package/dist/math/rate.js.map +0 -1
  725. package/dist/math/subtract.cjs +0 -2
  726. package/dist/math/subtract.cjs.map +0 -1
  727. package/dist/math/subtract.js +0 -9
  728. package/dist/math/subtract.js.map +0 -1
  729. package/dist/object/cache.cjs +0 -2
  730. package/dist/object/cache.cjs.map +0 -1
  731. package/dist/object/cache.js +0 -63
  732. package/dist/object/cache.js.map +0 -1
  733. package/dist/object/clone.cjs +0 -2
  734. package/dist/object/clone.cjs.map +0 -1
  735. package/dist/object/clone.js +0 -17
  736. package/dist/object/clone.js.map +0 -1
  737. package/dist/object/entries.cjs +0 -2
  738. package/dist/object/entries.cjs.map +0 -1
  739. package/dist/object/entries.js +0 -9
  740. package/dist/object/entries.js.map +0 -1
  741. package/dist/object/keys.cjs +0 -2
  742. package/dist/object/keys.cjs.map +0 -1
  743. package/dist/object/keys.js +0 -9
  744. package/dist/object/keys.js.map +0 -1
  745. package/dist/object/values.cjs +0 -2
  746. package/dist/object/values.cjs.map +0 -1
  747. package/dist/object/values.js +0 -9
  748. package/dist/object/values.js.map +0 -1
  749. package/dist/typed/ge.cjs +0 -2
  750. package/dist/typed/ge.cjs.map +0 -1
  751. package/dist/typed/ge.js +0 -7
  752. package/dist/typed/ge.js.map +0 -1
  753. package/dist/typed/gt.cjs +0 -2
  754. package/dist/typed/gt.cjs.map +0 -1
  755. package/dist/typed/gt.js +0 -7
  756. package/dist/typed/gt.js.map +0 -1
  757. package/dist/typed/le.cjs +0 -2
  758. package/dist/typed/le.cjs.map +0 -1
  759. package/dist/typed/le.js +0 -7
  760. package/dist/typed/le.js.map +0 -1
  761. package/dist/typed/lt.cjs +0 -2
  762. package/dist/typed/lt.cjs.map +0 -1
  763. package/dist/typed/lt.js +0 -7
  764. package/dist/typed/lt.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"queue.cjs","sources":["../../src/async/queue.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Creates a promise queue that processes promises sequentially with optional concurrency limit.\n *\n * @example\n * ```ts\n * const requestQueue = queue({ concurrency: 2 });\n *\n * requestQueue.add(() => fetch('/api/1'));\n * requestQueue.add(() => fetch('/api/2'));\n * requestQueue.add(() => fetch('/api/3'));\n *\n * await requestQueue.onIdle(); // Wait for all tasks to complete\n * ```\n *\n * @param options - Queue configuration\n * @param options.concurrency - Maximum number of concurrent promises (default: 1)\n * @returns Queue instance with add, onIdle, and clear methods\n */\nexport function queue(options: { concurrency?: number } = {}) {\n const { concurrency = 1 } = options;\n\n assert(concurrency >= 1, 'Concurrency must be at least 1', {\n args: { concurrency },\n type: RangeError,\n });\n\n let activeCount = 0;\n let idlePromise: Promise<void> | null = null;\n let idleResolve: (() => void) | null = null;\n\n const queue: Array<{\n fn: () => Promise<unknown>;\n resolve: (value: unknown) => void;\n reject: (error: unknown) => void;\n }> = [];\n\n const next = (): void => {\n if (activeCount < concurrency && queue.length > 0) {\n const task = queue.shift()!;\n activeCount++;\n\n task\n .fn()\n .then(task.resolve)\n .catch(task.reject)\n .finally(() => {\n activeCount--;\n next();\n\n if (activeCount === 0 && queue.length === 0 && idleResolve) {\n idleResolve();\n idlePromise = null;\n idleResolve = null;\n }\n });\n }\n };\n\n return {\n /**\n * Adds a promise-returning function to the queue\n */\n add: <T>(fn: () => Promise<T>): Promise<T> => {\n return new Promise<T>((resolve, reject) => {\n queue.push({\n fn: fn as () => Promise<unknown>,\n reject,\n resolve: resolve as (value: unknown) => void,\n });\n next();\n });\n },\n\n /**\n * Clears all pending tasks from the queue\n */\n clear: (): void => {\n queue.length = 0;\n },\n\n /**\n * Returns a promise that resolves when the queue becomes idle\n */\n onIdle: (): Promise<void> => {\n if (activeCount === 0 && queue.length === 0) {\n return Promise.resolve();\n }\n\n if (!idlePromise) {\n idlePromise = new Promise<void>((resolve) => {\n idleResolve = resolve;\n });\n }\n\n return idlePromise;\n },\n\n /**\n * Returns the number of currently active promises\n */\n get pending(): number {\n return activeCount;\n },\n\n /**\n * Returns the current size of the queue\n */\n get size(): number {\n return queue.length;\n },\n };\n}\n"],"names":["queue","options","concurrency","assert","activeCount","idlePromise","idleResolve","next","task","fn","resolve","reject"],"mappings":"0HAoBO,SAASA,EAAMC,EAAoC,GAAI,CAC5D,KAAM,CAAE,YAAAC,EAAc,CAAA,EAAMD,EAE5BE,SAAOD,GAAe,EAAG,iCAAkC,CACzD,KAAM,CAAE,YAAAA,CAAA,EACR,KAAM,UAAA,CACP,EAED,IAAIE,EAAc,EACdC,EAAoC,KACpCC,EAAmC,KAEvC,MAAMN,EAID,CAAA,EAECO,EAAO,IAAY,CACvB,GAAIH,EAAcF,GAAeF,EAAM,OAAS,EAAG,CACjD,MAAMQ,EAAOR,EAAM,MAAA,EACnBI,IAEAI,EACG,GAAA,EACA,KAAKA,EAAK,OAAO,EACjB,MAAMA,EAAK,MAAM,EACjB,QAAQ,IAAM,CACbJ,IACAG,EAAA,EAEIH,IAAgB,GAAKJ,EAAM,SAAW,GAAKM,IAC7CA,EAAA,EACAD,EAAc,KACdC,EAAc,KAElB,CAAC,CACL,CACF,EAEA,MAAO,CAIL,IAASG,GACA,IAAI,QAAW,CAACC,EAASC,IAAW,CACzCX,EAAM,KAAK,CACT,GAAAS,EACA,OAAAE,EACA,QAAAD,CAAA,CACD,EACDH,EAAA,CACF,CAAC,EAMH,MAAO,IAAY,CACjBP,EAAM,OAAS,CACjB,EAKA,OAAQ,IACFI,IAAgB,GAAKJ,EAAM,SAAW,EACjC,QAAQ,QAAA,GAGZK,IACHA,EAAc,IAAI,QAAeK,GAAY,CAC3CJ,EAAcI,CAChB,CAAC,GAGIL,GAMT,IAAI,SAAkB,CACpB,OAAOD,CACT,EAKA,IAAI,MAAe,CACjB,OAAOJ,EAAM,MACf,CAAA,CAEJ"}
1
+ {"version":3,"file":"queue.cjs","names":[],"sources":["../../src/async/queue.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { Scheduler } from './scheduler';\n\n/**\n * Creates a promise queue that processes promises sequentially with optional concurrency limit.\n *\n * @example\n * ```ts\n * const requestQueue = queue({ concurrency: 2 });\n *\n * requestQueue.add(() => fetch('/api/1'));\n * requestQueue.add(() => fetch('/api/2'));\n * requestQueue.add(() => fetch('/api/3'));\n *\n * await requestQueue.onIdle(); // Wait for all tasks to complete\n * ```\n *\n * @param options - Queue configuration\n * @param options.concurrency - Maximum number of concurrent promises (default: 1)\n * @returns Queue instance with add, onIdle, and clear methods\n */\nexport function queue(options: { concurrency?: number } = {}) {\n const { concurrency = 1 } = options;\n\n assert(concurrency >= 1, 'Concurrency must be at least 1', {\n args: { concurrency },\n type: RangeError,\n });\n\n let activeCount = 0;\n let idlePromise: Promise<void> | null = null;\n let idleResolve: (() => void) | null = null;\n\n const tasks: Array<{\n fn: () => Promise<unknown>;\n reject: (error: unknown) => void;\n resolve: (value: unknown) => void;\n }> = [];\n\n let flushQueued = false;\n\n const scheduleNext = (): void => {\n if (flushQueued) return;\n\n flushQueued = true;\n\n const scheduler = new Scheduler();\n\n void scheduler.postTask(\n () => {\n flushQueued = false;\n next();\n },\n { priority: 'user-visible' },\n );\n };\n\n const next = (): void => {\n if (activeCount < concurrency && tasks.length > 0) {\n const task = tasks.shift()!;\n\n activeCount++;\n\n task\n .fn()\n .then(task.resolve)\n .catch(task.reject)\n .finally(() => {\n activeCount--;\n scheduleNext();\n\n if (activeCount === 0 && tasks.length === 0 && idleResolve) {\n idleResolve();\n idlePromise = null;\n idleResolve = null;\n }\n });\n }\n };\n\n return {\n /**\n * Adds a promise-returning function to the queue\n */\n add: <T>(fn: () => Promise<T>): Promise<T> => {\n const { promise, reject, resolve } = Promise.withResolvers<T>();\n\n tasks.push({\n fn: fn as () => Promise<unknown>,\n reject,\n resolve: resolve as (value: unknown) => void,\n });\n scheduleNext();\n\n return promise;\n },\n\n /**\n * Clears all pending tasks from the queue\n */\n clear: (): void => {\n tasks.length = 0;\n },\n\n /**\n * Returns a promise that resolves when the queue becomes idle\n */\n onIdle: (): Promise<void> => {\n if (activeCount === 0 && tasks.length === 0) {\n return Promise.resolve();\n }\n\n if (!idlePromise) {\n const deferred = Promise.withResolvers<void>();\n\n idlePromise = deferred.promise;\n idleResolve = deferred.resolve;\n }\n\n return idlePromise;\n },\n\n /**\n * Returns the number of currently active promises\n */\n get pending(): number {\n return activeCount;\n },\n\n /**\n * Returns the current size of the queue\n */\n get size(): number {\n return tasks.length;\n },\n };\n}\n"],"mappings":"uEAqBA,SAAgB,EAAM,EAAoC,EAAE,CAAE,CAC5D,GAAM,CAAE,cAAc,GAAM,EAE5B,EAAA,OAAO,GAAe,EAAG,iCAAkC,CACzD,KAAM,CAAE,cAAa,CACrB,KAAM,WACP,CAAC,CAEF,IAAI,EAAc,EACd,EAAoC,KACpC,EAAmC,KAEjC,EAID,EAAE,CAEH,EAAc,GAEZ,MAA2B,CAC3B,IAEJ,EAAc,GAEI,IAAI,EAAA,WAAW,CAElB,aACP,CACJ,EAAc,GACd,GAAM,EAER,CAAE,SAAU,eAAgB,CAC7B,GAGG,MAAmB,CACvB,GAAI,EAAc,GAAe,EAAM,OAAS,EAAG,CACjD,IAAM,EAAO,EAAM,OAAO,CAE1B,IAEA,EACG,IAAI,CACJ,KAAK,EAAK,QAAQ,CAClB,MAAM,EAAK,OAAO,CAClB,YAAc,CACb,IACA,GAAc,CAEV,IAAgB,GAAK,EAAM,SAAW,GAAK,IAC7C,GAAa,CACb,EAAc,KACd,EAAc,OAEhB,GAIR,MAAO,CAIL,IAAS,GAAqC,CAC5C,GAAM,CAAE,UAAS,SAAQ,WAAY,QAAQ,eAAkB,CAS/D,OAPA,EAAM,KAAK,CACL,KACJ,SACS,UACV,CAAC,CACF,GAAc,CAEP,GAMT,UAAmB,CACjB,EAAM,OAAS,GAMjB,WAA6B,CAC3B,GAAI,IAAgB,GAAK,EAAM,SAAW,EACxC,OAAO,QAAQ,SAAS,CAG1B,GAAI,CAAC,EAAa,CAChB,IAAM,EAAW,QAAQ,eAAqB,CAE9C,EAAc,EAAS,QACvB,EAAc,EAAS,QAGzB,OAAO,GAMT,IAAI,SAAkB,CACpB,OAAO,GAMT,IAAI,MAAe,CACjB,OAAO,EAAM,QAEhB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Creates a promise queue that processes promises sequentially with optional concurrency limit.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * const requestQueue = queue({ concurrency: 2 });
7
+ *
8
+ * requestQueue.add(() => fetch('/api/1'));
9
+ * requestQueue.add(() => fetch('/api/2'));
10
+ * requestQueue.add(() => fetch('/api/3'));
11
+ *
12
+ * await requestQueue.onIdle(); // Wait for all tasks to complete
13
+ * ```
14
+ *
15
+ * @param options - Queue configuration
16
+ * @param options.concurrency - Maximum number of concurrent promises (default: 1)
17
+ * @returns Queue instance with add, onIdle, and clear methods
18
+ */
19
+ export declare function queue(options?: {
20
+ concurrency?: number;
21
+ }): {
22
+ /**
23
+ * Adds a promise-returning function to the queue
24
+ */
25
+ add: <T>(fn: () => Promise<T>) => Promise<T>;
26
+ /**
27
+ * Clears all pending tasks from the queue
28
+ */
29
+ clear: () => void;
30
+ /**
31
+ * Returns a promise that resolves when the queue becomes idle
32
+ */
33
+ onIdle: () => Promise<void>;
34
+ /**
35
+ * Returns the number of currently active promises
36
+ */
37
+ readonly pending: number;
38
+ /**
39
+ * Returns the current size of the queue
40
+ */
41
+ readonly size: number;
42
+ };
43
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/async/queue.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO;IA4DxD;;OAEG;UACG,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;IAa1C;;OAEG;iBACQ,IAAI;IAIf;;OAEG;kBACS,OAAO,CAAC,IAAI,CAAC;IAezB;;OAEG;sBACY,MAAM;IAIrB;;OAEG;mBACS,MAAM;EAIrB"}
@@ -1,57 +1,53 @@
1
- import { assert as a } from "../function/assert.js";
2
- function f(u = {}) {
3
- const { concurrency: o = 1 } = u;
4
- a(o >= 1, "Concurrency must be at least 1", {
5
- args: { concurrency: o },
6
- type: RangeError
7
- });
8
- let t = 0, r = null, l = null;
9
- const e = [], s = () => {
10
- if (t < o && e.length > 0) {
11
- const n = e.shift();
12
- t++, n.fn().then(n.resolve).catch(n.reject).finally(() => {
13
- t--, s(), t === 0 && e.length === 0 && l && (l(), r = null, l = null);
14
- });
15
- }
16
- };
17
- return {
18
- /**
19
- * Adds a promise-returning function to the queue
20
- */
21
- add: (n) => new Promise((i, c) => {
22
- e.push({
23
- fn: n,
24
- reject: c,
25
- resolve: i
26
- }), s();
27
- }),
28
- /**
29
- * Clears all pending tasks from the queue
30
- */
31
- clear: () => {
32
- e.length = 0;
33
- },
34
- /**
35
- * Returns a promise that resolves when the queue becomes idle
36
- */
37
- onIdle: () => t === 0 && e.length === 0 ? Promise.resolve() : (r || (r = new Promise((n) => {
38
- l = n;
39
- })), r),
40
- /**
41
- * Returns the number of currently active promises
42
- */
43
- get pending() {
44
- return t;
45
- },
46
- /**
47
- * Returns the current size of the queue
48
- */
49
- get size() {
50
- return e.length;
51
- }
52
- };
1
+ import { assert as e } from "../function/assert.js";
2
+ import { Scheduler as t } from "./scheduler.js";
3
+ //#region src/async/queue.ts
4
+ function n(n = {}) {
5
+ let { concurrency: r = 1 } = n;
6
+ e(r >= 1, "Concurrency must be at least 1", {
7
+ args: { concurrency: r },
8
+ type: RangeError
9
+ });
10
+ let i = 0, a = null, o = null, s = [], c = !1, l = () => {
11
+ c || (c = !0, new t().postTask(() => {
12
+ c = !1, u();
13
+ }, { priority: "user-visible" }));
14
+ }, u = () => {
15
+ if (i < r && s.length > 0) {
16
+ let e = s.shift();
17
+ i++, e.fn().then(e.resolve).catch(e.reject).finally(() => {
18
+ i--, l(), i === 0 && s.length === 0 && o && (o(), a = null, o = null);
19
+ });
20
+ }
21
+ };
22
+ return {
23
+ add: (e) => {
24
+ let { promise: t, reject: n, resolve: r } = Promise.withResolvers();
25
+ return s.push({
26
+ fn: e,
27
+ reject: n,
28
+ resolve: r
29
+ }), l(), t;
30
+ },
31
+ clear: () => {
32
+ s.length = 0;
33
+ },
34
+ onIdle: () => {
35
+ if (i === 0 && s.length === 0) return Promise.resolve();
36
+ if (!a) {
37
+ let e = Promise.withResolvers();
38
+ a = e.promise, o = e.resolve;
39
+ }
40
+ return a;
41
+ },
42
+ get pending() {
43
+ return i;
44
+ },
45
+ get size() {
46
+ return s.length;
47
+ }
48
+ };
53
49
  }
54
- export {
55
- f as queue
56
- };
57
- //# sourceMappingURL=queue.js.map
50
+ //#endregion
51
+ export { n as queue };
52
+
53
+ //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sources":["../../src/async/queue.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Creates a promise queue that processes promises sequentially with optional concurrency limit.\n *\n * @example\n * ```ts\n * const requestQueue = queue({ concurrency: 2 });\n *\n * requestQueue.add(() => fetch('/api/1'));\n * requestQueue.add(() => fetch('/api/2'));\n * requestQueue.add(() => fetch('/api/3'));\n *\n * await requestQueue.onIdle(); // Wait for all tasks to complete\n * ```\n *\n * @param options - Queue configuration\n * @param options.concurrency - Maximum number of concurrent promises (default: 1)\n * @returns Queue instance with add, onIdle, and clear methods\n */\nexport function queue(options: { concurrency?: number } = {}) {\n const { concurrency = 1 } = options;\n\n assert(concurrency >= 1, 'Concurrency must be at least 1', {\n args: { concurrency },\n type: RangeError,\n });\n\n let activeCount = 0;\n let idlePromise: Promise<void> | null = null;\n let idleResolve: (() => void) | null = null;\n\n const queue: Array<{\n fn: () => Promise<unknown>;\n resolve: (value: unknown) => void;\n reject: (error: unknown) => void;\n }> = [];\n\n const next = (): void => {\n if (activeCount < concurrency && queue.length > 0) {\n const task = queue.shift()!;\n activeCount++;\n\n task\n .fn()\n .then(task.resolve)\n .catch(task.reject)\n .finally(() => {\n activeCount--;\n next();\n\n if (activeCount === 0 && queue.length === 0 && idleResolve) {\n idleResolve();\n idlePromise = null;\n idleResolve = null;\n }\n });\n }\n };\n\n return {\n /**\n * Adds a promise-returning function to the queue\n */\n add: <T>(fn: () => Promise<T>): Promise<T> => {\n return new Promise<T>((resolve, reject) => {\n queue.push({\n fn: fn as () => Promise<unknown>,\n reject,\n resolve: resolve as (value: unknown) => void,\n });\n next();\n });\n },\n\n /**\n * Clears all pending tasks from the queue\n */\n clear: (): void => {\n queue.length = 0;\n },\n\n /**\n * Returns a promise that resolves when the queue becomes idle\n */\n onIdle: (): Promise<void> => {\n if (activeCount === 0 && queue.length === 0) {\n return Promise.resolve();\n }\n\n if (!idlePromise) {\n idlePromise = new Promise<void>((resolve) => {\n idleResolve = resolve;\n });\n }\n\n return idlePromise;\n },\n\n /**\n * Returns the number of currently active promises\n */\n get pending(): number {\n return activeCount;\n },\n\n /**\n * Returns the current size of the queue\n */\n get size(): number {\n return queue.length;\n },\n };\n}\n"],"names":["queue","options","concurrency","assert","activeCount","idlePromise","idleResolve","next","task","fn","resolve","reject"],"mappings":";AAoBO,SAASA,EAAMC,IAAoC,IAAI;AAC5D,QAAM,EAAE,aAAAC,IAAc,EAAA,IAAMD;AAE5B,EAAAE,EAAOD,KAAe,GAAG,kCAAkC;AAAA,IACzD,MAAM,EAAE,aAAAA,EAAA;AAAA,IACR,MAAM;AAAA,EAAA,CACP;AAED,MAAIE,IAAc,GACdC,IAAoC,MACpCC,IAAmC;AAEvC,QAAMN,IAID,CAAA,GAECO,IAAO,MAAY;AACvB,QAAIH,IAAcF,KAAeF,EAAM,SAAS,GAAG;AACjD,YAAMQ,IAAOR,EAAM,MAAA;AACnB,MAAAI,KAEAI,EACG,GAAA,EACA,KAAKA,EAAK,OAAO,EACjB,MAAMA,EAAK,MAAM,EACjB,QAAQ,MAAM;AACb,QAAAJ,KACAG,EAAA,GAEIH,MAAgB,KAAKJ,EAAM,WAAW,KAAKM,MAC7CA,EAAA,GACAD,IAAc,MACdC,IAAc;AAAA,MAElB,CAAC;AAAA,IACL;AAAA,EACF;AAEA,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,KAAK,CAAIG,MACA,IAAI,QAAW,CAACC,GAASC,MAAW;AACzCX,MAAAA,EAAM,KAAK;AAAA,QACT,IAAAS;AAAA,QACA,QAAAE;AAAA,QACA,SAAAD;AAAA,MAAA,CACD,GACDH,EAAA;AAAA,IACF,CAAC;AAAA;AAAA;AAAA;AAAA,IAMH,OAAO,MAAY;AACjBP,MAAAA,EAAM,SAAS;AAAA,IACjB;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,MACFI,MAAgB,KAAKJ,EAAM,WAAW,IACjC,QAAQ,QAAA,KAGZK,MACHA,IAAc,IAAI,QAAc,CAACK,MAAY;AAC3C,MAAAJ,IAAcI;AAAA,IAChB,CAAC,IAGIL;AAAA;AAAA;AAAA;AAAA,IAMT,IAAI,UAAkB;AACpB,aAAOD;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,OAAe;AACjB,aAAOJ,EAAM;AAAA,IACf;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"queue.js","names":[],"sources":["../../src/async/queue.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { Scheduler } from './scheduler';\n\n/**\n * Creates a promise queue that processes promises sequentially with optional concurrency limit.\n *\n * @example\n * ```ts\n * const requestQueue = queue({ concurrency: 2 });\n *\n * requestQueue.add(() => fetch('/api/1'));\n * requestQueue.add(() => fetch('/api/2'));\n * requestQueue.add(() => fetch('/api/3'));\n *\n * await requestQueue.onIdle(); // Wait for all tasks to complete\n * ```\n *\n * @param options - Queue configuration\n * @param options.concurrency - Maximum number of concurrent promises (default: 1)\n * @returns Queue instance with add, onIdle, and clear methods\n */\nexport function queue(options: { concurrency?: number } = {}) {\n const { concurrency = 1 } = options;\n\n assert(concurrency >= 1, 'Concurrency must be at least 1', {\n args: { concurrency },\n type: RangeError,\n });\n\n let activeCount = 0;\n let idlePromise: Promise<void> | null = null;\n let idleResolve: (() => void) | null = null;\n\n const tasks: Array<{\n fn: () => Promise<unknown>;\n reject: (error: unknown) => void;\n resolve: (value: unknown) => void;\n }> = [];\n\n let flushQueued = false;\n\n const scheduleNext = (): void => {\n if (flushQueued) return;\n\n flushQueued = true;\n\n const scheduler = new Scheduler();\n\n void scheduler.postTask(\n () => {\n flushQueued = false;\n next();\n },\n { priority: 'user-visible' },\n );\n };\n\n const next = (): void => {\n if (activeCount < concurrency && tasks.length > 0) {\n const task = tasks.shift()!;\n\n activeCount++;\n\n task\n .fn()\n .then(task.resolve)\n .catch(task.reject)\n .finally(() => {\n activeCount--;\n scheduleNext();\n\n if (activeCount === 0 && tasks.length === 0 && idleResolve) {\n idleResolve();\n idlePromise = null;\n idleResolve = null;\n }\n });\n }\n };\n\n return {\n /**\n * Adds a promise-returning function to the queue\n */\n add: <T>(fn: () => Promise<T>): Promise<T> => {\n const { promise, reject, resolve } = Promise.withResolvers<T>();\n\n tasks.push({\n fn: fn as () => Promise<unknown>,\n reject,\n resolve: resolve as (value: unknown) => void,\n });\n scheduleNext();\n\n return promise;\n },\n\n /**\n * Clears all pending tasks from the queue\n */\n clear: (): void => {\n tasks.length = 0;\n },\n\n /**\n * Returns a promise that resolves when the queue becomes idle\n */\n onIdle: (): Promise<void> => {\n if (activeCount === 0 && tasks.length === 0) {\n return Promise.resolve();\n }\n\n if (!idlePromise) {\n const deferred = Promise.withResolvers<void>();\n\n idlePromise = deferred.promise;\n idleResolve = deferred.resolve;\n }\n\n return idlePromise;\n },\n\n /**\n * Returns the number of currently active promises\n */\n get pending(): number {\n return activeCount;\n },\n\n /**\n * Returns the current size of the queue\n */\n get size(): number {\n return tasks.length;\n },\n };\n}\n"],"mappings":";;;AAqBA,SAAgB,EAAM,IAAoC,EAAE,EAAE;CAC5D,IAAM,EAAE,iBAAc,MAAM;AAE5B,GAAO,KAAe,GAAG,kCAAkC;EACzD,MAAM,EAAE,gBAAa;EACrB,MAAM;EACP,CAAC;CAEF,IAAI,IAAc,GACd,IAAoC,MACpC,IAAmC,MAEjC,IAID,EAAE,EAEH,IAAc,IAEZ,UAA2B;AAC3B,QAEJ,IAAc,IAEI,IAAI,GAAW,CAElB,eACP;AAEJ,GADA,IAAc,IACd,GAAM;KAER,EAAE,UAAU,gBAAgB,CAC7B;IAGG,UAAmB;AACvB,MAAI,IAAc,KAAe,EAAM,SAAS,GAAG;GACjD,IAAM,IAAO,EAAM,OAAO;AAI1B,GAFA,KAEA,EACG,IAAI,CACJ,KAAK,EAAK,QAAQ,CAClB,MAAM,EAAK,OAAO,CAClB,cAAc;AAIb,IAHA,KACA,GAAc,EAEV,MAAgB,KAAK,EAAM,WAAW,KAAK,MAC7C,GAAa,EACb,IAAc,MACd,IAAc;KAEhB;;;AAIR,QAAO;EAIL,MAAS,MAAqC;GAC5C,IAAM,EAAE,YAAS,WAAQ,eAAY,QAAQ,eAAkB;AAS/D,UAPA,EAAM,KAAK;IACL;IACJ;IACS;IACV,CAAC,EACF,GAAc,EAEP;;EAMT,aAAmB;AACjB,KAAM,SAAS;;EAMjB,cAA6B;AAC3B,OAAI,MAAgB,KAAK,EAAM,WAAW,EACxC,QAAO,QAAQ,SAAS;AAG1B,OAAI,CAAC,GAAa;IAChB,IAAM,IAAW,QAAQ,eAAqB;AAG9C,IADA,IAAc,EAAS,SACvB,IAAc,EAAS;;AAGzB,UAAO;;EAMT,IAAI,UAAkB;AACpB,UAAO;;EAMT,IAAI,OAAe;AACjB,UAAO,EAAM;;EAEhB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function o(e,r){const t=Array.isArray(e)?e:[e],a=new Promise(n=>setTimeout(n,r)),i=await Promise.race(t);return await a,i}exports.race=o;
2
- //# sourceMappingURL=race.cjs.map
1
+ async function e(e,t){let n=new Promise(e=>setTimeout(e,t)),r=await e;return await n,r}exports.race=e;
2
+ //# sourceMappingURL=race.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"race.cjs","sources":["../../src/async/race.ts"],"sourcesContent":["/**\n * Race multiple promises but with a guaranteed minimum delay.\n * Useful for showing loading states for at least a minimum duration.\n *\n * @example\n * ```ts\n * // Show loading spinner for at least 500ms\n * const result = await race(\n * fetchData(),\n * 500\n * );\n *\n * // With multiple promises\n * const result = await race(\n * [fetch('/api/1'), fetch('/api/2')],\n * 1000\n * );\n * ```\n *\n * @param promises - Single promise or array of promises to race\n * @param minDelay - Minimum delay in milliseconds before resolving\n * @returns Promise that resolves with the first result after the minimum delay\n */\nexport async function race<T>(promises: Promise<T> | Promise<T>[], minDelay: number): Promise<T> {\n const promiseArray = Array.isArray(promises) ? promises : [promises];\n const minDelayPromise = new Promise<void>((resolve) => setTimeout(resolve, minDelay));\n\n const result = await Promise.race(promiseArray);\n await minDelayPromise;\n\n return result;\n}\n"],"names":["race","promises","minDelay","promiseArray","minDelayPromise","resolve","result"],"mappings":"gFAuBA,eAAsBA,EAAQC,EAAqCC,EAA8B,CAC/F,MAAMC,EAAe,MAAM,QAAQF,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAC7DG,EAAkB,IAAI,QAAeC,GAAY,WAAWA,EAASH,CAAQ,CAAC,EAE9EI,EAAS,MAAM,QAAQ,KAAKH,CAAY,EAC9C,aAAMC,EAECE,CACT"}
1
+ {"version":3,"file":"race.cjs","names":[],"sources":["../../src/async/race.ts"],"sourcesContent":["/**\n * Races a promise against a minimum delay, ensuring the result is not returned\n * before the minimum duration has elapsed. Useful for preventing loading flicker.\n *\n * @example\n * ```ts\n * // Show loading spinner for at least 500ms\n * const result = await race(fetchData(), 500);\n * ```\n *\n * @param promise - The promise to race\n * @param minDelay - Minimum delay in milliseconds before resolving\n * @returns Promise that resolves with the result after the minimum delay\n */\nexport async function race<T>(promise: Promise<T>, minDelay: number): Promise<T> {\n const minDelayPromise = new Promise<void>((resolve) => setTimeout(resolve, minDelay));\n\n const result = await promise;\n\n await minDelayPromise;\n\n return result;\n}\n"],"mappings":"AAcA,eAAsB,EAAQ,EAAqB,EAA8B,CAC/E,IAAM,EAAkB,IAAI,QAAe,GAAY,WAAW,EAAS,EAAS,CAAC,CAE/E,EAAS,MAAM,EAIrB,OAFA,MAAM,EAEC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Races a promise against a minimum delay, ensuring the result is not returned
3
+ * before the minimum duration has elapsed. Useful for preventing loading flicker.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * // Show loading spinner for at least 500ms
8
+ * const result = await race(fetchData(), 500);
9
+ * ```
10
+ *
11
+ * @param promise - The promise to race
12
+ * @param minDelay - Minimum delay in milliseconds before resolving
13
+ * @returns Promise that resolves with the result after the minimum delay
14
+ */
15
+ export declare function race<T>(promise: Promise<T>, minDelay: number): Promise<T>;
16
+ //# sourceMappingURL=race.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"race.d.ts","sourceRoot":"","sources":["../../src/async/race.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ/E"}
@@ -1,8 +1,9 @@
1
- async function o(r, a) {
2
- const e = Array.isArray(r) ? r : [r], t = new Promise((i) => setTimeout(i, a)), n = await Promise.race(e);
3
- return await t, n;
1
+ //#region src/async/race.ts
2
+ async function e(e, t) {
3
+ let n = new Promise((e) => setTimeout(e, t)), r = await e;
4
+ return await n, r;
4
5
  }
5
- export {
6
- o as race
7
- };
8
- //# sourceMappingURL=race.js.map
6
+ //#endregion
7
+ export { e as race };
8
+
9
+ //# sourceMappingURL=race.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"race.js","sources":["../../src/async/race.ts"],"sourcesContent":["/**\n * Race multiple promises but with a guaranteed minimum delay.\n * Useful for showing loading states for at least a minimum duration.\n *\n * @example\n * ```ts\n * // Show loading spinner for at least 500ms\n * const result = await race(\n * fetchData(),\n * 500\n * );\n *\n * // With multiple promises\n * const result = await race(\n * [fetch('/api/1'), fetch('/api/2')],\n * 1000\n * );\n * ```\n *\n * @param promises - Single promise or array of promises to race\n * @param minDelay - Minimum delay in milliseconds before resolving\n * @returns Promise that resolves with the first result after the minimum delay\n */\nexport async function race<T>(promises: Promise<T> | Promise<T>[], minDelay: number): Promise<T> {\n const promiseArray = Array.isArray(promises) ? promises : [promises];\n const minDelayPromise = new Promise<void>((resolve) => setTimeout(resolve, minDelay));\n\n const result = await Promise.race(promiseArray);\n await minDelayPromise;\n\n return result;\n}\n"],"names":["race","promises","minDelay","promiseArray","minDelayPromise","resolve","result"],"mappings":"AAuBA,eAAsBA,EAAQC,GAAqCC,GAA8B;AAC/F,QAAMC,IAAe,MAAM,QAAQF,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GAC7DG,IAAkB,IAAI,QAAc,CAACC,MAAY,WAAWA,GAASH,CAAQ,CAAC,GAE9EI,IAAS,MAAM,QAAQ,KAAKH,CAAY;AAC9C,eAAMC,GAECE;AACT;"}
1
+ {"version":3,"file":"race.js","names":[],"sources":["../../src/async/race.ts"],"sourcesContent":["/**\n * Races a promise against a minimum delay, ensuring the result is not returned\n * before the minimum duration has elapsed. Useful for preventing loading flicker.\n *\n * @example\n * ```ts\n * // Show loading spinner for at least 500ms\n * const result = await race(fetchData(), 500);\n * ```\n *\n * @param promise - The promise to race\n * @param minDelay - Minimum delay in milliseconds before resolving\n * @returns Promise that resolves with the result after the minimum delay\n */\nexport async function race<T>(promise: Promise<T>, minDelay: number): Promise<T> {\n const minDelayPromise = new Promise<void>((resolve) => setTimeout(resolve, minDelay));\n\n const result = await promise;\n\n await minDelayPromise;\n\n return result;\n}\n"],"mappings":";AAcA,eAAsB,EAAQ,GAAqB,GAA8B;CAC/E,IAAM,IAAkB,IAAI,SAAe,MAAY,WAAW,GAAS,EAAS,CAAC,EAE/E,IAAS,MAAM;AAIrB,QAFA,MAAM,GAEC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../logit/dist/logit.cjs"),u=require("./sleep.cjs");async function c(i,{times:e=3,delay:y=250,backoff:o=1,signal:l}={}){let t=y;for(let r=1;r<=e;r++){if(l?.aborted)throw a.Logit.warn(`retry() -> Aborted after ${r-1} attempts`),new Error("Retry aborted");try{return await i()}catch(n){if(r===e)throw n;a.Logit.warn(`retry() -> ${n}, attempt ${r}/${e}, retrying in ${t}ms`),t>0&&await u.sleep(t),t=typeof o=="function"?o(r,t):t*o}}throw new Error("Retry failed unexpectedly")}exports.retry=c;
2
- //# sourceMappingURL=retry.cjs.map
1
+ const e=require(`./sleep.cjs`);async function t(t,{backoff:n=1,delay:r=250,retryDelay:i,shouldRetry:a,signal:o,times:s=3}={}){let c=r;for(let r=1;r<=s;r++){if(o?.aborted)throw o.reason??new DOMException(`Retry aborted`,`AbortError`);try{return await t()}catch(t){if(r===s||a&&!a(t,r-1))throw t;let o=i?i(r-1):c;o>0&&await e.sleep(o),i||(c=typeof n==`function`?n(r,c):c*n)}}throw Error(`Retry failed unexpectedly`)}exports.retry=t;
2
+ //# sourceMappingURL=retry.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.cjs","sources":["../../src/async/retry.ts"],"sourcesContent":["import { Logit } from '@vielzeug/logit';\nimport { sleep } from './sleep';\n\n/**\n * Retries an asynchronous function a specified number of times with delay and optional exponential backoff.\n *\n * @example\n * ```ts\n * retry(() => fetchData(), { times: 3, delay: 1000, backoff: 2, signal: abortSignal })\n * .then(result => console.log(result))\n * .catch(error => console.error(error));\n * ```\n *\n * @param fn - The asynchronous function to retry.\n * @param options - (optional) Options for retrying the function.\n * @param [options.times=3] - The number of retry attempts.\n * @param [options.delay=250] - The delay in milliseconds between retries.\n * @param [options.backoff=1] - Exponential backoff factor (default: 1 → no backoff).\n * @param [options.signal] - `AbortSignal` to allow canceling retries.\n *\n * @returns The result of the asynchronous function.\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n {\n times = 3,\n delay = 250,\n backoff = 1,\n signal,\n }: {\n times?: number;\n delay?: number;\n backoff?: number | ((attempt: number, delay: number) => number);\n signal?: AbortSignal;\n } = {},\n): Promise<T> {\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= times; attempt++) {\n if (signal?.aborted) {\n Logit.warn(`retry() -> Aborted after ${attempt - 1} attempts`);\n throw new Error('Retry aborted');\n }\n\n try {\n return await fn();\n } catch (err) {\n if (attempt === times) throw err;\n\n Logit.warn(`retry() -> ${err}, attempt ${attempt}/${times}, retrying in ${currentDelay}ms`);\n if (currentDelay > 0) await sleep(currentDelay);\n\n currentDelay = typeof backoff === 'function' ? backoff(attempt, currentDelay) : currentDelay * backoff;\n }\n }\n\n throw new Error('Retry failed unexpectedly');\n}\n"],"names":["retry","fn","times","delay","backoff","signal","currentDelay","attempt","Logit","err","sleep"],"mappings":"oJAsBA,eAAsBA,EACpBC,EACA,CACE,MAAAC,EAAQ,EACR,MAAAC,EAAQ,IACR,QAAAC,EAAU,EACV,OAAAC,CACF,EAKI,GACQ,CACZ,IAAIC,EAAeH,EAEnB,QAASI,EAAU,EAAGA,GAAWL,EAAOK,IAAW,CACjD,GAAIF,GAAQ,QACVG,MAAAA,EAAAA,MAAM,KAAK,4BAA4BD,EAAU,CAAC,WAAW,EACvD,IAAI,MAAM,eAAe,EAGjC,GAAI,CACF,OAAO,MAAMN,EAAA,CACf,OAASQ,EAAK,CACZ,GAAIF,IAAYL,EAAO,MAAMO,EAE7BD,EAAAA,MAAM,KAAK,cAAcC,CAAG,aAAaF,CAAO,IAAIL,CAAK,iBAAiBI,CAAY,IAAI,EACtFA,EAAe,GAAG,MAAMI,EAAAA,MAAMJ,CAAY,EAE9CA,EAAe,OAAOF,GAAY,WAAaA,EAAQG,EAASD,CAAY,EAAIA,EAAeF,CACjG,CACF,CAEA,MAAM,IAAI,MAAM,2BAA2B,CAC7C"}
1
+ {"version":3,"file":"retry.cjs","names":[],"sources":["../../src/async/retry.ts"],"sourcesContent":["import { sleep } from './sleep';\n\n/**\n * Retries an asynchronous function a specified number of times with delay and optional exponential backoff.\n *\n * @example\n * ```ts\n * retry(() => fetchData(), { times: 3, delay: 1000, backoff: 2, signal: abortSignal })\n * .then(result => console.log(result))\n * .catch(error => console.error(error));\n * ```\n *\n * @param fn - The asynchronous function to retry.\n * @param options - (optional) Options for retrying the function.\n * @param [options.times=3] - Total number of attempts (including the first).\n * @param [options.delay=250] - The delay in milliseconds between retries. Ignored when `retryDelay` is provided.\n * @param [options.backoff=1] - Exponential backoff factor (default: 1 → no backoff). Ignored when `retryDelay` is provided.\n * @param [options.retryDelay] - Per-attempt delay function. `attempt` is 0-based (0 = waiting before the 2nd try). Supersedes `delay` and `backoff`.\n * @param [options.signal] - `AbortSignal` to cancel retries; throws the signal's `reason` on abort.\n * @param [options.shouldRetry] - Return `false` to stop retrying immediately for a specific error. `attempt` is 0-based failure count.\n *\n * @returns The result of the asynchronous function.\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n {\n backoff = 1,\n delay = 250,\n retryDelay,\n shouldRetry,\n signal,\n times = 3,\n }: {\n backoff?: number | ((attempt: number, currentDelay: number) => number);\n delay?: number;\n /** Per-attempt delay override. `attempt` is 0-based (0 = before the 2nd try). Supersedes `delay` and `backoff`. */\n retryDelay?: (attempt: number) => number;\n /** Return `false` to stop retrying for a specific error. `attempt` is 0-based failure count. */\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n signal?: AbortSignal;\n times?: number;\n } = {},\n): Promise<T> {\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= times; attempt++) {\n if (signal?.aborted) throw signal.reason ?? new DOMException('Retry aborted', 'AbortError');\n\n try {\n return await fn();\n } catch (err) {\n if (attempt === times) throw err;\n\n if (shouldRetry && !shouldRetry(err, attempt - 1)) throw err;\n\n const ms = retryDelay ? retryDelay(attempt - 1) : currentDelay;\n\n if (ms > 0) await sleep(ms);\n\n if (!retryDelay) {\n currentDelay = typeof backoff === 'function' ? backoff(attempt, currentDelay) : currentDelay * backoff;\n }\n }\n }\n\n throw new Error('Retry failed unexpectedly');\n}\n"],"mappings":"+BAuBA,eAAsB,EACpB,EACA,CACE,UAAU,EACV,QAAQ,IACR,aACA,cACA,SACA,QAAQ,GAUN,EAAE,CACM,CACZ,IAAI,EAAe,EAEnB,IAAK,IAAI,EAAU,EAAG,GAAW,EAAO,IAAW,CACjD,GAAI,GAAQ,QAAS,MAAM,EAAO,QAAU,IAAI,aAAa,gBAAiB,aAAa,CAE3F,GAAI,CACF,OAAO,MAAM,GAAI,OACV,EAAK,CAGZ,GAFI,IAAY,GAEZ,GAAe,CAAC,EAAY,EAAK,EAAU,EAAE,CAAE,MAAM,EAEzD,IAAM,EAAK,EAAa,EAAW,EAAU,EAAE,CAAG,EAE9C,EAAK,GAAG,MAAM,EAAA,MAAM,EAAG,CAEtB,IACH,EAAe,OAAO,GAAY,WAAa,EAAQ,EAAS,EAAa,CAAG,EAAe,IAKrG,MAAU,MAAM,4BAA4B"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Retries an asynchronous function a specified number of times with delay and optional exponential backoff.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * retry(() => fetchData(), { times: 3, delay: 1000, backoff: 2, signal: abortSignal })
7
+ * .then(result => console.log(result))
8
+ * .catch(error => console.error(error));
9
+ * ```
10
+ *
11
+ * @param fn - The asynchronous function to retry.
12
+ * @param options - (optional) Options for retrying the function.
13
+ * @param [options.times=3] - Total number of attempts (including the first).
14
+ * @param [options.delay=250] - The delay in milliseconds between retries. Ignored when `retryDelay` is provided.
15
+ * @param [options.backoff=1] - Exponential backoff factor (default: 1 → no backoff). Ignored when `retryDelay` is provided.
16
+ * @param [options.retryDelay] - Per-attempt delay function. `attempt` is 0-based (0 = waiting before the 2nd try). Supersedes `delay` and `backoff`.
17
+ * @param [options.signal] - `AbortSignal` to cancel retries; throws the signal's `reason` on abort.
18
+ * @param [options.shouldRetry] - Return `false` to stop retrying immediately for a specific error. `attempt` is 0-based failure count.
19
+ *
20
+ * @returns The result of the asynchronous function.
21
+ */
22
+ export declare function retry<T>(fn: () => Promise<T>, { backoff, delay, retryDelay, shouldRetry, signal, times, }?: {
23
+ backoff?: number | ((attempt: number, currentDelay: number) => number);
24
+ delay?: number;
25
+ /** Per-attempt delay override. `attempt` is 0-based (0 = before the 2nd try). Supersedes `delay` and `backoff`. */
26
+ retryDelay?: (attempt: number) => number;
27
+ /** Return `false` to stop retrying for a specific error. `attempt` is 0-based failure count. */
28
+ shouldRetry?: (error: unknown, attempt: number) => boolean;
29
+ signal?: AbortSignal;
30
+ times?: number;
31
+ }): Promise<T>;
32
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/async/retry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,EACE,OAAW,EACX,KAAW,EACX,UAAU,EACV,WAAW,EACX,MAAM,EACN,KAAS,GACV,GAAE;IACD,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mHAAmH;IACnH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,gGAAgG;IAChG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GACL,OAAO,CAAC,CAAC,CAAC,CAwBZ"}
@@ -1,25 +1,20 @@
1
- import { Logit as n } from "../logit/dist/logit.js";
2
- import { sleep as w } from "./sleep.js";
3
- async function m(i, {
4
- times: e = 3,
5
- delay: y = 250,
6
- backoff: o = 1,
7
- signal: p
8
- } = {}) {
9
- let r = y;
10
- for (let t = 1; t <= e; t++) {
11
- if (p?.aborted)
12
- throw n.warn(`retry() -> Aborted after ${t - 1} attempts`), new Error("Retry aborted");
13
- try {
14
- return await i();
15
- } catch (a) {
16
- if (t === e) throw a;
17
- n.warn(`retry() -> ${a}, attempt ${t}/${e}, retrying in ${r}ms`), r > 0 && await w(r), r = typeof o == "function" ? o(t, r) : r * o;
18
- }
19
- }
20
- throw new Error("Retry failed unexpectedly");
1
+ import { sleep as e } from "./sleep.js";
2
+ //#region src/async/retry.ts
3
+ async function t(t, { backoff: n = 1, delay: r = 250, retryDelay: i, shouldRetry: a, signal: o, times: s = 3 } = {}) {
4
+ let c = r;
5
+ for (let r = 1; r <= s; r++) {
6
+ if (o?.aborted) throw o.reason ?? new DOMException("Retry aborted", "AbortError");
7
+ try {
8
+ return await t();
9
+ } catch (t) {
10
+ if (r === s || a && !a(t, r - 1)) throw t;
11
+ let o = i ? i(r - 1) : c;
12
+ o > 0 && await e(o), i || (c = typeof n == "function" ? n(r, c) : c * n);
13
+ }
14
+ }
15
+ throw Error("Retry failed unexpectedly");
21
16
  }
22
- export {
23
- m as retry
24
- };
25
- //# sourceMappingURL=retry.js.map
17
+ //#endregion
18
+ export { t as retry };
19
+
20
+ //# sourceMappingURL=retry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sources":["../../src/async/retry.ts"],"sourcesContent":["import { Logit } from '@vielzeug/logit';\nimport { sleep } from './sleep';\n\n/**\n * Retries an asynchronous function a specified number of times with delay and optional exponential backoff.\n *\n * @example\n * ```ts\n * retry(() => fetchData(), { times: 3, delay: 1000, backoff: 2, signal: abortSignal })\n * .then(result => console.log(result))\n * .catch(error => console.error(error));\n * ```\n *\n * @param fn - The asynchronous function to retry.\n * @param options - (optional) Options for retrying the function.\n * @param [options.times=3] - The number of retry attempts.\n * @param [options.delay=250] - The delay in milliseconds between retries.\n * @param [options.backoff=1] - Exponential backoff factor (default: 1 → no backoff).\n * @param [options.signal] - `AbortSignal` to allow canceling retries.\n *\n * @returns The result of the asynchronous function.\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n {\n times = 3,\n delay = 250,\n backoff = 1,\n signal,\n }: {\n times?: number;\n delay?: number;\n backoff?: number | ((attempt: number, delay: number) => number);\n signal?: AbortSignal;\n } = {},\n): Promise<T> {\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= times; attempt++) {\n if (signal?.aborted) {\n Logit.warn(`retry() -> Aborted after ${attempt - 1} attempts`);\n throw new Error('Retry aborted');\n }\n\n try {\n return await fn();\n } catch (err) {\n if (attempt === times) throw err;\n\n Logit.warn(`retry() -> ${err}, attempt ${attempt}/${times}, retrying in ${currentDelay}ms`);\n if (currentDelay > 0) await sleep(currentDelay);\n\n currentDelay = typeof backoff === 'function' ? backoff(attempt, currentDelay) : currentDelay * backoff;\n }\n }\n\n throw new Error('Retry failed unexpectedly');\n}\n"],"names":["retry","fn","times","delay","backoff","signal","currentDelay","attempt","Logit","err","sleep"],"mappings":";;AAsBA,eAAsBA,EACpBC,GACA;AAAA,EACE,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,SAAAC,IAAU;AAAA,EACV,QAAAC;AACF,IAKI,IACQ;AACZ,MAAIC,IAAeH;AAEnB,WAASI,IAAU,GAAGA,KAAWL,GAAOK,KAAW;AACjD,QAAIF,GAAQ;AACVG,YAAAA,EAAM,KAAK,4BAA4BD,IAAU,CAAC,WAAW,GACvD,IAAI,MAAM,eAAe;AAGjC,QAAI;AACF,aAAO,MAAMN,EAAA;AAAA,IACf,SAASQ,GAAK;AACZ,UAAIF,MAAYL,EAAO,OAAMO;AAE7BD,MAAAA,EAAM,KAAK,cAAcC,CAAG,aAAaF,CAAO,IAAIL,CAAK,iBAAiBI,CAAY,IAAI,GACtFA,IAAe,KAAG,MAAMI,EAAMJ,CAAY,GAE9CA,IAAe,OAAOF,KAAY,aAAaA,EAAQG,GAASD,CAAY,IAAIA,IAAeF;AAAA,IACjG;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,2BAA2B;AAC7C;"}
1
+ {"version":3,"file":"retry.js","names":[],"sources":["../../src/async/retry.ts"],"sourcesContent":["import { sleep } from './sleep';\n\n/**\n * Retries an asynchronous function a specified number of times with delay and optional exponential backoff.\n *\n * @example\n * ```ts\n * retry(() => fetchData(), { times: 3, delay: 1000, backoff: 2, signal: abortSignal })\n * .then(result => console.log(result))\n * .catch(error => console.error(error));\n * ```\n *\n * @param fn - The asynchronous function to retry.\n * @param options - (optional) Options for retrying the function.\n * @param [options.times=3] - Total number of attempts (including the first).\n * @param [options.delay=250] - The delay in milliseconds between retries. Ignored when `retryDelay` is provided.\n * @param [options.backoff=1] - Exponential backoff factor (default: 1 → no backoff). Ignored when `retryDelay` is provided.\n * @param [options.retryDelay] - Per-attempt delay function. `attempt` is 0-based (0 = waiting before the 2nd try). Supersedes `delay` and `backoff`.\n * @param [options.signal] - `AbortSignal` to cancel retries; throws the signal's `reason` on abort.\n * @param [options.shouldRetry] - Return `false` to stop retrying immediately for a specific error. `attempt` is 0-based failure count.\n *\n * @returns The result of the asynchronous function.\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n {\n backoff = 1,\n delay = 250,\n retryDelay,\n shouldRetry,\n signal,\n times = 3,\n }: {\n backoff?: number | ((attempt: number, currentDelay: number) => number);\n delay?: number;\n /** Per-attempt delay override. `attempt` is 0-based (0 = before the 2nd try). Supersedes `delay` and `backoff`. */\n retryDelay?: (attempt: number) => number;\n /** Return `false` to stop retrying for a specific error. `attempt` is 0-based failure count. */\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n signal?: AbortSignal;\n times?: number;\n } = {},\n): Promise<T> {\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= times; attempt++) {\n if (signal?.aborted) throw signal.reason ?? new DOMException('Retry aborted', 'AbortError');\n\n try {\n return await fn();\n } catch (err) {\n if (attempt === times) throw err;\n\n if (shouldRetry && !shouldRetry(err, attempt - 1)) throw err;\n\n const ms = retryDelay ? retryDelay(attempt - 1) : currentDelay;\n\n if (ms > 0) await sleep(ms);\n\n if (!retryDelay) {\n currentDelay = typeof backoff === 'function' ? backoff(attempt, currentDelay) : currentDelay * backoff;\n }\n }\n }\n\n throw new Error('Retry failed unexpectedly');\n}\n"],"mappings":";;AAuBA,eAAsB,EACpB,GACA,EACE,aAAU,GACV,WAAQ,KACR,eACA,gBACA,WACA,WAAQ,MAUN,EAAE,EACM;CACZ,IAAI,IAAe;AAEnB,MAAK,IAAI,IAAU,GAAG,KAAW,GAAO,KAAW;AACjD,MAAI,GAAQ,QAAS,OAAM,EAAO,UAAU,IAAI,aAAa,iBAAiB,aAAa;AAE3F,MAAI;AACF,UAAO,MAAM,GAAI;WACV,GAAK;AAGZ,OAFI,MAAY,KAEZ,KAAe,CAAC,EAAY,GAAK,IAAU,EAAE,CAAE,OAAM;GAEzD,IAAM,IAAK,IAAa,EAAW,IAAU,EAAE,GAAG;AAIlD,GAFI,IAAK,KAAG,MAAM,EAAM,EAAG,EAEtB,MACH,IAAe,OAAO,KAAY,aAAa,EAAQ,GAAS,EAAa,GAAG,IAAe;;;AAKrG,OAAU,MAAM,4BAA4B"}
@@ -0,0 +1,2 @@
1
+ function e(){return{postTask:(e,t)=>{let n=t?.delay??0,r=t?.signal;return new Promise((t,i)=>{if(r?.aborted){i(r.reason);return}let a=setTimeout(()=>{r?.removeEventListener(`abort`,o);try{t(e())}catch(e){i(e)}},n),o=()=>{clearTimeout(a),i(r.reason)};r?.addEventListener(`abort`,o,{once:!0})})}}}function t(){`scheduler`in globalThis||Object.defineProperty(globalThis,`scheduler`,{configurable:!0,value:e(),writable:!0})}var n=class{#e;constructor(){globalThis.scheduler===void 0&&t(),this.#e=globalThis.scheduler}postTask(e,t){return this.#e.postTask(e,t)}};exports.Scheduler=n,exports.polyfillScheduler=t;
2
+ //# sourceMappingURL=scheduler.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.cjs","names":["#scheduler"],"sources":["../../src/async/scheduler.ts"],"sourcesContent":["/**\n * Scheduler.postTask helper for environments with or without native support.\n *\n * `new Scheduler()` guarantees that `globalThis.scheduler.postTask` exists,\n * using the native API when available and installing a small fallback otherwise.\n *\n * `polyfillScheduler()` remains available when explicit installation is preferred.\n *\n * The polyfill provides:\n * - Delayed execution via the `delay` option\n * - AbortSignal support for cancellation\n * - Priority hint support (though priorities are not enforced in the polyfill)\n *\n * @example\n * ```ts\n * import { Scheduler } from '@vielzeug/toolkit';\n *\n * const scheduler = new Scheduler();\n * await scheduler.postTask(() => console.log('hello'), { delay: 100 });\n * ```\n */\n\nexport type TaskPriority = 'background' | 'user-blocking' | 'user-visible';\n\nexport type SchedulerLike = {\n postTask<T>(\n callback: () => T | PromiseLike<T>,\n options?: { delay?: number; priority?: TaskPriority; signal?: AbortSignal },\n ): Promise<T>;\n};\n\ntype SchedulerGlobal = { scheduler?: SchedulerLike };\n\nfunction createPolyfill(): SchedulerLike {\n return {\n postTask: <T>(\n callback: () => T | PromiseLike<T>,\n options?: { delay?: number; priority?: TaskPriority; signal?: AbortSignal },\n ) => {\n const delay = options?.delay ?? 0;\n const signal = options?.signal;\n\n return new Promise<T>((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason);\n\n return;\n }\n\n const id = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n\n try {\n resolve(callback());\n } catch (error) {\n reject(error);\n }\n }, delay);\n\n const onAbort = () => {\n clearTimeout(id);\n reject(signal!.reason);\n };\n\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n },\n };\n}\n\n/**\n * Install the scheduler polyfill if not natively supported.\n *\n * Safe to call multiple times - it only installs if not already present.\n */\nexport function polyfillScheduler(): void {\n if ('scheduler' in globalThis) {\n return;\n }\n\n Object.defineProperty(globalThis, 'scheduler', {\n configurable: true,\n value: createPolyfill(),\n writable: true,\n });\n}\n\n/**\n * Lightweight scheduler wrapper.\n *\n * Creating an instance guarantees that a scheduler exists (native or polyfilled)\n * and exposes a stable postTask API.\n */\nexport class Scheduler implements SchedulerLike {\n #scheduler: SchedulerLike;\n\n constructor() {\n const g = globalThis as unknown as SchedulerGlobal;\n\n if (g.scheduler === undefined) {\n polyfillScheduler();\n }\n\n this.#scheduler = (globalThis as unknown as SchedulerGlobal).scheduler!;\n }\n\n postTask<T>(\n callback: () => T | PromiseLike<T>,\n options?: { delay?: number; priority?: TaskPriority; signal?: AbortSignal },\n ): Promise<T> {\n return this.#scheduler.postTask(callback, options);\n }\n}\n"],"mappings":"AAiCA,SAAS,GAAgC,CACvC,MAAO,CACL,UACE,EACA,IACG,CACH,IAAM,EAAQ,GAAS,OAAS,EAC1B,EAAS,GAAS,OAExB,OAAO,IAAI,SAAY,EAAS,IAAW,CACzC,GAAI,GAAQ,QAAS,CACnB,EAAO,EAAO,OAAO,CAErB,OAGF,IAAM,EAAK,eAAiB,CAC1B,GAAQ,oBAAoB,QAAS,EAAQ,CAE7C,GAAI,CACF,EAAQ,GAAU,CAAC,OACZ,EAAO,CACd,EAAO,EAAM,GAEd,EAAM,CAEH,MAAgB,CACpB,aAAa,EAAG,CAChB,EAAO,EAAQ,OAAO,EAGxB,GAAQ,iBAAiB,QAAS,EAAS,CAAE,KAAM,GAAM,CAAC,EAC1D,EAEL,CAQH,SAAgB,GAA0B,CACpC,cAAe,YAInB,OAAO,eAAe,WAAY,YAAa,CAC7C,aAAc,GACd,MAAO,GAAgB,CACvB,SAAU,GACX,CAAC,CASJ,IAAa,EAAb,KAAgD,CAC9C,GAEA,aAAc,CACF,WAEJ,YAAc,IAAA,IAClB,GAAmB,CAGrB,MAAA,EAAmB,WAA0C,UAG/D,SACE,EACA,EACY,CACZ,OAAO,MAAA,EAAgB,SAAS,EAAU,EAAQ"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Scheduler.postTask helper for environments with or without native support.
3
+ *
4
+ * `new Scheduler()` guarantees that `globalThis.scheduler.postTask` exists,
5
+ * using the native API when available and installing a small fallback otherwise.
6
+ *
7
+ * `polyfillScheduler()` remains available when explicit installation is preferred.
8
+ *
9
+ * The polyfill provides:
10
+ * - Delayed execution via the `delay` option
11
+ * - AbortSignal support for cancellation
12
+ * - Priority hint support (though priorities are not enforced in the polyfill)
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { Scheduler } from '@vielzeug/toolkit';
17
+ *
18
+ * const scheduler = new Scheduler();
19
+ * await scheduler.postTask(() => console.log('hello'), { delay: 100 });
20
+ * ```
21
+ */
22
+ export type TaskPriority = 'background' | 'user-blocking' | 'user-visible';
23
+ export type SchedulerLike = {
24
+ postTask<T>(callback: () => T | PromiseLike<T>, options?: {
25
+ delay?: number;
26
+ priority?: TaskPriority;
27
+ signal?: AbortSignal;
28
+ }): Promise<T>;
29
+ };
30
+ /**
31
+ * Install the scheduler polyfill if not natively supported.
32
+ *
33
+ * Safe to call multiple times - it only installs if not already present.
34
+ */
35
+ export declare function polyfillScheduler(): void;
36
+ /**
37
+ * Lightweight scheduler wrapper.
38
+ *
39
+ * Creating an instance guarantees that a scheduler exists (native or polyfilled)
40
+ * and exposes a stable postTask API.
41
+ */
42
+ export declare class Scheduler implements SchedulerLike {
43
+ #private;
44
+ constructor();
45
+ postTask<T>(callback: () => T | PromiseLike<T>, options?: {
46
+ delay?: number;
47
+ priority?: TaskPriority;
48
+ signal?: AbortSignal;
49
+ }): Promise<T>;
50
+ }
51
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/async/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,eAAe,GAAG,cAAc,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,EACR,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAClC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC1E,OAAO,CAAC,CAAC,CAAC,CAAC;CACf,CAAC;AAyCF;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAUxC;AAED;;;;;GAKG;AACH,qBAAa,SAAU,YAAW,aAAa;;;IAa7C,QAAQ,CAAC,CAAC,EACR,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAClC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC1E,OAAO,CAAC,CAAC,CAAC;CAGd"}
@@ -0,0 +1,43 @@
1
+ //#region src/async/scheduler.ts
2
+ function e() {
3
+ return { postTask: (e, t) => {
4
+ let n = t?.delay ?? 0, r = t?.signal;
5
+ return new Promise((t, i) => {
6
+ if (r?.aborted) {
7
+ i(r.reason);
8
+ return;
9
+ }
10
+ let a = setTimeout(() => {
11
+ r?.removeEventListener("abort", o);
12
+ try {
13
+ t(e());
14
+ } catch (e) {
15
+ i(e);
16
+ }
17
+ }, n), o = () => {
18
+ clearTimeout(a), i(r.reason);
19
+ };
20
+ r?.addEventListener("abort", o, { once: !0 });
21
+ });
22
+ } };
23
+ }
24
+ function t() {
25
+ "scheduler" in globalThis || Object.defineProperty(globalThis, "scheduler", {
26
+ configurable: !0,
27
+ value: e(),
28
+ writable: !0
29
+ });
30
+ }
31
+ var n = class {
32
+ #e;
33
+ constructor() {
34
+ globalThis.scheduler === void 0 && t(), this.#e = globalThis.scheduler;
35
+ }
36
+ postTask(e, t) {
37
+ return this.#e.postTask(e, t);
38
+ }
39
+ };
40
+ //#endregion
41
+ export { n as Scheduler, t as polyfillScheduler };
42
+
43
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","names":["#scheduler"],"sources":["../../src/async/scheduler.ts"],"sourcesContent":["/**\n * Scheduler.postTask helper for environments with or without native support.\n *\n * `new Scheduler()` guarantees that `globalThis.scheduler.postTask` exists,\n * using the native API when available and installing a small fallback otherwise.\n *\n * `polyfillScheduler()` remains available when explicit installation is preferred.\n *\n * The polyfill provides:\n * - Delayed execution via the `delay` option\n * - AbortSignal support for cancellation\n * - Priority hint support (though priorities are not enforced in the polyfill)\n *\n * @example\n * ```ts\n * import { Scheduler } from '@vielzeug/toolkit';\n *\n * const scheduler = new Scheduler();\n * await scheduler.postTask(() => console.log('hello'), { delay: 100 });\n * ```\n */\n\nexport type TaskPriority = 'background' | 'user-blocking' | 'user-visible';\n\nexport type SchedulerLike = {\n postTask<T>(\n callback: () => T | PromiseLike<T>,\n options?: { delay?: number; priority?: TaskPriority; signal?: AbortSignal },\n ): Promise<T>;\n};\n\ntype SchedulerGlobal = { scheduler?: SchedulerLike };\n\nfunction createPolyfill(): SchedulerLike {\n return {\n postTask: <T>(\n callback: () => T | PromiseLike<T>,\n options?: { delay?: number; priority?: TaskPriority; signal?: AbortSignal },\n ) => {\n const delay = options?.delay ?? 0;\n const signal = options?.signal;\n\n return new Promise<T>((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason);\n\n return;\n }\n\n const id = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n\n try {\n resolve(callback());\n } catch (error) {\n reject(error);\n }\n }, delay);\n\n const onAbort = () => {\n clearTimeout(id);\n reject(signal!.reason);\n };\n\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n },\n };\n}\n\n/**\n * Install the scheduler polyfill if not natively supported.\n *\n * Safe to call multiple times - it only installs if not already present.\n */\nexport function polyfillScheduler(): void {\n if ('scheduler' in globalThis) {\n return;\n }\n\n Object.defineProperty(globalThis, 'scheduler', {\n configurable: true,\n value: createPolyfill(),\n writable: true,\n });\n}\n\n/**\n * Lightweight scheduler wrapper.\n *\n * Creating an instance guarantees that a scheduler exists (native or polyfilled)\n * and exposes a stable postTask API.\n */\nexport class Scheduler implements SchedulerLike {\n #scheduler: SchedulerLike;\n\n constructor() {\n const g = globalThis as unknown as SchedulerGlobal;\n\n if (g.scheduler === undefined) {\n polyfillScheduler();\n }\n\n this.#scheduler = (globalThis as unknown as SchedulerGlobal).scheduler!;\n }\n\n postTask<T>(\n callback: () => T | PromiseLike<T>,\n options?: { delay?: number; priority?: TaskPriority; signal?: AbortSignal },\n ): Promise<T> {\n return this.#scheduler.postTask(callback, options);\n }\n}\n"],"mappings":";AAiCA,SAAS,IAAgC;AACvC,QAAO,EACL,WACE,GACA,MACG;EACH,IAAM,IAAQ,GAAS,SAAS,GAC1B,IAAS,GAAS;AAExB,SAAO,IAAI,SAAY,GAAS,MAAW;AACzC,OAAI,GAAQ,SAAS;AACnB,MAAO,EAAO,OAAO;AAErB;;GAGF,IAAM,IAAK,iBAAiB;AAC1B,OAAQ,oBAAoB,SAAS,EAAQ;AAE7C,QAAI;AACF,OAAQ,GAAU,CAAC;aACZ,GAAO;AACd,OAAO,EAAM;;MAEd,EAAM,EAEH,UAAgB;AAEpB,IADA,aAAa,EAAG,EAChB,EAAO,EAAQ,OAAO;;AAGxB,MAAQ,iBAAiB,SAAS,GAAS,EAAE,MAAM,IAAM,CAAC;IAC1D;IAEL;;AAQH,SAAgB,IAA0B;AACpC,gBAAe,cAInB,OAAO,eAAe,YAAY,aAAa;EAC7C,cAAc;EACd,OAAO,GAAgB;EACvB,UAAU;EACX,CAAC;;AASJ,IAAa,IAAb,MAAgD;CAC9C;CAEA,cAAc;AAOZ,EANU,WAEJ,cAAc,KAAA,KAClB,GAAmB,EAGrB,MAAA,IAAmB,WAA0C;;CAG/D,SACE,GACA,GACY;AACZ,SAAO,MAAA,EAAgB,SAAS,GAAU,EAAQ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../function/assert.cjs");async function s(e){return n.assert(typeof e=="number"&&e>=0&&Number.isFinite(e),"Timeout must be a non-negative finite number",{args:{timeout:e},type:TypeError}),new Promise(r=>setTimeout(r,e))}exports.sleep=s;
2
- //# sourceMappingURL=sleep.cjs.map
1
+ const e=require(`../function/assert.cjs`);async function t(t){return e.assert(typeof t==`number`&&t>=0&&Number.isFinite(t),`Timeout must be a non-negative finite number`,{args:{timeout:t},type:TypeError}),new Promise(e=>setTimeout(e,t))}exports.sleep=t;
2
+ //# sourceMappingURL=sleep.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.cjs","sources":["../../src/async/sleep.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Creates a Promise that resolves after a specified amount of time.\n *\n * @example\n * ```ts\n * sleep(1000).then(() => console.log('Hello, world!')); // logs 'Hello, world!' after 1 second\n * ```\n *\n * @param timeout - The number of milliseconds to wait before resolving the Promise.\n *\n * @returns A Promise that resolves after the specified time.\n *\n * @throws {TypeError} If timeout is not a non-negative number.\n */\nexport async function sleep(timeout: number): Promise<void> {\n assert(\n typeof timeout === 'number' && timeout >= 0 && Number.isFinite(timeout),\n 'Timeout must be a non-negative finite number',\n { args: { timeout }, type: TypeError },\n );\n return new Promise((resolve) => setTimeout(resolve, timeout));\n}\n"],"names":["sleep","timeout","assert","resolve"],"mappings":"0HAgBA,eAAsBA,EAAMC,EAAgC,CAC1DC,OAAAA,EAAAA,OACE,OAAOD,GAAY,UAAYA,GAAW,GAAK,OAAO,SAASA,CAAO,EACtE,+CACA,CAAE,KAAM,CAAE,QAAAA,CAAA,EAAW,KAAM,SAAA,CAAU,EAEhC,IAAI,QAASE,GAAY,WAAWA,EAASF,CAAO,CAAC,CAC9D"}
1
+ {"version":3,"file":"sleep.cjs","names":[],"sources":["../../src/async/sleep.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Creates a Promise that resolves after a specified amount of time.\n *\n * @example\n * ```ts\n * sleep(1000).then(() => console.log('Hello, world!')); // logs 'Hello, world!' after 1 second\n * ```\n *\n * @param timeout - The number of milliseconds to wait before resolving the Promise.\n *\n * @returns A Promise that resolves after the specified time.\n *\n * @throws {TypeError} If timeout is not a non-negative number.\n */\nexport async function sleep(timeout: number): Promise<void> {\n assert(\n typeof timeout === 'number' && timeout >= 0 && Number.isFinite(timeout),\n 'Timeout must be a non-negative finite number',\n { args: { timeout }, type: TypeError },\n );\n\n return new Promise((resolve) => setTimeout(resolve, timeout));\n}\n"],"mappings":"0CAgBA,eAAsB,EAAM,EAAgC,CAO1D,OANA,EAAA,OACE,OAAO,GAAY,UAAY,GAAW,GAAK,OAAO,SAAS,EAAQ,CACvE,+CACA,CAAE,KAAM,CAAE,UAAS,CAAE,KAAM,UAAW,CACvC,CAEM,IAAI,QAAS,GAAY,WAAW,EAAS,EAAQ,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Creates a Promise that resolves after a specified amount of time.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * sleep(1000).then(() => console.log('Hello, world!')); // logs 'Hello, world!' after 1 second
7
+ * ```
8
+ *
9
+ * @param timeout - The number of milliseconds to wait before resolving the Promise.
10
+ *
11
+ * @returns A Promise that resolves after the specified time.
12
+ *
13
+ * @throws {TypeError} If timeout is not a non-negative number.
14
+ */
15
+ export declare function sleep(timeout: number): Promise<void>;
16
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/async/sleep.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1D"}