es-toolkit 1.50.0 → 1.51.0-dev.2069

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 (495) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/NOTICE +39 -0
  3. package/README.md +2 -2
  4. package/bigint.d.ts +1 -0
  5. package/bigint.js +1 -0
  6. package/dist/_internal/NonPlainObject.d.mts +8 -0
  7. package/dist/_internal/NonPlainObject.d.ts +8 -0
  8. package/dist/_internal/bigIntRangeLength.js +19 -0
  9. package/dist/_internal/bigIntRangeLength.mjs +19 -0
  10. package/dist/_internal/isMergeableValue.js +17 -0
  11. package/dist/_internal/isMergeableValue.mjs +17 -0
  12. package/dist/_internal/isUnsafeProperty.js +7 -4
  13. package/dist/_internal/isUnsafeProperty.mjs +7 -4
  14. package/dist/_internal/isUnsafeToWriteProperty.js +22 -0
  15. package/dist/_internal/isUnsafeToWriteProperty.mjs +22 -0
  16. package/dist/array/at.d.mts +1 -1
  17. package/dist/array/at.d.ts +1 -1
  18. package/dist/array/filterAsync.js +1 -1
  19. package/dist/array/filterAsync.mjs +1 -1
  20. package/dist/array/flatMapAsync.js +1 -1
  21. package/dist/array/flatMapAsync.mjs +1 -1
  22. package/dist/array/forEachAsync.js +1 -1
  23. package/dist/array/forEachAsync.mjs +1 -1
  24. package/dist/array/index.js +1 -1
  25. package/dist/array/index.mjs +1 -1
  26. package/dist/array/limitAsync.d.mts +4 -28
  27. package/dist/array/limitAsync.d.ts +4 -28
  28. package/dist/array/limitAsync.js +2 -39
  29. package/dist/array/limitAsync.mjs +3 -39
  30. package/dist/array/mapAsync.js +1 -1
  31. package/dist/array/mapAsync.mjs +1 -1
  32. package/dist/array/orderBy.d.mts +1 -1
  33. package/dist/array/orderBy.d.ts +1 -1
  34. package/dist/array/pullAt.d.mts +1 -1
  35. package/dist/array/pullAt.d.ts +1 -1
  36. package/dist/array/pullAt.js +1 -1
  37. package/dist/array/pullAt.mjs +1 -1
  38. package/dist/array/sortBy.d.mts +1 -1
  39. package/dist/array/sortBy.d.ts +1 -1
  40. package/dist/array/unzip.d.mts +3 -0
  41. package/dist/array/unzip.d.ts +3 -0
  42. package/dist/array/unzip.js +3 -0
  43. package/dist/array/unzip.mjs +3 -0
  44. package/dist/bigint/clamp.d.mts +37 -0
  45. package/dist/bigint/clamp.d.ts +37 -0
  46. package/dist/bigint/clamp.js +16 -0
  47. package/dist/bigint/clamp.mjs +16 -0
  48. package/dist/bigint/inRange.d.mts +37 -0
  49. package/dist/bigint/inRange.d.ts +37 -0
  50. package/dist/bigint/inRange.js +20 -0
  51. package/dist/bigint/inRange.mjs +20 -0
  52. package/dist/bigint/index.d.mts +14 -0
  53. package/dist/bigint/index.d.ts +14 -0
  54. package/dist/bigint/index.js +27 -0
  55. package/dist/bigint/index.mjs +14 -0
  56. package/dist/bigint/max.d.mts +21 -0
  57. package/dist/bigint/max.d.ts +21 -0
  58. package/dist/bigint/max.js +26 -0
  59. package/dist/bigint/max.mjs +26 -0
  60. package/dist/bigint/maxBy.d.mts +21 -0
  61. package/dist/bigint/maxBy.d.ts +21 -0
  62. package/dist/bigint/maxBy.js +34 -0
  63. package/dist/bigint/maxBy.mjs +34 -0
  64. package/dist/bigint/median.d.mts +22 -0
  65. package/dist/bigint/median.d.ts +22 -0
  66. package/dist/bigint/median.js +28 -0
  67. package/dist/bigint/median.mjs +28 -0
  68. package/dist/bigint/medianBy.d.mts +21 -0
  69. package/dist/bigint/medianBy.d.ts +21 -0
  70. package/dist/bigint/medianBy.js +24 -0
  71. package/dist/bigint/medianBy.mjs +24 -0
  72. package/dist/bigint/min.d.mts +18 -0
  73. package/dist/bigint/min.d.ts +18 -0
  74. package/dist/bigint/min.js +23 -0
  75. package/dist/bigint/min.mjs +23 -0
  76. package/dist/bigint/minBy.d.mts +21 -0
  77. package/dist/bigint/minBy.d.ts +21 -0
  78. package/dist/bigint/minBy.js +34 -0
  79. package/dist/bigint/minBy.mjs +34 -0
  80. package/dist/bigint/percentile.d.mts +23 -0
  81. package/dist/bigint/percentile.d.ts +23 -0
  82. package/dist/bigint/percentile.js +31 -0
  83. package/dist/bigint/percentile.mjs +31 -0
  84. package/dist/bigint/range.d.mts +45 -0
  85. package/dist/bigint/range.d.ts +45 -0
  86. package/dist/bigint/range.js +24 -0
  87. package/dist/bigint/range.mjs +24 -0
  88. package/dist/bigint/rangeRight.d.mts +43 -0
  89. package/dist/bigint/rangeRight.d.ts +43 -0
  90. package/dist/bigint/rangeRight.js +25 -0
  91. package/dist/bigint/rangeRight.mjs +25 -0
  92. package/dist/bigint/sum.d.mts +18 -0
  93. package/dist/bigint/sum.d.ts +18 -0
  94. package/dist/bigint/sum.js +22 -0
  95. package/dist/bigint/sum.mjs +22 -0
  96. package/dist/bigint/sumBy.d.mts +20 -0
  97. package/dist/bigint/sumBy.d.ts +20 -0
  98. package/dist/bigint/sumBy.js +24 -0
  99. package/dist/bigint/sumBy.mjs +24 -0
  100. package/dist/browser.global.js +6 -3
  101. package/dist/compat/_internal/normalizeZero.js +13 -0
  102. package/dist/compat/_internal/normalizeZero.mjs +13 -0
  103. package/dist/compat/_internal/toKey.js +1 -1
  104. package/dist/compat/_internal/toKey.mjs +1 -1
  105. package/dist/compat/_internal/unicodeSize.js +45 -0
  106. package/dist/compat/_internal/unicodeSize.mjs +45 -0
  107. package/dist/compat/array/chunk.js +1 -0
  108. package/dist/compat/array/chunk.mjs +1 -0
  109. package/dist/compat/array/difference.js +2 -1
  110. package/dist/compat/array/difference.mjs +2 -1
  111. package/dist/compat/array/differenceBy.js +3 -2
  112. package/dist/compat/array/differenceBy.mjs +3 -2
  113. package/dist/compat/array/drop.d.mts +1 -1
  114. package/dist/compat/array/drop.d.ts +1 -1
  115. package/dist/compat/array/dropRight.d.mts +2 -3
  116. package/dist/compat/array/dropRight.d.ts +2 -3
  117. package/dist/compat/array/dropRight.js +4 -4
  118. package/dist/compat/array/dropRight.mjs +4 -4
  119. package/dist/compat/array/every.js +9 -9
  120. package/dist/compat/array/every.mjs +9 -9
  121. package/dist/compat/array/fill.js +8 -2
  122. package/dist/compat/array/fill.mjs +8 -2
  123. package/dist/compat/array/find.js +14 -13
  124. package/dist/compat/array/find.mjs +14 -13
  125. package/dist/compat/array/findIndex.js +3 -19
  126. package/dist/compat/array/findIndex.mjs +3 -19
  127. package/dist/compat/array/findLast.js +3 -3
  128. package/dist/compat/array/findLast.mjs +3 -3
  129. package/dist/compat/array/flatMap.js +3 -8
  130. package/dist/compat/array/flatMap.mjs +3 -7
  131. package/dist/compat/array/flatMapDepth.js +1 -1
  132. package/dist/compat/array/flatMapDepth.mjs +1 -1
  133. package/dist/compat/array/forEach.js +1 -1
  134. package/dist/compat/array/forEach.mjs +1 -1
  135. package/dist/compat/array/includes.js +13 -13
  136. package/dist/compat/array/includes.mjs +13 -13
  137. package/dist/compat/array/indexOf.js +2 -1
  138. package/dist/compat/array/indexOf.mjs +2 -1
  139. package/dist/compat/array/intersection.js +3 -2
  140. package/dist/compat/array/intersection.mjs +3 -2
  141. package/dist/compat/array/intersectionBy.js +7 -11
  142. package/dist/compat/array/intersectionBy.mjs +7 -11
  143. package/dist/compat/array/intersectionWith.js +6 -18
  144. package/dist/compat/array/intersectionWith.mjs +6 -18
  145. package/dist/compat/array/last.js +1 -1
  146. package/dist/compat/array/last.mjs +1 -1
  147. package/dist/compat/array/lastIndexOf.js +3 -1
  148. package/dist/compat/array/lastIndexOf.mjs +3 -1
  149. package/dist/compat/array/map.js +3 -3
  150. package/dist/compat/array/map.mjs +3 -3
  151. package/dist/compat/array/orderBy.js +8 -6
  152. package/dist/compat/array/orderBy.mjs +8 -6
  153. package/dist/compat/array/partition.js +6 -6
  154. package/dist/compat/array/partition.mjs +6 -6
  155. package/dist/compat/array/pull.js +1 -1
  156. package/dist/compat/array/pull.mjs +1 -1
  157. package/dist/compat/array/pullAll.js +2 -0
  158. package/dist/compat/array/pullAll.mjs +2 -0
  159. package/dist/compat/array/remove.js +8 -4
  160. package/dist/compat/array/remove.mjs +8 -4
  161. package/dist/compat/array/reverse.js +1 -1
  162. package/dist/compat/array/reverse.mjs +1 -1
  163. package/dist/compat/array/sampleSize.js +2 -1
  164. package/dist/compat/array/sampleSize.mjs +2 -1
  165. package/dist/compat/array/size.js +2 -1
  166. package/dist/compat/array/size.mjs +2 -1
  167. package/dist/compat/array/some.js +2 -1
  168. package/dist/compat/array/some.mjs +2 -1
  169. package/dist/compat/array/takeRightWhile.js +2 -2
  170. package/dist/compat/array/takeRightWhile.mjs +2 -2
  171. package/dist/compat/array/takeWhile.js +2 -2
  172. package/dist/compat/array/takeWhile.mjs +2 -2
  173. package/dist/compat/array/unionBy.js +2 -1
  174. package/dist/compat/array/unionBy.mjs +2 -1
  175. package/dist/compat/array/uniqBy.js +4 -3
  176. package/dist/compat/array/uniqBy.mjs +4 -3
  177. package/dist/compat/array/unzip.d.mts +3 -0
  178. package/dist/compat/array/unzip.d.ts +3 -0
  179. package/dist/compat/array/unzip.js +3 -0
  180. package/dist/compat/array/unzip.mjs +3 -0
  181. package/dist/compat/array/unzipWith.js +1 -1
  182. package/dist/compat/array/unzipWith.mjs +1 -1
  183. package/dist/compat/array/zipObject.js +2 -0
  184. package/dist/compat/array/zipObject.mjs +2 -0
  185. package/dist/compat/compat.d.mts +3 -3
  186. package/dist/compat/compat.d.ts +3 -3
  187. package/dist/compat/compat.js +8 -4
  188. package/dist/compat/compat.mjs +8 -4
  189. package/dist/compat/function/curry.d.mts +1 -1
  190. package/dist/compat/function/curry.d.ts +1 -1
  191. package/dist/compat/function/debounce.js +1 -1
  192. package/dist/compat/function/debounce.mjs +1 -1
  193. package/dist/compat/function/flowRight.d.mts +1 -1
  194. package/dist/compat/function/flowRight.d.ts +1 -1
  195. package/dist/compat/function/partial.d.mts +1 -1
  196. package/dist/compat/function/partial.d.ts +1 -1
  197. package/dist/compat/function/rest.d.mts +1 -1
  198. package/dist/compat/function/rest.d.ts +1 -1
  199. package/dist/compat/function/rest.js +1 -1
  200. package/dist/compat/function/rest.mjs +1 -1
  201. package/dist/compat/index.d.mts +3 -3
  202. package/dist/compat/index.d.ts +3 -3
  203. package/dist/compat/index.js +6 -4
  204. package/dist/compat/index.mjs +5 -5
  205. package/dist/compat/math/maxBy.js +1 -1
  206. package/dist/compat/math/maxBy.mjs +1 -1
  207. package/dist/compat/math/meanBy.d.mts +4 -0
  208. package/dist/compat/math/meanBy.d.ts +4 -0
  209. package/dist/compat/math/meanBy.js +8 -3
  210. package/dist/compat/math/meanBy.mjs +8 -3
  211. package/dist/compat/math/minBy.js +1 -1
  212. package/dist/compat/math/minBy.mjs +1 -1
  213. package/dist/compat/object/cloneDeep.d.mts +5 -5
  214. package/dist/compat/object/cloneDeep.d.ts +5 -5
  215. package/dist/compat/object/cloneDeep.js +5 -5
  216. package/dist/compat/object/cloneDeep.mjs +5 -5
  217. package/dist/compat/object/cloneDeepWith.js +3 -1
  218. package/dist/compat/object/cloneDeepWith.mjs +3 -1
  219. package/dist/compat/object/cloneWith.d.mts +1 -1
  220. package/dist/compat/object/cloneWith.d.ts +1 -1
  221. package/dist/compat/object/cloneWith.js +1 -1
  222. package/dist/compat/object/cloneWith.mjs +1 -1
  223. package/dist/compat/object/entries.d.mts +1 -0
  224. package/dist/compat/object/entries.d.ts +1 -0
  225. package/dist/compat/object/entries.js +1 -0
  226. package/dist/compat/object/entries.mjs +1 -0
  227. package/dist/compat/object/entriesIn.d.mts +1 -0
  228. package/dist/compat/object/entriesIn.d.ts +1 -0
  229. package/dist/compat/object/entriesIn.js +1 -0
  230. package/dist/compat/object/entriesIn.mjs +1 -0
  231. package/dist/compat/object/omit.js +5 -5
  232. package/dist/compat/object/omit.mjs +5 -5
  233. package/dist/compat/object/transform.js +1 -1
  234. package/dist/compat/object/transform.mjs +1 -1
  235. package/dist/compat/object/updateWith.js +2 -2
  236. package/dist/compat/object/updateWith.mjs +2 -2
  237. package/dist/compat/predicate/isMatchWith.js +14 -5
  238. package/dist/compat/predicate/isMatchWith.mjs +14 -5
  239. package/dist/compat/string/template.js +2 -1
  240. package/dist/compat/string/template.mjs +2 -1
  241. package/dist/compat/string/words.js +17 -13
  242. package/dist/compat/string/words.mjs +17 -13
  243. package/dist/compat/util/iteratee.js +1 -3
  244. package/dist/compat/util/iteratee.mjs +1 -3
  245. package/dist/compat/util/toArray.d.mts +5 -5
  246. package/dist/compat/util/toArray.d.ts +5 -5
  247. package/dist/compat/util/toArray.js +9 -5
  248. package/dist/compat/util/toArray.mjs +9 -5
  249. package/dist/compat/util/toPath.js +11 -3
  250. package/dist/compat/util/toPath.mjs +11 -3
  251. package/dist/compat/util/toString.js +4 -1
  252. package/dist/compat/util/toString.mjs +4 -1
  253. package/dist/fp/array/at.d.mts +1 -1
  254. package/dist/fp/array/at.d.ts +1 -1
  255. package/dist/fp/array/orderBy.d.mts +1 -1
  256. package/dist/fp/array/orderBy.d.ts +1 -1
  257. package/dist/fp/array/sortBy.d.mts +1 -1
  258. package/dist/fp/array/sortBy.d.ts +1 -1
  259. package/dist/fp/array/unzip.d.mts +3 -0
  260. package/dist/fp/array/unzip.d.ts +3 -0
  261. package/dist/fp/array/unzip.js +3 -0
  262. package/dist/fp/array/unzip.mjs +3 -0
  263. package/dist/fp/iterator/chunk.d.mts +19 -0
  264. package/dist/fp/iterator/chunk.d.ts +19 -0
  265. package/dist/fp/iterator/chunk.js +24 -0
  266. package/dist/fp/iterator/chunk.mjs +24 -0
  267. package/dist/fp/iterator/count.d.mts +20 -0
  268. package/dist/fp/iterator/count.d.ts +20 -0
  269. package/dist/fp/iterator/count.js +25 -0
  270. package/dist/fp/iterator/count.mjs +25 -0
  271. package/dist/fp/iterator/drop.d.mts +20 -0
  272. package/dist/fp/iterator/drop.d.ts +20 -0
  273. package/dist/fp/iterator/drop.js +24 -0
  274. package/dist/fp/iterator/drop.mjs +24 -0
  275. package/dist/fp/iterator/dropWhile.d.mts +18 -0
  276. package/dist/fp/iterator/dropWhile.d.ts +18 -0
  277. package/dist/fp/iterator/dropWhile.js +23 -0
  278. package/dist/fp/iterator/dropWhile.mjs +23 -0
  279. package/dist/fp/iterator/every.d.mts +20 -0
  280. package/dist/fp/iterator/every.d.ts +20 -0
  281. package/dist/fp/iterator/every.js +24 -0
  282. package/dist/fp/iterator/every.mjs +24 -0
  283. package/dist/fp/iterator/filter.d.mts +37 -0
  284. package/dist/fp/iterator/filter.d.ts +37 -0
  285. package/dist/fp/iterator/filter.js +8 -0
  286. package/dist/fp/iterator/filter.mjs +8 -0
  287. package/dist/fp/iterator/find.d.mts +20 -0
  288. package/dist/fp/iterator/find.d.ts +20 -0
  289. package/dist/fp/iterator/find.js +24 -0
  290. package/dist/fp/iterator/find.mjs +24 -0
  291. package/dist/fp/iterator/flatMap.d.mts +20 -0
  292. package/dist/fp/iterator/flatMap.d.ts +20 -0
  293. package/dist/fp/iterator/flatMap.js +24 -0
  294. package/dist/fp/iterator/flatMap.mjs +24 -0
  295. package/dist/fp/iterator/forEach.d.mts +22 -0
  296. package/dist/fp/iterator/forEach.d.ts +22 -0
  297. package/dist/fp/iterator/forEach.js +26 -0
  298. package/dist/fp/iterator/forEach.mjs +26 -0
  299. package/dist/fp/iterator/head.d.mts +19 -0
  300. package/dist/fp/iterator/head.d.ts +19 -0
  301. package/dist/fp/iterator/head.js +24 -0
  302. package/dist/fp/iterator/head.mjs +24 -0
  303. package/dist/fp/iterator/index.d.mts +21 -0
  304. package/dist/fp/iterator/index.d.ts +21 -0
  305. package/dist/fp/iterator/index.js +41 -0
  306. package/dist/fp/iterator/index.mjs +21 -0
  307. package/dist/fp/iterator/map.d.mts +20 -0
  308. package/dist/fp/iterator/map.d.ts +20 -0
  309. package/dist/fp/iterator/map.js +24 -0
  310. package/dist/fp/iterator/map.mjs +24 -0
  311. package/dist/fp/iterator/partition.d.mts +22 -0
  312. package/dist/fp/iterator/partition.d.ts +22 -0
  313. package/dist/fp/iterator/partition.js +27 -0
  314. package/dist/fp/iterator/partition.mjs +27 -0
  315. package/dist/fp/iterator/reduce.d.mts +24 -0
  316. package/dist/fp/iterator/reduce.d.ts +24 -0
  317. package/dist/fp/iterator/reduce.js +28 -0
  318. package/dist/fp/iterator/reduce.mjs +28 -0
  319. package/dist/fp/iterator/scan.d.mts +21 -0
  320. package/dist/fp/iterator/scan.d.ts +21 -0
  321. package/dist/fp/iterator/scan.js +26 -0
  322. package/dist/fp/iterator/scan.mjs +26 -0
  323. package/dist/fp/iterator/some.d.mts +20 -0
  324. package/dist/fp/iterator/some.d.ts +20 -0
  325. package/dist/fp/iterator/some.js +24 -0
  326. package/dist/fp/iterator/some.mjs +24 -0
  327. package/dist/fp/iterator/take.d.mts +21 -0
  328. package/dist/fp/iterator/take.d.ts +21 -0
  329. package/dist/fp/iterator/take.js +25 -0
  330. package/dist/fp/iterator/take.mjs +25 -0
  331. package/dist/fp/iterator/takeWhile.d.mts +19 -0
  332. package/dist/fp/iterator/takeWhile.d.ts +19 -0
  333. package/dist/fp/iterator/takeWhile.js +24 -0
  334. package/dist/fp/iterator/takeWhile.mjs +24 -0
  335. package/dist/fp/iterator/toArray.d.mts +21 -0
  336. package/dist/fp/iterator/toArray.d.ts +21 -0
  337. package/dist/fp/iterator/toArray.js +25 -0
  338. package/dist/fp/iterator/toArray.mjs +25 -0
  339. package/dist/fp/iterator/uniqBy.d.mts +20 -0
  340. package/dist/fp/iterator/uniqBy.d.ts +20 -0
  341. package/dist/fp/iterator/uniqBy.js +25 -0
  342. package/dist/fp/iterator/uniqBy.mjs +25 -0
  343. package/dist/fp/iterator/zip.d.mts +20 -0
  344. package/dist/fp/iterator/zip.d.ts +20 -0
  345. package/dist/fp/iterator/zip.js +25 -0
  346. package/dist/fp/iterator/zip.mjs +25 -0
  347. package/dist/function/memoize.d.mts +3 -2
  348. package/dist/function/memoize.d.ts +3 -2
  349. package/dist/function/memoize.js +3 -2
  350. package/dist/function/memoize.mjs +3 -2
  351. package/dist/function/partial.d.mts +2 -2
  352. package/dist/function/partial.d.ts +2 -2
  353. package/dist/function/partialRight.d.mts +5 -5
  354. package/dist/function/partialRight.d.ts +5 -5
  355. package/dist/function/rest.d.mts +1 -1
  356. package/dist/function/rest.d.ts +1 -1
  357. package/dist/function/rest.js +1 -1
  358. package/dist/function/rest.mjs +1 -1
  359. package/dist/function/retry.d.mts +7 -4
  360. package/dist/function/retry.d.ts +7 -4
  361. package/dist/function/retry.js +4 -2
  362. package/dist/function/retry.mjs +1 -1
  363. package/dist/index.d.mts +9 -2
  364. package/dist/index.d.ts +9 -2
  365. package/dist/index.js +18 -4
  366. package/dist/index.mjs +12 -5
  367. package/dist/iterator/_internal/iterator.js +74 -0
  368. package/dist/iterator/_internal/iterator.mjs +74 -0
  369. package/dist/iterator/chunk.d.mts +21 -0
  370. package/dist/iterator/chunk.d.ts +21 -0
  371. package/dist/iterator/chunk.js +40 -0
  372. package/dist/iterator/chunk.mjs +40 -0
  373. package/dist/iterator/count.d.mts +18 -0
  374. package/dist/iterator/count.d.ts +18 -0
  375. package/dist/iterator/count.js +26 -0
  376. package/dist/iterator/count.mjs +26 -0
  377. package/dist/iterator/dropWhile.d.mts +20 -0
  378. package/dist/iterator/dropWhile.d.ts +20 -0
  379. package/dist/iterator/dropWhile.js +52 -0
  380. package/dist/iterator/dropWhile.mjs +52 -0
  381. package/dist/iterator/head.d.mts +21 -0
  382. package/dist/iterator/head.d.ts +21 -0
  383. package/dist/iterator/head.js +26 -0
  384. package/dist/iterator/head.mjs +26 -0
  385. package/dist/iterator/index.d.mts +12 -0
  386. package/dist/iterator/index.d.ts +12 -0
  387. package/dist/iterator/index.js +23 -0
  388. package/dist/iterator/index.mjs +12 -0
  389. package/dist/iterator/iterate.d.mts +20 -0
  390. package/dist/iterator/iterate.d.ts +20 -0
  391. package/dist/iterator/iterate.js +32 -0
  392. package/dist/iterator/iterate.mjs +32 -0
  393. package/dist/iterator/partition.d.mts +18 -0
  394. package/dist/iterator/partition.d.ts +18 -0
  395. package/dist/iterator/partition.js +36 -0
  396. package/dist/iterator/partition.mjs +36 -0
  397. package/dist/iterator/range.d.mts +42 -0
  398. package/dist/iterator/range.d.ts +42 -0
  399. package/dist/iterator/range.js +25 -0
  400. package/dist/iterator/range.mjs +25 -0
  401. package/dist/iterator/scan.d.mts +23 -0
  402. package/dist/iterator/scan.d.ts +23 -0
  403. package/dist/iterator/scan.js +47 -0
  404. package/dist/iterator/scan.mjs +47 -0
  405. package/dist/iterator/takeWhile.d.mts +20 -0
  406. package/dist/iterator/takeWhile.d.ts +20 -0
  407. package/dist/iterator/takeWhile.js +34 -0
  408. package/dist/iterator/takeWhile.mjs +34 -0
  409. package/dist/iterator/uniqBy.d.mts +22 -0
  410. package/dist/iterator/uniqBy.d.ts +22 -0
  411. package/dist/iterator/uniqBy.js +43 -0
  412. package/dist/iterator/uniqBy.mjs +43 -0
  413. package/dist/iterator/zip.d.mts +23 -0
  414. package/dist/iterator/zip.d.ts +23 -0
  415. package/dist/iterator/zip.js +45 -0
  416. package/dist/iterator/zip.mjs +45 -0
  417. package/dist/object/cloneDeepWith.d.mts +3 -1
  418. package/dist/object/cloneDeepWith.d.ts +3 -1
  419. package/dist/object/cloneDeepWith.js +3 -1
  420. package/dist/object/cloneDeepWith.mjs +3 -1
  421. package/dist/object/deepFreeze.d.mts +20 -0
  422. package/dist/object/deepFreeze.d.ts +20 -0
  423. package/dist/object/deepFreeze.js +29 -0
  424. package/dist/object/deepFreeze.mjs +29 -0
  425. package/dist/object/flattenObject.d.mts +16 -1
  426. package/dist/object/flattenObject.d.ts +16 -1
  427. package/dist/object/flattenObject.js +15 -6
  428. package/dist/object/flattenObject.mjs +15 -6
  429. package/dist/object/index.d.mts +7 -1
  430. package/dist/object/index.d.ts +7 -1
  431. package/dist/object/index.js +12 -0
  432. package/dist/object/index.mjs +7 -1
  433. package/dist/object/mapKeysAsync.d.mts +25 -0
  434. package/dist/object/mapKeysAsync.d.ts +25 -0
  435. package/dist/object/mapKeysAsync.js +32 -0
  436. package/dist/object/mapKeysAsync.mjs +32 -0
  437. package/dist/object/mapValuesAsync.d.mts +26 -0
  438. package/dist/object/mapValuesAsync.d.ts +26 -0
  439. package/dist/object/mapValuesAsync.js +32 -0
  440. package/dist/object/mapValuesAsync.mjs +32 -0
  441. package/dist/object/merge.js +2 -4
  442. package/dist/object/merge.mjs +1 -3
  443. package/dist/object/mergeWith.js +4 -4
  444. package/dist/object/mergeWith.mjs +4 -4
  445. package/dist/object/toCamelCaseKeys.d.mts +2 -6
  446. package/dist/object/toCamelCaseKeys.d.ts +2 -6
  447. package/dist/object/toConstantCaseKeys.d.mts +52 -0
  448. package/dist/object/toConstantCaseKeys.d.ts +52 -0
  449. package/dist/object/toConstantCaseKeys.js +66 -0
  450. package/dist/object/toConstantCaseKeys.mjs +66 -0
  451. package/dist/object/toKebabCaseKeys.d.mts +52 -0
  452. package/dist/object/toKebabCaseKeys.d.ts +52 -0
  453. package/dist/object/toKebabCaseKeys.js +66 -0
  454. package/dist/object/toKebabCaseKeys.mjs +66 -0
  455. package/dist/object/toMerged.js +4 -4
  456. package/dist/object/toMerged.mjs +4 -4
  457. package/dist/object/toPascalCaseKeys.d.mts +52 -0
  458. package/dist/object/toPascalCaseKeys.d.ts +52 -0
  459. package/dist/object/toPascalCaseKeys.js +66 -0
  460. package/dist/object/toPascalCaseKeys.mjs +66 -0
  461. package/dist/object/toSnakeCaseKeys.d.mts +2 -3
  462. package/dist/object/toSnakeCaseKeys.d.ts +2 -3
  463. package/dist/promise/index.d.mts +2 -1
  464. package/dist/promise/index.d.ts +2 -1
  465. package/dist/promise/index.js +2 -0
  466. package/dist/promise/index.mjs +2 -1
  467. package/dist/promise/limitAsync.d.mts +35 -0
  468. package/dist/promise/limitAsync.d.ts +35 -0
  469. package/dist/promise/limitAsync.js +46 -0
  470. package/dist/promise/limitAsync.mjs +46 -0
  471. package/dist/string/dedent.d.mts +37 -0
  472. package/dist/string/dedent.d.ts +37 -0
  473. package/dist/string/dedent.js +38 -0
  474. package/dist/string/dedent.mjs +38 -0
  475. package/dist/string/index.d.mts +2 -1
  476. package/dist/string/index.d.ts +2 -1
  477. package/dist/string/index.js +5 -3
  478. package/dist/string/index.mjs +5 -4
  479. package/dist/types/ToCamelCaseKeys.d.mts +24 -0
  480. package/dist/types/ToCamelCaseKeys.d.ts +24 -0
  481. package/dist/types/ToConstantCaseKeys.d.mts +21 -0
  482. package/dist/types/ToConstantCaseKeys.d.ts +21 -0
  483. package/dist/types/ToKebabCaseKeys.d.mts +23 -0
  484. package/dist/types/ToKebabCaseKeys.d.ts +23 -0
  485. package/dist/types/ToPascalCaseKeys.d.mts +24 -0
  486. package/dist/types/ToPascalCaseKeys.d.ts +24 -0
  487. package/dist/types/ToSnakeCaseKeys.d.mts +21 -0
  488. package/dist/types/ToSnakeCaseKeys.d.ts +21 -0
  489. package/dist/types/index.d.mts +6 -1
  490. package/dist/types/index.d.ts +6 -1
  491. package/fp/iterator.d.ts +1 -0
  492. package/fp/iterator.js +1 -0
  493. package/iterator.d.ts +1 -0
  494. package/iterator.js +1 -0
  495. package/package.json +70 -2
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ import { dropRightWhile } from "./array/dropRightWhile.mjs";
14
14
  import { dropWhile } from "./array/dropWhile.mjs";
