ts-data-forge 3.3.0 → 4.0.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 (664) hide show
  1. package/README.md +37 -13
  2. package/dist/array/impl/array-utils-creation.d.mts +116 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
  4. package/dist/array/impl/array-utils-creation.mjs +110 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -0
  6. package/dist/array/impl/array-utils-element-access.d.mts +60 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
  8. package/dist/array/impl/array-utils-element-access.mjs +66 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
  10. package/dist/array/impl/array-utils-iterators.d.mts +59 -0
  11. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
  12. package/dist/array/impl/array-utils-iterators.mjs +104 -0
  13. package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
  14. package/dist/array/impl/array-utils-modification.d.mts +154 -0
  15. package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
  16. package/dist/array/impl/array-utils-modification.mjs +139 -0
  17. package/dist/array/impl/array-utils-modification.mjs.map +1 -0
  18. package/dist/array/impl/array-utils-reducing-value.d.mts +213 -0
  19. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
  20. package/dist/array/impl/array-utils-reducing-value.mjs +162 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +178 -0
  23. package/dist/array/impl/array-utils-search.d.mts.map +1 -0
  24. package/dist/array/impl/array-utils-search.mjs +153 -0
  25. package/dist/array/impl/array-utils-search.mjs.map +1 -0
  26. package/dist/array/impl/array-utils-set-op.d.mts +100 -0
  27. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
  28. package/dist/array/impl/array-utils-set-op.mjs +137 -0
  29. package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
  30. package/dist/array/impl/array-utils-size.d.mts +24 -0
  31. package/dist/array/impl/array-utils-size.d.mts.map +1 -0
  32. package/dist/array/impl/array-utils-size.mjs +28 -0
  33. package/dist/array/impl/array-utils-size.mjs.map +1 -0
  34. package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
  35. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
  36. package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
  37. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
  38. package/dist/array/impl/array-utils-slicing.d.mts +120 -0
  39. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
  40. package/dist/array/impl/array-utils-slicing.mjs +140 -0
  41. package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
  42. package/dist/array/impl/array-utils-transformation.d.mts +348 -0
  43. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
  44. package/dist/array/impl/array-utils-transformation.mjs +329 -0
  45. package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
  46. package/dist/array/impl/array-utils-validation.d.mts +149 -0
  47. package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
  48. package/dist/array/impl/array-utils-validation.mjs +166 -0
  49. package/dist/array/impl/array-utils-validation.mjs.map +1 -0
  50. package/dist/array/impl/index.d.mts +13 -0
  51. package/dist/array/impl/index.d.mts.map +1 -0
  52. package/dist/array/impl/index.mjs +13 -0
  53. package/dist/array/impl/index.mjs.map +1 -0
  54. package/dist/array/index.d.mts +1 -1
  55. package/dist/array/index.d.mts.map +1 -1
  56. package/dist/array/index.mjs +2 -1
  57. package/dist/array/index.mjs.map +1 -1
  58. package/dist/collections/imap-mapped.d.mts +83 -254
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +40 -170
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -164
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +83 -101
  65. package/dist/collections/imap.mjs.map +1 -1
  66. package/dist/collections/iset-mapped.d.mts +828 -345
  67. package/dist/collections/iset-mapped.d.mts.map +1 -1
  68. package/dist/collections/iset-mapped.mjs +200 -242
  69. package/dist/collections/iset-mapped.mjs.map +1 -1
  70. package/dist/collections/iset.d.mts +397 -205
  71. package/dist/collections/iset.d.mts.map +1 -1
  72. package/dist/collections/iset.mjs +102 -184
  73. package/dist/collections/iset.mjs.map +1 -1
  74. package/dist/collections/queue.d.mts +155 -136
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +59 -160
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -155
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +58 -207
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +2 -0
  83. package/dist/entry-point.d.mts.map +1 -1
  84. package/dist/entry-point.mjs +8 -5
  85. package/dist/entry-point.mjs.map +1 -1
  86. package/dist/expect-type.d.mts +43 -172
  87. package/dist/expect-type.d.mts.map +1 -1
  88. package/dist/expect-type.mjs +43 -172
  89. package/dist/expect-type.mjs.map +1 -1
  90. package/dist/functional/index.d.mts +2 -2
  91. package/dist/functional/index.d.mts.map +1 -1
  92. package/dist/functional/index.mjs +4 -2
  93. package/dist/functional/index.mjs.map +1 -1
  94. package/dist/functional/match.d.mts +35 -140
  95. package/dist/functional/match.d.mts.map +1 -1
  96. package/dist/functional/match.mjs.map +1 -1
  97. package/dist/functional/optional/impl/index.d.mts +18 -0
  98. package/dist/functional/optional/impl/index.d.mts.map +1 -0
  99. package/dist/functional/optional/impl/index.mjs +17 -0
  100. package/dist/functional/optional/impl/index.mjs.map +1 -0
  101. package/dist/functional/optional/impl/optional-expect-to-be.d.mts +29 -0
  102. package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -0
  103. package/dist/functional/optional/impl/optional-expect-to-be.mjs +25 -0
  104. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -0
  105. package/dist/functional/optional/impl/optional-filter.d.mts +29 -0
  106. package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -0
  107. package/dist/functional/optional/impl/optional-filter.mjs +28 -0
  108. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -0
  109. package/dist/functional/optional/impl/optional-flat-map.d.mts +33 -0
  110. package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -0
  111. package/dist/functional/optional/impl/optional-flat-map.mjs +21 -0
  112. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -0
  113. package/dist/functional/optional/impl/optional-from-nullable.d.mts +24 -0
  114. package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -0
  115. package/dist/functional/optional/impl/optional-from-nullable.mjs +29 -0
  116. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -0
  117. package/dist/functional/optional/impl/optional-is-none.d.mts +22 -0
  118. package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -0
  119. package/dist/functional/optional/impl/optional-is-none.mjs +25 -0
  120. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -0
  121. package/dist/functional/optional/impl/optional-is-optional.d.mts +18 -0
  122. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -0
  123. package/dist/functional/optional/impl/optional-is-optional.mjs +27 -0
  124. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -0
  125. package/dist/functional/optional/impl/optional-is-some.d.mts +22 -0
  126. package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -0
  127. package/dist/functional/optional/impl/optional-is-some.mjs +25 -0
  128. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -0
  129. package/dist/functional/optional/impl/optional-map.d.mts +31 -0
  130. package/dist/functional/optional/impl/optional-map.d.mts.map +1 -0
  131. package/dist/functional/optional/impl/optional-map.mjs +25 -0
  132. package/dist/functional/optional/impl/optional-map.mjs.map +1 -0
  133. package/dist/functional/optional/impl/optional-none.d.mts +16 -0
  134. package/dist/functional/optional/impl/optional-none.d.mts.map +1 -0
  135. package/dist/functional/optional/impl/optional-none.mjs +20 -0
  136. package/dist/functional/optional/impl/optional-none.mjs.map +1 -0
  137. package/dist/functional/optional/impl/optional-or-else.d.mts +35 -0
  138. package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -0
  139. package/dist/functional/optional/impl/optional-or-else.mjs +19 -0
  140. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -0
  141. package/dist/functional/optional/impl/optional-some.d.mts +19 -0
  142. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -0
  143. package/dist/functional/optional/impl/optional-some.mjs +26 -0
  144. package/dist/functional/optional/impl/optional-some.mjs.map +1 -0
  145. package/dist/functional/optional/impl/optional-to-nullable.d.mts +27 -0
  146. package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -0
  147. package/dist/functional/optional/impl/optional-to-nullable.mjs +31 -0
  148. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -0
  149. package/dist/functional/optional/impl/optional-unwrap-or.d.mts +33 -0
  150. package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -0
  151. package/dist/functional/optional/impl/optional-unwrap-or.mjs +19 -0
  152. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -0
  153. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +29 -0
  154. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -0
  155. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +38 -0
  156. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -0
  157. package/dist/functional/optional/impl/optional-unwrap.d.mts +28 -0
  158. package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -0
  159. package/dist/functional/optional/impl/optional-unwrap.mjs +11 -0
  160. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -0
  161. package/dist/functional/optional/impl/optional-zip.d.mts +31 -0
  162. package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -0
  163. package/dist/functional/optional/impl/optional-zip.mjs +39 -0
  164. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -0
  165. package/dist/functional/optional/impl/tag.d.mts +5 -0
  166. package/dist/functional/optional/impl/tag.d.mts.map +1 -0
  167. package/dist/functional/optional/impl/tag.mjs +7 -0
  168. package/dist/functional/optional/impl/tag.mjs.map +1 -0
  169. package/dist/functional/optional/impl/types.d.mts +22 -0
  170. package/dist/functional/optional/impl/types.d.mts.map +1 -0
  171. package/dist/functional/optional/impl/types.mjs +2 -0
  172. package/dist/functional/optional/impl/types.mjs.map +1 -0
  173. package/dist/functional/optional/index.d.mts +2 -0
  174. package/dist/functional/optional/index.d.mts.map +1 -0
  175. package/dist/functional/optional/index.mjs +3 -0
  176. package/dist/functional/optional/index.mjs.map +1 -0
  177. package/dist/functional/pipe.d.mts +63 -117
  178. package/dist/functional/pipe.d.mts.map +1 -1
  179. package/dist/functional/pipe.mjs +4 -3
  180. package/dist/functional/pipe.mjs.map +1 -1
  181. package/dist/functional/result/impl/index.d.mts +24 -0
  182. package/dist/functional/result/impl/index.d.mts.map +1 -0
  183. package/dist/functional/result/impl/index.mjs +23 -0
  184. package/dist/functional/result/impl/index.mjs.map +1 -0
  185. package/dist/functional/result/impl/result-err.d.mts +25 -0
  186. package/dist/functional/result/impl/result-err.d.mts.map +1 -0
  187. package/dist/functional/result/impl/result-err.mjs +32 -0
  188. package/dist/functional/result/impl/result-err.mjs.map +1 -0
  189. package/dist/functional/result/impl/result-expect-to-be.d.mts +27 -0
  190. package/dist/functional/result/impl/result-expect-to-be.d.mts.map +1 -0
  191. package/dist/functional/result/impl/result-expect-to-be.mjs +26 -0
  192. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -0
  193. package/dist/functional/result/impl/result-flat-map.d.mts +39 -0
  194. package/dist/functional/result/impl/result-flat-map.d.mts.map +1 -0
  195. package/dist/functional/result/impl/result-flat-map.mjs +24 -0
  196. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -0
  197. package/dist/functional/result/impl/result-fold.d.mts +45 -0
  198. package/dist/functional/result/impl/result-fold.d.mts.map +1 -0
  199. package/dist/functional/result/impl/result-fold.mjs +26 -0
  200. package/dist/functional/result/impl/result-fold.mjs.map +1 -0
  201. package/dist/functional/result/impl/result-from-promise.d.mts +32 -0
  202. package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -0
  203. package/dist/functional/result/impl/result-from-promise.mjs +32 -0
  204. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -0
  205. package/dist/functional/result/impl/result-from-throwable.d.mts +29 -0
  206. package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -0
  207. package/dist/functional/result/impl/result-from-throwable.mjs +46 -0
  208. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -0
  209. package/dist/functional/result/impl/result-is-err.d.mts +20 -0
  210. package/dist/functional/result/impl/result-is-err.d.mts.map +1 -0
  211. package/dist/functional/result/impl/result-is-err.mjs +23 -0
  212. package/dist/functional/result/impl/result-is-err.mjs.map +1 -0
  213. package/dist/functional/result/impl/result-is-ok.d.mts +20 -0
  214. package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -0
  215. package/dist/functional/result/impl/result-is-ok.mjs +23 -0
  216. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -0
  217. package/dist/functional/result/impl/result-is-result.d.mts +17 -0
  218. package/dist/functional/result/impl/result-is-result.d.mts.map +1 -0
  219. package/dist/functional/result/impl/result-is-result.mjs +26 -0
  220. package/dist/functional/result/impl/result-is-result.mjs.map +1 -0
  221. package/dist/functional/result/impl/result-map-err.d.mts +33 -0
  222. package/dist/functional/result/impl/result-map-err.d.mts.map +1 -0
  223. package/dist/functional/result/impl/result-map-err.mjs +25 -0
  224. package/dist/functional/result/impl/result-map-err.mjs.map +1 -0
  225. package/dist/functional/result/impl/result-map.d.mts +34 -0
  226. package/dist/functional/result/impl/result-map.d.mts.map +1 -0
  227. package/dist/functional/result/impl/result-map.mjs +25 -0
  228. package/dist/functional/result/impl/result-map.mjs.map +1 -0
  229. package/dist/functional/result/impl/result-ok.d.mts +25 -0
  230. package/dist/functional/result/impl/result-ok.d.mts.map +1 -0
  231. package/dist/functional/result/impl/result-ok.mjs +32 -0
  232. package/dist/functional/result/impl/result-ok.mjs.map +1 -0
  233. package/dist/functional/result/impl/result-or-else.d.mts +32 -0
  234. package/dist/functional/result/impl/result-or-else.d.mts.map +1 -0
  235. package/dist/functional/result/impl/result-or-else.mjs +20 -0
  236. package/dist/functional/result/impl/result-or-else.mjs.map +1 -0
  237. package/dist/functional/result/impl/result-swap.d.mts +20 -0
  238. package/dist/functional/result/impl/result-swap.d.mts.map +1 -0
  239. package/dist/functional/result/impl/result-swap.mjs +28 -0
  240. package/dist/functional/result/impl/result-swap.mjs.map +1 -0
  241. package/dist/functional/result/impl/result-to-optional.d.mts +28 -0
  242. package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -0
  243. package/dist/functional/result/impl/result-to-optional.mjs +34 -0
  244. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -0
  245. package/dist/functional/result/impl/result-unwrap-err-or.d.mts +29 -0
  246. package/dist/functional/result/impl/result-unwrap-err-or.d.mts.map +1 -0
  247. package/dist/functional/result/impl/result-unwrap-err-or.mjs +20 -0
  248. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -0
  249. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts +30 -0
  250. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -0
  251. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +47 -0
  252. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -0
  253. package/dist/functional/result/impl/result-unwrap-err.d.mts +31 -0
  254. package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -0
  255. package/dist/functional/result/impl/result-unwrap-err.mjs +36 -0
  256. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -0
  257. package/dist/functional/result/impl/result-unwrap-ok-or.d.mts +29 -0
  258. package/dist/functional/result/impl/result-unwrap-ok-or.d.mts.map +1 -0
  259. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +20 -0
  260. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -0
  261. package/dist/functional/result/impl/result-unwrap-ok.d.mts +23 -0
  262. package/dist/functional/result/impl/result-unwrap-ok.d.mts.map +1 -0
  263. package/dist/functional/result/impl/result-unwrap-ok.mjs +11 -0
  264. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -0
  265. package/dist/functional/result/impl/result-unwrap-throw.d.mts +30 -0
  266. package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -0
  267. package/dist/functional/result/impl/result-unwrap-throw.mjs +41 -0
  268. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -0
  269. package/dist/functional/result/impl/result-zip.d.mts +29 -0
  270. package/dist/functional/result/impl/result-zip.d.mts.map +1 -0
  271. package/dist/functional/result/impl/result-zip.mjs +38 -0
  272. package/dist/functional/result/impl/result-zip.mjs.map +1 -0
  273. package/dist/functional/result/impl/tag.d.mts +5 -0
  274. package/dist/functional/result/impl/tag.d.mts.map +1 -0
  275. package/dist/functional/result/impl/tag.mjs +7 -0
  276. package/dist/functional/result/impl/tag.mjs.map +1 -0
  277. package/dist/functional/result/impl/types.d.mts +29 -0
  278. package/dist/functional/result/impl/types.d.mts.map +1 -0
  279. package/dist/functional/result/impl/types.mjs +2 -0
  280. package/dist/functional/result/impl/types.mjs.map +1 -0
  281. package/dist/functional/result/index.d.mts +2 -0
  282. package/dist/functional/result/index.d.mts.map +1 -0
  283. package/dist/functional/result/index.mjs +3 -0
  284. package/dist/functional/result/index.mjs.map +1 -0
  285. package/dist/globals.d.mts +95 -5
  286. package/dist/guard/has-key.d.mts +23 -74
  287. package/dist/guard/has-key.d.mts.map +1 -1
  288. package/dist/guard/has-key.mjs +23 -74
  289. package/dist/guard/has-key.mjs.map +1 -1
  290. package/dist/guard/is-non-empty-string.d.mts +20 -87
  291. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  292. package/dist/guard/is-non-empty-string.mjs +20 -87
  293. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  294. package/dist/guard/is-non-null-object.d.mts +14 -84
  295. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  296. package/dist/guard/is-non-null-object.mjs +14 -84
  297. package/dist/guard/is-non-null-object.mjs.map +1 -1
  298. package/dist/guard/is-primitive.d.mts +13 -126
  299. package/dist/guard/is-primitive.d.mts.map +1 -1
  300. package/dist/guard/is-primitive.mjs +13 -126
  301. package/dist/guard/is-primitive.mjs.map +1 -1
  302. package/dist/guard/is-record.d.mts +21 -132
  303. package/dist/guard/is-record.d.mts.map +1 -1
  304. package/dist/guard/is-record.mjs +21 -132
  305. package/dist/guard/is-record.mjs.map +1 -1
  306. package/dist/guard/is-type.d.mts +201 -238
  307. package/dist/guard/is-type.d.mts.map +1 -1
  308. package/dist/guard/is-type.mjs +201 -238
  309. package/dist/guard/is-type.mjs.map +1 -1
  310. package/dist/guard/key-is-in.d.mts +22 -139
  311. package/dist/guard/key-is-in.d.mts.map +1 -1
  312. package/dist/guard/key-is-in.mjs +22 -139
  313. package/dist/guard/key-is-in.mjs.map +1 -1
  314. package/dist/index.d.mts +0 -2
  315. package/dist/index.d.mts.map +1 -1
  316. package/dist/index.mjs +0 -5
  317. package/dist/index.mjs.map +1 -1
  318. package/dist/iterator/range.d.mts +29 -62
  319. package/dist/iterator/range.d.mts.map +1 -1
  320. package/dist/iterator/range.mjs.map +1 -1
  321. package/dist/json/json.d.mts +191 -122
  322. package/dist/json/json.d.mts.map +1 -1
  323. package/dist/json/json.mjs +246 -144
  324. package/dist/json/json.mjs.map +1 -1
  325. package/dist/number/branded-types/finite-number.d.mts +24 -156
  326. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  327. package/dist/number/branded-types/finite-number.mjs +28 -160
  328. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  329. package/dist/number/branded-types/int.d.mts +122 -120
  330. package/dist/number/branded-types/int.d.mts.map +1 -1
  331. package/dist/number/branded-types/int.mjs +123 -121
  332. package/dist/number/branded-types/int.mjs.map +1 -1
  333. package/dist/number/branded-types/int16.d.mts +22 -30
  334. package/dist/number/branded-types/int16.d.mts.map +1 -1
  335. package/dist/number/branded-types/int16.mjs +23 -31
  336. package/dist/number/branded-types/int16.mjs.map +1 -1
  337. package/dist/number/branded-types/int32.d.mts +22 -31
  338. package/dist/number/branded-types/int32.d.mts.map +1 -1
  339. package/dist/number/branded-types/int32.mjs +23 -32
  340. package/dist/number/branded-types/int32.mjs.map +1 -1
  341. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  342. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  343. package/dist/number/branded-types/non-negative-finite-number.mjs +32 -40
  344. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  345. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  346. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  347. package/dist/number/branded-types/non-negative-int16.mjs +25 -35
  348. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  349. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  350. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  351. package/dist/number/branded-types/non-negative-int32.mjs +27 -36
  352. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  353. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  354. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  355. package/dist/number/branded-types/non-zero-finite-number.mjs +26 -41
  356. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  357. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  358. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  359. package/dist/number/branded-types/non-zero-int.mjs +16 -31
  360. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  361. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  362. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  363. package/dist/number/branded-types/non-zero-int16.mjs +28 -36
  364. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  365. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  366. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  367. package/dist/number/branded-types/non-zero-int32.mjs +30 -37
  368. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  369. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  370. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  371. package/dist/number/branded-types/non-zero-safe-int.mjs +40 -41
  372. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  373. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  374. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  375. package/dist/number/branded-types/non-zero-uint16.mjs +25 -36
  376. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  377. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  378. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  379. package/dist/number/branded-types/non-zero-uint32.mjs +25 -36
  380. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  381. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  382. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  383. package/dist/number/branded-types/positive-finite-number.mjs +30 -44
  384. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  385. package/dist/number/branded-types/positive-int.d.mts +133 -123
  386. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  387. package/dist/number/branded-types/positive-int.mjs +134 -124
  388. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  389. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  390. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  391. package/dist/number/branded-types/positive-int16.mjs +25 -36
  392. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  393. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  394. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  395. package/dist/number/branded-types/positive-int32.mjs +25 -36
  396. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  397. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  398. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  399. package/dist/number/branded-types/positive-safe-int.mjs +161 -35
  400. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  401. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  402. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  403. package/dist/number/branded-types/positive-uint16.mjs +25 -36
  404. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  405. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  406. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  407. package/dist/number/branded-types/positive-uint32.mjs +27 -37
  408. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  409. package/dist/number/branded-types/safe-int.d.mts +140 -99
  410. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  411. package/dist/number/branded-types/safe-int.mjs +143 -102
  412. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  413. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  414. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  415. package/dist/number/branded-types/safe-uint.mjs +26 -35
  416. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  417. package/dist/number/branded-types/uint.d.mts +121 -30
  418. package/dist/number/branded-types/uint.d.mts.map +1 -1
  419. package/dist/number/branded-types/uint.mjs +122 -31
  420. package/dist/number/branded-types/uint.mjs.map +1 -1
  421. package/dist/number/branded-types/uint16.d.mts +26 -34
  422. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  423. package/dist/number/branded-types/uint16.mjs +27 -35
  424. package/dist/number/branded-types/uint16.mjs.map +1 -1
  425. package/dist/number/branded-types/uint32.d.mts +26 -68
  426. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  427. package/dist/number/branded-types/uint32.mjs +27 -69
  428. package/dist/number/branded-types/uint32.mjs.map +1 -1
  429. package/dist/number/enum/int8.d.mts +37 -101
  430. package/dist/number/enum/int8.d.mts.map +1 -1
  431. package/dist/number/enum/int8.mjs +40 -171
  432. package/dist/number/enum/int8.mjs.map +1 -1
  433. package/dist/number/enum/uint8.d.mts +45 -55
  434. package/dist/number/enum/uint8.d.mts.map +1 -1
  435. package/dist/number/enum/uint8.mjs +47 -156
  436. package/dist/number/enum/uint8.mjs.map +1 -1
  437. package/dist/number/num.d.mts +145 -206
  438. package/dist/number/num.d.mts.map +1 -1
  439. package/dist/number/num.mjs +143 -199
  440. package/dist/number/num.mjs.map +1 -1
  441. package/dist/number/refined-number-utils.d.mts +97 -21
  442. package/dist/number/refined-number-utils.d.mts.map +1 -1
  443. package/dist/number/refined-number-utils.mjs +91 -22
  444. package/dist/number/refined-number-utils.mjs.map +1 -1
  445. package/dist/object/object.d.mts +126 -208
  446. package/dist/object/object.d.mts.map +1 -1
  447. package/dist/object/object.mjs +68 -102
  448. package/dist/object/object.mjs.map +1 -1
  449. package/dist/others/cast-mutable.d.mts +12 -88
  450. package/dist/others/cast-mutable.d.mts.map +1 -1
  451. package/dist/others/cast-mutable.mjs +13 -89
  452. package/dist/others/cast-mutable.mjs.map +1 -1
  453. package/dist/others/cast-readonly.d.mts +12 -168
  454. package/dist/others/cast-readonly.d.mts.map +1 -1
  455. package/dist/others/cast-readonly.mjs +13 -169
  456. package/dist/others/cast-readonly.mjs.map +1 -1
  457. package/dist/others/if-then.d.mts +6 -83
  458. package/dist/others/if-then.d.mts.map +1 -1
  459. package/dist/others/if-then.mjs +6 -83
  460. package/dist/others/if-then.mjs.map +1 -1
  461. package/dist/others/map-nullable.d.mts +12 -136
  462. package/dist/others/map-nullable.d.mts.map +1 -1
  463. package/dist/others/map-nullable.mjs.map +1 -1
  464. package/dist/others/memoize-function.d.mts +14 -157
  465. package/dist/others/memoize-function.d.mts.map +1 -1
  466. package/dist/others/memoize-function.mjs +14 -157
  467. package/dist/others/memoize-function.mjs.map +1 -1
  468. package/dist/others/tuple.d.mts +33 -151
  469. package/dist/others/tuple.d.mts.map +1 -1
  470. package/dist/others/tuple.mjs +33 -151
  471. package/dist/others/tuple.mjs.map +1 -1
  472. package/dist/others/unknown-to-string.d.mts +11 -125
  473. package/dist/others/unknown-to-string.d.mts.map +1 -1
  474. package/dist/others/unknown-to-string.mjs +12 -126
  475. package/dist/others/unknown-to-string.mjs.map +1 -1
  476. package/dist/promise/promise.d.mts +33 -21
  477. package/dist/promise/promise.d.mts.map +1 -1
  478. package/dist/promise/promise.mjs +36 -24
  479. package/dist/promise/promise.mjs.map +1 -1
  480. package/package.json +58 -44
  481. package/src/array/impl/array-utils-creation.mts +192 -0
  482. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  483. package/src/array/impl/array-utils-element-access.mts +115 -0
  484. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  485. package/src/array/impl/array-utils-iterators.mts +79 -0
  486. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  487. package/src/array/impl/array-utils-modification.mts +434 -0
  488. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  489. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  490. package/src/array/impl/array-utils-reducing-value.mts +535 -0
  491. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +53 -58
  492. package/src/array/impl/array-utils-search.mts +509 -0
  493. package/src/array/impl/array-utils-search.test.mts +346 -0
  494. package/src/array/impl/array-utils-set-op.mts +166 -0
  495. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  496. package/src/array/impl/array-utils-size.mts +30 -0
  497. package/src/array/impl/array-utils-size.test.mts +9 -0
  498. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  499. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +13 -13
  500. package/src/array/impl/array-utils-slicing.mts +275 -0
  501. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  502. package/src/array/impl/array-utils-transformation.mts +746 -0
  503. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  504. package/src/array/impl/array-utils-validation.mts +241 -0
  505. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  506. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  507. package/src/array/impl/index.mts +12 -0
  508. package/src/array/index.mts +1 -1
  509. package/src/collections/imap-mapped.mts +99 -265
  510. package/src/collections/imap.mts +477 -174
  511. package/src/collections/imap.test.mts +12 -19
  512. package/src/collections/iset-mapped.mts +892 -358
  513. package/src/collections/iset.mts +429 -213
  514. package/src/collections/queue.mts +174 -200
  515. package/src/collections/stack.mts +172 -245
  516. package/src/collections/stack.test.mts +9 -1
  517. package/src/entry-point.mts +2 -0
  518. package/src/expect-type.mts +43 -172
  519. package/src/functional/index.mts +2 -2
  520. package/src/functional/match.mts +35 -145
  521. package/src/functional/optional/impl/index.mts +17 -0
  522. package/src/functional/optional/impl/optional-expect-to-be.mts +65 -0
  523. package/src/functional/optional/impl/optional-filter.mts +71 -0
  524. package/src/functional/optional/impl/optional-flat-map.mts +67 -0
  525. package/src/functional/optional/impl/optional-from-nullable.mts +28 -0
  526. package/src/functional/optional/impl/optional-is-none.mts +25 -0
  527. package/src/functional/optional/impl/optional-is-optional.mts +27 -0
  528. package/src/functional/optional/impl/optional-is-some.mts +25 -0
  529. package/src/functional/optional/impl/optional-map.mts +69 -0
  530. package/src/functional/optional/impl/optional-none.mts +17 -0
  531. package/src/functional/optional/impl/optional-or-else.mts +73 -0
  532. package/src/functional/optional/impl/optional-some.mts +23 -0
  533. package/src/functional/optional/impl/optional-to-nullable.mts +31 -0
  534. package/src/functional/optional/impl/optional-unwrap-or.mts +64 -0
  535. package/src/functional/optional/impl/optional-unwrap-throw.mts +39 -0
  536. package/src/functional/optional/impl/optional-unwrap.mts +41 -0
  537. package/src/functional/optional/impl/optional-zip.mts +40 -0
  538. package/src/functional/optional/impl/tag.mts +6 -0
  539. package/src/functional/optional/impl/types.mts +28 -0
  540. package/src/functional/optional/index.mts +1 -0
  541. package/src/functional/optional.test.mts +11 -9
  542. package/src/functional/pipe.mts +65 -118
  543. package/src/functional/pipe.test.mts +1 -1
  544. package/src/functional/result/impl/index.mts +23 -0
  545. package/src/functional/result/impl/result-err.mts +29 -0
  546. package/src/functional/result/impl/result-expect-to-be.mts +63 -0
  547. package/src/functional/result/impl/result-flat-map.mts +79 -0
  548. package/src/functional/result/impl/result-fold.mts +95 -0
  549. package/src/functional/result/impl/result-from-promise.mts +39 -0
  550. package/src/functional/result/impl/result-from-throwable.mts +42 -0
  551. package/src/functional/result/impl/result-is-err.mts +23 -0
  552. package/src/functional/result/impl/result-is-ok.mts +23 -0
  553. package/src/functional/result/impl/result-is-result.mts +23 -0
  554. package/src/functional/result/impl/result-map-err.mts +72 -0
  555. package/src/functional/result/impl/result-map.mts +73 -0
  556. package/src/functional/result/impl/result-ok.mts +29 -0
  557. package/src/functional/result/impl/result-or-else.mts +63 -0
  558. package/src/functional/result/impl/result-swap.mts +28 -0
  559. package/src/functional/result/impl/result-to-optional.mts +34 -0
  560. package/src/functional/result/impl/result-unwrap-err-or.mts +60 -0
  561. package/src/functional/result/impl/result-unwrap-err-throw.mts +53 -0
  562. package/src/functional/result/impl/result-unwrap-err.mts +36 -0
  563. package/src/functional/result/impl/result-unwrap-ok-or.mts +60 -0
  564. package/src/functional/result/impl/result-unwrap-ok.mts +35 -0
  565. package/src/functional/result/impl/result-unwrap-throw.mts +43 -0
  566. package/src/functional/result/impl/result-zip.mts +39 -0
  567. package/src/functional/result/impl/tag.mts +6 -0
  568. package/src/functional/result/impl/types.mts +35 -0
  569. package/src/functional/result/index.mts +1 -0
  570. package/src/functional/result.test.mts +14 -6
  571. package/src/globals.d.mts +95 -5
  572. package/src/guard/has-key.mts +23 -74
  573. package/src/guard/is-non-empty-string.mts +20 -87
  574. package/src/guard/is-non-empty-string.test.mts +1 -1
  575. package/src/guard/is-non-null-object.mts +14 -84
  576. package/src/guard/is-non-null-object.test.mts +4 -4
  577. package/src/guard/is-primitive.mts +13 -126
  578. package/src/guard/is-primitive.test.mts +4 -4
  579. package/src/guard/is-record.mts +21 -132
  580. package/src/guard/is-type.mts +201 -238
  581. package/src/guard/is-type.test.mts +10 -10
  582. package/src/guard/key-is-in.mts +22 -139
  583. package/src/index.mts +0 -2
  584. package/src/iterator/range.mts +29 -62
  585. package/src/json/json.mts +202 -134
  586. package/src/json/json.test.mts +1 -3
  587. package/src/number/branded-types/finite-number.mts +34 -166
  588. package/src/number/branded-types/int.mts +129 -127
  589. package/src/number/branded-types/int16.mts +31 -39
  590. package/src/number/branded-types/int16.test.mts +24 -24
  591. package/src/number/branded-types/int32.mts +31 -40
  592. package/src/number/branded-types/int32.test.mts +39 -39
  593. package/src/number/branded-types/non-negative-finite-number.mts +39 -47
  594. package/src/number/branded-types/non-negative-int16.mts +33 -43
  595. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  596. package/src/number/branded-types/non-negative-int32.mts +35 -44
  597. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  598. package/src/number/branded-types/non-zero-finite-number.mts +32 -47
  599. package/src/number/branded-types/non-zero-int.mts +22 -37
  600. package/src/number/branded-types/non-zero-int16.mts +36 -44
  601. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  602. package/src/number/branded-types/non-zero-int32.mts +38 -45
  603. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  604. package/src/number/branded-types/non-zero-safe-int.mts +48 -49
  605. package/src/number/branded-types/non-zero-uint16.mts +33 -44
  606. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  607. package/src/number/branded-types/non-zero-uint32.mts +33 -44
  608. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  609. package/src/number/branded-types/positive-finite-number.mts +37 -51
  610. package/src/number/branded-types/positive-int.mts +142 -132
  611. package/src/number/branded-types/positive-int16.mts +33 -44
  612. package/src/number/branded-types/positive-int16.test.mts +14 -14
  613. package/src/number/branded-types/positive-int32.mts +33 -44
  614. package/src/number/branded-types/positive-int32.test.mts +26 -26
  615. package/src/number/branded-types/positive-safe-int.mts +169 -43
  616. package/src/number/branded-types/positive-uint16.mts +33 -44
  617. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  618. package/src/number/branded-types/positive-uint32.mts +35 -45
  619. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  620. package/src/number/branded-types/safe-int.mts +151 -110
  621. package/src/number/branded-types/safe-uint.mts +34 -43
  622. package/src/number/branded-types/uint.mts +129 -38
  623. package/src/number/branded-types/uint16.mts +35 -43
  624. package/src/number/branded-types/uint16.test.mts +16 -16
  625. package/src/number/branded-types/uint32.mts +35 -77
  626. package/src/number/branded-types/uint32.test.mts +28 -28
  627. package/src/number/enum/int8.mts +42 -173
  628. package/src/number/enum/int8.test.mts +9 -9
  629. package/src/number/enum/uint8.mts +49 -158
  630. package/src/number/enum/uint8.test.mts +8 -8
  631. package/src/number/num.mts +157 -212
  632. package/src/number/num.test.mts +4 -4
  633. package/src/number/refined-number-utils.mts +109 -26
  634. package/src/object/object.mts +130 -212
  635. package/src/object/object.test.mts +29 -0
  636. package/src/others/cast-mutable.mts +13 -89
  637. package/src/others/cast-mutable.test.mts +80 -0
  638. package/src/others/cast-readonly.mts +13 -169
  639. package/src/others/if-then.mts +6 -83
  640. package/src/others/map-nullable.mts +12 -136
  641. package/src/others/map-nullable.test.mts +6 -6
  642. package/src/others/memoize-function.mts +14 -157
  643. package/src/others/tuple.mts +33 -151
  644. package/src/others/unknown-to-string.mts +12 -126
  645. package/src/others/unknown-to-string.test.mts +13 -1
  646. package/src/promise/promise.mts +34 -21
  647. package/src/promise/promise.test.mts +43 -0
  648. package/dist/array/array-utils.d.mts +0 -2956
  649. package/dist/array/array-utils.d.mts.map +0 -1
  650. package/dist/array/array-utils.mjs +0 -1838
  651. package/dist/array/array-utils.mjs.map +0 -1
  652. package/dist/functional/optional.d.mts +0 -360
  653. package/dist/functional/optional.d.mts.map +0 -1
  654. package/dist/functional/optional.mjs +0 -268
  655. package/dist/functional/optional.mjs.map +0 -1
  656. package/dist/functional/result.d.mts +0 -611
  657. package/dist/functional/result.d.mts.map +0 -1
  658. package/dist/functional/result.mjs +0 -545
  659. package/dist/functional/result.mjs.map +0 -1
  660. package/src/array/array-utils-search.test.mts +0 -169
  661. package/src/array/array-utils-slicing.test.mts +0 -274
  662. package/src/array/array-utils.mts +0 -4834
  663. package/src/functional/optional.mts +0 -591
  664. package/src/functional/result.mts +0 -986
