ts-data-forge 14.6.0 → 14.6.2

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 (409) hide show
  1. package/dist/array/impl/array-utils-creation.mjs +126 -26
  2. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  3. package/dist/array/impl/array-utils-element-access.mjs +63 -30
  4. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  5. package/dist/array/impl/array-utils-iterators.mjs +69 -53
  6. package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
  7. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +109 -73
  8. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs.map +1 -1
  9. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +71 -33
  10. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -1
  11. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +102 -73
  12. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs.map +1 -1
  13. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +77 -33
  14. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs.map +1 -1
  15. package/dist/array/impl/array-utils-modification.mjs +75 -122
  16. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  17. package/dist/array/impl/array-utils-reducing-value.mjs +100 -150
  18. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-search.mjs +110 -134
  20. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  21. package/dist/array/impl/array-utils-set-op.mjs +146 -38
  22. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-size.mjs +10 -8
  24. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  25. package/dist/array/impl/array-utils-slice-clamped.mjs +13 -50
  26. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  27. package/dist/array/impl/array-utils-slicing.mjs +94 -78
  28. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  29. package/dist/array/impl/array-utils-transformation.mjs +291 -199
  30. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  31. package/dist/array/impl/array-utils-validation.mjs +54 -56
  32. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  33. package/dist/array/impl/index.mjs +17 -17
  34. package/dist/array/impl/index.mjs.map +1 -1
  35. package/dist/array/index.mjs +2 -3
  36. package/dist/array/index.mjs.map +1 -1
  37. package/dist/collections/imap-mapped.mjs +335 -291
  38. package/dist/collections/imap-mapped.mjs.map +1 -1
  39. package/dist/collections/imap.mjs +280 -239
  40. package/dist/collections/imap.mjs.map +1 -1
  41. package/dist/collections/index.mjs +7 -7
  42. package/dist/collections/index.mjs.map +1 -1
  43. package/dist/collections/iset-mapped.d.mts.map +1 -1
  44. package/dist/collections/iset-mapped.mjs +448 -263
  45. package/dist/collections/iset-mapped.mjs.map +1 -1
  46. package/dist/collections/iset.mjs +328 -201
  47. package/dist/collections/iset.mjs.map +1 -1
  48. package/dist/collections/queue.mjs +183 -151
  49. package/dist/collections/queue.mjs.map +1 -1
  50. package/dist/collections/stack.mjs +169 -140
  51. package/dist/collections/stack.mjs.map +1 -1
  52. package/dist/entry-point.mjs +4 -77
  53. package/dist/entry-point.mjs.map +1 -1
  54. package/dist/expect-type.mjs +70 -4
  55. package/dist/expect-type.mjs.map +1 -1
  56. package/dist/functional/async-result/async-result.mjs +2 -3
  57. package/dist/functional/async-result/async-result.mjs.map +1 -1
  58. package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
  59. package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
  60. package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
  61. package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
  62. package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
  63. package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
  64. package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
  65. package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
  66. package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
  67. package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
  68. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
  69. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
  70. package/dist/functional/async-result/impl/index.mjs +8 -7
  71. package/dist/functional/async-result/impl/index.mjs.map +1 -1
  72. package/dist/functional/async-result/impl/types.mjs +2 -2
  73. package/dist/functional/async-result/impl/types.mjs.map +1 -1
  74. package/dist/functional/async-result/index.mjs +2 -3
  75. package/dist/functional/async-result/index.mjs.map +1 -1
  76. package/dist/functional/index.mjs +7 -11
  77. package/dist/functional/index.mjs.map +1 -1
  78. package/dist/functional/match.mjs +27 -13
  79. package/dist/functional/match.mjs.map +1 -1
  80. package/dist/functional/optional/impl/index.mjs +19 -18
  81. package/dist/functional/optional/impl/index.mjs.map +1 -1
  82. package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
  83. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  84. package/dist/functional/optional/impl/optional-filter.mjs +17 -19
  85. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  86. package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
  87. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  88. package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
  89. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  90. package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
  91. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  92. package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
  93. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  94. package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
  95. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  96. package/dist/functional/optional/impl/optional-map.mjs +16 -18
  97. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  98. package/dist/functional/optional/impl/optional-match.mjs +16 -18
  99. package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
  100. package/dist/functional/optional/impl/optional-none.mjs +18 -5
  101. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  102. package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
  103. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  104. package/dist/functional/optional/impl/optional-some.mjs +23 -7
  105. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  106. package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
  107. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  108. package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
  109. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  110. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
  111. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  112. package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
  113. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  114. package/dist/functional/optional/impl/optional-zip.mjs +36 -5
  115. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  116. package/dist/functional/optional/impl/tag.mjs +4 -5
  117. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  118. package/dist/functional/optional/impl/types.mjs +2 -2
  119. package/dist/functional/optional/impl/types.mjs.map +1 -1
  120. package/dist/functional/optional/index.mjs +2 -3
  121. package/dist/functional/optional/index.mjs.map +1 -1
  122. package/dist/functional/optional/optional.mjs +2 -3
  123. package/dist/functional/optional/optional.mjs.map +1 -1
  124. package/dist/functional/pipe.mjs +42 -14
  125. package/dist/functional/pipe.mjs.map +1 -1
  126. package/dist/functional/result/impl/index.mjs +28 -27
  127. package/dist/functional/result/impl/index.mjs.map +1 -1
  128. package/dist/functional/result/impl/result-err.mjs +29 -7
  129. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  130. package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
  131. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  132. package/dist/functional/result/impl/result-flat-map.mjs +18 -21
  133. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  134. package/dist/functional/result/impl/result-fold.mjs +18 -21
  135. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  136. package/dist/functional/result/impl/result-from-optional.mjs +17 -20
  137. package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
  138. package/dist/functional/result/impl/result-from-promise.mjs +37 -8
  139. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  140. package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
  141. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  142. package/dist/functional/result/impl/result-is-err.mjs +21 -5
  143. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  144. package/dist/functional/result/impl/result-is-ok.mjs +21 -5
  145. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  146. package/dist/functional/result/impl/result-is-result.mjs +25 -7
  147. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  148. package/dist/functional/result/impl/result-map-err.mjs +18 -21
  149. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  150. package/dist/functional/result/impl/result-map.mjs +18 -21
  151. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  152. package/dist/functional/result/impl/result-match.mjs +17 -21
  153. package/dist/functional/result/impl/result-match.mjs.map +1 -1
  154. package/dist/functional/result/impl/result-ok.mjs +29 -7
  155. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  156. package/dist/functional/result/impl/result-or-else.mjs +14 -15
  157. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  158. package/dist/functional/result/impl/result-safe-try.mjs +32 -21
  159. package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
  160. package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
  161. package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
  162. package/dist/functional/result/impl/result-swap.mjs +23 -8
  163. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  164. package/dist/functional/result/impl/result-to-optional.mjs +30 -7
  165. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  166. package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
  167. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  168. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
  169. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  170. package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
  171. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  172. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
  173. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  174. package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
  175. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  176. package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
  177. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  178. package/dist/functional/result/impl/result-zip.mjs +35 -5
  179. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  180. package/dist/functional/result/impl/tag.mjs +4 -5
  181. package/dist/functional/result/impl/tag.mjs.map +1 -1
  182. package/dist/functional/result/impl/types.mjs +2 -2
  183. package/dist/functional/result/impl/types.mjs.map +1 -1
  184. package/dist/functional/result/index.mjs +2 -3
  185. package/dist/functional/result/index.mjs.map +1 -1
  186. package/dist/functional/result/result.mjs +2 -3
  187. package/dist/functional/result/result.mjs.map +1 -1
  188. package/dist/functional/ternary-result/impl/index.mjs +29 -28
  189. package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
  190. package/dist/functional/ternary-result/impl/tag.mjs +6 -6
  191. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  192. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
  193. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  194. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +15 -18
  195. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  196. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +28 -32
  197. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  198. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
  199. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  200. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
  201. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  202. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
  203. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  204. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
  205. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  206. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
  207. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  208. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +28 -8
  209. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  210. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +20 -5
  211. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  212. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +17 -18
  213. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  214. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +20 -23
  215. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  216. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
  217. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  218. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
  219. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  220. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
  221. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  222. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
  223. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +11 -14
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +30 -19
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +20 -8
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +11 -14
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  232. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +7 -9
  233. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  234. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
  235. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  236. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +11 -14
  237. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  238. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +27 -17
  239. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  240. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +20 -8
  241. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  242. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
  243. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  244. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
  245. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  246. package/dist/functional/ternary-result/impl/types.mjs +2 -2
  247. package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
  248. package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
  249. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  250. package/dist/functional/ternary-result/index.mjs +2 -3
  251. package/dist/functional/ternary-result/index.mjs.map +1 -1
  252. package/dist/functional/ternary-result/ternary-result.mjs +2 -3
  253. package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
  254. package/dist/guard/has-key.mjs +43 -4
  255. package/dist/guard/has-key.mjs.map +1 -1
  256. package/dist/guard/index.mjs +8 -8
  257. package/dist/guard/index.mjs.map +1 -1
  258. package/dist/guard/is-non-empty-string.mjs +39 -4
  259. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  260. package/dist/guard/is-non-null-object.mjs +36 -4
  261. package/dist/guard/is-non-null-object.mjs.map +1 -1
  262. package/dist/guard/is-primitive.mjs +46 -15
  263. package/dist/guard/is-primitive.mjs.map +1 -1
  264. package/dist/guard/is-record.mjs +89 -6
  265. package/dist/guard/is-record.mjs.map +1 -1
  266. package/dist/guard/is-type.mjs +404 -19
  267. package/dist/guard/is-type.mjs.map +1 -1
  268. package/dist/guard/key-is-in.mjs +42 -4
  269. package/dist/guard/key-is-in.mjs.map +1 -1
  270. package/dist/index.mjs +12 -65
  271. package/dist/index.mjs.map +1 -1
  272. package/dist/iterator/index.mjs +2 -2
  273. package/dist/iterator/index.mjs.map +1 -1
  274. package/dist/iterator/range.mjs +19 -57
  275. package/dist/iterator/range.mjs.map +1 -1
  276. package/dist/json/index.mjs +2 -2
  277. package/dist/json/index.mjs.map +1 -1
  278. package/dist/json/json.mjs +346 -105
  279. package/dist/json/json.mjs.map +1 -1
  280. package/dist/number/branded-types/finite-number.mjs +148 -137
  281. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  282. package/dist/number/branded-types/index.mjs +33 -33
  283. package/dist/number/branded-types/index.mjs.map +1 -1
  284. package/dist/number/branded-types/int.mjs +245 -209
  285. package/dist/number/branded-types/int.mjs.map +1 -1
  286. package/dist/number/branded-types/int16.mjs +141 -131
  287. package/dist/number/branded-types/int16.mjs.map +1 -1
  288. package/dist/number/branded-types/int32.mjs +141 -131
  289. package/dist/number/branded-types/int32.mjs.map +1 -1
  290. package/dist/number/branded-types/negative-finite-number.mjs +155 -149
  291. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  292. package/dist/number/branded-types/negative-int.mjs +125 -110
  293. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  294. package/dist/number/branded-types/negative-safe-int.mjs +126 -115
  295. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  296. package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
  297. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  298. package/dist/number/branded-types/non-negative-int16.mjs +137 -125
  299. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  300. package/dist/number/branded-types/non-negative-int32.mjs +137 -125
  301. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  302. package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
  303. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  304. package/dist/number/branded-types/non-positive-int.mjs +116 -99
  305. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  306. package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
  307. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  308. package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
  309. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  310. package/dist/number/branded-types/non-zero-int.mjs +102 -82
  311. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  312. package/dist/number/branded-types/non-zero-int16.mjs +118 -105
  313. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  314. package/dist/number/branded-types/non-zero-int32.mjs +118 -105
  315. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  316. package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
  317. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  318. package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
  319. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  320. package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
  321. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  322. package/dist/number/branded-types/positive-finite-number.mjs +167 -160
  323. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  324. package/dist/number/branded-types/positive-int.mjs +260 -224
  325. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  326. package/dist/number/branded-types/positive-int16.mjs +134 -122
  327. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  328. package/dist/number/branded-types/positive-int32.mjs +134 -122
  329. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  330. package/dist/number/branded-types/positive-safe-int.mjs +292 -258
  331. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  332. package/dist/number/branded-types/positive-uint16.mjs +134 -122
  333. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  334. package/dist/number/branded-types/positive-uint32.mjs +134 -122
  335. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  336. package/dist/number/branded-types/safe-int.mjs +284 -255
  337. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  338. package/dist/number/branded-types/safe-uint.mjs +135 -124
  339. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  340. package/dist/number/branded-types/uint.mjs +248 -211
  341. package/dist/number/branded-types/uint.mjs.map +1 -1
  342. package/dist/number/branded-types/uint16.mjs +132 -121
  343. package/dist/number/branded-types/uint16.mjs.map +1 -1
  344. package/dist/number/branded-types/uint32.mjs +132 -121
  345. package/dist/number/branded-types/uint32.mjs.map +1 -1
  346. package/dist/number/enum/index.mjs +3 -3
  347. package/dist/number/enum/index.mjs.map +1 -1
  348. package/dist/number/enum/int8.mjs +146 -131
  349. package/dist/number/enum/int8.mjs.map +1 -1
  350. package/dist/number/enum/uint8.mjs +133 -119
  351. package/dist/number/enum/uint8.mjs.map +1 -1
  352. package/dist/number/index.mjs +6 -37
  353. package/dist/number/index.mjs.map +1 -1
  354. package/dist/number/num-arithmetic-types.mjs +42 -1
  355. package/dist/number/num-arithmetic-types.mjs.map +1 -1
  356. package/dist/number/num.mjs +541 -83
  357. package/dist/number/num.mjs.map +1 -1
  358. package/dist/number/refined-number-utils.mjs +294 -133
  359. package/dist/number/refined-number-utils.mjs.map +1 -1
  360. package/dist/object/index.mjs +2 -2
  361. package/dist/object/index.mjs.map +1 -1
  362. package/dist/object/object.mjs +355 -202
  363. package/dist/object/object.mjs.map +1 -1
  364. package/dist/others/cast-mutable.mjs +38 -11
  365. package/dist/others/cast-mutable.mjs.map +1 -1
  366. package/dist/others/cast-readonly.mjs +37 -11
  367. package/dist/others/cast-readonly.mjs.map +1 -1
  368. package/dist/others/debounce-function.mjs +22 -11
  369. package/dist/others/debounce-function.mjs.map +1 -1
  370. package/dist/others/fast-deep-equal.mjs +70 -51
  371. package/dist/others/fast-deep-equal.mjs.map +1 -1
  372. package/dist/others/if-then.mjs +32 -5
  373. package/dist/others/if-then.mjs.map +1 -1
  374. package/dist/others/index.mjs +10 -10
  375. package/dist/others/index.mjs.map +1 -1
  376. package/dist/others/map-nullable.mjs +11 -13
  377. package/dist/others/map-nullable.mjs.map +1 -1
  378. package/dist/others/memoize-function.mjs +14 -16
  379. package/dist/others/memoize-function.mjs.map +1 -1
  380. package/dist/others/tuple.mjs +52 -4
  381. package/dist/others/tuple.mjs.map +1 -1
  382. package/dist/others/unknown-to-string.mjs +91 -47
  383. package/dist/others/unknown-to-string.mjs.map +1 -1
  384. package/dist/promise/index.mjs +2 -2
  385. package/dist/promise/index.mjs.map +1 -1
  386. package/dist/promise/promise.mjs +51 -10
  387. package/dist/promise/promise.mjs.map +1 -1
  388. package/dist/string/index.mjs +2 -2
  389. package/dist/string/index.mjs.map +1 -1
  390. package/dist/string/str.mjs +250 -83
  391. package/dist/string/str.mjs.map +1 -1
  392. package/dist/types.mjs +3 -2
  393. package/dist/types.mjs.map +1 -1
  394. package/package.json +5 -6
  395. package/src/array/impl/array-utils-length-constraint-preservation.test.mts +2 -2
  396. package/src/collections/imap-mapped.mts +4 -4
  397. package/src/collections/imap.mts +1 -1
  398. package/src/collections/imap.test.mts +1 -1
  399. package/src/collections/iset-mapped.mts +2 -1
  400. package/src/collections/iset.mts +1 -1
  401. package/src/functional/async-result.test.mts +3 -2
  402. package/src/functional/optional.test.mts +2 -1
  403. package/src/functional/result.test.mts +0 -2
  404. package/src/guard/is-non-empty-string.test.mts +2 -2
  405. package/src/guard/is-non-null-object.test.mts +3 -3
  406. package/src/guard/is-primitive.test.mts +3 -3
  407. package/src/guard/is-type.test.mts +3 -3
  408. package/src/json/json.test.mts +1 -1
  409. package/src/number/enum/int8.mts +1 -1