15
15
  import { fill } from "./array/fill.mjs";
16
16
  import { Semaphore } from "./promise/semaphore.mjs";
17
- import { limitAsync } from "./array/limitAsync.mjs";
17
+ import { limitAsync } from "./promise/limitAsync.mjs";
18
18
  import { filterAsync } from "./array/filterAsync.mjs";
19
19
  import { flatten } from "./array/flatten.mjs";
20
20
  import { flatMap } from "./array/flatMap.mjs";
@@ -116,12 +116,15 @@ import { clone } from "./object/clone.mjs";
116
116
  import { isBuffer } from "./predicate/isBuffer.mjs";
117
117
  import { cloneDeepWith } from "./object/cloneDeepWith.mjs";
118
118
  import { cloneDeep } from "./object/cloneDeep.mjs";
119
+ import { deepFreeze } from "./object/deepFreeze.mjs";
119
120
  import { findKey } from "./object/findKey.mjs";
120
121
  import { isPlainObject } from "./predicate/isPlainObject.mjs";
121
122
  import { flattenObject } from "./object/flattenObject.mjs";
122
123
  import { invert } from "./object/invert.mjs";
123
124
  import { mapKeys } from "./object/mapKeys.mjs";
125
+ import { mapKeysAsync } from "./object/mapKeysAsync.mjs";
124
126
  import { mapValues } from "./object/mapValues.mjs";
