@daiso-tech/core 0.1.2 → 0.1.3

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 (536) hide show
  1. package/README.md +29 -0
  2. package/dist/cjs/{types.js.map → _shared/types.js.map} +1 -1
  3. package/dist/cjs/collection/_shared.js.map +1 -1
  4. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/_module.js +35 -35
  5. package/dist/cjs/collection/async-iterable-collection/_shared/_module.js.map +1 -0
  6. package/dist/cjs/collection/async-iterable-collection/_shared/async-abort-iterable.js.map +1 -0
  7. package/dist/cjs/collection/async-iterable-collection/_shared/async-chunk-iterable.js.map +1 -0
  8. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-chunk-whilte-iterable.js +4 -4
  9. package/dist/cjs/collection/async-iterable-collection/_shared/async-chunk-whilte-iterable.js.map +1 -0
  10. package/dist/cjs/collection/async-iterable-collection/_shared/async-collapse-iterable.js.map +1 -0
  11. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-count-by-iterable.js +4 -4
  12. package/dist/cjs/collection/async-iterable-collection/_shared/async-count-by-iterable.js.map +1 -0
  13. package/dist/cjs/collection/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -0
  14. package/dist/cjs/collection/async-iterable-collection/_shared/async-delay-iterable.js.map +1 -0
  15. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-entries-iterable.js +5 -4
  16. package/dist/cjs/collection/async-iterable-collection/_shared/async-entries-iterable.js.map +1 -0
  17. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-filter-iterable.js +4 -4
  18. package/dist/cjs/collection/async-iterable-collection/_shared/async-filter-iterable.js.map +1 -0
  19. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-flat-map-iterable.js +7 -7
  20. package/dist/cjs/collection/async-iterable-collection/_shared/async-flat-map-iterable.js.map +1 -0
  21. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-group-by-iterable.js +4 -4
  22. package/dist/cjs/collection/async-iterable-collection/_shared/async-group-by-iterable.js.map +1 -0
  23. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-insert-after-iterable.js +4 -4
  24. package/dist/cjs/collection/async-iterable-collection/_shared/async-insert-after-iterable.js.map +1 -0
  25. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-insert-before-iterable.js +4 -4
  26. package/dist/cjs/collection/async-iterable-collection/_shared/async-insert-before-iterable.js.map +1 -0
  27. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-map-iterable.js +7 -7
  28. package/dist/cjs/collection/async-iterable-collection/_shared/async-map-iterable.js.map +1 -0
  29. package/dist/cjs/collection/async-iterable-collection/_shared/async-merge-iterable.js.map +1 -0
  30. package/dist/cjs/collection/async-iterable-collection/_shared/async-pad-end-iterable.js.map +1 -0
  31. package/dist/cjs/collection/async-iterable-collection/_shared/async-pad-start-iterable.js.map +1 -0
  32. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-partion-iterable.js +4 -4
  33. package/dist/cjs/collection/async-iterable-collection/_shared/async-partion-iterable.js.map +1 -0
  34. package/dist/cjs/collection/async-iterable-collection/_shared/async-repeat-iterable.js.map +1 -0
  35. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-reverse-iterable.js +5 -5
  36. package/dist/cjs/collection/async-iterable-collection/_shared/async-reverse-iterable.js.map +1 -0
  37. package/dist/cjs/collection/async-iterable-collection/_shared/async-shuffle-iterable.js.map +1 -0
  38. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-skip-iterable.js +5 -5
  39. package/dist/cjs/collection/async-iterable-collection/_shared/async-skip-iterable.js.map +1 -0
  40. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-skip-until-iterable.js +4 -4
  41. package/dist/cjs/collection/async-iterable-collection/_shared/async-skip-until-iterable.js.map +1 -0
  42. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-slice-iterable.js +4 -4
  43. package/dist/cjs/collection/async-iterable-collection/_shared/async-slice-iterable.js.map +1 -0
  44. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-sliding-iterable.js +5 -5
  45. package/dist/cjs/collection/async-iterable-collection/_shared/async-sliding-iterable.js.map +1 -0
  46. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-sort-iterable.js +4 -4
  47. package/dist/cjs/collection/async-iterable-collection/_shared/async-sort-iterable.js.map +1 -0
  48. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-split-iterable.js +5 -5
  49. package/dist/cjs/collection/async-iterable-collection/_shared/async-split-iterable.js.map +1 -0
  50. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-take-iterable.js +5 -5
  51. package/dist/cjs/collection/async-iterable-collection/_shared/async-take-iterable.js.map +1 -0
  52. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-take-until-iterable.js +4 -4
  53. package/dist/cjs/collection/async-iterable-collection/_shared/async-take-until-iterable.js.map +1 -0
  54. package/dist/cjs/collection/async-iterable-collection/_shared/async-tap-iterable.js.map +1 -0
  55. package/dist/cjs/collection/async-iterable-collection/_shared/async-timeout-iterable.js.map +1 -0
  56. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-unique-iterable.js +3 -3
  57. package/dist/cjs/collection/async-iterable-collection/_shared/async-unique-iterable.js.map +1 -0
  58. package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-update-iterable.js +7 -7
  59. package/dist/cjs/collection/async-iterable-collection/_shared/async-update-iterable.js.map +1 -0
  60. package/dist/cjs/collection/async-iterable-collection/_shared/async-when-iterable.js.map +1 -0
  61. package/dist/cjs/collection/async-iterable-collection/_shared/async-zip-iterable.js.map +1 -0
  62. package/dist/cjs/collection/async-iterable-collection/async-iterable-collection.js +121 -100
  63. package/dist/cjs/collection/async-iterable-collection/async-iterable-collection.js.map +1 -1
  64. package/dist/cjs/collection/iterable-collection/_shared/_module.js +49 -0
  65. package/dist/cjs/collection/iterable-collection/_shared/_module.js.map +1 -0
  66. package/dist/cjs/collection/iterable-collection/_shared/chunk-iterable.js.map +1 -0
  67. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/chunk-whilte-iterable.js +7 -7
  68. package/dist/cjs/collection/iterable-collection/_shared/chunk-whilte-iterable.js.map +1 -0
  69. package/dist/cjs/collection/iterable-collection/_shared/collapse-iterable.js.map +1 -0
  70. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/count-by-iterable.js +7 -7
  71. package/dist/cjs/collection/iterable-collection/_shared/count-by-iterable.js.map +1 -0
  72. package/dist/cjs/collection/iterable-collection/_shared/cross-join-iterable.js.map +1 -0
  73. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/entries-iterable.js +4 -4
  74. package/dist/cjs/collection/iterable-collection/_shared/entries-iterable.js.map +1 -0
  75. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/filter-iterable.js +7 -7
  76. package/dist/cjs/collection/iterable-collection/_shared/filter-iterable.js.map +1 -0
  77. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/flat-map-iterable.js +7 -7
  78. package/dist/cjs/collection/iterable-collection/_shared/flat-map-iterable.js.map +1 -0
  79. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/group-by-iterable.js +7 -7
  80. package/dist/cjs/collection/iterable-collection/_shared/group-by-iterable.js.map +1 -0
  81. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/insert-after-iterable.js +8 -7
  82. package/dist/cjs/collection/iterable-collection/_shared/insert-after-iterable.js.map +1 -0
  83. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/insert-before-iterable.js +8 -7
  84. package/dist/cjs/collection/iterable-collection/_shared/insert-before-iterable.js.map +1 -0
  85. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/map-iterable.js +7 -7
  86. package/dist/cjs/collection/iterable-collection/_shared/map-iterable.js.map +1 -0
  87. package/dist/cjs/collection/iterable-collection/_shared/merge-iterable.js.map +1 -0
  88. package/dist/cjs/collection/iterable-collection/_shared/pad-end-iterable.js.map +1 -0
  89. package/dist/cjs/collection/iterable-collection/_shared/pad-start-iterable.js.map +1 -0
  90. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/partion-iterable.js +7 -7
  91. package/dist/cjs/collection/iterable-collection/_shared/partion-iterable.js.map +1 -0
  92. package/dist/cjs/collection/iterable-collection/_shared/repeat-iterable.js.map +1 -0
  93. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/reverse-iterable.js +5 -5
  94. package/dist/cjs/collection/iterable-collection/_shared/reverse-iterable.js.map +1 -0
  95. package/dist/cjs/collection/iterable-collection/_shared/shuffle-iterable.js.map +1 -0
  96. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/skip-iterable.js +6 -5
  97. package/dist/cjs/collection/iterable-collection/_shared/skip-iterable.js.map +1 -0
  98. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/skip-until-iterable.js +7 -7
  99. package/dist/cjs/collection/iterable-collection/_shared/skip-until-iterable.js.map +1 -0
  100. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/slice-iterable.js +4 -4
  101. package/dist/cjs/collection/iterable-collection/_shared/slice-iterable.js.map +1 -0
  102. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/sliding-iterable.js +5 -5
  103. package/dist/cjs/collection/iterable-collection/_shared/sliding-iterable.js.map +1 -0
  104. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/sort-iterable.js +4 -4
  105. package/dist/cjs/collection/iterable-collection/_shared/sort-iterable.js.map +1 -0
  106. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/split-iterable.js +5 -5
  107. package/dist/cjs/collection/iterable-collection/_shared/split-iterable.js.map +1 -0
  108. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/take-iterable.js +6 -5
  109. package/dist/cjs/collection/iterable-collection/_shared/take-iterable.js.map +1 -0
  110. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/take-until-iterable.js +7 -7
  111. package/dist/cjs/collection/iterable-collection/_shared/take-until-iterable.js.map +1 -0
  112. package/dist/cjs/collection/iterable-collection/_shared/tap-iterable.js.map +1 -0
  113. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/unique-iterable.js +4 -4
  114. package/dist/cjs/collection/iterable-collection/_shared/unique-iterable.js.map +1 -0
  115. package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/update-iterable.js +10 -10
  116. package/dist/cjs/collection/iterable-collection/_shared/update-iterable.js.map +1 -0
  117. package/dist/cjs/collection/iterable-collection/_shared/when-iterable.js.map +1 -0
  118. package/dist/cjs/collection/iterable-collection/_shared/zip-iterable.js.map +1 -0
  119. package/dist/cjs/collection/iterable-collection/iterable-collection.js +137 -111
  120. package/dist/cjs/collection/iterable-collection/iterable-collection.js.map +1 -1
  121. package/dist/cjs/collection/list-collection/list-collection.js +105 -73
  122. package/dist/cjs/collection/list-collection/list-collection.js.map +1 -1
  123. package/dist/cjs/contracts/_module.js +1 -1
  124. package/dist/cjs/contracts/_module.js.map +1 -1
  125. package/dist/cjs/contracts/collection/_module.js.map +1 -1
  126. package/dist/cjs/contracts/collection/_shared.js +1 -1
  127. package/dist/cjs/contracts/collection/_shared.js.map +1 -1
  128. package/dist/esm/{types.js.map → _shared/types.js.map} +1 -1
  129. package/dist/esm/collection/_shared.js.map +1 -1
  130. package/dist/esm/collection/async-iterable-collection/_shared/_module.js +36 -0
  131. package/dist/esm/collection/async-iterable-collection/_shared/_module.js.map +1 -0
  132. package/dist/esm/collection/async-iterable-collection/_shared/async-abort-iterable.js.map +1 -0
  133. package/dist/esm/collection/async-iterable-collection/_shared/async-chunk-iterable.js.map +1 -0
  134. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-chunk-whilte-iterable.js +4 -4
  135. package/dist/esm/collection/async-iterable-collection/_shared/async-chunk-whilte-iterable.js.map +1 -0
  136. package/dist/esm/collection/async-iterable-collection/_shared/async-collapse-iterable.js.map +1 -0
  137. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-count-by-iterable.js +4 -4
  138. package/dist/esm/collection/async-iterable-collection/_shared/async-count-by-iterable.js.map +1 -0
  139. package/dist/esm/collection/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -0
  140. package/dist/esm/collection/async-iterable-collection/_shared/async-delay-iterable.js.map +1 -0
  141. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-entries-iterable.js +5 -4
  142. package/dist/esm/collection/async-iterable-collection/_shared/async-entries-iterable.js.map +1 -0
  143. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-filter-iterable.js +4 -4
  144. package/dist/esm/collection/async-iterable-collection/_shared/async-filter-iterable.js.map +1 -0
  145. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-flat-map-iterable.js +7 -7
  146. package/dist/esm/collection/async-iterable-collection/_shared/async-flat-map-iterable.js.map +1 -0
  147. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-group-by-iterable.js +4 -4
  148. package/dist/esm/collection/async-iterable-collection/_shared/async-group-by-iterable.js.map +1 -0
  149. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-insert-after-iterable.js +4 -4
  150. package/dist/esm/collection/async-iterable-collection/_shared/async-insert-after-iterable.js.map +1 -0
  151. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-insert-before-iterable.js +4 -4
  152. package/dist/esm/collection/async-iterable-collection/_shared/async-insert-before-iterable.js.map +1 -0
  153. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-map-iterable.js +7 -7
  154. package/dist/esm/collection/async-iterable-collection/_shared/async-map-iterable.js.map +1 -0
  155. package/dist/esm/collection/async-iterable-collection/_shared/async-merge-iterable.js.map +1 -0
  156. package/dist/esm/collection/async-iterable-collection/_shared/async-pad-end-iterable.js.map +1 -0
  157. package/dist/esm/collection/async-iterable-collection/_shared/async-pad-start-iterable.js.map +1 -0
  158. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-partion-iterable.js +4 -4
  159. package/dist/esm/collection/async-iterable-collection/_shared/async-partion-iterable.js.map +1 -0
  160. package/dist/esm/collection/async-iterable-collection/_shared/async-repeat-iterable.js.map +1 -0
  161. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-reverse-iterable.js +5 -5
  162. package/dist/esm/collection/async-iterable-collection/_shared/async-reverse-iterable.js.map +1 -0
  163. package/dist/esm/collection/async-iterable-collection/_shared/async-shuffle-iterable.js.map +1 -0
  164. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-skip-iterable.js +5 -5
  165. package/dist/esm/collection/async-iterable-collection/_shared/async-skip-iterable.js.map +1 -0
  166. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-skip-until-iterable.js +4 -4
  167. package/dist/esm/collection/async-iterable-collection/_shared/async-skip-until-iterable.js.map +1 -0
  168. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-slice-iterable.js +4 -4
  169. package/dist/esm/collection/async-iterable-collection/_shared/async-slice-iterable.js.map +1 -0
  170. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-sliding-iterable.js +5 -5
  171. package/dist/esm/collection/async-iterable-collection/_shared/async-sliding-iterable.js.map +1 -0
  172. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-sort-iterable.js +4 -4
  173. package/dist/esm/collection/async-iterable-collection/_shared/async-sort-iterable.js.map +1 -0
  174. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-split-iterable.js +5 -5
  175. package/dist/esm/collection/async-iterable-collection/_shared/async-split-iterable.js.map +1 -0
  176. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-take-iterable.js +5 -5
  177. package/dist/esm/collection/async-iterable-collection/_shared/async-take-iterable.js.map +1 -0
  178. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-take-until-iterable.js +4 -4
  179. package/dist/esm/collection/async-iterable-collection/_shared/async-take-until-iterable.js.map +1 -0
  180. package/dist/esm/collection/async-iterable-collection/_shared/async-tap-iterable.js.map +1 -0
  181. package/dist/esm/collection/async-iterable-collection/_shared/async-timeout-iterable.js.map +1 -0
  182. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-unique-iterable.js +3 -3
  183. package/dist/esm/collection/async-iterable-collection/_shared/async-unique-iterable.js.map +1 -0
  184. package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-update-iterable.js +7 -7
  185. package/dist/esm/collection/async-iterable-collection/_shared/async-update-iterable.js.map +1 -0
  186. package/dist/esm/collection/async-iterable-collection/_shared/async-when-iterable.js.map +1 -0
  187. package/dist/esm/collection/async-iterable-collection/_shared/async-zip-iterable.js.map +1 -0
  188. package/dist/esm/collection/async-iterable-collection/async-iterable-collection.js +121 -100
  189. package/dist/esm/collection/async-iterable-collection/async-iterable-collection.js.map +1 -1
  190. package/dist/esm/collection/iterable-collection/_shared/_module.js +33 -0
  191. package/dist/esm/collection/iterable-collection/_shared/_module.js.map +1 -0
  192. package/dist/esm/collection/iterable-collection/_shared/chunk-iterable.js.map +1 -0
  193. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/chunk-whilte-iterable.js +7 -7
  194. package/dist/esm/collection/iterable-collection/_shared/chunk-whilte-iterable.js.map +1 -0
  195. package/dist/esm/collection/iterable-collection/_shared/collapse-iterable.js.map +1 -0
  196. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/count-by-iterable.js +7 -7
  197. package/dist/esm/collection/iterable-collection/_shared/count-by-iterable.js.map +1 -0
  198. package/dist/esm/collection/iterable-collection/_shared/cross-join-iterable.js.map +1 -0
  199. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/entries-iterable.js +4 -4
  200. package/dist/esm/collection/iterable-collection/_shared/entries-iterable.js.map +1 -0
  201. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/filter-iterable.js +7 -7
  202. package/dist/esm/collection/iterable-collection/_shared/filter-iterable.js.map +1 -0
  203. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/flat-map-iterable.js +7 -7
  204. package/dist/esm/collection/iterable-collection/_shared/flat-map-iterable.js.map +1 -0
  205. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/group-by-iterable.js +7 -7
  206. package/dist/esm/collection/iterable-collection/_shared/group-by-iterable.js.map +1 -0
  207. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/insert-after-iterable.js +8 -7
  208. package/dist/esm/collection/iterable-collection/_shared/insert-after-iterable.js.map +1 -0
  209. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/insert-before-iterable.js +8 -7
  210. package/dist/esm/collection/iterable-collection/_shared/insert-before-iterable.js.map +1 -0
  211. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/map-iterable.js +7 -7
  212. package/dist/esm/collection/iterable-collection/_shared/map-iterable.js.map +1 -0
  213. package/dist/esm/collection/iterable-collection/_shared/merge-iterable.js.map +1 -0
  214. package/dist/esm/collection/iterable-collection/_shared/pad-end-iterable.js.map +1 -0
  215. package/dist/esm/collection/iterable-collection/_shared/pad-start-iterable.js.map +1 -0
  216. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/partion-iterable.js +7 -7
  217. package/dist/esm/collection/iterable-collection/_shared/partion-iterable.js.map +1 -0
  218. package/dist/esm/collection/iterable-collection/_shared/repeat-iterable.js.map +1 -0
  219. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/reverse-iterable.js +5 -5
  220. package/dist/esm/collection/iterable-collection/_shared/reverse-iterable.js.map +1 -0
  221. package/dist/esm/collection/iterable-collection/_shared/shuffle-iterable.js.map +1 -0
  222. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/skip-iterable.js +6 -5
  223. package/dist/esm/collection/iterable-collection/_shared/skip-iterable.js.map +1 -0
  224. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/skip-until-iterable.js +7 -7
  225. package/dist/esm/collection/iterable-collection/_shared/skip-until-iterable.js.map +1 -0
  226. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/slice-iterable.js +4 -4
  227. package/dist/esm/collection/iterable-collection/_shared/slice-iterable.js.map +1 -0
  228. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/sliding-iterable.js +5 -5
  229. package/dist/esm/collection/iterable-collection/_shared/sliding-iterable.js.map +1 -0
  230. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/sort-iterable.js +4 -4
  231. package/dist/esm/collection/iterable-collection/_shared/sort-iterable.js.map +1 -0
  232. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/split-iterable.js +5 -5
  233. package/dist/esm/collection/iterable-collection/_shared/split-iterable.js.map +1 -0
  234. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/take-iterable.js +6 -5
  235. package/dist/esm/collection/iterable-collection/_shared/take-iterable.js.map +1 -0
  236. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/take-until-iterable.js +7 -7
  237. package/dist/esm/collection/iterable-collection/_shared/take-until-iterable.js.map +1 -0
  238. package/dist/esm/collection/iterable-collection/_shared/tap-iterable.js.map +1 -0
  239. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/unique-iterable.js +4 -4
  240. package/dist/esm/collection/iterable-collection/_shared/unique-iterable.js.map +1 -0
  241. package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/update-iterable.js +10 -10
  242. package/dist/esm/collection/iterable-collection/_shared/update-iterable.js.map +1 -0
  243. package/dist/esm/collection/iterable-collection/_shared/when-iterable.js.map +1 -0
  244. package/dist/esm/collection/iterable-collection/_shared/zip-iterable.js.map +1 -0
  245. package/dist/esm/collection/iterable-collection/iterable-collection.js +137 -111
  246. package/dist/esm/collection/iterable-collection/iterable-collection.js.map +1 -1
  247. package/dist/esm/collection/list-collection/list-collection.js +105 -73
  248. package/dist/esm/collection/list-collection/list-collection.js.map +1 -1
  249. package/dist/esm/contracts/_module.js +1 -1
  250. package/dist/esm/contracts/_module.js.map +1 -1
  251. package/dist/esm/contracts/collection/_module.js.map +1 -1
  252. package/dist/esm/contracts/collection/_shared.js +1 -1
  253. package/dist/esm/contracts/collection/_shared.js.map +1 -1
  254. package/dist/types/collection/_shared.d.ts +9 -3
  255. package/dist/types/collection/async-iterable-collection/_shared/_module.d.ts +35 -0
  256. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-chunk-whilte-iterable.d.ts +3 -3
  257. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-count-by-iterable.d.ts +2 -2
  258. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-entries-iterable.d.ts +2 -2
  259. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-filter-iterable.d.ts +3 -3
  260. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-flat-map-iterable.d.ts +3 -3
  261. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-group-by-iterable.d.ts +2 -2
  262. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-insert-after-iterable.d.ts +3 -3
  263. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-insert-before-iterable.d.ts +3 -3
  264. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-map-iterable.d.ts +3 -3
  265. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-partion-iterable.d.ts +3 -3
  266. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-reverse-iterable.d.ts +2 -2
  267. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-skip-iterable.d.ts +2 -2
  268. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-skip-until-iterable.d.ts +3 -3
  269. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-slice-iterable.d.ts +2 -2
  270. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-sliding-iterable.d.ts +2 -2
  271. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-sort-iterable.d.ts +2 -2
  272. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-split-iterable.d.ts +2 -2
  273. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-take-iterable.d.ts +2 -2
  274. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-take-until-iterable.d.ts +3 -3
  275. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-unique-iterable.d.ts +2 -2
  276. package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-update-iterable.d.ts +4 -4
  277. package/dist/types/collection/async-iterable-collection/async-iterable-collection.d.ts +53 -44
  278. package/dist/types/collection/iterable-collection/_shared/_module.d.ts +32 -0
  279. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/chunk-iterable.d.ts +3 -0
  280. package/dist/types/collection/iterable-collection/_shared/chunk-whilte-iterable.d.ts +12 -0
  281. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/collapse-iterable.d.ts +3 -0
  282. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/count-by-iterable.d.ts +6 -3
  283. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/cross-join-iterable.d.ts +3 -0
  284. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/entries-iterable.d.ts +5 -2
  285. package/dist/types/collection/iterable-collection/_shared/filter-iterable.d.ts +11 -0
  286. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/flat-map-iterable.d.ts +6 -3
  287. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/group-by-iterable.d.ts +6 -3
  288. package/dist/types/collection/iterable-collection/_shared/insert-after-iterable.d.ts +12 -0
  289. package/dist/types/collection/iterable-collection/_shared/insert-before-iterable.d.ts +12 -0
  290. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/map-iterable.d.ts +6 -3
  291. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/merge-iterable.d.ts +3 -0
  292. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/pad-end-iterable.d.ts +3 -0
  293. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/pad-start-iterable.d.ts +3 -0
  294. package/dist/types/collection/iterable-collection/_shared/partion-iterable.d.ts +12 -0
  295. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/repeat-iterable.d.ts +3 -0
  296. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/reverse-iterable.d.ts +5 -2
  297. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/shuffle-iterable.d.ts +3 -0
  298. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/skip-iterable.d.ts +5 -2
  299. package/dist/types/collection/iterable-collection/_shared/skip-until-iterable.d.ts +11 -0
  300. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/slice-iterable.d.ts +5 -2
  301. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/sliding-iterable.d.ts +5 -2
  302. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/sort-iterable.d.ts +5 -2
  303. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/split-iterable.d.ts +5 -2
  304. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/take-iterable.d.ts +5 -2
  305. package/dist/types/collection/iterable-collection/_shared/take-until-iterable.d.ts +11 -0
  306. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/tap-iterable.d.ts +3 -0
  307. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/unique-iterable.d.ts +5 -2
  308. package/dist/types/collection/iterable-collection/_shared/update-iterable.d.ts +12 -0
  309. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/when-iterable.d.ts +3 -0
  310. package/dist/types/collection/iterable-collection/{iterable-helpers → _shared}/zip-iterable.d.ts +3 -0
  311. package/dist/types/collection/iterable-collection/iterable-collection.d.ts +53 -44
  312. package/dist/types/collection/list-collection/list-collection.d.ts +52 -44
  313. package/dist/types/contracts/_module.d.ts +1 -1
  314. package/dist/types/contracts/collection/_module.d.ts +3 -0
  315. package/dist/types/contracts/collection/_shared.d.ts +123 -170
  316. package/dist/types/contracts/collection/async-collection.contract.d.ts +606 -211
  317. package/dist/types/contracts/collection/collection.contract.d.ts +546 -155
  318. package/package.json +5 -5
  319. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/_module.js.map +0 -1
  320. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-abort-iterable.js.map +0 -1
  321. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-chunk-iterable.js.map +0 -1
  322. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-chunk-whilte-iterable.js.map +0 -1
  323. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-collapse-iterable.js.map +0 -1
  324. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-count-by-iterable.js.map +0 -1
  325. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-cross-join-iterable.js.map +0 -1
  326. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-delay-iterable.js.map +0 -1
  327. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-entries-iterable.js.map +0 -1
  328. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-filter-iterable.js.map +0 -1
  329. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-flat-map-iterable.js.map +0 -1
  330. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-group-by-iterable.js.map +0 -1
  331. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-insert-after-iterable.js.map +0 -1
  332. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-insert-before-iterable.js.map +0 -1
  333. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-map-iterable.js.map +0 -1
  334. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-merge-iterable.js.map +0 -1
  335. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-pad-end-iterable.js.map +0 -1
  336. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-pad-start-iterable.js.map +0 -1
  337. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-partion-iterable.js.map +0 -1
  338. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-repeat-iterable.js.map +0 -1
  339. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-reverse-iterable.js.map +0 -1
  340. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-shuffle-iterable.js.map +0 -1
  341. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-skip-iterable.js.map +0 -1
  342. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-skip-until-iterable.js.map +0 -1
  343. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-slice-iterable.js.map +0 -1
  344. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-sliding-iterable.js.map +0 -1
  345. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-sort-iterable.js.map +0 -1
  346. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-split-iterable.js.map +0 -1
  347. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-take-iterable.js.map +0 -1
  348. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-take-until-iterable.js.map +0 -1
  349. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-tap-iterable.js.map +0 -1
  350. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-timeout-iterable.js.map +0 -1
  351. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-unique-iterable.js.map +0 -1
  352. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-update-iterable.js.map +0 -1
  353. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-when-iterable.js.map +0 -1
  354. package/dist/cjs/collection/async-iterable-collection/async-iterable-helpers/async-zip-iterable.js.map +0 -1
  355. package/dist/cjs/collection/iterable-collection/iterable-helpers/_module.js +0 -49
  356. package/dist/cjs/collection/iterable-collection/iterable-helpers/_module.js.map +0 -1
  357. package/dist/cjs/collection/iterable-collection/iterable-helpers/chunk-iterable.js.map +0 -1
  358. package/dist/cjs/collection/iterable-collection/iterable-helpers/chunk-whilte-iterable.js.map +0 -1
  359. package/dist/cjs/collection/iterable-collection/iterable-helpers/collapse-iterable.js.map +0 -1
  360. package/dist/cjs/collection/iterable-collection/iterable-helpers/count-by-iterable.js.map +0 -1
  361. package/dist/cjs/collection/iterable-collection/iterable-helpers/cross-join-iterable.js.map +0 -1
  362. package/dist/cjs/collection/iterable-collection/iterable-helpers/entries-iterable.js.map +0 -1
  363. package/dist/cjs/collection/iterable-collection/iterable-helpers/filter-iterable.js.map +0 -1
  364. package/dist/cjs/collection/iterable-collection/iterable-helpers/flat-map-iterable.js.map +0 -1
  365. package/dist/cjs/collection/iterable-collection/iterable-helpers/group-by-iterable.js.map +0 -1
  366. package/dist/cjs/collection/iterable-collection/iterable-helpers/insert-after-iterable.js.map +0 -1
  367. package/dist/cjs/collection/iterable-collection/iterable-helpers/insert-before-iterable.js.map +0 -1
  368. package/dist/cjs/collection/iterable-collection/iterable-helpers/map-iterable.js.map +0 -1
  369. package/dist/cjs/collection/iterable-collection/iterable-helpers/merge-iterable.js.map +0 -1
  370. package/dist/cjs/collection/iterable-collection/iterable-helpers/pad-end-iterable.js.map +0 -1
  371. package/dist/cjs/collection/iterable-collection/iterable-helpers/pad-start-iterable.js.map +0 -1
  372. package/dist/cjs/collection/iterable-collection/iterable-helpers/partion-iterable.js.map +0 -1
  373. package/dist/cjs/collection/iterable-collection/iterable-helpers/repeat-iterable.js.map +0 -1
  374. package/dist/cjs/collection/iterable-collection/iterable-helpers/reverse-iterable.js.map +0 -1
  375. package/dist/cjs/collection/iterable-collection/iterable-helpers/shuffle-iterable.js.map +0 -1
  376. package/dist/cjs/collection/iterable-collection/iterable-helpers/skip-iterable.js.map +0 -1
  377. package/dist/cjs/collection/iterable-collection/iterable-helpers/skip-until-iterable.js.map +0 -1
  378. package/dist/cjs/collection/iterable-collection/iterable-helpers/slice-iterable.js.map +0 -1
  379. package/dist/cjs/collection/iterable-collection/iterable-helpers/sliding-iterable.js.map +0 -1
  380. package/dist/cjs/collection/iterable-collection/iterable-helpers/sort-iterable.js.map +0 -1
  381. package/dist/cjs/collection/iterable-collection/iterable-helpers/split-iterable.js.map +0 -1
  382. package/dist/cjs/collection/iterable-collection/iterable-helpers/take-iterable.js.map +0 -1
  383. package/dist/cjs/collection/iterable-collection/iterable-helpers/take-until-iterable.js.map +0 -1
  384. package/dist/cjs/collection/iterable-collection/iterable-helpers/tap-iterable.js.map +0 -1
  385. package/dist/cjs/collection/iterable-collection/iterable-helpers/unique-iterable.js.map +0 -1
  386. package/dist/cjs/collection/iterable-collection/iterable-helpers/update-iterable.js.map +0 -1
  387. package/dist/cjs/collection/iterable-collection/iterable-helpers/when-iterable.js.map +0 -1
  388. package/dist/cjs/collection/iterable-collection/iterable-helpers/zip-iterable.js.map +0 -1
  389. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/_module.js +0 -36
  390. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/_module.js.map +0 -1
  391. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-abort-iterable.js.map +0 -1
  392. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-chunk-iterable.js.map +0 -1
  393. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-chunk-whilte-iterable.js.map +0 -1
  394. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-collapse-iterable.js.map +0 -1
  395. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-count-by-iterable.js.map +0 -1
  396. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-cross-join-iterable.js.map +0 -1
  397. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-delay-iterable.js.map +0 -1
  398. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-entries-iterable.js.map +0 -1
  399. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-filter-iterable.js.map +0 -1
  400. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-flat-map-iterable.js.map +0 -1
  401. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-group-by-iterable.js.map +0 -1
  402. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-insert-after-iterable.js.map +0 -1
  403. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-insert-before-iterable.js.map +0 -1
  404. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-map-iterable.js.map +0 -1
  405. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-merge-iterable.js.map +0 -1
  406. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-pad-end-iterable.js.map +0 -1
  407. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-pad-start-iterable.js.map +0 -1
  408. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-partion-iterable.js.map +0 -1
  409. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-repeat-iterable.js.map +0 -1
  410. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-reverse-iterable.js.map +0 -1
  411. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-shuffle-iterable.js.map +0 -1
  412. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-skip-iterable.js.map +0 -1
  413. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-skip-until-iterable.js.map +0 -1
  414. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-slice-iterable.js.map +0 -1
  415. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-sliding-iterable.js.map +0 -1
  416. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-sort-iterable.js.map +0 -1
  417. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-split-iterable.js.map +0 -1
  418. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-take-iterable.js.map +0 -1
  419. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-take-until-iterable.js.map +0 -1
  420. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-tap-iterable.js.map +0 -1
  421. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-timeout-iterable.js.map +0 -1
  422. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-unique-iterable.js.map +0 -1
  423. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-update-iterable.js.map +0 -1
  424. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-when-iterable.js.map +0 -1
  425. package/dist/esm/collection/async-iterable-collection/async-iterable-helpers/async-zip-iterable.js.map +0 -1
  426. package/dist/esm/collection/iterable-collection/iterable-helpers/_module.js +0 -33
  427. package/dist/esm/collection/iterable-collection/iterable-helpers/_module.js.map +0 -1
  428. package/dist/esm/collection/iterable-collection/iterable-helpers/chunk-iterable.js.map +0 -1
  429. package/dist/esm/collection/iterable-collection/iterable-helpers/chunk-whilte-iterable.js.map +0 -1
  430. package/dist/esm/collection/iterable-collection/iterable-helpers/collapse-iterable.js.map +0 -1
  431. package/dist/esm/collection/iterable-collection/iterable-helpers/count-by-iterable.js.map +0 -1
  432. package/dist/esm/collection/iterable-collection/iterable-helpers/cross-join-iterable.js.map +0 -1
  433. package/dist/esm/collection/iterable-collection/iterable-helpers/entries-iterable.js.map +0 -1
  434. package/dist/esm/collection/iterable-collection/iterable-helpers/filter-iterable.js.map +0 -1
  435. package/dist/esm/collection/iterable-collection/iterable-helpers/flat-map-iterable.js.map +0 -1
  436. package/dist/esm/collection/iterable-collection/iterable-helpers/group-by-iterable.js.map +0 -1
  437. package/dist/esm/collection/iterable-collection/iterable-helpers/insert-after-iterable.js.map +0 -1
  438. package/dist/esm/collection/iterable-collection/iterable-helpers/insert-before-iterable.js.map +0 -1
  439. package/dist/esm/collection/iterable-collection/iterable-helpers/map-iterable.js.map +0 -1
  440. package/dist/esm/collection/iterable-collection/iterable-helpers/merge-iterable.js.map +0 -1
  441. package/dist/esm/collection/iterable-collection/iterable-helpers/pad-end-iterable.js.map +0 -1
  442. package/dist/esm/collection/iterable-collection/iterable-helpers/pad-start-iterable.js.map +0 -1
  443. package/dist/esm/collection/iterable-collection/iterable-helpers/partion-iterable.js.map +0 -1
  444. package/dist/esm/collection/iterable-collection/iterable-helpers/repeat-iterable.js.map +0 -1
  445. package/dist/esm/collection/iterable-collection/iterable-helpers/reverse-iterable.js.map +0 -1
  446. package/dist/esm/collection/iterable-collection/iterable-helpers/shuffle-iterable.js.map +0 -1
  447. package/dist/esm/collection/iterable-collection/iterable-helpers/skip-iterable.js.map +0 -1
  448. package/dist/esm/collection/iterable-collection/iterable-helpers/skip-until-iterable.js.map +0 -1
  449. package/dist/esm/collection/iterable-collection/iterable-helpers/slice-iterable.js.map +0 -1
  450. package/dist/esm/collection/iterable-collection/iterable-helpers/sliding-iterable.js.map +0 -1
  451. package/dist/esm/collection/iterable-collection/iterable-helpers/sort-iterable.js.map +0 -1
  452. package/dist/esm/collection/iterable-collection/iterable-helpers/split-iterable.js.map +0 -1
  453. package/dist/esm/collection/iterable-collection/iterable-helpers/take-iterable.js.map +0 -1
  454. package/dist/esm/collection/iterable-collection/iterable-helpers/take-until-iterable.js.map +0 -1
  455. package/dist/esm/collection/iterable-collection/iterable-helpers/tap-iterable.js.map +0 -1
  456. package/dist/esm/collection/iterable-collection/iterable-helpers/unique-iterable.js.map +0 -1
  457. package/dist/esm/collection/iterable-collection/iterable-helpers/update-iterable.js.map +0 -1
  458. package/dist/esm/collection/iterable-collection/iterable-helpers/when-iterable.js.map +0 -1
  459. package/dist/esm/collection/iterable-collection/iterable-helpers/zip-iterable.js.map +0 -1
  460. package/dist/types/collection/async-iterable-collection/async-iterable-helpers/_module.d.ts +0 -35
  461. package/dist/types/collection/iterable-collection/iterable-helpers/_module.d.ts +0 -32
  462. package/dist/types/collection/iterable-collection/iterable-helpers/chunk-whilte-iterable.d.ts +0 -9
  463. package/dist/types/collection/iterable-collection/iterable-helpers/filter-iterable.d.ts +0 -8
  464. package/dist/types/collection/iterable-collection/iterable-helpers/insert-after-iterable.d.ts +0 -9
  465. package/dist/types/collection/iterable-collection/iterable-helpers/insert-before-iterable.d.ts +0 -9
  466. package/dist/types/collection/iterable-collection/iterable-helpers/partion-iterable.d.ts +0 -9
  467. package/dist/types/collection/iterable-collection/iterable-helpers/skip-until-iterable.d.ts +0 -8
  468. package/dist/types/collection/iterable-collection/iterable-helpers/take-until-iterable.d.ts +0 -8
  469. package/dist/types/collection/iterable-collection/iterable-helpers/update-iterable.d.ts +0 -9
  470. /package/dist/cjs/{types.js → _shared/types.js} +0 -0
  471. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-abort-iterable.js +0 -0
  472. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-chunk-iterable.js +0 -0
  473. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-collapse-iterable.js +0 -0
  474. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-cross-join-iterable.js +0 -0
  475. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-delay-iterable.js +0 -0
  476. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-merge-iterable.js +0 -0
  477. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-pad-end-iterable.js +0 -0
  478. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-pad-start-iterable.js +0 -0
  479. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-repeat-iterable.js +0 -0
  480. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-shuffle-iterable.js +0 -0
  481. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-tap-iterable.js +0 -0
  482. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-timeout-iterable.js +0 -0
  483. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-when-iterable.js +0 -0
  484. /package/dist/cjs/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-zip-iterable.js +0 -0
  485. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/chunk-iterable.js +0 -0
  486. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/collapse-iterable.js +0 -0
  487. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/cross-join-iterable.js +0 -0
  488. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/merge-iterable.js +0 -0
  489. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/pad-end-iterable.js +0 -0
  490. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/pad-start-iterable.js +0 -0
  491. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/repeat-iterable.js +0 -0
  492. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/shuffle-iterable.js +0 -0
  493. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/tap-iterable.js +0 -0
  494. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/when-iterable.js +0 -0
  495. /package/dist/cjs/collection/iterable-collection/{iterable-helpers → _shared}/zip-iterable.js +0 -0
  496. /package/dist/esm/{types.js → _shared/types.js} +0 -0
  497. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-abort-iterable.js +0 -0
  498. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-chunk-iterable.js +0 -0
  499. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-collapse-iterable.js +0 -0
  500. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-cross-join-iterable.js +0 -0
  501. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-delay-iterable.js +0 -0
  502. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-merge-iterable.js +0 -0
  503. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-pad-end-iterable.js +0 -0
  504. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-pad-start-iterable.js +0 -0
  505. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-repeat-iterable.js +0 -0
  506. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-shuffle-iterable.js +0 -0
  507. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-tap-iterable.js +0 -0
  508. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-timeout-iterable.js +0 -0
  509. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-when-iterable.js +0 -0
  510. /package/dist/esm/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-zip-iterable.js +0 -0
  511. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/chunk-iterable.js +0 -0
  512. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/collapse-iterable.js +0 -0
  513. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/cross-join-iterable.js +0 -0
  514. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/merge-iterable.js +0 -0
  515. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/pad-end-iterable.js +0 -0
  516. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/pad-start-iterable.js +0 -0
  517. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/repeat-iterable.js +0 -0
  518. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/shuffle-iterable.js +0 -0
  519. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/tap-iterable.js +0 -0
  520. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/when-iterable.js +0 -0
  521. /package/dist/esm/collection/iterable-collection/{iterable-helpers → _shared}/zip-iterable.js +0 -0
  522. /package/dist/types/{types.d.ts → _shared/types.d.ts} +0 -0
  523. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-abort-iterable.d.ts +0 -0
  524. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-chunk-iterable.d.ts +0 -0
  525. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-collapse-iterable.d.ts +0 -0
  526. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-cross-join-iterable.d.ts +0 -0
  527. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-delay-iterable.d.ts +0 -0
  528. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-merge-iterable.d.ts +0 -0
  529. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-pad-end-iterable.d.ts +0 -0
  530. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-pad-start-iterable.d.ts +0 -0
  531. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-repeat-iterable.d.ts +0 -0
  532. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-shuffle-iterable.d.ts +0 -0
  533. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-tap-iterable.d.ts +0 -0
  534. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-timeout-iterable.d.ts +0 -0
  535. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-when-iterable.d.ts +0 -0
  536. /package/dist/types/collection/async-iterable-collection/{async-iterable-helpers → _shared}/async-zip-iterable.d.ts +0 -0
