@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-by.cjs","names":["curryOrderRules","hasAtLeast"],"sources":["../src/first-by.ts"],"sourcesContent":["import type { OrderRule } from './internal/curry-order-rules';\nimport type { CompareFunction } from './internal/types/compare-function';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { NonEmptyArray } from './internal/types/non-empty-array';\nimport { hasAtLeast } from './has-at-least';\nimport { curryOrderRules } from './internal/curry-order-rules';\n\ntype FirstBy<T extends IterableContainer>\n = | T[number]\n | (T extends readonly [unknown, ...(ReadonlyArray<unknown>)]\n ? never\n : T extends readonly [...(ReadonlyArray<unknown>), unknown]\n ? never\n : undefined);\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `first(sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * firstBy(...rules)(data);\n * @example\n * const max = pipe([1,2,3], firstBy([identity(), \"desc\"])); // => 3;\n * const min = pipe([1,2,3], firstBy(identity())); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = pipe(data, firstBy([(item) => item.a.length, \"desc\"])); // => { a: \"aaa\" };\n * const minBy = pipe(data, firstBy((item) => item.a.length)); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = pipe(data, firstBy(prop('type'), [prop('size'), 'desc'])); // => {type: \"cat\", size: 2}\n * @dataLast\n * @category Array\n */\nexport function firstBy<T extends IterableContainer>(\n ...rules: Readonly<NonEmptyArray<OrderRule<T[number]>>>\n): (data: T) => FirstBy<T>;\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `first(sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param data - An array of items.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * firstBy(data, ...rules);\n * @example\n * const max = firstBy([1,2,3], [identity(), \"desc\"]); // => 3;\n * const min = firstBy([1,2,3], identity()); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = firstBy(data, [(item) => item.a.length, \"desc\"]); // => { a: \"aaa\" };\n * const minBy = firstBy(data, (item) => item.a.length); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = firstBy(data, prop('type'), [prop('size'), 'desc']); // => {type: \"cat\", size: 2}\n * @dataFirst\n * @category Array\n */\nexport function firstBy<T extends IterableContainer>(\n data: T,\n ...rules: Readonly<NonEmptyArray<OrderRule<T[number]>>>\n): FirstBy<T>;\n\nexport function firstBy(...args: ReadonlyArray<unknown>): unknown {\n return curryOrderRules(firstByImplementation, args);\n}\n\nfunction firstByImplementation<T>(\n data: ReadonlyArray<T>,\n compareFn: CompareFunction<T>,\n): T | undefined {\n if (!hasAtLeast(data, 2)) {\n // If we have 0 or 1 item we simply return the trivial result.\n return data[0];\n }\n\n let [currentFirst] = data;\n\n // Remove the first item, we won't compare it with itself.\n const [, ...rest] = data;\n for (const item of rest) {\n if (compareFn(item, currentFirst) < 0) {\n // item comes before currentFirst in the order.\n currentFirst = item;\n }\n }\n\n return currentFirst;\n}\n"],"mappings":"uJAyEA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAOA,EAAAA,EAAgB,EAAuB,EAAK,CAGrD,SAAS,EACP,EACA,EACe,CACf,GAAI,CAACC,EAAAA,WAAW,EAAM,EAAE,CAEtB,OAAO,EAAK,GAGd,GAAI,CAAC,GAAgB,EAGf,EAAG,GAAG,GAAQ,EACpB,IAAK,IAAM,KAAQ,EACb,EAAU,EAAM,EAAa,CAAG,IAElC,EAAe,GAInB,OAAO"}
package/dist/first-by.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-order-rules-DwrF-_P1.js";import{t}from"./has-at-least-Coy9sM-B.js";function n(...t){return e(r,t)}function r(e,n){if(!t(e,2))return e[0];let[r]=e,[,...i]=e;for(let e of i)n(e,r)<0&&(r=e);return r}export{n as firstBy};
1
+ import{t as e}from"./curry-order-rules-BLyCSMdZ.js";import{hasAtLeast as t}from"./has-at-least.js";function n(...t){return e(r,t)}function r(e,n){if(!t(e,2))return e[0];let[r]=e,[,...i]=e;for(let e of i)n(e,r)<0&&(r=e);return r}export{n as firstBy};
2
2
  //# sourceMappingURL=first-by.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"first-by.js","names":[],"sources":["../src/first-by.ts"],"sourcesContent":["import type { OrderRule } from './internal/curry-order-rules';\nimport type { CompareFunction } from './internal/types/compare-function';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { NonEmptyArray } from './internal/types/non-empty-array';\nimport { hasAtLeast } from './has-at-least';\nimport { curryOrderRules } from './internal/curry-order-rules';\n\ntype FirstBy<T extends IterableContainer>\n = | T[number]\n | (T extends readonly [unknown, ...ReadonlyArray<unknown>]\n ? never\n : T extends readonly [...ReadonlyArray<unknown>, unknown]\n ? never\n : undefined);\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `P.first(P.sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * P.firstBy(...rules)(data);\n * @example\n * const max = P.pipe([1,2,3], P.firstBy([P.identity(), \"desc\"])); // => 3;\n * const min = P.pipe([1,2,3], P.firstBy(P.identity())); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = P.pipe(data, P.firstBy([(item) => item.a.length, \"desc\"])); // => { a: \"aaa\" };\n * const minBy = P.pipe(data, P.firstBy((item) => item.a.length)); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = P.pipe(data, P.firstBy(P.prop('type'), [P.prop('size'), 'desc'])); // => {type: \"cat\", size: 2}\n * @dataLast\n * @category Array\n */\nexport function firstBy<T extends IterableContainer>(\n ...rules: Readonly<NonEmptyArray<OrderRule<T[number]>>>\n): (data: T) => FirstBy<T>;\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `P.first(P.sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param data - An array of items.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * P.firstBy(data, ...rules);\n * @example\n * const max = P.firstBy([1,2,3], [P.identity(), \"desc\"]); // => 3;\n * const min = P.firstBy([1,2,3], P.identity()); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = P.firstBy(data, [(item) => item.a.length, \"desc\"]); // => { a: \"aaa\" };\n * const minBy = P.firstBy(data, (item) => item.a.length); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = P.firstBy(data, P.prop('type'), [P.prop('size'), 'desc']); // => {type: \"cat\", size: 2}\n * @dataFirst\n * @category Array\n */\nexport function firstBy<T extends IterableContainer>(\n data: T,\n ...rules: Readonly<NonEmptyArray<OrderRule<T[number]>>>\n): FirstBy<T>;\n\nexport function firstBy(...args: ReadonlyArray<unknown>): unknown {\n return curryOrderRules(firstByImplementation, args);\n}\n\nfunction firstByImplementation<T>(\n data: ReadonlyArray<T>,\n compareFn: CompareFunction<T>,\n): T | undefined {\n if (!hasAtLeast(data, 2)) {\n // If we have 0 or 1 item we simply return the trivial result.\n return data[0];\n }\n\n let [currentFirst] = data;\n\n // Remove the first item, we won't compare it with itself.\n const [, ...rest] = data;\n for (const item of rest) {\n if (compareFn(item, currentFirst) < 0) {\n // item comes before currentFirst in the order.\n currentFirst = item;\n }\n }\n\n return currentFirst;\n}\n"],"mappings":"8FAyEA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAO,EAAgB,EAAuB,EAAK,CAGrD,SAAS,EACP,EACA,EACe,CACf,GAAI,CAAC,EAAW,EAAM,EAAE,CAEtB,OAAO,EAAK,GAGd,GAAI,CAAC,GAAgB,EAGf,EAAG,GAAG,GAAQ,EACpB,IAAK,IAAM,KAAQ,EACb,EAAU,EAAM,EAAa,CAAG,IAElC,EAAe,GAInB,OAAO"}
1
+ {"version":3,"file":"first-by.js","names":[],"sources":["../src/first-by.ts"],"sourcesContent":["import type { OrderRule } from './internal/curry-order-rules';\nimport type { CompareFunction } from './internal/types/compare-function';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { NonEmptyArray } from './internal/types/non-empty-array';\nimport { hasAtLeast } from './has-at-least';\nimport { curryOrderRules } from './internal/curry-order-rules';\n\ntype FirstBy<T extends IterableContainer>\n = | T[number]\n | (T extends readonly [unknown, ...(ReadonlyArray<unknown>)]\n ? never\n : T extends readonly [...(ReadonlyArray<unknown>), unknown]\n ? never\n : undefined);\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `first(sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * firstBy(...rules)(data);\n * @example\n * const max = pipe([1,2,3], firstBy([identity(), \"desc\"])); // => 3;\n * const min = pipe([1,2,3], firstBy(identity())); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = pipe(data, firstBy([(item) => item.a.length, \"desc\"])); // => { a: \"aaa\" };\n * const minBy = pipe(data, firstBy((item) => item.a.length)); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = pipe(data, firstBy(prop('type'), [prop('size'), 'desc'])); // => {type: \"cat\", size: 2}\n * @dataLast\n * @category Array\n */\nexport function firstBy<T extends IterableContainer>(\n ...rules: Readonly<NonEmptyArray<OrderRule<T[number]>>>\n): (data: T) => FirstBy<T>;\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `first(sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param data - An array of items.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * firstBy(data, ...rules);\n * @example\n * const max = firstBy([1,2,3], [identity(), \"desc\"]); // => 3;\n * const min = firstBy([1,2,3], identity()); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = firstBy(data, [(item) => item.a.length, \"desc\"]); // => { a: \"aaa\" };\n * const minBy = firstBy(data, (item) => item.a.length); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = firstBy(data, prop('type'), [prop('size'), 'desc']); // => {type: \"cat\", size: 2}\n * @dataFirst\n * @category Array\n */\nexport function firstBy<T extends IterableContainer>(\n data: T,\n ...rules: Readonly<NonEmptyArray<OrderRule<T[number]>>>\n): FirstBy<T>;\n\nexport function firstBy(...args: ReadonlyArray<unknown>): unknown {\n return curryOrderRules(firstByImplementation, args);\n}\n\nfunction firstByImplementation<T>(\n data: ReadonlyArray<T>,\n compareFn: CompareFunction<T>,\n): T | undefined {\n if (!hasAtLeast(data, 2)) {\n // If we have 0 or 1 item we simply return the trivial result.\n return data[0];\n }\n\n let [currentFirst] = data;\n\n // Remove the first item, we won't compare it with itself.\n const [, ...rest] = data;\n for (const item of rest) {\n if (compareFn(item, currentFirst) < 0) {\n // item comes before currentFirst in the order.\n currentFirst = item;\n }\n }\n\n return currentFirst;\n}\n"],"mappings":"mGAyEA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAO,EAAgB,EAAuB,EAAK,CAGrD,SAAS,EACP,EACA,EACe,CACf,GAAI,CAAC,EAAW,EAAM,EAAE,CAEtB,OAAO,EAAK,GAGd,GAAI,CAAC,GAAgB,EAGf,EAAG,GAAG,GAAQ,EACpB,IAAK,IAAM,KAAQ,EACb,EAAU,EAAM,EAAa,CAAG,IAElC,EAAe,GAInB,OAAO"}
package/dist/first.cjs CHANGED
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`),t=require(`./to-single-Chq_hKEk.cjs`);function n(...n){return e.t(r,n,t.t(i))}function r([e]){return e}function i(){return a}function a(e){return{hasNext:!0,next:e,done:!0}}exports.first=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`),t=require(`./to-single-BunGuk7o.cjs`);function n(...n){return e.curry(r,n,t.t(i))}const r=([e])=>e,i=()=>a;function a(e){return{hasNext:!0,next:e,done:!0}}exports.first=n;
2
+ //# sourceMappingURL=first.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first.cjs","names":["curry","toSingle"],"sources":["../src/first.ts"],"sourcesContent":["import type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\nimport { toSingle } from './internal/to-single';\n\ntype First<T extends IterableContainer> = T extends []\n ? undefined\n : T extends readonly [unknown, ...Array<unknown>]\n ? T[0]\n : T extends readonly [...infer Pre, infer Last]\n ? Last | Pre[0]\n : T[0] | undefined;\n\n/**\n * Gets the first element of `array`.\n *\n * @param data - The array.\n * @returns The first element of the array.\n * @signature\n * first(array)\n * @example\n * first([1, 2, 3]) // => 1\n * first([]) // => undefined\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function first<T extends IterableContainer>(data: T): First<T>;\n\n/**\n * Gets the first element of `array`.\n *\n * @returns The first element of the array.\n * @signature\n * first()(array)\n * @example\n * pipe(\n * [1, 2, 4, 8, 16],\n * filter(x => x > 3),\n * first(),\n * x => x + 1\n * ); // => 5\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function first(): <T extends IterableContainer>(data: T) => First<T>;\n\nexport function first(...args: ReadonlyArray<unknown>): unknown {\n return curry(firstImplementation, args, toSingle(lazyImplementation));\n}\n\nconst firstImplementation = <T>([item]: ReadonlyArray<T>): T | undefined => item;\n\nconst lazyImplementation = (): LazyEvaluator => firstLazy;\n\nfunction firstLazy<T>(value: T) {\n return ({ hasNext: true, next: value, done: true }) as const;\n}\n"],"mappings":"wIAgDA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAOA,EAAAA,MAAM,EAAqB,EAAMC,EAAAA,EAAS,EAAmB,CAAC,CAGvE,MAAM,GAA0B,CAAC,KAA2C,EAEtE,MAA0C,EAEhD,SAAS,EAAa,EAAU,CAC9B,MAAQ,CAAE,QAAS,GAAM,KAAM,EAAO,KAAM,GAAM"}
package/dist/first.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";import{t}from"./to-single-BKYbBic-.js";function n(...n){return e(r,n,t(i))}function r([e]){return e}function i(){return a}function a(e){return{hasNext:!0,next:e,done:!0}}export{n as first};
1
+ import{curry as e}from"./curry.js";import{t}from"./to-single-XEXXW73e.js";function n(...n){return e(r,n,t(i))}const r=([e])=>e,i=()=>a;function a(e){return{hasNext:!0,next:e,done:!0}}export{n as first};
2
2
  //# sourceMappingURL=first.js.map