@@ -1,7 +1,28 @@
1
1
  import { none } from './optional-none.mjs';
2
2
  import { some } from './optional-some.mjs';
3
-
4
- const fromNullable = (value) => value == null ? none : some(value);
5
-
6
- export { fromNullable };
7
- //# sourceMappingURL=optional-from-nullable.mjs.map
3
+ /**
4
+ * Converts a nullable value to an `Optional`.
5
+ *
6
+ * This is the primary way to lift nullable values (null or undefined) into
7
+ * the Optional type system. The function treats both `null` and `undefined`
8
+ * as empty values, converting them to `None`.
9
+ *
10
+ * @example
11
+ *
12
+ * ```ts
13
+ * const present = Optional.fromNullable('hello');
14
+ *
15
+ * const absent = Optional.fromNullable<string | null>(null);
16
+ *
17
+ * assert.deepStrictEqual(present, Optional.some('hello'));
18
+ *
19
+ * assert.deepStrictEqual(absent, Optional.none);
20
+ * ```
21
+ *
22
+ * @template T The type of the nullable value.
23
+ * @param value The nullable value to convert.
24
+ * @returns `Some<NonNullable<T>>` if the value is not null or
25
+ * undefined, otherwise `None`.
26
+ */
27
+ export const fromNullable = (value) => (value == null ? none : some(value));
28
+ //# sourceMappingURL=optional-from-nullable.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-from-nullable.mjs","sources":["../../../../src/functional/optional/impl/optional-from-nullable.mts"],"sourcesContent":["import { type Optional } from '../optional.mjs';\nimport { none } from './optional-none.mjs';\nimport { some } from './optional-some.mjs';\n\n/**\n * Converts a nullable value to an `Optional`.\n *\n * This is the primary way to lift nullable values (null or undefined) into\n * the Optional type system. The function treats both `null` and `undefined`\n * as empty values, converting them to `None`.\n *\n * @example\n *\n * ```ts\n * const present = Optional.fromNullable('hello');\n *\n * const absent = Optional.fromNullable<string | null>(null);\n *\n * assert.deepStrictEqual(present, Optional.some('hello'));\n *\n * assert.deepStrictEqual(absent, Optional.none);\n * ```\n *\n * @template T The type of the nullable value.\n * @param value The nullable value to convert.\n * @returns `Some<NonNullable<T>>` if the value is not null or\n * undefined, otherwise `None`.\n */\nexport const fromNullable = <T,>(\n value: T | null | undefined,\n): Optional<NonNullable<T>> => (value == null ? none : some(value));\n"],"names":[],"mappings":";;;AA4BO,MAAM,eAAe,CAC1B,KAAA,KAC8B,SAAS,IAAA,GAAO,IAAA,GAAO,KAAK,KAAK;;;;"}
1
+ {"version":3,"file":"optional-from-nullable.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-from-nullable.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAA2B,EACD,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC"}
@@ -1,6 +1,22 @@
1
1
  import { NoneTypeTagName } from './tag.mjs';