@@ -1,199 +1,70 @@
1
1
  /**
2
2
  * Compile-time type assertion utility for TypeScript type testing.
3
3
  *
4
- * This function performs static type relationship checking at compile-time and has no runtime effect.
5
- * It is primarily used in test files to verify that TypeScript's type inference and type relationships
6
- * work as expected. The function will cause TypeScript compilation errors if the specified type
4
+ * This function performs static type relationship checking at compile-time and
5
+ * has no runtime effect. It is primarily used in test files to verify that
6
+ * TypeScript's type inference and type relationships work as expected. The
7
+ * function will cause TypeScript compilation errors if the specified type
7
8
  * relationship does not hold.
8
9
  *
9
10
  * ## Supported Type Relations
10
11
  *
11
12
  * ### Equality Relations
12
- * - **`"="` (strict equality)**: Asserts that types `A` and `B` are exactly the same type.
13
- * Uses TypeScript's internal type equality checking.
14
- * - **`"!="` (strict inequality)**: Asserts that types `A` and `B` are not exactly the same type.
13
+ *
14
+ * - **`"="` (strict equality)**: Asserts that types `A` and `B` are exactly the
15
+ * same type. Uses TypeScript's internal type equality checking.
16
+ * - **`"!="` (strict inequality)**: Asserts that types `A` and `B` are not
17
+ * exactly the same type.
15
18
  *
16
19
  * ### Assignability Relations
17
- * - **`"~="` (mutual assignability)**: Asserts that `A` extends `B` AND `B` extends `A`.
18
- * Types are structurally equivalent and mutually assignable.
19
- * - **`"<="` (subtype relation)**: Asserts that type `A` extends (is assignable to) type `B`.
20
- * Type `A` is a subtype of `B`.
21
- * - **`">="` (supertype relation)**: Asserts that type `B` extends (is assignable to) type `A`.
22
- * Type `A` is a supertype of `B`.
20
+ *
21
+ * - **`"~="` (mutual assignability)**: Asserts that `A` extends `B` AND `B`
22
+ * extends `A`. Types are structurally equivalent and mutually assignable.
23
+ * - **`"<="` (subtype relation)**: Asserts that type `A` extends (is assignable
24
+ * to) type `B`. Type `A` is a subtype of `B`.
25
+ * - **`">="` (supertype relation)**: Asserts that type `B` extends (is assignable
26
+ * to) type `A`. Type `A` is a supertype of `B`.
23
27
  *
24
28
  * ### Negative Assignability Relations
29
+ *
25
30
  * - **`"!<="` (not subtype)**: Asserts that type `A` does NOT extend type `B`.
26
31
  * - **`"!>="` (not supertype)**: Asserts that type `B` does NOT extend type `A`.
27
32
  *
28
33
  * ## Type Parameter Constraints
29
34
  *
30
- * @template A - The first type for comparison. Can be any TypeScript type including:
35
+ * @since 1.0.0
36
+ * @template A - The first type for comparison. Can be any TypeScript type
37
+ * including:
38
+ *
31
39
  * - Primitive types (string, number, boolean, etc.)
32
40
  * - Object types and interfaces
33
41
  * - Union and intersection types
34
42
  * - Generic types and type parameters
35
43
  * - Literal types and branded types
36
44
  * - Function types and return types
37
- * @template B - The second type for comparison. Same constraints as type `A`.
38
- *
39
- * @param _relation - A string literal representing the expected type relationship.
40
- * TypeScript's type system automatically infers and restricts the available operators
41
- * based on the actual relationship between types `A` and `B`. If an invalid relationship
42
- * is specified, TypeScript will show a compilation error.
43
- *
44
- * ## Usage Patterns
45
- *
46
- * ### Basic Type Testing
47
- * @example
48
- * ```typescript
49
- * import { expectType } from './expect-type.mjs';
50
- *
51
- * // Primitive type equality
52
- * expectType<string, string>("="); // ✓ exact match
53
- * expectType<number, string>("!="); // ✓ different types
54
- * expectType<42, number>("<="); // ✓ literal extends primitive
55
- * expectType<number, 42>(">="); // ✓ primitive is supertype
56
- *
57
- * // Type assertions will cause compilation errors for wrong relationships:
58
- * // expectType<string, number>("="); // ❌ TypeScript error
59
- * // expectType<number, string>("<="); // ❌ TypeScript error
60
- * ```
61
- *
62
- * ### Array and Tuple Type Validation
63
- * @example
64
- * ```typescript
65
- * // Testing array utility function return types
66
- * const zeros = Arr.zeros(3);
67
- * expectType<typeof zeros, readonly [0, 0, 0]>("=");
68
- *
69
- * const sequence = Arr.seq(5);
70
- * expectType<typeof sequence, readonly [0, 1, 2, 3, 4]>("=");
71
- *
72
- * // Dynamic length arrays
73
- * const dynamicArray = Arr.zeros(someLength);
74
- * expectType<typeof dynamicArray, readonly 0[]>("=");
75
- * ```
76
- *
77
- * ### Function Return Type Testing
78
- * @example
79
- * ```typescript
80
- * // Testing function return types
81
- * const createUser = () => ({ id: 1, name: 'John' });
82
- * expectType<ReturnType<typeof createUser>, { id: number; name: string }>("~=");
83
- *
84
- * // Generic function type inference
85
- * const identity = <T>(x: T): T => x;
86
- * const result = identity('hello');
87
- * expectType<typeof result, string>("=");
88
- * ```
89
- *
90
- * ### Union and Intersection Types
91
- * @example
92
- * ```typescript
93
- * // Union type relationships
94
- * expectType<string, string | number>("<="); // string extends union
95
- * expectType<string | number, string>(">="); // union contains string
96
- * expectType<string | number, number>(">="); // union contains number
97
- *
98
- * // Intersection type relationships
99
- * type A = { a: number };
100
- * type B = { b: string };
101
- * expectType<A & B, A>(">="); // intersection extends component
102
- * expectType<A, A & B>("<="); // component extends intersection
103
- * ```
104
45
  *
105
- * ### Branded Type Validation
106
- * @example
107
- * ```typescript
108
- * // Testing branded number types
109
- * expectType<PositiveInt, number>("<="); // branded type extends base
110
- * expectType<number, PositiveInt>(">="); // base type is supertype
111
- * expectType<PositiveInt, NegativeInt>("!="); // different branded types
112
- *
113
- * // Type guard function validation
114
- * if (isPositiveInt(value)) {
115
- * expectType<typeof value, PositiveInt>("<=");
116
- * }
117
- * ```
118
- *
119
- * ### Optional and Result Type Testing
120
- * @example
121
- * ```typescript
122
- * // Optional type narrowing
123
- * const optional: Optional<number> = Optional.some(42);
124
- * if (Optional.isSome(optional)) {
125
- * expectType<typeof optional, Optional.Some<number>>("<=");
126
- * }
127
- * if (Optional.isNone(optional)) {
128
- * expectType<typeof optional, Optional.None>("<=");
129
- * }
130
- *
131
- * // Result type validation
132
- * const result: Result<string, Error> = Result.ok('success');
133
- * expectType<typeof result, Result<string, Error>>("<=");
134
- * ```
135
- *
136
- * ### Type Guard and Validation Testing
137
- * @example
138
- * ```typescript
139
- * // Testing type guard functions
140
- * if (isRecord(value)) {
141
- * expectType<typeof value, UnknownRecord>("<=");
142
- * }
143
- *
144
- * // Testing compile-time type predicates
145
- * const obj = { key: 'value' };
146
- * if (hasKey(obj, 'key')) {
147
- * expectType<typeof obj.key, unknown>("<=");
148
- * }
149
- * ```
150
- *
151
- * ## Common Testing Patterns
152
- *
153
- * ### Dual Testing Strategy
154
- * Combine `expectType` with runtime assertions for comprehensive testing:
155
- *
156
- * @example
157
- * ```typescript
158
- * describe('Arr.zeros', () => {
159
- * test('should create array of zeros with correct type', () => {
160
- * const result = Arr.zeros(3);
161
- *
162
- * // Compile-time type assertion
163
- * expectType<typeof result, readonly [0, 0, 0]>("=");
164
- *
165
- * // Runtime behavior assertion
166
- * expect(result).toStrictEqual([0, 0, 0]);
167
- * });
168
- * });
169
- * ```
170
- *
171
- * ### Type Relationship Validation
172
- * Test complex type hierarchies and relationships:
173
- *
174
- * @example
175
- * ```typescript
176
- * // Ensure proper type hierarchy
177
- * expectType<PositiveInt, Int>("<="); // positive is subset of int
178
- * expectType<Int, FiniteNumber>("<="); // int is subset of finite
179
- * expectType<FiniteNumber, number>("<="); // finite is subset of number
180
- *
181
- * // Verify mutual exclusion
182
- * expectType<PositiveInt, NegativeInt>("!="); // different int types
183
- * expectType<PositiveInt, NegativeInt>("!<="); // neither extends the other
184
- * expectType<NegativeInt, PositiveInt>("!<=");
185
- * ```
186
- *
187
- * ## Important Notes
188
- *
189
- * - **Compile-time only**: This function has no runtime behavior and will be optimized away.
190
- * - **Type inference**: The available relation operators are automatically inferred by TypeScript
191
- * based on the actual type relationship between `A` and `B`.
192
- * - **Error feedback**: Invalid type relationships will cause clear TypeScript compilation errors.
193
- * - **Test organization**: Typically used in `.test.mts` files alongside runtime assertions.
194
- * - **Performance**: Has zero runtime overhead as it's purely a compile-time construct.
195
- *
196
- * @since 1.0.0
46
+ * @template B - The second type for comparison. Same constraints as type `A`.
47
+ * @param _relation - A string literal representing the expected type
48
+ * relationship. TypeScript's type system automatically infers and restricts
49
+ * the available operators based on the actual relationship between types `A`
50
+ * and `B`. If an invalid relationship is specified, TypeScript will show a
51
+ * compilation error.
52
+ *
53
+ * Combine `expectType` with runtime assertions for comprehensive testing:
54
+ *
55
+ * ## Important Notes
56
+ *
57
+ * - **Compile-time only**: This function has no runtime behavior and will be
58
+ * optimized away.
59
+ * - **Type inference**: The available relation operators are automatically
60
+ * inferred by TypeScript based on the actual type relationship between
61
+ * `A` and `B`.
62
+ * - **Error feedback**: Invalid type relationships will cause clear TypeScript
63
+ * compilation errors.
64
+ * - **Test organization**: Typically used in `.test.mts` files alongside runtime
65
+ * assertions.
66
+ * - **Performance**: Has zero runtime overhead as it's purely a compile-time
67
+ * construct.
197
68
  */