package/dist/first.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"first.js","names":[],"sources":["../src/first.ts"],"sourcesContent":["import type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\nimport { toSingle } from './internal/to-single';\n\ntype First<T extends IterableContainer> = T extends []\n ? undefined\n : T extends readonly [unknown, ...Array<unknown>]\n ? T[0]\n : T extends readonly [...infer Pre, infer Last]\n ? Last | Pre[0]\n : T[0] | undefined;\n\n/**\n * Gets the first element of `array`.\n *\n * @param data - The array.\n * @returns The first element of the array.\n * @signature\n * P.first(array)\n * @example\n * P.first([1, 2, 3]) // => 1\n * P.first([]) // => undefined\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function first<T extends IterableContainer>(data: T): First<T>;\n\n/**\n * Gets the first element of `array`.\n *\n * @returns The first element of the array.\n * @signature\n * P.first()(array)\n * @example\n * P.pipe(\n * [1, 2, 4, 8, 16],\n * P.filter(x => x > 3),\n * P.first(),\n * x => x + 1\n * ); // => 5\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function first(): <T extends IterableContainer>(data: T) => First<T>;\n\nexport function first(...args: ReadonlyArray<unknown>): unknown {\n return curry(firstImplementation, args, toSingle(lazyImplementation));\n}\n\nfunction firstImplementation<T>([item]: ReadonlyArray<T>): T | undefined {\n return item;\n}\n\nfunction lazyImplementation(): LazyEvaluator {\n return firstLazy;\n}\n\n// eslint-disable-next-line ts/explicit-function-return-type\nfunction firstLazy<T>(value: T) {\n return ({ hasNext: true, next: value, done: true }) as const;\n}\n"],"mappings":"+EAgDA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAO,EAAM,EAAqB,EAAM,EAAS,EAAmB,CAAC,CAGvE,SAAS,EAAuB,CAAC,GAAwC,CACvE,OAAO,EAGT,SAAS,GAAoC,CAC3C,OAAO,EAIT,SAAS,EAAa,EAAU,CAC9B,MAAQ,CAAE,QAAS,GAAM,KAAM,EAAO,KAAM,GAAM"}
1
+ {"version":3,"file":"first.js","names":[],"sources":["../src/first.ts"],"sourcesContent":["import type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\nimport { toSingle } from './internal/to-single';\n\ntype First<T extends IterableContainer> = T extends []\n ? undefined\n : T extends readonly [unknown, ...Array<unknown>]\n ? T[0]\n : T extends readonly [...infer Pre, infer Last]\n ? Last | Pre[0]\n : T[0] | undefined;\n\n/**\n * Gets the first element of `array`.\n *\n * @param data - The array.\n * @returns The first element of the array.\n * @signature\n * first(array)\n * @example\n * first([1, 2, 3]) // => 1\n * first([]) // => undefined\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function first<T extends IterableContainer>(data: T): First<T>;\n\n/**\n * Gets the first element of `array`.\n *\n * @returns The first element of the array.\n * @signature\n * first()(array)\n * @example\n * pipe(\n * [1, 2, 4, 8, 16],\n * filter(x => x > 3),\n * first(),\n * x => x + 1\n * ); // => 5\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function first(): <T extends IterableContainer>(data: T) => First<T>;\n\nexport function first(...args: ReadonlyArray<unknown>): unknown {\n return curry(firstImplementation, args, toSingle(lazyImplementation));\n}\n\nconst firstImplementation = <T>([item]: ReadonlyArray<T>): T | undefined => item;\n\nconst lazyImplementation = (): LazyEvaluator => firstLazy;\n\nfunction firstLazy<T>(value: T) {\n return ({ hasNext: true, next: value, done: true }) as const;\n}\n"],"mappings":"0EAgDA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAO,EAAM,EAAqB,EAAM,EAAS,EAAmB,CAAC,CAGvE,MAAM,GAA0B,CAAC,KAA2C,EAEtE,MAA0C,EAEhD,SAAS,EAAa,EAAU,CAC9B,MAAQ,CAAE,QAAS,GAAM,KAAM,EAAO,KAAM,GAAM"}
package/dist/flat-map.cjs CHANGED
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`);function t(...t){return e.t(n,t,r)}function n(e,t){return e.flatMap(t)}function r(e){return(t,n,r)=>{let i=e(t,n,r);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}}}exports.flatMap=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`);function t(...t){return e.curry(n,t,r)}function n(e,t){return e.flatMap(t)}function r(e){return(t,n,r)=>{let i=e(t,n,r);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}}}exports.flatMap=t;
2
+ //# sourceMappingURL=flat-map.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flat-map.cjs","names":["curry"],"sources":["../src/flat-map.ts"],"sourcesContent":["import type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param data - The items to map and flatten.\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * flatMap(data, callbackfn)\n * @example\n * flatMap([1, 2, 3], x => [x, x * 10]) // => [1, 10, 2, 20, 3, 30]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flatMap<T, U>(\n data: ReadonlyArray<T>,\n callbackfn: (input: T, index: number, data: ReadonlyArray<T>) => ReadonlyArray<U> | U,\n): Array<U>;\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * flatMap(callbackfn)(data)\n * @example\n * pipe([1, 2, 3], flatMap(x => [x, x * 10])) // => [1, 10, 2, 20, 3, 30]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flatMap<T, U>(\n callbackfn: (input: T, index: number, data: ReadonlyArray<T>) => ReadonlyArray<U> | U,\n): (data: ReadonlyArray<T>) => Array<U>;\n\nexport function flatMap(...args: ReadonlyArray<unknown>): unknown {\n return curry(flatMapImplementation, args, lazyImplementation);\n}\n\nfunction flatMapImplementation<T, U>(data: ReadonlyArray<T>, callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => ReadonlyArray<U> | U): Array<U> {\n return data.flatMap(callbackfn);\n}\n\nfunction lazyImplementation<T, K>(callbackfn: (\n input: T,\n index: number,\n data: ReadonlyArray<T>,\n) => K | ReadonlyArray<K>): LazyEvaluator<T, K> {\n return (value, index, data) => {\n const next = callbackfn(value, index, data);\n return Array.isArray(next)\n ? { done: false, hasNext: true, hasMany: true, next }\n : { done: false, hasNext: true, next };\n };\n}\n"],"mappings":"kGAqDA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAOA,EAAAA,MAAM,EAAuB,EAAM,EAAmB,CAG/D,SAAS,EAA4B,EAAwB,EAAiG,CAC5J,OAAO,EAAK,QAAQ,EAAW,CAGjC,SAAS,EAAyB,EAIc,CAC9C,OAAQ,EAAO,EAAO,IAAS,CAC7B,IAAM,EAAO,EAAW,EAAO,EAAO,EAAK,CAC3C,OAAO,MAAM,QAAQ,EAAK,CACtB,CAAE,KAAM,GAAO,QAAS,GAAM,QAAS,GAAM,OAAM,CACnD,CAAE,KAAM,GAAO,QAAS,GAAM,OAAM"}
package/dist/flat-map.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";function t(...t){return e(n,t,r)}function n(e,t){return e.flatMap(t)}function r(e){return(t,n,r)=>{let i=e(t,n,r);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}}}export{t as flatMap};
1
+ import{curry as e}from"./curry.js";function t(...t){return e(n,t,r)}function n(e,t){return e.flatMap(t)}function r(e){return(t,n,r)=>{let i=e(t,n,r);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}}}export{t as flatMap};
2
2
  //# sourceMappingURL=flat-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flat-map.js","names":[],"sources":["../src/flat-map.ts"],"sourcesContent":["import type { LazyEvaluator } from './internal/types/lazy-evaluator';\n\nimport { curry } from './curry';\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param data - The items to map and flatten.\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * P.flatMap(data, callbackfn)\n * @example\n * P.flatMap([1, 2, 3], x => [x, x * 10]) // => [1, 10, 2, 20, 3, 30]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flatMap<T, U>(\n data: ReadonlyArray<T>,\n callbackfn: (\n input: T,\n index: number,\n data: ReadonlyArray<T>,\n ) => ReadonlyArray<U> | U,\n): Array<U>;\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * P.flatMap(callbackfn)(data)\n * @example\n * P.pipe([1, 2, 3], P.flatMap(x => [x, x * 10])) // => [1, 10, 2, 20, 3, 30]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flatMap<T, U>(\n callbackfn: (\n input: T,\n index: number,\n data: ReadonlyArray<T>,\n ) => ReadonlyArray<U> | U,\n): (data: ReadonlyArray<T>) => Array<U>;\n\nexport function flatMap(...args: ReadonlyArray<unknown>): unknown {\n return curry(flatMapImplementation, args, lazyImplementation);\n}\n\nfunction flatMapImplementation<T, U>(\n data: ReadonlyArray<T>,\n callbackfn: (\n value: T,\n index: number,\n data: ReadonlyArray<T>,\n ) => ReadonlyArray<U> | U,\n): Array<U> {\n return data.flatMap(callbackfn);\n}\n\nfunction lazyImplementation<T, K>(\n callbackfn: (\n input: T,\n index: number,\n data: ReadonlyArray<T>,\n ) => K | ReadonlyArray<K>,\n): LazyEvaluator<T, K> {\n // @ts-expect-error [ts2322] - We need to make LazyMany better so it accommodate the typing here...\n return (value, index, data) => {\n const next = callbackfn(value, index, data);\n return Array.isArray(next)\n ? { done: false, hasNext: true, hasMany: true, next }\n : { done: false, hasNext: true, next };\n };\n}\n"],"mappings":"wCA8DA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAO,EAAM,EAAuB,EAAM,EAAmB,CAG/D,SAAS,EACP,EACA,EAKU,CACV,OAAO,EAAK,QAAQ,EAAW,CAGjC,SAAS,EACP,EAKqB,CAErB,OAAQ,EAAO,EAAO,IAAS,CAC7B,IAAM,EAAO,EAAW,EAAO,EAAO,EAAK,CAC3C,OAAO,MAAM,QAAQ,EAAK,CACtB,CAAE,KAAM,GAAO,QAAS,GAAM,QAAS,GAAM,OAAM,CACnD,CAAE,KAAM,GAAO,QAAS,GAAM,OAAM"}