@@ -1,54 +1,103 @@
1
- import { type SliceSettings, type SlidingSettings, type AsyncFilter, type AsyncFindOrSettings, type AsyncFindSettings, type AsyncForEach, type AsyncGroupBySettings, type AsyncLazyable, type AsyncMap, type AsyncModifier, type AsyncReduceSettings, type AsyncTap, type AsyncTransform, type Comparator, type JoinSettings, type PageSettings, type RecordItem, type ReverseSettings, type UpdatedItem } from "../../contracts/collection/_shared";
2
- import { type EnsureType } from "../../types";
3
1
  /**
4
- * @group Collections
2
+ * @module Collections
5
3
  */
4
+ import { type SliceSettings, type SlidingSettings, type AsyncPredicate, type AsyncFindOrSettings, type AsyncFindSettings, type AsyncForEach, type AsyncGroupBySettings, type AsyncCountBySettings, type AsyncUniqueSettings, type AsyncLazyable, type AsyncMap, type AsyncModifier, type AsyncReduceSettings, type AsyncTap, type AsyncTransform, type Comparator, type JoinSettings, type PageSettings, type RecordItem, type ReverseSettings, type UpdatedItem } from "../../contracts/collection/_shared";
5
+ import { type EnsureType } from "../../_shared/types";
6
6
  export type AsyncIterableValue<TInput> = Iterable<TInput> | AsyncIterable<TInput>;
