ts-data-forge 5.0.1 → 5.1.1

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 (539) hide show
  1. package/README.md +101 -50
  2. package/dist/array/impl/array-utils-creation.d.mts +14 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
  4. package/dist/array/impl/array-utils-creation.mjs +12 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  6. package/dist/array/impl/array-utils-element-access.d.mts +10 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
  8. package/dist/array/impl/array-utils-element-access.mjs +6 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  10. package/dist/array/impl/array-utils-modification.d.mts +14 -0
  11. package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
  12. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  13. package/dist/array/impl/array-utils-reducing-value.d.mts +34 -10
  14. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
  15. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  16. package/dist/array/impl/array-utils-search.d.mts +34 -4
  17. package/dist/array/impl/array-utils-search.d.mts.map +1 -1
  18. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-set-op.d.mts +20 -7
  20. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
  21. package/dist/array/impl/array-utils-set-op.mjs +20 -7
  22. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-size.d.mts +5 -2
  24. package/dist/array/impl/array-utils-size.d.mts.map +1 -1
  25. package/dist/array/impl/array-utils-size.mjs +5 -2
  26. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  27. package/dist/array/impl/array-utils-slice-clamped.d.mts +2 -0
  28. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -1
  29. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  30. package/dist/array/impl/array-utils-slicing.d.mts +17 -2
  31. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  32. package/dist/array/impl/array-utils-slicing.mjs +9 -2
  33. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  34. package/dist/array/impl/array-utils-transformation.d.mts +27 -0
  35. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  36. package/dist/array/impl/array-utils-transformation.mjs +6 -0
  37. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  38. package/dist/array/impl/array-utils-validation.d.mts +35 -18
  39. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  40. package/dist/array/impl/array-utils-validation.mjs +25 -14
  41. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  42. package/dist/collections/imap-mapped.mjs.map +1 -1
  43. package/dist/collections/imap.d.mts +35 -15
  44. package/dist/collections/imap.d.mts.map +1 -1
  45. package/dist/collections/imap.mjs +5 -3
  46. package/dist/collections/imap.mjs.map +1 -1
  47. package/dist/collections/iset-mapped.d.mts +46 -19
  48. package/dist/collections/iset-mapped.d.mts.map +1 -1
  49. package/dist/collections/iset-mapped.mjs +9 -2
  50. package/dist/collections/iset-mapped.mjs.map +1 -1
  51. package/dist/collections/iset.d.mts +48 -19
  52. package/dist/collections/iset.d.mts.map +1 -1
  53. package/dist/collections/iset.mjs +9 -2
  54. package/dist/collections/iset.mjs.map +1 -1
  55. package/dist/collections/queue.d.mts +65 -25
  56. package/dist/collections/queue.d.mts.map +1 -1
  57. package/dist/collections/queue.mjs +13 -5
  58. package/dist/collections/queue.mjs.map +1 -1
  59. package/dist/collections/stack.d.mts +60 -25
  60. package/dist/collections/stack.d.mts.map +1 -1
  61. package/dist/collections/stack.mjs +12 -5
  62. package/dist/collections/stack.mjs.map +1 -1
  63. package/dist/entry-point.mjs +1 -1
  64. package/dist/functional/match.d.mts +1 -1
  65. package/dist/functional/match.d.mts.map +1 -1
  66. package/dist/functional/match.mjs.map +1 -1
  67. package/dist/functional/optional/impl/optional-expect-to-be.d.mts +3 -2
  68. package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -1
  69. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  70. package/dist/functional/optional/impl/optional-filter.d.mts +3 -0
  71. package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -1
  72. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  73. package/dist/functional/optional/impl/optional-flat-map.d.mts +2 -0
  74. package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -1
  75. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  76. package/dist/functional/optional/impl/optional-from-nullable.d.mts +2 -0
  77. package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -1
  78. package/dist/functional/optional/impl/optional-from-nullable.mjs +2 -0
  79. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  80. package/dist/functional/optional/impl/optional-is-none.d.mts +1 -1
  81. package/dist/functional/optional/impl/optional-is-none.mjs +1 -1
  82. package/dist/functional/optional/impl/optional-is-optional.d.mts +4 -2
  83. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
  84. package/dist/functional/optional/impl/optional-is-optional.mjs +4 -2
  85. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  86. package/dist/functional/optional/impl/optional-is-some.d.mts +2 -1
  87. package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -1
  88. package/dist/functional/optional/impl/optional-is-some.mjs +2 -1
  89. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  90. package/dist/functional/optional/impl/optional-map.d.mts +2 -0
  91. package/dist/functional/optional/impl/optional-map.d.mts.map +1 -1
  92. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  93. package/dist/functional/optional/impl/optional-none.d.mts +4 -2
  94. package/dist/functional/optional/impl/optional-none.d.mts.map +1 -1
  95. package/dist/functional/optional/impl/optional-none.mjs +4 -2
  96. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  97. package/dist/functional/optional/impl/optional-or-else.d.mts +4 -0
  98. package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -1
  99. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  100. package/dist/functional/optional/impl/optional-some.d.mts +5 -3
  101. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
  102. package/dist/functional/optional/impl/optional-some.mjs +4 -2
  103. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  104. package/dist/functional/optional/impl/optional-to-nullable.d.mts +4 -2
  105. package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -1
  106. package/dist/functional/optional/impl/optional-to-nullable.mjs +4 -2
  107. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  108. package/dist/functional/optional/impl/optional-unwrap-or.d.mts +7 -4
  109. package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -1
  110. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  111. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +2 -1
  112. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -1
  113. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +2 -1
  114. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  115. package/dist/functional/optional/impl/optional-unwrap.d.mts +4 -2
  116. package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -1
  117. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  118. package/dist/functional/optional/impl/optional-zip.d.mts +3 -1
  119. package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -1
  120. package/dist/functional/optional/impl/optional-zip.mjs +3 -1
  121. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  122. package/dist/functional/pipe.d.mts +2 -2
  123. package/dist/functional/result/impl/result-err.d.mts +4 -2
  124. package/dist/functional/result/impl/result-err.d.mts.map +1 -1
  125. package/dist/functional/result/impl/result-err.mjs +3 -1
  126. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  127. package/dist/functional/result/impl/result-expect-to-be.d.mts +3 -2
  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 +4 -1
  137. package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -1
  138. package/dist/functional/result/impl/result-from-promise.mjs +4 -1
  139. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  140. package/dist/functional/result/impl/result-from-throwable.d.mts +3 -1
  141. package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -1
  142. package/dist/functional/result/impl/result-from-throwable.mjs +3 -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 +4 -2
  145. package/dist/functional/result/impl/result-is-err.d.mts.map +1 -1
  146. package/dist/functional/result/impl/result-is-err.mjs +4 -2
  147. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  148. package/dist/functional/result/impl/result-is-ok.d.mts +4 -2
  149. package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -1
  150. package/dist/functional/result/impl/result-is-ok.mjs +4 -2
  151. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  152. package/dist/functional/result/impl/result-is-result.d.mts +7 -3
  153. package/dist/functional/result/impl/result-is-result.d.mts.map +1 -1
  154. package/dist/functional/result/impl/result-is-result.mjs +7 -3
  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 +4 -2
  163. package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
  164. package/dist/functional/result/impl/result-ok.mjs +3 -1
  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 +7 -4
  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 +3 -1
  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 +3 -1
  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 +3 -2
  185. package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -1
  186. package/dist/functional/result/impl/result-unwrap-err.mjs +3 -2
  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 +7 -4
  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 +3 -2
  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 +3 -1
  195. package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -1
  196. package/dist/functional/result/impl/result-unwrap-throw.mjs +3 -1
  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 +3 -2
  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 +2 -1
  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 +3 -1
  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 +3 -1
  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 +3 -1
  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 +3 -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 +7 -3
  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 +7 -3
  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 +12 -1
  294. package/dist/guard/has-key.d.mts +6 -3
  295. package/dist/guard/has-key.d.mts.map +1 -1
  296. package/dist/guard/has-key.mjs +2 -2
  297. package/dist/guard/index.mjs +1 -1
  298. package/dist/guard/is-record.d.mts +31 -0
  299. package/dist/guard/is-record.d.mts.map +1 -1
  300. package/dist/guard/is-record.mjs +32 -1
  301. package/dist/guard/is-record.mjs.map +1 -1
  302. package/dist/guard/is-type.d.mts +3 -0
  303. package/dist/guard/is-type.d.mts.map +1 -1
  304. package/dist/guard/is-type.mjs +3 -0
  305. package/dist/guard/is-type.mjs.map +1 -1
  306. package/dist/guard/key-is-in.d.mts +3 -2
  307. package/dist/guard/key-is-in.d.mts.map +1 -1
  308. package/dist/guard/key-is-in.mjs +3 -2
  309. package/dist/guard/key-is-in.mjs.map +1 -1
  310. package/dist/index.mjs +1 -1
  311. package/dist/iterator/range.d.mts +4 -0
  312. package/dist/iterator/range.d.mts.map +1 -1
  313. package/dist/iterator/range.mjs +1 -0
  314. package/dist/iterator/range.mjs.map +1 -1
  315. package/dist/json/json.d.mts +42 -21
  316. package/dist/json/json.d.mts.map +1 -1
  317. package/dist/json/json.mjs +42 -21
  318. package/dist/json/json.mjs.map +1 -1
  319. package/dist/number/branded-types/int.d.mts +33 -19
  320. package/dist/number/branded-types/int.d.mts.map +1 -1
  321. package/dist/number/branded-types/int.mjs +33 -19
  322. package/dist/number/branded-types/int.mjs.map +1 -1
  323. package/dist/number/branded-types/non-zero-safe-int.mjs +2 -2
  324. package/dist/number/branded-types/positive-int.d.mts +34 -20
  325. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  326. package/dist/number/branded-types/positive-int.mjs +34 -20
  327. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  328. package/dist/number/branded-types/positive-safe-int.d.mts +47 -26
  329. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  330. package/dist/number/branded-types/positive-safe-int.mjs +48 -27
  331. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  332. package/dist/number/branded-types/safe-int.d.mts +48 -27
  333. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  334. package/dist/number/branded-types/safe-int.mjs +50 -29
  335. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  336. package/dist/number/branded-types/safe-uint.mjs +1 -1
  337. package/dist/number/branded-types/uint.d.mts +31 -19
  338. package/dist/number/branded-types/uint.d.mts.map +1 -1
  339. package/dist/number/branded-types/uint.mjs +31 -19
  340. package/dist/number/branded-types/uint.mjs.map +1 -1
  341. package/dist/number/num.d.mts +29 -20
  342. package/dist/number/num.d.mts.map +1 -1
  343. package/dist/number/num.mjs +24 -17
  344. package/dist/number/num.mjs.map +1 -1
  345. package/dist/number/refined-number-utils.d.mts +33 -11
  346. package/dist/number/refined-number-utils.d.mts.map +1 -1
  347. package/dist/number/refined-number-utils.mjs +33 -11
  348. package/dist/number/refined-number-utils.mjs.map +1 -1
  349. package/dist/object/object.d.mts +12 -3
  350. package/dist/object/object.d.mts.map +1 -1
  351. package/dist/object/object.mjs +10 -3
  352. package/dist/object/object.mjs.map +1 -1
  353. package/dist/others/map-nullable.mjs.map +1 -1
  354. package/dist/others/tuple.d.mts +14 -3
  355. package/dist/others/tuple.d.mts.map +1 -1
  356. package/dist/others/tuple.mjs +14 -3
  357. package/dist/others/tuple.mjs.map +1 -1
  358. package/dist/others/unknown-to-string.d.mts.map +1 -1
  359. package/dist/others/unknown-to-string.mjs.map +1 -1
  360. package/dist/promise/promise.d.mts +8 -4
  361. package/dist/promise/promise.d.mts.map +1 -1
  362. package/dist/promise/promise.mjs +8 -4
  363. package/dist/promise/promise.mjs.map +1 -1
  364. package/package.json +26 -28
  365. package/src/array/impl/array-utils-creation.mts +20 -0
  366. package/src/array/impl/array-utils-creation.test.mts +72 -1
  367. package/src/array/impl/array-utils-element-access.mts +13 -0
  368. package/src/array/impl/array-utils-element-access.test.mts +36 -15
  369. package/src/array/impl/array-utils-iterators.test.mts +17 -0
  370. package/src/array/impl/array-utils-modification.mts +78 -19
  371. package/src/array/impl/array-utils-modification.test.mts +75 -0
  372. package/src/array/impl/array-utils-overload-type-error.test.mts +19 -0
  373. package/src/array/impl/array-utils-reducing-value.mts +61 -16
  374. package/src/array/impl/array-utils-reducing-value.test.mts +107 -25
  375. package/src/array/impl/array-utils-search.mts +57 -4
  376. package/src/array/impl/array-utils-search.test.mts +61 -10
  377. package/src/array/impl/array-utils-set-op.mts +26 -7
  378. package/src/array/impl/array-utils-set-op.test.mts +129 -13
  379. package/src/array/impl/array-utils-size.mts +5 -2
  380. package/src/array/impl/array-utils-size.test.mts +1 -0
  381. package/src/array/impl/array-utils-slice-clamped.mts +7 -0
  382. package/src/array/impl/array-utils-slice-clamped.test.mts +20 -0
  383. package/src/array/impl/array-utils-slicing.mts +29 -2
  384. package/src/array/impl/array-utils-slicing.test.mts +57 -0
  385. package/src/array/impl/array-utils-transformation.mts +58 -0
  386. package/src/array/impl/array-utils-transformation.test.mts +115 -3
  387. package/src/array/impl/array-utils-validation.mts +41 -18
  388. package/src/array/impl/array-utils-validation.test.mts +176 -78
  389. package/src/array/impl/array.test.mts +18 -6
  390. package/src/collections/imap-mapped.mts +11 -0
  391. package/src/collections/imap-mapped.test.mts +86 -18
  392. package/src/collections/imap.mts +47 -15
  393. package/src/collections/imap.test.mts +137 -31
  394. package/src/collections/iset-mapped.mts +54 -19
  395. package/src/collections/iset-mapped.test.mts +163 -52
  396. package/src/collections/iset.mts +53 -19
  397. package/src/collections/iset.test.mts +323 -130
  398. package/src/collections/queue.mts +78 -25
  399. package/src/collections/queue.test.mts +65 -35
  400. package/src/collections/stack.mts +67 -25
  401. package/src/collections/stack.test.mts +59 -15
  402. package/src/functional/match.mts +17 -1
  403. package/src/functional/match.test.mts +2 -0
  404. package/src/functional/optional/impl/optional-expect-to-be.mts +5 -2
  405. package/src/functional/optional/impl/optional-filter.mts +6 -0
  406. package/src/functional/optional/impl/optional-flat-map.mts +4 -0
  407. package/src/functional/optional/impl/optional-from-nullable.mts +2 -0
  408. package/src/functional/optional/impl/optional-is-none.mts +1 -1
  409. package/src/functional/optional/impl/optional-is-optional.mts +4 -2
  410. package/src/functional/optional/impl/optional-is-some.mts +2 -1
  411. package/src/functional/optional/impl/optional-map.mts +5 -0
  412. package/src/functional/optional/impl/optional-none.mts +4 -2
  413. package/src/functional/optional/impl/optional-or-else.mts +6 -0
  414. package/src/functional/optional/impl/optional-some.mts +5 -3
  415. package/src/functional/optional/impl/optional-to-nullable.mts +4 -2
  416. package/src/functional/optional/impl/optional-unwrap-or.mts +9 -4
  417. package/src/functional/optional/impl/optional-unwrap-throw.mts +2 -1
  418. package/src/functional/optional/impl/optional-unwrap.mts +4 -2
  419. package/src/functional/optional/impl/optional-zip.mts +3 -1
  420. package/src/functional/optional.test.mts +126 -54
  421. package/src/functional/pipe.mts +2 -2
  422. package/src/functional/pipe.test.mts +7 -4
  423. package/src/functional/result/impl/result-err.mts +4 -2
  424. package/src/functional/result/impl/result-expect-to-be.mts +5 -2
  425. package/src/functional/result/impl/result-flat-map.mts +7 -0
  426. package/src/functional/result/impl/result-fold.mts +6 -0
  427. package/src/functional/result/impl/result-from-promise.mts +4 -1
  428. package/src/functional/result/impl/result-from-throwable.mts +5 -1
  429. package/src/functional/result/impl/result-is-err.mts +4 -2
  430. package/src/functional/result/impl/result-is-ok.mts +4 -2
  431. package/src/functional/result/impl/result-is-result.mts +7 -3
  432. package/src/functional/result/impl/result-map-err.mts +5 -0
  433. package/src/functional/result/impl/result-map.mts +6 -0
  434. package/src/functional/result/impl/result-ok.mts +4 -2
  435. package/src/functional/result/impl/result-or-else.mts +6 -0
  436. package/src/functional/result/impl/result-swap.mts +2 -0
  437. package/src/functional/result/impl/result-to-optional.mts +2 -0
  438. package/src/functional/result/impl/result-unwrap-err-or.mts +9 -4
  439. package/src/functional/result/impl/result-unwrap-err-throw.mts +3 -1
  440. package/src/functional/result/impl/result-unwrap-err.mts +3 -2
  441. package/src/functional/result/impl/result-unwrap-ok-or.mts +9 -4
  442. package/src/functional/result/impl/result-unwrap-ok.mts +4 -2
  443. package/src/functional/result/impl/result-unwrap-throw.mts +3 -1
  444. package/src/functional/result/impl/result-zip.mts +3 -1
  445. package/src/functional/result.test.mts +182 -152
  446. package/src/functional/ternary-result/impl/ternary-result-err.mts +3 -2
  447. package/src/functional/ternary-result/impl/ternary-result-expect-to-be.mts +4 -0
  448. package/src/functional/ternary-result/impl/ternary-result-flat-map.mts +7 -0
  449. package/src/functional/ternary-result/impl/ternary-result-fold.mts +5 -0
  450. package/src/functional/ternary-result/impl/ternary-result-from-promise.mts +3 -1
  451. package/src/functional/ternary-result/impl/ternary-result-from-throwable.mts +4 -1
  452. package/src/functional/ternary-result/impl/ternary-result-is-ok.mts +1 -0
  453. package/src/functional/ternary-result/impl/ternary-result-is-ternary-result.mts +7 -3
  454. package/src/functional/ternary-result/impl/ternary-result-is-warn.mts +1 -0
  455. package/src/functional/ternary-result/impl/ternary-result-map-err.mts +6 -0
  456. package/src/functional/ternary-result/impl/ternary-result-map-warn.mts +6 -0
  457. package/src/functional/ternary-result/impl/ternary-result-map.mts +9 -0
  458. package/src/functional/ternary-result/impl/ternary-result-ok.mts +1 -1
  459. package/src/functional/ternary-result/impl/ternary-result-or-else.mts +5 -0
  460. package/src/functional/ternary-result/impl/ternary-result-to-optional.mts +2 -0
  461. package/src/functional/ternary-result/impl/ternary-result-unwrap-err-or.mts +5 -0
  462. package/src/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mts +1 -0
  463. package/src/functional/ternary-result/impl/ternary-result-unwrap-err.mts +2 -0
  464. package/src/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mts +5 -0
  465. package/src/functional/ternary-result/impl/ternary-result-unwrap-ok.mts +3 -0
  466. package/src/functional/ternary-result/impl/ternary-result-unwrap-throw.mts +1 -0
  467. package/src/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mts +5 -0
  468. package/src/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mts +1 -0
  469. package/src/functional/ternary-result/impl/ternary-result-unwrap-warn.mts +2 -0
  470. package/src/functional/ternary-result/impl/ternary-result-warn.mts +4 -1
  471. package/src/functional/ternary-result/impl/ternary-result-zip.mts +4 -0
  472. package/src/functional/ternary-result.test.mts +99 -8
  473. package/src/globals.d.mts +12 -1
  474. package/src/guard/has-key.mts +8 -5
  475. package/src/guard/has-key.test.mts +9 -5
  476. package/src/guard/is-error.test.mts +143 -0
  477. package/src/guard/is-non-empty-string.test.mts +44 -24
  478. package/src/guard/is-non-null-object.test.mts +45 -26
  479. package/src/guard/is-primitive.test.mts +51 -28
  480. package/src/guard/is-record.mts +34 -0
  481. package/src/guard/is-record.test.mts +28 -7
  482. package/src/guard/is-type.mts +3 -0
  483. package/src/guard/is-type.test.mts +285 -155
  484. package/src/guard/key-is-in.mts +3 -2
  485. package/src/guard/key-is-in.test.mts +2 -2
  486. package/src/iterator/range.mts +9 -0
  487. package/src/json/json.mts +50 -21
  488. package/src/json/json.test.mts +224 -176
  489. package/src/number/branded-types/finite-number.test.mts +51 -11
  490. package/src/number/branded-types/int.mts +33 -19
  491. package/src/number/branded-types/int.test.mts +56 -14
  492. package/src/number/branded-types/int16.test.mts +63 -16
  493. package/src/number/branded-types/int32.test.mts +63 -16
  494. package/src/number/branded-types/non-negative-finite-number.test.mts +52 -12
  495. package/src/number/branded-types/non-negative-int16.test.mts +59 -16
  496. package/src/number/branded-types/non-negative-int32.test.mts +59 -16
  497. package/src/number/branded-types/non-zero-finite-number.test.mts +65 -14
  498. package/src/number/branded-types/non-zero-int.test.mts +72 -19
  499. package/src/number/branded-types/non-zero-int16.test.mts +60 -16
  500. package/src/number/branded-types/non-zero-int32.test.mts +60 -16
  501. package/src/number/branded-types/non-zero-safe-int.mts +2 -2
  502. package/src/number/branded-types/non-zero-safe-int.test.mts +85 -23
  503. package/src/number/branded-types/non-zero-uint16.test.mts +53 -16
  504. package/src/number/branded-types/non-zero-uint32.test.mts +53 -16
  505. package/src/number/branded-types/positive-finite-number.test.mts +59 -14
  506. package/src/number/branded-types/positive-int.mts +34 -20
  507. package/src/number/branded-types/positive-int.test.mts +64 -17
  508. package/src/number/branded-types/positive-int16.test.mts +50 -15
  509. package/src/number/branded-types/positive-int32.test.mts +50 -15
  510. package/src/number/branded-types/positive-safe-int.mts +48 -27
  511. package/src/number/branded-types/positive-safe-int.test.mts +68 -19
  512. package/src/number/branded-types/positive-uint16.test.mts +53 -16
  513. package/src/number/branded-types/positive-uint32.test.mts +53 -16
  514. package/src/number/branded-types/safe-int.mts +50 -29
  515. package/src/number/branded-types/safe-int.test.mts +70 -18
  516. package/src/number/branded-types/safe-uint.mts +1 -1
  517. package/src/number/branded-types/safe-uint.test.mts +65 -17
  518. package/src/number/branded-types/uint.mts +31 -19
  519. package/src/number/branded-types/uint.test.mts +58 -15
  520. package/src/number/branded-types/uint16.test.mts +56 -15
  521. package/src/number/branded-types/uint32.test.mts +56 -15
  522. package/src/number/enum/int8.test.mts +7 -1
  523. package/src/number/enum/uint8.test.mts +7 -1
  524. package/src/number/num.mts +32 -21
  525. package/src/number/num.test.mts +88 -26
  526. package/src/number/refined-number-utils.mts +38 -13
  527. package/src/object/object.mts +19 -3
  528. package/src/object/object.test.mts +16 -6
  529. package/src/others/cast-mutable.test.mts +8 -1
  530. package/src/others/cast-readonly.test.mts +21 -4
  531. package/src/others/if-then.test.mts +40 -24
  532. package/src/others/map-nullable.mts +3 -0
  533. package/src/others/map-nullable.test.mts +27 -0
  534. package/src/others/memoize-function.test.mts +41 -0
  535. package/src/others/tuple.mts +14 -3
  536. package/src/others/unknown-to-string.mts +2 -0
  537. package/src/others/unknown-to-string.test.mts +10 -0
  538. package/src/promise/promise.mts +8 -4
  539. package/src/promise/promise.test.mts +8 -13