1
+ {"version":3,"file":"flat-map.js","names":[],"sources":["../src/flat-map.ts"],"sourcesContent":["import type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param data - The items to map and flatten.\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * flatMap(data, callbackfn)\n * @example\n * flatMap([1, 2, 3], x => [x, x * 10]) // => [1, 10, 2, 20, 3, 30]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flatMap<T, U>(\n data: ReadonlyArray<T>,\n callbackfn: (input: T, index: number, data: ReadonlyArray<T>) => ReadonlyArray<U> | U,\n): Array<U>;\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * flatMap(callbackfn)(data)\n * @example\n * pipe([1, 2, 3], flatMap(x => [x, x * 10])) // => [1, 10, 2, 20, 3, 30]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flatMap<T, U>(\n callbackfn: (input: T, index: number, data: ReadonlyArray<T>) => ReadonlyArray<U> | U,\n): (data: ReadonlyArray<T>) => Array<U>;\n\nexport function flatMap(...args: ReadonlyArray<unknown>): unknown {\n return curry(flatMapImplementation, args, lazyImplementation);\n}\n\nfunction flatMapImplementation<T, U>(data: ReadonlyArray<T>, callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => ReadonlyArray<U> | U): Array<U> {\n return data.flatMap(callbackfn);\n}\n\nfunction lazyImplementation<T, K>(callbackfn: (\n input: T,\n index: number,\n data: ReadonlyArray<T>,\n) => K | ReadonlyArray<K>): LazyEvaluator<T, K> {\n return (value, index, data) => {\n const next = callbackfn(value, index, data);\n return Array.isArray(next)\n ? { done: false, hasNext: true, hasMany: true, next }\n : { done: false, hasNext: true, next };\n };\n}\n"],"mappings":"mCAqDA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAO,EAAM,EAAuB,EAAM,EAAmB,CAG/D,SAAS,EAA4B,EAAwB,EAAiG,CAC5J,OAAO,EAAK,QAAQ,EAAW,CAGjC,SAAS,EAAyB,EAIc,CAC9C,OAAQ,EAAO,EAAO,IAAS,CAC7B,IAAM,EAAO,EAAW,EAAO,EAAO,EAAK,CAC3C,OAAO,MAAM,QAAQ,EAAK,CACtB,CAAE,KAAM,GAAO,QAAS,GAAM,QAAS,GAAM,OAAM,CACnD,CAAE,KAAM,GAAO,QAAS,GAAM,OAAM"}
package/dist/flat.cjs CHANGED
@@ -1 +1,2 @@
1
- const e=require(`./lazy-data-last-impl-D4kLybyP.cjs`),t=require(`./utility-evaluators-CAbODbuk.cjs`);function n(t,n){return typeof t==`object`?r(t,n):e.t(r,t===void 0?[]:[t],i)}function r(e,t){return t===void 0?e.flat():e.flat(t)}function i(e){return e===void 0||e===1?a:e<=0?t.r:t=>Array.isArray(t)?{next:t.flat(e-1),hasNext:!0,hasMany:!0,done:!1}:{next:t,hasNext:!0,done:!1}}function a(e){return Array.isArray(e)?{next:e,hasNext:!0,hasMany:!0,done:!1}:{next:e,hasNext:!0,done:!1}}exports.flat=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./lazy-data-last-impl-B05ZpguF.cjs`),t=require(`./utility-evaluators-C8koSp9T.cjs`);function n(t,n){return typeof t==`object`?r(t,n):e.t(r,t===void 0?[]:[t],i)}function r(e,t){return t===void 0?e.flat():e.flat(t)}function i(e){return e===void 0||e===1?a:e<=0?t.r:t=>Array.isArray(t)?{next:t.flat(e-1),hasNext:!0,hasMany:!0,done:!1}:{next:t,hasNext:!0,done:!1}}function a(e){return Array.isArray(e)?{next:e,hasNext:!0,hasMany:!0,done:!1}:{next:e,hasNext:!0,done:!1}}exports.flat=n;
2
+ //# sourceMappingURL=flat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flat.cjs","names":["lazyDataLastImpl","lazyIdentityEvaluator"],"sources":["../src/flat.ts"],"sourcesContent":["import type { IsNumericLiteral } from 'type-fest';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport type { LazyResult } from './internal/types/lazy-result';\nimport { lazyDataLastImpl } from './internal/lazy-data-last-impl';\nimport { lazyIdentityEvaluator } from './internal/utility-evaluators';\n\ntype FlatArray<\n T,\n Depth extends number,\n Iteration extends ReadonlyArray<unknown> = [],\n> = Depth extends Iteration['length']\n ? // Stopping condition for the recursion when the array is a tuple.\n T\n : T extends readonly []\n ? // Trivial result when the array is empty.\n []\n : T extends readonly [infer Item, ...infer Rest]\n ? // Tuples could be special-cased by \"iterating\" over each item\n // separately so that we maintain more information from the input type,\n // instead of putting all values in a union.\n [\n ...(Item extends IterableContainer\n ? // If the item itself is an array we continue going deeper\n FlatArray<Item, Depth, [...Iteration, unknown]>\n : // But if it isn't we add it to the output tuple\n [Item]),\n // And we merge this with the result from the rest of the tuple.\n ...FlatArray<Rest, Depth, Iteration>,\n ]\n : // For simple arrays we compute the item type, and wrap it with an\n // array.\n Array<FlatSimpleArrayItems<T, Depth, Iteration>>;\n\n// This type is based on the built-in type for `Array.prototype.flat` from the\n// ES2019 Array typescript library, but we improved it to handle any depth\n// (avoiding the fixed `20` in the built-in type).\n// @see https://github.com/microsoft/TypeScript/blob/main/src/lib/es2019.array.d.ts#L1-L5\ntype FlatSimpleArrayItems<\n T,\n Depth extends number,\n Iteration extends ReadonlyArray<unknown> = [],\n IsDone extends boolean = false,\n> = {\n done: T;\n recur: T extends ReadonlyArray<infer InnerArr>\n ? FlatSimpleArrayItems<\n InnerArr,\n Depth,\n [...Iteration, unknown],\n // This trick allows us to continue 1 iteration more than the depth,\n // which is required to flatten the array up to depth.\n Iteration['length'] extends Depth ? true : false\n >\n : T;\n}[IsDone extends true ? 'done' : 'recur'];\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param data - The items to flatten.\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1. Non literal values (those typed as\n * `number`cannot be used. `Infinity`, `Number.POSITIVE_INFINITY` and\n * `Number.MAX_VALUE` are all typed as `number` and can't be used either. For\n * \"unlimited\" depth use a literal value that would exceed your expected\n * practical maximum nesting level.\n * @signature\n * flat(data)\n * flat(data, depth)\n * @example\n * flat([[1, 2], [3, 4], [5], [[6]]]); // => [1, 2, 3, 4, 5, [6]]\n * flat([[[1]], [[2]]], 2); // => [1, 2]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flat<T extends IterableContainer, Depth extends number = 1>(\n data: T,\n depth?: IsNumericLiteral<Depth> extends true ? Depth : never,\n): FlatArray<T, Depth>;\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1.\n * @signature\n * flat()(data)\n * flat(depth)(data)\n * @example\n * pipe([[1, 2], [3, 4], [5], [[6]]], flat()); // => [1, 2, 3, 4, 5, [6]]\n * pipe([[[1]], [[2]]], flat(2)); // => [1, 2]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flat<Depth extends number = 1>(\n depth?: IsNumericLiteral<Depth> extends true ? Depth : never,\n): <T extends IterableContainer>(data: T) => FlatArray<T, Depth>;\n\nexport function flat(\n dataOrDepth?: IterableContainer | number,\n depth?: number,\n): unknown {\n if (typeof dataOrDepth === 'object') {\n return flatImplementation(dataOrDepth, depth);\n }\n\n return lazyDataLastImpl(\n flatImplementation,\n dataOrDepth === undefined ? [] : [dataOrDepth],\n lazyImplementation,\n );\n}\n\nfunction flatImplementation(data: IterableContainer, depth?: number): IterableContainer {\n return depth === undefined ? data.flat() : data.flat(depth);\n}\n\nfunction lazyImplementation(depth?: number): LazyEvaluator {\n if (depth === undefined || depth === 1) {\n return lazyShallow;\n }\n\n if (depth <= 0) {\n return lazyIdentityEvaluator;\n }\n\n return (value) =>\n Array.isArray(value)\n ? {\n next: value.flat(depth - 1),\n hasNext: true,\n hasMany: true,\n done: false,\n }\n : { next: value, hasNext: true, done: false }; ;\n}\n\n// This function is pulled out so that we don't generate a new arrow function\n// each time. Because it doesn't need to run with recursion it could be pulled\n// out from the lazyImplementation and be reused for all invocations.\nfunction lazyShallow<T>(value: T): LazyResult<T> {\n return Array.isArray(value)\n ? { next: value, hasNext: true, hasMany: true, done: false }\n : { next: value, hasNext: true, done: false };\n}\n"],"mappings":"wKAyGA,SAAgB,EACd,EACA,EACS,CAKT,OAJI,OAAO,GAAgB,SAClB,EAAmB,EAAa,EAAM,CAGxCA,EAAAA,EACL,EACA,IAAgB,IAAA,GAAY,EAAE,CAAG,CAAC,EAAY,CAC9C,EACD,CAGH,SAAS,EAAmB,EAAyB,EAAmC,CACtF,OAAO,IAAU,IAAA,GAAY,EAAK,MAAM,CAAG,EAAK,KAAK,EAAM,CAG7D,SAAS,EAAmB,EAA+B,CASzD,OARI,IAAU,IAAA,IAAa,IAAU,EAC5B,EAGL,GAAS,EACJC,EAAAA,EAGD,GACN,MAAM,QAAQ,EAAM,CAChB,CACE,KAAM,EAAM,KAAK,EAAQ,EAAE,CAC3B,QAAS,GACT,QAAS,GACT,KAAM,GACP,CACD,CAAE,KAAM,EAAO,QAAS,GAAM,KAAM,GAAO,CAMnD,SAAS,EAAe,EAAyB,CAC/C,OAAO,MAAM,QAAQ,EAAM,CACvB,CAAE,KAAM,EAAO,QAAS,GAAM,QAAS,GAAM,KAAM,GAAO,CAC1D,CAAE,KAAM,EAAO,QAAS,GAAM,KAAM,GAAO"}
package/dist/flat.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./lazy-data-last-impl-R05wr4K6.js";import{r as t}from"./utility-evaluators-Boc-TMbq.js";function n(t,n){return typeof t==`object`?r(t,n):e(r,t===void 0?[]:[t],i)}function r(e,t){return t===void 0?e.flat():e.flat(t)}function i(e){return e===void 0||e===1?a:e<=0?t:t=>Array.isArray(t)?{next:t.flat(e-1),hasNext:!0,hasMany:!0,done:!1}:{next:t,hasNext:!0,done:!1}}function a(e){return Array.isArray(e)?{next:e,hasNext:!0,hasMany:!0,done:!1}:{next:e,hasNext:!0,done:!1}}export{n as flat};
1
+ import{t as e}from"./lazy-data-last-impl-Vt_M0l7X.js";import{r as t}from"./utility-evaluators-ZAaUtL2Z.js";function n(t,n){return typeof t==`object`?r(t,n):e(r,t===void 0?[]:[t],i)}function r(e,t){return t===void 0?e.flat():e.flat(t)}function i(e){return e===void 0||e===1?a:e<=0?t:t=>Array.isArray(t)?{next:t.flat(e-1),hasNext:!0,hasMany:!0,done:!1}:{next:t,hasNext:!0,done:!1}}function a(e){return Array.isArray(e)?{next:e,hasNext:!0,hasMany:!0,done:!1}:{next:e,hasNext:!0,done:!1}}export{n as flat};
2
2
  //# sourceMappingURL=flat.js.map
package/dist/flat.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"flat.js","names":[],"sources":["../src/flat.ts"],"sourcesContent":["import type { IsNumericLiteral } from 'type-fest';\n\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport type { LazyResult } from './internal/types/lazy-result';\n\nimport { lazyDataLastImpl } from './internal/lazy-data-last-impl';\nimport { lazyIdentityEvaluator } from './internal/utility-evaluators';\n\ntype FlatArray<\n T,\n Depth extends number,\n Iteration extends ReadonlyArray<unknown> = [],\n> = Depth extends Iteration['length']\n // Stopping condition for the recursion when the array is a tuple.\n ? T\n : T extends readonly []\n // Trivial result when the array is empty.\n ? []\n : T extends readonly [infer Item, ...infer Rest]\n // Tuples could be special-cased by \"iterating\" over each item\n // separately so that we maintain more information from the input type,\n // instead of putting all values in a union.\n ? [\n ...(Item extends IterableContainer\n // If the item itself is an array we continue going deeper\n ? FlatArray<Item, Depth, [...Iteration, unknown]>\n // But if it isn't we add it to the output tuple\n : [Item]),\n // And we merge this with the result from the rest of the tuple.\n ...FlatArray<Rest, Depth, Iteration>,\n ]\n // For simple arrays we compute the item type, and wrap it with an array.\n : Array<FlatSimpleArrayItems<T, Depth, Iteration>>;\n\n// This type is based on the built-in type for `Array.prototype.flat` from the\n// ES2019 Array typescript library, but we improved it to handle any depth\n// (avoiding the fixed `20` in the built-in type).\n// @see https://github.com/microsoft/TypeScript/blob/main/src/lib/es2019.array.d.ts#L1-L5\ntype FlatSimpleArrayItems<\n T,\n Depth extends number,\n Iteration extends ReadonlyArray<unknown> = [],\n IsDone extends boolean = false,\n> = {\n done: T;\n recur: T extends ReadonlyArray<infer InnerArr>\n ? FlatSimpleArrayItems<\n InnerArr,\n Depth,\n [...Iteration, unknown],\n // This trick allows us to continue 1 iteration more than the depth,\n // which is required to flatten the array up to depth.\n Iteration['length'] extends Depth ? true : false\n >\n : T;\n}[IsDone extends true ? 'done' : 'recur'];\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param data - The items to flatten.\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1. Non literal values (those typed as\n * `number`cannot be used. `Infinity`, `Number.POSITIVE_INFINITY` and\n * `Number.MAX_VALUE` are all typed as `number` and can't be used either. For\n * \"unlimited\" depth use a literal value that would exceed your expected\n * practical maximum nesting level.\n * @signature\n * P.flat(data)\n * P.flat(data, depth)\n * @example\n * P.flat([[1, 2], [3, 4], [5], [[6]]]); // => [1, 2, 3, 4, 5, [6]]\n * P.flat([[[1]], [[2]]], 2); // => [1, 2]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flat<\n T extends IterableContainer,\n Depth extends number = 1,\n>(\n data: T,\n depth?: IsNumericLiteral<Depth> extends true ? Depth : never,\n): FlatArray<T, Depth>;\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1.\n * @signature\n * P.flat()(data)\n * P.flat(depth)(data)\n * @example\n * P.pipe([[1, 2], [3, 4], [5], [[6]]], P.flat()); // => [1, 2, 3, 4, 5, [6]]\n * P.pipe([[[1]], [[2]]], P.flat(2)); // => [1, 2]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flat<Depth extends number = 1>(\n depth?: IsNumericLiteral<Depth> extends true ? Depth : never,\n): <T extends IterableContainer>(data: T) => FlatArray<T, Depth>;\n\nexport function flat(\n dataOrDepth?: IterableContainer | number,\n depth?: number,\n): unknown {\n if (typeof dataOrDepth === 'object') {\n return flatImplementation(dataOrDepth, depth);\n }\n\n return lazyDataLastImpl(\n flatImplementation,\n dataOrDepth === undefined ? [] : [dataOrDepth],\n lazyImplementation,\n );\n}\n\nfunction flatImplementation(\n data: IterableContainer,\n depth?: number,\n): IterableContainer {\n return (depth === undefined ? data.flat() : data.flat(depth));\n};\n\nfunction lazyImplementation(depth?: number): LazyEvaluator {\n if (depth === undefined || depth === 1) {\n return lazyShallow;\n }\n\n if (depth <= 0) {\n return lazyIdentityEvaluator;\n }\n\n return (value) =>\n Array.isArray(value)\n ? {\n next: value.flat(depth - 1),\n hasNext: true,\n hasMany: true,\n done: false,\n }\n : { next: value, hasNext: true, done: false }; ;\n}\n\n/**\n * This function is pulled out so that we don't generate a new function\n * each time. Because it doesn't need to run with recursion it could be pulled\n * out from the lazyImplementation and be reused for all invocations.\n */\nfunction lazyShallow<T>(value: T): LazyResult<T> {\n return Array.isArray(value)\n ? { next: value, hasNext: true, hasMany: true, done: false }\n : { next: value, hasNext: true, done: false };\n}\n"],"mappings":"2GA6GA,SAAgB,EACd,EACA,EACS,CAKT,OAJI,OAAO,GAAgB,SAClB,EAAmB,EAAa,EAAM,CAGxC,EACL,EACA,IAAgB,IAAA,GAAY,EAAE,CAAG,CAAC,EAAY,CAC9C,EACD,CAGH,SAAS,EACP,EACA,EACmB,CACnB,OAAQ,IAAU,IAAA,GAAY,EAAK,MAAM,CAAG,EAAK,KAAK,EAAM,CAG9D,SAAS,EAAmB,EAA+B,CASzD,OARI,IAAU,IAAA,IAAa,IAAU,EAC5B,EAGL,GAAS,EACJ,EAGD,GACN,MAAM,QAAQ,EAAM,CAChB,CACE,KAAM,EAAM,KAAK,EAAQ,EAAE,CAC3B,QAAS,GACT,QAAS,GACT,KAAM,GACP,CACD,CAAE,KAAM,EAAO,QAAS,GAAM,KAAM,GAAO,CAQnD,SAAS,EAAe,EAAyB,CAC/C,OAAO,MAAM,QAAQ,EAAM,CACvB,CAAE,KAAM,EAAO,QAAS,GAAM,QAAS,GAAM,KAAM,GAAO,CAC1D,CAAE,KAAM,EAAO,QAAS,GAAM,KAAM,GAAO"}
1
+ {"version":3,"file":"flat.js","names":[],"sources":["../src/flat.ts"],"sourcesContent":["import type { IsNumericLiteral } from 'type-fest';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport type { LazyResult } from './internal/types/lazy-result';\nimport { lazyDataLastImpl } from './internal/lazy-data-last-impl';\nimport { lazyIdentityEvaluator } from './internal/utility-evaluators';\n\ntype FlatArray<\n T,\n Depth extends number,\n Iteration extends ReadonlyArray<unknown> = [],\n> = Depth extends Iteration['length']\n ? // Stopping condition for the recursion when the array is a tuple.\n T\n : T extends readonly []\n ? // Trivial result when the array is empty.\n []\n : T extends readonly [infer Item, ...infer Rest]\n ? // Tuples could be special-cased by \"iterating\" over each item\n // separately so that we maintain more information from the input type,\n // instead of putting all values in a union.\n [\n ...(Item extends IterableContainer\n ? // If the item itself is an array we continue going deeper\n FlatArray<Item, Depth, [...Iteration, unknown]>\n : // But if it isn't we add it to the output tuple\n [Item]),\n // And we merge this with the result from the rest of the tuple.\n ...FlatArray<Rest, Depth, Iteration>,\n ]\n : // For simple arrays we compute the item type, and wrap it with an\n // array.\n Array<FlatSimpleArrayItems<T, Depth, Iteration>>;\n\n// This type is based on the built-in type for `Array.prototype.flat` from the\n// ES2019 Array typescript library, but we improved it to handle any depth\n// (avoiding the fixed `20` in the built-in type).\n// @see https://github.com/microsoft/TypeScript/blob/main/src/lib/es2019.array.d.ts#L1-L5\ntype FlatSimpleArrayItems<\n T,\n Depth extends number,\n Iteration extends ReadonlyArray<unknown> = [],\n IsDone extends boolean = false,\n> = {\n done: T;\n recur: T extends ReadonlyArray<infer InnerArr>\n ? FlatSimpleArrayItems<\n InnerArr,\n Depth,\n [...Iteration, unknown],\n // This trick allows us to continue 1 iteration more than the depth,\n // which is required to flatten the array up to depth.\n Iteration['length'] extends Depth ? true : false\n >\n : T;\n}[IsDone extends true ? 'done' : 'recur'];\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param data - The items to flatten.\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1. Non literal values (those typed as\n * `number`cannot be used. `Infinity`, `Number.POSITIVE_INFINITY` and\n * `Number.MAX_VALUE` are all typed as `number` and can't be used either. For\n * \"unlimited\" depth use a literal value that would exceed your expected\n * practical maximum nesting level.\n * @signature\n * flat(data)\n * flat(data, depth)\n * @example\n * flat([[1, 2], [3, 4], [5], [[6]]]); // => [1, 2, 3, 4, 5, [6]]\n * flat([[[1]], [[2]]], 2); // => [1, 2]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flat<T extends IterableContainer, Depth extends number = 1>(\n data: T,\n depth?: IsNumericLiteral<Depth> extends true ? Depth : never,\n): FlatArray<T, Depth>;\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1.\n * @signature\n * flat()(data)\n * flat(depth)(data)\n * @example\n * pipe([[1, 2], [3, 4], [5], [[6]]], flat()); // => [1, 2, 3, 4, 5, [6]]\n * pipe([[[1]], [[2]]], flat(2)); // => [1, 2]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flat<Depth extends number = 1>(\n depth?: IsNumericLiteral<Depth> extends true ? Depth : never,\n): <T extends IterableContainer>(data: T) => FlatArray<T, Depth>;\n\nexport function flat(\n dataOrDepth?: IterableContainer | number,\n depth?: number,\n): unknown {\n if (typeof dataOrDepth === 'object') {\n return flatImplementation(dataOrDepth, depth);\n }\n\n return lazyDataLastImpl(\n flatImplementation,\n dataOrDepth === undefined ? [] : [dataOrDepth],\n lazyImplementation,\n );\n}\n\nfunction flatImplementation(data: IterableContainer, depth?: number): IterableContainer {\n return depth === undefined ? data.flat() : data.flat(depth);\n}\n\nfunction lazyImplementation(depth?: number): LazyEvaluator {\n if (depth === undefined || depth === 1) {\n return lazyShallow;\n }\n\n if (depth <= 0) {\n return lazyIdentityEvaluator;\n }\n\n return (value) =>\n Array.isArray(value)\n ? {\n next: value.flat(depth - 1),\n hasNext: true,\n hasMany: true,\n done: false,\n }\n : { next: value, hasNext: true, done: false }; ;\n}\n\n// This function is pulled out so that we don't generate a new arrow function\n// each time. Because it doesn't need to run with recursion it could be pulled\n// out from the lazyImplementation and be reused for all invocations.\nfunction lazyShallow<T>(value: T): LazyResult<T> {\n return Array.isArray(value)\n ? { next: value, hasNext: true, hasMany: true, done: false }\n : { next: value, hasNext: true, done: false };\n}\n"],"mappings":"2GAyGA,SAAgB,EACd,EACA,EACS,CAKT,OAJI,OAAO,GAAgB,SAClB,EAAmB,EAAa,EAAM,CAGxC,EACL,EACA,IAAgB,IAAA,GAAY,EAAE,CAAG,CAAC,EAAY,CAC9C,EACD,CAGH,SAAS,EAAmB,EAAyB,EAAmC,CACtF,OAAO,IAAU,IAAA,GAAY,EAAK,MAAM,CAAG,EAAK,KAAK,EAAM,CAG7D,SAAS,EAAmB,EAA+B,CASzD,OARI,IAAU,IAAA,IAAa,IAAU,EAC5B,EAGL,GAAS,EACJ,EAGD,GACN,MAAM,QAAQ,EAAM,CAChB,CACE,KAAM,EAAM,KAAK,EAAQ,EAAE,CAC3B,QAAS,GACT,QAAS,GACT,KAAM,GACP,CACD,CAAE,KAAM,EAAO,QAAS,GAAM,KAAM,GAAO,CAMnD,SAAS,EAAe,EAAyB,CAC/C,OAAO,MAAM,QAAQ,EAAM,CACvB,CAAE,KAAM,EAAO,QAAS,GAAM,QAAS,GAAM,KAAM,GAAO,CAC1D,CAAE,KAAM,EAAO,QAAS,GAAM,KAAM,GAAO"}
package/dist/floor.cjs CHANGED
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`),t=require(`./with-precision-dQAYLrgr.cjs`);function n(...n){return e.t(t.t(Math.floor),n)}exports.floor=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`),t=require(`./with-precision-DVi9325n.cjs`);function n(...n){return e.curry(t.t(Math.floor),n)}exports.floor=n;
2
+ //# sourceMappingURL=floor.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floor.cjs","names":["curry","withPrecision"],"sources":["../src/floor.ts"],"sourcesContent":["import { curry } from './curry';\nimport { withPrecision } from './internal/with-precision';\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param value - The number to round down.\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * floor(value, precision);\n * @example\n * floor(123.9876, 3) // => 123.987\n * floor(483.22243, 1) // => 483.2\n * floor(8541, -1) // => 8540\n * floor(456789, -3) // => 456000\n * @dataFirst\n * @category Number\n */\nexport function floor(value: number, precision: number): number;\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * floor(precision)(value);\n * @example\n * floor(3)(123.9876) // => 123.987\n * floor(1)(483.22243) // => 483.2\n * floor(-1)(8541) // => 8540\n * floor(-3)(456789) // => 456000\n * @dataLast\n * @category Number\n */\nexport function floor(precision: number): (value: number) => number;\n\nexport function floor(...args: ReadonlyArray<unknown>): unknown {\n return curry(withPrecision(Math.floor), args);\n}\n"],"mappings":"6IAwCA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAOA,EAAAA,MAAMC,EAAAA,EAAc,KAAK,MAAM,CAAE,EAAK"}
package/dist/floor.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";import{t}from"./with-precision-CQ90Walk.js";function n(...n){return e(t(Math.floor),n)}export{n as floor};
1
+ import{curry as e}from"./curry.js";import{t}from"./with-precision-CgRuf7Wl.js";function n(...n){return e(t(Math.floor),n)}export{n as floor};
2
2
  //# sourceMappingURL=floor.js.map
package/dist/floor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"floor.js","names":[],"sources":["../src/floor.ts"],"sourcesContent":["import { curry } from './curry';\nimport { withPrecision } from './internal/with-precision';\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param value - The number to round down.\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * P.floor(value, precision);\n * @example\n * P.floor(123.9876, 3) // => 123.987\n * P.floor(483.22243, 1) // => 483.2\n * P.floor(8541, -1) // => 8540\n * P.floor(456789, -3) // => 456000\n * @dataFirst\n * @category Number\n */\nexport function floor(value: number, precision: number): number;\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * P.floor(precision)(value);\n * @example\n * P.floor(3)(123.9876) // => 123.987\n * P.floor(1)(483.22243) // => 483.2\n * P.floor(-1)(8541) // => 8540\n * P.floor(-3)(456789) // => 456000\n * @dataLast\n * @category Number\n */\nexport function floor(precision: number): (value: number) => number;\n\nexport function floor(...args: ReadonlyArray<unknown>): unknown {\n return curry(withPrecision(Math.floor), args);\n}\n"],"mappings":"oFAwCA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAO,EAAM,EAAc,KAAK,MAAM,CAAE,EAAK"}
1
+ {"version":3,"file":"floor.js","names":[],"sources":["../src/floor.ts"],"sourcesContent":["import { curry } from './curry';\nimport { withPrecision } from './internal/with-precision';\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param value - The number to round down.\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * floor(value, precision);\n * @example\n * floor(123.9876, 3) // => 123.987\n * floor(483.22243, 1) // => 483.2\n * floor(8541, -1) // => 8540\n * floor(456789, -3) // => 456000\n * @dataFirst\n * @category Number\n */\nexport function floor(value: number, precision: number): number;\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * floor(precision)(value);\n * @example\n * floor(3)(123.9876) // => 123.987\n * floor(1)(483.22243) // => 483.2\n * floor(-1)(8541) // => 8540\n * floor(-3)(456789) // => 456000\n * @dataLast\n * @category Number\n */\nexport function floor(precision: number): (value: number) => number;\n\nexport function floor(...args: ReadonlyArray<unknown>): unknown {\n return curry(withPrecision(Math.floor), args);\n}\n"],"mappings":"+EAwCA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAO,EAAM,EAAc,KAAK,MAAM,CAAE,EAAK"}
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`);function t(...t){return e.t(n,t)}function n(e,t){for(let[n,r]of Object.entries(e))t(r,n,e);return e}exports.forEachObj=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`);function t(...t){return e.curry(n,t)}function n(e,t){for(let[n,r]of Object.entries(e))t(r,n,e);return e}exports.forEachObj=t;
2
+ //# sourceMappingURL=for-each-obj.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for-each-obj.cjs","names":["curry"],"sources":["../src/for-each-obj.ts"],"sourcesContent":["import type { EnumerableStringKeyOf } from './internal/types/enumerable-string-key-of';\nimport type { EnumerableStringKeyedValueOf } from './internal/types/enumerable-string-keyed-value-of';\nimport { curry } from './curry';\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param data - The object who'se entries would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * forEachObj(object, fn)\n * @example\n * forEachObj({a: 1}, (val, key, obj) => {\n * console.log(`${key}: ${val}`)\n * }) // \"a: 1\"\n * @dataFirst\n * @category Object\n */\nexport function forEachObj<T extends object>(\n data: T,\n callbackfn: (\n value: EnumerableStringKeyedValueOf<T>,\n key: EnumerableStringKeyOf<T>,\n obj: T,\n ) => void,\n): void;\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original object (the ref itself, not a shallow copy of it).\n * @signature\n * forEachObj(fn)(object)\n * @example\n * pipe(\n * {a: 1},\n * forEachObj((val, key) => console.log(`${key}: ${val}`))\n * ) // \"a: 1\"\n * @dataLast\n * @category Object\n */\nexport function forEachObj<T extends object>(\n callbackfn: (\n value: EnumerableStringKeyedValueOf<T>,\n key: EnumerableStringKeyOf<T>,\n obj: T,\n ) => void,\n): (object: T) => T;\n\nexport function forEachObj(...args: ReadonlyArray<unknown>): unknown {\n return curry(forEachObjImplementation, args);\n}\n\nfunction forEachObjImplementation<T extends object>(\n data: T,\n fn: (value: unknown, key: string, data: T) => void,\n): T {\n for (const [key, value] of Object.entries(data)) {\n fn(value, key, data);\n }\n return data;\n}\n"],"mappings":"kGA0DA,SAAgB,EAAW,GAAG,EAAuC,CACnE,OAAOA,EAAAA,MAAM,EAA0B,EAAK,CAG9C,SAAS,EACP,EACA,EACG,CACH,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,CAC7C,EAAG,EAAO,EAAK,EAAK,CAEtB,OAAO"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";function t(...t){return e(n,t)}function n(e,t){for(let[n,r]of Object.entries(e))t(r,n,e);return e}export{t as forEachObj};
1
+ import{curry as e}from"./curry.js";function t(...t){return e(n,t)}function n(e,t){for(let[n,r]of Object.entries(e))t(r,n,e);return e}export{t as forEachObj};
2
2
  //# sourceMappingURL=for-each-obj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"for-each-obj.js","names":[],"sources":["../src/for-each-obj.ts"],"sourcesContent":["import type { EnumerableStringKeyOf } from './internal/types/enumerable-string-key-of';\nimport type { EnumerableStringKeyedValueOf } from './internal/types/enumerable-string-keyed-value-of';\nimport { curry } from './curry';\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param data - The object who'se entries would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * P.forEachObj(object, fn)\n * @example\n * P.forEachObj({a: 1}, (val, key, obj) => {\n * console.log(`${key}: ${val}`)\n * }) // \"a: 1\"\n * @dataFirst\n * @category Object\n */\nexport function forEachObj<T extends object>(\n data: T,\n callbackfn: (\n value: EnumerableStringKeyedValueOf<T>,\n key: EnumerableStringKeyOf<T>,\n obj: T,\n ) => void,\n): void;\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original object (the ref itself, not a shallow copy of it).\n * @signature\n * P.forEachObj(fn)(object)\n * @example\n * P.pipe(\n * {a: 1},\n * P.forEachObj((val, key) => console.log(`${key}: ${val}`))\n * ) // \"a: 1\"\n * @dataLast\n * @category Object\n */\nexport function forEachObj<T extends object>(\n callbackfn: (\n value: EnumerableStringKeyedValueOf<T>,\n key: EnumerableStringKeyOf<T>,\n obj: T,\n ) => void,\n): (object: T) => T;\n\nexport function forEachObj(...args: ReadonlyArray<unknown>): unknown {\n return curry(forEachObjImplementation, args);\n}\n\nfunction forEachObjImplementation<T extends object>(\n data: T,\n fn: (value: unknown, key: string, data: T) => void,\n): T {\n for (const [key, value] of Object.entries(data)) {\n fn(value, key, data);\n }\n return data;\n}\n"],"mappings":"wCA0DA,SAAgB,EAAW,GAAG,EAAuC,CACnE,OAAO,EAAM,EAA0B,EAAK,CAG9C,SAAS,EACP,EACA,EACG,CACH,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,CAC7C,EAAG,EAAO,EAAK,EAAK,CAEtB,OAAO"}
1
+ {"version":3,"file":"for-each-obj.js","names":[],"sources":["../src/for-each-obj.ts"],"sourcesContent":["import type { EnumerableStringKeyOf } from './internal/types/enumerable-string-key-of';\nimport type { EnumerableStringKeyedValueOf } from './internal/types/enumerable-string-keyed-value-of';\nimport { curry } from './curry';\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param data - The object who'se entries would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * forEachObj(object, fn)\n * @example\n * forEachObj({a: 1}, (val, key, obj) => {\n * console.log(`${key}: ${val}`)\n * }) // \"a: 1\"\n * @dataFirst\n * @category Object\n */\nexport function forEachObj<T extends object>(\n data: T,\n callbackfn: (\n value: EnumerableStringKeyedValueOf<T>,\n key: EnumerableStringKeyOf<T>,\n obj: T,\n ) => void,\n): void;\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original object (the ref itself, not a shallow copy of it).\n * @signature\n * forEachObj(fn)(object)\n * @example\n * pipe(\n * {a: 1},\n * forEachObj((val, key) => console.log(`${key}: ${val}`))\n * ) // \"a: 1\"\n * @dataLast\n * @category Object\n */\nexport function forEachObj<T extends object>(\n callbackfn: (\n value: EnumerableStringKeyedValueOf<T>,\n key: EnumerableStringKeyOf<T>,\n obj: T,\n ) => void,\n): (object: T) => T;\n\nexport function forEachObj(...args: ReadonlyArray<unknown>): unknown {\n return curry(forEachObjImplementation, args);\n}\n\nfunction forEachObjImplementation<T extends object>(\n data: T,\n fn: (value: unknown, key: string, data: T) => void,\n): T {\n for (const [key, value] of Object.entries(data)) {\n fn(value, key, data);\n }\n return data;\n}\n"],"mappings":"mCA0DA,SAAgB,EAAW,GAAG,EAAuC,CACnE,OAAO,EAAM,EAA0B,EAAK,CAG9C,SAAS,EACP,EACA,EACG,CACH,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,CAC7C,EAAG,EAAO,EAAK,EAAK,CAEtB,OAAO"}
package/dist/for-each.cjs CHANGED
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`);function t(...t){return e.t(n,t,r)}function n(e,t){return e.forEach(t),e}function r(e){return(t,n,r)=>(e(t,n,r),{done:!1,hasNext:!0,next:t})}exports.forEach=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`);function t(...t){return e.curry(n,t,r)}function n(e,t){return e.forEach(t),e}function r(e){return(t,n,r)=>(e(t,n,r),{done:!1,hasNext:!0,next:t})}exports.forEach=t;
2
+ //# sourceMappingURL=for-each.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for-each.cjs","names":["curry"],"sources":["../src/for-each.ts"],"sourcesContent":["import type { Writable } from 'type-fest';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. When not used in a `pipe` the\n * returned array is equal to the input array (by reference), and not a shallow\n * copy of it!\n *\n * @param data - The values that would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * forEach(data, callbackfn)\n * @example\n * forEach([1, 2, 3], x => {\n * console.log(x)\n * });\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function forEach<T extends IterableContainer>(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => void,\n): void;\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned array is the\n * same reference as the input array, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original array (the ref itself, not a shallow copy of it).\n * @signature\n * forEach(callbackfn)(data)\n * @example\n * pipe(\n * [1, 2, 3],\n * forEach(x => {\n * console.log(x)\n * })\n * ) // => [1, 2, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function forEach<T extends IterableContainer>(\n callbackfn: (value: T[number], index: number, data: T) => void,\n): (data: T) => Writable<T>;\n\nexport function forEach(...args: ReadonlyArray<unknown>): unknown {\n return curry(forEachImplementation, args, lazyImplementation);\n}\n\nfunction forEachImplementation<T>(\n data: ReadonlyArray<T>,\n callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => void,\n): Array<T> {\n data.forEach(callbackfn);\n // @ts-expect-error [ts4104] - Because the dataFirst signature returns void this is only a problem when the dataLast function is used **outside** of a pipe; for these cases we warn the user that this is happening.\n return data;\n}\n\nfunction lazyImplementation<T>(callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => void): LazyEvaluator<T> {\n return (value, index, data) => {\n callbackfn(value, index, data);\n return { done: false, hasNext: true, next: value };\n };\n}\n"],"mappings":"kGA0DA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAOA,EAAAA,MAAM,EAAuB,EAAM,EAAmB,CAG/D,SAAS,EACP,EACA,EACU,CAGV,OAFA,EAAK,QAAQ,EAAW,CAEjB,EAGT,SAAS,EAAsB,EAAyF,CACtH,OAAQ,EAAO,EAAO,KACpB,EAAW,EAAO,EAAO,EAAK,CACvB,CAAE,KAAM,GAAO,QAAS,GAAM,KAAM,EAAO"}
package/dist/for-each.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";function t(...t){return e(n,t,r)}function n(e,t){return e.forEach(t),e}function r(e){return(t,n,r)=>(e(t,n,r),{done:!1,hasNext:!0,next:t})}export{t as forEach};
1
+ import{curry as e}from"./curry.js";function t(...t){return e(n,t,r)}function n(e,t){return e.forEach(t),e}function r(e){return(t,n,r)=>(e(t,n,r),{done:!1,hasNext:!0,next:t})}export{t as forEach};
2
2
  //# sourceMappingURL=for-each.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"for-each.js","names":[],"sources":["../src/for-each.ts"],"sourcesContent":["import type { Writable } from 'type-fest';\n\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\n\nimport { curry } from './curry';\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. When not used in a `pipe` the\n * returned array is equal to the input array (by reference), and not a shallow\n * copy of it!\n *\n * @param data - The values that would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * P.forEach(data, callbackfn)\n * @example\n * P.forEach([1, 2, 3], x => {\n * console.log(x)\n * });\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function forEach<T extends IterableContainer>(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => void,\n): void;\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned array is the\n * same reference as the input array, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original array (the ref itself, not a shallow copy of it).\n * @signature\n * P.forEach(callbackfn)(data)\n * @example\n * P.pipe(\n * [1, 2, 3],\n * P.forEach(x => {\n * console.log(x)\n * })\n * ) // => [1, 2, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function forEach<T extends IterableContainer>(\n callbackfn: (value: T[number], index: number, data: T) => void,\n): (data: T) => Writable<T>;\n\nexport function forEach(...args: ReadonlyArray<unknown>): unknown {\n return curry(forEachImplementation, args, lazyImplementation);\n}\n\nfunction forEachImplementation<T>(\n data: ReadonlyArray<T>,\n callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => void,\n): Array<T> {\n data.forEach(callbackfn);\n // @ts-expect-error [ts4104] - Because the dataFirst signature returns void this is only a problem when the dataLast function is used **outside** of a pipe; for these cases we warn the user that this is happening.\n return data;\n}\n\nfunction lazyImplementation<T>(\n callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => void,\n): LazyEvaluator<T> {\n return (value, index, data) => {\n callbackfn(value, index, data);\n return { done: false, hasNext: true, next: value };\n };\n}\n"],"mappings":"wCA4DA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAO,EAAM,EAAuB,EAAM,EAAmB,CAG/D,SAAS,EACP,EACA,EACU,CAGV,OAFA,EAAK,QAAQ,EAAW,CAEjB,EAGT,SAAS,EACP,EACkB,CAClB,OAAQ,EAAO,EAAO,KACpB,EAAW,EAAO,EAAO,EAAK,CACvB,CAAE,KAAM,GAAO,QAAS,GAAM,KAAM,EAAO"}
1
+ {"version":3,"file":"for-each.js","names":[],"sources":["../src/for-each.ts"],"sourcesContent":["import type { Writable } from 'type-fest';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { LazyEvaluator } from './internal/types/lazy-evaluator';\nimport { curry } from './curry';\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. When not used in a `pipe` the\n * returned array is equal to the input array (by reference), and not a shallow\n * copy of it!\n *\n * @param data - The values that would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * forEach(data, callbackfn)\n * @example\n * forEach([1, 2, 3], x => {\n * console.log(x)\n * });\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function forEach<T extends IterableContainer>(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => void,\n): void;\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned array is the\n * same reference as the input array, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original array (the ref itself, not a shallow copy of it).\n * @signature\n * forEach(callbackfn)(data)\n * @example\n * pipe(\n * [1, 2, 3],\n * forEach(x => {\n * console.log(x)\n * })\n * ) // => [1, 2, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function forEach<T extends IterableContainer>(\n callbackfn: (value: T[number], index: number, data: T) => void,\n): (data: T) => Writable<T>;\n\nexport function forEach(...args: ReadonlyArray<unknown>): unknown {\n return curry(forEachImplementation, args, lazyImplementation);\n}\n\nfunction forEachImplementation<T>(\n data: ReadonlyArray<T>,\n callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => void,\n): Array<T> {\n data.forEach(callbackfn);\n // @ts-expect-error [ts4104] - Because the dataFirst signature returns void this is only a problem when the dataLast function is used **outside** of a pipe; for these cases we warn the user that this is happening.\n return data;\n}\n\nfunction lazyImplementation<T>(callbackfn: (value: T, index: number, data: ReadonlyArray<T>) => void): LazyEvaluator<T> {\n return (value, index, data) => {\n callbackfn(value, index, data);\n return { done: false, hasNext: true, next: value };\n };\n}\n"],"mappings":"mCA0DA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAO,EAAM,EAAuB,EAAM,EAAmB,CAG/D,SAAS,EACP,EACA,EACU,CAGV,OAFA,EAAK,QAAQ,EAAW,CAEjB,EAGT,SAAS,EAAsB,EAAyF,CACtH,OAAQ,EAAO,EAAO,KACpB,EAAW,EAAO,EAAO,EAAK,CACvB,CAAE,KAAM,GAAO,QAAS,GAAM,KAAM,EAAO"}
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`);function t(...t){return e.t(Object.fromEntries,t)}exports.fromEntries=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`);function t(...t){return e.curry(Object.fromEntries,t)}exports.fromEntries=t;
2
+ //# sourceMappingURL=from-entries.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-entries.cjs","names":["curry"],"sources":["../src/from-entries.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { PerkakasTypeError } from './internal/types/perkakas-type-error';\nimport { curry } from './curry';\n\ntype FromEntriesError<Message extends string> = PerkakasTypeError<\n 'fromEntries',\n Message\n>;\n\ntype Entry<Key extends PropertyKey = PropertyKey, Value = unknown> = readonly [\n key: Key,\n value: Value,\n];\n\n// The 2 kinds of arrays we accept result in different kinds of outputs:\n// 1. If the input is a *tuple*, we know exactly what entries it would hold,\n// and thus can type the result so that the keys are required. We will then run\n// recursively on the rest of the tuple.\n// 2. If the input is an *array* then any keys defined in the array might not\n// actually show up in runtime, and thus need to be optional. (e.g. if the input\n// is an empty array).\ntype FromEntries<Entries> = Entries extends readonly [\n infer First,\n ...infer Tail,\n]\n ? FromEntriesTuple<First, Tail>\n : Entries extends readonly [...infer Head, infer Last]\n ? FromEntriesTuple<Last, Head>\n : Entries extends IterableContainer<Entry>\n ? FromEntriesArray<Entries>\n : FromEntriesError<'Entries array-like could not be inferred'>;\n\n// For strict tuples we build the result by intersecting each entry as a record\n// between it's key and value, recursively. The recursion goes through our main\n// type so that we support tuples which also contain rest parts.\ntype FromEntriesTuple<E, Rest> = E extends Entry\n ? FromEntries<Rest> & Record<E[0], E[1]>\n : FromEntriesError<'Array-like contains a non-entry element'>;\n\n// For the array case we also need to handle what kind of keys it defines:\n// 1. If it defines a *broad* key (one that has an infinite set of values, like\n// number or string) then the result is a simple record.\n// 2. If the keys are *literals* then we need to make the record partial\n// (because those props are explicit), and we need to match each key it's\n// specific possible value, as defined by the entries.\n//\n// Note that this destination between keys is the result of how typescript\n// considers Record<string, unknown> to be **implicitly** partial, whereas\n// Record<\"a\", unknown> is not.\ntype FromEntriesArray<Entries extends IterableContainer<Entry>>\n = string extends AllKeys<Entries>\n ? Record<string, Entries[number][1]>\n : number extends AllKeys<Entries>\n ? Record<number, Entries[number][1]>\n : symbol extends AllKeys<Entries>\n ? Record<symbol, Entries[number][1]>\n : FromEntriesArrayWithLiteralKeys<Entries>;\n\n// This type is largely copied from `objectFromEntries` in the repo:\n// *sindresorhus/ts-extras* but makes all properties of the output optional,\n// which is more correct because we can't assure that an entry will exist for\n// every possible prop/key of the input.\n// @see https://github.com/sindresorhus/ts-extras/blob/44f57392c5f027268330771996c4fdf9260b22d6/source/object-from-entries.ts)\ntype FromEntriesArrayWithLiteralKeys<Entries extends IterableContainer<Entry>>\n = {\n [P in AllKeys<Entries>]?: ValueForKey<Entries, P>;\n };\n\ntype AllKeys<Entries extends IterableContainer<Entry>> = Extract<\n Entries[number],\n Entry\n>[0];\n\n// I tried and failed to simplify the type here! What the ternary does here is\n// to support the cases where the entries are defined by a single type that\n// defines all entries, but it defines the keys as a union of literals\n// (`['a' | 'b', number]`); which is different from the output of toPairs\n// which would define a separate tuple literal for each key (`['a', number] |\n// ['b', number]`). We need to support both cases!\ntype ValueForKey<\n Entries extends IterableContainer<Entry>,\n K extends PropertyKey,\n> = (Extract<Entries[number], Entry<K>> extends never\n ? Entries[number]\n : Extract<Entries[number], Entry<K>>)[1];\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * Refer to the docs for more details.\n *\n * @param entries - An array of key-value pairs.\n * @signature\n * fromEntries(tuples)\n * @example\n * fromEntries([['a', 'b'], ['c', 'd']]); // => {a: 'b', c: 'd'}\n * @dataFirst\n * @category Object\n */\nexport function fromEntries<Entries extends IterableContainer<Entry>>(\n entries: Entries,\n): Simplify<FromEntries<Entries>>;\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * Refer to the docs for more details.\n *\n * @signature\n * fromEntries()(tuples)\n * @example\n * pipe(\n * [['a', 'b'], ['c', 'd']] as const,\n * fromEntries(),\n * ); // => {a: 'b', c: 'd'}\n * @dataLast\n * @category Object\n */\nexport function fromEntries(): <Entries extends IterableContainer<Entry>>(\n entries: Entries,\n) => Simplify<FromEntries<Entries>>;\n\nexport function fromEntries(...args: ReadonlyArray<unknown>): unknown {\n return curry(Object.fromEntries, args);\n}\n"],"mappings":"kGA+IA,SAAgB,EAAY,GAAG,EAAuC,CACpE,OAAOA,EAAAA,MAAM,OAAO,YAAa,EAAK"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";function t(...t){return e(Object.fromEntries,t)}export{t as fromEntries};
1
+ import{curry as e}from"./curry.js";function t(...t){return e(Object.fromEntries,t)}export{t as fromEntries};
2
2
  //# sourceMappingURL=from-entries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-entries.js","names":[],"sources":["../src/from-entries.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\n\nimport type { IterableContainer } from './internal/types/iterable-container';\n\nimport type { PerkakasTypeError } from './internal/types/perkakas-type-error';\nimport { curry } from './curry';\n\ntype FromEntriesError<Message extends string> = PerkakasTypeError<\n 'fromEntries',\n Message\n>;\n\ntype Entry<Key extends PropertyKey = PropertyKey, Value = unknown> = readonly [\n key: Key,\n value: Value,\n];\n\n// The 2 kinds of arrays we accept result in different kinds of outputs:\n// 1. If the input is a *tuple*, we know exactly what entries it would hold,\n// and thus can type the result so that the keys are required. We will then run\n// recursively on the rest of the tuple.\n// 2. If the input is an *array* then any keys defined in the array might not\n// actually show up in runtime, and thus need to be optional. (e.g. if the input\n// is an empty array).\ntype FromEntries<Entries> = Entries extends readonly [\n infer First,\n ...infer Tail,\n]\n ? FromEntriesTuple<First, Tail>\n : Entries extends readonly [...infer Head, infer Last]\n ? FromEntriesTuple<Last, Head>\n : Entries extends IterableContainer<Entry>\n ? FromEntriesArray<Entries>\n : FromEntriesError<'Entries array-like could not be inferred'>;\n\n// For strict tuples we build the result by intersecting each entry as a record\n// between it's key and value, recursively. The recursion goes through our main\n// type so that we support tuples which also contain rest parts.\ntype FromEntriesTuple<E, Rest> = E extends Entry\n ? FromEntries<Rest> & Record<E[0], E[1]>\n : FromEntriesError<'Array-like contains a non-entry element'>;\n\n// For the array case we also need to handle what kind of keys it defines:\n// 1. If it defines a *broad* key (one that has an infinite set of values, like\n// number or string) then the result is a simple record.\n// 2. If the keys are *literals* then we need to make the record partial\n// (because those props are explicit), and we need to match each key it's\n// specific possible value, as defined by the entries.\n//\n// Note that this destination between keys is the result of how typescript\n// considers Record<string, unknown> to be **implicitly** partial, whereas\n// Record<\"a\", unknown> is not.\ntype FromEntriesArray<Entries extends IterableContainer<Entry>>\n = string extends AllKeys<Entries>\n ? Record<string, Entries[number][1]>\n : number extends AllKeys<Entries>\n ? Record<number, Entries[number][1]>\n : symbol extends AllKeys<Entries>\n ? Record<symbol, Entries[number][1]>\n : FromEntriesArrayWithLiteralKeys<Entries>;\n\n// This type is largely copied from `objectFromEntries` in the repo:\n// *sindresorhus/ts-extras* but makes all properties of the output optional,\n// which is more correct because we can't assure that an entry will exist for\n// every possible prop/key of the input.\n// @see https://github.com/sindresorhus/ts-extras/blob/44f57392c5f027268330771996c4fdf9260b22d6/source/object-from-entries.ts)\ntype FromEntriesArrayWithLiteralKeys<Entries extends IterableContainer<Entry>>\n = {\n [P in AllKeys<Entries>]?: ValueForKey<Entries, P>;\n };\n\ntype AllKeys<Entries extends IterableContainer<Entry>> = Extract<\n Entries[number],\n Entry\n>[0];\n\n// I tried and failed to simplify the type here! What the ternary does here is\n// to support the cases where the entries are defined by a single type that\n// defines all entries, but it defines the keys as a union of literals\n// (`['a' | 'b', number]`); which is different from the output of toPairs\n// which would define a separate tuple literal for each key (`['a', number] |\n// ['b', number]`). We need to support both cases!\ntype ValueForKey<\n Entries extends IterableContainer<Entry>,\n K extends PropertyKey,\n> = (Extract<Entries[number], Entry<K>> extends never\n ? Entries[number]\n : Extract<Entries[number], Entry<K>>)[1];\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * - `fromKeys`: Builds an object from an array of *keys* and a mapper for values.\n * - `indexBy`: Builds an object from an array of *values* and a mapper for keys.\n * - `pullObject`: Builds an object from an array of items with mappers for *both* keys and values.\n * - `mapToObj`: Builds an object from an array of items and a single mapper for key-value pairs.\n * Refer to the docs for more details.\n *\n * @param entries - An array of key-value pairs.\n * @signature\n * P.fromEntries(tuples)\n * @example\n * P.fromEntries([['a', 'b'], ['c', 'd']]); // => {a: 'b', c: 'd'}\n * @dataFirst\n * @category Object\n */\nexport function fromEntries<Entries extends IterableContainer<Entry>>(\n entries: Entries,\n): Simplify<FromEntries<Entries>>;\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `mapToObj` - Builds an object from an array of items and a single mapper for key-value pairs.\n * Refer to the docs for more details.\n *\n * @signature\n * P.fromEntries()(tuples)\n * @example\n * P.pipe(\n * [['a', 'b'], ['c', 'd']] as const,\n * P.fromEntries(),\n * ); // => {a: 'b', c: 'd'}\n * @dataLast\n * @category Object\n */\nexport function fromEntries(): <Entries extends IterableContainer<Entry>>(\n entries: Entries,\n) => Simplify<FromEntries<Entries>>;\n\nexport function fromEntries(...args: ReadonlyArray<unknown>): unknown {\n return curry(Object.fromEntries, args);\n}\n"],"mappings":"wCAmJA,SAAgB,EAAY,GAAG,EAAuC,CACpE,OAAO,EAAM,OAAO,YAAa,EAAK"}