7
- /**
8
- * @group Collections
9
- */
10
7
  export type AsyncCollapse<TValue> = TValue extends Array<infer TItem> | Iterable<infer TItem> | IAsyncCollection<infer TItem> ? TItem : TValue;
11
8
  /**
12
- * IAsyncCollection is immutable and all the methods return new copies
9
+ * <i>IAsyncCollection</i> is immutable. The <i>throwOnIndexOverflow</i> parameter in the <i>ICollection</i> methods is used for preventing the index to overflow by throwing an error.
13
10
  * @throws {CollectionError}
14
11
  * @throws {UnexpectedCollectionError}
15
12
  * @throws {IndexOverflowError}
16
13
  * @throws {ItemNotFoundError}
17
14
  * @throws {MultipleItemsFoundError}
18
15
  * @throws {TypeError}
19
- * @group Collections
16
+ * @group Contracts
20
17
  */
21
18
  export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
22
- iterator(): AsyncIterator<TInput, void>;
23
- entries(throwOnNumberLimit?: boolean): IAsyncCollection<RecordItem<number, TInput>>;
24
- keys(throwOnNumberLimit?: boolean): IAsyncCollection<number>;
19
+ /**
20
+ * The <i>toIterator</i> method converts the collection to a new iterator.
21
+ */
22
+ toIterator(): AsyncIterator<TInput, void>;
23
+ /**
24
+ * The <i>entries</i> returns an IAsyncCollection of key, value pairs for every entry in the collection.
25
+ */
26
+ entries(throwOnIndexOverflow?: boolean): IAsyncCollection<RecordItem<number, TInput>>;
27
+ /**
28
+ * The <i>keys</i> method returns an IAsyncCollection of keys in the collection.
29
+ */
30
+ keys(throwOnIndexOverflow?: boolean): IAsyncCollection<number>;
31
+ /**
32
+ * The <i>values</i> method returns a copy of the collection.
33
+ */
25
34
  values(): IAsyncCollection<TInput>;