127
+ import { mapValuesAsync } from "./object/mapValuesAsync.mjs";
125
128
  import { merge } from "./object/merge.mjs";
126
129
  import { mergeWith } from "./object/mergeWith.mjs";
127
130
  import { omit } from "./object/omit.mjs";
@@ -133,7 +136,13 @@ import { capitalize } from "./string/capitalize.mjs";
133
136
  import { words } from "./string/words.mjs";
134
137
  import { camelCase } from "./string/camelCase.mjs";
135
138
  import { toCamelCaseKeys } from "./object/toCamelCaseKeys.mjs";
139
+ import { constantCase } from "./string/constantCase.mjs";
140
+ import { toConstantCaseKeys } from "./object/toConstantCaseKeys.mjs";
141
+ import { kebabCase } from "./string/kebabCase.mjs";
142
+ import { toKebabCaseKeys } from "./object/toKebabCaseKeys.mjs";
136
143
  import { toMerged } from "./object/toMerged.mjs";
144
+ import { pascalCase } from "./string/pascalCase.mjs";
145
+ import { toPascalCaseKeys } from "./object/toPascalCaseKeys.mjs";
137
146
  import { snakeCase } from "./string/snakeCase.mjs";
138
147
  import { toSnakeCaseKeys } from "./object/toSnakeCaseKeys.mjs";