@@ -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);
27
- expect(Object.is(readonly, original)).toBe(true);
30
+
31
+ assert.isTrue(Object.is(readonly, original));
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');
33
- expect(castReadonly(true)).toBe(true);
38
+
39
+ assert.isTrue(castReadonly(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,11 +68,14 @@ 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');
67
- expect(readonly.settings.options.debug).toBe(true);
77
+
78
+ assert.isTrue(readonly.settings.options.debug);
68
79
  });
69
80
 
70
81
  test('should work with arrays of objects', () => {
@@ -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');
85
- expect(castDeepReadonly(true)).toBe(true);
100
+
101
+ assert.isTrue(castDeepReadonly(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
  });
@@ -3,28 +3,32 @@ import { ifThen } from './if-then.mjs';
3
3
  describe(ifThen, () => {
4
4
  test('should implement logical implication truth table', () => {
5
5
  // True antecedent, true consequent -> true
6
- expect(ifThen(true, true)).toBe(true);
6
+ assert.isTrue(ifThen(true, true));
7
7
 
8
8
  // True antecedent, false consequent -> false
9
- expect(ifThen(true, false)).toBe(false);
9
+ assert.isFalse(ifThen(true, false));
10
10
 
11
11
  // False antecedent, true consequent -> true (vacuously true)
12
- expect(ifThen(false, true)).toBe(true);
12
+ assert.isTrue(ifThen(false, true));
13
13
 
14
14
  // False antecedent, false consequent -> true (vacuously true)
15
- expect(ifThen(false, false)).toBe(true);
15
+ assert.isTrue(ifThen(false, false));
16
16
  });
17
17
 
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
- expect(validateField('hello', true)).toBe(true); // required and has value
25
- expect(validateField('', true)).toBe(false); // required but no value
26
- expect(validateField('', false)).toBe(true); // not required, so valid
27
- expect(validateField('hello', false)).toBe(true); // not required, has value
25
+ assert.isTrue(validateField('hello', true)); // required and has value
26
+
27
+ assert.isFalse(validateField('', true)); // required but no value
28
+
29
+ assert.isTrue(validateField('', false)); // not required, so valid
30
+
31
+ assert.isTrue(validateField('hello', false)); // not required, has value
28
32
  });
29
33
 
30
34
  test('should work for access control logic', () => {
@@ -35,10 +39,13 @@ describe(ifThen, () => {
35
39
  // If admin, then must have permission
36
40
  ifThen(isAdmin, hasPermission);
37
41
 
38
- expect(checkPermission(true, true)).toBe(true); // admin with permission
39
- expect(checkPermission(true, false)).toBe(false); // admin without permission
40
- expect(checkPermission(false, true)).toBe(true); // non-admin with permission
41
- expect(checkPermission(false, false)).toBe(true); // non-admin without permission
42
+ assert.isTrue(checkPermission(true, true)); // admin with permission
43
+
44
+ assert.isFalse(checkPermission(true, false)); // admin without permission
45
+
46
+ assert.isTrue(checkPermission(false, true)); // non-admin with permission
47
+
48
+ assert.isTrue(checkPermission(false, false)); // non-admin without permission
42
49
  });
43
50
 
44
51
  test('should work for contract validation', () => {
@@ -49,20 +56,26 @@ describe(ifThen, () => {
49
56
  // If premium, then all premium features must be enabled
50
57
  ifThen(isPremium, hasAllFeatures);
51
58
 
52
- expect(validateSubscription(true, true)).toBe(true); // premium with all features
53
- expect(validateSubscription(true, false)).toBe(false); // premium without all features
54
- expect(validateSubscription(false, true)).toBe(true); // non-premium with features
55
- expect(validateSubscription(false, false)).toBe(true); // non-premium without features
59
+ assert.isTrue(validateSubscription(true, true)); // premium with all features
60
+
61
+ assert.isFalse(validateSubscription(true, false)); // premium without all features
62
+
63
+ assert.isTrue(validateSubscription(false, true)); // non-premium with features
64
+
65
+ assert.isTrue(validateSubscription(false, false)); // non-premium without features
56
66
  });
57
67
 
58
68
  test('should work in chaining scenarios', () => {
59
69
  const validateChain = (a: boolean, b: boolean, c: boolean): boolean =>
60
70
  ifThen(a, b) && ifThen(b, c);
61
71
 
62
- expect(validateChain(true, true, true)).toBe(true); // valid chain
63
- expect(validateChain(true, false, true)).toBe(false); // breaks at first implication
64
- expect(validateChain(false, false, false)).toBe(true); // vacuously true chain
65
- expect(validateChain(true, true, false)).toBe(false); // breaks at second implication
72
+ assert.isTrue(validateChain(true, true, true)); // valid chain
73
+
74
+ assert.isFalse(validateChain(true, false, true)); // breaks at first implication
75
+
76
+ assert.isTrue(validateChain(false, false, false)); // vacuously true chain
77
+
78
+ assert.isFalse(validateChain(true, true, false)); // breaks at second implication
66
79
  });
67
80
 
68
81
  test('should work with negation patterns', () => {
@@ -70,9 +83,12 @@ describe(ifThen, () => {
70
83
  // "If not expired then valid" is equivalent to "expired OR valid"
71
84
  ifThen(!isExpired, isValid);
72
85
 
73
- expect(checkExpiredLogic(false, true)).toBe(true); // not expired and valid
74
- expect(checkExpiredLogic(false, false)).toBe(false); // not expired but invalid
75
- expect(checkExpiredLogic(true, true)).toBe(true); // expired but valid (vacuous)
76
- expect(checkExpiredLogic(true, false)).toBe(true); // expired and invalid (vacuous)
86
+ assert.isTrue(checkExpiredLogic(false, true)); // not expired and valid
87
+
88
+ assert.isFalse(checkExpiredLogic(false, false)); // not expired but invalid
89
+
90
+ assert.isTrue(checkExpiredLogic(true, true)); // expired but valid (vacuous)
91
+
92
+ assert.isTrue(checkExpiredLogic(true, false)); // 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
  });
@@ -3,67 +3,85 @@ import { memoizeFunction } from './memoize-function.mjs';
3
3
  describe(memoizeFunction, () => {
4
4
  test('should cache results for the same arguments', () => {
5
5
  const mockFn = vi.fn((x: number) => x * 2);
6
+
6
7
  const memoized = memoizeFunction(mockFn, (x) => x);
7
8
 
8
9
  // First call
9
10
  expect(memoized(5)).toBe(10);
11
+
10
12
  expect(mockFn).toHaveBeenCalledOnce();
11
13
 
12
14
  // Second call with same argument - should use cache
13
15
  expect(memoized(5)).toBe(10);
16
+
14
17
  expect(mockFn).toHaveBeenCalledOnce();
15
18
 
16
19
  // Call with different argument
17
20
  expect(memoized(3)).toBe(6);
21
+
18
22
  expect(mockFn).toHaveBeenCalledTimes(2);
19
23
  });
20
24
 
21
25
  test('should work with multiple arguments', () => {
22
26
  const mockFn = vi.fn((a: number, b: number) => a + b);
27
+
23
28
  const memoized = memoizeFunction(mockFn, (a, b) => `${a},${b}`);
24
29
 
25
30
  expect(memoized(2, 3)).toBe(5);
31
+
26
32
  expect(mockFn).toHaveBeenCalledOnce();
27
33
 
28
34
  expect(memoized(2, 3)).toBe(5);
35
+
29
36
  expect(mockFn).toHaveBeenCalledOnce();
30
37
 
31
38
  expect(memoized(3, 2)).toBe(5);
39
+
32
40
  expect(mockFn).toHaveBeenCalledTimes(2);
33
41
  });
34
42
 
35
43
  test('should handle functions that return undefined', () => {
36
44
  const mockFn = vi.fn((_x: number) => undefined);
45
+
37
46
  const memoized = memoizeFunction(mockFn, (x) => x);
38
47
 
39
48
  // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
40
49
  expect(memoized(5)).toBeUndefined();
50
+
41
51
  expect(mockFn).toHaveBeenCalledOnce();
42
52
 
43
53
  // Should use cache even for undefined
44
54
  // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
45
55
  expect(memoized(5)).toBeUndefined();
56
+
46
57
  expect(mockFn).toHaveBeenCalledOnce();
47
58
  });
48
59
 
49
60
  test('should work with object arguments using primitive cache keys', () => {
50
61
  type User = Readonly<{ id: number; name: string }>;
62
+
51
63
  const mockFn = vi.fn((user: User) => `Hello ${user.name}`);
64
+
52
65
  const memoized = memoizeFunction(mockFn, (user) => user.id);
53
66
 
54
67
  const user1 = { id: 1, name: 'Alice' };
68
+
55
69
  const user2 = { id: 1, name: 'Bob' }; // Same id, different name
70
+
56
71
  const user3 = { id: 2, name: 'Charlie' };
57
72
 
58
73
  expect(memoized(user1)).toBe('Hello Alice');
74
+
59
75
  expect(mockFn).toHaveBeenCalledOnce();
60
76
 
61
77
  // Same id, should use cache (even though name is different)
62
78
  expect(memoized(user2)).toBe('Hello Alice');
79
+
63
80
  expect(mockFn).toHaveBeenCalledOnce();
64
81
 
65
82
  // Different id, should call function
66
83
  expect(memoized(user3)).toBe('Hello Charlie');
84
+
67
85
  expect(mockFn).toHaveBeenCalledTimes(2);
68
86
  });
69
87
 
@@ -75,6 +93,7 @@ describe(memoizeFunction, () => {
75
93
  );
76
94
 
77
95
  expect(withNumber('hello')).toBe(5);
96
+
78
97
  expect(withNumber('world')).toBe(5); // Same length, uses cache
79
98
 
80
99
  // Boolean key
@@ -84,57 +103,74 @@ describe(memoizeFunction, () => {
84
103
  );
85
104
 
86
105
  expect(withBoolean(5)).toBe(10);
106
+
87
107
  expect(withBoolean(3)).toBe(10); // Both positive, uses cache
108
+
88
109
  expect(withBoolean(-2)).toBe(-4); // Negative, new cache entry
89
110
 
90
111
  // Symbol key
91
112
  const sym1 = Symbol('test');
113
+
92
114
  const sym2 = Symbol('test');
115
+
93
116
  const withSymbol = memoizeFunction(
94
117
  (_s: symbol) => Math.random(),
95
118
  (s) => s,
96
119
  );
120
+
97
121
  const result1 = withSymbol(sym1);
98
122
 
99
123
  expect(withSymbol(sym1)).toBe(result1); // Same symbol, uses cache
124
+
100
125
  expect(withSymbol(sym2)).not.toBe(result1); // Different symbol
101
126
  });
102
127
 
103
128
  test('should handle null and undefined cache keys', () => {
104
129
  const mockFn = vi.fn((x: string | null | undefined) => x ?? 'default');
130
+
105
131
  const memoized = memoizeFunction(mockFn, (x) => x);
106
132
 
107
133
  expect(memoized(null)).toBe('default');
134
+
108
135
  expect(mockFn).toHaveBeenCalledOnce();
109
136
 
110
137
  expect(memoized(null)).toBe('default');
138
+
111
139
  expect(mockFn).toHaveBeenCalledOnce();
112
140
 
113
141
  expect(memoized(undefined)).toBe('default');
142
+
114
143
  expect(mockFn).toHaveBeenCalledTimes(2);
115
144
 
116
145
  expect(memoized(undefined)).toBe('default');
146
+
117
147
  expect(mockFn).toHaveBeenCalledTimes(2);
118
148
  });
119
149
 
120
150
  test('should maintain separate caches for different memoized functions', () => {
121
151
  const fn1 = vi.fn((x: number) => x * 2);
152
+
122
153
  const fn2 = vi.fn((x: number) => x * 3);
123
154
 
124
155
  const memoized1 = memoizeFunction(fn1, (x) => x);
156
+
125
157
  const memoized2 = memoizeFunction(fn2, (x) => x);
126
158
 
127
159
  expect(memoized1(5)).toBe(10);
160
+
128
161
  expect(memoized2(5)).toBe(15);
129
162
 
130
163
  expect(fn1).toHaveBeenCalledOnce();
164
+
131
165
  expect(fn2).toHaveBeenCalledOnce();
132
166
 
133
167
  // Each has its own cache
134
168
  expect(memoized1(5)).toBe(10);
169
+
135
170
  expect(memoized2(5)).toBe(15);
136
171
 
137
172
  expect(fn1).toHaveBeenCalledOnce();
173
+
138
174
  expect(fn2).toHaveBeenCalledOnce();
139
175
  });
140
176
 
@@ -155,18 +191,23 @@ describe(memoizeFunction, () => {
155
191
  );
156
192
 
157
193
  const args1 = { category: 'books', subcategory: 'fiction', id: 123 };
194
+
158
195
  const args2 = { category: 'books', subcategory: 'fiction', id: 123 };
196
+
159
197
  const args3 = { category: 'books', subcategory: 'fiction', id: 124 };
160
198
 
161
199
  expect(memoized(args1)).toBe('books/fiction/123');
200
+
162
201
  expect(mockFn).toHaveBeenCalledOnce();
163
202
 
164
203
  // Same cache key, should use cache
165
204
  expect(memoized(args2)).toBe('books/fiction/123');
205
+
166
206
  expect(mockFn).toHaveBeenCalledOnce();
167
207
 
168
208
  // Different id, different cache key
169
209
  expect(memoized(args3)).toBe('books/fiction/124');
210
+
170
211
  expect(mockFn).toHaveBeenCalledTimes(2);
171
212
  });
172
213
  });
@@ -7,28 +7,39 @@
7
7
  * ```ts
8
8
  * // Create a tuple with literal types preserved
9
9
  * const coordinates = tp(10, 20, 30);
10
+ *
10
11
  * expectType<typeof coordinates, readonly [10, 20, 30]>('=');
12
+ *
11
13
  * expectType<typeof coordinates, readonly number[]>('!=');
14
+ *
12
15
  * assert.deepStrictEqual(coordinates, [10, 20, 30]);
13
16
  *
14
17
  * // The following two are equivalent
15
18
  * const a = tp(1, 2);
19
+ *
16
20
  * const b = [1, 2] as const;
21
+ *
17
22
  * expectType<typeof a, typeof b>('=');
23
+ *
18
24
  * assert.deepStrictEqual(a, b);
19
25
  *
20
26
  * // Without tp, type would be number[]
21
27
  * const point = tp('x', 42, true);
28
+ *
22
29
  * expectType<typeof point, readonly ['x', 42, true]>('=');
30
+ *
23
31
  * assert.deepStrictEqual(point, ['x', 42, true]);
24
32
  *
25
33
  * // Useful for creating const tuples
26
34
  * const rgb = tp(255, 128, 0);
35
+ *
27
36
  * expectType<typeof rgb, readonly [255, 128, 0]>('=');
28
37
  *
29
- * assert(rgb[0] === 255);
30
- * assert(rgb[1] === 128);
31
- * assert(rgb[2] === 0);
38
+ * assert.isTrue(rgb[0] === 255);
39
+ *
40
+ * assert.isTrue(rgb[1] === 128);
41
+ *
42
+ * assert.isTrue(rgb[2] === 0);
32
43
  * ```
33
44
  *
34
45
  * @template T - A tuple type with literal types inferred from the arguments
@@ -51,11 +51,13 @@ export const unknownToString = (
51
51
  if (!isNonNullish(value)) {
52
52
  return 'null';
53
53
  }
54
+
54
55
  try {
55
56
  const stringified =
56
57
  options?.prettyPrintObject === true
57
58
  ? JSON.stringify(value, undefined, 2)
58
59
  : JSON.stringify(value);
60
+
59
61
  return stringified;
60
62
  } catch (error) {
61
63
  return isError(error)
@@ -5,6 +5,7 @@ describe(unknownToString, () => {
5
5
  const result = unknownToString('aaaaa');
6
6
 
7
7
  expect(result).toBe('aaaaa');
8
+
8
9
  expect(JSON.stringify('aaaaa')).toBe('"aaaaa"');
9
10
  });
10
11
 
@@ -12,6 +13,7 @@ describe(unknownToString, () => {
12
13
  const result = unknownToString(1);
13
14
 
14
15
  expect(result).toBe('1');
16
+
15
17
  expect(JSON.stringify(1)).toBe('1');
16
18
  });
17
19
 
@@ -19,6 +21,7 @@ describe(unknownToString, () => {
19
21
  const result = unknownToString(true);
20
22
 
21
23
  expect(result).toBe('true');
24
+
22
25
  expect(JSON.stringify(true)).toBe('true');
23
26
  });
24
27
 
@@ -26,6 +29,7 @@ describe(unknownToString, () => {
26
29
  const result = unknownToString(Symbol('sym'));
27
30
 
28
31
  expect(result).toBe('Symbol(sym)');
32
+
29
33
  expect(JSON.stringify(Symbol('sym'))).toBeUndefined();
30
34
  });
31
35
 
@@ -33,6 +37,7 @@ describe(unknownToString, () => {
33
37
  const result = unknownToString(() => 0);
34
38
 
35
39
  expect(result).toBe('() => 0');
40
+
36
41
  expect(JSON.stringify(() => 0)).toBeUndefined();
37
42
  });
38
43
 
@@ -40,6 +45,7 @@ describe(unknownToString, () => {
40
45
  const result = unknownToString(undefined);
41
46
 
42
47
  expect(result).toBe('undefined');
48
+
43
49
  expect(JSON.stringify(undefined)).toBeUndefined();
44
50
  });
45
51
 
@@ -47,6 +53,7 @@ describe(unknownToString, () => {
47
53
  const result = unknownToString(null);
48
54
 
49
55
  expect(result).toBe('null');
56
+
50
57
  expect(JSON.stringify(null)).toBe('null');
51
58
  });
52
59
 
@@ -54,6 +61,7 @@ describe(unknownToString, () => {
54
61
  const result = unknownToString({ a: { b: 1 } });
55
62
 
56
63
  expect(result).toBe('{"a":{"b":1}}');
64
+
57
65
  expect(JSON.stringify({ a: { b: 1 } })).toBe('{"a":{"b":1}}');
58
66
  });
59
67
 
@@ -77,7 +85,9 @@ describe(unknownToString, () => {
77
85
 
78
86
  test('circular reference returns error message', () => {
79
87
  const mut_circular: { a: number; self?: unknown } = { a: 1 };
88
+
80
89
  mut_circular.self = mut_circular;
90
+
81
91
  const result = unknownToString(mut_circular);
82
92
 
83
93
  // Should return an error message string instead of throwing