198
69
  export const expectType = <A, B>(
199
70
  _relation: TypeEq<A, B> extends true
@@ -1,4 +1,4 @@
1
1
  export * from './match.mjs';
2
- export * from './optional.mjs';
2
+ export * from './optional/index.mjs';
3
3
  export * from './pipe.mjs';
4
- export * from './result.mjs';
4
+ export * from './result/index.mjs';
@@ -1,159 +1,47 @@
1
1
  import { expectType } from '../expect-type.mjs';
2
2
  import { keyIsIn } from '../guard/index.mjs';
3
3
 
4
- /**
5
- * @internal
6
- * Utility type to extract the union of all values from a record type.
7
- * @template T The record type to extract values from.
8
- */
9
- type ValueOf<T> = T[keyof T];
10
-
11
- /**
12
- * @internal
13
- * Represents a record with unknown value types.
14
- */
15
- type UnknownRecord = Record<PropertyKey, unknown>;
16
-
17
- /**
18
- * @internal
19
- * Represents a readonly record mapping keys of type K to values of type V.
20
- * @template K The type of keys.
21
- * @template V The type of values.
22
- */
23
- type ReadonlyRecord<K extends PropertyKey, V> = Readonly<Record<K, V>>;
24
-
25
- /**
26
- * @internal
27
- * A relaxed version of Exclude that handles edge cases with property keys.
28
- * @template T The type to exclude from.
29
- * @template U The type to exclude.
30
- */
31
- type RelaxedExclude<T, U> = T extends U ? never : T;
32
-
33
- /**
34
- * @internal
35
- * Checks if two types are exactly equal.
36
- * @template T First type to compare.
37
- * @template U Second type to compare.
38
- */
39
- type TypeEq<T, U> = [T] extends [U] ? ([U] extends [T] ? true : false) : false;
40
-
41
4
  /**
42
5
  * Type-safe pattern matching function for string-based discriminated unions.
43
6
  *
44
- * Provides compile-time guarantees for exhaustive case handling when working with
45
- * literal string unions. Automatically enforces completeness checking when all
46
- * cases are covered, and requires a default value when cases are incomplete.
7
+ * Provides compile-time guarantees for exhaustive case handling when working
8
+ * with literal string unions. Automatically enforces completeness checking when
9
+ * all cases are covered, and requires a default value when cases are
10
+ * incomplete.
47
11
  *
48
12
  * ## Key Features:
49
- * - **Exhaustive Matching**: When all cases of a literal union are handled, no default value is needed
50
- * - **Partial Matching**: When cases are incomplete or working with general string types, a default value is required
13
+ *
14
+ * - **Exhaustive Matching**: When all cases of a literal union are handled, no
15
+ * default value is needed
16
+ * - **Partial Matching**: When cases are incomplete or working with general
17
+ * string types, a default value is required
51
18
  * - **Type Safety**: Prevents extra cases and ensures only valid keys are used
52
19
  * - **Strict Property Checking**: Rejects objects with unexpected properties
53
20
  *
54
- * @param target - The value to match against
55
- * @param cases - Object mapping possible values to their corresponding results
56
- * @param defaultValue - Fallback value (required when not all cases are covered)
57
- * @returns The matched result or default value
58
- *
59
21
  * @example
60
- * Exhaustive matching (no default needed):
61
- * ```typescript
62
- * type Status = 'loading' | 'success' | 'error';
63
- * const status: Status = 'loading';
64
22
  *
65
- * const message = match(status, {
66
- * loading: 'Please wait...',
67
- * success: 'Operation completed!',
68
- * error: 'Something went wrong'
69
- * });
70
- * // Type: string
71
- * // Result: 'Please wait...'
72
- * ```
23
+ * ```ts
24
+ * type Status = 'draft' | 'review' | 'published';
73
25
  *
74
- * @example
75
- * Partial matching (default required):
76
- * ```typescript
77
- * type Priority = 'low' | 'medium' | 'high' | 'critical';
78
- * const priority: Priority = 'medium';
79
- *
80
- * const color = match(priority, {
81
- * high: 'red',
82
- * critical: 'darkred'
83
- * }, 'gray'); // Default required for uncovered cases
84
- * // Type: 'red' | 'darkred' | 'gray'
85
- * // Result: 'gray'
86
- * ```
26
+ * const status: Status = 'draft';
87
27
  *
88
- * @example
89
- * Working with general string types:
90
- * ```typescript
91
- * const userInput: string = getUserInput();
92
- *
93
- * const route = match(userInput, {
94
- * 'home': '/',
95
- * 'about': '/about',
96
- * 'contact': '/contact'
97
- * }, '/404'); // Default required for string type
98
- * // Type: '/' | '/about' | '/contact' | '/404'
99
- * ```
100
- *
101
- * @example
102
- * HTTP status code handling:
103
- * ```typescript
104
- * type HttpStatus = 200 | 404 | 500;
105
- * const status: HttpStatus = 404;
106
- *
107
- * const response = match(String(status), {
108
- * '200': { ok: true, message: 'Success' },
109
- * '404': { ok: false, message: 'Not Found' },
110
- * '500': { ok: false, message: 'Server Error' }
28
+ * const message = match<
29
+ * Status,
30
+ * { draft: string; review: string; published: string }
31
+ * >(status, {
32
+ * draft: 'Work in progress',
33
+ * review: 'Awaiting feedback',
34
+ * published: 'Complete',
111
35
  * });
112
- * // All cases covered, no default needed
113
- * // Result: { ok: false, message: 'Not Found' }
114
- * ```
115
36
  *
116
- * @example
117
- * Complex discriminated union handling:
118
- * ```typescript
119
- * type ApiResponse =
120
- * | { status: 'loading' }
121
- * | { status: 'success'; data: string }
122
- * | { status: 'error'; error: string };
123
- *
124
- * const handleResponse = (response: ApiResponse) =>
125
- * match(response.status, {
126
- * loading: 'Please wait...',
127
- * success: 'Data loaded successfully!',
128
- * error: 'Failed to load data'
129
- * });
37
+ * assert(message === 'Work in progress');
130
38
  * ```
131
39
  *
132
- * @example
133
- * Advanced usage with functional composition:
134
- * ```typescript
135
- * // Creating reusable matchers
136
- * const logLevelToColor = (level: string) => match(level, {
137
- * 'debug': 'gray',
138
- * 'info': 'blue',
139
- * 'warn': 'yellow',
140
- * 'error': 'red'
141
- * }, 'black'); // Default for unknown levels
142
- *
143
- * const logLevelToIcon = (level: string) => match(level, {
144
- * 'debug': '🐛',
145
- * 'info': 'ℹ️',
146
- * 'warn': '⚠️',
147
- * 'error': '❌'
148
- * }, '📝');
149
- *
150
- * // Combining matchers
151
- * const formatLogEntry = (level: string, message: string) => ({
152
- * color: logLevelToColor(level),
153
- * icon: logLevelToIcon(level),
154
- * text: `${logLevelToIcon(level)} ${message}`
155
- * });
156
- * ```
40
+ * @param target - The value to match against
41
+ * @param cases - Object mapping possible values to their corresponding results
42
+ * @param defaultValue - Fallback value (required when not all cases are
43
+ * covered)
44
+ * @returns The matched result or default value
157
45
  */
158
46
  export function match<
159
47
  const Case extends string,
@@ -192,21 +80,23 @@ export function match<
192
80
  }
