@vinicunca/perkakas 1.13.2 → 1.15.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 (1524) hide show
  1. package/dist/add-prop.cjs +2 -1
  2. package/dist/add-prop.cjs.map +1 -0
  3. package/dist/add-prop.js +1 -1
  4. package/dist/add-prop.js.map +1 -1
  5. package/dist/add.cjs +2 -1
  6. package/dist/add.cjs.map +1 -0
  7. package/dist/add.js +1 -1
  8. package/dist/add.js.map +1 -1
  9. package/dist/all-pass.cjs +2 -1
  10. package/dist/all-pass.cjs.map +1 -0
  11. package/dist/all-pass.js +1 -1
  12. package/dist/all-pass.js.map +1 -1
  13. package/dist/any-pass.cjs +2 -1
  14. package/dist/any-pass.cjs.map +1 -0
  15. package/dist/any-pass.js +1 -1
  16. package/dist/any-pass.js.map +1 -1
  17. package/dist/binary-search-cutoff-index-CLFtXYPc.cjs +2 -0
  18. package/dist/binary-search-cutoff-index-CLFtXYPc.cjs.map +1 -0
  19. package/dist/binary-search-cutoff-index-TJlnoie4.js +2 -0
  20. package/dist/binary-search-cutoff-index-TJlnoie4.js.map +1 -0
  21. package/dist/capitalize.cjs +2 -1
  22. package/dist/capitalize.cjs.map +1 -0
  23. package/dist/capitalize.js +1 -1
  24. package/dist/capitalize.js.map +1 -1
  25. package/dist/ceil.cjs +2 -1
  26. package/dist/ceil.cjs.map +1 -0
  27. package/dist/ceil.js +1 -1
  28. package/dist/ceil.js.map +1 -1
  29. package/dist/chunk.cjs +2 -1
  30. package/dist/chunk.cjs.map +1 -0
  31. package/dist/chunk.js +1 -1
  32. package/dist/chunk.js.map +1 -1
  33. package/dist/clamp.cjs +2 -1
  34. package/dist/clamp.cjs.map +1 -0
  35. package/dist/clamp.js +1 -1
  36. package/dist/clamp.js.map +1 -1
  37. package/dist/clone.cjs +2 -1
  38. package/dist/clone.cjs.map +1 -0
  39. package/dist/clone.js +1 -1
  40. package/dist/clone.js.map +1 -1
  41. package/dist/concat.cjs +2 -1
  42. package/dist/concat.cjs.map +1 -0
  43. package/dist/concat.js +1 -1
  44. package/dist/concat.js.map +1 -1
  45. package/dist/conditional-3wcaMG9k.cjs +2 -0
  46. package/dist/conditional-3wcaMG9k.cjs.map +1 -0
  47. package/dist/conditional-CTEJD5TX.js +2 -0
  48. package/dist/conditional-CTEJD5TX.js.map +1 -0
  49. package/dist/conditional.cjs +1 -1
  50. package/dist/conditional.js +1 -1
  51. package/dist/constant.cjs +2 -1
  52. package/dist/constant.cjs.map +1 -0
  53. package/dist/constant.js.map +1 -1
  54. package/dist/count-by.cjs +2 -1
  55. package/dist/count-by.cjs.map +1 -0
  56. package/dist/count-by.js +1 -1
  57. package/dist/count-by.js.map +1 -1
  58. package/dist/curry-from-lazy-BvN_VKlH.cjs +2 -0
  59. package/dist/curry-from-lazy-BvN_VKlH.cjs.map +1 -0
  60. package/dist/curry-from-lazy-CtH1dp14.js +2 -0
  61. package/dist/curry-from-lazy-CtH1dp14.js.map +1 -0
  62. package/dist/curry-order-rules-BLyCSMdZ.js +2 -0
  63. package/dist/curry-order-rules-BLyCSMdZ.js.map +1 -0
  64. package/dist/curry-order-rules-DsJSy3gX.cjs +2 -0
  65. package/dist/curry-order-rules-DsJSy3gX.cjs.map +1 -0
  66. package/dist/curry.cjs +2 -1
  67. package/dist/curry.cjs.map +1 -0
  68. package/dist/curry.js +2 -1
  69. package/dist/curry.js.map +1 -0
  70. package/dist/debounce.cjs +2 -1
  71. package/dist/debounce.cjs.map +1 -0
  72. package/dist/debounce.js +1 -1
  73. package/dist/debounce.js.map +1 -1
  74. package/dist/default-to.cjs +2 -0
  75. package/dist/default-to.cjs.map +1 -0
  76. package/dist/default-to.js +2 -0
  77. package/dist/default-to.js.map +1 -0
  78. package/dist/difference-with.cjs +2 -1
  79. package/dist/difference-with.cjs.map +1 -0
  80. package/dist/difference-with.js +1 -1
  81. package/dist/difference-with.js.map +1 -1
  82. package/dist/difference.cjs +2 -1
  83. package/dist/difference.cjs.map +1 -0
  84. package/dist/difference.js +1 -1
  85. package/dist/difference.js.map +1 -1
  86. package/dist/divide.cjs +2 -1
  87. package/dist/divide.cjs.map +1 -0
  88. package/dist/divide.js +1 -1
  89. package/dist/divide.js.map +1 -1
  90. package/dist/do-nothing.cjs +2 -1
  91. package/dist/do-nothing.cjs.map +1 -0
  92. package/dist/do-nothing.js.map +1 -1
  93. package/dist/drop-first-by.cjs +2 -1
  94. package/dist/drop-first-by.cjs.map +1 -0
  95. package/dist/drop-first-by.js +1 -1
  96. package/dist/drop-first-by.js.map +1 -1
  97. package/dist/drop-last-while.cjs +2 -1
  98. package/dist/drop-last-while.cjs.map +1 -0
  99. package/dist/drop-last-while.js +1 -1
  100. package/dist/drop-last-while.js.map +1 -1
  101. package/dist/drop-last.cjs +2 -1
  102. package/dist/drop-last.cjs.map +1 -0
  103. package/dist/drop-last.js +1 -1
  104. package/dist/drop-last.js.map +1 -1
  105. package/dist/drop-while.cjs +2 -1
  106. package/dist/drop-while.cjs.map +1 -0
  107. package/dist/drop-while.js +1 -1
  108. package/dist/drop-while.js.map +1 -1
  109. package/dist/drop.cjs +2 -1
  110. package/dist/drop.cjs.map +1 -0
  111. package/dist/drop.js +1 -1
  112. package/dist/drop.js.map +1 -1
  113. package/dist/ends-with.cjs +2 -0
  114. package/dist/ends-with.cjs.map +1 -0
  115. package/dist/ends-with.js +2 -0
  116. package/dist/ends-with.js.map +1 -0
  117. package/dist/entries.cjs +2 -1
  118. package/dist/entries.cjs.map +1 -0
  119. package/dist/entries.js +1 -1
  120. package/dist/entries.js.map +1 -1
  121. package/dist/evolve.cjs +2 -1
  122. package/dist/evolve.cjs.map +1 -0
  123. package/dist/evolve.js +1 -1
  124. package/dist/evolve.js.map +1 -1
  125. package/dist/filter.cjs +2 -1
  126. package/dist/filter.cjs.map +1 -0
  127. package/dist/filter.js +1 -1
  128. package/dist/filter.js.map +1 -1
  129. package/dist/find-index.cjs +2 -1
  130. package/dist/find-index.cjs.map +1 -0
  131. package/dist/find-index.js +1 -1
  132. package/dist/find-index.js.map +1 -1
  133. package/dist/find-last-index.cjs +2 -1
  134. package/dist/find-last-index.cjs.map +1 -0
  135. package/dist/find-last-index.js +1 -1
  136. package/dist/find-last-index.js.map +1 -1
  137. package/dist/find-last.cjs +2 -1
  138. package/dist/find-last.cjs.map +1 -0
  139. package/dist/find-last.js +1 -1
  140. package/dist/find-last.js.map +1 -1
  141. package/dist/find.cjs +2 -1
  142. package/dist/find.cjs.map +1 -0
  143. package/dist/find.js +1 -1
  144. package/dist/find.js.map +1 -1
  145. package/dist/first-by.cjs +2 -1
  146. package/dist/first-by.cjs.map +1 -0
  147. package/dist/first-by.js +1 -1
  148. package/dist/first-by.js.map +1 -1
  149. package/dist/first.cjs +2 -1
  150. package/dist/first.cjs.map +1 -0
  151. package/dist/first.js +1 -1
  152. package/dist/first.js.map +1 -1
  153. package/dist/flat-map.cjs +2 -1
  154. package/dist/flat-map.cjs.map +1 -0
  155. package/dist/flat-map.js +1 -1
  156. package/dist/flat-map.js.map +1 -1
  157. package/dist/flat.cjs +2 -1
  158. package/dist/flat.cjs.map +1 -0
  159. package/dist/flat.js +1 -1
  160. package/dist/flat.js.map +1 -1
  161. package/dist/floor.cjs +2 -1
  162. package/dist/floor.cjs.map +1 -0
  163. package/dist/floor.js +1 -1
  164. package/dist/floor.js.map +1 -1
  165. package/dist/for-each-obj.cjs +2 -1
  166. package/dist/for-each-obj.cjs.map +1 -0
  167. package/dist/for-each-obj.js +1 -1
  168. package/dist/for-each-obj.js.map +1 -1
  169. package/dist/for-each.cjs +2 -1
  170. package/dist/for-each.cjs.map +1 -0
  171. package/dist/for-each.js +1 -1
  172. package/dist/for-each.js.map +1 -1
  173. package/dist/from-entries.cjs +2 -1
  174. package/dist/from-entries.cjs.map +1 -0
  175. package/dist/from-entries.js +1 -1
  176. package/dist/from-entries.js.map +1 -1
  177. package/dist/from-keys.cjs +2 -1
  178. package/dist/from-keys.cjs.map +1 -0
  179. package/dist/from-keys.js +1 -1
  180. package/dist/from-keys.js.map +1 -1
  181. package/dist/funnel.cjs +2 -1
  182. package/dist/funnel.cjs.map +1 -0
  183. package/dist/funnel.js +1 -1
  184. package/dist/funnel.js.map +1 -1
  185. package/dist/group-by-prop.cjs +2 -1
  186. package/dist/group-by-prop.cjs.map +1 -0
  187. package/dist/group-by-prop.js +1 -1
  188. package/dist/group-by-prop.js.map +1 -1
  189. package/dist/group-by.cjs +2 -1
  190. package/dist/group-by.cjs.map +1 -0
  191. package/dist/group-by.js +1 -1
  192. package/dist/group-by.js.map +1 -1
  193. package/dist/has-at-least.cjs +2 -1
  194. package/dist/has-at-least.cjs.map +1 -0
  195. package/dist/has-at-least.js +2 -1
  196. package/dist/has-at-least.js.map +1 -0
  197. package/dist/has-sub-object.cjs +2 -1
  198. package/dist/has-sub-object.cjs.map +1 -0
  199. package/dist/has-sub-object.js +1 -1
  200. package/dist/has-sub-object.js.map +1 -1
  201. package/dist/heap-C0zPQGC0.cjs +2 -0
  202. package/dist/heap-C0zPQGC0.cjs.map +1 -0
  203. package/dist/heap-M6D40vkc.js +2 -0
  204. package/dist/heap-M6D40vkc.js.map +1 -0
  205. package/dist/human-readable-file-size.cjs +2 -1
  206. package/dist/human-readable-file-size.cjs.map +1 -0
  207. package/dist/identity.cjs +2 -1
  208. package/dist/identity.cjs.map +1 -0
  209. package/dist/identity.js +1 -1
  210. package/dist/identity.js.map +1 -1
  211. package/dist/index-by.cjs +2 -1
  212. package/dist/index-by.cjs.map +1 -0
  213. package/dist/index-by.js +1 -1
  214. package/dist/index-by.js.map +1 -1
  215. package/dist/index.cjs +2 -1
  216. package/dist/index.cjs.map +1 -0
  217. package/dist/index.d.cts +12489 -158
  218. package/dist/index.d.cts.map +1 -1
  219. package/dist/index.d.ts +12489 -158
  220. package/dist/index.d.ts.map +1 -1
  221. package/dist/index.js +1 -1
  222. package/dist/index.js.map +1 -1
  223. package/dist/intersection-with.cjs +2 -1
  224. package/dist/intersection-with.cjs.map +1 -0
  225. package/dist/intersection-with.js +1 -1
  226. package/dist/intersection-with.js.map +1 -1
  227. package/dist/intersection.cjs +2 -1
  228. package/dist/intersection.cjs.map +1 -0
  229. package/dist/intersection.js +1 -1
  230. package/dist/intersection.js.map +1 -1
  231. package/dist/invert.cjs +2 -1
  232. package/dist/invert.cjs.map +1 -0
  233. package/dist/invert.js +1 -1
  234. package/dist/invert.js.map +1 -1
  235. package/dist/is-array.cjs +2 -1
  236. package/dist/is-array.cjs.map +1 -0
  237. package/dist/is-array.js.map +1 -1
  238. package/dist/is-big-int.cjs +2 -1
  239. package/dist/is-big-int.cjs.map +1 -0
  240. package/dist/is-big-int.js.map +1 -1
  241. package/dist/is-boolean.cjs +2 -1
  242. package/dist/is-boolean.cjs.map +1 -0
  243. package/dist/is-boolean.js.map +1 -1
  244. package/dist/is-date.cjs +2 -1
  245. package/dist/is-date.cjs.map +1 -0
  246. package/dist/is-date.js.map +1 -1
  247. package/dist/is-deep-equal.cjs +2 -1
  248. package/dist/is-deep-equal.cjs.map +1 -0
  249. package/dist/is-deep-equal.js +1 -1
  250. package/dist/is-deep-equal.js.map +1 -1
  251. package/dist/is-defined.cjs +2 -1
  252. package/dist/is-defined.cjs.map +1 -0
  253. package/dist/is-defined.js.map +1 -1
  254. package/dist/is-empty.cjs +2 -1
  255. package/dist/is-empty.cjs.map +1 -0
  256. package/dist/is-empty.js +1 -1
  257. package/dist/is-empty.js.map +1 -1
  258. package/dist/is-emptyish.cjs +2 -1
  259. package/dist/is-emptyish.cjs.map +1 -0
  260. package/dist/is-emptyish.js.map +1 -1
  261. package/dist/is-error.cjs +2 -1
  262. package/dist/is-error.cjs.map +1 -0
  263. package/dist/is-error.js.map +1 -1
  264. package/dist/is-function.cjs +2 -1
  265. package/dist/is-function.cjs.map +1 -0
  266. package/dist/is-function.js.map +1 -1
  267. package/dist/is-included-in.cjs +2 -1
  268. package/dist/is-included-in.cjs.map +1 -0
  269. package/dist/is-included-in.js.map +1 -1
  270. package/dist/is-non-null.cjs +2 -1
  271. package/dist/is-non-null.cjs.map +1 -0
  272. package/dist/is-non-null.js.map +1 -1
  273. package/dist/is-non-nullish.cjs +2 -1
  274. package/dist/is-non-nullish.cjs.map +1 -0
  275. package/dist/is-non-nullish.js.map +1 -1
  276. package/dist/is-not.cjs +2 -1
  277. package/dist/is-not.cjs.map +1 -0
  278. package/dist/is-not.js.map +1 -1
  279. package/dist/is-nullish.cjs +2 -1
  280. package/dist/is-nullish.cjs.map +1 -0
  281. package/dist/is-nullish.js.map +1 -1
  282. package/dist/is-number.cjs +2 -1
  283. package/dist/is-number.cjs.map +1 -0
  284. package/dist/is-number.js.map +1 -1
  285. package/dist/is-object-type.cjs +2 -1
  286. package/dist/is-object-type.cjs.map +1 -0
  287. package/dist/is-object-type.js.map +1 -1
  288. package/dist/is-plain-object.cjs +2 -1
  289. package/dist/is-plain-object.cjs.map +1 -0
  290. package/dist/is-plain-object.js.map +1 -1
  291. package/dist/is-promise.cjs +2 -1
  292. package/dist/is-promise.cjs.map +1 -0
  293. package/dist/is-promise.js.map +1 -1
  294. package/dist/is-shallow-equal.cjs +2 -1
  295. package/dist/is-shallow-equal.cjs.map +1 -0
  296. package/dist/is-shallow-equal.js +1 -1
  297. package/dist/is-shallow-equal.js.map +1 -1
  298. package/dist/is-strict-equal.cjs +2 -1
  299. package/dist/is-strict-equal.cjs.map +1 -0
  300. package/dist/is-strict-equal.js +1 -1
  301. package/dist/is-strict-equal.js.map +1 -1
  302. package/dist/is-string.cjs +2 -1
  303. package/dist/is-string.cjs.map +1 -0
  304. package/dist/is-string.js.map +1 -1
  305. package/dist/is-symbol.cjs +2 -1
  306. package/dist/is-symbol.cjs.map +1 -0
  307. package/dist/is-symbol.js.map +1 -1
  308. package/dist/is-truthy.cjs +2 -1
  309. package/dist/is-truthy.cjs.map +1 -0
  310. package/dist/is-truthy.js.map +1 -1
  311. package/dist/join.cjs +2 -1
  312. package/dist/join.cjs.map +1 -0
  313. package/dist/join.js +1 -1
  314. package/dist/join.js.map +1 -1
  315. package/dist/key-codes.cjs +2 -1
  316. package/dist/key-codes.cjs.map +1 -0
  317. package/dist/keys.cjs +2 -1
  318. package/dist/keys.cjs.map +1 -0
  319. package/dist/keys.js +1 -1
  320. package/dist/keys.js.map +1 -1
  321. package/dist/last.cjs +2 -1
  322. package/dist/last.cjs.map +1 -0
  323. package/dist/last.js +1 -1
  324. package/dist/last.js.map +1 -1
  325. package/dist/lazy-data-last-impl-B05ZpguF.cjs +2 -0
  326. package/dist/lazy-data-last-impl-B05ZpguF.cjs.map +1 -0
  327. package/dist/lazy-data-last-impl-Vt_M0l7X.js +2 -0
  328. package/dist/lazy-data-last-impl-Vt_M0l7X.js.map +1 -0
  329. package/dist/length.cjs +2 -1
  330. package/dist/length.cjs.map +1 -0
  331. package/dist/length.js +1 -1
  332. package/dist/length.js.map +1 -1
  333. package/dist/map-keys.cjs +2 -1
  334. package/dist/map-keys.cjs.map +1 -0
  335. package/dist/map-keys.js +1 -1
  336. package/dist/map-keys.js.map +1 -1
  337. package/dist/map-to-obj.cjs +2 -1
  338. package/dist/map-to-obj.cjs.map +1 -0
  339. package/dist/map-to-obj.js +1 -1
  340. package/dist/map-to-obj.js.map +1 -1
  341. package/dist/map-values.cjs +2 -1
  342. package/dist/map-values.cjs.map +1 -0
  343. package/dist/map-values.js +1 -1
  344. package/dist/map-values.js.map +1 -1
  345. package/dist/map-with-feedback.cjs +2 -1
  346. package/dist/map-with-feedback.cjs.map +1 -0
  347. package/dist/map-with-feedback.js +1 -1
  348. package/dist/map-with-feedback.js.map +1 -1
  349. package/dist/map.cjs +2 -1
  350. package/dist/map.cjs.map +1 -0
  351. package/dist/map.js +1 -1
  352. package/dist/map.js.map +1 -1
  353. package/dist/mean-by.cjs +2 -1
  354. package/dist/mean-by.cjs.map +1 -0
  355. package/dist/mean-by.js +1 -1
  356. package/dist/mean-by.js.map +1 -1
  357. package/dist/mean.cjs +2 -0
  358. package/dist/mean.cjs.map +1 -0
  359. package/dist/mean.js +2 -0
  360. package/dist/mean.js.map +1 -0
  361. package/dist/median.cjs +2 -0
  362. package/dist/median.cjs.map +1 -0
  363. package/dist/median.js +2 -0
  364. package/dist/median.js.map +1 -0
  365. package/dist/merge-all.cjs +2 -1
  366. package/dist/merge-all.cjs.map +1 -0
  367. package/dist/merge-all.js.map +1 -1
  368. package/dist/merge-deep.cjs +2 -1
  369. package/dist/merge-deep.cjs.map +1 -0
  370. package/dist/merge-deep.js +1 -1
  371. package/dist/merge-deep.js.map +1 -1
  372. package/dist/merge.cjs +2 -1
  373. package/dist/merge.cjs.map +1 -0
  374. package/dist/merge.js +1 -1
  375. package/dist/merge.js.map +1 -1
  376. package/dist/multiply.cjs +2 -1
  377. package/dist/multiply.cjs.map +1 -0
  378. package/dist/multiply.js +1 -1
  379. package/dist/multiply.js.map +1 -1
  380. package/dist/nth-by-DhfNV5xd.js +2 -0
  381. package/dist/nth-by-DhfNV5xd.js.map +1 -0
  382. package/dist/nth-by-zZ3RM-mR.cjs +2 -0
  383. package/dist/nth-by-zZ3RM-mR.cjs.map +1 -0
  384. package/dist/nth-by.cjs +1 -1
  385. package/dist/nth-by.js +1 -1
  386. package/dist/obj-of.cjs +2 -1
  387. package/dist/obj-of.cjs.map +1 -0
  388. package/dist/obj-of.js +1 -1
  389. package/dist/obj-of.js.map +1 -1
  390. package/dist/omit-by.cjs +2 -1
  391. package/dist/omit-by.cjs.map +1 -0
  392. package/dist/omit-by.js +1 -1
  393. package/dist/omit-by.js.map +1 -1
  394. package/dist/omit.cjs +2 -1
  395. package/dist/omit.cjs.map +1 -0
  396. package/dist/omit.js +1 -1
  397. package/dist/omit.js.map +1 -1
  398. package/dist/once.cjs +2 -1
  399. package/dist/once.cjs.map +1 -0
  400. package/dist/once.js.map +1 -1
  401. package/dist/only.cjs +2 -1
  402. package/dist/only.cjs.map +1 -0
  403. package/dist/only.js +1 -1
  404. package/dist/only.js.map +1 -1
  405. package/dist/partial-bind.cjs +2 -0
  406. package/dist/partial-bind.cjs.map +1 -0
  407. package/dist/partial-bind.js +2 -0
  408. package/dist/partial-bind.js.map +1 -0
  409. package/dist/partial-last-bind.cjs +2 -0
  410. package/dist/partial-last-bind.cjs.map +1 -0
  411. package/dist/partial-last-bind.js +2 -0
  412. package/dist/partial-last-bind.js.map +1 -0
  413. package/dist/partition.cjs +2 -1
  414. package/dist/partition.cjs.map +1 -0
  415. package/dist/partition.js +1 -1
  416. package/dist/partition.js.map +1 -1
  417. package/dist/path-or.cjs +2 -1
  418. package/dist/path-or.cjs.map +1 -0
  419. package/dist/path-or.js +1 -1
  420. package/dist/path-or.js.map +1 -1
  421. package/dist/pick-by.cjs +2 -1
  422. package/dist/pick-by.cjs.map +1 -0
  423. package/dist/pick-by.js +1 -1
  424. package/dist/pick-by.js.map +1 -1
  425. package/dist/pick.cjs +2 -1
  426. package/dist/pick.cjs.map +1 -0
  427. package/dist/pick.js +1 -1
  428. package/dist/pick.js.map +1 -1
  429. package/dist/pipe.cjs +2 -1
  430. package/dist/pipe.cjs.map +1 -0
  431. package/dist/pipe.js +2 -1
  432. package/dist/pipe.js.map +1 -0
  433. package/dist/piped.cjs +2 -1
  434. package/dist/piped.cjs.map +1 -0
  435. package/dist/piped.js +1 -1
  436. package/dist/piped.js.map +1 -1
  437. package/dist/product.cjs +2 -1
  438. package/dist/product.cjs.map +1 -0
  439. package/dist/product.js +1 -1
  440. package/dist/product.js.map +1 -1
  441. package/dist/prop.cjs +2 -1
  442. package/dist/prop.cjs.map +1 -0
  443. package/dist/prop.js.map +1 -1
  444. package/dist/pull-object.cjs +2 -1
  445. package/dist/pull-object.cjs.map +1 -0
  446. package/dist/pull-object.js +1 -1
  447. package/dist/pull-object.js.map +1 -1
  448. package/dist/random-big-int.cjs +2 -0
  449. package/dist/random-big-int.cjs.map +1 -0
  450. package/dist/random-big-int.js +2 -0
  451. package/dist/random-big-int.js.map +1 -0
  452. package/dist/random-integer.cjs +2 -1
  453. package/dist/random-integer.cjs.map +1 -0
  454. package/dist/random-integer.js +1 -1
  455. package/dist/random-integer.js.map +1 -1
  456. package/dist/random-string.cjs +2 -1
  457. package/dist/random-string.cjs.map +1 -0
  458. package/dist/random-string.js +1 -1
  459. package/dist/random-string.js.map +1 -1
  460. package/dist/range.cjs +2 -1
  461. package/dist/range.cjs.map +1 -0
  462. package/dist/range.js +1 -1
  463. package/dist/range.js.map +1 -1
  464. package/dist/rank-by.cjs +2 -1
  465. package/dist/rank-by.cjs.map +1 -0
  466. package/dist/rank-by.js +1 -1
  467. package/dist/rank-by.js.map +1 -1
  468. package/dist/reduce.cjs +2 -1
  469. package/dist/reduce.cjs.map +1 -0
  470. package/dist/reduce.js +1 -1
  471. package/dist/reduce.js.map +1 -1
  472. package/dist/reverse.cjs +2 -1
  473. package/dist/reverse.cjs.map +1 -0
  474. package/dist/reverse.js +1 -1
  475. package/dist/reverse.js.map +1 -1
  476. package/dist/round.cjs +2 -1
  477. package/dist/round.cjs.map +1 -0
  478. package/dist/round.js +1 -1
  479. package/dist/round.js.map +1 -1
  480. package/dist/sample.cjs +2 -1
  481. package/dist/sample.cjs.map +1 -0
  482. package/dist/sample.js +1 -1
  483. package/dist/sample.js.map +1 -1
  484. package/dist/set-path.cjs +2 -1
  485. package/dist/set-path.cjs.map +1 -0
  486. package/dist/set-path.js +1 -1
  487. package/dist/set-path.js.map +1 -1
  488. package/dist/set.cjs +2 -1
  489. package/dist/set.cjs.map +1 -0
  490. package/dist/set.js +1 -1
  491. package/dist/set.js.map +1 -1
  492. package/dist/shuffle.cjs +2 -1
  493. package/dist/shuffle.cjs.map +1 -0
  494. package/dist/shuffle.js +1 -1
  495. package/dist/shuffle.js.map +1 -1
  496. package/dist/sleep.cjs +2 -1
  497. package/dist/sleep.cjs.map +1 -0
  498. package/dist/slice-string.cjs +2 -1
  499. package/dist/slice-string.cjs.map +1 -0
  500. package/dist/slice-string.js.map +1 -1
  501. package/dist/slugify.cjs +2 -1
  502. package/dist/slugify.cjs.map +1 -0
  503. package/dist/sort-by.cjs +2 -1
  504. package/dist/sort-by.cjs.map +1 -0
  505. package/dist/sort-by.js +1 -1
  506. package/dist/sort-by.js.map +1 -1
  507. package/dist/sort.cjs +2 -1
  508. package/dist/sort.cjs.map +1 -0
  509. package/dist/sort.js +1 -1
  510. package/dist/sort.js.map +1 -1
  511. package/dist/sorted-index-by.cjs +2 -1
  512. package/dist/sorted-index-by.cjs.map +1 -0
  513. package/dist/sorted-index-by.js +1 -1
  514. package/dist/sorted-index-by.js.map +1 -1
  515. package/dist/sorted-index-with.cjs +2 -1
  516. package/dist/sorted-index-with.cjs.map +1 -0
  517. package/dist/sorted-index-with.js +1 -1
  518. package/dist/sorted-index-with.js.map +1 -1
  519. package/dist/sorted-index.cjs +2 -1
  520. package/dist/sorted-index.cjs.map +1 -0
  521. package/dist/sorted-index.js +1 -1
  522. package/dist/sorted-index.js.map +1 -1
  523. package/dist/sorted-last-index-by.cjs +2 -1
  524. package/dist/sorted-last-index-by.cjs.map +1 -0
  525. package/dist/sorted-last-index-by.js +1 -1
  526. package/dist/sorted-last-index-by.js.map +1 -1
  527. package/dist/sorted-last-index.cjs +2 -1
  528. package/dist/sorted-last-index.cjs.map +1 -0
  529. package/dist/sorted-last-index.js +1 -1
  530. package/dist/sorted-last-index.js.map +1 -1
  531. package/dist/splice.cjs +2 -1
  532. package/dist/splice.cjs.map +1 -0
  533. package/dist/splice.js +1 -1
  534. package/dist/splice.js.map +1 -1
  535. package/dist/split-at.cjs +2 -1
  536. package/dist/split-at.cjs.map +1 -0
  537. package/dist/split-at.js +1 -1
  538. package/dist/split-at.js.map +1 -1
  539. package/dist/split-when.cjs +2 -1
  540. package/dist/split-when.cjs.map +1 -0
  541. package/dist/split-when.js +1 -1
  542. package/dist/split-when.js.map +1 -1
  543. package/dist/split.cjs +2 -1
  544. package/dist/split.cjs.map +1 -0
  545. package/dist/split.js.map +1 -1
  546. package/dist/starts-with.cjs +2 -0
  547. package/dist/starts-with.cjs.map +1 -0
  548. package/dist/starts-with.js +2 -0
  549. package/dist/starts-with.js.map +1 -0
  550. package/dist/string-to-path.cjs +2 -1
  551. package/dist/string-to-path.cjs.map +1 -0
  552. package/dist/string-to-path.js.map +1 -1
  553. package/dist/subtract.cjs +2 -1
  554. package/dist/subtract.cjs.map +1 -0
  555. package/dist/subtract.js +1 -1
  556. package/dist/subtract.js.map +1 -1
  557. package/dist/sum-by.cjs +2 -1
  558. package/dist/sum-by.cjs.map +1 -0
  559. package/dist/sum-by.js +1 -1
  560. package/dist/sum-by.js.map +1 -1
  561. package/dist/sum.cjs +2 -1
  562. package/dist/sum.cjs.map +1 -0
  563. package/dist/sum.js +1 -1
  564. package/dist/sum.js.map +1 -1
  565. package/dist/swap-in-place-BzNaxwB3.js +2 -0
  566. package/dist/swap-in-place-BzNaxwB3.js.map +1 -0
  567. package/dist/swap-in-place-D1vasegg.cjs +2 -0
  568. package/dist/swap-in-place-D1vasegg.cjs.map +1 -0
  569. package/dist/swap-indices.cjs +2 -1
  570. package/dist/swap-indices.cjs.map +1 -0
  571. package/dist/swap-indices.js +1 -1
  572. package/dist/swap-indices.js.map +1 -1
  573. package/dist/swap-props.cjs +2 -1
  574. package/dist/swap-props.cjs.map +1 -0
  575. package/dist/swap-props.js +1 -1
  576. package/dist/swap-props.js.map +1 -1
  577. package/dist/take-first-by.cjs +2 -1
  578. package/dist/take-first-by.cjs.map +1 -0
  579. package/dist/take-first-by.js +1 -1
  580. package/dist/take-first-by.js.map +1 -1
  581. package/dist/take-last-while.cjs +2 -1
  582. package/dist/take-last-while.cjs.map +1 -0
  583. package/dist/take-last-while.js +1 -1
  584. package/dist/take-last-while.js.map +1 -1
  585. package/dist/take-last.cjs +2 -1
  586. package/dist/take-last.cjs.map +1 -0
  587. package/dist/take-last.js +1 -1
  588. package/dist/take-last.js.map +1 -1
  589. package/dist/take-while.cjs +2 -1
  590. package/dist/take-while.cjs.map +1 -0
  591. package/dist/take-while.js +1 -1
  592. package/dist/take-while.js.map +1 -1
  593. package/dist/take.cjs +2 -1
  594. package/dist/take.cjs.map +1 -0
  595. package/dist/take.js +1 -1
  596. package/dist/take.js.map +1 -1
  597. package/dist/tap.cjs +2 -1
  598. package/dist/tap.cjs.map +1 -0
  599. package/dist/tap.js +1 -1
  600. package/dist/tap.js.map +1 -1
  601. package/dist/times.cjs +2 -1
  602. package/dist/times.cjs.map +1 -0
  603. package/dist/times.js +1 -1
  604. package/dist/times.js.map +1 -1
  605. package/dist/to-camel-case.cjs +2 -1
  606. package/dist/to-camel-case.cjs.map +1 -0
  607. package/dist/to-camel-case.js +1 -1
  608. package/dist/to-camel-case.js.map +1 -1
  609. package/dist/to-kebab-case.cjs +2 -1
  610. package/dist/to-kebab-case.cjs.map +1 -0
  611. package/dist/to-kebab-case.js +1 -1
  612. package/dist/to-kebab-case.js.map +1 -1
  613. package/dist/to-lower-case.cjs +2 -1
  614. package/dist/to-lower-case.cjs.map +1 -0
  615. package/dist/to-lower-case.js +1 -1
  616. package/dist/to-lower-case.js.map +1 -1
  617. package/dist/to-single-BunGuk7o.cjs +2 -0
  618. package/dist/to-single-BunGuk7o.cjs.map +1 -0
  619. package/dist/to-single-XEXXW73e.js +2 -0
  620. package/dist/to-single-XEXXW73e.js.map +1 -0
  621. package/dist/to-snake-case.cjs +2 -1
  622. package/dist/to-snake-case.cjs.map +1 -0
  623. package/dist/to-snake-case.js +1 -1
  624. package/dist/to-snake-case.js.map +1 -1
  625. package/dist/to-title-case.cjs +2 -1
  626. package/dist/to-title-case.cjs.map +1 -0
  627. package/dist/to-title-case.js +1 -1
  628. package/dist/to-title-case.js.map +1 -1
  629. package/dist/to-upper-case.cjs +2 -1
  630. package/dist/to-upper-case.cjs.map +1 -0
  631. package/dist/to-upper-case.js +1 -1
  632. package/dist/to-upper-case.js.map +1 -1
  633. package/dist/truncate.cjs +2 -0
  634. package/dist/truncate.cjs.map +1 -0
  635. package/dist/truncate.js +2 -0
  636. package/dist/truncate.js.map +1 -0
  637. package/dist/uncapitalize.cjs +2 -1
  638. package/dist/uncapitalize.cjs.map +1 -0
  639. package/dist/uncapitalize.js +1 -1
  640. package/dist/uncapitalize.js.map +1 -1
  641. package/dist/unique-by.cjs +2 -1
  642. package/dist/unique-by.cjs.map +1 -0
  643. package/dist/unique-by.js +1 -1
  644. package/dist/unique-by.js.map +1 -1
  645. package/dist/unique-with.cjs +2 -1
  646. package/dist/unique-with.cjs.map +1 -0
  647. package/dist/unique-with.js +1 -1
  648. package/dist/unique-with.js.map +1 -1
  649. package/dist/unique.cjs +2 -1
  650. package/dist/unique.cjs.map +1 -0
  651. package/dist/unique.js +1 -1
  652. package/dist/unique.js.map +1 -1
  653. package/dist/utility-evaluators-C8koSp9T.cjs +2 -0
  654. package/dist/utility-evaluators-C8koSp9T.cjs.map +1 -0
  655. package/dist/utility-evaluators-ZAaUtL2Z.js +2 -0
  656. package/dist/utility-evaluators-ZAaUtL2Z.js.map +1 -0
  657. package/dist/values.cjs +2 -1
  658. package/dist/values.cjs.map +1 -0
  659. package/dist/values.js +1 -1
  660. package/dist/values.js.map +1 -1
  661. package/dist/when.cjs +2 -0
  662. package/dist/when.cjs.map +1 -0
  663. package/dist/when.js +2 -0
  664. package/dist/when.js.map +1 -0
  665. package/dist/with-precision-CgRuf7Wl.js +2 -0
  666. package/dist/with-precision-CgRuf7Wl.js.map +1 -0
  667. package/dist/with-precision-DVi9325n.cjs +2 -0
  668. package/dist/with-precision-DVi9325n.cjs.map +1 -0
  669. package/dist/words-B9lX8euz.js +3 -0
  670. package/dist/words-B9lX8euz.js.map +1 -0
  671. package/dist/words-_h74qi45.cjs +3 -0
  672. package/dist/words-_h74qi45.cjs.map +1 -0
  673. package/dist/zip-with.cjs +2 -1
  674. package/dist/zip-with.cjs.map +1 -0
  675. package/dist/zip-with.js +1 -1
  676. package/dist/zip-with.js.map +1 -1
  677. package/dist/zip.cjs +2 -1
  678. package/dist/zip.cjs.map +1 -0
  679. package/dist/zip.js +1 -1
  680. package/dist/zip.js.map +1 -1
  681. package/package.json +16 -18
  682. package/dist/add-prop.d.cts +0 -46
  683. package/dist/add-prop.d.cts.map +0 -1
  684. package/dist/add-prop.d.ts +0 -46
  685. package/dist/add-prop.d.ts.map +0 -1
  686. package/dist/add.d.cts +0 -34
  687. package/dist/add.d.cts.map +0 -1
  688. package/dist/add.d.ts +0 -34
  689. package/dist/add.d.ts.map +0 -1
  690. package/dist/all-pass.d.cts +0 -37
  691. package/dist/all-pass.d.cts.map +0 -1
  692. package/dist/all-pass.d.ts +0 -37
  693. package/dist/all-pass.d.ts.map +0 -1
  694. package/dist/any-pass.d.cts +0 -37
  695. package/dist/any-pass.d.cts.map +0 -1
  696. package/dist/any-pass.d.ts +0 -37
  697. package/dist/any-pass.d.ts.map +0 -1
  698. package/dist/array-required-prefix-BFDM7eSS.d.cts +0 -26
  699. package/dist/array-required-prefix-BFDM7eSS.d.cts.map +0 -1
  700. package/dist/array-required-prefix-DwpaLy0D.d.ts +0 -26
  701. package/dist/array-required-prefix-DwpaLy0D.d.ts.map +0 -1
  702. package/dist/binary-search-cutoff-index-CN25H71A.js +0 -2
  703. package/dist/binary-search-cutoff-index-CN25H71A.js.map +0 -1
  704. package/dist/binary-search-cutoff-index-ClkmTCR5.cjs +0 -1
  705. package/dist/bounded-partial-CPc1XU57.d.ts +0 -17
  706. package/dist/bounded-partial-CPc1XU57.d.ts.map +0 -1
  707. package/dist/bounded-partial-CtOsGqxa.d.cts +0 -17
  708. package/dist/bounded-partial-CtOsGqxa.d.cts.map +0 -1
  709. package/dist/capitalize.d.cts +0 -53
  710. package/dist/capitalize.d.cts.map +0 -1
  711. package/dist/capitalize.d.ts +0 -53
  712. package/dist/capitalize.d.ts.map +0 -1
  713. package/dist/ceil.d.cts +0 -39
  714. package/dist/ceil.d.cts.map +0 -1
  715. package/dist/ceil.d.ts +0 -39
  716. package/dist/ceil.d.ts.map +0 -1
  717. package/dist/chunk.d.cts +0 -76
  718. package/dist/chunk.d.cts.map +0 -1
  719. package/dist/chunk.d.ts +0 -76
  720. package/dist/chunk.d.ts.map +0 -1
  721. package/dist/clamp.d.cts +0 -37
  722. package/dist/clamp.d.cts.map +0 -1
  723. package/dist/clamp.d.ts +0 -37
  724. package/dist/clamp.d.ts.map +0 -1
  725. package/dist/clamped-integer-subtract-C-AIuFhk.d.ts +0 -11
  726. package/dist/clamped-integer-subtract-C-AIuFhk.d.ts.map +0 -1
  727. package/dist/clamped-integer-subtract-DueGS_u_.d.cts +0 -11
  728. package/dist/clamped-integer-subtract-DueGS_u_.d.cts.map +0 -1
  729. package/dist/clone.d.cts +0 -35
  730. package/dist/clone.d.cts.map +0 -1
  731. package/dist/clone.d.ts +0 -35
  732. package/dist/clone.d.ts.map +0 -1
  733. package/dist/coerced-array-BKR9Bvsl.d.cts +0 -17
  734. package/dist/coerced-array-BKR9Bvsl.d.cts.map +0 -1
  735. package/dist/coerced-array-BfTLxqLo.d.ts +0 -17
  736. package/dist/coerced-array-BfTLxqLo.d.ts.map +0 -1
  737. package/dist/concat.d.cts +0 -41
  738. package/dist/concat.d.cts.map +0 -1
  739. package/dist/concat.d.ts +0 -41
  740. package/dist/concat.d.ts.map +0 -1
  741. package/dist/conditional-6ff4g8Sy.cjs +0 -1
  742. package/dist/conditional-Br0uqqc9.d.cts +0 -221
  743. package/dist/conditional-Br0uqqc9.d.cts.map +0 -1
  744. package/dist/conditional-CDez6uXp.d.ts +0 -221
  745. package/dist/conditional-CDez6uXp.d.ts.map +0 -1
  746. package/dist/conditional-WbmvQs8H.js +0 -2
  747. package/dist/conditional-WbmvQs8H.js.map +0 -1
  748. package/dist/conditional.d.cts +0 -2
  749. package/dist/conditional.d.ts +0 -2
  750. package/dist/constant.d.cts +0 -32
  751. package/dist/constant.d.cts.map +0 -1
  752. package/dist/constant.d.ts +0 -32
  753. package/dist/constant.d.ts.map +0 -1
  754. package/dist/count-by.d.cts +0 -42
  755. package/dist/count-by.d.cts.map +0 -1
  756. package/dist/count-by.d.ts +0 -42
  757. package/dist/count-by.d.ts.map +0 -1
  758. package/dist/curry-BsY0Z8jH.cjs +0 -1
  759. package/dist/curry-CKDQ1osk.d.ts +0 -70
  760. package/dist/curry-CKDQ1osk.d.ts.map +0 -1
  761. package/dist/curry-NmniqyJ0.js +0 -2
  762. package/dist/curry-NmniqyJ0.js.map +0 -1
  763. package/dist/curry-from-lazy-BCGvmhyS.cjs +0 -1
  764. package/dist/curry-from-lazy-PQ0BbG-7.js +0 -2
  765. package/dist/curry-from-lazy-PQ0BbG-7.js.map +0 -1
  766. package/dist/curry-mh6BKSIA.d.cts +0 -70
  767. package/dist/curry-mh6BKSIA.d.cts.map +0 -1
  768. package/dist/curry-order-rules-BoF09Dq2.d.cts +0 -48
  769. package/dist/curry-order-rules-BoF09Dq2.d.cts.map +0 -1
  770. package/dist/curry-order-rules-ClqHrs8_.cjs +0 -1
  771. package/dist/curry-order-rules-CoO4bk5I.d.ts +0 -48
  772. package/dist/curry-order-rules-CoO4bk5I.d.ts.map +0 -1
  773. package/dist/curry-order-rules-DwrF-_P1.js +0 -2
  774. package/dist/curry-order-rules-DwrF-_P1.js.map +0 -1
  775. package/dist/curry.d.cts +0 -2
  776. package/dist/curry.d.ts +0 -2
  777. package/dist/debounce.d.cts +0 -98
  778. package/dist/debounce.d.cts.map +0 -1
  779. package/dist/debounce.d.ts +0 -98
  780. package/dist/debounce.d.ts.map +0 -1
  781. package/dist/deduped-DdwAYzXs.d.cts +0 -23
  782. package/dist/deduped-DdwAYzXs.d.cts.map +0 -1
  783. package/dist/deduped-RY-1u-ns.d.ts +0 -23
  784. package/dist/deduped-RY-1u-ns.d.ts.map +0 -1
  785. package/dist/difference-with.d.cts +0 -48
  786. package/dist/difference-with.d.cts.map +0 -1
  787. package/dist/difference-with.d.ts +0 -48
  788. package/dist/difference-with.d.ts.map +0 -1
  789. package/dist/difference.d.cts +0 -37
  790. package/dist/difference.d.cts.map +0 -1
  791. package/dist/difference.d.ts +0 -37
  792. package/dist/difference.d.ts.map +0 -1
  793. package/dist/dist-8XtUY3ad.cjs +0 -114
  794. package/dist/dist-Bd1vawFi.js +0 -103
  795. package/dist/dist-Bd1vawFi.js.map +0 -1
  796. package/dist/divide.d.cts +0 -33
  797. package/dist/divide.d.cts.map +0 -1
  798. package/dist/divide.d.ts +0 -33
  799. package/dist/divide.d.ts.map +0 -1
  800. package/dist/do-nothing.d.cts +0 -28
  801. package/dist/do-nothing.d.cts.map +0 -1
  802. package/dist/do-nothing.d.ts +0 -28
  803. package/dist/do-nothing.d.ts.map +0 -1
  804. package/dist/drop-first-by.d.cts +0 -41
  805. package/dist/drop-first-by.d.cts.map +0 -1
  806. package/dist/drop-first-by.d.ts +0 -41
  807. package/dist/drop-first-by.d.ts.map +0 -1
  808. package/dist/drop-last-while.d.cts +0 -36
  809. package/dist/drop-last-while.d.cts.map +0 -1
  810. package/dist/drop-last-while.d.ts +0 -36
  811. package/dist/drop-last-while.d.ts.map +0 -1
  812. package/dist/drop-last.d.cts +0 -32
  813. package/dist/drop-last.d.cts.map +0 -1
  814. package/dist/drop-last.d.ts +0 -32
  815. package/dist/drop-last.d.ts.map +0 -1
  816. package/dist/drop-while.d.cts +0 -36
  817. package/dist/drop-while.d.cts.map +0 -1
  818. package/dist/drop-while.d.ts +0 -36
  819. package/dist/drop-while.d.ts.map +0 -1
  820. package/dist/drop.d.cts +0 -40
  821. package/dist/drop.d.cts.map +0 -1
  822. package/dist/drop.d.ts +0 -40
  823. package/dist/drop.d.ts.map +0 -1
  824. package/dist/entries.d.cts +0 -31
  825. package/dist/entries.d.cts.map +0 -1
  826. package/dist/entries.d.ts +0 -31
  827. package/dist/entries.d.ts.map +0 -1
  828. package/dist/enumerable-string-key-of-CZQf3ld_.d.ts +0 -17
  829. package/dist/enumerable-string-key-of-CZQf3ld_.d.ts.map +0 -1
  830. package/dist/enumerable-string-key-of-DhcNc5iz.d.cts +0 -17
  831. package/dist/enumerable-string-key-of-DhcNc5iz.d.cts.map +0 -1
  832. package/dist/enumerable-string-keyed-value-of-CRlVAvdp.d.ts +0 -12
  833. package/dist/enumerable-string-keyed-value-of-CRlVAvdp.d.ts.map +0 -1
  834. package/dist/enumerable-string-keyed-value-of-icm2q60J.d.cts +0 -12
  835. package/dist/enumerable-string-keyed-value-of-icm2q60J.d.cts.map +0 -1
  836. package/dist/evolve.d.cts +0 -101
  837. package/dist/evolve.d.cts.map +0 -1
  838. package/dist/evolve.d.ts +0 -101
  839. package/dist/evolve.d.ts.map +0 -1
  840. package/dist/filter.d.cts +0 -50
  841. package/dist/filter.d.cts.map +0 -1
  842. package/dist/filter.d.ts +0 -50
  843. package/dist/filter.d.ts.map +0 -1
  844. package/dist/filtered-array-C--8loav.d.cts +0 -22
  845. package/dist/filtered-array-C--8loav.d.cts.map +0 -1
  846. package/dist/filtered-array-wtIEwdU7.d.ts +0 -22
  847. package/dist/filtered-array-wtIEwdU7.d.ts.map +0 -1
  848. package/dist/find-index.d.cts +0 -50
  849. package/dist/find-index.d.cts.map +0 -1
  850. package/dist/find-index.d.ts +0 -50
  851. package/dist/find-index.d.ts.map +0 -1
  852. package/dist/find-last-index.d.cts +0 -50
  853. package/dist/find-last-index.d.cts.map +0 -1
  854. package/dist/find-last-index.d.ts +0 -50
  855. package/dist/find-last-index.d.ts.map +0 -1
  856. package/dist/find-last.d.cts +0 -62
  857. package/dist/find-last.d.cts.map +0 -1
  858. package/dist/find-last.d.ts +0 -62
  859. package/dist/find-last.d.ts.map +0 -1
  860. package/dist/find.d.cts +0 -64
  861. package/dist/find.d.cts.map +0 -1
  862. package/dist/find.d.ts +0 -64
  863. package/dist/find.d.ts.map +0 -1
  864. package/dist/first-by.d.cts +0 -60
  865. package/dist/first-by.d.cts.map +0 -1
  866. package/dist/first-by.d.ts +0 -60
  867. package/dist/first-by.d.ts.map +0 -1
  868. package/dist/first.d.cts +0 -40
  869. package/dist/first.d.cts.map +0 -1
  870. package/dist/first.d.ts +0 -40
  871. package/dist/first.d.ts.map +0 -1
  872. package/dist/flat-map.d.cts +0 -47
  873. package/dist/flat-map.d.cts.map +0 -1
  874. package/dist/flat-map.d.ts +0 -47
  875. package/dist/flat-map.d.ts.map +0 -1
  876. package/dist/flat.d.cts +0 -53
  877. package/dist/flat.d.cts.map +0 -1
  878. package/dist/flat.d.ts +0 -53
  879. package/dist/flat.d.ts.map +0 -1
  880. package/dist/floor.d.cts +0 -39
  881. package/dist/floor.d.cts.map +0 -1
  882. package/dist/floor.d.ts +0 -39
  883. package/dist/floor.d.ts.map +0 -1
  884. package/dist/for-each-obj.d.cts +0 -47
  885. package/dist/for-each-obj.d.cts.map +0 -1
  886. package/dist/for-each-obj.d.ts +0 -47
  887. package/dist/for-each-obj.d.ts.map +0 -1
  888. package/dist/for-each.d.cts +0 -54
  889. package/dist/for-each.d.cts.map +0 -1
  890. package/dist/for-each.d.ts +0 -54
  891. package/dist/for-each.d.ts.map +0 -1
  892. package/dist/from-entries.d.cts +0 -68
  893. package/dist/from-entries.d.cts.map +0 -1
  894. package/dist/from-entries.d.ts +0 -68
  895. package/dist/from-entries.d.ts.map +0 -1
  896. package/dist/from-keys.d.cts +0 -60
  897. package/dist/from-keys.d.cts.map +0 -1
  898. package/dist/from-keys.d.ts +0 -60
  899. package/dist/from-keys.d.ts.map +0 -1
  900. package/dist/funnel.d.cts +0 -155
  901. package/dist/funnel.d.cts.map +0 -1
  902. package/dist/funnel.d.ts +0 -155
  903. package/dist/funnel.d.ts.map +0 -1
  904. package/dist/funnel.lodash-debounce-with-cached-value.test.cjs +0 -1
  905. package/dist/funnel.lodash-debounce-with-cached-value.test.d.cts +0 -1
  906. package/dist/funnel.lodash-debounce-with-cached-value.test.d.ts +0 -1
  907. package/dist/funnel.lodash-debounce-with-cached-value.test.js +0 -2
  908. package/dist/funnel.lodash-debounce-with-cached-value.test.js.map +0 -1
  909. package/dist/funnel.lodash-debounce.test.cjs +0 -1
  910. package/dist/funnel.lodash-debounce.test.d.cts +0 -1
  911. package/dist/funnel.lodash-debounce.test.d.ts +0 -1
  912. package/dist/funnel.lodash-debounce.test.js +0 -2
  913. package/dist/funnel.lodash-debounce.test.js.map +0 -1
  914. package/dist/funnel.lodash-throttle-with-cached-value.test.cjs +0 -1
  915. package/dist/funnel.lodash-throttle-with-cached-value.test.d.cts +0 -1
  916. package/dist/funnel.lodash-throttle-with-cached-value.test.d.ts +0 -1
  917. package/dist/funnel.lodash-throttle-with-cached-value.test.js +0 -2
  918. package/dist/funnel.lodash-throttle-with-cached-value.test.js.map +0 -1
  919. package/dist/funnel.lodash-throttle.test.cjs +0 -1
  920. package/dist/funnel.lodash-throttle.test.d.cts +0 -1
  921. package/dist/funnel.lodash-throttle.test.d.ts +0 -1
  922. package/dist/funnel.lodash-throttle.test.js +0 -2
  923. package/dist/funnel.lodash-throttle.test.js.map +0 -1
  924. package/dist/funnel.perkakas-debounce.test.cjs +0 -1
  925. package/dist/funnel.perkakas-debounce.test.d.cts +0 -1
  926. package/dist/funnel.perkakas-debounce.test.d.ts +0 -1
  927. package/dist/funnel.perkakas-debounce.test.js +0 -2
  928. package/dist/funnel.perkakas-debounce.test.js.map +0 -1
  929. package/dist/funnel.reference-batch.test.cjs +0 -1
  930. package/dist/funnel.reference-batch.test.d.cts +0 -1
  931. package/dist/funnel.reference-batch.test.d.ts +0 -1
  932. package/dist/funnel.reference-batch.test.js +0 -2
  933. package/dist/funnel.reference-batch.test.js.map +0 -1
  934. package/dist/funnel.test-d.cjs +0 -1
  935. package/dist/funnel.test-d.d.cts +0 -1
  936. package/dist/funnel.test-d.d.ts +0 -1
  937. package/dist/funnel.test-d.js +0 -2
  938. package/dist/funnel.test-d.js.map +0 -1
  939. package/dist/funnel.test.cjs +0 -1
  940. package/dist/funnel.test.d.cts +0 -1
  941. package/dist/funnel.test.d.ts +0 -1
  942. package/dist/funnel.test.js +0 -2
  943. package/dist/funnel.test.js.map +0 -1
  944. package/dist/group-by-prop.d.cts +0 -89
  945. package/dist/group-by-prop.d.cts.map +0 -1
  946. package/dist/group-by-prop.d.ts +0 -89
  947. package/dist/group-by-prop.d.ts.map +0 -1
  948. package/dist/group-by.d.cts +0 -69
  949. package/dist/group-by.d.cts.map +0 -1
  950. package/dist/group-by.d.ts +0 -69
  951. package/dist/group-by.d.ts.map +0 -1
  952. package/dist/has-at-least-BXwOPLQK.cjs +0 -1
  953. package/dist/has-at-least-Coy9sM-B.js +0 -2
  954. package/dist/has-at-least-Coy9sM-B.js.map +0 -1
  955. package/dist/has-at-least.d.cts +0 -59
  956. package/dist/has-at-least.d.cts.map +0 -1
  957. package/dist/has-at-least.d.ts +0 -59
  958. package/dist/has-at-least.d.ts.map +0 -1
  959. package/dist/has-sub-object.d.cts +0 -44
  960. package/dist/has-sub-object.d.cts.map +0 -1
  961. package/dist/has-sub-object.d.ts +0 -44
  962. package/dist/has-sub-object.d.ts.map +0 -1
  963. package/dist/heap-BhpfhYWj.js +0 -2
  964. package/dist/heap-BhpfhYWj.js.map +0 -1
  965. package/dist/heap-DWDhbxfx.cjs +0 -1
  966. package/dist/human-readable-file-size.d.cts +0 -17
  967. package/dist/human-readable-file-size.d.cts.map +0 -1
  968. package/dist/human-readable-file-size.d.ts +0 -17
  969. package/dist/human-readable-file-size.d.ts.map +0 -1
  970. package/dist/identity.d.cts +0 -22
  971. package/dist/identity.d.cts.map +0 -1
  972. package/dist/identity.d.ts +0 -22
  973. package/dist/identity.d.ts.map +0 -1
  974. package/dist/index-by.d.cts +0 -53
  975. package/dist/index-by.d.cts.map +0 -1
  976. package/dist/index-by.d.ts +0 -53
  977. package/dist/index-by.d.ts.map +0 -1
  978. package/dist/int-range-inclusive-BlGXX6Cz.d.ts +0 -15
  979. package/dist/int-range-inclusive-BlGXX6Cz.d.ts.map +0 -1
  980. package/dist/int-range-inclusive-KocNpK0p.d.cts +0 -15
  981. package/dist/int-range-inclusive-KocNpK0p.d.cts.map +0 -1
  982. package/dist/intersection-with.d.cts +0 -54
  983. package/dist/intersection-with.d.cts.map +0 -1
  984. package/dist/intersection-with.d.ts +0 -54
  985. package/dist/intersection-with.d.ts.map +0 -1
  986. package/dist/intersection.d.cts +0 -37
  987. package/dist/intersection.d.cts.map +0 -1
  988. package/dist/intersection.d.ts +0 -37
  989. package/dist/intersection.d.ts.map +0 -1
  990. package/dist/invert.d.cts +0 -33
  991. package/dist/invert.d.cts.map +0 -1
  992. package/dist/invert.d.ts +0 -33
  993. package/dist/invert.d.ts.map +0 -1
  994. package/dist/is-array.d.cts +0 -21
  995. package/dist/is-array.d.cts.map +0 -1
  996. package/dist/is-array.d.ts +0 -21
  997. package/dist/is-array.d.ts.map +0 -1
  998. package/dist/is-big-int.d.cts +0 -22
  999. package/dist/is-big-int.d.cts.map +0 -1
  1000. package/dist/is-big-int.d.ts +0 -22
  1001. package/dist/is-big-int.d.ts.map +0 -1
  1002. package/dist/is-boolean.d.cts +0 -21
  1003. package/dist/is-boolean.d.cts.map +0 -1
  1004. package/dist/is-boolean.d.ts +0 -21
  1005. package/dist/is-boolean.d.ts.map +0 -1
  1006. package/dist/is-bounded-record-Bx4n8QB0.d.ts +0 -34
  1007. package/dist/is-bounded-record-Bx4n8QB0.d.ts.map +0 -1
  1008. package/dist/is-bounded-record-DV6ZQk9H.d.cts +0 -34
  1009. package/dist/is-bounded-record-DV6ZQk9H.d.cts.map +0 -1
  1010. package/dist/is-date.d.cts +0 -17
  1011. package/dist/is-date.d.cts.map +0 -1
  1012. package/dist/is-date.d.ts +0 -17
  1013. package/dist/is-date.d.ts.map +0 -1
  1014. package/dist/is-deep-equal.d.cts +0 -71
  1015. package/dist/is-deep-equal.d.cts.map +0 -1
  1016. package/dist/is-deep-equal.d.ts +0 -71
  1017. package/dist/is-deep-equal.d.ts.map +0 -1
  1018. package/dist/is-defined.d.cts +0 -19
  1019. package/dist/is-defined.d.cts.map +0 -1
  1020. package/dist/is-defined.d.ts +0 -19
  1021. package/dist/is-defined.d.ts.map +0 -1
  1022. package/dist/is-empty.d.cts +0 -35
  1023. package/dist/is-empty.d.cts.map +0 -1
  1024. package/dist/is-empty.d.ts +0 -35
  1025. package/dist/is-empty.d.ts.map +0 -1
  1026. package/dist/is-emptyish-9tX94IVx.d.cts +0 -73
  1027. package/dist/is-emptyish-9tX94IVx.d.cts.map +0 -1
  1028. package/dist/is-emptyish-DVFGJe-T.d.ts +0 -73
  1029. package/dist/is-emptyish-DVFGJe-T.d.ts.map +0 -1
  1030. package/dist/is-emptyish.d.cts +0 -2
  1031. package/dist/is-emptyish.d.ts +0 -2
  1032. package/dist/is-emptyish.test-d.cjs +0 -1
  1033. package/dist/is-emptyish.test-d.d.cts +0 -8
  1034. package/dist/is-emptyish.test-d.d.cts.map +0 -1
  1035. package/dist/is-emptyish.test-d.d.ts +0 -8
  1036. package/dist/is-emptyish.test-d.d.ts.map +0 -1
  1037. package/dist/is-emptyish.test-d.js +0 -2
  1038. package/dist/is-emptyish.test-d.js.map +0 -1
  1039. package/dist/is-emptyish.test.cjs +0 -1
  1040. package/dist/is-emptyish.test.d.cts +0 -1
  1041. package/dist/is-emptyish.test.d.ts +0 -1
  1042. package/dist/is-emptyish.test.js +0 -2
  1043. package/dist/is-emptyish.test.js.map +0 -1
  1044. package/dist/is-error.d.cts +0 -18
  1045. package/dist/is-error.d.cts.map +0 -1
  1046. package/dist/is-error.d.ts +0 -18
  1047. package/dist/is-error.d.ts.map +0 -1
  1048. package/dist/is-function.d.cts +0 -21
  1049. package/dist/is-function.d.cts.map +0 -1
  1050. package/dist/is-function.d.ts +0 -21
  1051. package/dist/is-function.d.ts.map +0 -1
  1052. package/dist/is-included-in.d.cts +0 -109
  1053. package/dist/is-included-in.d.cts.map +0 -1
  1054. package/dist/is-included-in.d.ts +0 -109
  1055. package/dist/is-included-in.d.ts.map +0 -1
  1056. package/dist/is-non-null.d.cts +0 -19
  1057. package/dist/is-non-null.d.cts.map +0 -1
  1058. package/dist/is-non-null.d.ts +0 -19
  1059. package/dist/is-non-null.d.ts.map +0 -1
  1060. package/dist/is-non-nullish.d.cts +0 -20
  1061. package/dist/is-non-nullish.d.cts.map +0 -1
  1062. package/dist/is-non-nullish.d.ts +0 -20
  1063. package/dist/is-non-nullish.d.ts.map +0 -1
  1064. package/dist/is-not.d.cts +0 -19
  1065. package/dist/is-not.d.cts.map +0 -1
  1066. package/dist/is-not.d.ts +0 -19
  1067. package/dist/is-not.d.ts.map +0 -1
  1068. package/dist/is-nullish.d.cts +0 -23
  1069. package/dist/is-nullish.d.cts.map +0 -1
  1070. package/dist/is-nullish.d.ts +0 -23
  1071. package/dist/is-nullish.d.ts.map +0 -1
  1072. package/dist/is-number.d.cts +0 -22
  1073. package/dist/is-number.d.cts.map +0 -1
  1074. package/dist/is-number.d.ts +0 -22
  1075. package/dist/is-number.d.ts.map +0 -1
  1076. package/dist/is-object-type.d.cts +0 -35
  1077. package/dist/is-object-type.d.cts.map +0 -1
  1078. package/dist/is-object-type.d.ts +0 -35
  1079. package/dist/is-object-type.d.ts.map +0 -1
  1080. package/dist/is-plain-object.d.cts +0 -33
  1081. package/dist/is-plain-object.d.cts.map +0 -1
  1082. package/dist/is-plain-object.d.ts +0 -33
  1083. package/dist/is-plain-object.d.ts.map +0 -1
  1084. package/dist/is-promise.d.cts +0 -18
  1085. package/dist/is-promise.d.cts.map +0 -1
  1086. package/dist/is-promise.d.ts +0 -18
  1087. package/dist/is-promise.d.ts.map +0 -1
  1088. package/dist/is-shallow-equal.d.cts +0 -71
  1089. package/dist/is-shallow-equal.d.cts.map +0 -1
  1090. package/dist/is-shallow-equal.d.ts +0 -71
  1091. package/dist/is-shallow-equal.d.ts.map +0 -1
  1092. package/dist/is-strict-equal.d.cts +0 -67
  1093. package/dist/is-strict-equal.d.cts.map +0 -1
  1094. package/dist/is-strict-equal.d.ts +0 -67
  1095. package/dist/is-strict-equal.d.ts.map +0 -1
  1096. package/dist/is-string.d.cts +0 -20
  1097. package/dist/is-string.d.cts.map +0 -1
  1098. package/dist/is-string.d.ts +0 -20
  1099. package/dist/is-string.d.ts.map +0 -1
  1100. package/dist/is-symbol.d.cts +0 -20
  1101. package/dist/is-symbol.d.cts.map +0 -1
  1102. package/dist/is-symbol.d.ts +0 -20
  1103. package/dist/is-symbol.d.ts.map +0 -1
  1104. package/dist/is-truthy.d.cts +0 -21
  1105. package/dist/is-truthy.d.cts.map +0 -1
  1106. package/dist/is-truthy.d.ts +0 -21
  1107. package/dist/is-truthy.d.ts.map +0 -1
  1108. package/dist/iterable-container-1TN3AJ3s.d.cts +0 -17
  1109. package/dist/iterable-container-1TN3AJ3s.d.cts.map +0 -1
  1110. package/dist/iterable-container-Dv5vSKht.d.ts +0 -17
  1111. package/dist/iterable-container-Dv5vSKht.d.ts.map +0 -1
  1112. package/dist/join.d.cts +0 -46
  1113. package/dist/join.d.cts.map +0 -1
  1114. package/dist/join.d.ts +0 -46
  1115. package/dist/join.d.ts.map +0 -1
  1116. package/dist/key-codes.d.cts +0 -29
  1117. package/dist/key-codes.d.cts.map +0 -1
  1118. package/dist/key-codes.d.ts +0 -29
  1119. package/dist/key-codes.d.ts.map +0 -1
  1120. package/dist/keys.d.cts +0 -38
  1121. package/dist/keys.d.cts.map +0 -1
  1122. package/dist/keys.d.ts +0 -38
  1123. package/dist/keys.d.ts.map +0 -1
  1124. package/dist/last.d.cts +0 -37
  1125. package/dist/last.d.cts.map +0 -1
  1126. package/dist/last.d.ts +0 -37
  1127. package/dist/last.d.ts.map +0 -1
  1128. package/dist/lazy-data-last-impl-D4kLybyP.cjs +0 -1
  1129. package/dist/lazy-data-last-impl-R05wr4K6.js +0 -2
  1130. package/dist/lazy-data-last-impl-R05wr4K6.js.map +0 -1
  1131. package/dist/length.d.cts +0 -28
  1132. package/dist/length.d.cts.map +0 -1
  1133. package/dist/length.d.ts +0 -28
  1134. package/dist/length.d.ts.map +0 -1
  1135. package/dist/magic-string.es-94aXgwpn.js +0 -15
  1136. package/dist/magic-string.es-94aXgwpn.js.map +0 -1
  1137. package/dist/magic-string.es-CGYIWauW.cjs +0 -15
  1138. package/dist/map-keys.d.cts +0 -34
  1139. package/dist/map-keys.d.cts.map +0 -1
  1140. package/dist/map-keys.d.ts +0 -34
  1141. package/dist/map-keys.d.ts.map +0 -1
  1142. package/dist/map-to-obj.d.cts +0 -68
  1143. package/dist/map-to-obj.d.cts.map +0 -1
  1144. package/dist/map-to-obj.d.ts +0 -68
  1145. package/dist/map-to-obj.d.ts.map +0 -1
  1146. package/dist/map-values.d.cts +0 -42
  1147. package/dist/map-values.d.cts.map +0 -1
  1148. package/dist/map-values.d.ts +0 -42
  1149. package/dist/map-values.d.ts.map +0 -1
  1150. package/dist/map-with-feedback.d.cts +0 -54
  1151. package/dist/map-with-feedback.d.cts.map +0 -1
  1152. package/dist/map-with-feedback.d.ts +0 -54
  1153. package/dist/map-with-feedback.d.ts.map +0 -1
  1154. package/dist/map.d.cts +0 -47
  1155. package/dist/map.d.cts.map +0 -1
  1156. package/dist/map.d.ts +0 -47
  1157. package/dist/map.d.ts.map +0 -1
  1158. package/dist/mapped-BbrC9t3s.d.ts +0 -7
  1159. package/dist/mapped-BbrC9t3s.d.ts.map +0 -1
  1160. package/dist/mapped-CkRNfTnY.d.cts +0 -7
  1161. package/dist/mapped-CkRNfTnY.d.cts.map +0 -1
  1162. package/dist/mean-by.d.cts +0 -35
  1163. package/dist/mean-by.d.cts.map +0 -1
  1164. package/dist/mean-by.d.ts +0 -35
  1165. package/dist/mean-by.d.ts.map +0 -1
  1166. package/dist/merge-all-CISawx-J.d.cts +0 -42
  1167. package/dist/merge-all-CISawx-J.d.cts.map +0 -1
  1168. package/dist/merge-all-DJ6n7R1b.d.ts +0 -42
  1169. package/dist/merge-all-DJ6n7R1b.d.ts.map +0 -1
  1170. package/dist/merge-all.d.cts +0 -2
  1171. package/dist/merge-all.d.ts +0 -2
  1172. package/dist/merge-deep.d.cts +0 -37
  1173. package/dist/merge-deep.d.cts.map +0 -1
  1174. package/dist/merge-deep.d.ts +0 -37
  1175. package/dist/merge-deep.d.ts.map +0 -1
  1176. package/dist/merge.d.cts +0 -57
  1177. package/dist/merge.d.cts.map +0 -1
  1178. package/dist/merge.d.ts +0 -57
  1179. package/dist/merge.d.ts.map +0 -1
  1180. package/dist/multiply.d.cts +0 -33
  1181. package/dist/multiply.d.cts.map +0 -1
  1182. package/dist/multiply.d.ts +0 -33
  1183. package/dist/multiply.d.ts.map +0 -1
  1184. package/dist/n-tuple-BkMobYQ9.d.cts +0 -12
  1185. package/dist/n-tuple-BkMobYQ9.d.cts.map +0 -1
  1186. package/dist/n-tuple-zo5g_mSL.d.ts +0 -12
  1187. package/dist/n-tuple-zo5g_mSL.d.ts.map +0 -1
  1188. package/dist/narrowed-to-B7tkuY2k.d.ts +0 -15
  1189. package/dist/narrowed-to-B7tkuY2k.d.ts.map +0 -1
  1190. package/dist/narrowed-to-D_6H-aZW.d.cts +0 -15
  1191. package/dist/narrowed-to-D_6H-aZW.d.cts.map +0 -1
  1192. package/dist/non-empty-array-DHAKSw6t.d.ts +0 -5
  1193. package/dist/non-empty-array-DHAKSw6t.d.ts.map +0 -1
  1194. package/dist/non-empty-array-NDjbHRjk.d.cts +0 -5
  1195. package/dist/non-empty-array-NDjbHRjk.d.cts.map +0 -1
  1196. package/dist/nth-by-Bby4vIbZ.cjs +0 -1
  1197. package/dist/nth-by-JP3-Htbo.js +0 -2
  1198. package/dist/nth-by-JP3-Htbo.js.map +0 -1
  1199. package/dist/nth-by.d.cts +0 -42
  1200. package/dist/nth-by.d.cts.map +0 -1
  1201. package/dist/nth-by.d.ts +0 -42
  1202. package/dist/nth-by.d.ts.map +0 -1
  1203. package/dist/obj-of.d.cts +0 -27
  1204. package/dist/obj-of.d.cts.map +0 -1
  1205. package/dist/obj-of.d.ts +0 -27
  1206. package/dist/obj-of.d.ts.map +0 -1
  1207. package/dist/omit-DI8DRDHj.d.ts +0 -71
  1208. package/dist/omit-DI8DRDHj.d.ts.map +0 -1
  1209. package/dist/omit-DQiCiWAg.d.cts +0 -71
  1210. package/dist/omit-DQiCiWAg.d.cts.map +0 -1
  1211. package/dist/omit-by.d.cts +0 -52
  1212. package/dist/omit-by.d.cts.map +0 -1
  1213. package/dist/omit-by.d.ts +0 -52
  1214. package/dist/omit-by.d.ts.map +0 -1
  1215. package/dist/omit.d.cts +0 -2
  1216. package/dist/omit.d.ts +0 -2
  1217. package/dist/once.d.cts +0 -17
  1218. package/dist/once.d.cts.map +0 -1
  1219. package/dist/once.d.ts +0 -17
  1220. package/dist/once.d.ts.map +0 -1
  1221. package/dist/only.d.cts +0 -34
  1222. package/dist/only.d.cts.map +0 -1
  1223. package/dist/only.d.ts +0 -34
  1224. package/dist/only.d.ts.map +0 -1
  1225. package/dist/optional-options-with-defaults-BFaBSKkF.d.ts +0 -12
  1226. package/dist/optional-options-with-defaults-BFaBSKkF.d.ts.map +0 -1
  1227. package/dist/optional-options-with-defaults-BZVW8GfC.d.cts +0 -12
  1228. package/dist/optional-options-with-defaults-BZVW8GfC.d.cts.map +0 -1
  1229. package/dist/partial-array-CQF5oggb.d.cts +0 -12
  1230. package/dist/partial-array-CQF5oggb.d.cts.map +0 -1
  1231. package/dist/partial-array-DU-2Vkyx.d.ts +0 -12
  1232. package/dist/partial-array-DU-2Vkyx.d.ts.map +0 -1
  1233. package/dist/partition-by-union-BztEpKVh.d.cts +0 -20
  1234. package/dist/partition-by-union-BztEpKVh.d.cts.map +0 -1
  1235. package/dist/partition-by-union-DnfiiEMU.d.ts +0 -20
  1236. package/dist/partition-by-union-DnfiiEMU.d.ts.map +0 -1
  1237. package/dist/partition.d.cts +0 -51
  1238. package/dist/partition.d.cts.map +0 -1
  1239. package/dist/partition.d.ts +0 -51
  1240. package/dist/partition.d.ts.map +0 -1
  1241. package/dist/path-or.d.cts +0 -87
  1242. package/dist/path-or.d.cts.map +0 -1
  1243. package/dist/path-or.d.ts +0 -87
  1244. package/dist/path-or.d.ts.map +0 -1
  1245. package/dist/perkakas-type-error-B9ULNhW0.d.ts +0 -19
  1246. package/dist/perkakas-type-error-B9ULNhW0.d.ts.map +0 -1
  1247. package/dist/perkakas-type-error-ClCCHBW1.d.cts +0 -19
  1248. package/dist/perkakas-type-error-ClCCHBW1.d.cts.map +0 -1
  1249. package/dist/pick-by.d.cts +0 -68
  1250. package/dist/pick-by.d.cts.map +0 -1
  1251. package/dist/pick-by.d.ts +0 -68
  1252. package/dist/pick-by.d.ts.map +0 -1
  1253. package/dist/pick.d.cts +0 -55
  1254. package/dist/pick.d.cts.map +0 -1
  1255. package/dist/pick.d.ts +0 -55
  1256. package/dist/pick.d.ts.map +0 -1
  1257. package/dist/pipe-CB7Lufqv.cjs +0 -1
  1258. package/dist/pipe-CZKusDA-.js +0 -2
  1259. package/dist/pipe-CZKusDA-.js.map +0 -1
  1260. package/dist/pipe.d.cts +0 -106
  1261. package/dist/pipe.d.cts.map +0 -1
  1262. package/dist/pipe.d.ts +0 -106
  1263. package/dist/pipe.d.ts.map +0 -1
  1264. package/dist/piped.d.cts +0 -31
  1265. package/dist/piped.d.cts.map +0 -1
  1266. package/dist/piped.d.ts +0 -31
  1267. package/dist/piped.d.ts.map +0 -1
  1268. package/dist/product.d.cts +0 -52
  1269. package/dist/product.d.cts.map +0 -1
  1270. package/dist/product.d.ts +0 -52
  1271. package/dist/product.d.ts.map +0 -1
  1272. package/dist/prop-D-4cFXSd.d.cts +0 -85
  1273. package/dist/prop-D-4cFXSd.d.cts.map +0 -1
  1274. package/dist/prop-DL-oRBeN.d.ts +0 -85
  1275. package/dist/prop-DL-oRBeN.d.ts.map +0 -1
  1276. package/dist/prop.d.cts +0 -2
  1277. package/dist/prop.d.ts +0 -2
  1278. package/dist/pull-object.d.cts +0 -70
  1279. package/dist/pull-object.d.cts.map +0 -1
  1280. package/dist/pull-object.d.ts +0 -70
  1281. package/dist/pull-object.d.ts.map +0 -1
  1282. package/dist/random-integer.d.cts +0 -23
  1283. package/dist/random-integer.d.cts.map +0 -1
  1284. package/dist/random-integer.d.ts +0 -23
  1285. package/dist/random-integer.d.ts.map +0 -1
  1286. package/dist/random-string.d.cts +0 -29
  1287. package/dist/random-string.d.cts.map +0 -1
  1288. package/dist/random-string.d.ts +0 -29
  1289. package/dist/random-string.d.ts.map +0 -1
  1290. package/dist/range.d.cts +0 -27
  1291. package/dist/range.d.cts.map +0 -1
  1292. package/dist/range.d.ts +0 -27
  1293. package/dist/range.d.ts.map +0 -1
  1294. package/dist/rank-by.d.cts +0 -45
  1295. package/dist/rank-by.d.cts.map +0 -1
  1296. package/dist/rank-by.d.ts +0 -45
  1297. package/dist/rank-by.d.ts.map +0 -1
  1298. package/dist/reduce.d.cts +0 -53
  1299. package/dist/reduce.d.cts.map +0 -1
  1300. package/dist/reduce.d.ts +0 -53
  1301. package/dist/reduce.d.ts.map +0 -1
  1302. package/dist/reordered-array-BWG6tVSK.d.ts +0 -7
  1303. package/dist/reordered-array-BWG6tVSK.d.ts.map +0 -1
  1304. package/dist/reordered-array-CmReuxDi.d.cts +0 -7
  1305. package/dist/reordered-array-CmReuxDi.d.cts.map +0 -1
  1306. package/dist/reverse.d.cts +0 -29
  1307. package/dist/reverse.d.cts.map +0 -1
  1308. package/dist/reverse.d.ts +0 -29
  1309. package/dist/reverse.d.ts.map +0 -1
  1310. package/dist/round.d.cts +0 -39
  1311. package/dist/round.d.cts.map +0 -1
  1312. package/dist/round.d.ts +0 -39
  1313. package/dist/round.d.ts.map +0 -1
  1314. package/dist/sample.d.cts +0 -69
  1315. package/dist/sample.d.cts.map +0 -1
  1316. package/dist/sample.d.ts +0 -69
  1317. package/dist/sample.d.ts.map +0 -1
  1318. package/dist/set-path.d.cts +0 -47
  1319. package/dist/set-path.d.cts.map +0 -1
  1320. package/dist/set-path.d.ts +0 -47
  1321. package/dist/set-path.d.ts.map +0 -1
  1322. package/dist/set.d.cts +0 -40
  1323. package/dist/set.d.cts.map +0 -1
  1324. package/dist/set.d.ts +0 -40
  1325. package/dist/set.d.ts.map +0 -1
  1326. package/dist/shuffle.d.cts +0 -31
  1327. package/dist/shuffle.d.cts.map +0 -1
  1328. package/dist/shuffle.d.ts +0 -31
  1329. package/dist/shuffle.d.ts.map +0 -1
  1330. package/dist/sleep.d.cts +0 -16
  1331. package/dist/sleep.d.cts.map +0 -1
  1332. package/dist/sleep.d.ts +0 -16
  1333. package/dist/sleep.d.ts.map +0 -1
  1334. package/dist/slice-string.d.cts +0 -41
  1335. package/dist/slice-string.d.cts.map +0 -1
  1336. package/dist/slice-string.d.ts +0 -41
  1337. package/dist/slice-string.d.ts.map +0 -1
  1338. package/dist/slugify.d.cts +0 -15
  1339. package/dist/slugify.d.cts.map +0 -1
  1340. package/dist/slugify.d.ts +0 -15
  1341. package/dist/slugify.d.ts.map +0 -1
  1342. package/dist/sort-by.d.cts +0 -88
  1343. package/dist/sort-by.d.cts.map +0 -1
  1344. package/dist/sort-by.d.ts +0 -88
  1345. package/dist/sort-by.d.ts.map +0 -1
  1346. package/dist/sort.d.cts +0 -39
  1347. package/dist/sort.d.cts.map +0 -1
  1348. package/dist/sort.d.ts +0 -39
  1349. package/dist/sort.d.ts.map +0 -1
  1350. package/dist/sorted-index-by.d.cts +0 -70
  1351. package/dist/sorted-index-by.d.cts.map +0 -1
  1352. package/dist/sorted-index-by.d.ts +0 -70
  1353. package/dist/sorted-index-by.d.ts.map +0 -1
  1354. package/dist/sorted-index-with.d.cts +0 -72
  1355. package/dist/sorted-index-with.d.cts.map +0 -1
  1356. package/dist/sorted-index-with.d.ts +0 -72
  1357. package/dist/sorted-index-with.d.ts.map +0 -1
  1358. package/dist/sorted-index.d.cts +0 -45
  1359. package/dist/sorted-index.d.cts.map +0 -1
  1360. package/dist/sorted-index.d.ts +0 -45
  1361. package/dist/sorted-index.d.ts.map +0 -1
  1362. package/dist/sorted-last-index-by.d.cts +0 -72
  1363. package/dist/sorted-last-index-by.d.cts.map +0 -1
  1364. package/dist/sorted-last-index-by.d.ts +0 -72
  1365. package/dist/sorted-last-index-by.d.ts.map +0 -1
  1366. package/dist/sorted-last-index.d.cts +0 -45
  1367. package/dist/sorted-last-index.d.cts.map +0 -1
  1368. package/dist/sorted-last-index.d.ts +0 -45
  1369. package/dist/sorted-last-index.d.ts.map +0 -1
  1370. package/dist/splice.d.cts +0 -35
  1371. package/dist/splice.d.cts.map +0 -1
  1372. package/dist/splice.d.ts +0 -35
  1373. package/dist/splice.d.ts.map +0 -1
  1374. package/dist/split-at.d.cts +0 -31
  1375. package/dist/split-at.d.cts.map +0 -1
  1376. package/dist/split-at.d.ts +0 -31
  1377. package/dist/split-at.d.ts.map +0 -1
  1378. package/dist/split-when.d.cts +0 -29
  1379. package/dist/split-when.d.cts.map +0 -1
  1380. package/dist/split-when.d.ts +0 -29
  1381. package/dist/split-when.d.ts.map +0 -1
  1382. package/dist/split.d.cts +0 -62
  1383. package/dist/split.d.cts.map +0 -1
  1384. package/dist/split.d.ts +0 -62
  1385. package/dist/split.d.ts.map +0 -1
  1386. package/dist/strict-function-BBgKFNUw.d.ts +0 -26
  1387. package/dist/strict-function-BBgKFNUw.d.ts.map +0 -1
  1388. package/dist/strict-function-CPTwDgnZ.d.cts +0 -26
  1389. package/dist/strict-function-CPTwDgnZ.d.cts.map +0 -1
  1390. package/dist/string-to-path.d.cts +0 -39
  1391. package/dist/string-to-path.d.cts.map +0 -1
  1392. package/dist/string-to-path.d.ts +0 -39
  1393. package/dist/string-to-path.d.ts.map +0 -1
  1394. package/dist/subtract.d.cts +0 -35
  1395. package/dist/subtract.d.cts.map +0 -1
  1396. package/dist/subtract.d.ts +0 -35
  1397. package/dist/subtract.d.ts.map +0 -1
  1398. package/dist/sum-by.d.cts +0 -57
  1399. package/dist/sum-by.d.cts.map +0 -1
  1400. package/dist/sum-by.d.ts +0 -57
  1401. package/dist/sum-by.d.ts.map +0 -1
  1402. package/dist/sum.d.cts +0 -50
  1403. package/dist/sum.d.cts.map +0 -1
  1404. package/dist/sum.d.ts +0 -50
  1405. package/dist/sum.d.ts.map +0 -1
  1406. package/dist/swap-in-place-BHkB_mvV.cjs +0 -1
  1407. package/dist/swap-in-place-C_jXKHuD.js +0 -2
  1408. package/dist/swap-in-place-C_jXKHuD.js.map +0 -1
  1409. package/dist/swap-indices.d.cts +0 -61
  1410. package/dist/swap-indices.d.cts.map +0 -1
  1411. package/dist/swap-indices.d.ts +0 -61
  1412. package/dist/swap-indices.d.ts.map +0 -1
  1413. package/dist/swap-props.d.cts +0 -34
  1414. package/dist/swap-props.d.cts.map +0 -1
  1415. package/dist/swap-props.d.ts +0 -34
  1416. package/dist/swap-props.d.ts.map +0 -1
  1417. package/dist/take-first-by.d.cts +0 -41
  1418. package/dist/take-first-by.d.cts.map +0 -1
  1419. package/dist/take-first-by.d.ts +0 -41
  1420. package/dist/take-first-by.d.ts.map +0 -1
  1421. package/dist/take-last-while.d.cts +0 -36
  1422. package/dist/take-last-while.d.cts.map +0 -1
  1423. package/dist/take-last-while.d.ts +0 -36
  1424. package/dist/take-last-while.d.ts.map +0 -1
  1425. package/dist/take-last.d.cts +0 -32
  1426. package/dist/take-last.d.cts.map +0 -1
  1427. package/dist/take-last.d.ts +0 -32
  1428. package/dist/take-last.d.ts.map +0 -1
  1429. package/dist/take-while.d.cts +0 -34
  1430. package/dist/take-while.d.cts.map +0 -1
  1431. package/dist/take-while.d.ts +0 -34
  1432. package/dist/take-while.d.ts.map +0 -1
  1433. package/dist/take.d.cts +0 -34
  1434. package/dist/take.d.cts.map +0 -1
  1435. package/dist/take.d.ts +0 -34
  1436. package/dist/take.d.ts.map +0 -1
  1437. package/dist/tap.d.cts +0 -42
  1438. package/dist/tap.d.cts.map +0 -1
  1439. package/dist/tap.d.ts +0 -42
  1440. package/dist/tap.d.ts.map +0 -1
  1441. package/dist/times.d.cts +0 -48
  1442. package/dist/times.d.cts.map +0 -1
  1443. package/dist/times.d.ts +0 -48
  1444. package/dist/times.d.ts.map +0 -1
  1445. package/dist/to-camel-case.d.cts +0 -84
  1446. package/dist/to-camel-case.d.cts.map +0 -1
  1447. package/dist/to-camel-case.d.ts +0 -84
  1448. package/dist/to-camel-case.d.ts.map +0 -1
  1449. package/dist/to-kebab-case.d.cts +0 -60
  1450. package/dist/to-kebab-case.d.cts.map +0 -1
  1451. package/dist/to-kebab-case.d.ts +0 -60
  1452. package/dist/to-kebab-case.d.ts.map +0 -1
  1453. package/dist/to-lower-case.d.cts +0 -51
  1454. package/dist/to-lower-case.d.cts.map +0 -1
  1455. package/dist/to-lower-case.d.ts +0 -51
  1456. package/dist/to-lower-case.d.ts.map +0 -1
  1457. package/dist/to-single-BKYbBic-.js +0 -2
  1458. package/dist/to-single-BKYbBic-.js.map +0 -1
  1459. package/dist/to-single-Chq_hKEk.cjs +0 -1
  1460. package/dist/to-snake-case.d.cts +0 -60
  1461. package/dist/to-snake-case.d.cts.map +0 -1
  1462. package/dist/to-snake-case.d.ts +0 -60
  1463. package/dist/to-snake-case.d.ts.map +0 -1
  1464. package/dist/to-string-DkC3zRUJ.d.cts +0 -13
  1465. package/dist/to-string-DkC3zRUJ.d.cts.map +0 -1
  1466. package/dist/to-string-YIFx2KS6.d.ts +0 -13
  1467. package/dist/to-string-YIFx2KS6.d.ts.map +0 -1
  1468. package/dist/to-title-case.d.cts +0 -86
  1469. package/dist/to-title-case.d.cts.map +0 -1
  1470. package/dist/to-title-case.d.ts +0 -86
  1471. package/dist/to-title-case.d.ts.map +0 -1
  1472. package/dist/to-upper-case.d.cts +0 -51
  1473. package/dist/to-upper-case.d.cts.map +0 -1
  1474. package/dist/to-upper-case.d.ts +0 -51
  1475. package/dist/to-upper-case.d.ts.map +0 -1
  1476. package/dist/tuple-parts-BYI4o8Vk.d.ts +0 -89
  1477. package/dist/tuple-parts-BYI4o8Vk.d.ts.map +0 -1
  1478. package/dist/tuple-parts-CzQQupgi.d.cts +0 -89
  1479. package/dist/tuple-parts-CzQQupgi.d.cts.map +0 -1
  1480. package/dist/type.helpers.d.cts +0 -5
  1481. package/dist/type.helpers.d.cts.map +0 -1
  1482. package/dist/type.helpers.d.ts +0 -5
  1483. package/dist/type.helpers.d.ts.map +0 -1
  1484. package/dist/uncapitalize.d.cts +0 -51
  1485. package/dist/uncapitalize.d.cts.map +0 -1
  1486. package/dist/uncapitalize.d.ts +0 -51
  1487. package/dist/uncapitalize.d.ts.map +0 -1
  1488. package/dist/unique-by.d.cts +0 -44
  1489. package/dist/unique-by.d.cts.map +0 -1
  1490. package/dist/unique-by.d.ts +0 -44
  1491. package/dist/unique-by.d.ts.map +0 -1
  1492. package/dist/unique-with.d.cts +0 -46
  1493. package/dist/unique-with.d.cts.map +0 -1
  1494. package/dist/unique-with.d.ts +0 -46
  1495. package/dist/unique-with.d.ts.map +0 -1
  1496. package/dist/unique.d.cts +0 -39
  1497. package/dist/unique.d.cts.map +0 -1
  1498. package/dist/unique.d.ts +0 -39
  1499. package/dist/unique.d.ts.map +0 -1
  1500. package/dist/upsert-prop-0hwik6JJ.d.cts +0 -8
  1501. package/dist/upsert-prop-0hwik6JJ.d.cts.map +0 -1
  1502. package/dist/upsert-prop-_NpaZwm4.d.ts +0 -8
  1503. package/dist/upsert-prop-_NpaZwm4.d.ts.map +0 -1
  1504. package/dist/utility-evaluators-Boc-TMbq.js +0 -2
  1505. package/dist/utility-evaluators-Boc-TMbq.js.map +0 -1
  1506. package/dist/utility-evaluators-CAbODbuk.cjs +0 -1
  1507. package/dist/values.d.cts +0 -38
  1508. package/dist/values.d.cts.map +0 -1
  1509. package/dist/values.d.ts +0 -38
  1510. package/dist/values.d.ts.map +0 -1
  1511. package/dist/with-precision-CQ90Walk.js +0 -2
  1512. package/dist/with-precision-CQ90Walk.js.map +0 -1
  1513. package/dist/with-precision-dQAYLrgr.cjs +0 -1
  1514. package/dist/words-DQCM5umD.js +0 -3
  1515. package/dist/words-DQCM5umD.js.map +0 -1
  1516. package/dist/words-DRQKxzLU.cjs +0 -2
  1517. package/dist/zip-with.d.cts +0 -50
  1518. package/dist/zip-with.d.cts.map +0 -1
  1519. package/dist/zip-with.d.ts +0 -50
  1520. package/dist/zip-with.d.ts.map +0 -1
  1521. package/dist/zip.d.cts +0 -38
  1522. package/dist/zip.d.cts.map +0 -1
  1523. package/dist/zip.d.ts +0 -38
  1524. package/dist/zip.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"funnel.lodash-throttle.test.js","names":[],"sources":["../src/funnel.lodash-throttle.test.ts"],"sourcesContent":["/* eslint-disable function-paren-newline, no-nested-ternary, ts/explicit-function-return-type, ts/no-explicit-any --\n * These aren't useful for a reference implementation for a legacy library!\n */\n\nimport { describe, expect, it, vi } from 'vitest';\nimport { funnel } from './funnel';\nimport { sleep } from './sleep';\n\n/**\n * A reference implementation of the Lodash `throttle` function using the\n * Our `funnel` function. While migrating from Lodash you can copy this\n * function as-is into your code base and use it as a drop-in replacement; but\n * we recommend eventually inlining the call to `funnel` so you can adjust the\n * function to your specific needs.\n *\n * This is a simplified implementation which ignores the Lodash capability to\n * track the return value of the callback function, but it is most likely the\n * more common use-case. For a more complete (and more complex) implementation\n * that also does that see the reference implementation for\n * `throttleWithCachedValue` in the other test file.\n *\n * The following tests in this file are based on the Lodash tests for throttle.\n * They have been adapted to work with our testing framework, have been fixed\n * or expanded slightly were it felt necessary, and have been modernized for\n * better readability. The names of the test cases have been preserved to ease\n * comparing them to the original tests.\n *\n * Note that this means that whenever Lodash offered a concrete spec, we made\n * sure our reference implementation respects it, but there might be untested\n * use-cases that would have differing runtime behaviors.\n *\n * @see Lodash Documentation: https://lodash.com/docs/4.17.15#throttle\n * @see Lodash Implementation: https://github.com/lodash/lodash/blob/4.17.21/lodash.js#L10965\n * @see Lodash Typing: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/lodash/common/function.d.ts#L1347\n */\nfunction throttle<F extends (...args: any) => void>(\n func: F,\n wait = 0,\n {\n leading = true,\n trailing = true,\n }: { readonly leading?: boolean; readonly trailing?: boolean } = {},\n) {\n const {\n call,\n // Lodash v4 doesn't provide access to the `isIdle` (called `pending` in Lodash v5) information.\n isIdle: _isIdle,\n ...rest\n } = funnel(\n (args: Parameters<F>) => {\n if (!leading && !trailing) {\n /**\n * In Lodash you can disable both the trailing and leading edges of the\n * throttle window, effectively causing the function to never be\n * invoked. Our's uses the invokedAt enum exactly to prevent such a\n * situation; so to simulate Lodash we need to only pass the callback\n * when at least one of them is enabled.\n */\n return;\n }\n\n /**\n * Funnel provides more control over the args, but lodash simply passes\n * them through, to replicate this behavior we need to spread the args\n * array maintained via the reducer below.\n */\n func(...args);\n },\n {\n // Throttle stores the latest args it was called with for the next invocation of the callback.\n reducer: (_, ...args: Parameters<F>) => args,\n minQuietPeriodMs: wait,\n maxBurstDurationMs: wait,\n ...(trailing\n ? leading\n ? { triggerAt: 'both' }\n : { triggerAt: 'end' }\n : { triggerAt: 'start' }),\n },\n );\n /**\n * Lodash uses a legacy JS-ism to attach helper functions to the main\n * callback of `throttle`. In our's we return a proper object where the\n * callback is one of the available properties. Here we destructure and then\n * reconstruct the object to fit the Lodash API.\n */\n return Object.assign(call, rest);\n}\n\n/**\n * We need some non-trivial duration to use in all our tests, to abstract the\n * actual chosen value we use this UnitOfTime (UT) constant. As long as it is a\n * positive integer, the actual value doesn't matter (but the larger it is,\n * the longer the tests would take to run); the value used by Lodash is 32.\n * The number is in milliseconds.\n */\nconst UT = 16;\n\ndescribe('https://github.com/lodash/lodash/blob/4.17.21/test/test.js#L22768', () => {\n it('should throttle a function', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT);\n throttled();\n throttled();\n throttled();\n const callCount = mockFn.mock.calls.length;\n\n expect(callCount).toBeGreaterThan(0);\n\n await sleep(2 * UT);\n\n expect(mockFn.mock.calls.length).toBeGreaterThan(callCount);\n });\n\n it('should clear timeout when `func` is called', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT);\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(2 * UT);\n\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('should not trigger a trailing call when invoked once', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT);\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('should trigger a call when invoked repeatedly', () => {\n const mockFn = vi.fn<() => void>();\n\n const throttled = throttle(mockFn, UT);\n\n const end = Date.now() + 10 * UT;\n while (Date.now() < end) {\n throttled();\n }\n\n expect(mockFn).toHaveBeenCalledExactlyOnceWith();\n });\n\n it('should trigger a call when invoked repeatedly and `leading` is `false`', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT, { leading: false });\n const end = Date.now() + 10 * UT;\n while (Date.now() < end) {\n throttled();\n }\n // Yield execution to allow timeouts to run\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledExactlyOnceWith();\n });\n\n it('should trigger a second throttled call as soon as possible', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, 4 * UT, { leading: false });\n throttled();\n await sleep(6 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n throttled();\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(4 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('should apply default options', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT, {});\n throttled();\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(4 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('should support a `leading` option', () => {\n const mockWith = vi.fn<() => void>();\n const mockWithout = vi.fn<() => void>();\n const withLeading = throttle(mockWith, UT, { leading: true });\n const withoutLeading = throttle(mockWithout, UT, { leading: false });\n\n withLeading();\n withoutLeading();\n\n expect(mockWith).toHaveBeenCalledTimes(1);\n expect(mockWithout).toHaveBeenCalledTimes(0);\n });\n\n it('should support a `trailing` option', async () => {\n const mockWith = vi.fn<(x: string) => void>();\n const mockWithout = vi.fn<(x: string) => void>();\n const withTrailing = throttle(mockWith, 2 * UT, { trailing: true });\n const withoutTrailing = throttle(mockWithout, 2 * UT, { trailing: false });\n withTrailing('a');\n withTrailing('b');\n withoutTrailing('a');\n withoutTrailing('b');\n\n expect(mockWith).toHaveBeenCalledExactlyOnceWith('a');\n expect(mockWithout).toHaveBeenCalledExactlyOnceWith('a');\n\n await sleep(8 * UT);\n\n expect(mockWith).toHaveBeenCalledTimes(2);\n expect(mockWithout).toHaveBeenCalledTimes(1);\n });\n\n it('should not update `lastCalled`, at the end of the timeout, when `trailing` is `false`', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, 64, { trailing: false });\n throttled();\n throttled();\n await sleep(3 * UT);\n throttled();\n throttled();\n await sleep(3 * UT);\n\n expect(mockFn).toHaveBeenCalledExactlyOnceWith();\n });\n});\n\ndescribe('https://github.com/lodash/lodash/blob/4.17.21/test/test.js#L23038', () => {\n it('should use a default `wait` of `0`', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn);\n throttled();\n await sleep(UT);\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('supports recursive calls', async () => {\n const actual = [] as Array<string>;\n const queue = ['a', 'b', 'c'];\n const throttled = throttle((chr: string) => {\n actual.push(chr);\n const next = queue.shift();\n if (next !== undefined) {\n throttled(next);\n }\n }, UT);\n throttled(queue.shift()!);\n\n expect(actual).toStrictEqual(['a']);\n\n await sleep(8 * UT);\n\n expect(actual).toStrictEqual(['a', 'b', 'c']);\n });\n\n it('should support cancelling delayed calls', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT, { leading: false });\n throttled();\n throttled.cancel();\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n });\n\n it('should reset `lastCalled` after cancelling', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT, { leading: true });\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n throttled.cancel();\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n\n throttled();\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n });\n\n it('should support flushing delayed calls', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT, { leading: false });\n throttled();\n throttled.flush();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('should noop `cancel` and `flush` when nothing is queued', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT);\n throttled.cancel();\n throttled.flush();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n });\n});\n\ndescribe('not tested by Lodash', () => {\n it('should do nothing when `leading` and `trailing` are both `disabled`', async () => {\n const mockFn = vi.fn<() => void>();\n const throttled = throttle(mockFn, UT, { leading: false, trailing: false });\n throttled();\n throttled();\n throttled();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n });\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- const e=require(`./dist-8XtUY3ad.cjs`),t=require(`./constant.cjs`),n=require(`./funnel.cjs`),r=require(`./identity.cjs`),i=require(`./sleep.cjs`);function a(e,{timing:t,waitMs:r,maxWaitMs:i}){if(i!==void 0&&r!==void 0&&i<r)throw Error(`debounce: maxWaitMs (${i.toString()}) cannot be less than waitMs (${r.toString()})`);let a,o=n.funnel(t=>{a=e(...t)},{reducer:(e,...t)=>t,minQuietPeriodMs:r??i??0,...i!==void 0&&{maxBurstDurationMs:i},...t===`leading`?{triggerAt:`start`}:t===`both`?{triggerAt:`both`}:{triggerAt:`end`}});return{call:(...e)=>(o.call(...e),a),flush:()=>(o.flush(),a),cancel:()=>{o.cancel()},get isPending(){return!o.isIdle},get cachedValue(){return a}}}e.i(`main functionality`,()=>{e.a(`should debounce a function`,async()=>{let t=e.r.fn(r.identity()),n=a(t,{waitMs:32});e.n([n.call(`a`),n.call(`b`),n.call(`c`)]).toStrictEqual([void 0,void 0,void 0]),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(128),e.n(t).toHaveBeenCalledTimes(1),e.n([n.call(`d`),n.call(`e`),n.call(`f`)]).toStrictEqual([`c`,`c`,`c`]),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(256),e.n(t).toHaveBeenCalledTimes(2)}),e.a("subsequent debounced calls return the last `func` result",async()=>{let t=a(r.identity(),{waitMs:32});t.call(`a`),await i.sleep(64),e.n(t.call(`b`)).toBe(`a`),await i.sleep(128),e.n(t.call(`c`)).toBe(`b`)}),e.a("should not immediately call `func` when `wait` is `0`",async()=>{let t=e.r.fn(),n=a(t,{});n.call(),n.call(),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(5),e.n(t).toHaveBeenCalledTimes(1)}),e.a(`should apply default options`,async()=>{let t=e.r.fn();a(t,{waitMs:32}).call(),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(64),e.n(t).toHaveBeenCalledTimes(1)}),e.a("should support a `leading` option",async()=>{let t=e.r.fn(),n=e.r.fn(),r=a(t,{waitMs:32,timing:`leading`});r.call(),e.n(t).toHaveBeenCalledTimes(1);let o=a(n,{waitMs:32,timing:`both`});o.call(),o.call(),e.n(n).toHaveBeenCalledTimes(1),await i.sleep(64),e.n(n).toHaveBeenCalledTimes(2),r.call(),e.n(t).toHaveBeenCalledTimes(2)}),e.a("subsequent leading debounced calls return the last `func` result",async()=>{let t=a(r.identity(),{waitMs:32,timing:`leading`});e.n([t.call(`a`),t.call(`b`)]).toStrictEqual([`a`,`a`]),await i.sleep(64),e.n([t.call(`c`),t.call(`d`)]).toStrictEqual([`c`,`c`])}),e.a("should support a `trailing` option",async()=>{let t=e.r.fn();a(t,{waitMs:32,timing:`trailing`}).call(),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(64),e.n(t).toHaveBeenCalledTimes(1)})}),e.i(`optional param maxWaitMs`,()=>{e.a("should support a `maxWait` option",async()=>{let t=e.r.fn(),n=a(t,{waitMs:32,maxWaitMs:64});n.call(`a`),n.call(`b`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(128),e.n(t).toHaveBeenCalledTimes(1),n.call(`c`),n.call(`d`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(256),e.n(t).toHaveBeenCalledTimes(2)}),e.a("should support `maxWait` in a tight loop",async()=>{let t=e.r.fn(),n=e.r.fn(),r=a(t,{waitMs:32,maxWaitMs:128}),o=a(n,{waitMs:96}),s=Date.now();for(;Date.now()-s<320;)r.call(),o.call();await i.sleep(1),e.n(n).toHaveBeenCalledTimes(0),e.n(t).not.toHaveBeenCalledTimes(0)}),e.a("should queue a trailing call for subsequent debounced calls after `maxWait`",async()=>{let t=e.r.fn(),n=a(t,{waitMs:200,maxWaitMs:200});n.call(),setTimeout(()=>{n.call()},190),setTimeout(()=>{n.call()},200),setTimeout(()=>{n.call()},210),await i.sleep(500),e.n(t).toHaveBeenCalledTimes(2)}),e.a("should cancel `maxDelayed` when `delayed` is invoked",async()=>{let t=e.r.fn(),n=a(t,{waitMs:32,maxWaitMs:64});n.call(),await i.sleep(128),n.call(),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(192),e.n(t).toHaveBeenCalledTimes(2)}),e.a(`works like a leaky bucket when only maxWaitMs is set`,async()=>{let t=e.r.fn(),n=a(t,{maxWaitMs:32});n.call(),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(16),n.call(),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(17),e.n(t).toHaveBeenCalledTimes(1)})}),e.i(`additional functionality`,()=>{e.a(`can cancel before the timer starts`,async()=>{let t=a(r.identity(),{waitMs:32});e.n(()=>{t.cancel()}).not.toThrowError(),e.n(t.call(`hello`)).toBeUndefined(),await i.sleep(32),e.n(t.call(`world`)).toBe(`hello`)}),e.a(`can cancel the timer`,async()=>{let n=e.r.fn(t.constant(`Hello, World!`)),r=a(n,{waitMs:32});e.n(r.call()).toBeUndefined(),e.n(n).toHaveBeenCalledTimes(0),await i.sleep(1),e.n(r.call()).toBeUndefined(),e.n(n).toHaveBeenCalledTimes(0),r.cancel(),await i.sleep(32),e.n(r.call()).toBeUndefined(),e.n(n).toHaveBeenCalledTimes(0),await i.sleep(32),e.n(r.call()).toBe(`Hello, World!`),e.n(n).toHaveBeenCalledTimes(1)}),e.a(`can cancel after the timer ends`,async()=>{let t=a(r.identity(),{waitMs:32});e.n(t.call(`hello`)).toBeUndefined(),await i.sleep(32),e.n(t.call(`world`)).toBe(`hello`),e.n(()=>{t.cancel()}).not.toThrowError()}),e.a(`can cancel maxWait timer`,async()=>{let t=a(r.identity(),{waitMs:16,maxWaitMs:32});e.n(t.call(`hello`)).toBeUndefined(),await i.sleep(1),t.cancel(),await i.sleep(32),e.n(t.call(`world`)).toBeUndefined()}),e.a(`can return a cached value`,()=>{let t=a(r.identity(),{timing:`leading`,waitMs:32});e.n(t.cachedValue).toBeUndefined(),e.n(t.call(`hello`)).toBe(`hello`),e.n(t.cachedValue).toBe(`hello`)}),e.a(`can check for inflight timers (trailing)`,async()=>{let t=a(r.identity(),{waitMs:32});e.n(t.isPending).toBe(!1),e.n(t.call(`hello`)).toBeUndefined(),e.n(t.isPending).toBe(!0),await i.sleep(1),e.n(t.isPending).toBe(!0),await i.sleep(32),e.n(t.isPending).toBe(!1)}),e.a(`can check for inflight timers (leading)`,async()=>{let t=a(r.identity(),{timing:`leading`,waitMs:32});e.n(t.isPending).toBe(!1),e.n(t.call(`hello`)).toBe(`hello`),e.n(t.isPending).toBe(!0),await i.sleep(1),e.n(t.isPending).toBe(!0),await i.sleep(32),e.n(t.isPending).toBe(!1)}),e.a(`can flush before a cool-down`,async()=>{let t=a(r.identity(),{waitMs:32});e.n(t.flush()).toBeUndefined(),e.n(t.call(`hello`)).toBeUndefined(),await i.sleep(32),e.n(t.call(`world`)).toBe(`hello`)}),e.a(`can flush during a cool-down`,async()=>{let t=a(r.identity(),{waitMs:32});e.n(t.call(`hello`)).toBeUndefined(),await i.sleep(1),e.n(t.call(`world`)).toBeUndefined(),await i.sleep(1),e.n(t.flush()).toBe(`world`)}),e.a(`can flush after a cool-down`,async()=>{let t=a(r.identity(),{waitMs:32});e.n(t.call(`hello`)).toBeUndefined(),await i.sleep(32),e.n(t.flush()).toBe(`hello`)})}),e.i(`errors`,()=>{e.a(`prevents maxWaitMs to be less then waitMs`,()=>{e.n(()=>a(r.identity(),{waitMs:32,maxWaitMs:16})).toThrowError(`debounce: maxWaitMs (16) cannot be less than waitMs (32)`)})});
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- export { };
@@ -1,2 +0,0 @@
1
- import{constant as e}from"./constant.js";import{a as t,i as n,n as r,r as i}from"./dist-Bd1vawFi.js";import{funnel as a}from"./funnel.js";import{identity as o}from"./identity.js";import{sleep as s}from"./sleep.js";function c(e,{timing:t,waitMs:n,maxWaitMs:r}){if(r!==void 0&&n!==void 0&&r<n)throw Error(`debounce: maxWaitMs (${r.toString()}) cannot be less than waitMs (${n.toString()})`);let i,o=a(t=>{i=e(...t)},{reducer:(e,...t)=>t,minQuietPeriodMs:n??r??0,...r!==void 0&&{maxBurstDurationMs:r},...t===`leading`?{triggerAt:`start`}:t===`both`?{triggerAt:`both`}:{triggerAt:`end`}});return{call:(...e)=>(o.call(...e),i),flush:()=>(o.flush(),i),cancel:()=>{o.cancel()},get isPending(){return!o.isIdle},get cachedValue(){return i}}}n(`main functionality`,()=>{t(`should debounce a function`,async()=>{let e=i.fn(o()),t=c(e,{waitMs:32});r([t.call(`a`),t.call(`b`),t.call(`c`)]).toStrictEqual([void 0,void 0,void 0]),r(e).toHaveBeenCalledTimes(0),await s(128),r(e).toHaveBeenCalledTimes(1),r([t.call(`d`),t.call(`e`),t.call(`f`)]).toStrictEqual([`c`,`c`,`c`]),r(e).toHaveBeenCalledTimes(1),await s(256),r(e).toHaveBeenCalledTimes(2)}),t("subsequent debounced calls return the last `func` result",async()=>{let e=c(o(),{waitMs:32});e.call(`a`),await s(64),r(e.call(`b`)).toBe(`a`),await s(128),r(e.call(`c`)).toBe(`b`)}),t("should not immediately call `func` when `wait` is `0`",async()=>{let e=i.fn(),t=c(e,{});t.call(),t.call(),r(e).toHaveBeenCalledTimes(0),await s(5),r(e).toHaveBeenCalledTimes(1)}),t(`should apply default options`,async()=>{let e=i.fn();c(e,{waitMs:32}).call(),r(e).toHaveBeenCalledTimes(0),await s(64),r(e).toHaveBeenCalledTimes(1)}),t("should support a `leading` option",async()=>{let e=i.fn(),t=i.fn(),n=c(e,{waitMs:32,timing:`leading`});n.call(),r(e).toHaveBeenCalledTimes(1);let a=c(t,{waitMs:32,timing:`both`});a.call(),a.call(),r(t).toHaveBeenCalledTimes(1),await s(64),r(t).toHaveBeenCalledTimes(2),n.call(),r(e).toHaveBeenCalledTimes(2)}),t("subsequent leading debounced calls return the last `func` result",async()=>{let e=c(o(),{waitMs:32,timing:`leading`});r([e.call(`a`),e.call(`b`)]).toStrictEqual([`a`,`a`]),await s(64),r([e.call(`c`),e.call(`d`)]).toStrictEqual([`c`,`c`])}),t("should support a `trailing` option",async()=>{let e=i.fn();c(e,{waitMs:32,timing:`trailing`}).call(),r(e).toHaveBeenCalledTimes(0),await s(64),r(e).toHaveBeenCalledTimes(1)})}),n(`optional param maxWaitMs`,()=>{t("should support a `maxWait` option",async()=>{let e=i.fn(),t=c(e,{waitMs:32,maxWaitMs:64});t.call(`a`),t.call(`b`),r(e).toHaveBeenCalledTimes(0),await s(128),r(e).toHaveBeenCalledTimes(1),t.call(`c`),t.call(`d`),r(e).toHaveBeenCalledTimes(1),await s(256),r(e).toHaveBeenCalledTimes(2)}),t("should support `maxWait` in a tight loop",async()=>{let e=i.fn(),t=i.fn(),n=c(e,{waitMs:32,maxWaitMs:128}),a=c(t,{waitMs:96}),o=Date.now();for(;Date.now()-o<320;)n.call(),a.call();await s(1),r(t).toHaveBeenCalledTimes(0),r(e).not.toHaveBeenCalledTimes(0)}),t("should queue a trailing call for subsequent debounced calls after `maxWait`",async()=>{let e=i.fn(),t=c(e,{waitMs:200,maxWaitMs:200});t.call(),setTimeout(()=>{t.call()},190),setTimeout(()=>{t.call()},200),setTimeout(()=>{t.call()},210),await s(500),r(e).toHaveBeenCalledTimes(2)}),t("should cancel `maxDelayed` when `delayed` is invoked",async()=>{let e=i.fn(),t=c(e,{waitMs:32,maxWaitMs:64});t.call(),await s(128),t.call(),r(e).toHaveBeenCalledTimes(1),await s(192),r(e).toHaveBeenCalledTimes(2)}),t(`works like a leaky bucket when only maxWaitMs is set`,async()=>{let e=i.fn(),t=c(e,{maxWaitMs:32});t.call(),r(e).toHaveBeenCalledTimes(0),await s(16),t.call(),r(e).toHaveBeenCalledTimes(0),await s(17),r(e).toHaveBeenCalledTimes(1)})}),n(`additional functionality`,()=>{t(`can cancel before the timer starts`,async()=>{let e=c(o(),{waitMs:32});r(()=>{e.cancel()}).not.toThrowError(),r(e.call(`hello`)).toBeUndefined(),await s(32),r(e.call(`world`)).toBe(`hello`)}),t(`can cancel the timer`,async()=>{let t=i.fn(e(`Hello, World!`)),n=c(t,{waitMs:32});r(n.call()).toBeUndefined(),r(t).toHaveBeenCalledTimes(0),await s(1),r(n.call()).toBeUndefined(),r(t).toHaveBeenCalledTimes(0),n.cancel(),await s(32),r(n.call()).toBeUndefined(),r(t).toHaveBeenCalledTimes(0),await s(32),r(n.call()).toBe(`Hello, World!`),r(t).toHaveBeenCalledTimes(1)}),t(`can cancel after the timer ends`,async()=>{let e=c(o(),{waitMs:32});r(e.call(`hello`)).toBeUndefined(),await s(32),r(e.call(`world`)).toBe(`hello`),r(()=>{e.cancel()}).not.toThrowError()}),t(`can cancel maxWait timer`,async()=>{let e=c(o(),{waitMs:16,maxWaitMs:32});r(e.call(`hello`)).toBeUndefined(),await s(1),e.cancel(),await s(32),r(e.call(`world`)).toBeUndefined()}),t(`can return a cached value`,()=>{let e=c(o(),{timing:`leading`,waitMs:32});r(e.cachedValue).toBeUndefined(),r(e.call(`hello`)).toBe(`hello`),r(e.cachedValue).toBe(`hello`)}),t(`can check for inflight timers (trailing)`,async()=>{let e=c(o(),{waitMs:32});r(e.isPending).toBe(!1),r(e.call(`hello`)).toBeUndefined(),r(e.isPending).toBe(!0),await s(1),r(e.isPending).toBe(!0),await s(32),r(e.isPending).toBe(!1)}),t(`can check for inflight timers (leading)`,async()=>{let e=c(o(),{timing:`leading`,waitMs:32});r(e.isPending).toBe(!1),r(e.call(`hello`)).toBe(`hello`),r(e.isPending).toBe(!0),await s(1),r(e.isPending).toBe(!0),await s(32),r(e.isPending).toBe(!1)}),t(`can flush before a cool-down`,async()=>{let e=c(o(),{waitMs:32});r(e.flush()).toBeUndefined(),r(e.call(`hello`)).toBeUndefined(),await s(32),r(e.call(`world`)).toBe(`hello`)}),t(`can flush during a cool-down`,async()=>{let e=c(o(),{waitMs:32});r(e.call(`hello`)).toBeUndefined(),await s(1),r(e.call(`world`)).toBeUndefined(),await s(1),r(e.flush()).toBe(`world`)}),t(`can flush after a cool-down`,async()=>{let e=c(o(),{waitMs:32});r(e.call(`hello`)).toBeUndefined(),await s(32),r(e.flush()).toBe(`hello`)})}),n(`errors`,()=>{t(`prevents maxWaitMs to be less then waitMs`,()=>{r(()=>c(o(),{waitMs:32,maxWaitMs:16})).toThrowError(`debounce: maxWaitMs (16) cannot be less than waitMs (32)`)})});
2
- //# sourceMappingURL=funnel.perkakas-debounce.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"funnel.perkakas-debounce.test.js","names":["cachedValue: ReturnType<F> | undefined"],"sources":["../src/funnel.perkakas-debounce.test.ts"],"sourcesContent":["/* eslint-disable no-nested-ternary, ts/explicit-function-return-type --\n * These aren't useful for a reference implementation!\n */\n\nimport type { StrictFunction } from './internal/types/strict-function';\nimport { describe, expect, it, vi } from 'vitest';\nimport { constant } from './constant';\nimport { funnel } from './funnel';\nimport { identity } from './identity';\nimport { sleep } from './sleep';\n\ninterface Debouncer<F extends StrictFunction, IsNullable extends boolean = true> {\n readonly call: (\n ...args: Parameters<F>\n ) => ReturnType<F> | (true extends IsNullable ? undefined : never);\n readonly cancel: () => void;\n readonly flush: () => ReturnType<F> | undefined;\n readonly isPending: boolean;\n readonly cachedValue: ReturnType<F> | undefined;\n}\n\ninterface DebounceOptions {\n readonly waitMs?: number;\n readonly maxWaitMs?: number;\n}\n\n/**\n * A reference implementation of the now deprecated `debounce` function using\n * the `funnel` function instead. While you update your codebase you can copy\n * this function as-is and use it as a drop-in replacement; but we recommend\n * eventually inlining the call to `funnel` so you can adjust the function to\n * your specific needs.\n *\n * The following tests in this file are the original tests for debounce.\n *\n * @see debounce\n */\nfunction debounce<F extends StrictFunction>(\n func: F,\n options: DebounceOptions & { readonly timing?: 'trailing' },\n): Debouncer<F>;\nfunction debounce<F extends StrictFunction>(\n func: F,\n options:\n | (DebounceOptions & { readonly timing: 'both' })\n | (Omit<DebounceOptions, 'maxWaitMs'> & { readonly timing: 'leading' }),\n): Debouncer<F, false>;\nfunction debounce<F extends StrictFunction>(\n func: F,\n {\n timing,\n waitMs,\n maxWaitMs,\n }: DebounceOptions & {\n readonly timing?: 'both' | 'leading' | 'trailing';\n },\n) {\n if (maxWaitMs !== undefined && waitMs !== undefined && maxWaitMs < waitMs) {\n throw new Error(\n `debounce: maxWaitMs (${maxWaitMs.toString()}) cannot be less than waitMs (${waitMs.toString()})`,\n );\n }\n\n let cachedValue: ReturnType<F> | undefined;\n\n const debouncingFunnel = funnel(\n (args: Parameters<F>) => {\n // @ts-expect-error [ts2345, ts2322] -- TypeScript infers the generic sub-\n // types too eagerly, making itself blind to the fact that the types\n // match here.\n cachedValue = func(...args) as ReturnType<F>;\n },\n {\n // Debounce stores the latest args it was called with for the next invocation of the callback.\n reducer: (_, ...args: Parameters<F>) => args,\n minQuietPeriodMs: waitMs ?? maxWaitMs ?? 0,\n ...(maxWaitMs !== undefined && { maxBurstDurationMs: maxWaitMs }),\n ...(timing === 'leading'\n ? { triggerAt: 'start' }\n : timing === 'both'\n ? { triggerAt: 'both' }\n : { triggerAt: 'end' }),\n },\n );\n\n return {\n call: (...args: Parameters<F>) => {\n debouncingFunnel.call(...args);\n return cachedValue;\n },\n\n flush: () => {\n debouncingFunnel.flush();\n return cachedValue;\n },\n\n cancel: () => {\n debouncingFunnel.cancel();\n },\n\n get isPending() {\n return !debouncingFunnel.isIdle;\n },\n\n get cachedValue() {\n return cachedValue;\n },\n };\n}\n\ndescribe('main functionality', () => {\n it('should debounce a function', async () => {\n const mockFn = vi.fn<(x: string) => string>(identity());\n const debouncer = debounce(mockFn, { waitMs: 32 });\n\n expect([\n debouncer.call('a'),\n debouncer.call('b'),\n debouncer.call('c'),\n ]).toStrictEqual([undefined, undefined, undefined]);\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(128);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect([\n debouncer.call('d'),\n debouncer.call('e'),\n debouncer.call('f'),\n ]).toStrictEqual(['c', 'c', 'c']);\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(256);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('subsequent debounced calls return the last `func` result', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n debouncer.call('a');\n await sleep(64);\n\n expect(debouncer.call('b')).toBe('a');\n\n await sleep(128);\n\n expect(debouncer.call('c')).toBe('b');\n });\n\n it('should not immediately call `func` when `wait` is `0`', async () => {\n const mockFn = vi.fn<() => void>();\n const debouncer = debounce(mockFn, {});\n debouncer.call();\n debouncer.call();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(5);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('should apply default options', async () => {\n const mockFn = vi.fn<() => void>();\n const debouncer = debounce(mockFn, { waitMs: 32 });\n debouncer.call();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(64);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('should support a `leading` option', async () => {\n const leadingMockFn = vi.fn<() => void>();\n const bothMockFn = vi.fn<() => void>();\n const withLeading = debounce(leadingMockFn, {\n waitMs: 32,\n timing: 'leading',\n });\n withLeading.call();\n\n expect(leadingMockFn).toHaveBeenCalledTimes(1);\n\n const withLeadingAndTrailing = debounce(bothMockFn, {\n waitMs: 32,\n timing: 'both',\n });\n withLeadingAndTrailing.call();\n withLeadingAndTrailing.call();\n\n expect(bothMockFn).toHaveBeenCalledTimes(1);\n\n await sleep(64);\n\n expect(bothMockFn).toHaveBeenCalledTimes(2);\n\n withLeading.call();\n\n expect(leadingMockFn).toHaveBeenCalledTimes(2);\n });\n\n it('subsequent leading debounced calls return the last `func` result', async () => {\n const debouncer = debounce(identity(), { waitMs: 32, timing: 'leading' });\n\n expect([debouncer.call('a'), debouncer.call('b')]).toStrictEqual([\n 'a',\n 'a',\n ]);\n\n await sleep(64);\n\n expect([debouncer.call('c'), debouncer.call('d')]).toStrictEqual([\n 'c',\n 'c',\n ]);\n });\n\n it('should support a `trailing` option', async () => {\n const mockFn = vi.fn<() => void>();\n const withTrailing = debounce(mockFn, { waitMs: 32, timing: 'trailing' });\n withTrailing.call();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(64);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe('optional param maxWaitMs', () => {\n it('should support a `maxWait` option', async () => {\n const mockFn = vi.fn<(x: string) => void>();\n const debouncer = debounce(mockFn, { waitMs: 32, maxWaitMs: 64 });\n debouncer.call('a');\n debouncer.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(128);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n debouncer.call('c');\n debouncer.call('d');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(256);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('should support `maxWait` in a tight loop', async () => {\n const withMockFn = vi.fn<() => void>();\n const withoutMockFn = vi.fn<() => void>();\n const withMaxWait = debounce(withMockFn, { waitMs: 32, maxWaitMs: 128 });\n const withoutMaxWait = debounce(withoutMockFn, { waitMs: 96 });\n const start = Date.now();\n while (Date.now() - start < 320) {\n withMaxWait.call();\n withoutMaxWait.call();\n }\n await sleep(1);\n\n expect(withoutMockFn).toHaveBeenCalledTimes(0);\n expect(withMockFn).not.toHaveBeenCalledTimes(0);\n });\n\n it('should queue a trailing call for subsequent debounced calls after `maxWait`', async () => {\n const mockFn = vi.fn<() => void>();\n const debouncer = debounce(mockFn, { waitMs: 200, maxWaitMs: 200 });\n debouncer.call();\n setTimeout(() => {\n debouncer.call();\n }, 190);\n setTimeout(() => {\n debouncer.call();\n }, 200);\n setTimeout(() => {\n debouncer.call();\n }, 210);\n await sleep(500);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('should cancel `maxDelayed` when `delayed` is invoked', async () => {\n const mockFn = vi.fn<() => void>();\n const debouncer = debounce(mockFn, { waitMs: 32, maxWaitMs: 64 });\n debouncer.call();\n await sleep(128);\n debouncer.call();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(192);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('works like a leaky bucket when only maxWaitMs is set', async () => {\n const mockFn = vi.fn<() => void>();\n const debouncer = debounce(mockFn, { maxWaitMs: 32 });\n debouncer.call();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(16);\n // Without maxWaitMs this call would cause the actual invocation to be\n // postponed for a full window.\n debouncer.call();\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(17);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe('additional functionality', () => {\n it('can cancel before the timer starts', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n\n expect(() => {\n debouncer.cancel();\n }).not.toThrowError();\n expect(debouncer.call('hello')).toBeUndefined();\n\n await sleep(32);\n\n expect(debouncer.call('world')).toBe('hello');\n });\n\n it('can cancel the timer', async () => {\n const mockFn = vi.fn<() => string>(constant('Hello, World!'));\n const debouncer = debounce(mockFn, { waitMs: 32 });\n\n expect(debouncer.call()).toBeUndefined();\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(1);\n\n expect(debouncer.call()).toBeUndefined();\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n debouncer.cancel();\n await sleep(32);\n\n expect(debouncer.call()).toBeUndefined();\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(32);\n\n expect(debouncer.call()).toBe('Hello, World!');\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('can cancel after the timer ends', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n\n expect(debouncer.call('hello')).toBeUndefined();\n\n await sleep(32);\n\n expect(debouncer.call('world')).toBe('hello');\n expect(() => {\n debouncer.cancel();\n }).not.toThrowError();\n });\n\n it('can cancel maxWait timer', async () => {\n const debouncer = debounce(identity(), { waitMs: 16, maxWaitMs: 32 });\n\n expect(debouncer.call('hello')).toBeUndefined();\n\n await sleep(1);\n debouncer.cancel();\n await sleep(32);\n\n expect(debouncer.call('world')).toBeUndefined();\n });\n\n it('can return a cached value', () => {\n const debouncer = debounce(identity(), { timing: 'leading', waitMs: 32 });\n\n expect(debouncer.cachedValue).toBeUndefined();\n expect(debouncer.call('hello')).toBe('hello');\n expect(debouncer.cachedValue).toBe('hello');\n });\n\n it('can check for inflight timers (trailing)', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n\n expect(debouncer.isPending).toBe(false);\n expect(debouncer.call('hello')).toBeUndefined();\n expect(debouncer.isPending).toBe(true);\n\n await sleep(1);\n\n expect(debouncer.isPending).toBe(true);\n\n await sleep(32);\n\n expect(debouncer.isPending).toBe(false);\n });\n\n it('can check for inflight timers (leading)', async () => {\n const debouncer = debounce(identity(), { timing: 'leading', waitMs: 32 });\n\n expect(debouncer.isPending).toBe(false);\n expect(debouncer.call('hello')).toBe('hello');\n expect(debouncer.isPending).toBe(true);\n\n await sleep(1);\n\n expect(debouncer.isPending).toBe(true);\n\n await sleep(32);\n\n expect(debouncer.isPending).toBe(false);\n });\n\n it('can flush before a cool-down', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n\n expect(debouncer.flush()).toBeUndefined();\n expect(debouncer.call('hello')).toBeUndefined();\n\n await sleep(32);\n\n expect(debouncer.call('world')).toBe('hello');\n });\n\n it('can flush during a cool-down', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n\n expect(debouncer.call('hello')).toBeUndefined();\n\n await sleep(1);\n\n expect(debouncer.call('world')).toBeUndefined();\n\n await sleep(1);\n\n expect(debouncer.flush()).toBe('world');\n });\n\n it('can flush after a cool-down', async () => {\n const debouncer = debounce(identity(), { waitMs: 32 });\n\n expect(debouncer.call('hello')).toBeUndefined();\n\n await sleep(32);\n\n expect(debouncer.flush()).toBe('hello');\n });\n});\n\ndescribe('errors', () => {\n it('prevents maxWaitMs to be less then waitMs', () => {\n expect(() => debounce(identity(), { waitMs: 32, maxWaitMs: 16 })).toThrowError(\n 'debounce: maxWaitMs (16) cannot be less than waitMs (32)',\n );\n });\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- const e=require(`./dist-8XtUY3ad.cjs`),t=require(`./do-nothing.cjs`),n=require(`./from-keys.cjs`),r=require(`./funnel.cjs`);function i(e,t,n=0){let i=r.funnel(n=>{e(n.map(({params:e})=>e)).then(e=>{for(let[r,{params:i,promiseCallbacks:[a]}]of n.entries())a(t(e,r,...i))}).catch(e=>{for(let{promiseCallbacks:[,t]}of n)t(e)})},{reducer:(e,t)=>[...e??[],t],maxBurstDurationMs:n,triggerAt:`end`});return{...i,call:async(...e)=>new Promise((...t)=>{i.call({promiseCallbacks:t,params:e})})}}e.i(`showcase`,()=>{e.a(`results as object`,async()=>{let t=e.r.fn(async e=>n.fromKeys(e,e=>e.length)),r=i(async e=>await t(e.flat()),(e,t,n)=>e[n]),a=[r.call(`short`),r.call(`medium`),r.call(`loooooooooooooong`)];e.n(t).toHaveBeenCalledTimes(0);let[o,s,c]=await Promise.all(a);e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`short`,`medium`,`loooooooooooooong`]),e.n(t).toHaveLastResolvedWith({short:5,medium:6,loooooooooooooong:17}),e.n(o).toBe(5),e.n(s).toBe(6),e.n(c).toBe(17)}),e.a(`results as array`,async()=>{let t=e.r.fn(async e=>e.map(e=>e.length)),n=i(async e=>await t(e.flat()),(e,t)=>e[t]),r=[n.call(`short`),n.call(`medium`),n.call(`loooooooooooooong`)];e.n(t).toHaveBeenCalledTimes(0);let[a,o,s]=await Promise.all(r);e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`short`,`medium`,`loooooooooooooong`]),e.n(t).toHaveLastResolvedWith([5,6,17]),e.n(a).toBe(5),e.n(o).toBe(6),e.n(s).toBe(17)}),e.a(`error handling`,async()=>{let n=i(async e=>{if(e.length>1)throw Error(`Batch too big! ${JSON.stringify(e)}`)},t.doNothing());await e.n(n.call(`a`)).resolves.toBeUndefined(),await e.n(Promise.all([n.call(`hello`),n.call(`world`)])).rejects.toThrowError(`Batch too big! [["hello"],["world"]]`)})});
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- export { };
@@ -1,2 +0,0 @@
1
- import{doNothing as e}from"./do-nothing.js";import{fromKeys as t}from"./from-keys.js";import{a as n,i as r,n as i,r as a}from"./dist-Bd1vawFi.js";import{funnel as o}from"./funnel.js";function s(e,t,n=0){let r=o(n=>{e(n.map(({params:e})=>e)).then(e=>{for(let[r,{params:i,promiseCallbacks:[a]}]of n.entries())a(t(e,r,...i))}).catch(e=>{for(let{promiseCallbacks:[,t]}of n)t(e)})},{reducer:(e,t)=>[...e??[],t],maxBurstDurationMs:n,triggerAt:`end`});return{...r,call:async(...e)=>new Promise((...t)=>{r.call({promiseCallbacks:t,params:e})})}}r(`showcase`,()=>{n(`results as object`,async()=>{let e=a.fn(async e=>t(e,e=>e.length)),n=s(async t=>await e(t.flat()),(e,t,n)=>e[n]),r=[n.call(`short`),n.call(`medium`),n.call(`loooooooooooooong`)];i(e).toHaveBeenCalledTimes(0);let[o,c,l]=await Promise.all(r);i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`short`,`medium`,`loooooooooooooong`]),i(e).toHaveLastResolvedWith({short:5,medium:6,loooooooooooooong:17}),i(o).toBe(5),i(c).toBe(6),i(l).toBe(17)}),n(`results as array`,async()=>{let e=a.fn(async e=>e.map(e=>e.length)),t=s(async t=>await e(t.flat()),(e,t)=>e[t]),n=[t.call(`short`),t.call(`medium`),t.call(`loooooooooooooong`)];i(e).toHaveBeenCalledTimes(0);let[r,o,c]=await Promise.all(n);i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`short`,`medium`,`loooooooooooooong`]),i(e).toHaveLastResolvedWith([5,6,17]),i(r).toBe(5),i(o).toBe(6),i(c).toBe(17)}),n(`error handling`,async()=>{let t=s(async e=>{if(e.length>1)throw Error(`Batch too big! ${JSON.stringify(e)}`)},e());await i(t.call(`a`)).resolves.toBeUndefined(),await i(Promise.all([t.call(`hello`),t.call(`world`)])).rejects.toThrowError(`Batch too big! [["hello"],["world"]]`)})});
2
- //# sourceMappingURL=funnel.reference-batch.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"funnel.reference-batch.test.js","names":["expect"],"sources":["../src/funnel.reference-batch.test.ts"],"sourcesContent":["/* eslint-disable ts/explicit-function-return-type, ts/no-explicit-any --\n * These aren't useful for a reference implementation!\n */\n\nimport { describe, expect, it, vi } from 'vitest';\nimport { doNothing } from './do-nothing';\nimport { fromKeys } from './from-keys';\nimport { funnel } from './funnel';\n\ninterface BatchRequest<Params extends Array<any>, Result> {\n readonly params: Params;\n readonly promiseCallbacks: Readonly<\n Parameters<ConstructorParameters<typeof Promise<Result>>[0]>\n >;\n}\n\n/**\n * A reference implementation for an async batching utility function built on\n * top of the `funnel` general purpose execution utility function. It will\n * accumulate all params passed to an async `call` method within the defined\n * burst duration and then use an async executor to process them in one\n * invocation. It then extracts an individual result for each call which is\n * used to resolve the original call.\n *\n * This allows synchronizing multiple async calls while keeping each call site\n * isolated from the rest (for example, as react components).\n *\n * This reference implementation can be copied into your project as-is, or you\n * can use it as the basis for a more complex implementation with additional\n * features.\n *\n * @param callback - The main function that takes a batch and returns an\n * aggregated response. The typing for the it's parameters will derive the\n * typing for the extractor and the `call` method.\n * @param extractor - A function that takes the aggregated response and extracts\n * from it the result for each individual call. The function is called with both\n * the index in the batch, and the params passed to the `call` method. This\n * allows handling APIs that return batch results as both objects and arrays.\n * @param maxBurstDurationMs - The period of time where the batcher would\n * collect params before triggering the executor. When set to 0 the batcher\n * does not incur any additional delays to the execution and would trigger at\n * the next tick, just like a regular async function would. This is also the\n * default value.\n * @returns A Funnel object with the `call` method augmented to support async\n * response.\n */\nfunction batch<Params extends Array<any>, BatchResponse, Result>(\n callback: (requests: ReadonlyArray<Params>) => Promise<BatchResponse>,\n extractor: (\n response: BatchResponse,\n index: number,\n ...params: Params\n ) => Result,\n maxBurstDurationMs = 0,\n) {\n const batchFunnel = funnel(\n // Passes all accumulated parameters to the callback and then extracts the response for each individual call via the extractor.\n (requests: ReadonlyArray<BatchRequest<Params, Result>>) => {\n callback(requests.map(({ params }) => params))\n // On success we iterate again over all calls and allow the extractor to pull a value out of the aggregated response for each one.\n .then((response) => {\n for (const [\n index,\n {\n params,\n promiseCallbacks: [resolve],\n },\n ] of requests.entries()) {\n const result = extractor(response, index, ...params);\n resolve(result);\n }\n })\n\n // On error we simply pass the error along to all reject callbacks.\n .catch((error) => {\n for (const {\n promiseCallbacks: [, reject],\n } of requests) {\n reject(error);\n }\n });\n },\n {\n // Reducer: Accumulates the parameters for each call, together with the promise executor callbacks needed to resolve or reject the call.\n reducer: (requests, request: BatchRequest<Params, Result>) => [\n ...(requests ?? []),\n request,\n ],\n maxBurstDurationMs,\n triggerAt: 'end',\n },\n );\n\n return {\n ...batchFunnel,\n\n call: async (...params: Params) =>\n new Promise<Result>((...promiseCallbacks) => {\n batchFunnel.call({ promiseCallbacks, params });\n }),\n };\n}\n\ndescribe('showcase', () => {\n it('results as object', async () => {\n const mockApi = vi.fn<\n (words: ReadonlyArray<string>) => Promise<Record<string, number>>\n >(async (words) => fromKeys(words, (word) => word.length));\n\n const countLettersApi = batch(\n // We only need to type the `requests` param of the `executor` callback.\n // All other types are derived from it.\n async (requests: ReadonlyArray<[word: string]>) =>\n await mockApi(requests.flat()),\n (response, _, word) => response[word],\n );\n\n const prepared = [\n countLettersApi.call('short'),\n countLettersApi.call('medium'),\n countLettersApi.call('loooooooooooooong'),\n ];\n\n expect(mockApi).toHaveBeenCalledTimes(0);\n\n const [shortResult, mediumResult, longResult] = await Promise.all(prepared);\n\n expect(mockApi).toHaveBeenCalledTimes(1);\n expect(mockApi).toHaveBeenLastCalledWith([\n 'short',\n 'medium',\n 'loooooooooooooong',\n ]);\n expect(mockApi).toHaveLastResolvedWith({\n short: 5,\n medium: 6,\n loooooooooooooong: 17,\n });\n expect(shortResult).toBe(5);\n expect(mediumResult).toBe(6);\n expect(longResult).toBe(17);\n });\n\n it('results as array', async () => {\n const mockApi = vi.fn<\n (words: ReadonlyArray<string>) => Promise<ReadonlyArray<number>>\n >(async (words) => words.map((word) => word.length));\n\n const countLettersApi = batch(\n // We only need to type the `requests` param of the `executor` callback.\n // All other types are derived from it.\n async (requests: ReadonlyArray<[word: string]>) =>\n await mockApi(requests.flat()),\n (response, index) => response[index],\n );\n\n const prepared = [\n countLettersApi.call('short'),\n countLettersApi.call('medium'),\n countLettersApi.call('loooooooooooooong'),\n ];\n\n expect(mockApi).toHaveBeenCalledTimes(0);\n\n const [shortResult, mediumResult, longResult] = await Promise.all(prepared);\n\n expect(mockApi).toHaveBeenCalledTimes(1);\n expect(mockApi).toHaveBeenLastCalledWith([\n 'short',\n 'medium',\n 'loooooooooooooong',\n ]);\n expect(mockApi).toHaveLastResolvedWith([5, 6, 17]);\n expect(shortResult).toBe(5);\n expect(mediumResult).toBe(6);\n expect(longResult).toBe(17);\n });\n\n it('error handling', async () => {\n const failingApi = batch(\n // We only need to type the `requests` param of the `executor` callback.\n // All other types are derived from it.\n async (requests: ReadonlyArray<[id: string]>) => {\n if (requests.length > 1) {\n throw new Error(`Batch too big! ${JSON.stringify(requests)}`);\n }\n },\n doNothing(),\n );\n\n await expect(failingApi.call('a')).resolves.toBeUndefined();\n\n await expect(\n Promise.all([failingApi.call('hello'), failingApi.call('world')]),\n ).rejects.toThrowError('Batch too big! [[\"hello\"],[\"world\"]]');\n });\n});\n"],"mappings":"uLA8CA,SAAS,EACP,EACA,EAKA,EAAqB,EACrB,CACA,IAAM,EAAc,EAEjB,GAA0D,CACzD,EAAS,EAAS,KAAK,CAAE,YAAa,EAAO,CAAC,CAE3C,KAAM,GAAa,CAClB,IAAK,GAAM,CACT,EACA,CACE,SACA,iBAAkB,CAAC,OAElB,EAAS,SAAS,CAErB,EADe,EAAU,EAAU,EAAO,GAAG,EAAO,CACrC,EAEjB,CAGD,MAAO,GAAU,CAChB,IAAK,GAAM,CACT,iBAAkB,EAAG,MAClB,EACH,EAAO,EAAM,EAEf,EAEN,CAEE,SAAU,EAAU,IAA0C,CAC5D,GAAI,GAAY,EAAE,CAClB,EACD,CACD,qBACA,UAAW,MACZ,CACF,CAED,MAAO,CACL,GAAG,EAEH,KAAM,MAAO,GAAG,IACd,IAAI,SAAiB,GAAG,IAAqB,CAC3C,EAAY,KAAK,CAAE,mBAAkB,SAAQ,CAAC,EAC9C,CACL,CAGH,EAAS,eAAkB,CACzB,EAAG,oBAAqB,SAAY,CAClC,IAAM,EAAU,EAAG,GAEjB,KAAO,IAAU,EAAS,EAAQ,GAAS,EAAK,OAAO,CAAC,CAEpD,EAAkB,EAGtB,KAAO,IACL,MAAM,EAAQ,EAAS,MAAM,CAAC,EAC/B,EAAU,EAAG,IAAS,EAAS,GACjC,CAEK,EAAW,CACf,EAAgB,KAAK,QAAQ,CAC7B,EAAgB,KAAK,SAAS,CAC9B,EAAgB,KAAK,oBAAoB,CAC1C,CAED,EAAO,EAAQ,CAAC,sBAAsB,EAAE,CAExC,GAAM,CAAC,EAAa,EAAc,GAAc,MAAM,QAAQ,IAAI,EAAS,CAE3E,EAAO,EAAQ,CAAC,sBAAsB,EAAE,CACxC,EAAO,EAAQ,CAAC,yBAAyB,CACvC,QACA,SACA,oBACD,CAAC,CACF,EAAO,EAAQ,CAAC,uBAAuB,CACrC,MAAO,EACP,OAAQ,EACR,kBAAmB,GACpB,CAAC,CACF,EAAO,EAAY,CAAC,KAAK,EAAE,CAC3B,EAAO,EAAa,CAAC,KAAK,EAAE,CAC5B,EAAO,EAAW,CAAC,KAAK,GAAG,EAC3B,CAEF,EAAG,mBAAoB,SAAY,CACjC,IAAM,EAAU,EAAG,GAEjB,KAAO,IAAU,EAAM,IAAK,GAAS,EAAK,OAAO,CAAC,CAE9C,EAAkB,EAGtB,KAAO,IACL,MAAM,EAAQ,EAAS,MAAM,CAAC,EAC/B,EAAU,IAAU,EAAS,GAC/B,CAEK,EAAW,CACf,EAAgB,KAAK,QAAQ,CAC7B,EAAgB,KAAK,SAAS,CAC9B,EAAgB,KAAK,oBAAoB,CAC1C,CAED,EAAO,EAAQ,CAAC,sBAAsB,EAAE,CAExC,GAAM,CAAC,EAAa,EAAc,GAAc,MAAM,QAAQ,IAAI,EAAS,CAE3E,EAAO,EAAQ,CAAC,sBAAsB,EAAE,CACxC,EAAO,EAAQ,CAAC,yBAAyB,CACvC,QACA,SACA,oBACD,CAAC,CACF,EAAO,EAAQ,CAAC,uBAAuB,CAAC,EAAG,EAAG,GAAG,CAAC,CAClD,EAAO,EAAY,CAAC,KAAK,EAAE,CAC3B,EAAO,EAAa,CAAC,KAAK,EAAE,CAC5B,EAAO,EAAW,CAAC,KAAK,GAAG,EAC3B,CAEF,EAAG,iBAAkB,SAAY,CAC/B,IAAM,EAAa,EAGjB,KAAO,IAA0C,CAC/C,GAAI,EAAS,OAAS,EACpB,MAAU,MAAM,kBAAkB,KAAK,UAAU,EAAS,GAAG,EAGjE,GAAW,CACZ,CAED,MAAMA,EAAO,EAAW,KAAK,IAAI,CAAC,CAAC,SAAS,eAAe,CAE3D,MAAMA,EACJ,QAAQ,IAAI,CAAC,EAAW,KAAK,QAAQ,CAAE,EAAW,KAAK,QAAQ,CAAC,CAAC,CAClE,CAAC,QAAQ,aAAa,uCAAuC,EAC9D,EACF"}
@@ -1 +0,0 @@
1
- const e=require(`./dist-8XtUY3ad.cjs`),t=require(`./do-nothing.cjs`),n=require(`./funnel.cjs`);e.i(`'call' method args`,()=>{e.a(`no args`,()=>{(0,e.t.expectTypeOf)(n.funnel(t.doNothing(),{reducer:e=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()}),e.a(`non-optional args`,()=>{(0,e.t.expectTypeOf)(n.funnel(t.doNothing(),{reducer:(e,t,n,r)=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()}),e.a(`optional args`,()=>{(0,e.t.expectTypeOf)(n.funnel(t.doNothing(),{reducer:(e,t)=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()}),e.a(`rest args`,()=>{(0,e.t.expectTypeOf)(n.funnel(t.doNothing(),{reducer:(e,...t)=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()})}),e.i(`derive the reducer accumulator type from the executor param`,()=>{e.a(`simple types`,()=>{n.funnel(e=>{},{reducer:t=>((0,e.t.expectTypeOf)(t).toEqualTypeOf(),t),triggerAt:`start`})}),e.a(`arrays`,()=>{n.funnel(e=>{},{reducer:t=>((0,e.t.expectTypeOf)(t).toEqualTypeOf(),t),triggerAt:`start`})}),e.a(`objects`,()=>{n.funnel(e=>{},{reducer:t=>((0,e.t.expectTypeOf)(t).toEqualTypeOf(),t),triggerAt:`start`})})}),e.i(`prevent bad options`,()=>{e.a(`minGapMs cannot be the only option with timing: end`,()=>{n.funnel(t.doNothing(),{minGapMs:100}),n.funnel(t.doNothing(),{triggerAt:`end`,minGapMs:100}),n.funnel(t.doNothing(),{triggerAt:`start`,minGapMs:100}),n.funnel(t.doNothing(),{triggerAt:`both`,minGapMs:100})})});
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- export { };
@@ -1,2 +0,0 @@
1
- import{doNothing as e}from"./do-nothing.js";import{a as t,i as n,t as r}from"./dist-Bd1vawFi.js";import{funnel as i}from"./funnel.js";n(`'call' method args`,()=>{t(`no args`,()=>{r(i(e(),{reducer:e=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()}),t(`non-optional args`,()=>{r(i(e(),{reducer:(e,t,n,r)=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()}),t(`optional args`,()=>{r(i(e(),{reducer:(e,t)=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()}),t(`rest args`,()=>{r(i(e(),{reducer:(e,...t)=>`test`,triggerAt:`start`}).call).parameters.toEqualTypeOf()})}),n(`derive the reducer accumulator type from the executor param`,()=>{t(`simple types`,()=>{i(e=>{},{reducer:e=>(r(e).toEqualTypeOf(),e),triggerAt:`start`})}),t(`arrays`,()=>{i(e=>{},{reducer:e=>(r(e).toEqualTypeOf(),e),triggerAt:`start`})}),t(`objects`,()=>{i(e=>{},{reducer:e=>(r(e).toEqualTypeOf(),e),triggerAt:`start`})})}),n(`prevent bad options`,()=>{t(`minGapMs cannot be the only option with timing: end`,()=>{i(e(),{minGapMs:100}),i(e(),{triggerAt:`end`,minGapMs:100}),i(e(),{triggerAt:`start`,minGapMs:100}),i(e(),{triggerAt:`both`,minGapMs:100})})});
2
- //# sourceMappingURL=funnel.test-d.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"funnel.test-d.js","names":[],"sources":["../src/funnel.test-d.ts"],"sourcesContent":["/* eslint-disable ts/no-unused-vars -- We just want to build types, we don't care about using the params... */\n\nimport { describe, expectTypeOf, it } from 'vitest';\nimport { doNothing } from './do-nothing';\nimport { funnel } from './funnel';\n\ndescribe('\\'call\\' method args', () => {\n it('no args', () => {\n const foo = funnel(doNothing(), {\n reducer: (_: 'test' | undefined) => 'test' as const,\n triggerAt: 'start',\n });\n\n expectTypeOf(foo.call).parameters.toEqualTypeOf<[]>();\n });\n\n it('non-optional args', () => {\n const foo = funnel(doNothing(), {\n // @ts-expect-error [ts(6133)] -- We want to use explicit names, not prefixed with _\n reducer: (_: 'test' | undefined, a: string, b: number, c: boolean) =>\n 'test' as const,\n\n triggerAt: 'start',\n });\n\n expectTypeOf(foo.call).parameters.toEqualTypeOf<\n [a: string, b: number, c: boolean]\n >();\n });\n\n it('optional args', () => {\n const foo = funnel(doNothing(), {\n // @ts-expect-error [ts(6133)] -- We want to use explicit names, not prefixed with _\n reducer: (_: 'test' | undefined, a?: string) => 'test' as const,\n triggerAt: 'start',\n });\n\n expectTypeOf(foo.call).parameters.toEqualTypeOf<[a?: string | undefined]>();\n });\n\n it('rest args', () => {\n const foo = funnel(doNothing(), {\n reducer:\n // @ts-expect-error [ts(6133)] -- We want to use explicit names, not prefixed with _\n (_: 'test' | undefined, ...as: Array<string>) => 'test' as const,\n\n triggerAt: 'start',\n });\n\n expectTypeOf(foo.call).parameters.toEqualTypeOf<Array<string>>();\n });\n});\n\ndescribe('derive the reducer accumulator type from the executor param', () => {\n it('simple types', () => {\n funnel(\n (_: number) => {\n // do nothing\n },\n {\n reducer: (reduced) => {\n expectTypeOf(reduced).toEqualTypeOf<number | undefined>();\n\n return reduced!;\n },\n triggerAt: 'start',\n },\n );\n });\n\n it('arrays', () => {\n funnel(\n (_: ReadonlyArray<number>) => {\n // do nothing,\n },\n {\n reducer: (reduced) => {\n expectTypeOf(reduced).toEqualTypeOf<\n ReadonlyArray<number> | undefined\n >();\n\n return reduced!;\n },\n triggerAt: 'start',\n },\n );\n });\n\n it('objects', () => {\n funnel(\n (_: { readonly a: number }) => {\n // do nothing\n },\n {\n reducer: (reduced) => {\n expectTypeOf(reduced).toEqualTypeOf<\n { readonly a: number } | undefined\n >();\n\n return reduced!;\n },\n triggerAt: 'start',\n },\n );\n });\n});\n\ndescribe('prevent bad options', () => {\n it('minGapMs cannot be the only option with timing: end', () => {\n funnel(\n doNothing(),\n // @ts-expect-error [ts(2345)] -- minGapMs cannot be set alone]\n { minGapMs: 100 },\n );\n\n funnel(\n doNothing(),\n // @ts-expect-error [ts(2345)] -- minGapMs cannot be set alone]\n { triggerAt: 'end', minGapMs: 100 },\n );\n\n // But it works with \"start\" and \"both\"\n\n funnel(doNothing(), { triggerAt: 'start', minGapMs: 100 });\n funnel(doNothing(), { triggerAt: 'both', minGapMs: 100 });\n });\n});\n"],"mappings":"sIAMA,EAAS,yBAA8B,CACrC,EAAG,cAAiB,CAMlB,EALY,EAAO,GAAW,CAAE,CAC9B,QAAU,GAA0B,OACpC,UAAW,QACZ,CAAC,CAEe,KAAK,CAAC,WAAW,eAAmB,EACrD,CAEF,EAAG,wBAA2B,CAS5B,EARY,EAAO,GAAW,CAAE,CAE9B,SAAU,EAAuB,EAAW,EAAW,IACrD,OAEF,UAAW,QACZ,CAAC,CAEe,KAAK,CAAC,WAAW,eAE/B,EACH,CAEF,EAAG,oBAAuB,CAOxB,EANY,EAAO,GAAW,CAAE,CAE9B,SAAU,EAAuB,IAAe,OAChD,UAAW,QACZ,CAAC,CAEe,KAAK,CAAC,WAAW,eAAyC,EAC3E,CAEF,EAAG,gBAAmB,CASpB,EARY,EAAO,GAAW,CAAE,CAC9B,SAEG,EAAuB,GAAG,IAAsB,OAEnD,UAAW,QACZ,CAAC,CAEe,KAAK,CAAC,WAAW,eAA8B,EAChE,EACF,CAEF,EAAS,kEAAqE,CAC5E,EAAG,mBAAsB,CACvB,EACG,GAAc,GAGf,CACE,QAAU,IACR,EAAa,EAAQ,CAAC,eAAmC,CAElD,GAET,UAAW,QACZ,CACF,EACD,CAEF,EAAG,aAAgB,CACjB,EACG,GAA6B,GAG9B,CACE,QAAU,IACR,EAAa,EAAQ,CAAC,eAEnB,CAEI,GAET,UAAW,QACZ,CACF,EACD,CAEF,EAAG,cAAiB,CAClB,EACG,GAA8B,GAG/B,CACE,QAAU,IACR,EAAa,EAAQ,CAAC,eAEnB,CAEI,GAET,UAAW,QACZ,CACF,EACD,EACF,CAEF,EAAS,0BAA6B,CACpC,EAAG,0DAA6D,CAC9D,EACE,GAAW,CAEX,CAAE,SAAU,IAAK,CAClB,CAED,EACE,GAAW,CAEX,CAAE,UAAW,MAAO,SAAU,IAAK,CACpC,CAID,EAAO,GAAW,CAAE,CAAE,UAAW,QAAS,SAAU,IAAK,CAAC,CAC1D,EAAO,GAAW,CAAE,CAAE,UAAW,OAAQ,SAAU,IAAK,CAAC,EACzD,EACF"}
@@ -1 +0,0 @@
1
- const e=require(`./dist-8XtUY3ad.cjs`),t=require(`./constant.cjs`),n=require(`./do-nothing.cjs`),r=require(`./funnel.cjs`),i=require(`./sleep.cjs`),a=16;function o(e,t){return e===void 0?[t]:[...e,t]}e.i(`reducer behavior`,()=>{e.a(`passes the reduced arg to the executor`,()=>{let n=e.r.fn();r.funnel(n,{reducer:t.constant(`hello world`),triggerAt:`start`,minQuietPeriodMs:16}).call(),e.n(n).toHaveBeenCalledTimes(1),e.n(n).toHaveBeenLastCalledWith(`hello world`)}),e.a(`reduces call args`,async()=>{let t=e.r.fn(e=>{}),n=r.funnel(t,{reducer:(e,t)=>(e??0)+t,minQuietPeriodMs:32,triggerAt:`end`});n.call(1),n.call(2),n.call(3),await i.sleep(16),n.call(4),n.call(5),n.call(6),await i.sleep(32),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith(21)}),e.a(`does not invoke if reduceArgs returns undefined`,async()=>{let n=e.r.fn();r.funnel(n,{reducer:t.constant(void 0),triggerAt:`end`,minQuietPeriodMs:16}).call(),await i.sleep(32),e.n(n).toHaveBeenCalledTimes(0)}),e.a(`supports multiple arguments`,()=>{let t=e.r.fn();r.funnel(t,{reducer:(e,t,n,r)=>[e,t,n,r],triggerAt:`start`,minQuietPeriodMs:16}).call(1,`a`,!0),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([void 0,1,`a`,!0])}),e.a(`reducer isn't called again when 'invokedAt: start'`,async()=>{let t=e.r.fn(o),a=r.funnel(n.doNothing(),{reducer:t,triggerAt:`start`,minQuietPeriodMs:16});a.call(`a`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith(void 0,`a`),a.call(`b`),a.call(`c`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(32),e.n(t).toHaveBeenCalledTimes(1)})}),e.i(`non-trivial (>0ms) timer duration`,()=>{e.i(`delay timer`,()=>{e.a(`invokedAt: start`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`start`,minGapMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1),n.call(`d`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`d`])}),e.a(`invokedAt: both`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`]),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(2),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),e.a(`invocations in the middle of a window`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(.75*16),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(.75*16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])})}),e.i(`burst timer`,()=>{e.a(`invokedAt: start`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`start`,minQuietPeriodMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1),n.call(`d`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`d`])}),e.a(`invokedAt: both`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minQuietPeriodMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`]),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`d`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(4),e.n(t).toHaveBeenLastCalledWith([`e`,`f`])}),e.a(`invokedAt: end`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`]),n.call(`e`),n.call(`f`),n.call(`g`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`e`,`f`,`g`])}),e.a(`invocations in the middle of a window`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:16});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(.9*16),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(.1*16),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`,`d`,`e`,`f`])}),e.a(`maxBurstDurationMs limits the burst duration`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,minQuietPeriodMs:16,maxBurstDurationMs:32,triggerAt:`end`});n.call(`a`),await i.sleep(.75*16),n.call(`b`),await i.sleep(.75*16),n.call(`c`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(.75*16),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`])})}),e.i(`both timers`,()=>{e.a(`delay is longer than burst`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,minGapMs:32,minQuietPeriodMs:16,triggerAt:`both`});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])}),e.a(`burst is longer than delay`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,minGapMs:16,minQuietPeriodMs:32,triggerAt:`both`});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])}),e.a(`burst and delay are equal`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,minGapMs:16,minQuietPeriodMs:16,triggerAt:`both`});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),e.a(`delay and maxBurstDurationMs are equal`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,minGapMs:16,minQuietPeriodMs:32,maxBurstDurationMs:16,triggerAt:`both`});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`d`,`e`,`f`])})})}),e.i(`immediate (===0) timer durations`,()=>{e.i(`delay timer`,()=>{e.a(`invokedAt: start`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`start`,minGapMs:0});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`d`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(2)}),e.a(`invokedAt: both`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:0});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),e.a(`with a non-trivial burst timer`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:0,minQuietPeriodMs:16});n.call(`a`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),n.call(`b`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`])})}),e.i(`burst timer`,()=>{e.a(`invokedAt: start`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`start`,minQuietPeriodMs:0});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`d`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(2)}),e.a(`invokedAt: both`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minQuietPeriodMs:0});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`]),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`d`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(4),e.n(t).toHaveBeenLastCalledWith([`e`,`f`])}),e.a(`invokedAt: end`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:0});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`]),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),e.a(`with a non-trivial delay timer`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:16,minQuietPeriodMs:0});n.call(`a`),n.call(`b`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`])}),e.a(`burst timer with non-trivial maxBurstDuration`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,minQuietPeriodMs:0,maxBurstDurationMs:16,triggerAt:`end`});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(0),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`])})}),e.a(`both timers`,async()=>{let t=e.r.fn();r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:0,minQuietPeriodMs:0}).call(`a`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(1)}),e.a(`maxBurstDurationMs = 0 limits the burst immediately`,async()=>{let t=e.r.fn();r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:16,maxBurstDurationMs:0}).call(`a`),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`])}),e.a(`all timeouts zero`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minGapMs:0,minQuietPeriodMs:0,maxBurstDurationMs:0});n.call(`a`),n.call(`b`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`])})}),e.i(`default minQuietPeriodMs === 0 when minGapMs is not defined`,()=>{e.a(`invokedAt: start`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`start`});n.call(`a`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),n.call(`b`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(1),n.call(`c`),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`c`])}),e.a(`invokedAt: both`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`});n.call(`a`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),n.call(`b`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(0),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`]),n.call(`c`),e.n(t).toHaveBeenCalledTimes(3),e.n(t).toHaveBeenLastCalledWith([`c`])})}),e.i(`utility functions`,()=>{e.i(`flush`,()=>{e.a(`flush triggers an immediate invocation`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:16});n.call(`a`),n.call(`b`),n.call(`c`),n.flush(),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`]),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1)}),e.a(`flush during active burst`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:32});n.call(`a`),n.call(`b`),n.call(`c`),await i.sleep(16),n.flush(),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`,`b`,`c`]),await i.sleep(32),e.n(t).toHaveBeenCalledTimes(1)})}),e.i(`cancel`,()=>{e.a(`cancel prevents invocation`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`end`,minQuietPeriodMs:16});n.call(`a`),n.call(`b`),n.call(`c`),n.cancel(),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(0)}),e.a(`cancel during delay period`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`start`,minGapMs:32});n.call(`a`),n.call(`b`),await i.sleep(16),n.cancel(),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1)})}),e.i(`isIdle`,()=>{e.a(`isIdle reflects the funnel's state`,()=>{let t=r.funnel(e.r.fn(),{reducer:o,triggerAt:`end`,minQuietPeriodMs:16});e.n(t.isIdle).toBe(!0),t.call(`a`),e.n(t.isIdle).toBe(!1),t.cancel(),e.n(t.isIdle).toBe(!0)}),e.a(`isIdle works when burst duration is 0`,async()=>{let t=r.funnel(e.r.fn(),{reducer:o,triggerAt:`end`,minQuietPeriodMs:0});e.n(t.isIdle).toBe(!0),t.call(`a`),t.call(`b`),t.call(`c`),e.n(t.isIdle).toBe(!1),await i.sleep(0),e.n(t.isIdle).toBe(!0)})})}),e.i(`edge-cases`,()=>{e.a(`bursts that start late don't prevent delayed invocations`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minQuietPeriodMs:16,minGapMs:32});n.call(`a`),n.call(`b`),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(1.5*16),e.n(t).toHaveBeenCalledTimes(1),n.call(`d`),n.call(`e`),n.call(`f`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(.5*16),e.n(t).toHaveBeenCalledTimes(2),e.n(t).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])}),e.a(`delay timeouts don't cause an invocation in the middle of bursts`,async()=>{let t=e.r.fn(),n=r.funnel(t,{reducer:o,triggerAt:`both`,minQuietPeriodMs:32,minGapMs:16});n.call(`a`),e.n(t).toHaveBeenCalledTimes(1),e.n(t).toHaveBeenLastCalledWith([`a`]),await i.sleep(16),n.call(`b`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),n.call(`c`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),n.call(`d`),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(1),await i.sleep(16),e.n(t).toHaveBeenCalledTimes(2)})});
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- export { };
@@ -1,2 +0,0 @@
1
- import{constant as e}from"./constant.js";import{doNothing as t}from"./do-nothing.js";import{a as n,i as r,n as i,r as a}from"./dist-Bd1vawFi.js";import{funnel as o}from"./funnel.js";import{sleep as s}from"./sleep.js";function c(e,t){return e===void 0?[t]:[...e,t]}r(`reducer behavior`,()=>{n(`passes the reduced arg to the executor`,()=>{let t=a.fn();o(t,{reducer:e(`hello world`),triggerAt:`start`,minQuietPeriodMs:16}).call(),i(t).toHaveBeenCalledTimes(1),i(t).toHaveBeenLastCalledWith(`hello world`)}),n(`reduces call args`,async()=>{let e=a.fn(e=>{}),t=o(e,{reducer:(e,t)=>(e??0)+t,minQuietPeriodMs:32,triggerAt:`end`});t.call(1),t.call(2),t.call(3),await s(16),t.call(4),t.call(5),t.call(6),await s(32),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith(21)}),n(`does not invoke if reduceArgs returns undefined`,async()=>{let t=a.fn();o(t,{reducer:e(void 0),triggerAt:`end`,minQuietPeriodMs:16}).call(),await s(32),i(t).toHaveBeenCalledTimes(0)}),n(`supports multiple arguments`,()=>{let e=a.fn();o(e,{reducer:(e,t,n,r)=>[e,t,n,r],triggerAt:`start`,minQuietPeriodMs:16}).call(1,`a`,!0),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([void 0,1,`a`,!0])}),n(`reducer isn't called again when 'invokedAt: start'`,async()=>{let e=a.fn(c),n=o(t(),{reducer:e,triggerAt:`start`,minQuietPeriodMs:16});n.call(`a`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith(void 0,`a`),n.call(`b`),n.call(`c`),i(e).toHaveBeenCalledTimes(1),await s(32),i(e).toHaveBeenCalledTimes(1)})}),r(`non-trivial (>0ms) timer duration`,()=>{r(`delay timer`,()=>{n(`invokedAt: start`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`start`,minGapMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),i(e).toHaveBeenCalledTimes(1),t.call(`d`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`d`])}),n(`invokedAt: both`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minGapMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`]),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(2),await s(16),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),n(`invocations in the middle of a window`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minGapMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(.75*16),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(1),await s(.75*16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])})}),r(`burst timer`,()=>{n(`invokedAt: start`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`start`,minQuietPeriodMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),i(e).toHaveBeenCalledTimes(1),t.call(`d`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`d`])}),n(`invokedAt: both`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minQuietPeriodMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`]),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`d`]),await s(16),i(e).toHaveBeenCalledTimes(4),i(e).toHaveBeenLastCalledWith([`e`,`f`])}),n(`invokedAt: end`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(0),await s(16),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`]),t.call(`e`),t.call(`f`),t.call(`g`),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`e`,`f`,`g`])}),n(`invocations in the middle of a window`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:16});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(0),await s(.9*16),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(0),await s(.1*16),i(e).toHaveBeenCalledTimes(0),await s(16),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`,`d`,`e`,`f`])}),n(`maxBurstDurationMs limits the burst duration`,async()=>{let e=a.fn(),t=o(e,{reducer:c,minQuietPeriodMs:16,maxBurstDurationMs:32,triggerAt:`end`});t.call(`a`),await s(.75*16),t.call(`b`),await s(.75*16),t.call(`c`),i(e).toHaveBeenCalledTimes(0),await s(.75*16),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`])})}),r(`both timers`,()=>{n(`delay is longer than burst`,async()=>{let e=a.fn(),t=o(e,{reducer:c,minGapMs:32,minQuietPeriodMs:16,triggerAt:`both`});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])}),n(`burst is longer than delay`,async()=>{let e=a.fn(),t=o(e,{reducer:c,minGapMs:16,minQuietPeriodMs:32,triggerAt:`both`});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])}),n(`burst and delay are equal`,async()=>{let e=a.fn(),t=o(e,{reducer:c,minGapMs:16,minQuietPeriodMs:16,triggerAt:`both`});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`]),await s(16),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),n(`delay and maxBurstDurationMs are equal`,async()=>{let e=a.fn(),t=o(e,{reducer:c,minGapMs:16,minQuietPeriodMs:32,maxBurstDurationMs:16,triggerAt:`both`});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`]),await s(16),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`d`,`e`,`f`])})})}),r(`immediate (===0) timer durations`,()=>{r(`delay timer`,()=>{n(`invokedAt: start`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`start`,minGapMs:0});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`d`]),await s(0),i(e).toHaveBeenCalledTimes(2)}),n(`invokedAt: both`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minGapMs:0});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`]),await s(0),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),n(`with a non-trivial burst timer`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minGapMs:0,minQuietPeriodMs:16});t.call(`a`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),t.call(`b`),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`])})}),r(`burst timer`,()=>{n(`invokedAt: start`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`start`,minQuietPeriodMs:0});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`d`]),await s(0),i(e).toHaveBeenCalledTimes(2)}),n(`invokedAt: both`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minQuietPeriodMs:0});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`]),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`d`]),await s(0),i(e).toHaveBeenCalledTimes(4),i(e).toHaveBeenLastCalledWith([`e`,`f`])}),n(`invokedAt: end`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:0});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(0),await s(0),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`]),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(1),await s(0),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`d`,`e`,`f`])}),n(`with a non-trivial delay timer`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minGapMs:16,minQuietPeriodMs:0});t.call(`a`),t.call(`b`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`])}),n(`burst timer with non-trivial maxBurstDuration`,async()=>{let e=a.fn(),t=o(e,{reducer:c,minQuietPeriodMs:0,maxBurstDurationMs:16,triggerAt:`end`});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(0),await s(0),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`])})}),n(`both timers`,async()=>{let e=a.fn();o(e,{reducer:c,triggerAt:`both`,minGapMs:0,minQuietPeriodMs:0}).call(`a`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),i(e).toHaveBeenCalledTimes(1)}),n(`maxBurstDurationMs = 0 limits the burst immediately`,async()=>{let e=a.fn();o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:16,maxBurstDurationMs:0}).call(`a`),await s(0),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`])}),n(`all timeouts zero`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minGapMs:0,minQuietPeriodMs:0,maxBurstDurationMs:0});t.call(`a`),t.call(`b`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(0),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`])})}),r(`default minQuietPeriodMs === 0 when minGapMs is not defined`,()=>{n(`invokedAt: start`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`start`});t.call(`a`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),t.call(`b`),i(e).toHaveBeenCalledTimes(1),await s(0),i(e).toHaveBeenCalledTimes(1),t.call(`c`),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`c`])}),n(`invokedAt: both`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`});t.call(`a`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),t.call(`b`),i(e).toHaveBeenCalledTimes(1),await s(0),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`]),t.call(`c`),i(e).toHaveBeenCalledTimes(3),i(e).toHaveBeenLastCalledWith([`c`])})}),r(`utility functions`,()=>{r(`flush`,()=>{n(`flush triggers an immediate invocation`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:16});t.call(`a`),t.call(`b`),t.call(`c`),t.flush(),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`]),await s(16),i(e).toHaveBeenCalledTimes(1)}),n(`flush during active burst`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:32});t.call(`a`),t.call(`b`),t.call(`c`),await s(16),t.flush(),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`,`b`,`c`]),await s(32),i(e).toHaveBeenCalledTimes(1)})}),r(`cancel`,()=>{n(`cancel prevents invocation`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`end`,minQuietPeriodMs:16});t.call(`a`),t.call(`b`),t.call(`c`),t.cancel(),await s(16),i(e).toHaveBeenCalledTimes(0)}),n(`cancel during delay period`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`start`,minGapMs:32});t.call(`a`),t.call(`b`),await s(16),t.cancel(),await s(16),i(e).toHaveBeenCalledTimes(1)})}),r(`isIdle`,()=>{n(`isIdle reflects the funnel's state`,()=>{let e=o(a.fn(),{reducer:c,triggerAt:`end`,minQuietPeriodMs:16});i(e.isIdle).toBe(!0),e.call(`a`),i(e.isIdle).toBe(!1),e.cancel(),i(e.isIdle).toBe(!0)}),n(`isIdle works when burst duration is 0`,async()=>{let e=o(a.fn(),{reducer:c,triggerAt:`end`,minQuietPeriodMs:0});i(e.isIdle).toBe(!0),e.call(`a`),e.call(`b`),e.call(`c`),i(e.isIdle).toBe(!1),await s(0),i(e.isIdle).toBe(!0)})})}),r(`edge-cases`,()=>{n(`bursts that start late don't prevent delayed invocations`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minQuietPeriodMs:16,minGapMs:32});t.call(`a`),t.call(`b`),t.call(`c`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(1.5*16),i(e).toHaveBeenCalledTimes(1),t.call(`d`),t.call(`e`),t.call(`f`),i(e).toHaveBeenCalledTimes(1),await s(.5*16),i(e).toHaveBeenCalledTimes(2),i(e).toHaveBeenLastCalledWith([`b`,`c`,`d`,`e`,`f`])}),n(`delay timeouts don't cause an invocation in the middle of bursts`,async()=>{let e=a.fn(),t=o(e,{reducer:c,triggerAt:`both`,minQuietPeriodMs:32,minGapMs:16});t.call(`a`),i(e).toHaveBeenCalledTimes(1),i(e).toHaveBeenLastCalledWith([`a`]),await s(16),t.call(`b`),i(e).toHaveBeenCalledTimes(1),await s(16),t.call(`c`),i(e).toHaveBeenCalledTimes(1),await s(16),t.call(`d`),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(1),await s(16),i(e).toHaveBeenCalledTimes(2)})});
2
- //# sourceMappingURL=funnel.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"funnel.test.js","names":[],"sources":["../src/funnel.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from 'vitest';\nimport { constant } from './constant';\nimport { doNothing } from './do-nothing';\nimport { funnel } from './funnel';\nimport { sleep } from './sleep';\n\n/**\n * We need some non-trivial duration to use in all our tests, to abstract the\n * actual chosen value we use this UnitOfTime (UT) constant. As long as it is a\n * positive integer, the actual value doesn't matter (but the larger it is,\n * the longer the tests would take to run). The number is in milliseconds.\n */\nconst UT = 16;\n\n// We use this reducer to collect arguments from each invocation so we can test what the function was invoked with.\nfunction ARGS_COLLECTOR(accumulator: ReadonlyArray<string> | undefined, item: string): ReadonlyArray<string> {\n return accumulator === undefined ? [item] : [...accumulator, item];\n}\n\ndescribe('reducer behavior', () => {\n it('passes the reduced arg to the executor', () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: constant('hello world'),\n triggerAt: 'start',\n minQuietPeriodMs: UT,\n });\n foo.call();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith('hello world');\n });\n\n it('reduces call args', async () => {\n const mockFn = vi.fn((_total: number): void => {\n /* do nothing */\n });\n\n const foo = funnel(mockFn, {\n reducer: (total, item: number) => (total ?? 0) + item,\n minQuietPeriodMs: 2 * UT,\n triggerAt: 'end',\n });\n foo.call(1);\n foo.call(2);\n foo.call(3);\n await sleep(UT);\n foo.call(4);\n foo.call(5);\n foo.call(6);\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(21 /* 1 + 2 + ... + 6 */);\n });\n\n it('does not invoke if reduceArgs returns undefined', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: constant(undefined),\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n });\n foo.call();\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n });\n\n it('supports multiple arguments', () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: (ret: unknown, a: number, b: string, c: boolean) => [\n ret,\n a,\n b,\n c,\n ],\n triggerAt: 'start',\n minQuietPeriodMs: UT,\n });\n foo.call(1, 'a', true);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith([undefined, 1, 'a', true]);\n });\n\n it('reducer isn\\'t called again when \\'invokedAt: start\\'', async () => {\n const mockFn = vi.fn(ARGS_COLLECTOR);\n const foo = funnel(doNothing(), {\n reducer: mockFn,\n triggerAt: 'start',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(undefined, 'a');\n\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe('non-trivial (>0ms) timer duration', () => {\n describe('delay timer', () => {\n it('invokedAt: start', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'start',\n minGapMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n foo.call('d');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n // \"b\" and \"c\" have been ignored because the funnel is only configured to\n // run the function at the start of the delay window, meaning anything\n // after that is simply dropped.\n expect(mockFn).toHaveBeenLastCalledWith(['d']);\n });\n\n it('invokedAt: both', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c']);\n\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['d', 'e', 'f']);\n });\n\n it('invocations in the middle of a window', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0.75 * UT);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(0.75 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c', 'd', 'e', 'f']);\n });\n });\n\n describe('burst timer', () => {\n it('invokedAt: start', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'start',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n foo.call('d');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n // \"b\" and \"c\" have been ignored because the funnel is only configured to\n // run the function at the start of the delay window, meaning anything\n // after that is simply dropped.\n expect(mockFn).toHaveBeenLastCalledWith(['d']);\n });\n\n it('invokedAt: both', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c']);\n\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['d']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(4);\n expect(mockFn).toHaveBeenLastCalledWith(['e', 'f']);\n });\n\n it('invokedAt: end', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c']);\n\n foo.call('e');\n foo.call('f');\n foo.call('g');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['e', 'f', 'g']);\n });\n\n it('invocations in the middle of a window', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(0.9 * UT);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(0.1 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c', 'd', 'e', 'f']);\n });\n\n it('maxBurstDurationMs limits the burst duration', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n minQuietPeriodMs: UT,\n maxBurstDurationMs: 2 * UT,\n triggerAt: 'end',\n });\n foo.call('a');\n await sleep(0.75 * UT);\n foo.call('b');\n await sleep(0.75 * UT);\n foo.call('c');\n\n // Total time is approximately 1.5*UT, less than 2UT which is\n // maxBurstDurationMs\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n // We sleep less than minQuietPeriodMs but more than our\n // maxBurstDurationMs so that we validate that the burst is being ended\n // prematurely.\n await sleep(0.75 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c']);\n });\n });\n\n describe('both timers', () => {\n it('delay is longer than burst', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n minGapMs: 2 * UT,\n minQuietPeriodMs: UT,\n triggerAt: 'both',\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c', 'd', 'e', 'f']);\n });\n\n it('burst is longer than delay', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n minGapMs: UT,\n minQuietPeriodMs: 2 * UT,\n triggerAt: 'both',\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c', 'd', 'e', 'f']);\n });\n\n it('burst and delay are equal', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n minGapMs: UT,\n minQuietPeriodMs: UT,\n triggerAt: 'both',\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['d', 'e', 'f']);\n });\n\n it('delay and maxBurstDurationMs are equal', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n minGapMs: UT,\n minQuietPeriodMs: 2 * UT,\n maxBurstDurationMs: UT,\n triggerAt: 'both',\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['d', 'e', 'f']);\n });\n });\n});\n\ndescribe('immediate (===0) timer durations', () => {\n describe('delay timer', () => {\n it('invokedAt: start', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'start',\n minGapMs: 0,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n // \"b\" and \"c\" have been ignored because the funnel is only configured to\n // run the function at the start of the delay window, meaning anything\n // after that is simply dropped.\n expect(mockFn).toHaveBeenLastCalledWith(['d']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('invokedAt: both', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: 0,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['d', 'e', 'f']);\n });\n\n it('with a non-trivial burst timer', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: 0,\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n foo.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b']);\n });\n });\n\n describe('burst timer', () => {\n it('invokedAt: start', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'start',\n minQuietPeriodMs: 0,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n // \"b\" and \"c\" have been ignored because the funnel is only configured to\n // run the function at the start of the delay window, meaning anything\n // after that is simply dropped.\n expect(mockFn).toHaveBeenLastCalledWith(['d']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n\n it('invokedAt: both', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minQuietPeriodMs: 0,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c']);\n\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['d']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(4);\n expect(mockFn).toHaveBeenLastCalledWith(['e', 'f']);\n });\n\n it('invokedAt: end', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: 0,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c']);\n\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['d', 'e', 'f']);\n });\n\n it('with a non-trivial delay timer', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: UT,\n minQuietPeriodMs: 0,\n });\n foo.call('a');\n foo.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b']);\n });\n\n it('burst timer with non-trivial maxBurstDuration', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n minQuietPeriodMs: 0,\n maxBurstDurationMs: UT,\n triggerAt: 'end',\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c']);\n });\n });\n\n it('both timers', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: 0,\n minQuietPeriodMs: 0,\n });\n foo.call('a');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('maxBurstDurationMs = 0 limits the burst immediately', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n maxBurstDurationMs: 0,\n });\n foo.call('a');\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n });\n\n it('all timeouts zero', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minGapMs: 0,\n minQuietPeriodMs: 0,\n maxBurstDurationMs: 0,\n });\n foo.call('a');\n foo.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b']);\n });\n});\n\ndescribe('default minQuietPeriodMs === 0 when minGapMs is not defined', () => {\n it('invokedAt: start', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'start',\n });\n foo.call('a');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n foo.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['c']);\n });\n\n it('invokedAt: both', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n });\n foo.call('a');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n foo.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(0);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b']);\n\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(3);\n expect(mockFn).toHaveBeenLastCalledWith(['c']);\n });\n});\n\ndescribe('utility functions', () => {\n describe('flush', () => {\n it('flush triggers an immediate invocation', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n foo.flush();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c']);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n\n it('flush during active burst', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: 2 * UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n await sleep(UT);\n\n foo.flush();\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a', 'b', 'c']);\n\n await sleep(2 * UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('cancel', () => {\n it('cancel prevents invocation', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n foo.cancel();\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(0);\n });\n\n it('cancel during delay period', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'start',\n minGapMs: 2 * UT,\n });\n foo.call('a');\n foo.call('b');\n\n await sleep(UT);\n foo.cancel();\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('isIdle', () => {\n it('isIdle reflects the funnel\\'s state', () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: UT,\n });\n\n expect(foo.isIdle).toBe(true);\n\n foo.call('a');\n\n expect(foo.isIdle).toBe(false);\n\n foo.cancel();\n\n expect(foo.isIdle).toBe(true);\n });\n\n it('isIdle works when burst duration is 0', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'end',\n minQuietPeriodMs: 0,\n });\n\n expect(foo.isIdle).toBe(true);\n\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n expect(foo.isIdle).toBe(false);\n\n await sleep(0);\n\n expect(foo.isIdle).toBe(true);\n });\n });\n});\n\ndescribe('edge-cases', () => {\n it('bursts that start late don\\'t prevent delayed invocations', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minQuietPeriodMs: UT,\n minGapMs: 2 * UT,\n });\n foo.call('a');\n foo.call('b');\n foo.call('c');\n\n // We expect the function to be called once because we invoke it both at\n // the start and end of the blackout periods.\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(1.5 * UT);\n\n // But because our delay time is still longer, we still expect that the\n // function hasn't been called yet again for the end of the blackout period.\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n foo.call('d');\n foo.call('e');\n foo.call('f');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(0.5 * UT);\n\n // After the delay is over we expect the function to be invoked again for\n // the end of the blackout period.\n expect(mockFn).toHaveBeenCalledTimes(2);\n expect(mockFn).toHaveBeenLastCalledWith(['b', 'c', 'd', 'e', 'f']);\n });\n\n it('delay timeouts don\\'t cause an invocation in the middle of bursts', async () => {\n const mockFn = vi.fn();\n const foo = funnel(mockFn, {\n reducer: ARGS_COLLECTOR,\n triggerAt: 'both',\n minQuietPeriodMs: 2 * UT,\n minGapMs: UT,\n });\n foo.call('a');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n expect(mockFn).toHaveBeenLastCalledWith(['a']);\n\n await sleep(UT);\n foo.call('b');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n foo.call('c');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n foo.call('d');\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(1);\n\n await sleep(UT);\n\n expect(mockFn).toHaveBeenCalledTimes(2);\n });\n});\n"],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- import { t as IterableContainer } from "./iterable-container-1TN3AJ3s.cjs";
2
- import { t as TupleParts } from "./tuple-parts-CzQQupgi.cjs";
3
- import { t as BoundedPartial } from "./bounded-partial-CtOsGqxa.cjs";
4
- import { t as FilteredArray } from "./filtered-array-C--8loav.cjs";
5
- import { t as ArrayRequiredPrefix } from "./array-required-prefix-BFDM7eSS.cjs";
6
- import { AllUnionFields, ConditionalKeys, EmptyObject, IsNever, Or, Simplify } from "type-fest";
7
-
8
- //#region src/group-by-prop.d.ts
9
- type GroupByProp<T extends IterableContainer, Prop extends GroupableProps<T>> = T extends unknown ? FixEmptyObject<EnsureValuesAreNonEmpty<GroupByPropRaw<T, Prop>>> : never;
10
- type GroupByPropRaw<T extends IterableContainer, Prop extends GroupableProps<T>> = { [Value in AllPropValues<T, Prop>]: FilteredArray<T, Record<Prop, Value>> };
11
- type GroupableProps<T extends IterableContainer> = ConditionalKeys<ItemsSuperObject<T>, PropertyKey | undefined>;
12
- type AllPropValues<T extends IterableContainer, Prop extends GroupableProps<T>> = Extract<ItemsSuperObject<T>[Prop], PropertyKey>;
13
- type ItemsSuperObject<T extends IterableContainer> = AllUnionFields<Exclude<T[number], undefined>>;
14
- type FixEmptyObject<T> = IsNever<keyof T> extends true ? EmptyObject : T;
15
- type EnsureValuesAreNonEmpty<T extends Record<PropertyKey, IterableContainer>> = Simplify<Omit<T, PossiblyEmptyArrayKeys<T>> & BoundedPartial<CoercedNonEmptyValues<Pick<T, PossiblyEmptyArrayKeys<T>>>>>;
16
- type PossiblyEmptyArrayKeys<T extends Record<PropertyKey, IterableContainer>> = keyof T extends infer Key extends unknown ? Key extends keyof T ? IsNonEmptyArray<T[Key]> extends true ? never : Key : never : never;
17
- type IsNonEmptyArray<T extends IterableContainer> = Or<IsNonEmptyFixedTuple<TupleParts<T>['required']>, IsNonEmptyFixedTuple<TupleParts<T>['suffix']>>;
18
- type IsNonEmptyFixedTuple<T> = IsNever<Extract<T, readonly []>>;
19
- type CoercedNonEmptyValues<T extends Record<PropertyKey, IterableContainer>> = { [P in keyof T]: ArrayRequiredPrefix<T[P], 1> };
20
- /**
21
- * Groups the elements of an array of objects based on the values of a
22
- * specified property of those objects. The result would contain a property for
23
- * each unique value of the specific property, with it's value being the input
24
- * array filtered to only items that have that property set to that value.
25
- * For any object where the property is missing, or if it's value is
26
- * `undefined` the item would be filtered out.
27
- *
28
- * The grouping property is enforced at the type level to exist in at least one
29
- * item and to never have a value that cannot be used as an object key (e.g. it
30
- * must be `PropertyKey | undefined`).
31
- *
32
- * The resulting arrays are filtered with the prop and it's value as a
33
- * type-guard, effectively narrowing the items in each output arrays. This
34
- * means that when the grouping property is the discriminator of a
35
- * discriminated union type each output array would contain just the subtype for
36
- * that value.
37
- *
38
- * If you need more control over the grouping you should use `groupBy` instead.
39
- *
40
- * @param data - The items to group.
41
- * @param prop - The property name to group by.
42
- * @signature
43
- * R.groupByProp(data, prop)
44
- * @example
45
- * const result = R.groupByProp(
46
- * // ^? { cat: [{ a: 'cat' }], dog: [{ a: 'dog' }] }
47
- * [{ a: 'cat' }, { a: 'dog' }] as const,
48
- * 'a',
49
- * );
50
- * @dataFirst
51
- * @category Array
52
- */
53
- declare function groupByProp<T extends IterableContainer, const Prop extends GroupableProps<T>>(data: T, prop: Prop): GroupByProp<T, Prop>;
54
- /**
55
- * Groups the elements of an array of objects based on the values of a
56
- * specified property of those objects. The result would contain a property for
57
- * each unique value of the specific property, with it's value being the input
58
- * array filtered to only items that have that property set to that value.
59
- * For any object where the property is missing, or if it's value is
60
- * `undefined` the item would be filtered out.
61
- *
62
- * The grouping property is enforced at the type level to exist in at least one
63
- * item and to never have a value that cannot be used as an object key (e.g. it
64
- * must be `PropertyKey | undefined`).
65
- *
66
- * The resulting arrays are filtered with the prop and it's value as a
67
- * type-guard, effectively narrowing the items in each output arrays. This
68
- * means that when the grouping property is the discriminator of a
69
- * discriminated union type each output array would contain just the subtype for
70
- * that value.
71
- *
72
- * If you need more control over the grouping you should use `groupBy` instead.
73
- *
74
- * @param prop - The property name to group by.
75
- * @signature
76
- * R.groupByProp(prop)(data);
77
- * @example
78
- * const result = R.pipe(
79
- * // ^? { cat: [{ a: 'cat' }], dog: [{ a: 'dog' }] }
80
- * [{ a: 'cat' }, { a: 'dog' }] as const,
81
- * R.groupByProp('a'),
82
- * );
83
- * @dataLast
84
- * @category Array
85
- */
86
- declare function groupByProp<T extends IterableContainer, const Prop extends GroupableProps<T>>(prop: Prop): (data: T) => GroupByProp<T, Prop>;
87
- //#endregion
88
- export { groupByProp };
89
- //# sourceMappingURL=group-by-prop.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"group-by-prop.d.cts","names":[],"sources":["../src/group-by-prop.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- import { t as IterableContainer } from "./iterable-container-Dv5vSKht.js";
2
- import { t as TupleParts } from "./tuple-parts-BYI4o8Vk.js";
3
- import { t as BoundedPartial } from "./bounded-partial-CPc1XU57.js";
4
- import { t as FilteredArray } from "./filtered-array-wtIEwdU7.js";
5
- import { t as ArrayRequiredPrefix } from "./array-required-prefix-DwpaLy0D.js";
6
- import { AllUnionFields, ConditionalKeys, EmptyObject, IsNever, Or, Simplify } from "type-fest";
7
-
8
- //#region src/group-by-prop.d.ts
9
- type GroupByProp<T extends IterableContainer, Prop extends GroupableProps<T>> = T extends unknown ? FixEmptyObject<EnsureValuesAreNonEmpty<GroupByPropRaw<T, Prop>>> : never;
10
- type GroupByPropRaw<T extends IterableContainer, Prop extends GroupableProps<T>> = { [Value in AllPropValues<T, Prop>]: FilteredArray<T, Record<Prop, Value>> };
11
- type GroupableProps<T extends IterableContainer> = ConditionalKeys<ItemsSuperObject<T>, PropertyKey | undefined>;
12
- type AllPropValues<T extends IterableContainer, Prop extends GroupableProps<T>> = Extract<ItemsSuperObject<T>[Prop], PropertyKey>;
13
- type ItemsSuperObject<T extends IterableContainer> = AllUnionFields<Exclude<T[number], undefined>>;
14
- type FixEmptyObject<T> = IsNever<keyof T> extends true ? EmptyObject : T;
15
- type EnsureValuesAreNonEmpty<T extends Record<PropertyKey, IterableContainer>> = Simplify<Omit<T, PossiblyEmptyArrayKeys<T>> & BoundedPartial<CoercedNonEmptyValues<Pick<T, PossiblyEmptyArrayKeys<T>>>>>;
16
- type PossiblyEmptyArrayKeys<T extends Record<PropertyKey, IterableContainer>> = keyof T extends infer Key extends unknown ? Key extends keyof T ? IsNonEmptyArray<T[Key]> extends true ? never : Key : never : never;
17
- type IsNonEmptyArray<T extends IterableContainer> = Or<IsNonEmptyFixedTuple<TupleParts<T>['required']>, IsNonEmptyFixedTuple<TupleParts<T>['suffix']>>;
18
- type IsNonEmptyFixedTuple<T> = IsNever<Extract<T, readonly []>>;
19
- type CoercedNonEmptyValues<T extends Record<PropertyKey, IterableContainer>> = { [P in keyof T]: ArrayRequiredPrefix<T[P], 1> };
20
- /**
21
- * Groups the elements of an array of objects based on the values of a
22
- * specified property of those objects. The result would contain a property for
23
- * each unique value of the specific property, with it's value being the input
24
- * array filtered to only items that have that property set to that value.
25
- * For any object where the property is missing, or if it's value is
26
- * `undefined` the item would be filtered out.
27
- *
28
- * The grouping property is enforced at the type level to exist in at least one
29
- * item and to never have a value that cannot be used as an object key (e.g. it
30
- * must be `PropertyKey | undefined`).
31
- *
32
- * The resulting arrays are filtered with the prop and it's value as a
33
- * type-guard, effectively narrowing the items in each output arrays. This
34
- * means that when the grouping property is the discriminator of a
35
- * discriminated union type each output array would contain just the subtype for
36
- * that value.
37
- *
38
- * If you need more control over the grouping you should use `groupBy` instead.
39
- *
40
- * @param data - The items to group.
41
- * @param prop - The property name to group by.
42
- * @signature
43
- * R.groupByProp(data, prop)
44
- * @example
45
- * const result = R.groupByProp(
46
- * // ^? { cat: [{ a: 'cat' }], dog: [{ a: 'dog' }] }
47
- * [{ a: 'cat' }, { a: 'dog' }] as const,
48
- * 'a',
49
- * );
50
- * @dataFirst
51
- * @category Array
52
- */
53
- declare function groupByProp<T extends IterableContainer, const Prop extends GroupableProps<T>>(data: T, prop: Prop): GroupByProp<T, Prop>;
54
- /**
55
- * Groups the elements of an array of objects based on the values of a
56
- * specified property of those objects. The result would contain a property for
57
- * each unique value of the specific property, with it's value being the input
58
- * array filtered to only items that have that property set to that value.
59
- * For any object where the property is missing, or if it's value is
60
- * `undefined` the item would be filtered out.
61
- *
62
- * The grouping property is enforced at the type level to exist in at least one
63
- * item and to never have a value that cannot be used as an object key (e.g. it
64
- * must be `PropertyKey | undefined`).
65
- *
66
- * The resulting arrays are filtered with the prop and it's value as a
67
- * type-guard, effectively narrowing the items in each output arrays. This
68
- * means that when the grouping property is the discriminator of a
69
- * discriminated union type each output array would contain just the subtype for
70
- * that value.
71
- *
72
- * If you need more control over the grouping you should use `groupBy` instead.
73
- *
74
- * @param prop - The property name to group by.
75
- * @signature
76
- * R.groupByProp(prop)(data);
77
- * @example
78
- * const result = R.pipe(
79
- * // ^? { cat: [{ a: 'cat' }], dog: [{ a: 'dog' }] }
80
- * [{ a: 'cat' }, { a: 'dog' }] as const,
81
- * R.groupByProp('a'),
82
- * );
83
- * @dataLast
84
- * @category Array
85
- */
86
- declare function groupByProp<T extends IterableContainer, const Prop extends GroupableProps<T>>(prop: Prop): (data: T) => GroupByProp<T, Prop>;
87
- //#endregion
88
- export { groupByProp };
89
- //# sourceMappingURL=group-by-prop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"group-by-prop.d.ts","names":[],"sources":["../src/group-by-prop.ts"],"sourcesContent":[],"mappings":"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"}