2
-
3
- const isNone = (optional) => optional.$$tag === NoneTypeTagName;
4
-
5
- export { isNone };
6
- //# sourceMappingURL=optional-is-none.mjs.map
2
+ /**
3
+ * Checks if an {@link Optional} is {@link None}. Acts as a type guard.
4
+ *
5
+ * @example
6
+ *
7
+ * ```ts
8
+ * const optionalValue = Optional.none as Optional<number>;
9
+ *
10
+ * if (Optional.isNone(optionalValue)) {
11
+ * // Type narrowed to None
12
+ * expectType<typeof optionalValue, None>('=');
13
+ * }
14
+ * ```
15
+ *
16
+ * @template O The {@link UnknownOptional} type to check.
17
+ * @param optional The {@link Optional} to check.
18
+ * @returns `true` if the {@link Optional} is {@link None}, `false`
19
+ * otherwise.
20
+ */
21
+ export const isNone = (optional) => optional.$$tag === NoneTypeTagName;
22
+ //# sourceMappingURL=optional-is-none.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-is-none.mjs","sources":["../../../../src/functional/optional/impl/optional-is-none.mts"],"sourcesContent":["import { type UnknownOptional } from '../optional.mjs';\nimport { NoneTypeTagName } from './tag.mjs';\nimport { type NarrowToNone } from './types.mjs';\n\n/**\n * Checks if an {@link Optional} is {@link None}. Acts as a type guard.\n *\n * @example\n *\n * ```ts\n * const optionalValue = Optional.none as Optional<number>;\n *\n * if (Optional.isNone(optionalValue)) {\n * // Type narrowed to None\n * expectType<typeof optionalValue, None>('=');\n * }\n * ```\n *\n * @template O The {@link UnknownOptional} type to check.\n * @param optional The {@link Optional} to check.\n * @returns `true` if the {@link Optional} is {@link None}, `false`\n * otherwise.\n */\nexport const isNone = <O extends UnknownOptional>(\n optional: O,\n): optional is NarrowToNone<O> => optional.$$tag === NoneTypeTagName;\n"],"names":[],"mappings":";;AAuBO,MAAM,MAAA,GAAS,CACpB,QAAA,KACgC,QAAA,CAAS,KAAA,KAAU;;;;"}
1
+ {"version":3,"file":"optional-is-none.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-is-none.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,QAAW,EACkB,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,eAAe,CAAC"}
@@ -1,8 +1,26 @@
1
- import { hasKey } from '../../../guard/has-key.mjs';
2
- import { isRecord } from '../../../guard/is-record.mjs';
3
- import { SomeTypeTagName, NoneTypeTagName } from './tag.mjs';
4
-
5
- const isOptional = (maybeOptional) => isRecord(maybeOptional) && hasKey(maybeOptional, "$$tag") && (maybeOptional.$$tag === SomeTypeTagName && hasKey(maybeOptional, "value") || maybeOptional.$$tag === NoneTypeTagName);
6
-
7
- export { isOptional };
8
- //# sourceMappingURL=optional-is-optional.mjs.map
1
+ import { hasKey, isRecord } from '../../../guard/index.mjs';
2
+ import { NoneTypeTagName, SomeTypeTagName } from './tag.mjs';
3
+ /**
4
+ * Checks if the given value is an {@link Optional}.
5
+ *
6
+ * @example
7
+ *
8
+ * ```ts
9
+ * const maybeOptional = Optional.some('value');
10
+ *
11
+ * const notOptional = { $$tag: 'ts-data-forge::Optional.some' } as const;
12
+ *
13
+ * assert.isTrue(Optional.isOptional(maybeOptional));
14
+ *
15
+ * assert.isFalse(Optional.isOptional(notOptional));
16
+ * ```
17
+ *
18
+ * @param maybeOptional The value to check.
19
+ * @returns `true` if the value is an {@link Optional}, otherwise `false`.
20
+ */
21
+ export const isOptional = (maybeOptional) => isRecord(maybeOptional) &&
22
+ hasKey(maybeOptional, '$$tag') &&
23
+ ((maybeOptional.$$tag === SomeTypeTagName &&
24
+ hasKey(maybeOptional, 'value')) ||
25
+ maybeOptional.$$tag === NoneTypeTagName);
26
+ //# sourceMappingURL=optional-is-optional.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-is-optional.mjs","sources":["../../../../src/functional/optional/impl/optional-is-optional.mts"],"sourcesContent":["import { hasKey, isRecord } from '../../../guard/index.mjs';\nimport { type Optional } from '../optional.mjs';\nimport { NoneTypeTagName, SomeTypeTagName } from './tag.mjs';\n\n/**\n * Checks if the given value is an {@link Optional}.\n *\n * @example\n *\n * ```ts\n * const maybeOptional = Optional.some('value');\n *\n * const notOptional = { $$tag: 'ts-data-forge::Optional.some' } as const;\n *\n * assert.isTrue(Optional.isOptional(maybeOptional));\n *\n * assert.isFalse(Optional.isOptional(notOptional));\n * ```\n *\n * @param maybeOptional The value to check.\n * @returns `true` if the value is an {@link Optional}, otherwise `false`.\n */\nexport const isOptional = (\n maybeOptional: unknown,\n): maybeOptional is Optional<unknown> =>\n isRecord(maybeOptional) &&\n hasKey(maybeOptional, '$$tag') &&\n ((maybeOptional.$$tag === SomeTypeTagName &&\n hasKey(maybeOptional, 'value')) ||\n maybeOptional.$$tag === NoneTypeTagName);\n"],"names":[],"mappings":";;;;AAsBO,MAAM,aAAa,CACxB,aAAA,KAEA,SAAS,aAAa,CAAA,IACtB,OAAO,aAAA,EAAe,OAAO,CAAA,KAC3B,aAAA,CAAc,UAAU,eAAA,IACxB,MAAA,CAAO,eAAe,OAAO,CAAA,IAC7B,cAAc,KAAA,KAAU,eAAA;;;;"}
1
+ {"version":3,"file":"optional-is-optional.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-is-optional.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,aAAsB,EACc,EAAE,CACtC,QAAQ,CAAC,aAAa,CAAC;IACvB,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;IAC9B,CAAC,CAAC,aAAa,CAAC,KAAK,KAAK,eAAe;QACvC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC/B,aAAa,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC"}
@@ -1,6 +1,23 @@
1
1
  import { SomeTypeTagName } from './tag.mjs';