193
81
 
194
82
  /**
83
+ * @template T The object type to check.
84
+ * @template ExpectedKeys The union of string literal types representing the
85
+ * allowed keys.
195
86
  * @internal
196
87
  * Helper type to ensure that an object `T` only contains keys specified in `ExpectedKeys`.
197
88
  * If `T` has any keys not in `ExpectedKeys`, this type resolves to `never`.
198
- * @template T The object type to check.
199
- * @template ExpectedKeys The union of string literal types representing the allowed keys.
200
89
  */
201
90
  type StrictPropertyCheck<T, ExpectedKeys extends PropertyKey> =
202
91
  RelaxedExclude<keyof T, ExpectedKeys> extends never ? T : never;
203
92
 
204
93
  /**
94
+ * @template Case A union of string literal types representing the possible
95
+ * cases.
96
+ * @template R A record type.
205
97
  * @internal
206
98
  * Helper type to check if all cases in `Case` union are fully covered by keys in `R`.
207
99
  * This checks bidirectional coverage: all Case members are in R, and no extra keys.
208
- * @template Case A union of string literal types representing the possible cases.
209
- * @template R A record type.
210
100
  */
211
101
  type AllCasesCovered<Case extends PropertyKey, R> =
212
102
  TypeEq<Case, keyof R> extends true ? true : false;