139
148
  import "./object/index.mjs";
@@ -172,15 +181,13 @@ import { Mutex } from "./promise/mutex.mjs";
172
181
  import { timeout } from "./promise/timeout.mjs";
173
182
  import { withTimeout } from "./promise/withTimeout.mjs";
174
183
  import "./promise/index.mjs";
175
- import { constantCase } from "./string/constantCase.mjs";
176
184
  import { deburr } from "./string/deburr.mjs";
185
+ import { dedent } from "./string/dedent.mjs";
177
186
  import { escape } from "./string/escape.mjs";
178
187
  import { escapeRegExp } from "./string/escapeRegExp.mjs";
179
- import { kebabCase } from "./string/kebabCase.mjs";
180
188
  import { lowerCase } from "./string/lowerCase.mjs";
181
189
  import { lowerFirst } from "./string/lowerFirst.mjs";
182
190
  import { pad } from "./string/pad.mjs";
183
- import { pascalCase } from "./string/pascalCase.mjs";
184
191
  import { reverseString } from "./string/reverseString.mjs";
185
192
  import { startCase } from "./string/startCase.mjs";
186
193
  import { trimEnd } from "./string/trimEnd.mjs";
@@ -194,4 +201,4 @@ import { attempt } from "./util/attempt.mjs";
194
201
  import { attemptAsync } from "./util/attemptAsync.mjs";
