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