@vielzeug/toolkit 1.1.3 → 2.1.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 +325 -452
  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":"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"}
@@ -1,12 +1,12 @@
1
- import { assert as n } from "../function/assert.js";
2
- async function i(e) {
3
- return n(
4
- typeof e == "number" && e >= 0 && Number.isFinite(e),
5
- "Timeout must be a non-negative finite number",
6
- { args: { timeout: e }, type: TypeError }
7
- ), new Promise((r) => setTimeout(r, e));
1
+ import { assert as e } from "../function/assert.js";
2
+ //#region src/async/sleep.ts
3
+ async function t(t) {
4
+ return e(typeof t == "number" && t >= 0 && Number.isFinite(t), "Timeout must be a non-negative finite number", {
5
+ args: { timeout: t },
6
+ type: TypeError
7
+ }), new Promise((e) => setTimeout(e, t));
8
8
  }
9
- export {
10
- i as sleep
11
- };
12
- //# sourceMappingURL=sleep.js.map
9
+ //#endregion
10
+ export { t as sleep };
11
+
12
+ //# sourceMappingURL=sleep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.js","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":";AAgBA,eAAsBA,EAAMC,GAAgC;AAC1D,SAAAC;AAAA,IACE,OAAOD,KAAY,YAAYA,KAAW,KAAK,OAAO,SAASA,CAAO;AAAA,IACtE;AAAA,IACA,EAAE,MAAM,EAAE,SAAAA,EAAA,GAAW,MAAM,UAAA;AAAA,EAAU,GAEhC,IAAI,QAAQ,CAACE,MAAY,WAAWA,GAASF,CAAO,CAAC;AAC9D;"}
1
+ {"version":3,"file":"sleep.js","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":";;AAgBA,eAAsB,EAAM,GAAgC;AAO1D,QANA,EACE,OAAO,KAAY,YAAY,KAAW,KAAK,OAAO,SAAS,EAAQ,EACvE,gDACA;EAAE,MAAM,EAAE,YAAS;EAAE,MAAM;EAAW,CACvC,EAEM,IAAI,SAAS,MAAY,WAAW,GAAS,EAAQ,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function d(u,c={}){const{timeout:n=5e3,interval:l=100,signal:t}=c;if(t?.aborted)throw new DOMException("Aborted","AbortError");return new Promise((b,e)=>{const w=Date.now();let o=null;const r=()=>{o!==null&&(clearTimeout(o),o=null),t?.removeEventListener("abort",i)},i=()=>{r(),e(new DOMException("Aborted","AbortError"))},a=async()=>{try{if(t?.aborted){r(),e(new DOMException("Aborted","AbortError"));return}if(await u()){r(),b();return}if(Date.now()-w>=n){r(),e(new Error(`waitFor timed out after ${n}ms`));return}o=setTimeout(a,l)}catch(s){r(),e(s)}};t&&t.addEventListener("abort",i,{once:!0}),a()})}exports.waitFor=d;
2
- //# sourceMappingURL=waitFor.cjs.map
1
+ async function e(e,t={}){let{interval:n=100,signal:r,timeout:i=5e3}=t,a=AbortSignal.timeout(i),o=r?AbortSignal.any([r,a]):a;return o.throwIfAborted(),new Promise((t,r)=>{let i=null,a=()=>{i!==null&&(clearTimeout(i),i=null),o.removeEventListener(`abort`,s)},s=()=>{a(),r(o.reason)},c=async()=>{try{if(o.aborted){a(),r(o.reason);return}if(await e()){a(),t();return}i=setTimeout(c,n)}catch(e){a(),r(e)}};o.addEventListener(`abort`,s,{once:!0}),c()})}exports.waitFor=e;
2
+ //# sourceMappingURL=waitFor.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"waitFor.cjs","sources":["../../src/async/waitFor.ts"],"sourcesContent":["/**\n * Waits for a condition to become true by polling.\n * Useful for waiting for DOM elements, API states, or other conditions.\n *\n * @example\n * ```ts\n * // Wait for an element to appear\n * await waitFor(() => document.querySelector('#myElement') !== null);\n *\n * // Wait for API to be ready\n * await waitFor(\n * async () => {\n * const res = await fetch('/api/health');\n * return res.ok;\n * },\n * { timeout: 30000, interval: 1000 }\n * );\n * ```\n *\n * @param condition - Function that returns true when condition is met\n * @param options - Configuration options\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @param options.interval - Polling interval in ms (default: 100)\n * @param options.signal - AbortSignal to cancel waiting\n * @returns Promise that resolves when condition becomes true\n * @throws {Error} If timeout is reached\n * @throws {DOMException} If aborted via signal\n */\nexport async function waitFor(\n condition: () => boolean | Promise<boolean>,\n options: {\n timeout?: number;\n interval?: number;\n signal?: AbortSignal;\n } = {},\n): Promise<void> {\n const { timeout: timeoutMs = 5000, interval = 100, signal } = options;\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let intervalId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (intervalId !== null) {\n clearTimeout(intervalId);\n intervalId = null;\n }\n signal?.removeEventListener('abort', onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const check = async () => {\n try {\n // Check if aborted\n if (signal?.aborted) {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n // Check condition\n const result = await condition();\n\n if (result) {\n cleanup();\n resolve();\n return;\n }\n\n // Check timeout\n if (Date.now() - startTime >= timeoutMs) {\n cleanup();\n reject(new Error(`waitFor timed out after ${timeoutMs}ms`));\n return;\n }\n\n // Schedule next check\n intervalId = setTimeout(check, interval);\n } catch (error) {\n // If the condition throws, clean up and reject\n cleanup();\n reject(error);\n }\n };\n\n // Set up abort listener\n if (signal) {\n signal.addEventListener('abort', onAbort, { once: true });\n }\n\n // Start checking\n check();\n });\n}\n"],"names":["waitFor","condition","options","timeoutMs","interval","signal","resolve","reject","startTime","intervalId","cleanup","onAbort","check","error"],"mappings":"gFA4BA,eAAsBA,EACpBC,EACAC,EAII,GACW,CACf,KAAM,CAAE,QAASC,EAAY,IAAM,SAAAC,EAAW,IAAK,OAAAC,GAAWH,EAE9D,GAAIG,GAAQ,QACV,MAAM,IAAI,aAAa,UAAW,YAAY,EAGhD,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAC5C,MAAMC,EAAY,KAAK,IAAA,EAEvB,IAAIC,EAAmD,KAEvD,MAAMC,EAAU,IAAM,CAKhBD,IAAe,OACjB,aAAaA,CAAU,EACvBA,EAAa,MAEfJ,GAAQ,oBAAoB,QAASM,CAAO,CAC9C,EAEMA,EAAU,IAAM,CACpBD,EAAA,EACAH,EAAO,IAAI,aAAa,UAAW,YAAY,CAAC,CAClD,EAEMK,EAAQ,SAAY,CACxB,GAAI,CAEF,GAAIP,GAAQ,QAAS,CACnBK,EAAA,EACAH,EAAO,IAAI,aAAa,UAAW,YAAY,CAAC,EAChD,MACF,CAKA,GAFe,MAAMN,EAAA,EAET,CACVS,EAAA,EACAJ,EAAA,EACA,MACF,CAGA,GAAI,KAAK,MAAQE,GAAaL,EAAW,CACvCO,EAAA,EACAH,EAAO,IAAI,MAAM,2BAA2BJ,CAAS,IAAI,CAAC,EAC1D,MACF,CAGAM,EAAa,WAAWG,EAAOR,CAAQ,CACzC,OAASS,EAAO,CAEdH,EAAA,EACAH,EAAOM,CAAK,CACd,CACF,EAGIR,GACFA,EAAO,iBAAiB,QAASM,EAAS,CAAE,KAAM,GAAM,EAI1DC,EAAA,CACF,CAAC,CACH"}
1
+ {"version":3,"file":"waitFor.cjs","names":[],"sources":["../../src/async/waitFor.ts"],"sourcesContent":["/**\n * Waits for a condition to become true by polling.\n * Useful for waiting for DOM elements, API states, or other conditions.\n *\n * @example\n * ```ts\n * // Wait for an element to appear\n * await waitFor(() => document.querySelector('#myElement') !== null);\n *\n * // Wait for API to be ready\n * await waitFor(\n * async () => {\n * const res = await fetch('/api/health');\n * return res.ok;\n * },\n * { timeout: 30000, interval: 1000 }\n * );\n * ```\n *\n * @param condition - Function that returns true when condition is met\n * @param options - Configuration options\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @param options.interval - Polling interval in ms (default: 100)\n * @param options.signal - AbortSignal to cancel waiting\n * @returns Promise that resolves when condition becomes true\n * @throws {unknown} Rejects with the merged AbortSignal reason (timeout or abort)\n */\nexport async function waitFor(\n condition: () => boolean | Promise<boolean>,\n options: {\n interval?: number;\n signal?: AbortSignal;\n timeout?: number;\n } = {},\n): Promise<void> {\n const { interval = 100, signal, timeout: timeoutMs = 5000 } = options;\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n const mergedSignal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n\n mergedSignal.throwIfAborted();\n\n return new Promise<void>((resolve, reject) => {\n let intervalId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (intervalId !== null) {\n clearTimeout(intervalId);\n intervalId = null;\n }\n\n mergedSignal.removeEventListener('abort', onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(mergedSignal.reason);\n };\n\n const check = async () => {\n try {\n if (mergedSignal.aborted) {\n cleanup();\n reject(mergedSignal.reason);\n\n return;\n }\n\n const result = await condition();\n\n if (result) {\n cleanup();\n resolve();\n\n return;\n }\n\n intervalId = setTimeout(check, interval);\n } catch (error) {\n cleanup();\n reject(error);\n }\n };\n\n mergedSignal.addEventListener('abort', onAbort, { once: true });\n\n // Start checking\n check();\n });\n}\n"],"mappings":"AA2BA,eAAsB,EACpB,EACA,EAII,EAAE,CACS,CACf,GAAM,CAAE,WAAW,IAAK,SAAQ,QAAS,EAAY,KAAS,EACxD,EAAgB,YAAY,QAAQ,EAAU,CAC9C,EAAe,EAAS,YAAY,IAAI,CAAC,EAAQ,EAAc,CAAC,CAAG,EAIzE,OAFA,EAAa,gBAAgB,CAEtB,IAAI,SAAe,EAAS,IAAW,CAC5C,IAAI,EAAmD,KAEjD,MAAgB,CAChB,IAAe,OACjB,aAAa,EAAW,CACxB,EAAa,MAGf,EAAa,oBAAoB,QAAS,EAAQ,EAG9C,MAAgB,CACpB,GAAS,CACT,EAAO,EAAa,OAAO,EAGvB,EAAQ,SAAY,CACxB,GAAI,CACF,GAAI,EAAa,QAAS,CACxB,GAAS,CACT,EAAO,EAAa,OAAO,CAE3B,OAKF,GAFe,MAAM,GAAW,CAEpB,CACV,GAAS,CACT,GAAS,CAET,OAGF,EAAa,WAAW,EAAO,EAAS,OACjC,EAAO,CACd,GAAS,CACT,EAAO,EAAM,GAIjB,EAAa,iBAAiB,QAAS,EAAS,CAAE,KAAM,GAAM,CAAC,CAG/D,GAAO,EACP"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Waits for a condition to become true by polling.
3
+ * Useful for waiting for DOM elements, API states, or other conditions.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * // Wait for an element to appear
8
+ * await waitFor(() => document.querySelector('#myElement') !== null);
9
+ *
10
+ * // Wait for API to be ready
11
+ * await waitFor(
12
+ * async () => {
13
+ * const res = await fetch('/api/health');
14
+ * return res.ok;
15
+ * },
16
+ * { timeout: 30000, interval: 1000 }
17
+ * );
18
+ * ```
19
+ *
20
+ * @param condition - Function that returns true when condition is met
21
+ * @param options - Configuration options
22
+ * @param options.timeout - Maximum time to wait in ms (default: 5000)
23
+ * @param options.interval - Polling interval in ms (default: 100)
24
+ * @param options.signal - AbortSignal to cancel waiting
25
+ * @returns Promise that resolves when condition becomes true
26
+ * @throws {unknown} Rejects with the merged AbortSignal reason (timeout or abort)
27
+ */
28
+ export declare function waitFor(condition: () => boolean | Promise<boolean>, options?: {
29
+ interval?: number;
30
+ signal?: AbortSignal;
31
+ timeout?: number;
32
+ }): Promise<void>;
33
+ //# sourceMappingURL=waitFor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitFor.d.ts","sourceRoot":"","sources":["../../src/async/waitFor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC3C,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,OAAO,CAAC,IAAI,CAAC,CAsDf"}
@@ -1,37 +1,30 @@
1
- async function d(u, c = {}) {
2
- const { timeout: n = 5e3, interval: l = 100, signal: t } = c;
3
- if (t?.aborted)
4
- throw new DOMException("Aborted", "AbortError");
5
- return new Promise((b, e) => {
6
- const w = Date.now();
7
- let o = null;
8
- const r = () => {
9
- o !== null && (clearTimeout(o), o = null), t?.removeEventListener("abort", i);
10
- }, i = () => {
11
- r(), e(new DOMException("Aborted", "AbortError"));
12
- }, a = async () => {
13
- try {
14
- if (t?.aborted) {
15
- r(), e(new DOMException("Aborted", "AbortError"));
16
- return;
17
- }
18
- if (await u()) {
19
- r(), b();
20
- return;
21
- }
22
- if (Date.now() - w >= n) {
23
- r(), e(new Error(`waitFor timed out after ${n}ms`));
24
- return;
25
- }
26
- o = setTimeout(a, l);
27
- } catch (s) {
28
- r(), e(s);
29
- }
30
- };
31
- t && t.addEventListener("abort", i, { once: !0 }), a();
32
- });
1
+ //#region src/async/waitFor.ts
2
+ async function e(e, t = {}) {
3
+ let { interval: n = 100, signal: r, timeout: i = 5e3 } = t, a = AbortSignal.timeout(i), o = r ? AbortSignal.any([r, a]) : a;
4
+ return o.throwIfAborted(), new Promise((t, r) => {
5
+ let i = null, a = () => {
6
+ i !== null && (clearTimeout(i), i = null), o.removeEventListener("abort", s);
7
+ }, s = () => {
8
+ a(), r(o.reason);
9
+ }, c = async () => {
10
+ try {
11
+ if (o.aborted) {
12
+ a(), r(o.reason);
13
+ return;
14
+ }
15
+ if (await e()) {
16
+ a(), t();
17
+ return;
18
+ }
19
+ i = setTimeout(c, n);
20
+ } catch (e) {
21
+ a(), r(e);
22
+ }
23
+ };
24
+ o.addEventListener("abort", s, { once: !0 }), c();
25
+ });
33
26
  }
34
- export {
35
- d as waitFor
36
- };
37
- //# sourceMappingURL=waitFor.js.map
27
+ //#endregion
28
+ export { e as waitFor };
29
+
30
+ //# sourceMappingURL=waitFor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"waitFor.js","sources":["../../src/async/waitFor.ts"],"sourcesContent":["/**\n * Waits for a condition to become true by polling.\n * Useful for waiting for DOM elements, API states, or other conditions.\n *\n * @example\n * ```ts\n * // Wait for an element to appear\n * await waitFor(() => document.querySelector('#myElement') !== null);\n *\n * // Wait for API to be ready\n * await waitFor(\n * async () => {\n * const res = await fetch('/api/health');\n * return res.ok;\n * },\n * { timeout: 30000, interval: 1000 }\n * );\n * ```\n *\n * @param condition - Function that returns true when condition is met\n * @param options - Configuration options\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @param options.interval - Polling interval in ms (default: 100)\n * @param options.signal - AbortSignal to cancel waiting\n * @returns Promise that resolves when condition becomes true\n * @throws {Error} If timeout is reached\n * @throws {DOMException} If aborted via signal\n */\nexport async function waitFor(\n condition: () => boolean | Promise<boolean>,\n options: {\n timeout?: number;\n interval?: number;\n signal?: AbortSignal;\n } = {},\n): Promise<void> {\n const { timeout: timeoutMs = 5000, interval = 100, signal } = options;\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let intervalId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (intervalId !== null) {\n clearTimeout(intervalId);\n intervalId = null;\n }\n signal?.removeEventListener('abort', onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const check = async () => {\n try {\n // Check if aborted\n if (signal?.aborted) {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n // Check condition\n const result = await condition();\n\n if (result) {\n cleanup();\n resolve();\n return;\n }\n\n // Check timeout\n if (Date.now() - startTime >= timeoutMs) {\n cleanup();\n reject(new Error(`waitFor timed out after ${timeoutMs}ms`));\n return;\n }\n\n // Schedule next check\n intervalId = setTimeout(check, interval);\n } catch (error) {\n // If the condition throws, clean up and reject\n cleanup();\n reject(error);\n }\n };\n\n // Set up abort listener\n if (signal) {\n signal.addEventListener('abort', onAbort, { once: true });\n }\n\n // Start checking\n check();\n });\n}\n"],"names":["waitFor","condition","options","timeoutMs","interval","signal","resolve","reject","startTime","intervalId","cleanup","onAbort","check","error"],"mappings":"AA4BA,eAAsBA,EACpBC,GACAC,IAII,IACW;AACf,QAAM,EAAE,SAASC,IAAY,KAAM,UAAAC,IAAW,KAAK,QAAAC,MAAWH;AAE9D,MAAIG,GAAQ;AACV,UAAM,IAAI,aAAa,WAAW,YAAY;AAGhD,SAAO,IAAI,QAAc,CAACC,GAASC,MAAW;AAC5C,UAAMC,IAAY,KAAK,IAAA;AAEvB,QAAIC,IAAmD;AAEvD,UAAMC,IAAU,MAAM;AAKpB,MAAID,MAAe,SACjB,aAAaA,CAAU,GACvBA,IAAa,OAEfJ,GAAQ,oBAAoB,SAASM,CAAO;AAAA,IAC9C,GAEMA,IAAU,MAAM;AACpB,MAAAD,EAAA,GACAH,EAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,IAClD,GAEMK,IAAQ,YAAY;AACxB,UAAI;AAEF,YAAIP,GAAQ,SAAS;AACnB,UAAAK,EAAA,GACAH,EAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AAChD;AAAA,QACF;AAKA,YAFe,MAAMN,EAAA,GAET;AACV,UAAAS,EAAA,GACAJ,EAAA;AACA;AAAA,QACF;AAGA,YAAI,KAAK,QAAQE,KAAaL,GAAW;AACvC,UAAAO,EAAA,GACAH,EAAO,IAAI,MAAM,2BAA2BJ,CAAS,IAAI,CAAC;AAC1D;AAAA,QACF;AAGA,QAAAM,IAAa,WAAWG,GAAOR,CAAQ;AAAA,MACzC,SAASS,GAAO;AAEd,QAAAH,EAAA,GACAH,EAAOM,CAAK;AAAA,MACd;AAAA,IACF;AAGA,IAAIR,KACFA,EAAO,iBAAiB,SAASM,GAAS,EAAE,MAAM,IAAM,GAI1DC,EAAA;AAAA,EACF,CAAC;AACH;"}
1
+ {"version":3,"file":"waitFor.js","names":[],"sources":["../../src/async/waitFor.ts"],"sourcesContent":["/**\n * Waits for a condition to become true by polling.\n * Useful for waiting for DOM elements, API states, or other conditions.\n *\n * @example\n * ```ts\n * // Wait for an element to appear\n * await waitFor(() => document.querySelector('#myElement') !== null);\n *\n * // Wait for API to be ready\n * await waitFor(\n * async () => {\n * const res = await fetch('/api/health');\n * return res.ok;\n * },\n * { timeout: 30000, interval: 1000 }\n * );\n * ```\n *\n * @param condition - Function that returns true when condition is met\n * @param options - Configuration options\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @param options.interval - Polling interval in ms (default: 100)\n * @param options.signal - AbortSignal to cancel waiting\n * @returns Promise that resolves when condition becomes true\n * @throws {unknown} Rejects with the merged AbortSignal reason (timeout or abort)\n */\nexport async function waitFor(\n condition: () => boolean | Promise<boolean>,\n options: {\n interval?: number;\n signal?: AbortSignal;\n timeout?: number;\n } = {},\n): Promise<void> {\n const { interval = 100, signal, timeout: timeoutMs = 5000 } = options;\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n const mergedSignal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n\n mergedSignal.throwIfAborted();\n\n return new Promise<void>((resolve, reject) => {\n let intervalId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (intervalId !== null) {\n clearTimeout(intervalId);\n intervalId = null;\n }\n\n mergedSignal.removeEventListener('abort', onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(mergedSignal.reason);\n };\n\n const check = async () => {\n try {\n if (mergedSignal.aborted) {\n cleanup();\n reject(mergedSignal.reason);\n\n return;\n }\n\n const result = await condition();\n\n if (result) {\n cleanup();\n resolve();\n\n return;\n }\n\n intervalId = setTimeout(check, interval);\n } catch (error) {\n cleanup();\n reject(error);\n }\n };\n\n mergedSignal.addEventListener('abort', onAbort, { once: true });\n\n // Start checking\n check();\n });\n}\n"],"mappings":";AA2BA,eAAsB,EACpB,GACA,IAII,EAAE,EACS;CACf,IAAM,EAAE,cAAW,KAAK,WAAQ,SAAS,IAAY,QAAS,GACxD,IAAgB,YAAY,QAAQ,EAAU,EAC9C,IAAe,IAAS,YAAY,IAAI,CAAC,GAAQ,EAAc,CAAC,GAAG;AAIzE,QAFA,EAAa,gBAAgB,EAEtB,IAAI,SAAe,GAAS,MAAW;EAC5C,IAAI,IAAmD,MAEjD,UAAgB;AAMpB,GALI,MAAe,SACjB,aAAa,EAAW,EACxB,IAAa,OAGf,EAAa,oBAAoB,SAAS,EAAQ;KAG9C,UAAgB;AAEpB,GADA,GAAS,EACT,EAAO,EAAa,OAAO;KAGvB,IAAQ,YAAY;AACxB,OAAI;AACF,QAAI,EAAa,SAAS;AAExB,KADA,GAAS,EACT,EAAO,EAAa,OAAO;AAE3B;;AAKF,QAFe,MAAM,GAAW,EAEpB;AAEV,KADA,GAAS,EACT,GAAS;AAET;;AAGF,QAAa,WAAW,GAAO,EAAS;YACjC,GAAO;AAEd,IADA,GAAS,EACT,EAAO,EAAM;;;AAOjB,EAHA,EAAa,iBAAiB,SAAS,GAAS,EAAE,MAAM,IAAM,CAAC,EAG/D,GAAO;GACP"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function u(e,i=7){const t=typeof e=="string"?new Date(e):e,r=t.getTime();if(Number.isNaN(r))return"UNKNOWN";if(t.getFullYear()>=9999)return"NEVER";const o=Date.now(),n=r-o;return n<=0?"EXPIRED":n<=i*24*60*60*1e3?"SOON":"LATER"}exports.expires=u;
2
- //# sourceMappingURL=expires.cjs.map
1
+ function e(e,t=7){let n=typeof e==`string`?new Date(e):e,r=n.getTime();if(Number.isNaN(r))return`UNKNOWN`;if(n.getFullYear()>=9999)return`NEVER`;let i=r-Date.now();return i<=0?`EXPIRED`:i<=t*24*60*60*1e3?`SOON`:`LATER`}exports.expires=e;
2
+ //# sourceMappingURL=expires.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"expires.cjs","sources":["../../src/date/expires.ts"],"sourcesContent":["// #region Expires\nexport type Expires = 'EXPIRED' | 'SOON' | 'LATER' | 'NEVER' | 'UNKNOWN';\n// #endregion Expires\n\n/**\n * Determines the expiry status of a given date.\n *\n * @param date - The date to check, as a string or Date object.\n * @param days - Number of days before expiry to be considered \"SOON\" (default: 7).\n * @returns\n * - 'EXPIRED' if the date is in the past,\n * - 'SOON' if the date is within the next `days`,\n * - 'LATER' if the date is further in the future,\n * - 'NEVER' if the year is >= 9999,\n * - 'UNKNOWN' if the date is invalid.\n */\nexport function expires(date: string | Date, days = 7): Expires {\n const target = typeof date === 'string' ? new Date(date) : date;\n const targetTime = target.getTime();\n\n if (Number.isNaN(targetTime)) return 'UNKNOWN';\n if (target.getFullYear() >= 9999) return 'NEVER';\n\n const now = Date.now();\n const diff = targetTime - now;\n\n if (diff <= 0) return 'EXPIRED';\n if (diff <= days * 24 * 60 * 60 * 1000) return 'SOON';\n\n return 'LATER';\n}\n"],"names":["expires","date","days","target","targetTime","now","diff"],"mappings":"gFAgBO,SAASA,EAAQC,EAAqBC,EAAO,EAAY,CAC9D,MAAMC,EAAS,OAAOF,GAAS,SAAW,IAAI,KAAKA,CAAI,EAAIA,EACrDG,EAAaD,EAAO,QAAA,EAE1B,GAAI,OAAO,MAAMC,CAAU,EAAG,MAAO,UACrC,GAAID,EAAO,eAAiB,KAAM,MAAO,QAEzC,MAAME,EAAM,KAAK,IAAA,EACXC,EAAOF,EAAaC,EAE1B,OAAIC,GAAQ,EAAU,UAClBA,GAAQJ,EAAO,GAAK,GAAK,GAAK,IAAa,OAExC,OACT"}
1
+ {"version":3,"file":"expires.cjs","names":[],"sources":["../../src/date/expires.ts"],"sourcesContent":["// #region Expires\nexport type Expires = 'EXPIRED' | 'SOON' | 'LATER' | 'NEVER' | 'UNKNOWN';\n// #endregion Expires\n\n/**\n * Determines the expiry status of a given date.\n *\n * @param date - The date to check, as a string or Date object.\n * @param days - Number of days before expiry to be considered \"SOON\" (default: 7).\n * @returns\n * - 'EXPIRED' if the date is in the past,\n * - 'SOON' if the date is within the next `days`,\n * - 'LATER' if the date is further in the future,\n * - 'NEVER' if the year is >= 9999,\n * - 'UNKNOWN' if the date is invalid.\n */\nexport function expires(date: string | Date, days = 7): Expires {\n const target = typeof date === 'string' ? new Date(date) : date;\n const targetTime = target.getTime();\n\n if (Number.isNaN(targetTime)) return 'UNKNOWN';\n\n if (target.getFullYear() >= 9999) return 'NEVER';\n\n const now = Date.now();\n const diff = targetTime - now;\n\n if (diff <= 0) return 'EXPIRED';\n\n if (diff <= days * 24 * 60 * 60 * 1000) return 'SOON';\n\n return 'LATER';\n}\n"],"mappings":"AAgBA,SAAgB,EAAQ,EAAqB,EAAO,EAAY,CAC9D,IAAM,EAAS,OAAO,GAAS,SAAW,IAAI,KAAK,EAAK,CAAG,EACrD,EAAa,EAAO,SAAS,CAEnC,GAAI,OAAO,MAAM,EAAW,CAAE,MAAO,UAErC,GAAI,EAAO,aAAa,EAAI,KAAM,MAAO,QAGzC,IAAM,EAAO,EADD,KAAK,KAAK,CAOtB,OAJI,GAAQ,EAAU,UAElB,GAAQ,EAAO,GAAK,GAAK,GAAK,IAAa,OAExC"}
@@ -0,0 +1,15 @@
1
+ export type Expires = 'EXPIRED' | 'SOON' | 'LATER' | 'NEVER' | 'UNKNOWN';
2
+ /**
3
+ * Determines the expiry status of a given date.
4
+ *
5
+ * @param date - The date to check, as a string or Date object.
6
+ * @param days - Number of days before expiry to be considered "SOON" (default: 7).
7
+ * @returns
8
+ * - 'EXPIRED' if the date is in the past,
9
+ * - 'SOON' if the date is within the next `days`,
10
+ * - 'LATER' if the date is further in the future,
11
+ * - 'NEVER' if the year is >= 9999,
12
+ * - 'UNKNOWN' if the date is invalid.
13
+ */
14
+ export declare function expires(date: string | Date, days?: number): Expires;
15
+ //# sourceMappingURL=expires.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expires.d.ts","sourceRoot":"","sources":["../../src/date/expires.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAGzE;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,SAAI,GAAG,OAAO,CAgB9D"}
@@ -1,11 +1,12 @@
1
- function f(e, i = 7) {
2
- const t = typeof e == "string" ? new Date(e) : e, r = t.getTime();
3
- if (Number.isNaN(r)) return "UNKNOWN";
4
- if (t.getFullYear() >= 9999) return "NEVER";
5
- const o = Date.now(), n = r - o;
6
- return n <= 0 ? "EXPIRED" : n <= i * 24 * 60 * 60 * 1e3 ? "SOON" : "LATER";
1
+ //#region src/date/expires.ts
2
+ function e(e, t = 7) {
3
+ let n = typeof e == "string" ? new Date(e) : e, r = n.getTime();
4
+ if (Number.isNaN(r)) return "UNKNOWN";
5
+ if (n.getFullYear() >= 9999) return "NEVER";
6
+ let i = r - Date.now();
7
+ return i <= 0 ? "EXPIRED" : i <= t * 24 * 60 * 60 * 1e3 ? "SOON" : "LATER";
7
8
  }
8
- export {
9
- f as expires
10
- };
11
- //# sourceMappingURL=expires.js.map
9
+ //#endregion
10
+ export { e as expires };
11
+
12
+ //# sourceMappingURL=expires.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expires.js","sources":["../../src/date/expires.ts"],"sourcesContent":["// #region Expires\nexport type Expires = 'EXPIRED' | 'SOON' | 'LATER' | 'NEVER' | 'UNKNOWN';\n// #endregion Expires\n\n/**\n * Determines the expiry status of a given date.\n *\n * @param date - The date to check, as a string or Date object.\n * @param days - Number of days before expiry to be considered \"SOON\" (default: 7).\n * @returns\n * - 'EXPIRED' if the date is in the past,\n * - 'SOON' if the date is within the next `days`,\n * - 'LATER' if the date is further in the future,\n * - 'NEVER' if the year is >= 9999,\n * - 'UNKNOWN' if the date is invalid.\n */\nexport function expires(date: string | Date, days = 7): Expires {\n const target = typeof date === 'string' ? new Date(date) : date;\n const targetTime = target.getTime();\n\n if (Number.isNaN(targetTime)) return 'UNKNOWN';\n if (target.getFullYear() >= 9999) return 'NEVER';\n\n const now = Date.now();\n const diff = targetTime - now;\n\n if (diff <= 0) return 'EXPIRED';\n if (diff <= days * 24 * 60 * 60 * 1000) return 'SOON';\n\n return 'LATER';\n}\n"],"names":["expires","date","days","target","targetTime","now","diff"],"mappings":"AAgBO,SAASA,EAAQC,GAAqBC,IAAO,GAAY;AAC9D,QAAMC,IAAS,OAAOF,KAAS,WAAW,IAAI,KAAKA,CAAI,IAAIA,GACrDG,IAAaD,EAAO,QAAA;AAE1B,MAAI,OAAO,MAAMC,CAAU,EAAG,QAAO;AACrC,MAAID,EAAO,iBAAiB,KAAM,QAAO;AAEzC,QAAME,IAAM,KAAK,IAAA,GACXC,IAAOF,IAAaC;AAE1B,SAAIC,KAAQ,IAAU,YAClBA,KAAQJ,IAAO,KAAK,KAAK,KAAK,MAAa,SAExC;AACT;"}
1
+ {"version":3,"file":"expires.js","names":[],"sources":["../../src/date/expires.ts"],"sourcesContent":["// #region Expires\nexport type Expires = 'EXPIRED' | 'SOON' | 'LATER' | 'NEVER' | 'UNKNOWN';\n// #endregion Expires\n\n/**\n * Determines the expiry status of a given date.\n *\n * @param date - The date to check, as a string or Date object.\n * @param days - Number of days before expiry to be considered \"SOON\" (default: 7).\n * @returns\n * - 'EXPIRED' if the date is in the past,\n * - 'SOON' if the date is within the next `days`,\n * - 'LATER' if the date is further in the future,\n * - 'NEVER' if the year is >= 9999,\n * - 'UNKNOWN' if the date is invalid.\n */\nexport function expires(date: string | Date, days = 7): Expires {\n const target = typeof date === 'string' ? new Date(date) : date;\n const targetTime = target.getTime();\n\n if (Number.isNaN(targetTime)) return 'UNKNOWN';\n\n if (target.getFullYear() >= 9999) return 'NEVER';\n\n const now = Date.now();\n const diff = targetTime - now;\n\n if (diff <= 0) return 'EXPIRED';\n\n if (diff <= days * 24 * 60 * 60 * 1000) return 'SOON';\n\n return 'LATER';\n}\n"],"mappings":";AAgBA,SAAgB,EAAQ,GAAqB,IAAO,GAAY;CAC9D,IAAM,IAAS,OAAO,KAAS,WAAW,IAAI,KAAK,EAAK,GAAG,GACrD,IAAa,EAAO,SAAS;AAEnC,KAAI,OAAO,MAAM,EAAW,CAAE,QAAO;AAErC,KAAI,EAAO,aAAa,IAAI,KAAM,QAAO;CAGzC,IAAM,IAAO,IADD,KAAK,KAAK;AAOtB,QAJI,KAAQ,IAAU,YAElB,KAAQ,IAAO,KAAK,KAAK,KAAK,MAAa,SAExC"}
@@ -0,0 +1,4 @@
1
+ export * from './expires';
2
+ export * from './interval';
3
+ export * from './timeDiff';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/date/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("../function/assert.cjs"),i=require("../typed/isDate.cjs");function w(r,c,{interval:e="D",steps:t=1,latest:a=!1}={}){const n=new Date(r),o=new Date(c);l.assert([i.isDate(n),i.isDate(o)],"Invalid date format. Use a valid Date object or ISO string.",{args:{end:c,start:r},type:TypeError});const D=[];let u=new Date(s(n,e,0));for(;u<=o;)D.push(u),u=new Date(s(u,e,t));return a&&D.length>0&&D[D.length-1]<o&&D.push(o),D}function s(r,c,e){const t=r.getFullYear(),a=r.getMonth(),n=r.getDate();switch(c){case"D":return new Date(Date.UTC(t,a,n+e));case"W":return new Date(Date.UTC(t,a,n+7*e));case"M":return new Date(Date.UTC(t,a+e,n));case"MS":return new Date(Date.UTC(t,a+e,1));case"ME":return new Date(Date.UTC(t,a+e+1,0));case"Y":return new Date(Date.UTC(t+e,a,n));case"YS":return new Date(Date.UTC(t+e,0,1));case"YE":return new Date(Date.UTC(t+e,11,31))}}exports.interval=w;
2
- //# sourceMappingURL=interval.cjs.map
1
+ const e=require(`../function/assert.cjs`),t=require(`../typed/isDate.cjs`);function n(n,i,{interval:a=`day`,latest:o=!1,steps:s=1}={}){let c=new Date(n),l=new Date(i);e.assertAll([t.isDate(c),t.isDate(l)],`Invalid date format. Use a valid Date object or ISO string.`,{args:{end:i,start:n},type:TypeError});let u=[],d=new Date(r(c,a,0));for(;d<=l;)u.push(d),d=new Date(r(d,a,s));return o&&u.length>0&&u[u.length-1]<l&&u.push(l),u}function r(e,t,n){let r=e.getFullYear(),i=e.getMonth(),a=e.getDate();switch(t){case`day`:return new Date(Date.UTC(r,i,a+n));case`month`:return new Date(Date.UTC(r,i+n,a));case`monthEnd`:return new Date(Date.UTC(r,i+n+1,0));case`monthStart`:return new Date(Date.UTC(r,i+n,1));case`week`:return new Date(Date.UTC(r,i,a+7*n));case`year`:return new Date(Date.UTC(r+n,i,a));case`yearEnd`:return new Date(Date.UTC(r+n,11,31));case`yearStart`:return new Date(Date.UTC(r+n,0,1))}}exports.interval=n;
2
+ //# sourceMappingURL=interval.cjs.map