195
202
  import { invariant } from "./util/invariant.mjs";
196
203
  import "./util/index.mjs";
197
- export { AbortError, Mutex, Semaphore, TimeoutError, after, allKeyed, ary, invariant as assert, asyncNoop, at, attempt, attemptAsync, before, camelCase, capitalize, cartesianProduct, chunk, chunkBy, clamp, clone, cloneDeep, cloneDeepWith, combinations, compact, constantCase, countBy, curry, curryRight, debounce, deburr, delay, difference, differenceBy, differenceWith, drop, dropRight, dropRightWhile, dropWhile, escape, escapeRegExp, fill, filterAsync, findKey, flatMap, flatMapAsync, flatMapDeep, flatten, flattenDeep, flattenObject, flow, flowRight, forEachAsync, forEachRight, groupBy, head, identity, inRange, initial, intersection, intersectionBy, intersectionWith, invariant, invert, isArrayBuffer, isBlob, isBoolean, isBrowser, isBuffer, isDate, isEmptyObject, isEqual, isEqualWith, isError, isFile, isFunction, isIterable, isJSON, isJSONArray, isJSONObject, isJSONValue, isLength, isMap, isNil, isNode, isNotNil, isNull, isNumber, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSubset, isSubsetWith, isSymbol, isTypedArray, isUndefined, isWeakMap, isWeakSet, kebabCase, keyBy, last, limitAsync, lowerCase, lowerFirst, mapAsync, mapKeys, mapValues, maxBy, mean, meanBy, median, medianBy, memoize, merge, mergeWith, minBy, negate, noop, omit, omitBy, once, orderBy, pad, partial, partialRight, partition, pascalCase, percentile, pick, pickBy, pull, pullAt, random, randomInt, range, rangeRight, reduceAsync, remove, rest, retry, reverseString, round, sample, sampleSize, shuffle, snakeCase, sortBy, sortKeys, spread, startCase, sum, sumBy, tail, take, takeRight, takeRightWhile, takeWhile, throttle, timeout, toCamelCaseKeys, toFilled, toMerged, toSnakeCaseKeys, trim, trimEnd, trimStart, unary, unescape, union, unionBy, unionWith, uniq, uniqBy, uniqWith, unzip, unzipWith, upperCase, upperFirst, windowed, withTimeout, without, words, xor, xorBy, xorWith, zip, zipObject, zipWith };
204
+ export { AbortError, Mutex, Semaphore, TimeoutError, after, allKeyed, ary, invariant as assert, asyncNoop, at, attempt, attemptAsync, before, camelCase, capitalize, cartesianProduct, chunk, chunkBy, clamp, clone, cloneDeep, cloneDeepWith, combinations, compact, constantCase, countBy, curry, curryRight, debounce, deburr, dedent, deepFreeze, delay, difference, differenceBy, differenceWith, drop, dropRight, dropRightWhile, dropWhile, escape, escapeRegExp, fill, filterAsync, findKey, flatMap, flatMapAsync, flatMapDeep, flatten, flattenDeep, flattenObject, flow, flowRight, forEachAsync, forEachRight, groupBy, head, identity, inRange, initial, intersection, intersectionBy, intersectionWith, invariant, invert, isArrayBuffer, isBlob, isBoolean, isBrowser, isBuffer, isDate, isEmptyObject, isEqual, isEqualWith, isError, isFile, isFunction, isIterable, isJSON, isJSONArray, isJSONObject, isJSONValue, isLength, isMap, isNil, isNode, isNotNil, isNull, isNumber, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSubset, isSubsetWith, isSymbol, isTypedArray, isUndefined, isWeakMap, isWeakSet, kebabCase, keyBy, last, limitAsync, lowerCase, lowerFirst, mapAsync, mapKeys, mapKeysAsync, mapValues, mapValuesAsync, maxBy, mean, meanBy, median, medianBy, memoize, merge, mergeWith, minBy, negate, noop, omit, omitBy, once, orderBy, pad, partial, partialRight, partition, pascalCase, percentile, pick, pickBy, pull, pullAt, random, randomInt, range, rangeRight, reduceAsync, remove, rest, retry, reverseString, round, sample, sampleSize, shuffle, snakeCase, sortBy, sortKeys, spread, startCase, sum, sumBy, tail, take, takeRight, takeRightWhile, takeWhile, throttle, timeout, toCamelCaseKeys, toConstantCaseKeys, toFilled, toKebabCaseKeys, toMerged, toPascalCaseKeys, toSnakeCaseKeys, trim, trimEnd, trimStart, unary, unescape, union, unionBy, unionWith, uniq, uniqBy, uniqWith, unzip, unzipWith, upperCase, upperFirst, windowed, withTimeout, without, words, xor, xorBy, xorWith, zip, zipObject, zipWith };
@@ -0,0 +1,74 @@
1
+ //#region src/iterator/_internal/iterator.ts
2
+ /**
3
+ * Wraps a `next` function into a lazy {@link IteratorObject} whose prototype is
4
+ * the native `Iterator.prototype`. The result therefore behaves exactly like a
5
+ * value returned by a built-in iterator helper (e.g. `array.values().map(...)`):
6
+ * it is single-shot, it is iterable via `Symbol.iterator` (returning itself),
7
+ * and it carries every native helper method (`map`, `filter`, `take`, `drop`,
8
+ * `flatMap`, `reduce`, `toArray`, ...) so results can be chained with them.
9
+ *
10
+ * The result also follows the IteratorClose protocol of the native helpers, so
11
+ * upstream resources (e.g. `try/finally` blocks in generator sources) are
12
+ * released. `onClose` runs exactly once, at whichever of these happens first:
13
+ * the consumer terminates early (`return()`, e.g. from `take` or a `for...of`
14
+ * `break`), `next` throws, or `next` reports done. After the iterator is
15
+ * closed, `next` is never called again and every subsequent step is done.
16
+ *
17
+ * Using a hand-rolled `next` rather than a generator function is a deliberate
18
+ * performance choice — driving the iterator protocol directly measured roughly
19
+ * twice as fast as `yield`-based generators for the same transforms, while
20
+ * `Object.create(Iterator.prototype)` adds no measurable overhead over a plain
21
+ * object literal.
22
+ *
23
+ * @template T - The type of values produced by the iterator.
24
+ * @param next - Called to produce each step; return `{ done: true, value: undefined }` to finish.
25
+ * @param onClose - Called once when the iterator closes; use it to close upstream iterators.
26
+ * @returns A lazy {@link IteratorObject} that yields the values produced by `next`.
27
+ *
28
+ * @example
29
+ * function repeat<T>(value: T, times: number): IteratorObject<T, undefined> {
30
+ * let remaining = times;
31
+ * return iterator(function () {
32
+ * if (remaining <= 0) {
33
+ * return { value: undefined, done: true };
34
+ * }
35
+ * remaining--;
36
+ * return { value, done: false };
37
+ * });
38
+ * }
39
+ */
40
+ function iterator(next, onClose) {
41
+ let closed = false;
42
+ const close = () => {
43
+ if (!closed) {
44
+ closed = true;
45
+ onClose?.();
46
+ }
47
+ };
48
+ const result = Object.create(Iterator.prototype);
49
+ result.next = function() {
50
+ if (closed) return {
51
+ value: void 0,
52
+ done: true
53
+ };
54
+ let step;
55
+ try {
56
+ step = next();
57
+ } catch (error) {
58
+ close();
59
+ throw error;
60
+ }
61
+ if (step.done) close();
62
+ return step;
63
+ };
64
+ result.return = function() {
65
+ close();
66
+ return {
67
+ value: void 0,
68
+ done: true
69
+ };
70
+ };
71
+ return result;
72
+ }
73
+ //#endregion
74
+ exports.iterator = iterator;
@@ -0,0 +1,74 @@
1
+ //#region src/iterator/_internal/iterator.ts
2
+ /**
3
+ * Wraps a `next` function into a lazy {@link IteratorObject} whose prototype is
4
+ * the native `Iterator.prototype`. The result therefore behaves exactly like a
5
+ * value returned by a built-in iterator helper (e.g. `array.values().map(...)`):
6
+ * it is single-shot, it is iterable via `Symbol.iterator` (returning itself),
7
+ * and it carries every native helper method (`map`, `filter`, `take`, `drop`,
8
+ * `flatMap`, `reduce`, `toArray`, ...) so results can be chained with them.
9
+ *
10
+ * The result also follows the IteratorClose protocol of the native helpers, so
11
+ * upstream resources (e.g. `try/finally` blocks in generator sources) are
12
+ * released. `onClose` runs exactly once, at whichever of these happens first:
13
+ * the consumer terminates early (`return()`, e.g. from `take` or a `for...of`
14
+ * `break`), `next` throws, or `next` reports done. After the iterator is
15
+ * closed, `next` is never called again and every subsequent step is done.
16
+ *
17
+ * Using a hand-rolled `next` rather than a generator function is a deliberate
18
+ * performance choice — driving the iterator protocol directly measured roughly
19
+ * twice as fast as `yield`-based generators for the same transforms, while
20
+ * `Object.create(Iterator.prototype)` adds no measurable overhead over a plain
21
+ * object literal.
22
+ *
23
+ * @template T - The type of values produced by the iterator.
24
+ * @param next - Called to produce each step; return `{ done: true, value: undefined }` to finish.
25
+ * @param onClose - Called once when the iterator closes; use it to close upstream iterators.
26
+ * @returns A lazy {@link IteratorObject} that yields the values produced by `next`.
27
+ *
28
+ * @example
29
+ * function repeat<T>(value: T, times: number): IteratorObject<T, undefined> {
30
+ * let remaining = times;
31
+ * return iterator(function () {
32
+ * if (remaining <= 0) {
33
+ * return { value: undefined, done: true };
34
+ * }
35
+ * remaining--;
36
+ * return { value, done: false };
37
+ * });
38
+ * }
39
+ */
40
+ function iterator(next, onClose) {
41
+ let closed = false;
42
+ const close = () => {
43
+ if (!closed) {
44
+ closed = true;
45
+ onClose?.();
46
+ }
47
+ };
48
+ const result = Object.create(Iterator.prototype);
49
+ result.next = function() {
50
+ if (closed) return {
51
+ value: void 0,
52
+ done: true
53
+ };
54
+ let step;
55
+ try {
56
+ step = next();
57
+ } catch (error) {
58
+ close();
59
+ throw error;
60
+ }
61
+ if (step.done) close();
62
+ return step;
63
+ };
64
+ result.return = function() {
65
+ close();
66
+ return {
67
+ value: void 0,
68
+ done: true
69
+ };
70
+ };
71
+ return result;
72
+ }
73
+ //#endregion
74
+ export { iterator };
@@ -0,0 +1,21 @@
1
+ //#region src/iterator/chunk.d.ts
2
+ /**
3
+ * Lazily groups the elements of `source` into arrays of length `size`. The final
4
+ * chunk holds the remaining elements when the source length is not an exact
5
+ * multiple of `size`, so it may be shorter.
6
+ *
7
+ * Each chunk is produced only when requested, so this works with infinite
8
+ * iterators when bounded by a short-circuiting helper.
9
+ *
10
+ * @template T - The type of elements produced by the iterator.
11
+ * @param source - The iterator to split into chunks.
12
+ * @param size - The length of each chunk; must be an integer greater than zero.
13
+ * @returns A lazy iterator over arrays of up to `size` elements.
14
+ * @throws {Error} Throws an error if `size` is not an integer greater than zero.
15
+ *
16
+ * @example
17
+ * chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
18
+ */
19
+ declare function chunk<T>(source: Iterator<T>, size: number): IteratorObject<T[], undefined>;
20
+ //#endregion
21
+ export { chunk };
@@ -0,0 +1,21 @@
1
+ //#region src/iterator/chunk.d.ts
2
+ /**
3
+ * Lazily groups the elements of `source` into arrays of length `size`. The final
4
+ * chunk holds the remaining elements when the source length is not an exact
5
+ * multiple of `size`, so it may be shorter.
6
+ *
7
+ * Each chunk is produced only when requested, so this works with infinite
8
+ * iterators when bounded by a short-circuiting helper.
9
+ *
10
+ * @template T - The type of elements produced by the iterator.
11
+ * @param source - The iterator to split into chunks.
12
+ * @param size - The length of each chunk; must be an integer greater than zero.
13
+ * @returns A lazy iterator over arrays of up to `size` elements.
14
+ * @throws {Error} Throws an error if `size` is not an integer greater than zero.
15
+ *
16
+ * @example
17
+ * chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
18
+ */
19
+ declare function chunk<T>(source: Iterator<T>, size: number): IteratorObject<T[], undefined>;
20
+ //#endregion
21
+ export { chunk };
@@ -0,0 +1,40 @@
1
+ const require_iterator = require("./_internal/iterator.js");
2
+ //#region src/iterator/chunk.ts
3
+ /**
4
+ * Lazily groups the elements of `source` into arrays of length `size`. The final
5
+ * chunk holds the remaining elements when the source length is not an exact
6
+ * multiple of `size`, so it may be shorter.
7
+ *
8
+ * Each chunk is produced only when requested, so this works with infinite
9
+ * iterators when bounded by a short-circuiting helper.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to split into chunks.
13
+ * @param size - The length of each chunk; must be an integer greater than zero.
14
+ * @returns A lazy iterator over arrays of up to `size` elements.
15
+ * @throws {Error} Throws an error if `size` is not an integer greater than zero.
16
+ *
17
+ * @example
18
+ * chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
19
+ */
20
+ function chunk(source, size) {
21
+ if (!Number.isInteger(size) || size <= 0) throw new Error("Size must be an integer greater than zero.");
22
+ return require_iterator.iterator(function() {
23
+ const buffer = [];
24
+ while (buffer.length < size) {
25
+ const result = source.next();
26
+ if (result.done) break;
27
+ buffer.push(result.value);
28
+ }
29
+ if (buffer.length === 0) return {
30
+ value: void 0,
31
+ done: true
32
+ };
33
+ return {
34
+ value: buffer,
35
+ done: false
36
+ };
37
+ }, () => void source.return?.());
38
+ }
39
+ //#endregion
40
+ exports.chunk = chunk;
@@ -0,0 +1,40 @@
1
+ import { iterator } from "./_internal/iterator.mjs";
2
+ //#region src/iterator/chunk.ts
3
+ /**
4
+ * Lazily groups the elements of `source` into arrays of length `size`. The final
5
+ * chunk holds the remaining elements when the source length is not an exact
6
+ * multiple of `size`, so it may be shorter.
7
+ *
8
+ * Each chunk is produced only when requested, so this works with infinite
9
+ * iterators when bounded by a short-circuiting helper.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to split into chunks.
13
+ * @param size - The length of each chunk; must be an integer greater than zero.
14
+ * @returns A lazy iterator over arrays of up to `size` elements.
15
+ * @throws {Error} Throws an error if `size` is not an integer greater than zero.
16
+ *
17
+ * @example
18
+ * chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
19
+ */
20
+ function chunk(source, size) {
21
+ if (!Number.isInteger(size) || size <= 0) throw new Error("Size must be an integer greater than zero.");
22
+ return iterator(function() {
23
+ const buffer = [];
24
+ while (buffer.length < size) {
25
+ const result = source.next();
26
+ if (result.done) break;
27
+ buffer.push(result.value);
28
+ }
29
+ if (buffer.length === 0) return {
30
+ value: void 0,
31
+ done: true
32
+ };
33
+ return {
34
+ value: buffer,
35
+ done: false
36
+ };
37
+ }, () => void source.return?.());
38
+ }
39
+ //#endregion
40
+ export { chunk };
@@ -0,0 +1,18 @@
1
+ //#region src/iterator/count.d.ts
2
+ /**
3
+ * Consumes `source` and returns the number of elements it produces. This is a
4
+ * terminal operation: it pulls every element, so it must not be used on an
5
+ * infinite iterator.
6
+ *
7
+ * Unlike `source.toArray().length`, this counts without allocating an array.
8
+ *
9
+ * @template T - The type of elements produced by the iterator.
10
+ * @param source - The iterator to count.
11
+ * @returns The number of elements produced by `source`.
12
+ *
13
+ * @example
14
+ * count([1, 2, 3].values()); // => 3
15
+ */
16
+ declare function count<T>(source: Iterator<T>): number;
17
+ //#endregion
18
+ export { count };
@@ -0,0 +1,18 @@
1
+ //#region src/iterator/count.d.ts
2
+ /**
3
+ * Consumes `source` and returns the number of elements it produces. This is a
4
+ * terminal operation: it pulls every element, so it must not be used on an
5
+ * infinite iterator.
6
+ *
7
+ * Unlike `source.toArray().length`, this counts without allocating an array.
8
+ *
9
+ * @template T - The type of elements produced by the iterator.
10
+ * @param source - The iterator to count.
11
+ * @returns The number of elements produced by `source`.
12
+ *
13
+ * @example
14
+ * count([1, 2, 3].values()); // => 3
15
+ */
16
+ declare function count<T>(source: Iterator<T>): number;
17
+ //#endregion
18
+ export { count };
@@ -0,0 +1,26 @@
1
+ //#region src/iterator/count.ts
2
+ /**
3
+ * Consumes `source` and returns the number of elements it produces. This is a
4
+ * terminal operation: it pulls every element, so it must not be used on an
5
+ * infinite iterator.
6
+ *
7
+ * Unlike `source.toArray().length`, this counts without allocating an array.
8
+ *
9
+ * @template T - The type of elements produced by the iterator.
10
+ * @param source - The iterator to count.
11
+ * @returns The number of elements produced by `source`.
12
+ *
13
+ * @example
14
+ * count([1, 2, 3].values()); // => 3
15
+ */
16
+ function count(source) {
17
+ let total = 0;
18
+ let next = source.next();
19
+ while (!next.done) {
20
+ total++;
21
+ next = source.next();
22
+ }
23
+ return total;
24
+ }
25
+ //#endregion
26
+ exports.count = count;
@@ -0,0 +1,26 @@
1
+ //#region src/iterator/count.ts
2
+ /**
3
+ * Consumes `source` and returns the number of elements it produces. This is a
4
+ * terminal operation: it pulls every element, so it must not be used on an
5
+ * infinite iterator.
6
+ *
7
+ * Unlike `source.toArray().length`, this counts without allocating an array.
8
+ *
9
+ * @template T - The type of elements produced by the iterator.
10
+ * @param source - The iterator to count.
11
+ * @returns The number of elements produced by `source`.
12
+ *
13
+ * @example
14
+ * count([1, 2, 3].values()); // => 3
15
+ */
16
+ function count(source) {
17
+ let total = 0;
18
+ let next = source.next();
19
+ while (!next.done) {
20
+ total++;
21
+ next = source.next();
22
+ }
23
+ return total;
24
+ }
25
+ //#endregion
26
+ export { count };
@@ -0,0 +1,20 @@
1
+ //#region src/iterator/dropWhile.d.ts
2
+ /**
3
+ * Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
4
+ * value, then yields every remaining element (including the one that first
5
+ * failed the predicate).
6
+ *
7
+ * The native iterator helpers offer `drop` (by count) but not a predicate-based
8
+ * `dropWhile`, which is why this is provided.
9
+ *
10
+ * @template T - The type of elements produced by the iterator.
11
+ * @param source - The iterator to drop elements from.
12
+ * @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
13
+ * @returns A lazy iterator over the elements after the dropped leading run.
14
+ *
15
+ * @example
16
+ * dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
17
+ */
18
+ declare function dropWhile<T>(source: Iterator<T>, shouldDrop: (value: T, index: number) => boolean): IteratorObject<T, undefined>;
19
+ //#endregion
20
+ export { dropWhile };
@@ -0,0 +1,20 @@
1
+ //#region src/iterator/dropWhile.d.ts
2
+ /**
3
+ * Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
4
+ * value, then yields every remaining element (including the one that first
5
+ * failed the predicate).
6
+ *
7
+ * The native iterator helpers offer `drop` (by count) but not a predicate-based
8
+ * `dropWhile`, which is why this is provided.
9
+ *
10
+ * @template T - The type of elements produced by the iterator.
11
+ * @param source - The iterator to drop elements from.
12
+ * @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
13
+ * @returns A lazy iterator over the elements after the dropped leading run.
14
+ *
15
+ * @example
16
+ * dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
17
+ */
18
+ declare function dropWhile<T>(source: Iterator<T>, shouldDrop: (value: T, index: number) => boolean): IteratorObject<T, undefined>;
19
+ //#endregion
20
+ export { dropWhile };
@@ -0,0 +1,52 @@
1
+ const require_iterator = require("./_internal/iterator.js");
2
+ //#region src/iterator/dropWhile.ts
3
+ /**
4
+ * Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
5
+ * value, then yields every remaining element (including the one that first
6
+ * failed the predicate).
7
+ *
8
+ * The native iterator helpers offer `drop` (by count) but not a predicate-based
9
+ * `dropWhile`, which is why this is provided.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to drop elements from.
13
+ * @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
14
+ * @returns A lazy iterator over the elements after the dropped leading run.
15
+ *
16
+ * @example
17
+ * dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
18
+ */
19
+ function dropWhile(source, shouldDrop) {
20
+ let index = 0;
21
+ let dropping = true;
22
+ return require_iterator.iterator(function() {
23
+ while (dropping) {
24
+ const result = source.next();
25
+ if (result.done) {
26
+ dropping = false;
27
+ return {
28
+ value: void 0,
29
+ done: true
30
+ };
31
+ }
32
+ if (!shouldDrop(result.value, index++)) {
33
+ dropping = false;
34
+ return {
35
+ value: result.value,
36
+ done: false
37
+ };
38
+ }
39
+ }
40
+ const result = source.next();
41
+ if (result.done) return {
42
+ value: void 0,
43
+ done: true
44
+ };
45
+ return {
46
+ value: result.value,
47
+ done: false
48
+ };
49
+ }, () => void source.return?.());
50
+ }
51
+ //#endregion
52
+ exports.dropWhile = dropWhile;
@@ -0,0 +1,52 @@
1
+ import { iterator } from "./_internal/iterator.mjs";
2
+ //#region src/iterator/dropWhile.ts
3
+ /**
4
+ * Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
5
+ * value, then yields every remaining element (including the one that first
6
+ * failed the predicate).
7
+ *
8
+ * The native iterator helpers offer `drop` (by count) but not a predicate-based
9
+ * `dropWhile`, which is why this is provided.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to drop elements from.
13
+ * @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
14
+ * @returns A lazy iterator over the elements after the dropped leading run.
15
+ *
16
+ * @example
17
+ * dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
18
+ */
19
+ function dropWhile(source, shouldDrop) {
20
+ let index = 0;
21
+ let dropping = true;
22
+ return iterator(function() {
23
+ while (dropping) {
24
+ const result = source.next();
25
+ if (result.done) {
26
+ dropping = false;
27
+ return {
28
+ value: void 0,
29
+ done: true
30
+ };
31
+ }
32
+ if (!shouldDrop(result.value, index++)) {
33
+ dropping = false;
34
+ return {
35
+ value: result.value,
36
+ done: false
37
+ };
38
+ }
39
+ }
40
+ const result = source.next();
41
+ if (result.done) return {
42
+ value: void 0,
43
+ done: true
44
+ };
45
+ return {
46
+ value: result.value,
47
+ done: false
48
+ };
49
+ }, () => void source.return?.());
50
+ }
51
+ //#endregion
52
+ export { dropWhile };
@@ -0,0 +1,21 @@
1
+ //#region src/iterator/head.d.ts
2
+ /**
3
+ * Returns the first element produced by `source`, or `undefined` if it is empty.
4
+ * This pulls a single element and then stops, so it is safe to use on an
5
+ * infinite iterator.
6
+ *
7
+ * This consumes the iterator rather than peeking at it: after reading the first
8
+ * element, `source` is closed via its `return` method (matching the native
9
+ * `Iterator.prototype.find`), so it cannot be iterated further.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to read the first element from.
13
+ * @returns The first element, or `undefined` when the iterator yields nothing.
14
+ *
15
+ * @example
16
+ * head([1, 2, 3].values()); // => 1
17
+ * head([].values()); // => undefined
18
+ */
19
+ declare function head<T>(source: Iterator<T>): T | undefined;
20
+ //#endregion
21
+ export { head };
@@ -0,0 +1,21 @@
1
+ //#region src/iterator/head.d.ts
2
+ /**
3
+ * Returns the first element produced by `source`, or `undefined` if it is empty.
4
+ * This pulls a single element and then stops, so it is safe to use on an
5
+ * infinite iterator.
6
+ *
7
+ * This consumes the iterator rather than peeking at it: after reading the first
8
+ * element, `source` is closed via its `return` method (matching the native
9
+ * `Iterator.prototype.find`), so it cannot be iterated further.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to read the first element from.
13
+ * @returns The first element, or `undefined` when the iterator yields nothing.
14
+ *
15
+ * @example
16
+ * head([1, 2, 3].values()); // => 1
17
+ * head([].values()); // => undefined
18
+ */
19
+ declare function head<T>(source: Iterator<T>): T | undefined;
20
+ //#endregion
21
+ export { head };
@@ -0,0 +1,26 @@
1
+ //#region src/iterator/head.ts
2
+ /**
3
+ * Returns the first element produced by `source`, or `undefined` if it is empty.
4
+ * This pulls a single element and then stops, so it is safe to use on an
5
+ * infinite iterator.
6
+ *
7
+ * This consumes the iterator rather than peeking at it: after reading the first
8
+ * element, `source` is closed via its `return` method (matching the native
9
+ * `Iterator.prototype.find`), so it cannot be iterated further.
10
+ *
11
+ * @template T - The type of elements produced by the iterator.
12
+ * @param source - The iterator to read the first element from.
13
+ * @returns The first element, or `undefined` when the iterator yields nothing.
14
+ *
15
+ * @example
16
+ * head([1, 2, 3].values()); // => 1
17
+ * head([].values()); // => undefined
18
+ */
19
+ function head(source) {
20
+ const result = source.next();
21
+ if (result.done) return;
22
+ source.return?.();
23
+ return result.value;
24
+ }
25
+ //#endregion
26
+ exports.head = head;