26
35
  /**
27
- * The filter method filters the collection using the given callback, keeping only those items that pass a given truth test:
36
+ * The <i>filter</i> method filters the collection using <i>predicateFn</i>, keeping only those items that pass <i>predicateFn</i>.
28
37
  * @example
29
38
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6]);
30
39
  * const filtered = collection.filter(item => 2 < item && item < 5);
31
40
  * await filtered.toArray();
32
41
  * // [3, 4]
33
42
  */
34
- filter<TOutput extends TInput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>, TOutput>, throwOnNumberLimit?: boolean): IAsyncCollection<TOutput>;
43
+ filter<TOutput extends TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>, TOutput>, throwOnIndexOverflow?: boolean): IAsyncCollection<TOutput>;
35
44
  /**
36
- * The map method iterates through the collection and passes each value to the given callback.
37
- * The mapFunction is free to modify the item and return it, thus forming a new collection of modified items:
45
+ * The <i>reject</i> method filters the collection using <i>predicateFn</i>, keeping only those items that not pass <i>predicateFn</i>.
46
+ * @example
47
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6]);
48
+ * const filtered = collection.reject(item => 2 < item && item < 5);
49
+ * await filtered.toArray();
50
+ * // [1, 2, 5, 6]
51
+ */
52
+ reject<TOutput extends TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>, TOutput>, throwOnIndexOverflow?: boolean): IAsyncCollection<Exclude<TInput, TOutput>>;
53
+ /**
54
+ * The <i>map</i> method iterates through the collection and passes each item to <i>mapFn</i>.
55
+ * The <i>mapFn</i> is free to modify the item and return it, thus forming a new collection of modified items.
38
56
  * @example
39
57
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]);
40
58
  * const mapped = collection.map(item => item * 2);
41
59
  * await mapped.toArray();
42
60
  * // [2, 4, 6, 8, 10]
43
61
  */
44
- map<TOutput>(map: AsyncMap<TInput, IAsyncCollection<TInput>, TOutput>, throwOnNumberLimit?: boolean): IAsyncCollection<TOutput>;
62
+ map<TOutput>(mapFn: AsyncMap<TInput, IAsyncCollection<TInput>, TOutput>, throwOnIndexOverflow?: boolean): IAsyncCollection<TOutput>;
63
+ /**
64
+ * The <i>reduce</i> method executes <i> {@link ReduceSettings | ReduceSettings.reduceFn} </i> function on each item of the array, passing in the return value from the calculation on the preceding item.
65
+ * The final result of running the reducer across all items of the array is a single value.
66
+ * @example
67
+ * const collection = new AsyncIterableCollection([1, 2, 3]);
68
+ * await collection.reduce({
69
+ * reduceFn: (sum, item) => sum + item
70
+ * });
71
+ * // 6
72
+ * @example
73
+ * const collection = new AsyncIterableCollection(["a", "b", "c"]);
74
+ * await collection.entries().reduce({
75
+ * reduceFn: (record, [key, value]) => ({
76
+ * ...record,
77
+ * [key]: value
78
+ * }),
79
+ * initialValue: {} as Record<number, string>
80
+ * });
81
+ * // { 0: "a", 1: "b", 2: "c" }
82
+ */
45
83
  reduce<TOutput = TInput>(settings: AsyncReduceSettings<TInput, IAsyncCollection<TInput>, TOutput>): Promise<TOutput>;
46
84
  /**
85
+ * The <i>join</i> method joins the collection's items with {@link JoinSettings | JoinSettings.seperator}. An error will be thrown when if a none string item is encounterd.
47
86
  * @throws {TypeError}
87
+ * @example
88
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
89
+ * await collection.map(item => item.toString()).join();
90
+ * // "1,2,3,4"
91
+ * @example
92
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
93
+ * await collection.map(item => item.toString()).join({
94
+ * seperator: "_"
95
+ * });
96
+ * // "1_2_3_4"
48
97
  */
49
- join(settings?: JoinSettings): Promise<string>;
98
+ join(settings?: JoinSettings): Promise<EnsureType<TInput, string>>;
50
99
  /**
51
- * The collapse method collapses a collection of arrays into a single, flat collection:
100
+ * The <i>collapse</i> method collapses a collection of iterables into a single, flat collection.
52
101
  * @example
53
102
  * const collection = new AsyncIterableCollection([[1, 2], [3, 4]]);
54
103
  * const collapsed = collection.collapse();
@@ -57,40 +106,37 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
57
106
  */
58
107
  collapse(): IAsyncCollection<AsyncCollapse<TInput>>;
59
108
  /**
60
- * The flatMap method returns a new array formed by applying a given callback function to each element of the array, and then collapses the result by one level.
61
- * It is identical to a map() followed by a collapse()
109
+ * The <i>flatMap</i> method returns a new array formed by applying <i>mapFn</i> to each item of the array, and then collapses the result by one level.
110
+ * It is identical to a <i>map</i> method followed by a <i>collapse</i> method.
62
111
  * @example
63
112
  * const collection = new AsyncIterableCollection([["a", "b"], ["c", "d"]]).flatMap(item => [item.length, ...item]);
64
113
  * await collection.toArray();
65
114
  * // [2, "a", "b", 2, "c", "d"]
66
115
  */
67
- flatMap<TOutput>(map: AsyncMap<TInput, IAsyncCollection<TInput>, AsyncIterableValue<TOutput>>, throwOnNumberLimit?: boolean): IAsyncCollection<TOutput>;
116
+ flatMap<TOutput>(mapFn: AsyncMap<TInput, IAsyncCollection<TInput>, Iterable<TOutput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<TOutput>;
68
117
  /**
69
- * The update method filters the collection using the given callback, keeping only those items that pass a given truth test and thereafter updates the filtered items:
118
+ * The <i>update</i> method updates only the items that passes <i>predicateFn</i> using <i>mapFn</i>.
70
119
  * @example
71
120
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]);
72
121
  * const updateCollection = collection.update(item => item % 2 === 0, item => item * 2);
73
122
  * await updateCollection.toArray();
74
123
  * // [1, 4, 3, 8, 5]
75
124
  */
76
- update<TFilterOutput extends TInput, TMapOutput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>, TFilterOutput>, map: AsyncMap<TFilterOutput, IAsyncCollection<TInput>, TMapOutput>, throwOnNumberLimit?: boolean): IAsyncCollection<UpdatedItem<TInput, TFilterOutput, TMapOutput>>;
125
+ update<TFilterOutput extends TInput, TMapOutput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>, TFilterOutput>, mapFn: AsyncMap<TFilterOutput, IAsyncCollection<TInput>, TMapOutput>, throwOnIndexOverflow?: boolean): IAsyncCollection<UpdatedItem<TInput, TFilterOutput, TMapOutput>>;
77
126
  /**
78
- * The page method returns a new collection containing the items that would be present on a given page number.
79
- * The method accepts the page number as its first argument and the number of items to show per page as its second argument:
127
+ * The <i>page</i> method returns a new collection containing the items that would be present on <i>{@link PageSettings | PageSettings.page}</i> with custom <i>{@link PageSettings | PageSettings.pageSize}</i>.
80
128
  * @example
81
129
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6, 7, 8, 9]);
82
130
  * const page = collection.page({
83
- * page: 2,
84
- * pageSize: 3
131
+ * page: 2,
132
+ * pageSize: 3
85
133
  * });
86
134
  * await page.toArray();
87
135
  * // [4, 5, 6]
88
136
  */
89
137
  page(settings: PageSettings): IAsyncCollection<TInput>;
90
138
  /**
91
- * The sum method returns the sum of all items in the collection. If the collection contains nested arrays or objects,
92
- * you should pass a map function that returns a number to be used in sum calculation.
93
- * You can only pass filter to filter out the items you want:
139
+ * The <i>sum</i> method returns the sum of all items in the collection. If the collection includes other than number items an error will be thrown.
94
140
  * @example
95
141
  * const collection = new AsyncIterableCollection([1, 2, 3]);
96
142
  * await collection.sum();
@@ -101,9 +147,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
101
147
  */
102
148
  sum(): Promise<EnsureType<TInput, number>>;
103
149
  /**
104
- * The average method returns the average of all items in the collection. If the collection contains nested arrays or objects,
105
- * you should pass a map function that returns a number to be used in average calculation.
106
- * You can only pass filter to filter out the items you want:
150
+ * The <i>average</i> method returns the average of all items in the collection. If the collection includes other than number items an error will be thrown.
107
151
  * @example
108
152
  * const collection = new AsyncIterableCollection([1, 2, 3]);
109
153
  * await collection.average();
@@ -114,9 +158,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
114
158
  */
115
159
  average(): Promise<EnsureType<TInput, number>>;
116
160
  /**
117
- * The median method returns the median of all items in the collection. If the collection contains nested arrays or objects,
118
- * you should pass a map function that returns a number to be used in median calculation.
119
- * You can only pass filter to filter out the items you want:
161
+ * The <i>median</i> method returns the median of all items in the collection. If the collection includes other than number items an error will be thrown.
120
162
  * @example
121
163
  * const collection = new AsyncIterableCollection([1, 2, 3]);
122
164
  * await collection.median();
@@ -126,11 +168,9 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
126
168
  * @throws {IndexOverflowError} {@link IndexOverflowError}
127
169
  * @throws {TypeError} {@link TypeError}
128
170
  */
129
- median(throwOnNumberLimit?: boolean): Promise<EnsureType<TInput, number>>;
171
+ median(throwOnIndexOverflow?: boolean): Promise<EnsureType<TInput, number>>;
130
172
  /**
131
- * The min method returns the min of all items in the collection. If the collection contains nested arrays or objects,
132
- * you should pass a map function that returns a number to be used in min calculation.
133
- * You can only pass filter to filter out the items you want:
173
+ * The <i>min</i> method returns the min of all items in the collection. If the collection includes other than number items an error will be thrown.
134
174
  * @example
135
175
  * const collection = new AsyncIterableCollection([1, 2, 3]);
136
176
  * await collection.min();
@@ -141,9 +181,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
141
181
  */
142
182
  min(): Promise<EnsureType<TInput, number>>;
143
183
  /**
144
- * The max method returns the max of all items in the collection. If the collection contains nested arrays or objects,
145
- * you should pass a map function that returns a number to be used in max calculation.
146
- * You can only pass filter to filter out the items you want:
184
+ * The <i>max</i> method returns the max of all items in the collection. If the collection includes other than number items an error will be thrown.
147
185
  * @example
148
186
  * const collection = new AsyncIterableCollection([1, 2, 3]);
149
187
  * await collection.max();
@@ -154,7 +192,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
154
192
  */