2
-
3
- const isSome = (optional) => optional.$$tag === SomeTypeTagName;
4
-
5
- export { isSome };
6
- //# sourceMappingURL=optional-is-some.mjs.map
2
+ /**
3
+ * Checks if an {@link Optional} is {@link Some}. Acts as a type guard.
4
+ *
5
+ * @example
6
+ *
7
+ * ```ts
8
+ * const optionalNumber = Optional.some(42);
9
+ *
10
+ * if (Optional.isSome(optionalNumber)) {
11
+ * const value: number = optionalNumber.value;
12
+ *
13
+ * assert.isTrue(value === 42);
14
+ * }
15
+ * ```
16
+ *
17
+ * @template O The {@link UnknownOptional} type to check.
18
+ * @param optional The {@link Optional} to check.
19
+ * @returns `true` if the {@link Optional} is {@link Some}, `false`
20
+ * otherwise.
21
+ */
22
+ export const isSome = (optional) => optional.$$tag === SomeTypeTagName;
23
+ //# sourceMappingURL=optional-is-some.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-is-some.mjs","sources":["../../../../src/functional/optional/impl/optional-is-some.mts"],"sourcesContent":["import { type UnknownOptional } from '../optional.mjs';\nimport { SomeTypeTagName } from './tag.mjs';\nimport { type NarrowToSome } from './types.mjs';\n\n/**\n * Checks if an {@link Optional} is {@link Some}. Acts as a type guard.\n *\n * @example\n *\n * ```ts\n * const optionalNumber = Optional.some(42);\n *\n * if (Optional.isSome(optionalNumber)) {\n * const value: number = optionalNumber.value;\n *\n * assert.isTrue(value === 42);\n * }\n * ```\n *\n * @template O The {@link UnknownOptional} type to check.\n * @param optional The {@link Optional} to check.\n * @returns `true` if the {@link Optional} is {@link Some}, `false`\n * otherwise.\n */\nexport const isSome = <O extends UnknownOptional>(\n optional: O,\n): optional is NarrowToSome<O> => optional.$$tag === SomeTypeTagName;\n"],"names":[],"mappings":";;AAwBO,MAAM,MAAA,GAAS,CACpB,QAAA,KACgC,QAAA,CAAS,KAAA,KAAU;;;;"}
1
+ {"version":3,"file":"optional-is-some.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-is-some.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,QAAW,EACkB,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,eAAe,CAAC"}
@@ -2,23 +2,21 @@ import { isSome } from './optional-is-some.mjs';
2
2
  import { none } from './optional-none.mjs';
3
3
  import { some } from './optional-some.mjs';
4
4
  import { unwrap } from './optional-unwrap.mjs';
