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
@@ -17,20 +17,25 @@ export namespace Obj {
17
17
  *
18
18
  * ```ts
19
19
  * const obj1 = { name: 'Alice', age: 30 };
20
+ *
20
21
  * const obj2 = { name: 'Alice', age: 30 };
22
+ *
21
23
  * const obj3 = { name: 'Alice', age: 31 };
22
24
  *
23
25
  * assert.ok(Obj.shallowEq(obj1, obj2));
26
+ *
24
27
  * assert.notOk(Obj.shallowEq(obj1, obj3));
25
28
  *
26
29
  * // Custom equality function
27
30
  * const obj4 = { value: 1 };
31
+ *
28
32
  * const obj5 = { value: 1.00001 };
29
33
  *
30
34
  * const closeEnough = (a: unknown, b: unknown): boolean => {
31
35
  * if (typeof a === 'number' && typeof b === 'number') {
32
36
  * return Math.abs(a - b) < 0.001;
33
37
  * }
38
+ *
34
39
  * return Object.is(a, b);
35
40
  * };
36
41
  *
@@ -50,6 +55,7 @@ export namespace Obj {
50
55
  eq: (x: unknown, y: unknown) => boolean = Object.is,
51
56
  ): boolean => {
52
57
  const aEntries = Object.entries(a);
58
+
53
59
  const bEntries = Object.entries(b);
54
60
 
55
61
  if (aEntries.length !== bEntries.length) return false;
@@ -78,6 +84,7 @@ export namespace Obj {
78
84
  *
79
85
  * // Direct usage
80
86
  * const publicInfo = Obj.pick(user, ['id', 'name', 'role']);
87
+ *
81
88
  * assert.deepStrictEqual(publicInfo, {
82
89
  * id: 1,
83
90
  * name: 'Bob',
@@ -122,6 +129,7 @@ export namespace Obj {
122
129
  switch (args.length) {
123
130
  case 2: {
124
131
  const [record, keys] = args;
132
+
125
133
  const keysSet = new Set<keyof R>(keys);
126
134
 
127
135
  return (
@@ -134,6 +142,7 @@ export namespace Obj {
134
142
 
135
143
  case 1: {
136
144
  const [keys] = args;
145
+
137
146
  return (record: R) => pick(record, keys);
138
147
  }
139
148
  }
@@ -161,6 +170,7 @@ export namespace Obj {
161
170
  *
162
171
  * // Direct usage - remove sensitive fields
163
172
  * const safeUser = Obj.omit(user, ['password', 'internalNote']);
173
+ *
164
174
  * assert.deepStrictEqual(safeUser, {
165
175
  * id: 1,
166
176
  * name: 'Charlie',
@@ -206,6 +216,7 @@ export namespace Obj {
206
216
  switch (args.length) {
207
217
  case 2: {
208
218
  const [record, keys] = args;
219
+
209
220
  const keysSet = new Set<keyof R>(keys);
210
221
 
211
222
  return (
@@ -218,12 +229,14 @@ export namespace Obj {
218
229
 
219
230
  case 1: {
220
231
  const [keys] = args;
232
+
221
233
  return <R2 extends UnknownRecord>(record: R2) => {
222
234
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
223
235
  const result = omit(record, keys as readonly (keyof R2)[]) as Omit<
224
236
  R2,
225
237
  ArrayElement<Keys>
226
238
  >;
239
+
227
240
  return result;
228
241
  };
229
242
  }
@@ -253,6 +266,7 @@ export namespace Obj {
253
266
  * ] as const;
254
267
  *
255
268
  * const obj1 = Obj.fromEntries(entries1);
269
+ *
256
270
  * assert.deepStrictEqual(obj1, {
257
271
  * name: 'David',
258
272
  * age: 25,
@@ -266,6 +280,7 @@ export namespace Obj {
266
280
  * ];
267
281
  *
268
282
  * const obj2 = Obj.fromEntries(dynamicEntries);
283
+ *
269
284
  * assert.deepStrictEqual(obj2, { x: 10, y: 20 });
270
285
  * ```
271
286
  *
@@ -38,6 +38,7 @@ describe('pick', () => {
38
38
 
39
39
  test('pick should support curried form', () => {
40
40
  const pickAB = Obj.pick(['a', 'b']);
41
+
41
42
  const result = pickAB({ a: 1, b: 2, c: 3, d: 4 });
42
43
 
43
44
  assert.deepStrictEqual(result, { a: 1, b: 2 });
@@ -45,6 +46,7 @@ describe('pick', () => {
45
46
 
46
47
  test('pick should work with pipe when curried', () => {
47
48
  const pickIdAndName = Obj.pick(['id', 'name']);
49
+
48
50
  const user = { id: 1, name: 'Alice', email: 'alice@example.com', age: 30 };
49
51
 
50
52
  const result = pipe(user).map(pickIdAndName).value;
@@ -54,6 +56,7 @@ describe('pick', () => {
54
56
 
55
57
  test('pick should handle empty keys in curried form', () => {
56
58
  const pickNone = Obj.pick([]);
59
+
57
60
  const result = pickNone({ a: 1, b: 2 });
58
61
 
59
62
  assert.deepStrictEqual(result, {});
@@ -61,6 +64,7 @@ describe('pick', () => {
61
64
 
62
65
  test('pick should work for records that only partially contain the key in curried form', () => {
63
66
  const pickVisible = Obj.pick(['name', 'age']);
67
+
64
68
  const user = {
65
69
  id: 1,
66
70
  name: 'Alice',
@@ -85,6 +89,7 @@ describe('omit', () => {
85
89
 
86
90
  test('omit should support curried form', () => {
87
91
  const omitC = Obj.omit(['c']);
92
+
88
93
  const result = omitC({ a: 1, b: 2, c: 3, d: 4 });
89
94
 
90
95
  assert.deepStrictEqual(result, { a: 1, b: 2, d: 4 });
@@ -92,6 +97,7 @@ describe('omit', () => {
92
97
 
93
98
  test('omit should work with pipe when curried', () => {
94
99
  const omitSensitive = Obj.omit(['password', 'email']);
100
+
95
101
  const user = {
96
102
  id: 1,
97
103
  name: 'Alice',
@@ -106,7 +112,9 @@ describe('omit', () => {
106
112
 
107
113
  test('omit should handle empty keys in curried form', () => {
108
114
  const omitNone = Obj.omit([]);
115
+
109
116
  const original = { a: 1, b: 2, c: 3 };
117
+
110
118
  const result = omitNone(original);
111
119
 
112
120
  assert.deepStrictEqual(result, original);
@@ -114,6 +122,7 @@ describe('omit', () => {
114
122
 
115
123
  test('should omit multiple keys in curried form', () => {
116
124
  const omitBAndD = Obj.omit(['b', 'd']);
125
+
117
126
  const result = omitBAndD({ a: 1, b: 2, c: 3, d: 4, e: 5 });
118
127
 
119
128
  assert.deepStrictEqual(result, { a: 1, c: 3, e: 5 });
@@ -121,6 +130,7 @@ describe('omit', () => {
121
130
 
122
131
  test('omit should work for records that only partially contain the key in curried form', () => {
123
132
  const omitSensitive = Obj.omit(['password', 'email']);
133
+
124
134
  const user = {
125
135
  id: 1,
126
136
  name: 'Alice',
@@ -4,6 +4,7 @@ import { castDeepMutable, castMutable } from './cast-mutable.mjs';
4
4
  describe(castMutable, () => {
5
5
  test('should allow mutating arrays that were readonly', () => {
6
6
  const readonlyArray: readonly number[] = [1, 2, 3];
7
+
7
8
  const mut_array = castMutable(readonlyArray);
8
9
 
9
10
  expectType<typeof mut_array, number[]>('=');
@@ -11,6 +12,7 @@ describe(castMutable, () => {
11
12
  mut_array.push(4);
12
13
 
13
14
  assert.deepStrictEqual(mut_array, [1, 2, 3, 4]);
15
+
14
16
  assert.deepStrictEqual(readonlyArray, [1, 2, 3, 4]);
15
17
  });
16
18
 
@@ -21,12 +23,15 @@ describe(castMutable, () => {
21
23
  };
22
24
 
23
25
  const mut_user = castMutable(readonlyUser);
26
+
24
27
  expectType<typeof mut_user, { name: string; age: number }>('=');
25
28
 
26
29
  mut_user.age = 31;
30
+
27
31
  mut_user.name = 'Bob';
28
32
 
29
33
  assert.deepStrictEqual(mut_user, { name: 'Bob', age: 31 });
34
+
30
35
  assert.deepStrictEqual(readonlyUser, { name: 'Bob', age: 31 });
31
36
  });
32
37
  });
@@ -65,12 +70,14 @@ describe(castDeepMutable, () => {
65
70
  expectType<typeof mut_state, MutableState>('~=');
66
71
 
67
72
  mut_state.user.profile.tags.push('editor');
73
+
68
74
  mut_state.user.profile.name = 'Bob';
69
75
 
70
76
  assert.deepStrictEqual(mut_state.user.profile, {
71
77
  name: 'Bob',
72
78
  tags: ['admin', 'owner', 'editor'],
73
79
  });
80
+
74
81
  assert.deepStrictEqual(readonlyState.user.profile.tags, [
75
82
  'admin',
76
83
  'owner',
@@ -3,6 +3,7 @@ import { castDeepReadonly, castReadonly } from './cast-readonly.mjs';
3
3
  describe(castReadonly, () => {
4
4
  test('should cast mutable array to readonly', () => {
5
5
  const mutableArr = [1, 2, 3];
6
+
6
7
  const readonlyArr = castReadonly(mutableArr);
7
8
 
8
9
  expect(readonlyArr).toBe(mutableArr); // Same reference
@@ -12,6 +13,7 @@ describe(castReadonly, () => {
12
13
 
13
14
  test('should cast mutable object to readonly', () => {
14
15
  const mutableObj = { x: 1, y: 2 };
16
+
15
17
  const readonlyObj = castReadonly(mutableObj);
16
18
 
17
19
  expect(readonlyObj).toBe(mutableObj); // Same reference
@@ -21,20 +23,25 @@ describe(castReadonly, () => {
21
23
 
22
24
  test('should preserve the runtime value', () => {
23
25
  const original = { value: 42 };
26
+
24
27
  const readonly = castReadonly(original);
25
28
 
26
29
  expect(readonly.value).toBe(42);
30
+
27
31
  expect(Object.is(readonly, original)).toBe(true);
28
32
  });
29
33
 
30
34
  test('castReadonly should work with primitives', () => {
31
35
  expect(castReadonly(42)).toBe(42);
36
+
32
37
  expect(castReadonly('hello')).toBe('hello');
38
+
33
39
  expect(castReadonly(true)).toBe(true);
34
40
  });
35
41
 
36
42
  test('castReadonly should work with null and undefined', () => {
37
43
  expect(castReadonly(null)).toBeNull();
44
+
38
45
  // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
39
46
  expect(castReadonly(undefined)).toBeUndefined();
40
47
  });
@@ -46,6 +53,7 @@ describe(castDeepReadonly, () => {
46
53
  a: { b: [1, 2, 3] },
47
54
  c: { d: { e: 'value' } },
48
55
  };
56
+
49
57
  const readonlyNested = castDeepReadonly(mutableNested);
50
58
 
51
59
  expect(readonlyNested).toBe(mutableNested); // Same reference
@@ -60,10 +68,13 @@ describe(castDeepReadonly, () => {
60
68
  users: [{ id: 1, profile: { name: 'Alice' } }],
61
69
  settings: { theme: 'dark', options: { debug: true } },
62
70
  };
71
+
63
72
  const readonly = castDeepReadonly(complex);
64
73
 
65
74
  expect(readonly).toBe(complex);
75
+
66
76
  expect(readonly.users[0]?.profile.name).toBe('Alice');
77
+
67
78
  expect(readonly.settings.options.debug).toBe(true);
68
79
  });
69
80
 
@@ -72,21 +83,27 @@ describe(castDeepReadonly, () => {
72
83
  { id: 1, meta: { active: true } },
73
84
  { id: 2, meta: { active: false } },
74
85
  ];
86
+
75
87
  const readonly = castDeepReadonly(data);
76
88
 
77
89
  expect(readonly).toBe(data);
90
+
78
91
  expect(readonly[0]?.meta.active).toBe(true);
92
+
79
93
  expect(readonly[1]?.meta.active).toBe(false);
80
94
  });
81
95
 
82
96
  test('castDeepReadonly should work with primitives', () => {
83
97
  expect(castDeepReadonly(42)).toBe(42);
98
+
84
99
  expect(castDeepReadonly('hello')).toBe('hello');
100
+
85
101
  expect(castDeepReadonly(true)).toBe(true);
86
102
  });
87
103
 
88
104
  test('castDeepReadonly should work with null and undefined', () => {
89
105
  expect(castDeepReadonly(null)).toBeNull();
106
+
90
107
  // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
91
108
  expect(castDeepReadonly(undefined)).toBeUndefined();
92
109
  });
@@ -18,12 +18,16 @@ describe(ifThen, () => {
18
18
  test('should work for validation logic', () => {
19
19
  const validateField = (value: string, isRequired: boolean): boolean => {
20
20
  const hasValue = value.trim().length > 0;
21
+
21
22
  return ifThen(isRequired, hasValue);
22
23
  };
23
24
 
24
25
  expect(validateField('hello', true)).toBe(true); // required and has value
26
+
25
27
  expect(validateField('', true)).toBe(false); // required but no value
28
+
26
29
  expect(validateField('', false)).toBe(true); // not required, so valid
30
+
27
31
  expect(validateField('hello', false)).toBe(true); // not required, has value
28
32
  });
29
33
 
@@ -36,8 +40,11 @@ describe(ifThen, () => {
36
40
  ifThen(isAdmin, hasPermission);
37
41
 
38
42
  expect(checkPermission(true, true)).toBe(true); // admin with permission
43
+
39
44
  expect(checkPermission(true, false)).toBe(false); // admin without permission
45
+
40
46
  expect(checkPermission(false, true)).toBe(true); // non-admin with permission
47
+
41
48
  expect(checkPermission(false, false)).toBe(true); // non-admin without permission
42
49
  });
43
50
 
@@ -50,8 +57,11 @@ describe(ifThen, () => {
50
57
  ifThen(isPremium, hasAllFeatures);
51
58
 
52
59
  expect(validateSubscription(true, true)).toBe(true); // premium with all features
60
+
53
61
  expect(validateSubscription(true, false)).toBe(false); // premium without all features
62
+
54
63
  expect(validateSubscription(false, true)).toBe(true); // non-premium with features
64
+
55
65
  expect(validateSubscription(false, false)).toBe(true); // non-premium without features
56
66
  });
57
67
 
@@ -60,8 +70,11 @@ describe(ifThen, () => {
60
70
  ifThen(a, b) && ifThen(b, c);
61
71
 
62
72
  expect(validateChain(true, true, true)).toBe(true); // valid chain
73
+
63
74
  expect(validateChain(true, false, true)).toBe(false); // breaks at first implication
75
+
64
76
  expect(validateChain(false, false, false)).toBe(true); // vacuously true chain
77
+
65
78
  expect(validateChain(true, true, false)).toBe(false); // breaks at second implication
66
79
  });
67
80
 
@@ -71,8 +84,11 @@ describe(ifThen, () => {
71
84
  ifThen(!isExpired, isValid);
72
85
 
73
86
  expect(checkExpiredLogic(false, true)).toBe(true); // not expired and valid
87
+
74
88
  expect(checkExpiredLogic(false, false)).toBe(false); // not expired but invalid
89
+
75
90
  expect(checkExpiredLogic(true, true)).toBe(true); // expired but valid (vacuous)
91
+
76
92
  expect(checkExpiredLogic(true, false)).toBe(true); // expired and invalid (vacuous)
77
93
  });
78
94
  });
@@ -36,10 +36,13 @@ export function mapNullable<const A, const B>(
36
36
  switch (args.length) {
37
37
  case 2: {
38
38
  const [value, mapFn] = args;
39
+
39
40
  return value == null ? undefined : mapFn(value);
40
41
  }
42
+
41
43
  case 1: {
42
44
  const [mapFn] = args;
45
+
43
46
  return (value: A | null | undefined) => mapNullable(value, mapFn);
44
47
  }
45
48
  }
@@ -38,6 +38,7 @@ describe(mapNullable, () => {
38
38
 
39
39
  test('should work with complex transformations', () => {
40
40
  const user = { name: 'Alice', age: 30 };
41
+
41
42
  const result = mapNullable(
42
43
  user,
43
44
  (u) => `${u.name} is ${u.age} years old`,
@@ -48,11 +49,13 @@ describe(mapNullable, () => {
48
49
 
49
50
  test('should work with nullable object properties', () => {
50
51
  const user: { name?: string } = { name: 'Bob' };
52
+
51
53
  const result = mapNullable(user.name, (name) => name.toUpperCase());
52
54
 
53
55
  expect(result).toBe('BOB');
54
56
 
55
57
  const userWithoutName: { name?: string } = {};
58
+
56
59
  const resultEmpty = mapNullable(userWithoutName.name, (name) =>
57
60
  name.toUpperCase(),
58
61
  );
@@ -100,6 +103,7 @@ describe(mapNullable, () => {
100
103
  );
101
104
 
102
105
  const user = { name: 'Charlie', age: 25 };
106
+
103
107
  const result1 = getName(user);
104
108
 
105
109
  expect(result1).toBe('Charlie');
@@ -111,6 +115,7 @@ describe(mapNullable, () => {
111
115
 
112
116
  test('should work with pipe composition', () => {
113
117
  const toUpperCase = mapNullable((s: string) => s.toUpperCase());
118
+
114
119
  const addGreeting = mapNullable((s: string) => `Hello, ${s}!`);
115
120
 
116
121
  const result = pipe('world').map(toUpperCase).map(addGreeting).value;
@@ -120,6 +125,7 @@ describe(mapNullable, () => {
120
125
 
121
126
  test('should handle null values in pipe composition', () => {
122
127
  const toUpperCase = mapNullable((s: string) => s.toUpperCase());
128
+
123
129
  const addGreeting = mapNullable((s: string) => `Hello, ${s}!`);
124
130
 
125
131
  const result = pipe(null as string | null)
@@ -131,7 +137,9 @@ describe(mapNullable, () => {
131
137
 
132
138
  test('should work with multiple transformations in pipe', () => {
133
139
  const toStr = mapNullable((n: number) => n.toString());
140
+
134
141
  const addPrefix = mapNullable((s: string) => `Number: ${s}`);
142
+
135
143
  const toUpperCase = mapNullable((s: string) => s.toUpperCase());
136
144
 
137
145
  const result = pipe(42 as number | null)
@@ -206,7 +214,9 @@ describe(mapNullable, () => {
206
214
  const getValue = (): string | null => 'hello';
207
215
 
208
216
  const step1 = mapNullable(getValue(), (s) => s.toUpperCase());
217
+
209
218
  const step2 = mapNullable(step1, (s) => s.length);
219
+
210
220
  const step3 = mapNullable(step2, (n) => n * 2);
211
221
 
212
222
  expect(step3).toBe(10); // 'HELLO'.length * 2 = 5 * 2 = 10
@@ -216,25 +226,33 @@ describe(mapNullable, () => {
216
226
  const getValue = (): string | null => null;
217
227
 
218
228
  const step1 = mapNullable(getValue(), (s) => s.toUpperCase());
229
+
219
230
  const step2 = mapNullable(step1, (s) => s.length);
231
+
220
232
  const step3 = mapNullable(step2, (n) => n * 2);
221
233
 
222
234
  expect(step1).toBeUndefined();
235
+
223
236
  expect(step2).toBeUndefined();
237
+
224
238
  expect(step3).toBeUndefined();
225
239
  });
226
240
 
227
241
  test('should work with curried functions in chain', () => {
228
242
  const toUpperCase = mapNullable((s: string) => s.toUpperCase());
243
+
229
244
  const getLength = mapNullable((s: string) => s.length);
245
+
230
246
  const double = mapNullable((n: number) => n * 2);
231
247
 
232
248
  const input1 = 'hello';
249
+
233
250
  const result1 = double(getLength(toUpperCase(input1)));
234
251
 
235
252
  expect(result1).toBe(10);
236
253
 
237
254
  const input2: string | null = null;
255
+
238
256
  const result2 = double(getLength(toUpperCase(input2)));
239
257
 
240
258
  expect(result2).toBeUndefined();
@@ -264,9 +282,11 @@ describe(mapNullable, () => {
264
282
  const extractUserName = mapNullable(
265
283
  (r: ApiResponse) => r.data?.user?.name,
266
284
  );
285
+
267
286
  const formatName = mapNullable((name: string) => `Mr. ${name}`);
268
287
 
269
288
  const userName = extractUserName(response);
289
+
270
290
  const formattedName = formatName(userName);
271
291
 
272
292
  expect(formattedName).toBe('Mr. John Doe');
@@ -284,15 +304,19 @@ describe(mapNullable, () => {
284
304
  };
285
305
 
286
306
  const extractAge = mapNullable((data: FormDataType) => data.age);
307
+
287
308
  const parseAge = mapNullable((ageStr: string) =>
288
309
  Number.parseInt(ageStr, 10),
289
310
  );
311
+
290
312
  const validateAge = mapNullable((age: number) =>
291
313
  age >= 18 ? age : null,
292
314
  );
293
315
 
294
316
  const extractedAge = extractAge(formData);
317
+
295
318
  const parsedAge = parseAge(extractedAge);
319
+
296
320
  const validAge = validateAge(parsedAge);
297
321
 
298
322
  expect(validAge).toBe(25);
@@ -310,14 +334,17 @@ describe(mapNullable, () => {
310
334
  };
311
335
 
312
336
  const extractAge = mapNullable((data: FormDataType) => data.age);
337
+
313
338
  const parseAge = mapNullable((ageStr: string) =>
314
339
  Number.parseInt(ageStr, 10),
315
340
  );
316
341
 
317
342
  const extractedAge = extractAge(incompleteFormData);
343
+
318
344
  const parsedAge = parseAge(extractedAge);
319
345
 
320
346
  expect(extractedAge).toBeUndefined();
347
+
321
348
  expect(parsedAge).toBeUndefined();
322
349
  });
323
350
  });