1
+ {"version":3,"file":"from-entries.js","names":[],"sources":["../src/from-entries.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport type { PerkakasTypeError } from './internal/types/perkakas-type-error';\nimport { curry } from './curry';\n\ntype FromEntriesError<Message extends string> = PerkakasTypeError<\n 'fromEntries',\n Message\n>;\n\ntype Entry<Key extends PropertyKey = PropertyKey, Value = unknown> = readonly [\n key: Key,\n value: Value,\n];\n\n// The 2 kinds of arrays we accept result in different kinds of outputs:\n// 1. If the input is a *tuple*, we know exactly what entries it would hold,\n// and thus can type the result so that the keys are required. We will then run\n// recursively on the rest of the tuple.\n// 2. If the input is an *array* then any keys defined in the array might not\n// actually show up in runtime, and thus need to be optional. (e.g. if the input\n// is an empty array).\ntype FromEntries<Entries> = Entries extends readonly [\n infer First,\n ...infer Tail,\n]\n ? FromEntriesTuple<First, Tail>\n : Entries extends readonly [...infer Head, infer Last]\n ? FromEntriesTuple<Last, Head>\n : Entries extends IterableContainer<Entry>\n ? FromEntriesArray<Entries>\n : FromEntriesError<'Entries array-like could not be inferred'>;\n\n// For strict tuples we build the result by intersecting each entry as a record\n// between it's key and value, recursively. The recursion goes through our main\n// type so that we support tuples which also contain rest parts.\ntype FromEntriesTuple<E, Rest> = E extends Entry\n ? FromEntries<Rest> & Record<E[0], E[1]>\n : FromEntriesError<'Array-like contains a non-entry element'>;\n\n// For the array case we also need to handle what kind of keys it defines:\n// 1. If it defines a *broad* key (one that has an infinite set of values, like\n// number or string) then the result is a simple record.\n// 2. If the keys are *literals* then we need to make the record partial\n// (because those props are explicit), and we need to match each key it's\n// specific possible value, as defined by the entries.\n//\n// Note that this destination between keys is the result of how typescript\n// considers Record<string, unknown> to be **implicitly** partial, whereas\n// Record<\"a\", unknown> is not.\ntype FromEntriesArray<Entries extends IterableContainer<Entry>>\n = string extends AllKeys<Entries>\n ? Record<string, Entries[number][1]>\n : number extends AllKeys<Entries>\n ? Record<number, Entries[number][1]>\n : symbol extends AllKeys<Entries>\n ? Record<symbol, Entries[number][1]>\n : FromEntriesArrayWithLiteralKeys<Entries>;\n\n// This type is largely copied from `objectFromEntries` in the repo:\n// *sindresorhus/ts-extras* but makes all properties of the output optional,\n// which is more correct because we can't assure that an entry will exist for\n// every possible prop/key of the input.\n// @see https://github.com/sindresorhus/ts-extras/blob/44f57392c5f027268330771996c4fdf9260b22d6/source/object-from-entries.ts)\ntype FromEntriesArrayWithLiteralKeys<Entries extends IterableContainer<Entry>>\n = {\n [P in AllKeys<Entries>]?: ValueForKey<Entries, P>;\n };\n\ntype AllKeys<Entries extends IterableContainer<Entry>> = Extract<\n Entries[number],\n Entry\n>[0];\n\n// I tried and failed to simplify the type here! What the ternary does here is\n// to support the cases where the entries are defined by a single type that\n// defines all entries, but it defines the keys as a union of literals\n// (`['a' | 'b', number]`); which is different from the output of toPairs\n// which would define a separate tuple literal for each key (`['a', number] |\n// ['b', number]`). We need to support both cases!\ntype ValueForKey<\n Entries extends IterableContainer<Entry>,\n K extends PropertyKey,\n> = (Extract<Entries[number], Entry<K>> extends never\n ? Entries[number]\n : Extract<Entries[number], Entry<K>>)[1];\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * Refer to the docs for more details.\n *\n * @param entries - An array of key-value pairs.\n * @signature\n * fromEntries(tuples)\n * @example\n * fromEntries([['a', 'b'], ['c', 'd']]); // => {a: 'b', c: 'd'}\n * @dataFirst\n * @category Object\n */\nexport function fromEntries<Entries extends IterableContainer<Entry>>(\n entries: Entries,\n): Simplify<FromEntries<Entries>>;\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * Refer to the docs for more details.\n *\n * @signature\n * fromEntries()(tuples)\n * @example\n * pipe(\n * [['a', 'b'], ['c', 'd']] as const,\n * fromEntries(),\n * ); // => {a: 'b', c: 'd'}\n * @dataLast\n * @category Object\n */\nexport function fromEntries(): <Entries extends IterableContainer<Entry>>(\n entries: Entries,\n) => Simplify<FromEntries<Entries>>;\n\nexport function fromEntries(...args: ReadonlyArray<unknown>): unknown {\n return curry(Object.fromEntries, args);\n}\n"],"mappings":"mCA+IA,SAAgB,EAAY,GAAG,EAAuC,CACpE,OAAO,EAAM,OAAO,YAAa,EAAK"}
@@ -1 +1,2 @@
1
- const e=require(`./curry-BsY0Z8jH.cjs`);function t(...t){return e.t(n,t)}function n(e,t){let n={};for(let[r,i]of e.entries())n[i]=t(i,r,e);return n}exports.fromKeys=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./curry.cjs`);function t(...t){return e.curry(n,t)}function n(e,t){let n={};for(let[r,i]of e.entries())n[i]=t(i,r,e);return n}exports.fromKeys=t;
2
+ //# sourceMappingURL=from-keys.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-keys.cjs","names":["curry"],"sources":["../src/from-keys.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\nimport type { BoundedPartial } from './internal/types/bounded-partial';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport { curry } from './curry';\n\n// Takes a union of literals and creates a union of records with the value V for\n// each key **separately**\n// @example ExactlyOneKey<\"cat\" | \"dog\", boolean> // { cat: boolean } | { dog: boolean }\ntype ExactlyOneKey<T, V> = T extends PropertyKey ? Record<T, V> : never;\n\ntype FromKeys<T extends IterableContainer, V> = T extends readonly []\n ? // eslint-disable-next-line ts/no-empty-object-type -- We want to return an empty object type here, but it's not trivial to build that in Typescript, other fixer suggestions like Record<PropertyKey, never> or Record<PropertyKey, unknown> both break our type tests so they don't do what we need here. Because the result is mutable this might be the correct type after all...\n {}\n : T extends readonly [infer Head, ...infer Rest]\n ? ExactlyOneKey<Head, V> & FromKeys<Rest, V>\n : T[number] extends PropertyKey\n ? BoundedPartial<Record<T[number], V>>\n : never;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param data - An array of keys of the output object. All items in the array\n * would be keys in the output array.\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * fromKeys(data, mapper);\n * @example\n * fromKeys([\"cat\", \"dog\"], length()); // { cat: 3, dog: 3 } (typed as Partial<Record<\"cat\" | \"dog\", number>>)\n * fromKeys([1, 2], add(1)); // { 1: 2, 2: 3 } (typed as Partial<Record<1 | 2, number>>)\n * @dataFirst\n * @category Object\n */\nexport function fromKeys<T extends IterableContainer<PropertyKey>, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): Simplify<FromKeys<T, V>>;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * fromKeys(mapper)(data);\n * @example\n * pipe([\"cat\", \"dog\"], fromKeys(length())); // { cat: 3, dog: 3 } (typed as Partial<Record<\"cat\" | \"dog\", number>>)\n * pipe([1, 2], fromKeys(add(1))); // { 1: 2, 2: 3 } (typed as Partial<Record<1 | 2, number>>)\n * @dataLast\n * @category Object\n */\nexport function fromKeys<T extends IterableContainer<PropertyKey>, V>(\n mapper: (item: T[number], index: number, data: T) => V,\n): (data: T) => Simplify<FromKeys<T, V>>;\n\nexport function fromKeys(...args: ReadonlyArray<unknown>): unknown {\n return curry(fromKeysImplementation, args);\n}\n\nfunction fromKeysImplementation<T extends IterableContainer<PropertyKey>, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): FromKeys<T, V> {\n const result: Partial<FromKeys<T, V>> = {};\n\n for (const [index, key] of data.entries()) {\n // @ts-expect-error [ts7053] - There's no easy way to make Typescript aware that the items in T would be keys in the output object because it's type is built recursively and the \"being an item of an array\" property of a type is not \"carried over\" in the recursive type definition.\n result[key] = mapper(key, index, data);\n }\n\n return result as FromKeys<T, V>;\n}\n"],"mappings":"kGA0EA,SAAgB,EAAS,GAAG,EAAuC,CACjE,OAAOA,EAAAA,MAAM,EAAwB,EAAK,CAG5C,SAAS,EACP,EACA,EACgB,CAChB,IAAM,EAAkC,EAAE,CAE1C,IAAK,GAAM,CAAC,EAAO,KAAQ,EAAK,SAAS,CAEvC,EAAO,GAAO,EAAO,EAAK,EAAO,EAAK,CAGxC,OAAO"}
package/dist/from-keys.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./curry-NmniqyJ0.js";function t(...t){return e(n,t)}function n(e,t){let n={};for(let[r,i]of e.entries())n[i]=t(i,r,e);return n}export{t as fromKeys};
1
+ import{curry as e}from"./curry.js";function t(...t){return e(n,t)}function n(e,t){let n={};for(let[r,i]of e.entries())n[i]=t(i,r,e);return n}export{t as fromKeys};
2
2
  //# sourceMappingURL=from-keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-keys.js","names":["result: Partial<FromKeys<T, V>>"],"sources":["../src/from-keys.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\n\nimport type { BoundedPartial } from './internal/types/bounded-partial';\n\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport { curry } from './curry';\n\n// Takes a union of literals and creates a union of records with the value V for\n// each key **separately**\n// @example ExactlyOneKey<\"cat\" | \"dog\", boolean> // { cat: boolean } | { dog: boolean }\ntype ExactlyOneKey<T, V> = T extends PropertyKey ? { [P in T]: V } : never;\n\ntype FromKeys<T extends IterableContainer, V> = T extends readonly []\n // eslint-disable-next-line ts/no-empty-object-type -- We want to return an empty object type here, but it's not trivial to build that in Typescript, other fixer suggestions like Record<PropertyKey, never> or Record<PropertyKey, unknown> both break our type tests so they don't do what we need here. Because the result is mutable this might be the correct type after all...\n ? {}\n : T extends readonly [infer Head, ...infer Rest]\n ? ExactlyOneKey<Head, V> & FromKeys<Rest, V>\n : T[number] extends PropertyKey\n ? BoundedPartial<Record<T[number], V>>\n : never;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `fromEntries` - Builds an object from an array of key-value pairs.\n * `mapToObj` - Builds an object from an array of items and a single mapper for key-value pairs.\n * Refer to the docs for more details.\n *\n * @param data - An array of keys of the output object. All items in the array\n * would be keys in the output array.\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * P.fromKeys(data, mapper);\n * @example\n * P.fromKeys([\"cat\", \"dog\"], P.length()); // { cat: 3, dog: 3 } (typed as Partial<Record<\"cat\" | \"dog\", number>>)\n * P.fromKeys([1, 2], P.add(1)); // { 1: 2, 2: 3 } (typed as Partial<Record<1 | 2, number>>)\n * @dataFirst\n * @category Object\n */\nexport function fromKeys<T extends IterableContainer<PropertyKey>, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): Simplify<FromKeys<T, V>>;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `fromEntries` - Builds an object from an array of key-value pairs.\n * `mapToObj` - Builds an object from an array of items and a single mapper for key-value pairs.\n * Refer to the docs for more details.\n *\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * P.fromKeys(mapper)(data);\n * @example\n * P.pipe([\"cat\", \"dog\"], P.fromKeys(P.length())); // { cat: 3, dog: 3 } (typed as Partial<Record<\"cat\" | \"dog\", number>>)\n * P.pipe([1, 2], P.fromKeys(P.add(1))); // { 1: 2, 2: 3 } (typed as Partial<Record<1 | 2, number>>)\n * @dataLast\n * @category Object\n */\nexport function fromKeys<T extends IterableContainer<PropertyKey>, V>(\n mapper: (item: T[number], index: number, data: T) => V,\n): (data: T) => Simplify<FromKeys<T, V>>;\n\nexport function fromKeys(...args: ReadonlyArray<unknown>): unknown {\n return curry(fromKeysImplementation, args);\n}\n\nfunction fromKeysImplementation<T extends IterableContainer<PropertyKey>, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): FromKeys<T, V> {\n const result: Partial<FromKeys<T, V>> = {};\n\n for (const [index, key] of data.entries()) {\n // @ts-expect-error [ts7053] - There's no easy way to make Typescript aware that the items in T would be keys in the output object because it's type is built recursively and the \"being an item of an array\" property of a type is not \"carried over\" in the recursive type definition.\n result[key] = mapper(key, index, data);\n }\n\n return result as FromKeys<T, V>;\n}\n"],"mappings":"wCA8EA,SAAgB,EAAS,GAAG,EAAuC,CACjE,OAAO,EAAM,EAAwB,EAAK,CAG5C,SAAS,EACP,EACA,EACgB,CAChB,IAAMA,EAAkC,EAAE,CAE1C,IAAK,GAAM,CAAC,EAAO,KAAQ,EAAK,SAAS,CAEvC,EAAO,GAAO,EAAO,EAAK,EAAO,EAAK,CAGxC,OAAO"}
1
+ {"version":3,"file":"from-keys.js","names":[],"sources":["../src/from-keys.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\nimport type { BoundedPartial } from './internal/types/bounded-partial';\nimport type { IterableContainer } from './internal/types/iterable-container';\nimport { curry } from './curry';\n\n// Takes a union of literals and creates a union of records with the value V for\n// each key **separately**\n// @example ExactlyOneKey<\"cat\" | \"dog\", boolean> // { cat: boolean } | { dog: boolean }\ntype ExactlyOneKey<T, V> = T extends PropertyKey ? Record<T, V> : never;\n\ntype FromKeys<T extends IterableContainer, V> = T extends readonly []\n ? // eslint-disable-next-line ts/no-empty-object-type -- We want to return an empty object type here, but it's not trivial to build that in Typescript, other fixer suggestions like Record<PropertyKey, never> or Record<PropertyKey, unknown> both break our type tests so they don't do what we need here. Because the result is mutable this might be the correct type after all...\n {}\n : T extends readonly [infer Head, ...infer Rest]\n ? ExactlyOneKey<Head, V> & FromKeys<Rest, V>\n : T[number] extends PropertyKey\n ? BoundedPartial<Record<T[number], V>>\n : never;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param data - An array of keys of the output object. All items in the array\n * would be keys in the output array.\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * fromKeys(data, mapper);\n * @example\n * fromKeys([\"cat\", \"dog\"], length()); // { cat: 3, dog: 3 } (typed as Partial<Record<\"cat\" | \"dog\", number>>)\n * fromKeys([1, 2], add(1)); // { 1: 2, 2: 3 } (typed as Partial<Record<1 | 2, number>>)\n * @dataFirst\n * @category Object\n */\nexport function fromKeys<T extends IterableContainer<PropertyKey>, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): Simplify<FromKeys<T, V>>;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * fromKeys(mapper)(data);\n * @example\n * pipe([\"cat\", \"dog\"], fromKeys(length())); // { cat: 3, dog: 3 } (typed as Partial<Record<\"cat\" | \"dog\", number>>)\n * pipe([1, 2], fromKeys(add(1))); // { 1: 2, 2: 3 } (typed as Partial<Record<1 | 2, number>>)\n * @dataLast\n * @category Object\n */\nexport function fromKeys<T extends IterableContainer<PropertyKey>, V>(\n mapper: (item: T[number], index: number, data: T) => V,\n): (data: T) => Simplify<FromKeys<T, V>>;\n\nexport function fromKeys(...args: ReadonlyArray<unknown>): unknown {\n return curry(fromKeysImplementation, args);\n}\n\nfunction fromKeysImplementation<T extends IterableContainer<PropertyKey>, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): FromKeys<T, V> {\n const result: Partial<FromKeys<T, V>> = {};\n\n for (const [index, key] of data.entries()) {\n // @ts-expect-error [ts7053] - There's no easy way to make Typescript aware that the items in T would be keys in the output object because it's type is built recursively and the \"being an item of an array\" property of a type is not \"carried over\" in the recursive type definition.\n result[key] = mapper(key, index, data);\n }\n\n return result as FromKeys<T, V>;\n}\n"],"mappings":"mCA0EA,SAAgB,EAAS,GAAG,EAAuC,CACjE,OAAO,EAAM,EAAwB,EAAK,CAG5C,SAAS,EACP,EACA,EACgB,CAChB,IAAM,EAAkC,EAAE,CAE1C,IAAK,GAAM,CAAC,EAAO,KAAQ,EAAK,SAAS,CAEvC,EAAO,GAAO,EAAO,EAAK,EAAO,EAAK,CAGxC,OAAO"}
package/dist/funnel.cjs CHANGED
@@ -1 +1,2 @@
1
- const e=Symbol(`funnel/voidReducer`),t=()=>e;function n(n,{triggerAt:r=`end`,minQuietPeriodMs:i,maxBurstDurationMs:a,minGapMs:o,reducer:s=t}){let c,l,u,d;function f(){let t=u;t!==void 0&&(u=void 0,t===e?n():n(t),o!==void 0&&(l=setTimeout(p,o)))}function p(){clearTimeout(l),l=void 0,c===void 0&&f()}function m(){clearTimeout(c),c=void 0,d=void 0,l===void 0&&f()}return{call:(...e)=>{let t=c===void 0&&l===void 0;if((r!==`start`||t)&&(u=s(u,...e)),!(c===void 0&&!t)){if(i!==void 0||a!==void 0||o===void 0){clearTimeout(c);let e=Date.now();d??=e;let t=a===void 0?i??0:Math.min(i??a,a-(e-d));c=setTimeout(m,t)}r!==`end`&&t&&f()}},cancel:()=>{clearTimeout(c),c=void 0,d=void 0,clearTimeout(l),l=void 0,u=void 0},flush:()=>{m(),p()},get isIdle(){return c===void 0&&l===void 0}}}exports.funnel=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=Symbol(`funnel/voidReducer`),t=()=>e;function n(n,{triggerAt:r=`end`,minQuietPeriodMs:i,maxBurstDurationMs:a,minGapMs:o,reducer:s=t}){let c,l,u,d,f=()=>{let t=u;t!==void 0&&(u=void 0,t===e?n():n(t),o!==void 0&&(l=setTimeout(p,o)))};function p(){clearTimeout(l),l=void 0,c===void 0&&f()}let m=()=>{clearTimeout(c),c=void 0,d=void 0,l===void 0&&f()};return{call:(...e)=>{let t=c===void 0&&l===void 0;if((r!==`start`||t)&&(u=s(u,...e)),!(c===void 0&&!t)){if(i!==void 0||a!==void 0||o===void 0){clearTimeout(c);let e=Date.now();d??=e;let t=a===void 0?i??0:Math.min(i??a,Math.max(0,a-(e-d)));c=setTimeout(m,t)}r!==`end`&&t&&f()}},cancel:()=>{clearTimeout(c),c=void 0,d=void 0,clearTimeout(l),l=void 0,u=void 0},flush:()=>{m(),p()},get isIdle(){return c===void 0&&l===void 0}}}exports.funnel=n;
2
+ //# sourceMappingURL=funnel.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funnel.cjs","names":[],"sources":["../src/funnel.ts"],"sourcesContent":["import type { RequireAtLeastOne } from 'type-fest';\n\n// We use the value provided by the reducer to also determine if a call\n// was done during a timeout period. This means that even when no reducer\n// is provided, we still need a dummy reducer that would return something\n// other than `undefined`. It is safe to cast this to R (which might be\n// anything) because the callback would never use it as it would be typed\n// as a zero-args function.\nconst VOID_REDUCER_SYMBOL = Symbol('funnel/voidReducer');\nconst voidReducer = <R>(): R => VOID_REDUCER_SYMBOL as R;\n\ntype FunnelOptions<Args extends RestArguments, R> = {\n readonly reducer?: (accumulator: R | undefined, ...params: Args) => R;\n} & FunnelTimingOptions;\n\n// Not all combinations of timing options are valid, there are dependencies\n// between them to ensure users can't configure the funnel in a way which would\n// cause it to never trigger.\ntype FunnelTimingOptions\n = | ({ readonly triggerAt?: 'end' } & (\n | ({ readonly minGapMs: number } & RequireAtLeastOne<{\n readonly minQuietPeriodMs: number;\n readonly maxBurstDurationMs: number;\n }>)\n | {\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: never;\n }\n ))\n | {\n readonly triggerAt: 'start' | 'both';\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: number;\n };\n\n// eslint-disable-next-line ts/no-explicit-any -- TypeScript has some quirks with generic function types, and works best with `any` and not `unknown`. This follows the typing of built-in utilities like `ReturnType` and `Parameters`.\ntype RestArguments = Array<any>;\n\ninterface Funnel<Args extends RestArguments = []> {\n /**\n * Call the function. This might result in the `execute` function being called\n * now or later, depending on it's configuration and it's current state.\n *\n * @param args - The args are defined by the `reducer` function.\n */\n\n readonly call: (...args: Args) => void;\n\n /**\n * Resets the funnel to it's initial state. Any calls made since the last\n * invocation will be discarded.\n */\n readonly cancel: () => void;\n\n /**\n * Triggers an invocation regardless of the current state of the funnel.\n * Like any other invocation, The funnel will also be reset to it's initial\n * state afterwards.\n */\n readonly flush: () => void;\n\n /**\n * The funnel is in it's initial state (there are no active timeouts).\n */\n readonly isIdle: boolean;\n}\n\n/**\n * Creates a funnel that controls the timing and execution of `callback`. Its\n * main purpose is to manage multiple consecutive (usually fast-paced) calls,\n * reshaping them according to a defined batching strategy and timing policy.\n * This is useful when handling uncontrolled call rates, such as DOM events or\n * network traffic. It can implement strategies like debouncing, throttling,\n * batching, and more.\n *\n * An optional `reducer` function can be provided to allow passing data to the\n * callback via calls to `call` (otherwise the signature of `call` takes no\n * arguments).\n *\n * Typing is inferred from `callback`s param, and from the rest params that\n * the optional `reducer` function accepts. Use **explicit** types for these\n * to ensure that everything _else_ is well-typed.\n *\n * Notice that this function constructs a funnel **object**, and does **not**\n * execute anything when called. The returned object should be used to execute\n * the funnel via the its `call` method.\n *\n * - Debouncing: use `minQuietPeriodMs` and any `triggerAt`.\n * - Throttling: use `minGapMs` and `triggerAt: \"start\"` or `\"both\"`.\n * - Batching: See the reference implementation in [`funnel.reference-batch.test.ts`](https://github.com/vinicunca/perkakas/blob/main/src/funnel.reference-batch.test.ts).\n *\n * @param callback - The main function that would be invoked periodically based\n * on `options`. The function would take the latest result of the `reducer`; if\n * no calls where made since the last time it was invoked it will not be\n * invoked. (If a return value is needed, it should be passed via a reference or\n * via closure to the outer scope of the funnel).\n * @param options - An object that defines when `execute` should be invoked,\n * relative to the calls of `call`. An empty/missing options object is\n * equivalent to setting `minQuietPeriodMs` to `0`.\n * @param options.reducer - Combines the arguments passed to `call` with the\n * value computed on the previous call (or `undefined` on the first time). The\n * goal of the function is to extract and summarize the data needed for\n * `callback`. It should be fast and simple as it is called often and should\n * defer heavy operations to the `execute` function. If the final value\n * is `undefined`, `callback` will not be called.\n * @param options.triggerAt - At what \"edges\" of the funnel's burst window\n * would `execute` invoke:\n * - `start` - the function will be invoked immediately (within the **same**\n * execution frame!), and any subsequent calls would be ignored until the funnel\n * is idle again. During this period `reducer` will also not be called.\n * - `end` - the function will **not** be invoked initially but the timer will\n * be started. Any calls during this time would be passed to the reducer, and\n * when the timers are done, the reduced result would trigger an invocation.\n * - `both` - the function will be invoked immediately, and then the funnel\n * would behave as if it was in the 'end' state. Default: 'end'.\n * @param options.minQuietPeriodMs - The burst timer prevents subsequent calls\n * in short succession to cause excessive invocations (aka \"debounce\"). This\n * duration represents the **minimum** amount of time that needs to pass\n * between calls (the \"quiet\" part) in order for the subsequent call to **not**\n * be considered part of the burst. In other words, as long as calls are faster\n * than this, they are considered part of the burst and the burst is extended.\n * @param options.maxBurstDurationMs - Bursts are extended every time a call is\n * made within the burst period. This means that the burst period could be\n * extended indefinitely. To prevent such cases, a maximum burst duration could\n * be defined. When `minQuietPeriodMs` is not defined and this option is, they\n * will both share the same value.\n * @param options.minGapMs - A minimum duration between calls of `execute`.\n * This is maintained regardless of the shape of the burst and is ensured even\n * if the `maxBurstDurationMs` is reached before it. (aka \"throttle\").\n * @returns A funnel with a `call` function that is used to trigger invocations.\n * In addition to it the funnel also comes with the following functions and\n * properties:\n * - `cancel` - Resets the funnel to it's initial state, discarding the current\n * `reducer` result without calling `execute` on it.\n * - `flush` - Triggers an invocation even if there are active timeouts, and\n * then resets the funnel to it's initial state.\n * - `isIdle` - Checks if there are any active timeouts.\n * @signature\n * funnel(callback, options);\n * @example\n * const debouncer = funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minQuietPeriodMs: 100 },\n * );\n * debouncer.call();\n * debouncer.call();\n *\n * const throttle = funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minGapMs: 100, triggerAt: \"start\" },\n * );\n * throttle.call();\n * throttle.call();\n * @category Function\n */\nexport function funnel<Args extends RestArguments = [], R = never>(\n callback: (data: R) => void,\n {\n triggerAt = 'end',\n minQuietPeriodMs,\n maxBurstDurationMs,\n minGapMs,\n reducer = voidReducer,\n }: FunnelOptions<Args, R>,\n): Funnel<Args> {\n // We manage execution via 2 timeouts, one to track bursts of calls, and one\n // to track the interval between invocations. Together we refer to the period\n // where any of these are active as a \"cool-down period\".\n let burstTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let intervalTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n // Until invoked, all calls are reduced into a single value that would be sent\n // to the executor on invocation.\n let preparedData: R | undefined;\n\n // In order to be able to limit the total size of the burst (when\n // `maxBurstDurationMs` is used) we need to track when the burst started.\n let burstStartTimestamp: number | undefined;\n\n const invoke = (): void => {\n const param = preparedData;\n if (param === undefined) {\n // There were no calls during both cool-down periods.\n return;\n }\n\n // Make sure the args aren't accidentally used again\n preparedData = undefined;\n\n if (param === VOID_REDUCER_SYMBOL) {\n // @ts-expect-error [ts2554] -- R is typed as `never` because we hide the\n // symbol that `voidReducer` returns; there's no way to make TypeScript\n // aware of this.\n callback();\n } else {\n callback(param);\n }\n\n if (minGapMs !== undefined) {\n intervalTimeoutId = setTimeout(handleIntervalEnd, minGapMs);\n }\n };\n\n function handleIntervalEnd(): void {\n // When called via a timeout the timeout is already cleared, but when called\n // via `flush` we need to manually clear it.\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n if (burstTimeoutId !== undefined) {\n // As long as one of the timeouts is active we don't invoke the function.\n // Each timeout's end event handler has a call to invoke, so we are\n // guaranteed to invoke the function eventually.\n return;\n }\n\n invoke();\n }\n\n const handleBurstEnd = (): void => {\n // When called via a timeout the timeout is already cleared, but when called\n // via `flush` we need to manually clear it.\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n if (intervalTimeoutId !== undefined) {\n // As long as one of the timeouts is active we don't invoke the function.\n // Each timeout's end event handler has a call to invoke, so we are\n // guaranteed to invoke the function eventually.\n return;\n }\n\n invoke();\n };\n\n return {\n call: (...args) => {\n // We act based on the initial state of the timeouts before the call is\n // handled and causes the timeouts to change.\n const wasIdle\n = burstTimeoutId === undefined && intervalTimeoutId === undefined;\n\n if (triggerAt !== 'start' || wasIdle) {\n preparedData = reducer(preparedData, ...args);\n }\n\n if (burstTimeoutId === undefined && !wasIdle) {\n // We are not in an active burst period but in an interval period. We\n // don't start a new burst window until the next invoke.\n return;\n }\n\n if (\n minQuietPeriodMs !== undefined\n || maxBurstDurationMs !== undefined\n || minGapMs === undefined\n ) {\n // The timeout tracking the burst period needs to be reset every time\n // another call is made so that it waits the full cool-down duration\n // before it is released.\n clearTimeout(burstTimeoutId);\n\n const now = Date.now();\n\n burstStartTimestamp ??= now;\n\n const burstRemainingMs\n = maxBurstDurationMs === undefined\n ? (minQuietPeriodMs ?? 0)\n : Math.min(\n minQuietPeriodMs ?? maxBurstDurationMs,\n // We need to account for the time already spent so that we\n // don't wait longer than the maxDelay.\n Math.max(0, maxBurstDurationMs - (now - burstStartTimestamp)),\n );\n\n burstTimeoutId = setTimeout(handleBurstEnd, burstRemainingMs);\n }\n\n if (triggerAt !== 'end' && wasIdle) {\n invoke();\n }\n },\n\n cancel: () => {\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n preparedData = undefined;\n },\n\n flush: () => {\n handleBurstEnd();\n handleIntervalEnd();\n },\n\n get isIdle() {\n return burstTimeoutId === undefined && intervalTimeoutId === undefined;\n },\n };\n}\n"],"mappings":"mEAQA,MAAM,EAAsB,OAAO,qBAAqB,CAClD,MAA0B,EAwJhC,SAAgB,EACd,EACA,CACE,YAAY,MACZ,mBACA,qBACA,WACA,UAAU,GAEE,CAId,IAAI,EACA,EAIA,EAIA,EAEE,MAAqB,CACzB,IAAM,EAAQ,EACV,IAAU,IAAA,KAMd,EAAe,IAAA,GAEX,IAAU,EAIZ,GAAU,CAEV,EAAS,EAAM,CAGb,IAAa,IAAA,KACf,EAAoB,WAAW,EAAmB,EAAS,IAI/D,SAAS,GAA0B,CAGjC,aAAa,EAAkB,CAC/B,EAAoB,IAAA,GAEhB,IAAmB,IAAA,IAOvB,GAAQ,CAGV,IAAM,MAA6B,CAGjC,aAAa,EAAe,CAC5B,EAAiB,IAAA,GACjB,EAAsB,IAAA,GAElB,IAAsB,IAAA,IAO1B,GAAQ,EAGV,MAAO,CACL,MAAO,GAAG,IAAS,CAGjB,IAAM,EACF,IAAmB,IAAA,IAAa,IAAsB,IAAA,GAE1D,IAAI,IAAc,SAAW,KAC3B,EAAe,EAAQ,EAAc,GAAG,EAAK,EAG3C,MAAmB,IAAA,IAAa,CAAC,GAMrC,IACE,IAAqB,IAAA,IAClB,IAAuB,IAAA,IACvB,IAAa,IAAA,GAChB,CAIA,aAAa,EAAe,CAE5B,IAAM,EAAM,KAAK,KAAK,CAEtB,IAAwB,EAExB,IAAM,EACF,IAAuB,IAAA,GACpB,GAAoB,EACrB,KAAK,IACH,GAAoB,EAGpB,KAAK,IAAI,EAAG,GAAsB,EAAM,GAAqB,CAC9D,CAEP,EAAiB,WAAW,EAAgB,EAAiB,CAG3D,IAAc,OAAS,GACzB,GAAQ,GAIZ,WAAc,CACZ,aAAa,EAAe,CAC5B,EAAiB,IAAA,GACjB,EAAsB,IAAA,GAEtB,aAAa,EAAkB,CAC/B,EAAoB,IAAA,GAEpB,EAAe,IAAA,IAGjB,UAAa,CACX,GAAgB,CAChB,GAAmB,EAGrB,IAAI,QAAS,CACX,OAAO,IAAmB,IAAA,IAAa,IAAsB,IAAA,IAEhE"}
package/dist/funnel.js CHANGED
@@ -1,2 +1,2 @@
1
- const e=Symbol(`funnel/voidReducer`),t=()=>e;function n(n,{triggerAt:r=`end`,minQuietPeriodMs:i,maxBurstDurationMs:a,minGapMs:o,reducer:s=t}){let c,l,u,d;function f(){let t=u;t!==void 0&&(u=void 0,t===e?n():n(t),o!==void 0&&(l=setTimeout(p,o)))}function p(){clearTimeout(l),l=void 0,c===void 0&&f()}function m(){clearTimeout(c),c=void 0,d=void 0,l===void 0&&f()}return{call:(...e)=>{let t=c===void 0&&l===void 0;if((r!==`start`||t)&&(u=s(u,...e)),!(c===void 0&&!t)){if(i!==void 0||a!==void 0||o===void 0){clearTimeout(c);let e=Date.now();d??=e;let t=a===void 0?i??0:Math.min(i??a,a-(e-d));c=setTimeout(m,t)}r!==`end`&&t&&f()}},cancel:()=>{clearTimeout(c),c=void 0,d=void 0,clearTimeout(l),l=void 0,u=void 0},flush:()=>{m(),p()},get isIdle(){return c===void 0&&l===void 0}}}export{n as funnel};
1
+ const e=Symbol(`funnel/voidReducer`),t=()=>e;function n(n,{triggerAt:r=`end`,minQuietPeriodMs:i,maxBurstDurationMs:a,minGapMs:o,reducer:s=t}){let c,l,u,d,f=()=>{let t=u;t!==void 0&&(u=void 0,t===e?n():n(t),o!==void 0&&(l=setTimeout(p,o)))};function p(){clearTimeout(l),l=void 0,c===void 0&&f()}let m=()=>{clearTimeout(c),c=void 0,d=void 0,l===void 0&&f()};return{call:(...e)=>{let t=c===void 0&&l===void 0;if((r!==`start`||t)&&(u=s(u,...e)),!(c===void 0&&!t)){if(i!==void 0||a!==void 0||o===void 0){clearTimeout(c);let e=Date.now();d??=e;let t=a===void 0?i??0:Math.min(i??a,Math.max(0,a-(e-d)));c=setTimeout(m,t)}r!==`end`&&t&&f()}},cancel:()=>{clearTimeout(c),c=void 0,d=void 0,clearTimeout(l),l=void 0,u=void 0},flush:()=>{m(),p()},get isIdle(){return c===void 0&&l===void 0}}}export{n as funnel};
2
2
  //# sourceMappingURL=funnel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"funnel.js","names":["burstTimeoutId: ReturnType<typeof setTimeout> | undefined","intervalTimeoutId: ReturnType<typeof setTimeout> | undefined","preparedData: R | undefined","burstStartTimestamp: number | undefined"],"sources":["../src/funnel.ts"],"sourcesContent":["import type { RequireAtLeastOne } from 'type-fest';\n\n/**\n * We use the value provided by the reducer to also determine if a call\n * was done during a timeout period. This means that even when no reducer\n * is provided, we still need a dummy reducer that would return something\n * other than `undefined`. It is safe to cast this to R (which might be\n * anything) because the callback would never use it as it would be typed\n * as a zero-args function.\n */\nconst VOID_REDUCER_SYMBOL = Symbol('funnel/voidReducer');\nconst voidReducer = <R>(): R => VOID_REDUCER_SYMBOL as R;\n\ntype FunnelOptions<Args extends RestArguments, R> = {\n readonly reducer?: (accumulator: R | undefined, ...params: Args) => R;\n} & FunnelTimingOptions;\n\n/**\n * Not all combinations of timing options are valid, there are dependencies\n * between them to ensure users can't configure the funnel in a way which would\n * cause it to never trigger.\n */\ntype FunnelTimingOptions\n = | ({ readonly triggerAt?: 'end' } & (\n | ({ readonly minGapMs: number } & RequireAtLeastOne<{\n readonly minQuietPeriodMs: number;\n readonly maxBurstDurationMs: number;\n }>)\n | {\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: never;\n }\n ))\n | {\n readonly triggerAt: 'start' | 'both';\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: number;\n };\n\n// eslint-disable-next-line ts/no-explicit-any -- TypeScript has some quirks with generic function types, and works best with `any` and not `unknown`. This follows the typing of built-in utilities like `ReturnType` and `Parameters`.\ntype RestArguments = Array<any>;\n\ninterface Funnel<Args extends RestArguments = []> {\n /**\n * Call the function. This might result in the `execute` function being called\n * now or later, depending on it's configuration and it's current state.\n *\n * @param args - The args are defined by the `reducer` function.\n */\n\n readonly call: (...args: Args) => void;\n\n /**\n * Resets the funnel to it's initial state. Any calls made since the last\n * invocation will be discarded.\n */\n readonly cancel: () => void;\n\n /**\n * Triggers an invocation regardless of the current state of the funnel.\n * Like any other invocation, The funnel will also be reset to it's initial\n * state afterwards.\n */\n readonly flush: () => void;\n\n /**\n * The funnel is in it's initial state (there are no active timeouts).\n */\n readonly isIdle: boolean;\n}\n\n/**\n * Creates a funnel that controls the timing and execution of `callback`. Its\n * main purpose is to manage multiple consecutive (usually fast-paced) calls,\n * reshaping them according to a defined batching strategy and timing policy.\n * This is useful when handling uncontrolled call rates, such as DOM events or\n * network traffic. It can implement strategies like debouncing, throttling,\n * batching, and more.\n *\n * An optional `reducer` function can be provided to allow passing data to the\n * callback via calls to `call` (otherwise the signature of `call` takes no\n * arguments).\n *\n * Typing is inferred from `callback`s param, and from the rest params that\n * the optional `reducer` function accepts. Use **explicit** types for these\n * to ensure that everything _else_ is well-typed.\n *\n * Notice that this function constructs a funnel **object**, and does **not**\n * execute anything when called. The returned object should be used to execute\n * the funnel via the its `call` method.\n *\n * - Debouncing: use `minQuietPeriodMs` and any `triggerAt`.\n * - Throttling: use `minGapMs` and `triggerAt: \"start\"` or `\"both\"`.\n * - Batching: See the reference implementation in [`funnel.reference-batch.test.ts`](https://github.com/vinicunca/perkakas/blob/main/src/funnel.reference-batch.test.ts).\n *\n * @param callback - The main function that would be invoked periodically based\n * on `options`. The function would take the latest result of the `reducer`; if\n * no calls where made since the last time it was invoked it will not be\n * invoked. (If a return value is needed, it should be passed via a reference or\n * via closure to the outer scope of the funnel).\n * @param options - An object that defines when `execute` should be invoked,\n * relative to the calls of `call`. An empty/missing options object is\n * equivalent to setting `minQuietPeriodMs` to `0`.\n * @param options.reducer - Combines the arguments passed to `call` with the\n * value computed on the previous call (or `undefined` on the first time). The\n * goal of the function is to extract and summarize the data needed for\n * `callback`. It should be fast and simple as it is called often and should\n * defer heavy operations to the `execute` function. If the final value\n * is `undefined`, `callback` will not be called.\n * @param options.triggerAt - At what \"edges\" of the funnel's burst window\n * would `execute` invoke:\n * - `start` - the function will be invoked immediately (within the **same**\n * execution frame!), and any subsequent calls would be ignored until the funnel\n * is idle again. During this period `reducer` will also not be called.\n * - `end` - the function will **not** be invoked initially but the timer will\n * be started. Any calls during this time would be passed to the reducer, and\n * when the timers are done, the reduced result would trigger an invocation.\n * - `both` - the function will be invoked immediately, and then the funnel\n * would behave as if it was in the 'end' state. @default 'end'.\n * @param options.minQuietPeriodMs - The burst timer prevents subsequent calls\n * in short succession to cause excessive invocations (aka \"debounce\"). This\n * duration represents the **minimum** amount of time that needs to pass\n * between calls (the \"quiet\" part) in order for the subsequent call to **not**\n * be considered part of the burst. In other words, as long as calls are faster\n * than this, they are considered part of the burst and the burst is extended.\n * @param options.maxBurstDurationMs - Bursts are extended every time a call is\n * made within the burst period. This means that the burst period could be\n * extended indefinitely. To prevent such cases, a maximum burst duration could\n * be defined. When `minQuietPeriodMs` is not defined and this option is, they\n * will both share the same value.\n * @param options.minGapMs - A minimum duration between calls of `execute`.\n * This is maintained regardless of the shape of the burst and is ensured even\n * if the `maxBurstDurationMs` is reached before it. (aka \"throttle\").\n * @returns A funnel with a `call` function that is used to trigger invocations.\n * In addition to it the funnel also comes with the following functions and\n * properties:\n * - `cancel` - Resets the funnel to it's initial state, discarding the current\n * `reducer` result without calling `execute` on it.\n * - `flush` - Triggers an invocation even if there are active timeouts, and\n * then resets the funnel to it's initial state.\n * - `isIdle` - Checks if there are any active timeouts.\n * @signature\n * P.funnel(callback, options);\n * @example\n * const debouncer = P.funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minQuietPeriodMs: 100 },\n * );\n * debouncer.call();\n * debouncer.call();\n *\n * const throttle = P.funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minGapMs: 100, triggerAt: \"start\" },\n * );\n * throttle.call();\n * throttle.call();\n * @category Function\n */\nexport function funnel<Args extends RestArguments = [], R = never>(\n callback: (data: R) => void,\n {\n triggerAt = 'end',\n minQuietPeriodMs,\n maxBurstDurationMs,\n minGapMs,\n reducer = voidReducer,\n }: FunnelOptions<Args, R>,\n): Funnel<Args> {\n /**\n * We manage execution via 2 timeouts, one to track bursts of calls, and one\n * to track the interval between invocations. Together we refer to the period\n * where any of these are active as a \"cool-down period\".\n */\n let burstTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let intervalTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * Until invoked, all calls are reduced into a single value that would be sent\n * to the executor on invocation.\n */\n let preparedData: R | undefined;\n\n /**\n * In order to be able to limit the total size of the burst (when\n * `maxBurstDurationMs` is used) we need to track when the burst started.\n */\n let burstStartTimestamp: number | undefined;\n\n function invoke(): void {\n const param = preparedData;\n if (param === undefined) {\n // There were no calls during both cool-down periods.\n return;\n }\n\n // Make sure the args aren't accidentally used again\n preparedData = undefined;\n\n // eslint-disable-next-line sonar/different-types-comparison\n if (param === VOID_REDUCER_SYMBOL) {\n // @ts-expect-error [ts2554] -- R is typed as `never` because we hide the\n // symbol that `voidReducer` returns; there's no way to make TypeScript\n // aware of this.\n callback();\n } else {\n callback(param);\n }\n\n if (minGapMs !== undefined) {\n intervalTimeoutId = setTimeout(handleIntervalEnd, minGapMs);\n }\n }\n\n function handleIntervalEnd(): void {\n /**\n * When called via a timeout the timeout is already cleared, but when called\n * via `flush` we need to manually clear it.\n */\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n if (burstTimeoutId !== undefined) {\n /**\n * As long as one of the timeouts is active we don't invoke the function.\n * Each timeout's end event handler has a call to invoke, so we are\n * guaranteed to invoke the function eventually.\n */\n return;\n }\n\n invoke();\n };\n\n function handleBurstEnd(): void {\n /**\n * When called via a timeout the timeout is already cleared, but when called\n * via `flush` we need to manually clear it.\n */\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n if (intervalTimeoutId !== undefined) {\n /**\n * As long as one of the timeouts is active we don't invoke the function.\n * Each timeout's end event handler has a call to invoke, so we are\n * guaranteed to invoke the function eventually.\n */\n return;\n }\n\n invoke();\n };\n\n return {\n call: (...args) => {\n /**\n * We act based on the initial state of the timeouts before the call is\n * handled and causes the timeouts to change.\n */\n const wasIdle = burstTimeoutId === undefined && intervalTimeoutId === undefined;\n\n if (triggerAt !== 'start' || wasIdle) {\n preparedData = reducer(preparedData, ...args);\n }\n\n if (burstTimeoutId === undefined && !wasIdle) {\n /**\n * We are not in an active burst period but in an interval period. We\n * don't start a new burst window until the next invoke.\n */\n return;\n }\n\n if (\n minQuietPeriodMs !== undefined\n || maxBurstDurationMs !== undefined\n || minGapMs === undefined\n ) {\n /**\n * The timeout tracking the burst period needs to be reset every time\n * another call is made so that it waits the full cool-down duration\n * before it is released.\n */\n clearTimeout(burstTimeoutId);\n\n const now = Date.now();\n\n burstStartTimestamp ??= now;\n\n const burstRemainingMs\n = maxBurstDurationMs === undefined\n ? (minQuietPeriodMs ?? 0)\n : Math.min(\n minQuietPeriodMs ?? maxBurstDurationMs,\n /**\n * We need to account for the time already spent so that we\n * don't wait longer than the maxDelay.\n */\n maxBurstDurationMs - (now - burstStartTimestamp),\n );\n\n burstTimeoutId = setTimeout(handleBurstEnd, burstRemainingMs);\n }\n\n if (triggerAt !== 'end' && wasIdle) {\n invoke();\n }\n },\n\n cancel: () => {\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n preparedData = undefined;\n },\n\n flush: () => {\n handleBurstEnd();\n handleIntervalEnd();\n },\n\n get isIdle() {\n return burstTimeoutId === undefined && intervalTimeoutId === undefined;\n },\n };\n}\n"],"mappings":"AAUA,MAAM,EAAsB,OAAO,qBAAqB,CAClD,MAA0B,EA0JhC,SAAgB,EACd,EACA,CACE,YAAY,MACZ,mBACA,qBACA,WACA,UAAU,GAEE,CAMd,IAAIA,EACAC,EAMAC,EAMAC,EAEJ,SAAS,GAAe,CACtB,IAAM,EAAQ,EACV,IAAU,IAAA,KAMd,EAAe,IAAA,GAGX,IAAU,EAIZ,GAAU,CAEV,EAAS,EAAM,CAGb,IAAa,IAAA,KACf,EAAoB,WAAW,EAAmB,EAAS,GAI/D,SAAS,GAA0B,CAKjC,aAAa,EAAkB,CAC/B,EAAoB,IAAA,GAEhB,IAAmB,IAAA,IASvB,GAAQ,CAGV,SAAS,GAAuB,CAK9B,aAAa,EAAe,CAC5B,EAAiB,IAAA,GACjB,EAAsB,IAAA,GAElB,IAAsB,IAAA,IAS1B,GAAQ,CAGV,MAAO,CACL,MAAO,GAAG,IAAS,CAKjB,IAAM,EAAU,IAAmB,IAAA,IAAa,IAAsB,IAAA,GAEtE,IAAI,IAAc,SAAW,KAC3B,EAAe,EAAQ,EAAc,GAAG,EAAK,EAG3C,MAAmB,IAAA,IAAa,CAAC,GAQrC,IACE,IAAqB,IAAA,IAClB,IAAuB,IAAA,IACvB,IAAa,IAAA,GAChB,CAMA,aAAa,EAAe,CAE5B,IAAM,EAAM,KAAK,KAAK,CAEtB,IAAwB,EAExB,IAAM,EACF,IAAuB,IAAA,GACpB,GAAoB,EACrB,KAAK,IACH,GAAoB,EAKpB,GAAsB,EAAM,GAC7B,CAEP,EAAiB,WAAW,EAAgB,EAAiB,CAG3D,IAAc,OAAS,GACzB,GAAQ,GAIZ,WAAc,CACZ,aAAa,EAAe,CAC5B,EAAiB,IAAA,GACjB,EAAsB,IAAA,GAEtB,aAAa,EAAkB,CAC/B,EAAoB,IAAA,GAEpB,EAAe,IAAA,IAGjB,UAAa,CACX,GAAgB,CAChB,GAAmB,EAGrB,IAAI,QAAS,CACX,OAAO,IAAmB,IAAA,IAAa,IAAsB,IAAA,IAEhE"}