@@ -217,10 +107,10 @@ expectType<AllCasesCovered<'a' | 'b', { a: 1; b: 2; c: 3 }>, false>('=');
217
107
  expectType<AllCasesCovered<string, Record<string, string>>, true>('=');
218
108
 
219
109
  /**
220
- * @internal
221
- * Helper type to check if Case is a literal union type and all cases are covered.
222
110
  * @template Case A union of string literal types.
223
111
  * @template R A record type.
112
+ * @internal
113
+ * Helper type to check if Case is a literal union type and all cases are covered.
224
114
  */
225
115
  type IsLiteralUnionFullyCovered<
226
116
  Case extends PropertyKey,
@@ -247,11 +137,11 @@ expectType<
247
137
  >('=');
248
138
 
249
139
  /**
140
+ * @template T The PropertyKey type to check.
141
+ * @returns `true` if `T` is a literal type, `false` otherwise.
250
142
  * @internal
251
143
  * Helper type to determine if a given PropertyKey `T` is a literal type (e.g., 'a', 1)
252
144
  * or a general type (e.g., string, number).
253
- * @template T The PropertyKey type to check.
254
- * @returns `true` if `T` is a literal type, `false` otherwise.
255
145
  */
256
146
  type IsLiteralType<T extends PropertyKey> = string extends T