155
193
  max(): Promise<EnsureType<TInput, number>>;
156
194
  /**
157
- * The percentage method may be used to quickly determine the percentage of items in the collection that pass a given truth test
195
+ * The <i>percentage</i> method may be used to quickly determine the percentage of items in the collection that pass <i>predicateFn</i>.
158
196
  * @example
159
197
  * const collection = new AsyncIterableCollection([1, 1, 2, 2, 2, 3]);
160
198
  * await collection.percentage(value => value === 1);
@@ -163,10 +201,9 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
163
201
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
164
202
  * @throws {IndexOverflowError} {@link IndexOverflowError}
165
203
  */
166
- percentage(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<number>;
204
+ percentage(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<number>;
167
205
  /**
168
- * The some method determines whether the collection has a given item.
169
- * You must pass a closure to the some method to determine if an element exists in the collection matching a given truth test:
206
+ * The <i>some</i> method determines whether at least one item in the collection matches <i>predicateFn</i>.
170
207
  * @example
171
208
  * const collection = new AsyncIterableCollection([0, 1, 2, 3, 4, 5]);
172
209
  * await collection.some(item => item === 1);
@@ -175,9 +212,9 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
175
212
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
176
213
  * @throws {IndexOverflowError} {@link IndexOverflowError}
177
214
  */
178
- some<TOutput extends TInput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>, TOutput>, throwOnNumberLimit?: boolean): Promise<boolean>;
215
+ some<TOutput extends TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>, TOutput>, throwOnIndexOverflow?: boolean): Promise<boolean>;
179
216
  /**
180
- * The every method may be used to verify that all elements of a collection pass a given truth test:
217
+ * The <i>every</i> method determines whether all items in the collection matches <i>predicateFn</i>.
181
218
  * @example
182
219
  * const collection = new AsyncIterableCollection([0, 1, 2, 3, 4, 5]);
183
220
  * await collection.every(item => item < 6);
@@ -186,9 +223,9 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
186
223
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
187
224
  * @throws {IndexOverflowError} {@link IndexOverflowError}
188
225
  */
189
- every<TOutput extends TInput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>, TOutput>, throwOnNumberLimit?: boolean): Promise<boolean>;
226
+ every<TOutput extends TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>, TOutput>, throwOnIndexOverflow?: boolean): Promise<boolean>;
190
227
  /**
191
- * The take method returns items in the collection until the given callback returns true:
228
+ * The <i>take</i> method takes the first <i>limit</i> items.
192
229
  * @example
193
230
  * const collection = new AsyncIterableCollection([0, 1, 2, 3, 4, 5]);
194
231
  * const chunk = collection.take(3);
@@ -200,52 +237,51 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
200
237
  * await chunk.toArray();
201
238
  * // [4, 5]
202
239
  */
