ts-data-forge 5.0.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/README.md +55 -6
  2. package/dist/array/impl/array-utils-creation.d.mts +14 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
  4. package/dist/array/impl/array-utils-creation.mjs +12 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  6. package/dist/array/impl/array-utils-element-access.d.mts +10 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
  8. package/dist/array/impl/array-utils-element-access.mjs +6 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  10. package/dist/array/impl/array-utils-modification.d.mts +14 -0
  11. package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
  12. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  13. package/dist/array/impl/array-utils-reducing-value.d.mts +26 -2
  14. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
  15. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  16. package/dist/array/impl/array-utils-search.d.mts +30 -0
  17. package/dist/array/impl/array-utils-search.d.mts.map +1 -1
  18. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-set-op.d.mts +13 -0
  20. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
  21. package/dist/array/impl/array-utils-set-op.mjs +13 -0
  22. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-size.d.mts +3 -0
  24. package/dist/array/impl/array-utils-size.d.mts.map +1 -1
  25. package/dist/array/impl/array-utils-size.mjs +3 -0
  26. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  27. package/dist/array/impl/array-utils-slice-clamped.d.mts +2 -0
  28. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -1
  29. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  30. package/dist/array/impl/array-utils-slicing.d.mts +15 -0
  31. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  32. package/dist/array/impl/array-utils-slicing.mjs +7 -0
  33. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  34. package/dist/array/impl/array-utils-transformation.d.mts +27 -0
  35. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  36. package/dist/array/impl/array-utils-transformation.mjs +6 -0
  37. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  38. package/dist/array/impl/array-utils-validation.d.mts +17 -0
  39. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  40. package/dist/array/impl/array-utils-validation.mjs +11 -0
  41. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  42. package/dist/collections/imap-mapped.mjs.map +1 -1
  43. package/dist/collections/imap.d.mts +20 -0
  44. package/dist/collections/imap.d.mts.map +1 -1
  45. package/dist/collections/imap.mjs +2 -0
  46. package/dist/collections/imap.mjs.map +1 -1
  47. package/dist/collections/iset-mapped.d.mts +27 -0
  48. package/dist/collections/iset-mapped.d.mts.map +1 -1
  49. package/dist/collections/iset-mapped.mjs +7 -0
  50. package/dist/collections/iset-mapped.mjs.map +1 -1
  51. package/dist/collections/iset.d.mts +29 -0
  52. package/dist/collections/iset.d.mts.map +1 -1
  53. package/dist/collections/iset.mjs +7 -0
  54. package/dist/collections/iset.mjs.map +1 -1
  55. package/dist/collections/queue.d.mts +40 -0
  56. package/dist/collections/queue.d.mts.map +1 -1
  57. package/dist/collections/queue.mjs +8 -0
  58. package/dist/collections/queue.mjs.map +1 -1
  59. package/dist/collections/stack.d.mts +35 -0
  60. package/dist/collections/stack.d.mts.map +1 -1
  61. package/dist/collections/stack.mjs +7 -0
  62. package/dist/collections/stack.mjs.map +1 -1
  63. package/dist/entry-point.mjs +1 -1
  64. package/dist/functional/match.d.mts.map +1 -1
  65. package/dist/functional/match.mjs.map +1 -1
  66. package/dist/functional/optional/impl/optional-expect-to-be.d.mts +1 -0
  67. package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -1
  68. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  69. package/dist/functional/optional/impl/optional-filter.d.mts +3 -0
  70. package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -1
  71. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  72. package/dist/functional/optional/impl/optional-flat-map.d.mts +2 -0
  73. package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -1
  74. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  75. package/dist/functional/optional/impl/optional-from-nullable.d.mts +2 -0
  76. package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -1
  77. package/dist/functional/optional/impl/optional-from-nullable.mjs +2 -0
  78. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  79. package/dist/functional/optional/impl/optional-is-optional.d.mts +2 -0
  80. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
  81. package/dist/functional/optional/impl/optional-is-optional.mjs +2 -0
  82. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  83. package/dist/functional/optional/impl/optional-is-some.d.mts +1 -0
  84. package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -1
  85. package/dist/functional/optional/impl/optional-is-some.mjs +1 -0
  86. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  87. package/dist/functional/optional/impl/optional-map.d.mts +2 -0
  88. package/dist/functional/optional/impl/optional-map.d.mts.map +1 -1
  89. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  90. package/dist/functional/optional/impl/optional-none.d.mts +2 -0
  91. package/dist/functional/optional/impl/optional-none.d.mts.map +1 -1
  92. package/dist/functional/optional/impl/optional-none.mjs +2 -0
  93. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  94. package/dist/functional/optional/impl/optional-or-else.d.mts +4 -0
  95. package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -1
  96. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  97. package/dist/functional/optional/impl/optional-some.d.mts +3 -1
  98. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
  99. package/dist/functional/optional/impl/optional-some.mjs +2 -0
  100. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  101. package/dist/functional/optional/impl/optional-to-nullable.d.mts +2 -0
  102. package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -1
  103. package/dist/functional/optional/impl/optional-to-nullable.mjs +2 -0
  104. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  105. package/dist/functional/optional/impl/optional-unwrap-or.d.mts +3 -0
  106. package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -1
  107. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  108. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +1 -0
  109. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -1
  110. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +1 -0
  111. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  112. package/dist/functional/optional/impl/optional-unwrap.d.mts +2 -0
  113. package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -1
  114. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  115. package/dist/functional/optional/impl/optional-zip.d.mts +2 -0
  116. package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -1
  117. package/dist/functional/optional/impl/optional-zip.mjs +2 -0
  118. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  119. package/dist/functional/result/impl/result-err.d.mts +3 -1
  120. package/dist/functional/result/impl/result-err.d.mts.map +1 -1
  121. package/dist/functional/result/impl/result-err.mjs +2 -0
  122. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  123. package/dist/functional/result/impl/result-expect-to-be.d.mts +1 -0
  124. package/dist/functional/result/impl/result-expect-to-be.d.mts.map +1 -1
  125. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  126. package/dist/functional/result/impl/result-flat-map.d.mts +5 -0
  127. package/dist/functional/result/impl/result-flat-map.d.mts.map +1 -1
  128. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  129. package/dist/functional/result/impl/result-fold.d.mts +4 -0
  130. package/dist/functional/result/impl/result-fold.d.mts.map +1 -1
  131. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  132. package/dist/functional/result/impl/result-from-promise.d.mts +3 -0
  133. package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -1
  134. package/dist/functional/result/impl/result-from-promise.mjs +3 -0
  135. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  136. package/dist/functional/result/impl/result-from-throwable.d.mts +2 -0
  137. package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -1
  138. package/dist/functional/result/impl/result-from-throwable.mjs +2 -0
  139. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  140. package/dist/functional/result/impl/result-is-err.d.mts +2 -0
  141. package/dist/functional/result/impl/result-is-err.d.mts.map +1 -1
  142. package/dist/functional/result/impl/result-is-err.mjs +2 -0
  143. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  144. package/dist/functional/result/impl/result-is-ok.d.mts +2 -0
  145. package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -1
  146. package/dist/functional/result/impl/result-is-ok.mjs +2 -0
  147. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  148. package/dist/functional/result/impl/result-is-result.d.mts +4 -0
  149. package/dist/functional/result/impl/result-is-result.d.mts.map +1 -1
  150. package/dist/functional/result/impl/result-is-result.mjs +4 -0
  151. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  152. package/dist/functional/result/impl/result-map-err.d.mts +3 -0
  153. package/dist/functional/result/impl/result-map-err.d.mts.map +1 -1
  154. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  155. package/dist/functional/result/impl/result-map.d.mts +4 -0
  156. package/dist/functional/result/impl/result-map.d.mts.map +1 -1
  157. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  158. package/dist/functional/result/impl/result-ok.d.mts +3 -1
  159. package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
  160. package/dist/functional/result/impl/result-ok.mjs +2 -0
  161. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  162. package/dist/functional/result/impl/result-or-else.d.mts +4 -0
  163. package/dist/functional/result/impl/result-or-else.d.mts.map +1 -1
  164. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  165. package/dist/functional/result/impl/result-swap.d.mts +2 -0
  166. package/dist/functional/result/impl/result-swap.d.mts.map +1 -1
  167. package/dist/functional/result/impl/result-swap.mjs +2 -0
  168. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  169. package/dist/functional/result/impl/result-to-optional.d.mts +2 -0
  170. package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -1
  171. package/dist/functional/result/impl/result-to-optional.mjs +2 -0
  172. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  173. package/dist/functional/result/impl/result-unwrap-err-or.d.mts +3 -0
  174. package/dist/functional/result/impl/result-unwrap-err-or.d.mts.map +1 -1
  175. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  176. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts +2 -0
  177. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -1
  178. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +2 -0
  179. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  180. package/dist/functional/result/impl/result-unwrap-err.d.mts +1 -0
  181. package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -1
  182. package/dist/functional/result/impl/result-unwrap-err.mjs +1 -0
  183. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  184. package/dist/functional/result/impl/result-unwrap-ok-or.d.mts +3 -0
  185. package/dist/functional/result/impl/result-unwrap-ok-or.d.mts.map +1 -1
  186. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  187. package/dist/functional/result/impl/result-unwrap-ok.d.mts +1 -0
  188. package/dist/functional/result/impl/result-unwrap-ok.d.mts.map +1 -1
  189. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  190. package/dist/functional/result/impl/result-unwrap-throw.d.mts +2 -0
  191. package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -1
  192. package/dist/functional/result/impl/result-unwrap-throw.mjs +2 -0
  193. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  194. package/dist/functional/result/impl/result-zip.d.mts +3 -1
  195. package/dist/functional/result/impl/result-zip.d.mts.map +1 -1
  196. package/dist/functional/result/impl/result-zip.mjs +3 -1
  197. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  198. package/dist/functional/ternary-result/impl/ternary-result-err.d.mts +2 -1
  199. package/dist/functional/ternary-result/impl/ternary-result-err.d.mts.map +1 -1
  200. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +1 -0
  201. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  202. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.d.mts +1 -0
  203. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.d.mts.map +1 -1
  204. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  205. package/dist/functional/ternary-result/impl/ternary-result-flat-map.d.mts +4 -0
  206. package/dist/functional/ternary-result/impl/ternary-result-flat-map.d.mts.map +1 -1
  207. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  208. package/dist/functional/ternary-result/impl/ternary-result-fold.d.mts +2 -0
  209. package/dist/functional/ternary-result/impl/ternary-result-fold.d.mts.map +1 -1
  210. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  211. package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts +2 -0
  212. package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts.map +1 -1
  213. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +2 -0
  214. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  215. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts +2 -0
  216. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts.map +1 -1
  217. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +2 -0
  218. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  219. package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts +1 -0
  220. package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts.map +1 -1
  221. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +1 -0
  222. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  223. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts +4 -0
  224. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts.map +1 -1
  225. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +4 -0
  226. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  227. package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts +1 -0
  228. package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts.map +1 -1
  229. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +1 -0
  230. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  231. package/dist/functional/ternary-result/impl/ternary-result-map-err.d.mts +3 -0
  232. package/dist/functional/ternary-result/impl/ternary-result-map-err.d.mts.map +1 -1
  233. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  234. package/dist/functional/ternary-result/impl/ternary-result-map-warn.d.mts +3 -0
  235. package/dist/functional/ternary-result/impl/ternary-result-map-warn.d.mts.map +1 -1
  236. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  237. package/dist/functional/ternary-result/impl/ternary-result-map.d.mts +6 -0
  238. package/dist/functional/ternary-result/impl/ternary-result-map.d.mts.map +1 -1
  239. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  240. package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts +1 -1
  241. package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts.map +1 -1
  242. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  243. package/dist/functional/ternary-result/impl/ternary-result-or-else.d.mts +2 -0
  244. package/dist/functional/ternary-result/impl/ternary-result-or-else.d.mts.map +1 -1
  245. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  246. package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts +2 -0
  247. package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts.map +1 -1
  248. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +2 -0
  249. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  250. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.d.mts +2 -0
  251. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.d.mts.map +1 -1
  252. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  253. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts +1 -0
  254. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts.map +1 -1
  255. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +1 -0
  256. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  257. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts +2 -0
  258. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts.map +1 -1
  259. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +2 -0
  260. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  261. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.d.mts +2 -0
  262. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.d.mts.map +1 -1
  263. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  264. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.d.mts +2 -0
  265. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.d.mts.map +1 -1
  266. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  267. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts +1 -0
  268. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts.map +1 -1
  269. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +1 -0
  270. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  271. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.d.mts +2 -0
  272. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.d.mts.map +1 -1
  273. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  274. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts +1 -0
  275. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts.map +1 -1
  276. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +1 -0
  277. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  278. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts +2 -0
  279. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts.map +1 -1
  280. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +2 -0
  281. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  282. package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts +1 -1
  283. package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts.map +1 -1
  284. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  285. package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts +4 -0
  286. package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts.map +1 -1
  287. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +4 -0
  288. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  289. package/dist/globals.d.mts +10 -0
  290. package/dist/guard/index.mjs +1 -1
  291. package/dist/guard/is-record.d.mts +31 -0
  292. package/dist/guard/is-record.d.mts.map +1 -1
  293. package/dist/guard/is-record.mjs +32 -1
  294. package/dist/guard/is-record.mjs.map +1 -1
  295. package/dist/guard/is-type.d.mts +3 -0
  296. package/dist/guard/is-type.d.mts.map +1 -1
  297. package/dist/guard/is-type.mjs +3 -0
  298. package/dist/guard/is-type.mjs.map +1 -1
  299. package/dist/guard/key-is-in.d.mts +1 -0
  300. package/dist/guard/key-is-in.d.mts.map +1 -1
  301. package/dist/guard/key-is-in.mjs +1 -0
  302. package/dist/guard/key-is-in.mjs.map +1 -1
  303. package/dist/index.mjs +1 -1
  304. package/dist/iterator/range.d.mts +4 -0
  305. package/dist/iterator/range.d.mts.map +1 -1
  306. package/dist/iterator/range.mjs +1 -0
  307. package/dist/iterator/range.mjs.map +1 -1
  308. package/dist/json/json.d.mts +21 -0
  309. package/dist/json/json.d.mts.map +1 -1
  310. package/dist/json/json.mjs +21 -0
  311. package/dist/json/json.mjs.map +1 -1
  312. package/dist/number/branded-types/int.d.mts +14 -0
  313. package/dist/number/branded-types/int.d.mts.map +1 -1
  314. package/dist/number/branded-types/int.mjs +14 -0
  315. package/dist/number/branded-types/int.mjs.map +1 -1
  316. package/dist/number/branded-types/non-zero-safe-int.mjs +2 -2
  317. package/dist/number/branded-types/positive-int.d.mts +14 -0
  318. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  319. package/dist/number/branded-types/positive-int.mjs +14 -0
  320. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  321. package/dist/number/branded-types/positive-safe-int.d.mts +21 -0
  322. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  323. package/dist/number/branded-types/positive-safe-int.mjs +22 -1
  324. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  325. package/dist/number/branded-types/safe-int.d.mts +21 -0
  326. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  327. package/dist/number/branded-types/safe-int.mjs +23 -2
  328. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  329. package/dist/number/branded-types/safe-uint.mjs +1 -1
  330. package/dist/number/branded-types/uint.d.mts +12 -0
  331. package/dist/number/branded-types/uint.d.mts.map +1 -1
  332. package/dist/number/branded-types/uint.mjs +12 -0
  333. package/dist/number/branded-types/uint.mjs.map +1 -1
  334. package/dist/number/num.d.mts +9 -0
  335. package/dist/number/num.d.mts.map +1 -1
  336. package/dist/number/num.mjs +8 -1
  337. package/dist/number/num.mjs.map +1 -1
  338. package/dist/number/refined-number-utils.d.mts +22 -0
  339. package/dist/number/refined-number-utils.d.mts.map +1 -1
  340. package/dist/number/refined-number-utils.mjs +22 -0
  341. package/dist/number/refined-number-utils.mjs.map +1 -1
  342. package/dist/object/object.d.mts +9 -0
  343. package/dist/object/object.d.mts.map +1 -1
  344. package/dist/object/object.mjs +7 -0
  345. package/dist/object/object.mjs.map +1 -1
  346. package/dist/others/map-nullable.mjs.map +1 -1
  347. package/dist/others/tuple.d.mts +11 -0
  348. package/dist/others/tuple.d.mts.map +1 -1
  349. package/dist/others/tuple.mjs +11 -0
  350. package/dist/others/tuple.mjs.map +1 -1
  351. package/dist/others/unknown-to-string.d.mts.map +1 -1
  352. package/dist/others/unknown-to-string.mjs.map +1 -1
  353. package/dist/promise/promise.d.mts +4 -0
  354. package/dist/promise/promise.d.mts.map +1 -1
  355. package/dist/promise/promise.mjs +4 -0
  356. package/dist/promise/promise.mjs.map +1 -1
  357. package/package.json +18 -22
  358. package/src/array/impl/array-utils-creation.mts +20 -0
  359. package/src/array/impl/array-utils-creation.test.mts +71 -0
  360. package/src/array/impl/array-utils-element-access.mts +13 -0
  361. package/src/array/impl/array-utils-element-access.test.mts +21 -0
  362. package/src/array/impl/array-utils-iterators.test.mts +17 -0
  363. package/src/array/impl/array-utils-modification.mts +40 -0
  364. package/src/array/impl/array-utils-modification.test.mts +75 -0
  365. package/src/array/impl/array-utils-overload-type-error.test.mts +19 -0
  366. package/src/array/impl/array-utils-reducing-value.mts +53 -8
  367. package/src/array/impl/array-utils-reducing-value.test.mts +90 -0
  368. package/src/array/impl/array-utils-search.mts +53 -0
  369. package/src/array/impl/array-utils-search.test.mts +51 -0
  370. package/src/array/impl/array-utils-set-op.mts +19 -0
  371. package/src/array/impl/array-utils-set-op.test.mts +116 -0
  372. package/src/array/impl/array-utils-size.mts +3 -0
  373. package/src/array/impl/array-utils-size.test.mts +1 -0
  374. package/src/array/impl/array-utils-slice-clamped.mts +7 -0
  375. package/src/array/impl/array-utils-slice-clamped.test.mts +20 -0
  376. package/src/array/impl/array-utils-slicing.mts +27 -0
  377. package/src/array/impl/array-utils-slicing.test.mts +57 -0
  378. package/src/array/impl/array-utils-transformation.mts +58 -0
  379. package/src/array/impl/array-utils-transformation.test.mts +113 -1
  380. package/src/array/impl/array-utils-validation.mts +23 -0
  381. package/src/array/impl/array-utils-validation.test.mts +96 -0
  382. package/src/array/impl/array.test.mts +12 -0
  383. package/src/collections/imap-mapped.mts +11 -0
  384. package/src/collections/imap-mapped.test.mts +70 -0
  385. package/src/collections/imap.mts +32 -0
  386. package/src/collections/imap.test.mts +106 -0
  387. package/src/collections/iset-mapped.mts +35 -0
  388. package/src/collections/iset-mapped.test.mts +111 -0
  389. package/src/collections/iset.mts +34 -0
  390. package/src/collections/iset.test.mts +193 -0
  391. package/src/collections/queue.mts +53 -0
  392. package/src/collections/queue.test.mts +32 -0
  393. package/src/collections/stack.mts +42 -0
  394. package/src/collections/stack.test.mts +44 -0
  395. package/src/functional/match.mts +16 -0
  396. package/src/functional/match.test.mts +2 -0
  397. package/src/functional/optional/impl/optional-expect-to-be.mts +3 -0
  398. package/src/functional/optional/impl/optional-filter.mts +6 -0
  399. package/src/functional/optional/impl/optional-flat-map.mts +4 -0
  400. package/src/functional/optional/impl/optional-from-nullable.mts +2 -0
  401. package/src/functional/optional/impl/optional-is-optional.mts +2 -0
  402. package/src/functional/optional/impl/optional-is-some.mts +1 -0
  403. package/src/functional/optional/impl/optional-map.mts +5 -0
  404. package/src/functional/optional/impl/optional-none.mts +2 -0
  405. package/src/functional/optional/impl/optional-or-else.mts +6 -0
  406. package/src/functional/optional/impl/optional-some.mts +3 -1
  407. package/src/functional/optional/impl/optional-to-nullable.mts +2 -0
  408. package/src/functional/optional/impl/optional-unwrap-or.mts +5 -0
  409. package/src/functional/optional/impl/optional-unwrap-throw.mts +1 -0
  410. package/src/functional/optional/impl/optional-unwrap.mts +2 -0
  411. package/src/functional/optional/impl/optional-zip.mts +2 -0
  412. package/src/functional/optional.test.mts +73 -0
  413. package/src/functional/pipe.test.mts +3 -0
  414. package/src/functional/result/impl/result-err.mts +3 -1
  415. package/src/functional/result/impl/result-expect-to-be.mts +3 -0
  416. package/src/functional/result/impl/result-flat-map.mts +7 -0
  417. package/src/functional/result/impl/result-fold.mts +6 -0
  418. package/src/functional/result/impl/result-from-promise.mts +3 -0
  419. package/src/functional/result/impl/result-from-throwable.mts +4 -0
  420. package/src/functional/result/impl/result-is-err.mts +2 -0
  421. package/src/functional/result/impl/result-is-ok.mts +2 -0
  422. package/src/functional/result/impl/result-is-result.mts +4 -0
  423. package/src/functional/result/impl/result-map-err.mts +5 -0
  424. package/src/functional/result/impl/result-map.mts +6 -0
  425. package/src/functional/result/impl/result-ok.mts +3 -1
  426. package/src/functional/result/impl/result-or-else.mts +6 -0
  427. package/src/functional/result/impl/result-swap.mts +2 -0
  428. package/src/functional/result/impl/result-to-optional.mts +2 -0
  429. package/src/functional/result/impl/result-unwrap-err-or.mts +5 -0
  430. package/src/functional/result/impl/result-unwrap-err-throw.mts +2 -0
  431. package/src/functional/result/impl/result-unwrap-err.mts +1 -0
  432. package/src/functional/result/impl/result-unwrap-ok-or.mts +5 -0
  433. package/src/functional/result/impl/result-unwrap-ok.mts +2 -0
  434. package/src/functional/result/impl/result-unwrap-throw.mts +2 -0
  435. package/src/functional/result/impl/result-zip.mts +3 -1
  436. package/src/functional/result.test.mts +88 -0
  437. package/src/functional/ternary-result/impl/ternary-result-err.mts +2 -1
  438. package/src/functional/ternary-result/impl/ternary-result-expect-to-be.mts +4 -0
  439. package/src/functional/ternary-result/impl/ternary-result-flat-map.mts +7 -0
  440. package/src/functional/ternary-result/impl/ternary-result-fold.mts +5 -0
  441. package/src/functional/ternary-result/impl/ternary-result-from-promise.mts +2 -0
  442. package/src/functional/ternary-result/impl/ternary-result-from-throwable.mts +3 -0
  443. package/src/functional/ternary-result/impl/ternary-result-is-ok.mts +1 -0
  444. package/src/functional/ternary-result/impl/ternary-result-is-ternary-result.mts +4 -0
  445. package/src/functional/ternary-result/impl/ternary-result-is-warn.mts +1 -0
  446. package/src/functional/ternary-result/impl/ternary-result-map-err.mts +6 -0
  447. package/src/functional/ternary-result/impl/ternary-result-map-warn.mts +6 -0
  448. package/src/functional/ternary-result/impl/ternary-result-map.mts +9 -0
  449. package/src/functional/ternary-result/impl/ternary-result-ok.mts +1 -1
  450. package/src/functional/ternary-result/impl/ternary-result-or-else.mts +5 -0
  451. package/src/functional/ternary-result/impl/ternary-result-to-optional.mts +2 -0
  452. package/src/functional/ternary-result/impl/ternary-result-unwrap-err-or.mts +5 -0
  453. package/src/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mts +1 -0
  454. package/src/functional/ternary-result/impl/ternary-result-unwrap-err.mts +2 -0
  455. package/src/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mts +5 -0
  456. package/src/functional/ternary-result/impl/ternary-result-unwrap-ok.mts +3 -0
  457. package/src/functional/ternary-result/impl/ternary-result-unwrap-throw.mts +1 -0
  458. package/src/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mts +5 -0
  459. package/src/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mts +1 -0
  460. package/src/functional/ternary-result/impl/ternary-result-unwrap-warn.mts +2 -0
  461. package/src/functional/ternary-result/impl/ternary-result-warn.mts +4 -1
  462. package/src/functional/ternary-result/impl/ternary-result-zip.mts +4 -0
  463. package/src/functional/ternary-result.test.mts +91 -0
  464. package/src/globals.d.mts +10 -0
  465. package/src/guard/has-key.test.mts +9 -0
  466. package/src/guard/is-non-empty-string.test.mts +20 -0
  467. package/src/guard/is-non-null-object.test.mts +19 -0
  468. package/src/guard/is-primitive.test.mts +23 -0
  469. package/src/guard/is-record.mts +34 -0
  470. package/src/guard/is-record.test.mts +21 -0
  471. package/src/guard/is-type.mts +3 -0
  472. package/src/guard/is-type.test.mts +134 -0
  473. package/src/guard/key-is-in.mts +1 -0
  474. package/src/iterator/range.mts +9 -0
  475. package/src/json/json.mts +29 -0
  476. package/src/json/json.test.mts +87 -0
  477. package/src/number/branded-types/finite-number.test.mts +38 -0
  478. package/src/number/branded-types/int.mts +14 -0
  479. package/src/number/branded-types/int.test.mts +42 -0
  480. package/src/number/branded-types/int16.test.mts +47 -0
  481. package/src/number/branded-types/int32.test.mts +47 -0
  482. package/src/number/branded-types/non-negative-finite-number.test.mts +40 -0
  483. package/src/number/branded-types/non-negative-int16.test.mts +43 -0
  484. package/src/number/branded-types/non-negative-int32.test.mts +43 -0
  485. package/src/number/branded-types/non-zero-finite-number.test.mts +51 -0
  486. package/src/number/branded-types/non-zero-int.test.mts +53 -0
  487. package/src/number/branded-types/non-zero-int16.test.mts +44 -0
  488. package/src/number/branded-types/non-zero-int32.test.mts +44 -0
  489. package/src/number/branded-types/non-zero-safe-int.mts +2 -2
  490. package/src/number/branded-types/non-zero-safe-int.test.mts +62 -0
  491. package/src/number/branded-types/non-zero-uint16.test.mts +37 -0
  492. package/src/number/branded-types/non-zero-uint32.test.mts +37 -0
  493. package/src/number/branded-types/positive-finite-number.test.mts +45 -0
  494. package/src/number/branded-types/positive-int.mts +14 -0
  495. package/src/number/branded-types/positive-int.test.mts +47 -0
  496. package/src/number/branded-types/positive-int16.test.mts +35 -0
  497. package/src/number/branded-types/positive-int32.test.mts +35 -0
  498. package/src/number/branded-types/positive-safe-int.mts +22 -1
  499. package/src/number/branded-types/positive-safe-int.test.mts +49 -0
  500. package/src/number/branded-types/positive-uint16.test.mts +37 -0
  501. package/src/number/branded-types/positive-uint32.test.mts +37 -0
  502. package/src/number/branded-types/safe-int.mts +23 -2
  503. package/src/number/branded-types/safe-int.test.mts +52 -0
  504. package/src/number/branded-types/safe-uint.mts +1 -1
  505. package/src/number/branded-types/safe-uint.test.mts +48 -0
  506. package/src/number/branded-types/uint.mts +12 -0
  507. package/src/number/branded-types/uint.test.mts +43 -0
  508. package/src/number/branded-types/uint16.test.mts +41 -0
  509. package/src/number/branded-types/uint32.test.mts +41 -0
  510. package/src/number/enum/int8.test.mts +6 -0
  511. package/src/number/enum/uint8.test.mts +6 -0
  512. package/src/number/num.mts +12 -1
  513. package/src/number/num.test.mts +62 -0
  514. package/src/number/refined-number-utils.mts +25 -0
  515. package/src/object/object.mts +15 -0
  516. package/src/object/object.test.mts +10 -0
  517. package/src/others/cast-mutable.test.mts +7 -0
  518. package/src/others/cast-readonly.test.mts +17 -0
  519. package/src/others/if-then.test.mts +16 -0
  520. package/src/others/map-nullable.mts +3 -0
  521. package/src/others/map-nullable.test.mts +27 -0
  522. package/src/others/memoize-function.test.mts +41 -0
  523. package/src/others/tuple.mts +11 -0
  524. package/src/others/unknown-to-string.mts +2 -0
  525. package/src/others/unknown-to-string.test.mts +10 -0
  526. package/src/promise/promise.mts +4 -0
  527. package/src/promise/promise.test.mts +1 -0