257
147
  ? false
@@ -0,0 +1,17 @@
1
+ export * from './optional-expect-to-be.mjs';
2
+ export * from './optional-filter.mjs';
3
+ export * from './optional-flat-map.mjs';
4
+ export * from './optional-from-nullable.mjs';
5
+ export * from './optional-is-none.mjs';
6
+ export * from './optional-is-optional.mjs';
7
+ export * from './optional-is-some.mjs';
8
+ export * from './optional-map.mjs';
9
+ export * from './optional-none.mjs';
10
+ export * from './optional-or-else.mjs';
11
+ export * from './optional-some.mjs';
12
+ export * from './optional-to-nullable.mjs';
13
+ export * from './optional-unwrap-or.mjs';
14
+ export * from './optional-unwrap-throw.mjs';
15
+ export * from './optional-unwrap.mjs';
16
+ export * from './optional-zip.mjs';
17
+ export * from './types.mjs';
@@ -0,0 +1,65 @@
1
+ import { isSome } from './optional-is-some.mjs';
2
+ import { unwrap } from './optional-unwrap.mjs';
3
+ import { type Unwrap } from './types.mjs';
4
+
5
+ /**
6
+ * Unwraps an `Optional`, returning the contained value or throwing an error
7
+ * with the provided message.
8
+ *
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * const optionalValue = Optional.some('data');
13
+ *
14
+ * assert(Optional.expectToBe(optionalValue, 'value expected') === 'data');
15
+ *
16
+ * const expectValue = Optional.expectToBe<string>('missing optional');
17
+ *
18
+ * assert.throws(() => expectValue(Optional.none), /missing optional/u);
19
+ * assert(expectValue(Optional.some('present')) === 'present');
20
+ * ```
21
+ *
22
+ * @template O The `UnknownOptional` type to unwrap.
23
+ * @param optional The `Optional` to unwrap.
24
+ * @param message The error message to throw if the `Optional` is
25
+ * `None`.
26
+ * @returns The contained value if `Some`.
27
+ * @throws Error with the provided message if the `Optional` is
28
+ * `None`.
29
+ */
30
+ export function expectToBe<O extends UnknownOptional>(
31
+ optional: O,
32
+ message: string,
33
+ ): Unwrap<O>;
34
+
35
+ // Curried version
36
+ export function expectToBe<S>(message: string): (optional: Optional<S>) => S;
37
+
38
+ export function expectToBe<O extends UnknownOptional>(
39
+ ...args: readonly [optional: O, message: string] | readonly [message: string]
40
+ ): Unwrap<O> | ((optional: Optional<Unwrap<O>>) => Unwrap<O>) {
41
+ switch (args.length) {
42
+ case 2: {
43
+ const [optional, message] = args;
44
+ return expectToBeImpl(optional, message);
45
+ }
46
+
47
+ case 1: {
48
+ // Curried version: first argument is message
49
+ const [message] = args;
50
+ return (optional: Optional<Unwrap<O>>): Unwrap<O> =>
51
+ expectToBeImpl(optional, message);
52
+ }
53
+ }
54
+ }
55
+
56
+ const expectToBeImpl = <O extends UnknownOptional>(
57
+ optional: O,
58
+ message: string,
59
+ ): Unwrap<O> => {
60
+ if (isSome(optional)) {
61
+ return unwrap(optional);
62
+ }
63
+
64
+ throw new Error(message);
65
+ };
@@ -0,0 +1,71 @@
1
+ import { isSome } from './optional-is-some.mjs';
2
+ import { none } from './optional-none.mjs';
3
+ import { some } from './optional-some.mjs';
4
+ import { unwrap } from './optional-unwrap.mjs';
5
+ import { type Unwrap } from './types.mjs';
6
+
7
+ /**
8
+ * Filters an `Optional` based on a predicate. If the `Optional` is `Some` and
9
+ * the predicate returns true, returns the original `Optional`. Otherwise
10
+ * returns `None`.
11
+ *
12
+ * @example
13
+ *
14
+ * ```ts
15
+ * const even = Optional.filter(Optional.some(4), (value) => value % 2 === 0);
16
+ * const odd = Optional.filter(Optional.some(3), (value) => value % 2 === 0);
17
+ *
18
+ * assert.deepStrictEqual(even, Optional.some(4));
19
+ * assert.deepStrictEqual(odd, Optional.none);
20
+ *
21
+ * const filterEven = Optional.filter((value: number) => value % 2 === 0);
22
+ *
23
+ * assert.deepStrictEqual(filterEven(Optional.some(6)), Optional.some(6));
24
+ * assert.deepStrictEqual(filterEven(Optional.some(5)), Optional.none);
25
+ * ```
26
+ *
27
+ * @template O The input `UnknownOptional` type.
28
+ * @param optional The `Optional` to filter.
29
+ * @param predicate The predicate function.
30
+ * @returns The filtered `Optional`.
31
+ */
32
+ export function filter<O extends UnknownOptional>(
33
+ optional: O,
34
+ predicate: (value: Unwrap<O>) => boolean,
35
+ ): Optional<Unwrap<O>>;
36
+
37
+ // Curried version
38
+ export function filter<S>(
39
+ predicate: (value: S) => boolean,
40
+ ): (optional: Optional<S>) => Optional<S>;
41
+
42
+ export function filter<O extends UnknownOptional>(
43
+ ...args:
44
+ | readonly [optional: O, predicate: (value: Unwrap<O>) => boolean]
45
+ | readonly [predicate: (value: Unwrap<O>) => boolean]
46
+ ): Optional<Unwrap<O>> | ((optional: O) => Optional<Unwrap<O>>) {
47
+ switch (args.length) {
48
+ case 2: {
49
+ const [optional, predicate] = args;
50
+ return filterImpl(optional, predicate);
51
+ }
52
+
53
+ case 1: {
54
+ // Curried version: first argument is predicate function
55
+ const [predicate] = args;
56
+ return (optional: O) => filterImpl(optional, predicate);
57
+ }
58
+ }
59
+ }
60
+
61
+ const filterImpl = <O extends UnknownOptional>(
62
+ optional: O,
63
+ predicate: (value: Unwrap<O>) => boolean,
64
+ ): Optional<Unwrap<O>> => {
65
+ if (isSome(optional)) {
66
+ const value = unwrap(optional);
67
+ return predicate(value) ? some(value) : none;
68
+ }
69
+
70
+ return none;
71
+ };