1
+ {"version":3,"file":"funnel.js","names":[],"sources":["../src/funnel.ts"],"sourcesContent":["import type { RequireAtLeastOne } from 'type-fest';\n\n// We use the value provided by the reducer to also determine if a call\n// was done during a timeout period. This means that even when no reducer\n// is provided, we still need a dummy reducer that would return something\n// other than `undefined`. It is safe to cast this to R (which might be\n// anything) because the callback would never use it as it would be typed\n// as a zero-args function.\nconst VOID_REDUCER_SYMBOL = Symbol('funnel/voidReducer');\nconst voidReducer = <R>(): R => VOID_REDUCER_SYMBOL as R;\n\ntype FunnelOptions<Args extends RestArguments, R> = {\n readonly reducer?: (accumulator: R | undefined, ...params: Args) => R;\n} & FunnelTimingOptions;\n\n// Not all combinations of timing options are valid, there are dependencies\n// between them to ensure users can't configure the funnel in a way which would\n// cause it to never trigger.\ntype FunnelTimingOptions\n = | ({ readonly triggerAt?: 'end' } & (\n | ({ readonly minGapMs: number } & RequireAtLeastOne<{\n readonly minQuietPeriodMs: number;\n readonly maxBurstDurationMs: number;\n }>)\n | {\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: never;\n }\n ))\n | {\n readonly triggerAt: 'start' | 'both';\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: number;\n };\n\n// eslint-disable-next-line ts/no-explicit-any -- TypeScript has some quirks with generic function types, and works best with `any` and not `unknown`. This follows the typing of built-in utilities like `ReturnType` and `Parameters`.\ntype RestArguments = Array<any>;\n\ninterface Funnel<Args extends RestArguments = []> {\n /**\n * Call the function. This might result in the `execute` function being called\n * now or later, depending on it's configuration and it's current state.\n *\n * @param args - The args are defined by the `reducer` function.\n */\n\n readonly call: (...args: Args) => void;\n\n /**\n * Resets the funnel to it's initial state. Any calls made since the last\n * invocation will be discarded.\n */\n readonly cancel: () => void;\n\n /**\n * Triggers an invocation regardless of the current state of the funnel.\n * Like any other invocation, The funnel will also be reset to it's initial\n * state afterwards.\n */\n readonly flush: () => void;\n\n /**\n * The funnel is in it's initial state (there are no active timeouts).\n */\n readonly isIdle: boolean;\n}\n\n/**\n * Creates a funnel that controls the timing and execution of `callback`. Its\n * main purpose is to manage multiple consecutive (usually fast-paced) calls,\n * reshaping them according to a defined batching strategy and timing policy.\n * This is useful when handling uncontrolled call rates, such as DOM events or\n * network traffic. It can implement strategies like debouncing, throttling,\n * batching, and more.\n *\n * An optional `reducer` function can be provided to allow passing data to the\n * callback via calls to `call` (otherwise the signature of `call` takes no\n * arguments).\n *\n * Typing is inferred from `callback`s param, and from the rest params that\n * the optional `reducer` function accepts. Use **explicit** types for these\n * to ensure that everything _else_ is well-typed.\n *\n * Notice that this function constructs a funnel **object**, and does **not**\n * execute anything when called. The returned object should be used to execute\n * the funnel via the its `call` method.\n *\n * - Debouncing: use `minQuietPeriodMs` and any `triggerAt`.\n * - Throttling: use `minGapMs` and `triggerAt: \"start\"` or `\"both\"`.\n * - Batching: See the reference implementation in [`funnel.reference-batch.test.ts`](https://github.com/vinicunca/perkakas/blob/main/src/funnel.reference-batch.test.ts).\n *\n * @param callback - The main function that would be invoked periodically based\n * on `options`. The function would take the latest result of the `reducer`; if\n * no calls where made since the last time it was invoked it will not be\n * invoked. (If a return value is needed, it should be passed via a reference or\n * via closure to the outer scope of the funnel).\n * @param options - An object that defines when `execute` should be invoked,\n * relative to the calls of `call`. An empty/missing options object is\n * equivalent to setting `minQuietPeriodMs` to `0`.\n * @param options.reducer - Combines the arguments passed to `call` with the\n * value computed on the previous call (or `undefined` on the first time). The\n * goal of the function is to extract and summarize the data needed for\n * `callback`. It should be fast and simple as it is called often and should\n * defer heavy operations to the `execute` function. If the final value\n * is `undefined`, `callback` will not be called.\n * @param options.triggerAt - At what \"edges\" of the funnel's burst window\n * would `execute` invoke:\n * - `start` - the function will be invoked immediately (within the **same**\n * execution frame!), and any subsequent calls would be ignored until the funnel\n * is idle again. During this period `reducer` will also not be called.\n * - `end` - the function will **not** be invoked initially but the timer will\n * be started. Any calls during this time would be passed to the reducer, and\n * when the timers are done, the reduced result would trigger an invocation.\n * - `both` - the function will be invoked immediately, and then the funnel\n * would behave as if it was in the 'end' state. Default: 'end'.\n * @param options.minQuietPeriodMs - The burst timer prevents subsequent calls\n * in short succession to cause excessive invocations (aka \"debounce\"). This\n * duration represents the **minimum** amount of time that needs to pass\n * between calls (the \"quiet\" part) in order for the subsequent call to **not**\n * be considered part of the burst. In other words, as long as calls are faster\n * than this, they are considered part of the burst and the burst is extended.\n * @param options.maxBurstDurationMs - Bursts are extended every time a call is\n * made within the burst period. This means that the burst period could be\n * extended indefinitely. To prevent such cases, a maximum burst duration could\n * be defined. When `minQuietPeriodMs` is not defined and this option is, they\n * will both share the same value.\n * @param options.minGapMs - A minimum duration between calls of `execute`.\n * This is maintained regardless of the shape of the burst and is ensured even\n * if the `maxBurstDurationMs` is reached before it. (aka \"throttle\").\n * @returns A funnel with a `call` function that is used to trigger invocations.\n * In addition to it the funnel also comes with the following functions and\n * properties:\n * - `cancel` - Resets the funnel to it's initial state, discarding the current\n * `reducer` result without calling `execute` on it.\n * - `flush` - Triggers an invocation even if there are active timeouts, and\n * then resets the funnel to it's initial state.\n * - `isIdle` - Checks if there are any active timeouts.\n * @signature\n * funnel(callback, options);\n * @example\n * const debouncer = funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minQuietPeriodMs: 100 },\n * );\n * debouncer.call();\n * debouncer.call();\n *\n * const throttle = funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minGapMs: 100, triggerAt: \"start\" },\n * );\n * throttle.call();\n * throttle.call();\n * @category Function\n */\nexport function funnel<Args extends RestArguments = [], R = never>(\n callback: (data: R) => void,\n {\n triggerAt = 'end',\n minQuietPeriodMs,\n maxBurstDurationMs,\n minGapMs,\n reducer = voidReducer,\n }: FunnelOptions<Args, R>,\n): Funnel<Args> {\n // We manage execution via 2 timeouts, one to track bursts of calls, and one\n // to track the interval between invocations. Together we refer to the period\n // where any of these are active as a \"cool-down period\".\n let burstTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let intervalTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n // Until invoked, all calls are reduced into a single value that would be sent\n // to the executor on invocation.\n let preparedData: R | undefined;\n\n // In order to be able to limit the total size of the burst (when\n // `maxBurstDurationMs` is used) we need to track when the burst started.\n let burstStartTimestamp: number | undefined;\n\n const invoke = (): void => {\n const param = preparedData;\n if (param === undefined) {\n // There were no calls during both cool-down periods.\n return;\n }\n\n // Make sure the args aren't accidentally used again\n preparedData = undefined;\n\n if (param === VOID_REDUCER_SYMBOL) {\n // @ts-expect-error [ts2554] -- R is typed as `never` because we hide the\n // symbol that `voidReducer` returns; there's no way to make TypeScript\n // aware of this.\n callback();\n } else {\n callback(param);\n }\n\n if (minGapMs !== undefined) {\n intervalTimeoutId = setTimeout(handleIntervalEnd, minGapMs);\n }\n };\n\n function handleIntervalEnd(): void {\n // When called via a timeout the timeout is already cleared, but when called\n // via `flush` we need to manually clear it.\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n if (burstTimeoutId !== undefined) {\n // As long as one of the timeouts is active we don't invoke the function.\n // Each timeout's end event handler has a call to invoke, so we are\n // guaranteed to invoke the function eventually.\n return;\n }\n\n invoke();\n }\n\n const handleBurstEnd = (): void => {\n // When called via a timeout the timeout is already cleared, but when called\n // via `flush` we need to manually clear it.\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n if (intervalTimeoutId !== undefined) {\n // As long as one of the timeouts is active we don't invoke the function.\n // Each timeout's end event handler has a call to invoke, so we are\n // guaranteed to invoke the function eventually.\n return;\n }\n\n invoke();\n };\n\n return {\n call: (...args) => {\n // We act based on the initial state of the timeouts before the call is\n // handled and causes the timeouts to change.\n const wasIdle\n = burstTimeoutId === undefined && intervalTimeoutId === undefined;\n\n if (triggerAt !== 'start' || wasIdle) {\n preparedData = reducer(preparedData, ...args);\n }\n\n if (burstTimeoutId === undefined && !wasIdle) {\n // We are not in an active burst period but in an interval period. We\n // don't start a new burst window until the next invoke.\n return;\n }\n\n if (\n minQuietPeriodMs !== undefined\n || maxBurstDurationMs !== undefined\n || minGapMs === undefined\n ) {\n // The timeout tracking the burst period needs to be reset every time\n // another call is made so that it waits the full cool-down duration\n // before it is released.\n clearTimeout(burstTimeoutId);\n\n const now = Date.now();\n\n burstStartTimestamp ??= now;\n\n const burstRemainingMs\n = maxBurstDurationMs === undefined\n ? (minQuietPeriodMs ?? 0)\n : Math.min(\n minQuietPeriodMs ?? maxBurstDurationMs,\n // We need to account for the time already spent so that we\n // don't wait longer than the maxDelay.\n Math.max(0, maxBurstDurationMs - (now - burstStartTimestamp)),\n );\n\n burstTimeoutId = setTimeout(handleBurstEnd, burstRemainingMs);\n }\n\n if (triggerAt !== 'end' && wasIdle) {\n invoke();\n }\n },\n\n cancel: () => {\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n preparedData = undefined;\n },\n\n flush: () => {\n handleBurstEnd();\n handleIntervalEnd();\n },\n\n get isIdle() {\n return burstTimeoutId === undefined && intervalTimeoutId === undefined;\n },\n };\n}\n"],"mappings":"AAQA,MAAM,EAAsB,OAAO,qBAAqB,CAClD,MAA0B,EAwJhC,SAAgB,EACd,EACA,CACE,YAAY,MACZ,mBACA,qBACA,WACA,UAAU,GAEE,CAId,IAAI,EACA,EAIA,EAIA,EAEE,MAAqB,CACzB,IAAM,EAAQ,EACV,IAAU,IAAA,KAMd,EAAe,IAAA,GAEX,IAAU,EAIZ,GAAU,CAEV,EAAS,EAAM,CAGb,IAAa,IAAA,KACf,EAAoB,WAAW,EAAmB,EAAS,IAI/D,SAAS,GAA0B,CAGjC,aAAa,EAAkB,CAC/B,EAAoB,IAAA,GAEhB,IAAmB,IAAA,IAOvB,GAAQ,CAGV,IAAM,MAA6B,CAGjC,aAAa,EAAe,CAC5B,EAAiB,IAAA,GACjB,EAAsB,IAAA,GAElB,IAAsB,IAAA,IAO1B,GAAQ,EAGV,MAAO,CACL,MAAO,GAAG,IAAS,CAGjB,IAAM,EACF,IAAmB,IAAA,IAAa,IAAsB,IAAA,GAE1D,IAAI,IAAc,SAAW,KAC3B,EAAe,EAAQ,EAAc,GAAG,EAAK,EAG3C,MAAmB,IAAA,IAAa,CAAC,GAMrC,IACE,IAAqB,IAAA,IAClB,IAAuB,IAAA,IACvB,IAAa,IAAA,GAChB,CAIA,aAAa,EAAe,CAE5B,IAAM,EAAM,KAAK,KAAK,CAEtB,IAAwB,EAExB,IAAM,EACF,IAAuB,IAAA,GACpB,GAAoB,EACrB,KAAK,IACH,GAAoB,EAGpB,KAAK,IAAI,EAAG,GAAsB,EAAM,GAAqB,CAC9D,CAEP,EAAiB,WAAW,EAAgB,EAAiB,CAG3D,IAAc,OAAS,GACzB,GAAQ,GAIZ,WAAc,CACZ,aAAa,EAAe,CAC5B,EAAiB,IAAA,GACjB,EAAsB,IAAA,GAEtB,aAAa,EAAkB,CAC/B,EAAoB,IAAA,GAEpB,EAAe,IAAA,IAGjB,UAAa,CACX,GAAgB,CAChB,GAAmB,EAGrB,IAAI,QAAS,CACX,OAAO,IAAmB,IAAA,IAAa,IAAsB,IAAA,IAEhE"}