203
- take(limit: number, throwOnNumberLimit?: boolean): IAsyncCollection<TInput>;
240
+ take(limit: number, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput>;
204
241
  /**
205
- * The takeUntil method returns items in the collection until the given callback returns true:
242
+ * The <i>takeUntil</i> method takes items until <i>predicateFn</i> returns true.
206
243
  * @example
207
244
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
208
245
  * const chunk = collection.takeUntil(item => item >= 3);
209
246
  * await chunk.toArray();
210
247
  * // [1, 2]
211
248
  */
212
- takeUntil(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): IAsyncCollection<TInput>;
249
+ takeUntil(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput>;
213
250
  /**
214
- * The takeWhile method returns items in the collection until the given callback returns false:
251
+ * The <i>takeWhile</i> method takes items until <i>predicateFn</i> returns false.
215
252
  * @example
216
253
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
217
- * const chunk = collection.takeWhile(item => item < 3);
254
+ * const chunk = collection.takeWhile(item => item < 4);
218
255
  * await chunk.toArray();
219
- * // [1, 2]
256
+ * // [1, 2, 3]
220
257
  */
221
- takeWhile(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): IAsyncCollection<TInput>;
258
+ takeWhile(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput>;
222
259
  /**
223
- * The skip method returns a new collection, with the given number of elements removed from the beginning of the collection:
260
+ * The <i>skip</i> method skips the first <i>offset</i> items.
224
261
  * @example
225
262
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).skip(4);
226
263
  * await collection.toArray();
227
264
  * // [5, 6, 7, 8, 9, 10]
228
265
  */
229
- skip(offset: number, throwOnNumberLimit?: boolean): IAsyncCollection<TInput>;
266
+ skip(offset: number, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput>;
230
267
  /**
231
- * The skipUntil method skips over items from the collection until the given callback returns true
232
- * and then returns the remaining items in the collection as a new collection instance:
268
+ * The <i>skipUntil</i> method skips items until <i>predicateFn</i> returns true.
233
269
  * @example
234
270
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]).skipUntil(item => item >= 3);
235
271
  * await collection.toArray();
236
272
  * // [3, 4]
237
273
  */
238
- skipUntil(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): IAsyncCollection<TInput>;
274
+ skipUntil(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput>;
239
275
  /**
240
- * The skipWhile method skips over items from the collection while the given callback returns false and then returns the remaining items in the collection as a new collection:
276
+ * The <i>skipWhile</i> method skips items until <i>predicateFn</i> returns false.
241
277
  * @example
242
278
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]).skipWhile(item => item <= 3);
243
279
  * await collection.toArray();
244
280
  * // [4]
245
281
  */
246
- skipWhile(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): IAsyncCollection<TInput>;
282
+ skipWhile(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput>;
247
283
  /**
248
- * The when method will execute the given callback when the first argument given to the method evaluates to true:
284
+ * The <i>when</i> method will execute <i>callback</i> when <i>condition</i> evaluates to true.
249
285
  * @example
250
286
  * const collection = new AsyncIterableCollection([1, 2, 3, 4])
251
287
  * .when(true, collection => collection.append([-3]))
@@ -255,7 +291,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
255
291
  */
256
292
  when<TExtended = TInput>(condition: boolean, callback: AsyncModifier<IAsyncCollection<TInput>, IAsyncCollection<TExtended>>): IAsyncCollection<TInput | TExtended>;
257
293
  /**
258
- * The whenEmpty method will execute the given callback when the collection is empty:
294
+ * The <i>whenEmpty</i> method will execute <i>callback</i> when the collection is empty.
259
295
  * @example
260
296
  * const collection = new AsyncIterableCollection([])
261
297
  * .whenEmpty(collection => collection.append([-3]))
@@ -269,7 +305,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
269
305
  */
270
306
  whenEmpty<TExtended = TInput>(callback: AsyncModifier<IAsyncCollection<TInput>, IAsyncCollection<TExtended>>): IAsyncCollection<TInput | TExtended>;
271
307
  /**
272
- * The whenNot method will execute the given callback when the first argument given to the method evaluates to false:
308
+ * The <i>whenNot</i> method will execute <i>callback</i> when <i>condition</i> evaluates to false.
273
309
  * @example
274
310
  * const collection = new AsyncIterableCollection([1, 2, 3, 4])
275
311
  * .whenNot(true, collection => collection.append([-3]))
@@ -279,7 +315,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
279
315
  */
280
316
  whenNot<TExtended = TInput>(condition: boolean, callback: AsyncModifier<IAsyncCollection<TInput>, IAsyncCollection<TExtended>>): IAsyncCollection<TInput | TExtended>;
281
317
  /**
282
- * The whenNotEmpty method will execute the given callback when the collection is empty:
318
+ * The <i>whenNotEmpty</i> method will execute <i>callback</i> when the collection is not empty.
283
319
  * @example
284
320
  * const collection = new AsyncIterableCollection([])
285
321
  * .whenNotEmpty(collection => collection.append([-3]))
@@ -293,29 +329,40 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
293
329
  */
294
330
  whenNotEmpty<TExtended = TInput>(callback: AsyncModifier<IAsyncCollection<TInput>, IAsyncCollection<TExtended>>): IAsyncCollection<TInput | TExtended>;
295
331
  /**
296
- * The pipe method passes the collection to the given closure and returns the result of the executed closure:
332
+ * The <i>pipe</i> method passes the orignal collection to <i>callback</i> and returns the result from <i>callback</i>.
333
+ * This method is useful when you want compose multiple smaller functions.
297
334
  * @example
298
- * const collection = new AsyncIterableCollection([1, 2, 3]);
299
- * const piped = await collection.pipe(collection => collection.sum());
300
- * // 6
335
+ * const collection = new AsyncIterableCollection([1, "2", "a", 1, 3, {}]);
336
+ *
337
+ * function toNbrs<TInput>(collection: IAsyncCollection<TInput>): IAsyncCollection<number> {
338
+ * return collection.map(item => Number(item)).reject(nbr => Number.isNaN(nbr)))
339
+ * }
340
+ * function nbrToStr(collection: IAsyncCollection<number>): IAsyncCollection<string> {
341
+ * return collection.map(nbr => String.fromCharCode(nbr)).repeat(2).join("_")
342
+ * }
343
+ *
344
+ * const piped = await collection
345
+ * .pipe(toNbrs)
346
+ * .then(nbrToStr);
347
+ * // "\x01_\x02_\x01_\x03_\x01_\x02_\x01_\x03"
301
348
  */
302
349
  pipe<TOutput = TInput>(callback: AsyncTransform<IAsyncCollection<TInput>, TOutput>): Promise<TOutput>;
303
350
  /**
304
- * The tap method passes the collection to the given callback, allowing you to "tap" into the collection at a specific point
305
- * and do something with the items while not affecting the collection itself.The collection is then returned by the tap method:
351
+ * The <i>tap</i> method passes a copy of the original collection to <i>callback</i>, allowing you to do something with the items while not affecting the original collection.
306
352
  * @example
307
- * const collection = await new AsyncIterableCollection([1, 2, 3, 4, 5, 6])
353
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6])
308
354
  * .tap(collection => {
309
355
  * collection
310
356
  * .filter(value => value % 2 === 0)
311
357
  * .forEach(value => console.log(value))
312
- * })
313
- * .toArray();
358
+ * });
359
+ * await collection.toArray();
314
360
  * // [1, 2, 3, 4, 5, 6]
315
361
  */
316
362
  tap(callback: AsyncTap<IAsyncCollection<TInput>>): IAsyncCollection<TInput>;
317
363
  /**
318
- * The chunk method breaks the collection into multiple, smaller collections of a given size:
364
+ * The <i>chunk</i> method breaks the collection into multiple, smaller collections of size <i>chunkSize</i>.
365
+ * If <i>chunkSize</i> is not divisible with total number of items then the last chunk will contain the remaining items.
319
366
  * @example
320
367
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6, 7]);
321
368
  * const chunks = collection.chunk(4);
@@ -324,38 +371,47 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
324
371
  */
325
372
  chunk(chunkSize: number): IAsyncCollection<IAsyncCollection<TInput>>;
326
373
  /**
327
- * The chunkWhile method breaks the collection into multiple, smaller collections based on the evaluation of the given callback.
328
- * The chunk variable passed to the closure may be used to inspect the previous element:
374
+ * The <i>chunkWhile</i> method breaks the collection into multiple, smaller collections based on the evaluation of <i>predicateFn</i>.
375
+ * The chunk variable passed to the <i>predicateFn</i> may be used to inspect the previous item.
329
376
  * @example
330
- * const collection = new AsyncIterableCollection("AABBCCCD".split(""));
377
+ * const collection = new AsyncIterableCollection("AABBCCCD");
331
378
  * const chunks = collection.chunkWhile((value, index, chunk) => {
332
379
  * return value === chunk.last();
333
380
  * });
334
381
  * await chunks.toArray();
335
382
  * // [["A", "A"], ["B", "B"], ["C", "C", "C"], ["D"]]
336
383
  */
337
- chunkWhile(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): IAsyncCollection<IAsyncCollection<TInput>>;
384
+ chunkWhile(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<IAsyncCollection<TInput>>;
338
385
  /**
339
- * The split method breaks a collection into the given number of groups:
386
+ * The <i>split</i> method breaks a collection evenly into <i>chunkAmount</i> of chunks.
340
387
  * @example
341
388
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]);
342
389
  * const chunks = collection.split(3);
343
390
  * await chunks.toArray();
344
391
  * // [[1, 2], [3, 4], [5]]
392
+ * @example
393
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6]);
394
+ * const chunks = collection.split(3);
395
+ * await chunks.toArray();
396
+ * // [[1, 2], [3, 4], [5, 6]]
397
+ * @example
398
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6, 7]);
399
+ * const chunks = collection.split(3);
400
+ * await chunks.toArray();
401
+ * // [[1, 2, 7], [3, 4], [5, 6]]
345
402
  */
346
- split(chunkAmount: number, throwOnNumberLimit?: boolean): IAsyncCollection<IAsyncCollection<TInput>>;
403
+ split(chunkAmount: number, throwOnIndexOverflow?: boolean): IAsyncCollection<IAsyncCollection<TInput>>;
347
404
  /**
348
- * The partition method is used to separate elements that pass a given truth test from those that do not:
405
+ * The <i>partition</i> method is used to separate items that pass <i>predicateFn</i> from those that do not.
349
406
  * @example
350
407
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6]);
351
408
  * collection.partition(item => item < 3);
352
409
  * await collection.toArray();
353
410
  * // [[1, 2], [3, 4, 5, 6]]
354
411
  */
355
- partition(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): IAsyncCollection<IAsyncCollection<TInput>>;
412
+ partition(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): IAsyncCollection<IAsyncCollection<TInput>>;
356
413
  /**
357
- * The sliding method returns a new collection of chunks representing a "sliding window" view of the items in the collection:
358
- * @experimental
414
+ * The <i>sliding</i> method returns a new collection of chunks representing a "sliding window" view of the items in the collection.
359
415
  * @example
360
416
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]).sliding(2);
361
417
  * await collection.toArray();
@@ -363,36 +419,79 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
363
419
  */
364
420
  sliding(settings: SlidingSettings): IAsyncCollection<IAsyncCollection<TInput>>;
365
421
  /**
366
- * The groupBy method groups the collection's items by a given map function:
422
+ * The <i>groupBy</i> method groups the collection's items by {@link GroupBySettings | GroupBySettings.selectFn}.
423
+ * By default the equality check occurs on the item.
367
424
  * @example
368
425
  * const collection = new AsyncIterableCollection(["a", "a", "a", "b", "b", "c"]);
369
426
  * const group = await collection
370
427
  * .groupBy()
371
- * .map(async ([key, value]) => [key, await value.toArray()]).toArray();
372
- * // [["a", ["a", "a", "a"]], ["b", ["b", "b", "b"]], ["c", ["c"]]]
428
+ * .map(([key, collection]) => [key, collection.toArray()])
429
+ * .toArray();
430
+ * // [
431
+ * // [
432
+ * // "a",
433
+ * // ["a", "a", "a"]
434
+ * // ],
435
+ * // [
436
+ * // "b",
437
+ * // ["b", "b"]
438
+ * // ],
439
+ * // [
440
+ * // "c",
441
+ * // ["c"]
442
+ * // ]
443
+ * // ]
373
444
  * @example
374
445
  * const collection = new AsyncIterableCollection(["alice@gmail.com", "bob@yahoo.com", "carlos@gmail.com"]);
375
446
  * const group = await collection
376
- * .groupBy(item => item.split("@")[1])
377
- * .map(([key, value]) => [key, await value.toArray()]).toArray();
378
- * // [["gmail.com", ["alice@gmail.com", "carlos@gmail.com"]], ["yahoo.com", ["bob@yahoo.com"]]]
447
+ * .groupBy({
448
+ * selectFn: item => item.split("@")[1]
449
+ * })
450
+ * .map(([key, collection]) => [key, collection.toArray()])
451
+ * .toArray();
452
+ * // [
453
+ * // [
454
+ * // "gmail.com",
455
+ * // ["alice@gmail.com", "carlos@gmail.com"]
456
+ * // ],
457
+ * // [
458
+ * // "yahoo.com",
459
+ * // ["bob@yahoo.com"]
460
+ * // ]
461
+ * // ]
379
462
  */
380
463
  groupBy<TOutput = TInput>(settings?: AsyncGroupBySettings<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<RecordItem<TOutput, IAsyncCollection<TInput>>>;
381
464
  /**
382
- * The countBy method counts the occurrences of values in the collection.
383
- * By default, the method counts the occurrences of every element, allowing you to count certain "types" of elements in the collection:
465
+ * The <i>countBy</i> method counts the occurrences of values in the collection by {@link CountBySettings | CountBySettings.selectFn}.
466
+ * By default the equality check occurs on the item.
384
467
  * @example
385
468
  * const collection = new AsyncIterableCollection(["a", "a", "a", "b", "b", "c"]);
386
- * const count = await collection.countBy();
387
- * // [["a", 3], ["b", 2], ["c", 1]]
469
+ * const count = await collection
470
+ * .countBy()
471
+ * .map(([key, collection]) => [key, collection.toArray()])
472
+ * .toArray();
473
+ * // [
474
+ * // ["a", 3],
475
+ * // ["b", 2],
476
+ * // ["c", 1]
477
+ * // ]
388
478
  * @example
389
479
  * const collection = new AsyncIterableCollection(["alice@gmail.com", "bob@yahoo.com", "carlos@gmail.com"]);
390
- * const count = await collection.countBy(item => item.split("@")[1])
391
- * // [["gmail.com", 2], ["yahoo.com", 1]]
480
+ * const count = await collection
481
+ * .countBy({
482
+ * selectFn: item => item.split("@")[1]
483
+ * })
484
+ * .map(([key, collection]) => [key, collection.toArray()])
485
+ * .toArray();
486
+ * // [
487
+ * // ["gmail.com", 2],
488
+ * // ["yahoo.com", 1]
489
+ * // ]
392
490
  */
393
- countBy<TOutput = TInput>(settings?: AsyncGroupBySettings<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<RecordItem<TOutput, number>>;
491
+ countBy<TOutput = TInput>(settings?: AsyncCountBySettings<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<RecordItem<TOutput, number>>;
394
492
  /**
395
- * The unique method removes all duplicate values from the collection:
493
+ * The <i>unique</i> method removes all duplicate values from the collection by {@link UniqueSettings | UniqueSettings.selectFn}.
494
+ * By default the equality check occurs on the item.
396
495
  * @example
397
496
  * const collection = new AsyncIterableCollection([1, 1, 2, 2, 3, 4, 2]);
398
497
  * await collection.unique().toArray();
@@ -405,73 +504,141 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
405
504
  * { name: "Galaxy S6", brand: "Samsung", type: "phone" },
406
505
  * { name: "Galaxy Gear", brand: "Samsung", type: "watch" },
407
506
  * ]);
408
- * const unique = collection.unique(item => item.brand);
409
- * await unique.toArray();
507
+ * const unique = await collection.unique({
508
+ * selectFn: item => item.brand
509
+ * }).toArray();
410
510
  * // [
411
- * { name: "iPhone 6", brand: "Apple", type: "phone" },
412
- * { name: "Galaxy S6", brand: "Samsung", type: "phone" },
413
- * ]
511
+ * // { name: "iPhone 6", brand: "Apple", type: "phone" },
512
+ * // { name: "Galaxy S6", brand: "Samsung", type: "phone" },
513
+ * // ]
414
514
  */
415
- unique<TOutput = TInput>(settings?: AsyncGroupBySettings<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<TInput>;
515
+ unique<TOutput = TInput>(settings?: AsyncUniqueSettings<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<TInput>;
416
516
  /**
417
- * The diff method will return the values in the original collection that are not present in the given iterable:
517
+ * The <i>difference</i> method will return the values in the original collection that are not present in <i>iterable</i>.
518
+ * By default the equality check occurs on the item.
418
519
  * @example
419
- * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]);
520
+ * const collection = new AsyncIterableCollection([1, 2, 2, 3, 4, 5]);
420
521
  * const difference = collection.difference([2, 4, 6, 8]);
421
522
  * await difference.toArray();
422
523
  * // [1, 3, 5]
524
+ * @example
525
+ * const collection = new AsyncIterableCollection([
526
+ * { name: "iPhone 6", brand: "Apple", type: "phone" },
527
+ * { name: "iPhone 5", brand: "Apple", type: "phone" },
528
+ * { name: "Apple Watch", brand: "Apple", type: "watch" },
529
+ * { name: "Galaxy S6", brand: "Samsung", type: "phone" },
530
+ * { name: "Galaxy Gear", brand: "Samsung", type: "watch" },
531
+ * ]);
532
+ * const difference = collection.difference(
533
+ * [
534
+ * { name: "Apple Watch", brand: "Apple", type: "watch" },
535
+ * ],
536
+ * (product) => product.type
537
+ * );
538
+ * await difference.toArray();
539
+ * // [
540
+ * // { name: "iPhone 6", brand: "Apple", type: "phone" },
541
+ * // { name: "iPhone 5", brand: "Apple", type: "phone" },
542
+ * // { name: "Galaxy S6", brand: "Samsung", type: "phone" },
543
+ * // ]
423
544
  */
424
- difference<TOutput = TInput>(iterable: AsyncIterableValue<TInput>, map?: AsyncMap<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<TInput>;
545
+ difference<TOutput = TInput>(iterable: AsyncIterableValue<TInput>, selectFn?: AsyncMap<TInput, IAsyncCollection<TInput>, TOutput>): IAsyncCollection<TInput>;
425
546
  /**
426
- * The repeat method will repat the current collection given amount
547
+ * The <i>repeat</i> method will repeat the original collection <i>amount</i> times.
427
548
  * @example
428
- * const collection = new ListCollection([1, 2, 3]);
549
+ * const collection = new AsyncIterableCollection([1, 2, 3]);
429
550
  * const newCollection = collection.repeat(3);
430
- * newCollection.toArray();
551
+ * await newCollection.toArray();
431
552
  * // [1, 2, 3, 1, 2, 3, 1, 2, 3]
432
553
  */
433
554
  repeat(amount: number): IAsyncCollection<TInput>;
434
555
  /**
435
- * The padStart method pads this collection with another item (multiple times, if needed) until the resulting collection reaches the given length.
436
- * The padding is applied from the start of this collection:
556
+ * The <i>padStart</i> method pads this collection with <i>fillItems</i> until the resulting collection size reaches <i>maxLength</i>.
557
+ * The padding is applied from the start of this collection.
437
558
  * @example
438
- * new ListCollection("abc").padStart(10, "foo").join({ seperator: "" });
559
+ * const collection = new AsyncIterableCollection("abc").padStart(10, "foo");
560
+ * await collection.join({ seperator: ""});
439
561
  * // "foofoofabc"
440
- *
441
- * new ListCollection("abc").padStart(6, "123465").join({ seperator: "" });
562
+ * @example
563
+ * const collection = new AsyncIterableCollection("abc").padStart(6, "123465");
564
+ * await collection.join({ seperator: ""});
442
565
  * // "123abc"
443
- *
444
- * new ListCollection("abc").padStart(8, "0").join({ seperator: "" });
566
+ * @example
567
+ * const collection = new AsyncIterableCollection("abc").padStart(8, "0");
568
+ * await collection.join({ seperator: ""});
445
569
  * // "00000abc"
446
- *
447
- * new ListCollection("abc").padStart(1, "_").join({ seperator: "" });
570
+ * @example
571
+ * const collection = new AsyncIterableCollection("abc").padStart(1, "_");
572
+ * await collection.join({ seperator: ""});
448
573
  * // "abc"
449
574
  */
450
- padStart<TExtended = TInput>(maxLength: number, fillItems: AsyncIterableValue<TExtended>): IAsyncCollection<TInput | TExtended>;
575
+ padStart<TExtended = TInput>(maxLength: number, fillItems: Iterable<TExtended>): IAsyncCollection<TInput | TExtended>;
451
576
  /**
452
- * The padEnd method pads this collection with another item (multiple times, if needed) until the resulting collection reaches the given length.
453
- * The padding is applied from the end of this collection:
577
+ * The <i>padEnd</i> method pads this collection with <i>fillItems</i> until the resulting collection size reaches <i>maxLength</i>.
578
+ * The padding is applied from the end of this collection.
454
579
  * @example
455
- * new ListCollection("abc").padEnd(10, "foo").join({ seperator: "" });
580
+ * const collection = new AsyncIterableCollection("abc").padEnd(10, "foo");
581
+ * await collection.join({ seperator: ""});
456
582
  * // "abcfoofoof"
457
- *
458
- * new ListCollection("abc").padEnd(6, "123465").join({ seperator: "" });
583
+ * @example
584
+ * const collection = new AsyncIterableCollection("abc").padEnd(6, "123465");
585
+ * await collection.join({ seperator: ""});
459
586
  * // "abc123"
460
- *
461
- * new ListCollection("abc").padEnd(8, "0").join({ seperator: "" });
587
+ * @example
588
+ * const collection = new AsyncIterableCollection("abc").padEnd(8, "0");
589
+ * await collection.join({ seperator: ""});
462
590
  * // "abc00000"
463
- *
464
- * new ListCollection("abc").padEnd(1, "_").join({ seperator: "" });
591
+ * @example
592
+ * const collection = new AsyncIterableCollection("abc").padEnd(1, "_");
593
+ * await collection.join({ seperator: ""});
465
594
  * // "abc"
466
595
  */
467
- padEnd<TExtended = TInput>(maxLength: number, fillItems: AsyncIterableValue<TExtended>): IAsyncCollection<TInput | TExtended>;
596
+ padEnd<TExtended = TInput>(maxLength: number, fillItems: Iterable<TExtended>): IAsyncCollection<TInput | TExtended>;
468
597
  /**
469
- * The slice is the same as Array.slice method. Se documentation on mdn:
470
- * @link {https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice}
598
+ * The <i>slice</i> method creates porition of the original collection selected from {@link SliceSettings | SliceSettings.start} and {@link SliceSettings | SliceSettings.end}
599
+ * where {@link SliceSettings | SliceSettings.start} and {@link SliceSettings | SliceSettings.end} (end not included) represent the index of items in the collection.
600
+ * @example
601
+ * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]);
602
+ * await collection.slice({
603
+ * start: 3
604
+ * }).toArray();
605
+ * // ["d", "e", "f"]
606
+ * @example
607
+ * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]);
608
+ * await collection.slice({
609
+ * end: 2,
610
+ * }).toArray();
611
+ * // ["a", "b"]
612
+ * @example
613
+ * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]);
614
+ * await collection.slice({
615
+ * start: 2
616
+ * end: 5,
617
+ * }).toArray();
618
+ * // ["c", "d", "e"]
619
+ * @example
620
+ * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]);
621
+ * await collection.slice({
622
+ * start: -2
623
+ * }).toArray();
624
+ * // ["e", "f"]
625
+ * @example
626
+ * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]);
627
+ * await collection.slice({
628
+ * end: -2
629
+ * }).toArray();
630
+ * // ["a", "b", "c", "d"]
631
+ * @example
632
+ * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]);
633
+ * await collection.slice({
634
+ * start: -4,
635
+ * end: -2
636
+ * }).toArray();
637
+ * // ["c", "d"]
471
638
  */
472
639
  slice(settings?: SliceSettings): IAsyncCollection<TInput>;
473
640
  /**
474
- * The prepend method adds items to the beginning of the collection:
641
+ * The <i>prepend</i> method adds <i>iterable</i> to the beginning of the collection.
475
642
  * @example
476
643
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]).prepend([-1, 20]);
477
644
  * await collection.toArray();
@@ -479,7 +646,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
479
646
  */
480
647
  prepend<TExtended = TInput>(iterable: AsyncIterableValue<TInput | TExtended>): IAsyncCollection<TInput | TExtended>;
481
648
  /**
482
- * The append method adds items to the end of the collection:
649
+ * The <i>append</i> method adds <i>iterable</i> to the end of the collection.
483
650
  * @example
484
651
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]).append([-1, -2]);
485
652
  * await collection.toArray();
@@ -487,23 +654,23 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
487
654
  */
488
655
  append<TExtended = TInput>(iterable: AsyncIterableValue<TInput | TExtended>): IAsyncCollection<TInput | TExtended>;
489
656
  /**
490
- * The insertBefore method adds items before a specific filtered item:
657
+ * The <i>insertBefore</i> method adds <i>iterable</i> before the first item that matches <i>predicateFn</i>.
491
658
  * @example
492
659
  * const collection = new AsyncIterableCollection([1, 2, 2, 3, 4, 5]).insertBefore(item => item === 2, [-1, 20]);
493
660
  * await collection.toArray();
494
661
  * // [1, -1, 20, 2, 2, 3, 4, 5]
495
662
  */
496
- insertBefore<TExtended = TInput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, iterable: AsyncIterableValue<TInput | TExtended>, throwOnNumberLimit?: boolean): IAsyncCollection<TInput | TExtended>;
663
+ insertBefore<TExtended = TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, iterable: AsyncIterableValue<TInput | TExtended>, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput | TExtended>;
497
664
  /**
498
- * The insertAfter method adds items after a specific filtered item:
665
+ * The <i>insertAfter</i> method adds <i>iterable</i> after the first item that matches <i>predicateFn</i>.
499
666
  * @example
500
667
  * const collection = new AsyncIterableCollection([1, 2, 2, 3, 4, 5]).insertAfter(item => item === 2, [-1, 20]);
501
668
  * await collection.toArray();
502
669
  * // [1, 2, -1, 20, 2, 3, 4, 5]
503
670
  */
504
- insertAfter<TExtended = TInput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, iterable: AsyncIterableValue<TInput | TExtended>, throwOnNumberLimit?: boolean): IAsyncCollection<TInput | TExtended>;
671
+ insertAfter<TExtended = TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, iterable: AsyncIterableValue<TInput | TExtended>, throwOnIndexOverflow?: boolean): IAsyncCollection<TInput | TExtended>;
505
672
  /**
506
- * The crossJoin method cross joins the collection's values among the given arrays or collections, returning a Cartesian product with all possible permutations:
673
+ * The <i>crossJoin</i> method cross joins the collection's values among <i>iterables</i>, returning a Cartesian product with all possible permutations.
507
674
  * @example
508
675
  * const collection = new AsyncIterableCollection([1, 2]);
509
676
  * const matrix = collection.crossJoin(["a", "b"]);
@@ -529,24 +696,81 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
529
696
  * // [2, "b", "II"],
530
697
  * // ]
531
698
  */
532
- crossJoin<TExtended = TInput>(...iterables: Array<AsyncIterableValue<TExtended>>): IAsyncCollection<IAsyncCollection<TInput | TExtended>>;
699
+ crossJoin<TExtended = TInput>(...iterables: Array<Iterable<TExtended>>): IAsyncCollection<IAsyncCollection<TInput | TExtended>>;
533
700
  /**
534
- * The zip method merges together the values of the given array with the values of the original collection at their corresponding index:
701
+ * The <i>zip</i> method merges together the values of <i>iterable</i> with the values of the collection at their corresponding index.
702
+ * The returned collection has size of the shortest collection.
535
703
  * @example
536
704
  * const collection = new AsyncIterableCollection(["Chair", "Desk"]);
537
705
  * const zipped = collection.zip([100, 200]);
538
706
  * await zipped.toArray();
539
707
  * // [["Chari", 100], ["Desk", 200]]
708
+ * @example
709
+ * const collection = new AsyncIterableCollection(["Chair", "Desk", "Couch"]);
710
+ * const zipped = collection.zip([100, 200]);
711
+ * await zipped.toArray();
712
+ * // [["Chari", 100], ["Desk", 200]]
713
+ * @example
714
+ * const collection = new AsyncIterableCollection(["Chair", "Desk"]);
715
+ * const zipped = collection.zip([100, 200, 300]);
716
+ * await zipped.toArray();
717
+ * // [["Chari", 100], ["Desk", 200]]
540
718
  */
541
719
  zip<TExtended>(iterable: AsyncIterableValue<TExtended>): IAsyncCollection<RecordItem<TInput, TExtended>>;
542
- sort(compare?: Comparator<TInput>): IAsyncCollection<TInput>;
720
+ /**
721
+ * The <i>sort</i> method sorts the collection. You can provide a <i>comparator</i> function.
722
+ * @example
723
+ * const collection = new AsyncIterableCollection([-1, 2, 4, 3]);
724
+ * await collection.sort().toArray();
725
+ * // [-1, 2, 3, 4]
726
+ * @example
727
+ * const collection = new AsyncIterableCollection([
728
+ * { name: "Anders", age: 30 },
729
+ * { name: "Joe", age: 20 },
730
+ * { name: "Hasan", age: 25 },
731
+ * { name: "Linda", age: 19 }
732
+ * ]);
733
+ * await collection.sort(({ age: ageA }, { age: ageB }) => ageA - ageB).toArray();
734
+ * // [
735
+ * // { name: "Linda", age: 19 }
736
+ * // { name: "Joe", age: 20 },
737
+ * // { name: "Hasan", age: 25 },
738
+ * // { name: "Anders", age: 30 },
739
+ * // ]
740
+ */
741
+ sort(comparator?: Comparator<TInput>): IAsyncCollection<TInput>;
742
+ /**
743
+ * The <i>reverse</i> method will reverse the order of the collection.
744
+ * The reversing of the collection will be applied in chunks that are the size of <i>{@link ReverseSettings | ReverseSettings.chunkSize}</i>.
745
+ * @example
746
+ * const collection = new AsyncIterableCollection([-1, 2, 4, 3]);
747
+ * await collection.reverse().toArray();
748
+ * // [3, 4, 2, -1]
749
+ */
543
750
  reverse(settings?: ReverseSettings): IAsyncCollection<TInput>;
751
+ /**
752
+ * The <i>shuffle</i> method randomly shuffles the items in the collection.
753
+ */
544
754
  shuffle(): IAsyncCollection<TInput>;
545
755
  /**
546
- * The first method returns the first element in the collection that passes a given truth test. By default it will get the first element:
756
+ * The <i>first</i> method returns the first item in the collection that passes <i>{@link FindSettings | FindSettings.predicateFn}</i>.
757
+ * By default it will get the first item. If the collection is empty or no items passes <i>{@link FindSettings | FindSettings.predicateFn}</i> than null i returned.
758
+ * @example
759
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
760
+ * await collection.first();
761
+ * // 1
762
+ * @example
763
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
764
+ * await collection.first({
765
+ * predicateFn: item => item > 2
766
+ * });
767
+ * // 3
547
768
  * @example
548
769
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
549
- * await collection.first({ filter: item => item > 2 });
770
+ * await collection.first({
771
+ * predicateFn: item => item > 10
772
+ * });
773
+ * // null
550
774
  * @throws {CollectionError} {@link CollectionError}
551
775
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
552
776
  * @throws {IndexOverflowError} {@link IndexOverflowError}
@@ -554,14 +778,59 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
554
778
  */
555
779
  first<TOutput extends TInput>(settings?: AsyncFindSettings<TInput, IAsyncCollection<TInput>, TOutput>): Promise<TOutput | null>;
556
780
  /**
557
- * The firstOr method is the same as first method but will return a provided default value if not found
781
+ * The <i>firstOr</i> method returns the first item in the collection that passes <i>{@link FindOrSettings | FindOrSettings.predicateFn}</i>
782
+ * By default it will get the first item. If the collection is empty or no items passes <i>{@link FindOrSettings | FindOrSettings.predicateFn}</i> than {@link FindOrSettings | FindOrSettings.defaultValue}.
783
+ * @example
784
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
785
+ * await collection.firstOr({
786
+ * defaultValue: -1
787
+ * });
788
+ * // 1
789
+ * @example
790
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
791
+ * await collection.firstOr({
792
+ * predicateFn: item => item > 2,
793
+ * defaultValue: -1
794
+ * });
795
+ * // 3
796
+ * @example
797
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
798
+ * await collection.firstOr({
799
+ * predicateFn: item => item > 10,
800
+ * defaultValue: -1
801
+ * });
802
+ * // -1
803
+ * @example
804
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
805
+ * await collection.firstOr({
806
+ * predicateFn: item => item > 10,
807
+ * defaultValue: () => -1
808
+ * });
809
+ * // -1
558
810
  * @throws {CollectionError} {@link CollectionError}
559
811
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
560
812
  * @throws {IndexOverflowError} {@link IndexOverflowError}
561
813
  */
562
814
  firstOr<TOutput extends TInput, TExtended = TInput>(settings: AsyncFindOrSettings<TInput, IAsyncCollection<TInput>, TOutput, TExtended>): Promise<TOutput | TExtended>;
563
815
  /**
564
- * The firstOrFail method is the same as first method but will throw an Error if not found
816
+ * The <i>firstOrFail</i> method returns the first item in the collection that passes <i>{@link FindSettings | FindSettings.predicateFn}</i>.
817
+ * By default it will get the first item. If the collection is empty or no items passes <i>{@link FindSettings | FindSettings.predicateFn}</i> than error is thrown.
818
+ * @example
819
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
820
+ * await collection.firstOrFail();
821
+ * // 1
822
+ * @example
823
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
824
+ * await collection.firstOrFail({
825
+ * predicateFn: item => item > 2
826
+ * });
827
+ * // 3
828
+ * @example
829
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
830
+ * await collection.firstOrFail({
831
+ * predicateFn: item => item > 10
832
+ * });
833
+ * // throws an error
565
834
  * @throws {CollectionError} {@link CollectionError}
566
835
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
567
836
  * @throws {ItemNotFoundError} {@link ItemNotFoundError}
@@ -569,25 +838,84 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
569
838
  */
570
839
  firstOrFail<TOutput extends TInput>(settings?: AsyncFindSettings<TInput, IAsyncCollection<TInput>, TOutput>): Promise<TOutput>;
571
840
  /**
572
- * The last method returns the last element in the collection that passes a given truth test. By default it will get the last element:
841
+ * The <i>last</i> method returns the last item in the collection that passes <i>{@link FindSettings | FindSettings.predicateFn}</i>.
842
+ * By default it will get the last item. If the collection is empty or no items passes <i>{@link FindSettings | FindSettings.predicateFn}</i> than null i returned.
573
843
  * @example
574
844
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
575
- * await collection.last({ filter: item => item > 2 });
576
- * // 4
845
+ * await collection.last();
846
+ * // 1
847
+ * @example
848
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
849
+ * await collection.last({
850
+ * predicateFn: item => item > 2
851
+ * });
852
+ * // 3
853
+ * @example
854
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
855
+ * await collection.last({
856
+ * predicateFn: item => item > 10
857
+ * });
858
+ * // null
577
859
  * @throws {CollectionError} {@link CollectionError}
578
860
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
579
861
  * @throws {IndexOverflowError} {@link IndexOverflowError}
862
+ * // 3
580
863
  */
581
864
  last<TOutput extends TInput>(settings?: AsyncFindSettings<TInput, IAsyncCollection<TInput>, TOutput>): Promise<TOutput | null>;
582
865
  /**
583
- * The lastOr method is the same as last method but will return a provided default value if not found
866
+ * The <i>lastOr</i> method returns the last item in the collection that passes <i>{@link FindOrSettings | FindOrSettings.predicateFn}</i>.
867
+ * By default it will get the last item. If the collection is empty or no items passes <i>{@link FindOrSettings | FindOrSettings.predicateFn}</i> than {@link FindOrSettings | FindOrSettings.defaultValue}.
868
+ * @example
869
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
870
+ * await collection.lastOr({
871
+ * defaultValue: -1
872
+ * });
873
+ * // 1
874
+ * @example
875
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
876
+ * await collection.lastOr({
877
+ * predicateFn: item => item > 2,
878
+ * defaultValue: -1
879
+ * });
880
+ * // 3
881
+ * @example
882
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
883
+ * await collection.lastOr({
884
+ * predicateFn: item => item > 10,
885
+ * defaultValue: -1
886
+ * });
887
+ * // -1
888
+ * @example
889
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
890
+ * await collection.lastOr({
891
+ * predicateFn: item => item > 10,
892
+ * defaultValue: () => -1
893
+ * });
894
+ * // -1
584
895
  * @throws {CollectionError} {@link CollectionError}
585
896
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
586
897
  * @throws {IndexOverflowError} {@link IndexOverflowError}
587
898
  */
588
899
  lastOr<TOutput extends TInput, TExtended = TInput>(settings: AsyncFindOrSettings<TInput, IAsyncCollection<TInput>, TOutput, TExtended>): Promise<TOutput | TExtended>;
589
900
  /**
590
- * The lastOrFail method is the same as last method but will throw an Error if not found
901
+ * The <i>lastOrFail</i> method returns the last item in the collection that passes <i>{@link FindSettings | FindSettings.predicateFn}</i>.
902
+ * By default it will get the last item. If the collection is empty or no items passes <i>{@link FindSettings | FindSettings.predicateFn}</i> than error is thrown.
903
+ * @example
904
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
905
+ * await collection.lastOrFail();
906
+ * // 1
907
+ * @example
908
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
909
+ * await collection.lastOrFail({
910
+ * predicateFn: item => item > 2
911
+ * });
912
+ * // 3
913
+ * @example
914
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
915
+ * await collection.lastOrFail({
916
+ * predicateFn: item => item > 10
917
+ * });
918
+ * // throws an error
591
919
  * @throws {CollectionError} {@link CollectionError}
592
920
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
593
921
  * @throws {ItemNotFoundError} {@link ItemNotFoundError}
@@ -595,7 +923,8 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
595
923
  */
596
924
  lastOrFail<TOutput extends TInput>(settings?: AsyncFindSettings<TInput, IAsyncCollection<TInput>, TOutput>): Promise<TOutput>;
597
925
  /**
598
- * The before method is the opposite of the after method. It returns the item before the given item. null is returned if the given item is not found or is the first item:
926
+ * The <i>before</i> method returns the item that comes before the first item that matches <i>predicateFn</i>.
927
+ * If the <i>predicateFn</i> does not match or matches the first item then null is returned.
599
928
  * @example
600
929
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
601
930
  * await collection.before(item => item === 2);
@@ -608,54 +937,100 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
608
937
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
609
938
  * @throws {IndexOverflowError} {@link IndexOverflowError}
610
939
  */
611
- before(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<TInput | null>;
940
+ before(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<TInput | null>;
612
941
  /**
613
- * The beforeOr method is the same as before method but will return a provided default value if not found
942
+ * The <i>beforeOr</i> method returns the item that comes before the first item that matches <i>predicateFn</i>.
943
+ * If the collection is empty or the <i>predicateFn</i> does not match or matches the first item then <i>defaultValue</i> is returned.
944
+ * @example
945
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
946
+ * await collection.beforeOr(-1, item => item === 2);
947
+ * // 1
948
+ * @example
949
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
950
+ * await collection.beforeOr(-1, item => item === 1);
951
+ * // -1
952
+ * @example
953
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
954
+ * await collection.beforeOr(() => -1, item => item === 1);
955
+ * // -1
614
956
  * @throws {CollectionError} {@link CollectionError}
615
957
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
616
958
  * @throws {IndexOverflowError} {@link IndexOverflowError}
617
959
  */
618
- beforeOr<TExtended = TInput>(defaultValue: AsyncLazyable<TExtended>, filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<TInput | TExtended>;
960
+ beforeOr<TExtended = TInput>(defaultValue: AsyncLazyable<TExtended>, predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<TInput | TExtended>;
619
961
  /**
620
- * The beforeOrFail method is the same as before method but will throw an Error if not found
962
+ * The <i>beforeOrFail</i> method returns the item that comes before the first item that matches <i>predicateFn</i>.
963
+ * If the collection is empty or the <i>predicateFn</i> does not match or matches the first item then an error is thrown.
964
+ * @example
965
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
966
+ * await collection.beforeOrFail(item => item === 2);
967
+ * // 1
968
+ * @example
969
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
970
+ * await collection.beforeOrFail(item => item === 1);
971
+ * // error is thrown
621
972
  * @throws {CollectionError} {@link CollectionError}
622
973
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
623
974
  * @throws {ItemNotFoundError} {@link ItemNotFoundError}
624
975
  * @throws {IndexOverflowError} {@link IndexOverflowError}
625
976
  */
626
- beforeOrFail(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<TInput>;
977
+ beforeOrFail(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<TInput>;
627
978
  /**
628
- * The after method returns the item after the given item. null is returned if the given item is not found or is the last item:
979
+ * The <i>after</i> method returns the item that comes after the first item that matches <i>predicateFn</i>.
980
+ * If the collection is empty or the <i>predicateFn</i> does not match or matches the last item then null is returned.
629
981
  * @example
630
982
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
631
983
  * await collection.after(item => item === 2);
632
- * // 3
984
+ * // 1
633
985
  * @example
634
986
  * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
635
- * await collection.after(item => item === 4);
987
+ * await collection.after(item => item === 1);
636
988
  * // null
637
989
  * @throws {CollectionError} {@link CollectionError}
638
990
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
639
991
  * @throws {IndexOverflowError} {@link IndexOverflowError}
640
992
  */
641
- after(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<TInput | null>;
993
+ after(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<TInput | null>;
642
994
  /**
643
- * The afterOr method is the same as after method but will return a provided default value if not found
995
+ * The <i>afterOr</i> method returns the item that comes after the first item that matches <i>predicateFn</i>.
996
+ * If the collection is empty or the <i>predicateFn</i> does not match or matches the last item then <i>defaultValue</i> is returned.
997
+ * @example
998
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
999
+ * await collection.afterOr(-1, item => item === 2);
1000
+ * // 1
1001
+ * @example
1002
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
1003
+ * await collection.afterOr(-1, item => item === 1);
1004
+ * // -1
1005
+ * @example
1006
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
1007
+ * await collection.afterOr(() => -1, item => item === 1);
1008
+ * // -1
644
1009
  * @throws {CollectionError} {@link CollectionError}
645
1010
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
646
1011
  * @throws {IndexOverflowError} {@link IndexOverflowError}
647
1012
  */
648
- afterOr<TExtended = TInput>(defaultValue: AsyncLazyable<TExtended>, filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<TInput | TExtended>;
1013
+ afterOr<TExtended = TInput>(defaultValue: AsyncLazyable<TExtended>, predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<TInput | TExtended>;
649
1014
  /**
650
- * The afterOrFail method is the same as after method but will throw an Error if not found
1015
+ * The <i>afterOrFail</i> method returns the item that comes after the first item that matches <i>predicateFn</i>.
1016
+ * If the collection is empty or the <i>predicateFn</i> does not match or matches the last item then an error is thrown.
1017
+ * @example
1018
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
1019
+ * await collection.afterOrFail(item => item === 2);
1020
+ * // 1
1021
+ * @example
1022
+ * const collection = new AsyncIterableCollection([1, 2, 3, 4]);
1023
+ * await collection.afterOrFail(item => item === 1);
1024
+ * // error is thrown
651
1025
  * @throws {CollectionError} {@link CollectionError}
652
1026
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
653
1027
  * @throws {ItemNotFoundError} {@link ItemNotFoundError}
654
1028
  * @throws {IndexOverflowError} {@link IndexOverflowError}
655
1029
  */
656
- afterOrFail(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<TInput>;
1030
+ afterOrFail(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<TInput>;
657
1031
  /**
658
- * The sole method returns the first element in the collection that passes a given truth test, but only if the truth test matches exactly one element:
1032
+ * The <i>sole</i> method returns the first item in the collection that passes <i>predicateFn</i>, but only if <i>predicateFn</i> matches exactly one item.
1033
+ * If no items matches or multiple items are found an error will be thrown.
659
1034
  * @example
660
1035
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5]);
661
1036
  * await collection.sole(item => item === 4);
@@ -666,9 +1041,9 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
666
1041
  * @throws {MultipleItemsFoundError} {@link MultipleItemsFoundError}
667
1042
  * @throws {IndexOverflowError} {@link IndexOverflowError}
668
1043
  */
669
- sole<TOutput extends TInput>(filter: AsyncFilter<TInput, IAsyncCollection<TInput>, TOutput>, throwOnNumberLimit?: boolean): Promise<TOutput>;
1044
+ sole<TOutput extends TInput>(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>, TOutput>, throwOnIndexOverflow?: boolean): Promise<TOutput>;
670
1045
  /**
671
- * The nth method creates a new collection consisting of every n-th element:
1046
+ * The <i>nth</i> method creates a new collection consisting of every n-th item.
672
1047
  * @example
673
1048
  * const collection = new AsyncIterableCollection(["a", "b", "c", "d", "e", "f"]).nth(4);
674
1049
  * await collection.toArray();
@@ -676,37 +1051,7 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
676
1051
  */
677
1052
  nth(step: number): IAsyncCollection<TInput>;
678
1053
  /**
679
- * The delay method will delay collection such that each value is returned after the specified number of seconds.
680
- * This method is especially useful for situations where you may be interacting with external APIs that rate limit incoming requests:
681
- * @example
682
- * // An iterator that will fetch all users from a specific api
683
- * class ApiIterator implements AsyncIterable<IUser> { ... }
684
- * const apiIterator = new ApiIterator();
685
- * const collection = new AsyncIterableCollection(apiIterator);
686
- * await collection.delay(1000).forEach(user => console.log(user))
687
- */
688
- delay(timeInMs: number): IAsyncCollection<TInput>;
689
- abort(signal: AbortSignal): IAsyncCollection<TInput>;
690
- /**
691
- * The timeout method returns a new collection that will iterate values until the specified time.
692
- * After that time, the collection will then stop iterating:
693
- * @example
694
- * class AsyncInfiniteIterable implements AsyncIterable<number> {
695
- * async *[Symbol.asyncIterator]() {
696
- * while(true) {
697
- * yield 1;
698
- * }
699
- * }
700
- * }
701
- * const asyncInfiniteIterable = new AsyncInfiniteIterable();
702
- * const collection = new AsyncIterableCollection(asyncInfiniteIterable);
703
- * collection
704
- * .timeout(1000)
705
- * .forEach(nbr => console.log(nbr))
706
- */
707
- timeout(timeInMs: number): IAsyncCollection<TInput>;
708
- /**
709
- * The count method returns the total number of items in the collection:
1054
+ * The <i>count</i> method returns the total number of items in the collection that passes <i>predicateFn</i>.
710
1055
  * @example
711
1056
  * const collection = new AsyncIterableCollection([1, 2, 3, 4, 5, 6]);
712
1057
  * await collection.count(value => value % 2 === 0);
@@ -715,42 +1060,92 @@ export type IAsyncCollection<TInput> = AsyncIterable<TInput> & {
715
1060
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
716
1061
  * @throws {IndexOverflowError} {@link IndexOverflowError}
717
1062
  */
718
- count(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<number>;
1063
+ count(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<number>;
719
1064
  /**
1065
+ * The <i>size</i> returns the size of the collection.
720
1066
  * @throws {CollectionError} {@link CollectionError}
721
1067
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
722
1068
  * @throws {IndexOverflowError} {@link IndexOverflowError}
723
1069
  */
724
- size(throwOnNumberLimit?: boolean): Promise<number>;
1070
+ size(throwOnIndexOverflow?: boolean): Promise<number>;
725
1071
  /**
1072
+ * The <i>isEmpty</i> returns true if the collection is empty.
726
1073
  * @throws {CollectionError} {@link CollectionError}
727
1074
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
728
1075
  * @throws {IndexOverflowError} {@link IndexOverflowError}
729
1076
  */
730
- empty(): Promise<boolean>;
1077
+ isEmpty(): Promise<boolean>;
731
1078
  /**
1079
+ * The <i>isNotEmpty</i> returns true if the collection is not empty.
732
1080
  * @throws {CollectionError} {@link CollectionError}
733
1081
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
734
1082
  * @throws {IndexOverflowError} {@link IndexOverflowError}
735
1083
  */
736
- notEmpty(): Promise<boolean>;
1084
+ isNotEmpty(): Promise<boolean>;
737
1085
  /**
738
- * The search method searches the collection for the given value and returns its index if found. If the item is not found, -1 is returned:
1086
+ * The <i>searchFirst</i> return the index of the first item that matches <i>predicateFn</i>.
1087
+ * @example
1088
+ * const collection = new AsyncIterableCollection(["a", "b", "b", "c"]);
1089
+ * await collection.searchFirst(item => item === "b");
1090
+ * // 1
739
1091
  * @throws {CollectionError} {@link CollectionError}
740
1092
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
741
1093
  * @throws {IndexOverflowError} {@link IndexOverflowError}
742
1094
  */
743
- search(filter: AsyncFilter<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<number>;
1095
+ searchFirst(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<number>;
744
1096
  /**
1097
+ * The <i>searchLast</i> return the index of the last item that matches <i>predicateFn</i>.
1098
+ * @example
1099
+ * const collection = new AsyncIterableCollection(["a", "b", "b", "c"]);
1100
+ * await collection.searchLast(item => item === "b");
1101
+ * // 2
745
1102
  * @throws {CollectionError} {@link CollectionError}
746
1103
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
747
1104
  * @throws {IndexOverflowError} {@link IndexOverflowError}
748
1105
  */
749
- forEach(callback: AsyncForEach<TInput, IAsyncCollection<TInput>>, throwOnNumberLimit?: boolean): Promise<void>;
1106
+ searchLast(predicateFn: AsyncPredicate<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<number>;
750
1107
  /**
1108
+ * The <i>forEach</i> method iterates through all items in the collection.
1109
+ * @throws {CollectionError} {@link CollectionError}
1110
+ * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
1111
+ * @throws {IndexOverflowError} {@link IndexOverflowError}
1112
+ */
1113
+ forEach(callback: AsyncForEach<TInput, IAsyncCollection<TInput>>, throwOnIndexOverflow?: boolean): Promise<void>;
1114
+ /**
1115
+ * The <i>toArray</i> method converts the collection to a new array.
751
1116
  * @throws {CollectionError} {@link CollectionError}
752
1117
  * @throws {UnexpectedCollectionError} {@link UnexpectedCollectionError}
753
1118
  * @throws {IndexOverflowError} {@link IndexOverflowError}
754
1119
  */
755
1120
  toArray(): Promise<TInput[]>;
1121
+ /**
1122
+ * The delay method will delay collection such that each value is returned after the specified number of seconds.
1123
+ * This method is especially useful for situations where you may be interacting with external APIs that rate limit incoming requests:
1124
+ * @example
1125
+ * // An iterator that will fetch all users from a specific api
1126
+ * class ApiIterator implements AsyncIterable<IUser> { ... }
1127
+ * const apiIterator = new ApiIterator();
1128
+ * const collection = new AsyncIterableCollection(apiIterator);
1129
+ * await collection.delay(1000).forEach(user => console.log(user))
1130
+ */
1131
+ delay(timeInMs: number): IAsyncCollection<TInput>;
1132
+ abort(signal: AbortSignal): IAsyncCollection<TInput>;
1133
+ /**
1134
+ * The timeout method returns a new collection that will iterate values until the specified time.
1135
+ * After that time, the collection will then stop iterating:
1136
+ * @example
1137
+ * class AsyncInfiniteIterable implements AsyncIterable<number> {
1138
+ * async *[Symbol.asyncIterator]() {
1139
+ * while(true) {
1140
+ * yield 1;
1141
+ * }
1142
+ * }
1143
+ * }
1144
+ * const asyncInfiniteIterable = new AsyncInfiniteIterable();
1145
+ * const collection = new AsyncIterableCollection(asyncInfiniteIterable);
1146
+ * collection
1147
+ * .timeout(1000)
1148
+ * .forEach(nbr => console.log(nbr))
1149
+ */
1150
+ timeout(timeInMs: number): IAsyncCollection<TInput>;
756
1151
  };