5
-
6
- function map(...args) {
7
- switch (args.length) {
8
- case 2: {
9
- const [optional, mapFn] = args;
10
- return mapImpl(optional, mapFn);
5
+ export function map(...args) {
6
+ switch (args.length) {
7
+ case 2: {
8
+ const [optional, mapFn] = args;
9
+ return mapImpl(optional, mapFn);
10
+ }
11
+ case 1: {
12
+ // Curried version: first argument is mapping function
13
+ const [mapFn] = args;
14
+ return (optional) => mapImpl(optional, mapFn);
15
+ }
11
16
  }
12
- case 1: {
13
- const [mapFn] = args;
14
- return (optional) => mapImpl(optional, mapFn);
15
- }
16
- }
17
17
  }
18
- const mapImpl = (optional, mapFn) => isSome(optional) ? (
19
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
20
- some(mapFn(unwrap(optional)))
21
- ) : none;
22
-
23
- export { map };
24
- //# sourceMappingURL=optional-map.mjs.map
18
+ const mapImpl = (optional, mapFn) => isSome(optional)
19
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
20
+ some(mapFn(unwrap(optional)))
21
+ : none;
22
+ //# sourceMappingURL=optional-map.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-map.mjs","sources":["../../../../src/functional/optional/impl/optional-map.mts"],"sourcesContent":["import { type Optional, type UnknownOptional } from '../optional.mjs';\nimport { isSome } from './optional-is-some.mjs';\nimport { none } from './optional-none.mjs';\nimport { some } from './optional-some.mjs';\nimport { unwrap } from './optional-unwrap.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Maps an {@link Optional}<S> to {@link Optional}<S2> by applying a function to\n * a contained value. If the {@link Optional} is {@link None}, it\n * returns {@link Optional.none}. Otherwise, it applies the `mapFn` to the\n * value in `Some` and returns a new `Some` with the result.\n *\n * @example\n *\n * ```ts\n * const numberOptional = Optional.some(21);\n *\n * const mapped = Optional.map(numberOptional, (value) => value * 2);\n *\n * assert.deepStrictEqual(mapped, Optional.some(42));\n *\n * const mapToLength = Optional.map((text: string) => text.length);\n *\n * assert.deepStrictEqual(mapToLength(Optional.some('abc')), Optional.some(3));\n *\n * assert.deepStrictEqual(mapToLength(Optional.none), Optional.none);\n * ```\n *\n * @template O The input `UnknownOptional` type.\n * @template S2 The type of the value returned by the mapping function.\n * @param optional The `Optional` to map.\n * @param mapFn The function to apply to the value if it exists.\n * @returns A new `Optional<S2>` resulting from the mapping, or\n * `None` if the input was `None`.\n */\nexport function map<O extends UnknownOptional, S2>(\n optional: O,\n mapFn: (value: Unwrap<O>) => S2,\n): Optional<S2>;\n\n// Curried version\n//\n// The returned function is generic over the *whole* optional, mirroring the\n// direct overload above, rather than fixing its parameter to `Optional<S>`.\n// Fixing it makes the curried form unusable from a caller that is itself\n// generic over the optional: with `S` bound to `Unwrap<O>` at currying time\n// the parameter becomes `Optional<Unwrap<O>>`, and TypeScript cannot show a\n// bare `O extends UnknownOptional` is assignable to that — although every\n// concrete instantiation of `O` is.\n//\n// The conditional is what keeps the check: `O` is inferred from the argument\n// and its value type still has to satisfy `S`, so mapping a `(s: string) =>\n// …` over an `Optional<number>` stays an error. The cost is the message it\n// produces — \"not assignable to `never`\" rather than naming the two optionals.\nexport function map<S, S2>(\n mapFn: (value: S) => S2,\n): <O extends UnknownOptional>(\n optional: Unwrap<O> extends S ? O : never,\n) => Optional<S2>;\n\nexport function map<O extends UnknownOptional, S2>(\n ...args:\n | readonly [optional: O, mapFn: (value: Unwrap<O>) => S2]\n | readonly [mapFn: (value: Unwrap<O>) => S2]\n): Optional<S2> | ((optional: O) => Optional<S2>) {\n switch (args.length) {\n case 2: {\n const [optional, mapFn] = args;\n\n return mapImpl(optional, mapFn);\n }\n\n case 1: {\n // Curried version: first argument is mapping function\n const [mapFn] = args;\n\n return (optional: O) => mapImpl(optional, mapFn);\n }\n }\n}\n\nconst mapImpl = <O extends UnknownOptional, S2>(\n optional: O,\n mapFn: (value: Unwrap<O>) => S2,\n): Optional<S2> =>\n isSome(optional)\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n some(mapFn(unwrap(optional)!))\n : none;\n"],"names":[],"mappings":";;;;;AA6DO,SAAS,OACX,IAAA,EAG6C;AAChD,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA,EAAG;AACN,MAAA,MAAM,CAAC,QAAA,EAAU,KAAK,CAAA,GAAI,IAAA;AAE1B,MAAA,OAAO,OAAA,CAAQ,UAAU,KAAK,CAAA;AAAA,IAChC;AAAA,IAEA,KAAK,CAAA,EAAG;AAEN,MAAA,MAAM,CAAC,KAAK,CAAA,GAAI,IAAA;AAEhB,MAAA,OAAO,CAAC,QAAA,KAAgB,OAAA,CAAQ,QAAA,EAAU,KAAK,CAAA;AAAA,IACjD;AAAA;AAEJ;AAEA,MAAM,OAAA,GAAU,CACd,QAAA,EACA,KAAA,KAEA,OAAO,QAAQ,CAAA;AAAA;AAAA,EAEX,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAE,CAAC;AAAA,IAC7B,IAAA;;;;"}
1
+ {"version":3,"file":"optional-map.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-map.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAyD/C,MAAM,UAAU,GAAG,CACjB,GAAG,IAE2C;IAE9C,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,CAAC;YACP,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YAE/B,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,EAAE,CAAC;YACP,sDAAsD;YACtD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAErB,OAAO,CAAC,QAAW,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,CACd,QAAW,EACX,KAA+B,EACjB,EAAE,CAChB,MAAM,CAAC,QAAQ,CAAC;IACd,CAAC,CAAC,oEAAoE;QACpE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC,CAAC;IAChC,CAAC,CAAC,IAAI,CAAC"}
@@ -1,22 +1,20 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
2
  import { unwrap } from './optional-unwrap.mjs';
3
-
4
- function match(...args) {
5
- switch (args.length) {
6
- case 2: {
7
- const [optional, cases] = args;
8
- return matchImpl(optional, cases);
3
+ export function match(...args) {
4
+ switch (args.length) {
5
+ case 2: {
6
+ const [optional, cases] = args;
7
+ return matchImpl(optional, cases);
8
+ }
9
+ case 1: {
10
+ // Curried version: the only argument is the case handlers
11
+ const [cases] = args;
12
+ return (optional) => matchImpl(optional, cases);
13
+ }
9
14
  }
10
- case 1: {
11
- const [cases] = args;
12
- return (optional) => matchImpl(optional, cases);
13
- }
14
- }
15
15
  }
16
- const matchImpl = (optional, cases) => isSome(optional) ? (
17
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
- cases.some(unwrap(optional))
19
- ) : cases.none();
20
-
21
- export { match };
22
- //# sourceMappingURL=optional-match.mjs.map
16
+ const matchImpl = (optional, cases) => isSome(optional)
17
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
+ cases.some(unwrap(optional))
19
+ : cases.none();
20
+ //# sourceMappingURL=optional-match.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-match.mjs","sources":["../../../../src/functional/optional/impl/optional-match.mts"],"sourcesContent":["import { type UnknownOptional } from '../optional.mjs';\nimport { isSome } from './optional-is-some.mjs';\nimport { unwrap } from './optional-unwrap.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Folds an {@link Optional} into a plain value by applying one of two case\n * handlers: `some` if the {@link Optional} contains a value, `none`\n * otherwise. This is the function form of pattern matching on an\n * {@link Optional}.\n *\n * Unlike {@link Optional.map}, the result is not wrapped in an\n * {@link Optional} — both branches produce the final value directly.\n *\n * @example\n *\n * ```ts\n * const doubledOrZero = Optional.match(Optional.some(21), {\n * some: (value) => value * 2,\n * none: () => 0,\n * });\n *\n * assert.deepStrictEqual(doubledOrZero, 42);\n *\n * const matcher = Optional.match({\n * some: (value: number) => `value: ${value}`,\n * none: () => 'none',\n * });\n *\n * assert.deepStrictEqual(matcher(Optional.some(3)), 'value: 3');\n *\n * assert.deepStrictEqual(matcher(Optional.none), 'none');\n * ```\n *\n * @template O The input `UnknownOptional` type.\n * @template S2 The type returned by the `some` case.\n * @template N2 The type returned by the `none` case.\n * @param optional The `Optional` to match on.\n * @param cases An object with a `some` handler receiving the contained value\n * and a `none` handler receiving nothing.\n * @returns The value produced by whichever case handler was applied.\n */\nexport function match<O extends UnknownOptional, S2, N2>(\n optional: O,\n cases: Readonly<{\n some: (value: Unwrap<O>) => S2;\n none: () => N2;\n }>,\n): N2 | S2;\n\n// Curried version\n//\n// The returned function is generic over the *whole* optional, mirroring the\n// direct overload above; see the comment on the curried overload of\n// `Optional.map` for why the parameter is a conditional type instead of a\n// plain `Optional<S>`.\nexport function match<S, S2, N2>(\n cases: Readonly<{\n some: (value: S) => S2;\n none: () => N2;\n }>,\n): <O extends UnknownOptional>(\n optional: Unwrap<O> extends S ? O : never,\n) => N2 | S2;\n\nexport function match<O extends UnknownOptional, S2, N2>(\n ...args:\n | readonly [\n optional: O,\n cases: Readonly<{\n some: (value: Unwrap<O>) => S2;\n none: () => N2;\n }>,\n ]\n | readonly [\n cases: Readonly<{\n some: (value: Unwrap<O>) => S2;\n none: () => N2;\n }>,\n ]\n): N2 | S2 | ((optional: O) => N2 | S2) {\n switch (args.length) {\n case 2: {\n const [optional, cases] = args;\n\n return matchImpl(optional, cases);\n }\n\n case 1: {\n // Curried version: the only argument is the case handlers\n const [cases] = args;\n\n return (optional: O) => matchImpl(optional, cases);\n }\n }\n}\n\nconst matchImpl = <O extends UnknownOptional, S2, N2>(\n optional: O,\n cases: Readonly<{\n some: (value: Unwrap<O>) => S2;\n none: () => N2;\n }>,\n): N2 | S2 =>\n isSome(optional)\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n cases.some(unwrap(optional)!)\n : cases.none();\n"],"names":[],"mappings":";;;AAiEO,SAAS,SACX,IAAA,EAcmC;AACtC,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA,EAAG;AACN,MAAA,MAAM,CAAC,QAAA,EAAU,KAAK,CAAA,GAAI,IAAA;AAE1B,MAAA,OAAO,SAAA,CAAU,UAAU,KAAK,CAAA;AAAA,IAClC;AAAA,IAEA,KAAK,CAAA,EAAG;AAEN,MAAA,MAAM,CAAC,KAAK,CAAA,GAAI,IAAA;AAEhB,MAAA,OAAO,CAAC,QAAA,KAAgB,SAAA,CAAU,QAAA,EAAU,KAAK,CAAA;AAAA,IACnD;AAAA;AAEJ;AAEA,MAAM,SAAA,GAAY,CAChB,QAAA,EACA,KAAA,KAKA,OAAO,QAAQ,CAAA;AAAA;AAAA,EAEX,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAE;AAAA,IAC5B,MAAM,IAAA,EAAK;;;;"}
1
+ {"version":3,"file":"optional-match.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-match.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA+D/C,MAAM,UAAU,KAAK,CACnB,GAAG,IAaE;IAEL,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,CAAC;YACP,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YAE/B,OAAO,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,EAAE,CAAC;YACP,0DAA0D;YAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAErB,OAAO,CAAC,QAAW,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,CAChB,QAAW,EACX,KAGE,EACO,EAAE,CACX,MAAM,CAAC,QAAQ,CAAC;IACd,CAAC,CAAC,oEAAoE;QACpE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC;IAC/B,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC"}
@@ -1,6 +1,19 @@
1
1
  import { NoneTypeTagName } from './tag.mjs';
2
-
3
- const none = { $$tag: NoneTypeTagName };
4
-
5
- export { none };
6
- //# sourceMappingURL=optional-none.mjs.map
2
+ /**
3
+ * The singleton instance representing {@link None} (an empty
4
+ * Optional).
5
+ *
6
+ * @example
7
+ *
8
+ * ```ts
9
+ * const someValue = Optional.some({ id: 1 });
10
+ *
11
+ * const noneValue = Optional.none;
12
+ *
13
+ * assert.isTrue(Optional.isSome(someValue));
14
+ *
15
+ * assert.isTrue(Optional.isNone(noneValue));
16
+ * ```
17
+ */
18
+ export const none = { $$tag: NoneTypeTagName };
19
+ //# sourceMappingURL=optional-none.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-none.mjs","sources":["../../../../src/functional/optional/impl/optional-none.mts"],"sourcesContent":["import { type None } from '../../../types.mjs';\nimport { NoneTypeTagName } from './tag.mjs';\n\n/**\n * The singleton instance representing {@link None} (an empty\n * Optional).\n *\n * @example\n *\n * ```ts\n * const someValue = Optional.some({ id: 1 });\n *\n * const noneValue = Optional.none;\n *\n * assert.isTrue(Optional.isSome(someValue));\n *\n * assert.isTrue(Optional.isNone(noneValue));\n * ```\n */\nexport const none: None = { $$tag: NoneTypeTagName } as const;\n"],"names":[],"mappings":";;AAmBO,MAAM,IAAA,GAAa,EAAE,KAAA,EAAO,eAAA;;;;"}
1
+ {"version":3,"file":"optional-none.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-none.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,IAAI,GAAS,EAAE,KAAK,EAAE,eAAe,EAAW,CAAC"}
@@ -1,18 +1,16 @@
1
1
  import { isNone } from './optional-is-none.mjs';
2
-
3
- function orElse(...args) {
4
- switch (args.length) {
5
- case 2: {
6
- const [optional, alternative] = args;
7
- return orElseImpl(optional, alternative);
2
+ export function orElse(...args) {
3
+ switch (args.length) {
4
+ case 2: {
5
+ const [optional, alternative] = args;
6
+ return orElseImpl(optional, alternative);
7
+ }
8
+ case 1: {
9
+ // Curried version
10
+ const [alternative] = args;
11
+ return (optional) => orElseImpl(optional, alternative);
12
+ }
8
13
  }
9
- case 1: {
10
- const [alternative] = args;
11
- return (optional) => orElseImpl(optional, alternative);
12
- }
13
- }
14
14
  }
15
- const orElseImpl = (optional, alternative) => isNone(optional) ? alternative : optional;
16
-
17
- export { orElse };
18
- //# sourceMappingURL=optional-or-else.mjs.map
15
+ const orElseImpl = (optional, alternative) => (isNone(optional) ? alternative : optional);
16
+ //# sourceMappingURL=optional-or-else.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-or-else.mjs","sources":["../../../../src/functional/optional/impl/optional-or-else.mts"],"sourcesContent":["import { type Optional, type UnknownOptional } from '../optional.mjs';\nimport { isNone } from './optional-is-none.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Returns the `Optional` if it is `Some`, otherwise returns the alternative.\n *\n * Provides a way to chain Optional operations with fallback values. This is\n * particularly useful for implementing default behavior or cascading lookups.\n * Supports both direct usage and curried form for functional composition.\n *\n * @example\n *\n * ```ts\n * const preferred = Optional.some('primary');\n *\n * const fallback = Optional.some('secondary');\n *\n * const noneValue = Optional.none as Optional<string>;\n *\n * assert.deepStrictEqual(Optional.orElse(preferred, fallback), preferred);\n *\n * assert.deepStrictEqual(Optional.orElse(noneValue, fallback), fallback);\n *\n * const orElseFallback = Optional.orElse(Optional.some('default'));\n *\n * assert.deepStrictEqual(\n * orElseFallback(Optional.none),\n * Optional.some('default'),\n * );\n *\n * assert.deepStrictEqual(\n * orElseFallback(Optional.some('value')),\n * Optional.some('value'),\n * );\n * ```\n *\n * @template O The input `UnknownOptional` type.\n * @param optional The `Optional` to check.\n * @param alternative The alternative `Optional` to return if the first is\n * `None`.\n * @returns The first `Optional` if `Some`, otherwise the alternative.\n */\nexport function orElse<\n O extends UnknownOptional,\n const O2 extends UnknownOptional,\n>(optional: O, alternative: O2): O | O2;\n\n// Curried version\nexport function orElse<O2>(\n alternative: Optional<O2>,\n): <O>(optional: Optional<O>) => Optional<O> | Optional<O2>;\n\nexport function orElse<\n O extends UnknownOptional,\n const O2 extends UnknownOptional,\n>(\n ...args: readonly [optional: O, alternative: O2] | readonly [alternative: O2]\n): (O | O2) | ((optional: Optional<Unwrap<O>>) => Optional<Unwrap<O>> | O2) {\n switch (args.length) {\n case 2: {\n const [optional, alternative] = args;\n\n return orElseImpl(optional, alternative);\n }\n\n case 1: {\n // Curried version\n const [alternative] = args;\n\n return (optional: Optional<Unwrap<O>>) =>\n orElseImpl(optional, alternative);\n }\n }\n}\n\nconst orElseImpl = <\n O extends UnknownOptional,\n const O2 extends UnknownOptional,\n>(\n optional: O,\n alternative: O2,\n): O | O2 => (isNone(optional) ? alternative : optional);\n"],"names":[],"mappings":";;AAqDO,SAAS,UAIX,IAAA,EACuE;AAC1E,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA,EAAG;AACN,MAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,IAAA;AAEhC,MAAA,OAAO,UAAA,CAAW,UAAU,WAAW,CAAA;AAAA,IACzC;AAAA,IAEA,KAAK,CAAA,EAAG;AAEN,MAAA,MAAM,CAAC,WAAW,CAAA,GAAI,IAAA;AAEtB,MAAA,OAAO,CAAC,QAAA,KACN,UAAA,CAAW,QAAA,EAAU,WAAW,CAAA;AAAA,IACpC;AAAA;AAEJ;AAEA,MAAM,aAAa,CAIjB,QAAA,EACA,gBACY,MAAA,CAAO,QAAQ,IAAI,WAAA,GAAc,QAAA;;;;"}
1
+ {"version":3,"file":"optional-or-else.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-or-else.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAoDhD,MAAM,UAAU,MAAM,CAIpB,GAAG,IAA0E;IAE7E,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,CAAC;YACP,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;YAErC,OAAO,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,EAAE,CAAC;YACP,kBAAkB;YAClB,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;YAE3B,OAAO,CAAC,QAA6B,EAAE,EAAE,CACvC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAAG,CAIjB,QAAW,EACX,WAAe,EACP,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,9 +1,25 @@
1
1
  import { SomeTypeTagName } from './tag.mjs';
2
-
3
- const some = (value) => ({
4
- $$tag: SomeTypeTagName,
5
- value
2
+ /**
3
+ * Creates an {@link Some} containing the given value.
4
+ *
5
+ * @example
6
+ *
7
+ * ```ts
8
+ * const someValue = Optional.some({ id: 1 });
9
+ *
10
+ * const noneValue = Optional.none;
11
+ *
12
+ * assert.isTrue(Optional.isSome(someValue));
13
+ *
14
+ * assert.isTrue(Optional.isNone(noneValue));
15
+ * ```
16
+ *
17
+ * @template S The type of the value.
18
+ * @param value The value to wrap in an {@link Some}.
19
+ * @returns An {@link Some}<S> containing the value.
20
+ */
21
+ export const some = (value) => ({
22
+ $$tag: SomeTypeTagName,
23
+ value,
6
24
  });
7
-
8
- export { some };
9
- //# sourceMappingURL=optional-some.mjs.map
25
+ //# sourceMappingURL=optional-some.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-some.mjs","sources":["../../../../src/functional/optional/impl/optional-some.mts"],"sourcesContent":["import { type Some } from '../../../types.mjs';\nimport { SomeTypeTagName } from './tag.mjs';\n\n/**\n * Creates an {@link Some} containing the given value.\n *\n * @example\n *\n * ```ts\n * const someValue = Optional.some({ id: 1 });\n *\n * const noneValue = Optional.none;\n *\n * assert.isTrue(Optional.isSome(someValue));\n *\n * assert.isTrue(Optional.isNone(noneValue));\n * ```\n *\n * @template S The type of the value.\n * @param value The value to wrap in an {@link Some}.\n * @returns An {@link Some}<S> containing the value.\n */\nexport const some = <const S,>(value: S): Some<S> =>\n ({\n $$tag: SomeTypeTagName,\n value,\n }) as const;\n"],"names":[],"mappings":";;AAsBO,MAAM,IAAA,GAAO,CAAW,KAAA,MAC5B;AAAA,EACC,KAAA,EAAO,eAAA;AAAA,EACP;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"optional-some.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-some.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAW,KAAQ,EAAW,EAAE,CAClD,CAAC;IACC,KAAK,EAAE,eAAe;IACtB,KAAK;CACN,CAAU,CAAC"}
@@ -1,7 +1,30 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
2
  import { unwrap } from './optional-unwrap.mjs';
3
-
4
- const toNullable = (optional) => isSome(optional) ? unwrap(optional) : void 0;
5
-
6
- export { toNullable };
7
- //# sourceMappingURL=optional-to-nullable.mjs.map
3
+ /**
4
+ * Converts an `Optional` to a nullable value.
5
+ *
6
+ * This function extracts the value from an Optional, returning `undefined`
7
+ * for empty Optionals. This is useful when interfacing with APIs or systems
8
+ * that expect nullable values rather than Optional types.
9
+ *
10
+ * Note: This returns `undefined` (not `null`) for consistency with
11
+ * JavaScript's undefined semantics and TypeScript's optional properties.
12
+ *
13
+ * @example
14
+ *
15
+ * ```ts
16
+ * const someNumber = Optional.some(42);
17
+ *
18
+ * const noneNumber = Optional.none as Optional<number>;
19
+ *
20
+ * assert.isTrue(Optional.toNullable(someNumber) === 42);
21
+ *
22
+ * assert.isTrue(Optional.toNullable(noneNumber) === undefined);
23
+ * ```
24
+ *
25
+ * @template O The `UnknownOptional` type to convert.
26
+ * @param optional The `Optional` to convert.
27
+ * @returns The contained value if `Some`, otherwise `undefined`.
28
+ */
29
+ export const toNullable = (optional) => (isSome(optional) ? unwrap(optional) : undefined);
30
+ //# sourceMappingURL=optional-to-nullable.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-to-nullable.mjs","sources":["../../../../src/functional/optional/impl/optional-to-nullable.mts"],"sourcesContent":["import { type UnknownOptional } from '../optional.mjs';\nimport { isSome } from './optional-is-some.mjs';\nimport { unwrap } from './optional-unwrap.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Converts an `Optional` to a nullable value.\n *\n * This function extracts the value from an Optional, returning `undefined`\n * for empty Optionals. This is useful when interfacing with APIs or systems\n * that expect nullable values rather than Optional types.\n *\n * Note: This returns `undefined` (not `null`) for consistency with\n * JavaScript's undefined semantics and TypeScript's optional properties.\n *\n * @example\n *\n * ```ts\n * const someNumber = Optional.some(42);\n *\n * const noneNumber = Optional.none as Optional<number>;\n *\n * assert.isTrue(Optional.toNullable(someNumber) === 42);\n *\n * assert.isTrue(Optional.toNullable(noneNumber) === undefined);\n * ```\n *\n * @template O The `UnknownOptional` type to convert.\n * @param optional The `Optional` to convert.\n * @returns The contained value if `Some`, otherwise `undefined`.\n */\nexport const toNullable = <O extends UnknownOptional>(\n optional: O,\n): Unwrap<O> | undefined => (isSome(optional) ? unwrap(optional) : undefined);\n"],"names":[],"mappings":";;;AA+BO,MAAM,UAAA,GAAa,CACxB,QAAA,KAC2B,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,GAAI;;;;"}
1
+ {"version":3,"file":"optional-to-nullable.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-to-nullable.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAAW,EACY,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC"}
@@ -1,18 +1,16 @@
1
1
  import { unwrap } from './optional-unwrap.mjs';
2
-
3
- function unwrapOr(...args) {
4
- switch (args.length) {
5
- case 2: {
6
- const [optional, defaultValue] = args;
7
- return unwrapOrImpl(optional, defaultValue);
2
+ export function unwrapOr(...args) {
3
+ switch (args.length) {
4
+ case 2: {
5
+ const [optional, defaultValue] = args;
6
+ return unwrapOrImpl(optional, defaultValue);
7
+ }
8
+ case 1: {
9
+ // Curried version: first argument is default value
10
+ const [defaultValue] = args;
11
+ return (optional) => unwrapOrImpl(optional, defaultValue);
12
+ }
8
13
  }
9
- case 1: {
10
- const [defaultValue] = args;
11
- return (optional) => unwrapOrImpl(optional, defaultValue);
12
- }
13
- }
14
14
  }
15
15
  const unwrapOrImpl = (optional, defaultValue) => unwrap(optional) ?? defaultValue;
16
-
17
- export { unwrapOr };
18
- //# sourceMappingURL=optional-unwrap-or.mjs.map
16
+ //# sourceMappingURL=optional-unwrap-or.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-unwrap-or.mjs","sources":["../../../../src/functional/optional/impl/optional-unwrap-or.mts"],"sourcesContent":["import { type Optional, type UnknownOptional } from '../optional.mjs';\nimport { unwrap } from './optional-unwrap.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Unwraps an `Optional`, returning the contained value or a default value if\n * it's `None`.\n *\n * Supports both direct usage and curried form for functional composition.\n * This is often preferred over `unwrap()` when you have a sensible fallback\n * value.\n *\n * @example\n *\n * ```ts\n * const withValue = Optional.some(5);\n *\n * const withoutValue = Optional.none as Optional<number>;\n *\n * assert.isTrue(Optional.unwrapOr(withValue, 0) === 5);\n *\n * assert.isTrue(Optional.unwrapOr(withoutValue, 0) === 0);\n *\n * const unwrapWithDefault = Optional.unwrapOr(10);\n *\n * assert.isTrue(unwrapWithDefault(Optional.some(3)) === 3);\n *\n * assert.isTrue(unwrapWithDefault(Optional.none) === 10);\n * ```\n *\n * @template O The `UnknownOptional` type to unwrap.\n * @template D The type of the default value.\n * @param optional The `Optional` to unwrap.\n * @param defaultValue The value to return if `optional` is `None`.\n * @returns The contained value if `Some`, otherwise `defaultValue`.\n */\nexport function unwrapOr<O extends UnknownOptional, D>(\n optional: O,\n defaultValue: D,\n): D | Unwrap<O>;\n\n// Curried version\nexport function unwrapOr<D>(\n defaultValue: D,\n): <O>(optional: Optional<O>) => D | O;\n\nexport function unwrapOr<O extends UnknownOptional, D>(\n ...args: readonly [optional: O, defaultValue: D] | readonly [defaultValue: D]\n): (D | Unwrap<O>) | ((optional: Optional<Unwrap<O>>) => D | Unwrap<O>) {\n switch (args.length) {\n case 2: {\n const [optional, defaultValue] = args;\n\n return unwrapOrImpl(optional, defaultValue);\n }\n\n case 1: {\n // Curried version: first argument is default value\n const [defaultValue] = args;\n\n return (optional: Optional<Unwrap<O>>) =>\n unwrapOrImpl(optional, defaultValue);\n }\n }\n}\n\nconst unwrapOrImpl = <O extends UnknownOptional, D>(\n optional: O,\n defaultValue: D,\n): D | Unwrap<O> => unwrap(optional) ?? defaultValue;\n"],"names":[],"mappings":";;AA8CO,SAAS,YACX,IAAA,EACmE;AACtE,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA,EAAG;AACN,MAAA,MAAM,CAAC,QAAA,EAAU,YAAY,CAAA,GAAI,IAAA;AAEjC,MAAA,OAAO,YAAA,CAAa,UAAU,YAAY,CAAA;AAAA,IAC5C;AAAA,IAEA,KAAK,CAAA,EAAG;AAEN,MAAA,MAAM,CAAC,YAAY,CAAA,GAAI,IAAA;AAEvB,MAAA,OAAO,CAAC,QAAA,KACN,YAAA,CAAa,QAAA,EAAU,YAAY,CAAA;AAAA,IACvC;AAAA;AAEJ;AAEA,MAAM,eAAe,CACnB,QAAA,EACA,YAAA,KACkB,MAAA,CAAO,QAAQ,CAAA,IAAK,YAAA;;;;"}
1
+ {"version":3,"file":"optional-unwrap-or.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-unwrap-or.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA6C/C,MAAM,UAAU,QAAQ,CACtB,GAAG,IAA0E;IAE7E,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,CAAC;YACP,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;YAEtC,OAAO,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,EAAE,CAAC;YACP,mDAAmD;YACnD,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;YAE5B,OAAO,CAAC,QAA6B,EAAE,EAAE,CACvC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,CACnB,QAAW,EACX,YAAe,EACA,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC"}
@@ -1,11 +1,36 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
-
3
- const unwrapThrow = (optional) => {
4
- if (isSome(optional)) {
5
- return optional.value;
6
- }
7
- throw new Error("`unwrapThrow()` has failed because it is `None`");
2
+ /**
3
+ * Unwraps an `Optional`, returning the contained value. Throws an error if
4
+ * the `Optional` is `None`.
5
+ *
6
+ * This is a safer alternative to direct value access when you know the
7
+ * Optional should contain a value. Use this method when an empty Optional
8
+ * represents a programming error or unexpected condition.
9
+ *
10
+ * @example
11
+ *
12
+ * ```ts
13
+ * const present = Optional.some('available');
14
+ *
15
+ * assert.isTrue(Optional.unwrapThrow(present) === 'available');
16
+ *
17
+ * assert.throws(
18
+ * () => Optional.unwrapThrow(Optional.none),
19
+ * /has failed because it is `None`/u,
20
+ * );
21
+ * ```
22
+ *
23
+ * @template O The `UnknownOptional` type to unwrap.
24
+ * @param optional The `Optional` to unwrap.
25
+ * @returns The contained value if `Some`.
26
+ * @throws {Error} Error with message "`unwrapThrow()` has failed because it
27
+ * is `None`" if the `Optional` is `None`.
28
+ */
29
+ export const unwrapThrow = (optional) => {
30
+ if (isSome(optional)) {
31
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
32
+ return optional.value;
33
+ }
34
+ throw new Error('`unwrapThrow()` has failed because it is `None`');
8
35
  };
9
-
10
- export { unwrapThrow };
11
- //# sourceMappingURL=optional-unwrap-throw.mjs.map
36
+ //# sourceMappingURL=optional-unwrap-throw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-unwrap-throw.mjs","sources":["../../../../src/functional/optional/impl/optional-unwrap-throw.mts"],"sourcesContent":["import { type UnknownOptional } from '../optional.mjs';\nimport { isSome } from './optional-is-some.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Unwraps an `Optional`, returning the contained value. Throws an error if\n * the `Optional` is `None`.\n *\n * This is a safer alternative to direct value access when you know the\n * Optional should contain a value. Use this method when an empty Optional\n * represents a programming error or unexpected condition.\n *\n * @example\n *\n * ```ts\n * const present = Optional.some('available');\n *\n * assert.isTrue(Optional.unwrapThrow(present) === 'available');\n *\n * assert.throws(\n * () => Optional.unwrapThrow(Optional.none),\n * /has failed because it is `None`/u,\n * );\n * ```\n *\n * @template O The `UnknownOptional` type to unwrap.\n * @param optional The `Optional` to unwrap.\n * @returns The contained value if `Some`.\n * @throws {Error} Error with message \"`unwrapThrow()` has failed because it\n * is `None`\" if the `Optional` is `None`.\n */\nexport const unwrapThrow = <O extends UnknownOptional>(\n optional: O,\n): Unwrap<O> => {\n if (isSome(optional)) {\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return optional.value as Unwrap<O>;\n }\n\n throw new Error('`unwrapThrow()` has failed because it is `None`');\n};\n"],"names":[],"mappings":";;AA+BO,MAAM,WAAA,GAAc,CACzB,QAAA,KACc;AACd,EAAA,IAAI,MAAA,CAAO,QAAQ,CAAA,EAAG;AAEpB,IAAA,OAAO,QAAA,CAAS,KAAA;AAAA,EAClB;AAEA,EAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AACnE;;;;"}
1
+ {"version":3,"file":"optional-unwrap-throw.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-unwrap-throw.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,QAAW,EACA,EAAE;IACb,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,oEAAoE;QACpE,OAAO,QAAQ,CAAC,KAAkB,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC,CAAC"}
@@ -1,11 +1,8 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
-
3
- function unwrap(optional) {
4
- return isSome(optional) ? (
5
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
6
- optional.value
7
- ) : void 0;
2
+ export function unwrap(optional) {
3
+ return isSome(optional)
4
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
5
+ optional.value
6
+ : undefined;
8
7
  }
9
-
10
- export { unwrap };
11
- //# sourceMappingURL=optional-unwrap.mjs.map
8
+ //# sourceMappingURL=optional-unwrap.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional-unwrap.mjs","sources":["../../../../src/functional/optional/impl/optional-unwrap.mts"],"sourcesContent":["import { type Some } from '../../../types.mjs';\nimport { type UnknownOptional } from '../optional.mjs';\nimport { isSome } from './optional-is-some.mjs';\nimport { type Unwrap } from './types.mjs';\n\n/**\n * Unwraps an `Optional`, returning the contained value or `undefined` if\n * empty.\n *\n * This function provides a safe way to extract values from Optionals without\n * throwing exceptions. It has overloaded behavior based on the type:\n *\n * - For `Some<T>`: Always returns `T` (guaranteed by type system)\n * - For general `Optional<T>`: Returns `T | undefined`\n *\n * @example\n *\n * ```ts\n * const someString = Optional.some('text');\n *\n * const noneString = Optional.none as Optional<string>;\n *\n * assert.isTrue(Optional.unwrap(someString) === 'text');\n *\n * assert.isTrue(Optional.unwrap(noneString) === undefined);\n * ```\n *\n * @template O The `UnknownOptional` type to unwrap.\n * @param optional The `Optional` to unwrap.\n * @returns The contained value if `Some`, otherwise `undefined`.\n */\nexport function unwrap<O extends Some<unknown>>(optional: O): Unwrap<O>;\n\nexport function unwrap<O extends UnknownOptional>(\n optional: O,\n): Unwrap<O> | undefined;\n\nexport function unwrap<O extends UnknownOptional>(\n optional: O,\n): Unwrap<O> | undefined {\n return isSome(optional)\n ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (optional.value as Unwrap<O>)\n : undefined;\n}\n"],"names":[],"mappings":";;AAqCO,SAAS,OACd,QAAA,EACuB;AACvB,EAAA,OAAO,OAAO,QAAQ,CAAA;AAAA;AAAA,IAEjB,QAAA,CAAS;AAAA,MACV,MAAA;AACN;;;;"}
1
+ {"version":3,"file":"optional-unwrap.mjs","sourceRoot":"","sources":["../../../../src/functional/optional/impl/optional-unwrap.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAmChD,MAAM,UAAU,MAAM,CACpB,QAAW;IAEX,OAAO,MAAM,CAAC,QAAQ,CAAC;QACrB,CAAC,CAAC,oEAAoE;YACnE,QAAQ,CAAC,KAAmB;QAC/B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -1,8 +1,39 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
2
  import { none } from './optional-none.mjs';
3
3
  import { some } from './optional-some.mjs';
4
-
5
- const zip = (optionalA, optionalB) => isSome(optionalA) && isSome(optionalB) ? some([optionalA.value, optionalB.value]) : none;
6
-
7
- export { zip };
8
- //# sourceMappingURL=optional-zip.mjs.map
4
+ /**
5
+ * Combines two `Optional` values into a single `Optional` containing a tuple.
6
+ * If either `Optional` is `None`, returns `None`.
7
+ *
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * const zipped = Optional.zip(Optional.some('left'), Optional.some(1));
12
+ *
13
+ * assert.isTrue(Optional.isSome(zipped));
14
+ *
15
+ * if (Optional.isSome(zipped)) {
16
+ * const expected: readonly [string, number] = ['left', 1] as const;
17
+ *
18
+ * assert.deepStrictEqual(zipped.value, expected);
19
+ * }
20
+ *
21
+ * const missing = Optional.zip(
22
+ * Optional.some('value'),
23
+ * // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
24
+ * Optional.none as Optional<number>,
25
+ * );
26
+ *
27
+ * assert.deepStrictEqual(missing, Optional.none);
28
+ * ```
29
+ *
30
+ * @template A The value type of the first `Optional`.
31
+ * @template B The value type of the second `Optional`.
32
+ * @param optionalA The first `Optional`.
33
+ * @param optionalB The second `Optional`.
34
+ * @returns An `Optional` containing a tuple of both values, or `None`.
35
+ */
36
+ export const zip = (optionalA, optionalB) => isSome(optionalA) && isSome(optionalB)
37
+ ? some([optionalA.value, optionalB.value])
38
+ : none;
39
+ //# sourceMappingURL=optional-zip.mjs.map