@@ -8,20 +8,25 @@ import { filterNot, partition } from './array-utils-transformation.mjs';
8
8
 
9
9
  describe('Array overloaded functions - type error validation', () => {
10
10
  const testArray = [1, 2, 3, 4, 5] as const;
11
+
11
12
  const predicate = (x: number): boolean => x > 3;
12
13
 
13
14
  describe('findIndex type safety', () => {
14
15
  test('findIndex with correct arguments should work', () => {
15
16
  // These should work fine
16
17
  const _result1 = findIndex(testArray, predicate);
18
+
17
19
  const _result2 = findIndex(predicate);
20
+
18
21
  const _result3 = findIndex(predicate)(testArray);
19
22
 
20
23
  expectType<typeof _result1, 0 | 1 | 2 | 3 | 4 | -1>('=');
24
+
21
25
  expectType<
22
26
  typeof _result2,
23
27
  (array: readonly number[]) => SizeType.Arr | -1
24
28
  >('=');
29
+
25
30
  expectType<typeof _result3, SizeType.Arr | -1>('=');
26
31
  });
27
32
 
@@ -41,14 +46,18 @@ describe('Array overloaded functions - type error validation', () => {
41
46
  test('filterNot with correct arguments should work', () => {
42
47
  // These should work fine
43
48
  const _result1 = filterNot(testArray, predicate);
49
+
44
50
  const _result2 = filterNot(predicate);
51
+
45
52
  const _result3 = filterNot(predicate)(testArray);
46
53
 
47
54
  expectType<typeof _result1, readonly number[]>('<=');
55
+
48
56
  expectType<
49
57
  typeof _result2,
50
58
  (array: readonly number[]) => readonly number[]
51
59
  >('<=');
60
+
52
61
  expectType<typeof _result3, readonly number[]>('<=');
53
62
  });
54
63
 
@@ -67,14 +76,18 @@ describe('Array overloaded functions - type error validation', () => {
67
76
  test('partition with correct arguments should work', () => {
68
77
  // These should work fine
69
78
  const _result1 = partition(testArray, 2);
79
+
70
80
  const _result2 = partition(2);
81
+
71
82
  const _result3 = partition(2)(testArray);
72
83
 
73
84
  expectType<typeof _result1, readonly (readonly number[])[]>('<=');
85
+
74
86
  expectType<
75
87
  typeof _result2,
76
88
  <A>(array: readonly A[]) => readonly (readonly A[])[]
77
89
  >('<=');
90
+
78
91
  expectType<typeof _result3, readonly (readonly number[])[]>('<=');
79
92
  });
80
93
 
@@ -93,9 +106,11 @@ describe('Array overloaded functions - type error validation', () => {
93
106
  test('range with correct arguments should work', () => {
94
107
  // These should work fine
95
108
  const _result1 = range(1, 5);
109
+
96
110
  const _result2 = range(1, 5, 1);
97
111
 
98
112
  expectType<typeof _result1, readonly [1, 2, 3, 4]>('=');
113
+
99
114
  expectType<typeof _result2, readonly [1, 2, 3, 4]>('=');
100
115
  });
101
116
 
@@ -112,12 +127,15 @@ describe('Array overloaded functions - type error validation', () => {
112
127
  test('spread with correct tuple types should work', () => {
113
128
  // Correct usage with spread
114
129
  const correctArgs1 = [testArray, predicate] as const;
130
+
115
131
  const correctArgs2 = [predicate] as const;
116
132
 
117
133
  const _result1 = findIndex(...correctArgs1);
134
+
118
135
  const _result2 = findIndex(...correctArgs2);
119
136
 
120
137
  expectType<typeof _result1, 0 | 1 | 2 | 3 | 4 | -1>('<=');
138
+
121
139
  expectType<
122
140
  typeof _result2,
123
141
  (array: readonly number[]) => SizeType.Arr | -1
@@ -141,6 +159,7 @@ describe('Array overloaded functions - type error validation', () => {
141
159
  test('composition should preserve type safety', () => {
142
160
  // This should work
143
161
  const findPositive = findIndex((x: number) => x > 0);
162
+
144
163
  const filterNegative = filterNot((x: number) => x < 0);
145
164
 
146
165
  const _composedResult = pipe(testArray)
@@ -13,14 +13,19 @@ import { isNonEmpty } from './array-utils-validation.mjs';
13
13
  *
14
14
  * ```ts
15
15
  * const values = [5, 3, 9] as const;
16
+ *
16
17
  * const empty: readonly number[] = [];
17
18
  *
18
19
  * const smallest = Arr.min(values);
20
+ *
19
21
  * const none = Arr.min(empty);
22
+ *
20
23
  * const custom = Arr.min(values, (a, b) => b - a);
21
24
  *
22
25
  * assert.deepStrictEqual(smallest, Optional.some(3));
26
+ *
23
27
  * assert.deepStrictEqual(none, Optional.none);
28
+ *
24
29
  * assert.deepStrictEqual(custom, Optional.some(9));
25
30
  * ```
26
31
  */
@@ -62,9 +67,11 @@ export function min<E extends number>(
62
67
  * const values = [5, 3, 9];
63
68
  *
64
69
  * const largest = Arr.max(values);
70
+ *
65
71
  * const reversed = Arr.max(values, (a, b) => b - a);
66
72
  *
67
73
  * assert.deepStrictEqual(largest, Optional.some(9));
74
+ *
68
75
  * assert.deepStrictEqual(reversed, Optional.some(3));
69
76
  * ```
70
77
  */
@@ -84,6 +91,7 @@ export function max<E extends number>(
84
91
  comparator?: (x: E, y: E) => number,
85
92
  ): Optional<E> {
86
93
  const cmp = comparator ?? ((x, y) => Num.from(x) - Num.from(y));
94
+
87
95
  // Find max by finding min with an inverted comparator
88
96
  return min(array, (x, y) => -cmp(x, y));
89
97
  }
@@ -101,6 +109,7 @@ export function max<E extends number>(
101
109
  * ] as const;
102
110
  *
103
111
  * const leastVisits = Arr.minBy(users, (user) => user.visits);
112
+ *
104
113
  * const custom = Arr.minBy(
105
114
  * users,
106
115
  * (user) => user.visits,
@@ -108,6 +117,7 @@ export function max<E extends number>(
108
117
  * );
109
118
  *
110
119
  * assert.deepStrictEqual(leastVisits, Optional.some({ id: 2, visits: 3 }));
120
+ *
111
121
  * assert.deepStrictEqual(custom, Optional.some({ id: 1, visits: 10 }));
112
122
  * ```
113
123
  */
@@ -148,6 +158,7 @@ export function minBy<E, V>(
148
158
  * ];
149
159
  *
150
160
  * const mostStars = Arr.maxBy(projects, (project) => project.stars);
161
+ *
151
162
  * const smallestStars = Arr.maxBy(
152
163
  * projects,
153
164
  * (project) => project.stars,
@@ -155,6 +166,7 @@ export function minBy<E, V>(
155
166
  * );
156
167
  *
157
168
  * assert.deepStrictEqual(mostStars, Optional.some({ id: 'b', stars: 30 }));
169
+ *
158
170
  * assert.deepStrictEqual(smallestStars, Optional.some({ id: 'a', stars: 10 }));
159
171
  * ```
160
172
  */
@@ -191,9 +203,11 @@ export function maxBy<E, V>(
191
203
  * const words = ['Ada', 'Grace', 'Linus'] as const;
192
204
  *
193
205
  * const longWords = Arr.count(words, (word) => word.length > 4);
206
+ *
194
207
  * const withCurried = Arr.count<string>((word) => word.includes('a'))(words);
195
208
  *
196
209
  * assert(longWords === 2);
210
+ *
197
211
  * assert(withCurried === 2);
198
212
  * ```
199
213
  */
@@ -217,14 +231,17 @@ export function count<E>(
217
231
  switch (args.length) {
218
232
  case 2: {
219
233
  const [array, predicate] = args;
234
+
220
235
  return array.reduce<Uint32>(
221
236
  (acc, curr, index) =>
222
237
  predicate(curr, asUint32(index)) ? Uint32.add(acc, 1) : acc,
223
238
  asUint32(0),
224
239
  );
225
240
  }
241
+
226
242
  case 1: {
227
243
  const [predicate] = args;
244
+
228
245
  return (array) => count(array, predicate);
229
246
  }
230
247
  }
@@ -241,7 +258,9 @@ export function count<E>(
241
258
  * const counts = Arr.countBy(words, (word) => word[0]);
242
259
  *
243
260
  * assert.deepStrictEqual(counts.get('A'), Optional.some(2));
261
+ *
244
262
  * assert.deepStrictEqual(counts.get('G'), Optional.some(1));
263
+ *
245
264
  * assert.deepStrictEqual(counts.get('B'), Optional.some(1));
246
265
  * ```
247
266
  */
@@ -268,10 +287,12 @@ export function countBy<E, G extends MapSetKeyType>(
268
287
  switch (args.length) {
269
288
  case 2: {
270
289
  const [array, grouper] = args;
290
+
271
291
  const mut_groups = new Map<G, SizeType.Arr>();
272
292
 
273
293
  for (const [index, e] of array.entries()) {
274
294
  const key = grouper(e, asUint32(index));
295
+
275
296
  const curr = mut_groups.get(key) ?? 0;
276
297
 
277
298
  mut_groups.set(key, asUint32(curr + 1));
@@ -279,8 +300,10 @@ export function countBy<E, G extends MapSetKeyType>(
279
300
 
280
301
  return IMap.create(mut_groups);
281
302
  }
303
+
282
304
  case 1: {
283
305
  const [grouper] = args;
306
+
284
307
  return (array) => countBy(array, grouper);
285
308
  }
286
309
  }
@@ -295,12 +318,14 @@ export function countBy<E, G extends MapSetKeyType>(
295
318
  * const words = ['Ada', 'Lovelace'];
296
319
  *
297
320
  * const totalLength = Arr.foldl(words, (acc, word) => acc + word.length, 0);
321
+ *
298
322
  * const concat = Arr.foldl<string | number, string>(
299
323
  * (acc, value) => `${acc}-${value}`,
300
324
  * 'items',
301
325
  * )(words);
302
326
  *
303
327
  * assert(totalLength === 11);
328
+ *
304
329
  * assert(concat === 'items-Ada-Lovelace');
305
330
  * ```
306
331
  */
@@ -346,13 +371,16 @@ export function foldl<E, P>(
346
371
  switch (args.length) {
347
372
  case 3: {
348
373
  const [array, callbackfn, initialValue] = args;
374
+
349
375
  return array.reduce(
350
376
  (prev, curr, index) => callbackfn(prev, curr, asUint32(index)),
351
377
  initialValue,
352
378
  );
353
379
  }
380
+
354
381
  case 2: {
355
382
  const [callbackfn, initialValue] = args;
383
+
356
384
  return (array) => foldl(array, callbackfn, initialValue);
357
385
  }
358
386
  }
@@ -367,12 +395,14 @@ export function foldl<E, P>(
367
395
  * const numbers = [1, 2, 3];
368
396
  *
369
397
  * const subtractRight = Arr.foldr(numbers, (acc, value) => acc - value, 0);
398
+ *
370
399
  * const joinFromRight = Arr.foldr<number, string>(
371
400
  * (acc, value) => `${acc}${value}`,
372
401
  * '',
373
402
  * )(numbers);
374
403
  *
375
404
  * assert(subtractRight === -6);
405
+ *
376
406
  * assert(joinFromRight === '321');
377
407
  * ```
378
408
  */
@@ -418,13 +448,16 @@ export function foldr<E, P>(
418
448
  switch (args.length) {
419
449
  case 3: {
420
450
  const [array, callbackfn, initialValue] = args;
451
+
421
452
  return array.reduceRight(
422
453
  (prev, curr, index) => callbackfn(prev, curr, asUint32(index)),
423
454
  initialValue,
424
455
  );
425
456
  }
457
+
426
458
  case 2: {
427
459
  const [callbackfn, initialValue] = args;
460
+
428
461
  return (array) => foldr(array, callbackfn, initialValue);
429
462
  }
430
463
  }
@@ -437,12 +470,15 @@ export function foldr<E, P>(
437
470
  *
438
471
  * ```ts
439
472
  * const numbers = [1, 2, 3, 4] as const;
473
+ *
440
474
  * const negatives = [3, -2, 5] as const;
441
475
  *
442
476
  * const total = Arr.sum(numbers);
477
+ *
443
478
  * const totalNegatives = Arr.sum(negatives);
444
479
  *
445
480
  * assert(total === 10);
481
+ *
446
482
  * assert(totalNegatives === 6);
447
483
  * ```
448
484
  */
@@ -469,50 +505,59 @@ export function sum(array: readonly number[]): number {
469
505
  * const numbers = [1, 2, 3] as const;
470
506
  *
471
507
  * const defaultSeparator = Arr.join(numbers);
508
+ *
472
509
  * const hyphenSeparated = Arr.join(numbers, '-');
473
510
  *
474
511
  * assert.deepStrictEqual(defaultSeparator, Result.ok('1,2,3'));
512
+ *
475
513
  * assert.deepStrictEqual(hyphenSeparated, Result.ok('1-2-3'));
476
514
  * ```
477
515
  */
478
- export function join<E>(
479
- array: readonly E[],
516
+ export function join(
517
+ array: readonly unknown[],
480
518
  separator?: string,
481
519
  ): Result<string, Error>;
482
520
 
483
521
  export function join(
484
522
  separator?: string,
485
- ): <E>(array: readonly E[]) => Result<string, Error>;
523
+ ): (array: readonly unknown[]) => Result<string, Error>;
486
524
 
487
- export function join<E>(
525
+ export function join(
488
526
  ...args:
489
- | readonly [array: readonly E[], separator?: string]
527
+ | readonly [array: readonly unknown[], separator?: string]
490
528
  | readonly [separator?: string]
491
- ): Result<string, Error> | ((array: readonly E[]) => Result<string, Error>) {
529
+ ):
530
+ | Result<string, Error>
531
+ | ((array: readonly unknown[]) => Result<string, Error>) {
492
532
  switch (args.length) {
493
533
  case 0:
494
534
  return (array) => joinImpl(array, undefined);
495
535
 
496
536
  case 1: {
497
537
  const [arg] = args;
538
+
498
539
  if (isString(arg) || isUndefined(arg)) {
499
540
  return (array) => joinImpl(array, arg);
500
541
  }
542
+
501
543
  return joinImpl(arg, undefined);
502
544
  }
545
+
503
546
  case 2: {
504
547
  const [array, separator] = args;
548
+
505
549
  return joinImpl(array, separator);
506
550
  }
507
551
  }
508
552
  }
509
553
 
510
- const joinImpl = <E,>(
511
- array: readonly E[],
554
+ const joinImpl = (
555
+ array: readonly unknown[],
512
556
  separator: string | undefined,
513
557
  ): Result<string, Error> => {
514
558
  try {
515
559
  const result = array.join(separator);
560
+
516
561
  return Result.ok(result);
517
562
  } catch (error) {
518
563
  return Result.err(
@@ -18,6 +18,7 @@ describe('Arr reducing value', () => {
18
18
  describe(min, () => {
19
19
  {
20
20
  const xs = [3, 5, 4] as const;
21
+
21
22
  const result = min(xs);
22
23
 
23
24
  expectType<typeof result, Some<3 | 4 | 5>>('=');
@@ -30,8 +31,10 @@ describe('Arr reducing value', () => {
30
31
  }
31
32
  });
32
33
  }
34
+
33
35
  {
34
36
  const xs = [3, 5, 4] as const;
37
+
35
38
  const result = min(xs, (a, b) => a - b);
36
39
 
37
40
  expectType<typeof result, Some<3 | 4 | 5>>('=');
@@ -44,8 +47,10 @@ describe('Arr reducing value', () => {
44
47
  }
45
48
  });
46
49
  }
50
+
47
51
  {
48
52
  const xs: readonly (3 | 4 | 5)[] = [3, 5, 4] as const;
53
+
49
54
  const result = min(xs, (a, b) => a - b);
50
55
 
51
56
  expectType<typeof result, Optional<3 | 4 | 5>>('=');
@@ -62,6 +67,7 @@ describe('Arr reducing value', () => {
62
67
 
63
68
  describe(max, () => {
64
69
  const xs = [3, 5, 4] as const;
70
+
65
71
  const result = max(xs, (a, b) => a - b);
66
72
 
67
73
  expectType<typeof result, Some<3 | 4 | 5>>('=');
@@ -76,6 +82,7 @@ describe('Arr reducing value', () => {
76
82
 
77
83
  test('case 2: no comparator', () => {
78
84
  const res = max(xs);
85
+
79
86
  expectType<typeof res, Some<3 | 4 | 5>>('=');
80
87
 
81
88
  expect(Optional.isSome(res)).toBe(true);
@@ -87,7 +94,9 @@ describe('Arr reducing value', () => {
87
94
 
88
95
  test('case 3: readonly array', () => {
89
96
  const arr: readonly number[] = [1, 5, 2];
97
+
90
98
  const res = max(arr);
99
+
91
100
  expectType<typeof res, Optional<number>>('=');
92
101
 
93
102
  expect(Optional.isSome(res)).toBe(true);
@@ -99,7 +108,9 @@ describe('Arr reducing value', () => {
99
108
 
100
109
  test('case 4: empty array', () => {
101
110
  const arr: readonly number[] = [];
111
+
102
112
  const res = max(arr);
113
+
103
114
  expectType<typeof res, Optional<number>>('=');
104
115
 
105
116
  expect(Optional.isNone(res)).toBe(true);
@@ -142,7 +153,9 @@ describe('Arr reducing value', () => {
142
153
 
143
154
  test('case 2: empty array', () => {
144
155
  const arr: readonly { x: number }[] = [];
156
+
145
157
  const res = minBy(arr, (a) => a.x);
158
+
146
159
  expectType<typeof res, Optional<{ x: number }>>('=');
147
160
 
148
161
  expect(Optional.isNone(res)).toBe(true);
@@ -216,7 +229,9 @@ describe('Arr reducing value', () => {
216
229
 
217
230
  test('case 2: empty array', () => {
218
231
  const arr: readonly { x: number }[] = [];
232
+
219
233
  const res = maxBy(arr, (a) => a.x);
234
+
220
235
  expectType<typeof res, Optional<{ x: number }>>('=');
221
236
 
222
237
  expect(Optional.isNone(res)).toBe(true);
@@ -274,11 +289,21 @@ describe('Arr reducing value', () => {
274
289
 
275
290
  test('case 2: empty array', () => {
276
291
  const arr: readonly number[] = [];
292
+
277
293
  const res = count(arr, (x) => x > 0);
294
+
278
295
  expectType<typeof res, Uint32>('=');
279
296
 
280
297
  expect(res).toBe(0);
281
298
  });
299
+
300
+ test('should work with curried version', () => {
301
+ const countEven = count((x: number) => x % 2 === 0);
302
+
303
+ const res = countEven([1, 2, 3, 4, 5, 6]);
304
+
305
+ expect(res).toBe(3);
306
+ });
282
307
  });
283
308
 
284
309
  describe(countBy, () => {
@@ -308,16 +333,41 @@ describe('Arr reducing value', () => {
308
333
 
309
334
  test('case 2: empty array', () => {
310
335
  const arr: readonly { x: number }[] = [];
336
+
311
337
  const res = countBy(arr, (a) => a.x);
338
+
312
339
  expectType<typeof res, IMap<number, Uint32>>('=');
313
340
 
314
341
  expect(res.size).toBe(0);
315
342
  });
343
+
344
+ test('should work with curried version', () => {
345
+ const groupByParity = countBy((x: number) => x % 2);
346
+
347
+ const res = groupByParity([1, 2, 3, 4, 5, 6]);
348
+
349
+ const even = res.get(0);
350
+
351
+ expect(Optional.isSome(even)).toBe(true);
352
+
353
+ if (Optional.isSome(even)) {
354
+ expect(even.value).toBe(3);
355
+ }
356
+
357
+ const odd = res.get(1);
358
+
359
+ expect(Optional.isSome(odd)).toBe(true);
360
+
361
+ if (Optional.isSome(odd)) {
362
+ expect(odd.value).toBe(3);
363
+ }
364
+ });
316
365
  });
317
366
 
318
367
  describe(foldl, () => {
319
368
  test('empty array', () => {
320
369
  const result = foldl([], (acc, curr: number) => acc + curr, 0);
370
+
321
371
  expectType<typeof result, number>('=');
322
372
 
323
373
  expect(result).toBe(0);
@@ -325,6 +375,7 @@ describe('Arr reducing value', () => {
325
375
 
326
376
  test('sum numbers', () => {
327
377
  const result = foldl([1, 2, 3] as const, (acc, curr) => acc + curr, 0);
378
+
328
379
  expectType<typeof result, number>('=');
329
380
 
330
381
  expect(result).toBe(6);
@@ -336,15 +387,25 @@ describe('Arr reducing value', () => {
336
387
  (acc, curr) => acc + curr,
337
388
  '',
338
389
  );
390
+
339
391
  expectType<typeof result, string>('=');
340
392
 
341
393
  expect(result).toBe('abc');
342
394
  });
395
+
396
+ test('should work with curried version', () => {
397
+ const sumReduce = foldl((acc: number, curr: number) => acc + curr, 0);
398
+
399
+ const result = sumReduce([1, 2, 3, 4]);
400
+
401
+ expect(result).toBe(10);
402
+ });
343
403
  });
344
404
 
345
405
  describe(foldr, () => {
346
406
  test('empty array', () => {
347
407
  const result = foldr([], (acc, curr: number) => acc + curr, 0);
408
+
348
409
  expectType<typeof result, number>('=');
349
410
 
350
411
  expect(result).toBe(0);
@@ -353,6 +414,7 @@ describe('Arr reducing value', () => {
353
414
  test('subtract numbers from right', () => {
354
415
  // (1 - (2 - (3 - 0))) = 1 - (2 - 3) = 1 - (-1) = 2
355
416
  const result = foldr([1, 2, 3] as const, (acc, curr) => curr - acc, 0);
417
+
356
418
  expectType<typeof result, number>('=');
357
419
 
358
420
  expect(result).toBe(2); // 3 - (2 - (1 - 0)) = 3 - (2 - 1) = 3 - 1 = 2. No, this is (acc, curr) => acc - curr.
@@ -369,6 +431,7 @@ describe('Arr reducing value', () => {
369
431
  (acc, curr) => curr + acc,
370
432
  '',
371
433
  );
434
+
372
435
  expectType<typeof result, string>('=');
373
436
 
374
437
  expect(result).toBe('abc'); // c + (b + (a + "")) = cba. No, it's curr + acc.
@@ -376,11 +439,20 @@ describe('Arr reducing value', () => {
376
439
  // Iteration 2: prev = "c", curr = "b". Result = "b" + "c" = "bc".
377
440
  // Iteration 3: prev = "bc", curr = "a". Result = "a" + "bc" = "abc".
378
441
  });
442
+
443
+ test('should work with curried version', () => {
444
+ const productReduce = foldr((acc: number, curr: number) => acc * curr, 1);
445
+
446
+ const result = productReduce([2, 3, 4]);
447
+
448
+ expect(result).toBe(24); // 1 * 4 * 3 * 2 = 24
449
+ });
379
450
  });
380
451
 
381
452
  describe(sum, () => {
382
453
  test('empty array', () => {
383
454
  const result = sum([]);
455
+
384
456
  expectType<typeof result, 0>('=');
385
457
 
386
458
  expect(result).toBe(0);
@@ -388,6 +460,7 @@ describe('Arr reducing value', () => {
388
460
 
389
461
  test('one element array', () => {
390
462
  const result = sum([23]);
463
+
391
464
  expectType<typeof result, 23>('=');
392
465
 
393
466
  expect(result).toBe(23);
@@ -395,6 +468,7 @@ describe('Arr reducing value', () => {
395
468
 
396
469
  test('positive numbers', () => {
397
470
  const result = sum([1, 2, 3, 4, 5] as const);
471
+
398
472
  expectType<typeof result, number>('=');
399
473
 
400
474
  expect(result).toBe(15);
@@ -402,6 +476,7 @@ describe('Arr reducing value', () => {
402
476
 
403
477
  test('mixed numbers', () => {
404
478
  const result = sum([1, -2, 3, 0, -5] as const);
479
+
405
480
  expectType<typeof result, number>('=');
406
481
 
407
482
  expect(result).toBe(-3);
@@ -411,6 +486,7 @@ describe('Arr reducing value', () => {
411
486
  describe(join, () => {
412
487
  test('should join array elements', () => {
413
488
  const arr = ['Hello', 'World'];
489
+
414
490
  const result = join(arr, ' ');
415
491
 
416
492
  expect(Result.isOk(result)).toBe(true);
@@ -422,6 +498,7 @@ describe('Arr reducing value', () => {
422
498
 
423
499
  test('should handle empty separator', () => {
424
500
  const arr = ['a', 'b', 'c'];
501
+
425
502
  const result = join(arr, '');
426
503
 
427
504
  expect(Result.isOk(result)).toBe(true);
@@ -433,6 +510,7 @@ describe('Arr reducing value', () => {
433
510
 
434
511
  test('should handle undefined separator', () => {
435
512
  const arr = ['a', 'b', 'c'];
513
+
436
514
  const result = join(arr);
437
515
 
438
516
  expect(Result.isOk(result)).toBe(true);
@@ -441,5 +519,17 @@ describe('Arr reducing value', () => {
441
519
  expect(result.value).toBe('a,b,c');
442
520
  }
443
521
  });
522
+
523
+ test('should work with curried version', () => {
524
+ const joinWithDash = join('-');
525
+
526
+ const result = joinWithDash(['x', 'y', 'z']);
527
+
528
+ expect(Result.isOk(result)).toBe(true);
529
+
530
+ if (Result.isOk(result)) {
531
+ expect(result.value).toBe('x-y-z');
532
+ }
533
+ });
444
534
  });
445
535
  });