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
@@ -0,0 +1,67 @@
1
+ import { isSome } from './optional-is-some.mjs';
2
+ import { none } from './optional-none.mjs';
3
+ import { unwrap } from './optional-unwrap.mjs';
4
+ import { type Unwrap } from './types.mjs';
5
+
6
+ /**
7
+ * Applies a function that returns an `Optional` to the value in an
8
+ * `Some`. If the input is `None`, returns `None`.
9
+ * This is the monadic bind operation for `Optional`.
10
+ *
11
+ * @example
12
+ *
13
+ * ```ts
14
+ * const parseNumber = (input: string): Optional<number> => {
15
+ * const num = Number.parseInt(input, 10);
16
+ * return Number.isNaN(num) ? Optional.none : Optional.some(num);
17
+ * };
18
+ *
19
+ * const parsed = Optional.flatMap(Optional.some('10'), parseNumber);
20
+ *
21
+ * assert.deepStrictEqual(parsed, Optional.some(10));
22
+ *
23
+ * const flatMapParse = Optional.flatMap(parseNumber);
24
+ *
25
+ * assert.deepStrictEqual(flatMapParse(Optional.some('5')), Optional.some(5));
26
+ * assert.deepStrictEqual(flatMapParse(Optional.some('invalid')), Optional.none);
27
+ * ```
28
+ *
29
+ * @template O The input `UnknownOptional` type.
30
+ * @template S2 The value type of the `Optional` returned by the function.
31
+ * @param optional The `Optional` to flat map.
32
+ * @param flatMapFn The function to apply that returns an `Optional`.
33
+ * @returns The result of applying the function, or `None`.
34
+ */
35
+ export function flatMap<O extends UnknownOptional, S2>(
36
+ optional: O,
37
+ flatMapFn: (value: Unwrap<O>) => Optional<S2>,
38
+ ): Optional<S2>;
39
+
40
+ // Curried version
41
+ export function flatMap<S, S2>(
42
+ flatMapFn: (value: S) => Optional<S2>,
43
+ ): (optional: Optional<S>) => Optional<S2>;
44
+
45
+ export function flatMap<O extends UnknownOptional, S2>(
46
+ ...args:
47
+ | readonly [optional: O, flatMapFn: (value: Unwrap<O>) => Optional<S2>]
48
+ | readonly [flatMapFn: (value: Unwrap<O>) => Optional<S2>]
49
+ ): Optional<S2> | ((optional: O) => Optional<S2>) {
50
+ switch (args.length) {
51
+ case 2: {
52
+ const [optional, flatMapFn] = args;
53
+ return flatMapImpl(optional, flatMapFn);
54
+ }
55
+
56
+ case 1: {
57
+ // Curried version
58
+ const [flatMapFn] = args;
59
+ return (optional: O) => flatMapImpl(optional, flatMapFn);
60
+ }
61
+ }
62
+ }
63
+
64
+ const flatMapImpl = <O extends UnknownOptional, S2>(
65
+ optional: O,
66
+ flatMapFn: (value: Unwrap<O>) => Optional<S2>,
67
+ ): Optional<S2> => (isSome(optional) ? flatMapFn(unwrap(optional)) : none);
@@ -0,0 +1,28 @@
1
+ import { none } from './optional-none.mjs';
2
+ import { some } from './optional-some.mjs';
3
+
4
+ /**
5
+ * Converts a nullable value to an `Optional`.
6
+ *
7
+ * This is the primary way to lift nullable values (null or undefined) into
8
+ * the Optional type system. The function treats both `null` and `undefined`
9
+ * as empty values, converting them to `None`.
10
+ *
11
+ * @example
12
+ *
13
+ * ```ts
14
+ * const present = Optional.fromNullable('hello');
15
+ * const absent = Optional.fromNullable<string | null>(null);
16
+ *
17
+ * assert.deepStrictEqual(present, Optional.some('hello'));
18
+ * assert.deepStrictEqual(absent, Optional.none);
19
+ * ```
20
+ *
21
+ * @template T The type of the nullable value.
22
+ * @param value The nullable value to convert.
23
+ * @returns `Some<NonNullable<T>>` if the value is not null or
24
+ * undefined, otherwise `None`.
25
+ */
26
+ export const fromNullable = <T,>(
27
+ value: T | null | undefined,
28
+ ): Optional<NonNullable<T>> => (value == null ? none : some(value));
@@ -0,0 +1,25 @@
1
+ import { NoneTypeTagName } from './tag.mjs';
2
+ import { type NarrowToNone } from './types.mjs';
3
+
4
+ /**
5
+ * Checks if an {@link Optional} is {@link None}. Acts as a type guard.
6
+ *
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * const optionalValue = Optional.none as Optional<number>;
11
+ *
12
+ * if (Optional.isNone(optionalValue)) {
13
+ * // Type narrowed to None
14
+ * assert.ok(true); // optionalValue is None
15
+ * }
16
+ * ```
17
+ *
18
+ * @template O The {@link UnknownOptional} type to check.
19
+ * @param optional The {@link Optional} to check.
20
+ * @returns `true` if the {@link Optional} is {@link None}, `false`
21
+ * otherwise.
22
+ */
23
+ export const isNone = <O extends UnknownOptional>(
24
+ optional: O,
25
+ ): optional is NarrowToNone<O> => optional.$$tag === NoneTypeTagName;
@@ -0,0 +1,27 @@
1
+ import { isRecord } from '../../../guard/index.mjs';
2
+ import { NoneTypeTagName, SomeTypeTagName } from './tag.mjs';
3
+
4
+ /**
5
+ * Checks if the given value is an {@link Optional}.
6
+ *
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * const maybeOptional = Optional.some('value');
11
+ * const notOptional = { $$tag: 'ts-data-forge::Optional.some' };
12
+ *
13
+ * assert.ok(Optional.isOptional(maybeOptional));
14
+ * assert.notOk(Optional.isOptional(notOptional));
15
+ * ```
16
+ *
17
+ * @param maybeOptional The value to check.
18
+ * @returns `true` if the value is an {@link Optional}, otherwise `false`.
19
+ */
20
+ export const isOptional = (
21
+ maybeOptional: unknown,
22
+ ): maybeOptional is Optional<unknown> =>
23
+ isRecord(maybeOptional) &&
24
+ Object.hasOwn(maybeOptional, '$$tag') &&
25
+ ((maybeOptional['$$tag'] === SomeTypeTagName &&
26
+ Object.hasOwn(maybeOptional, 'value')) ||
27
+ maybeOptional['$$tag'] === NoneTypeTagName);
@@ -0,0 +1,25 @@
1
+ import { SomeTypeTagName } from './tag.mjs';
2
+ import { type NarrowToSome } from './types.mjs';
3
+
4
+ /**
5
+ * Checks if an {@link Optional} is {@link Some}. Acts as a type guard.
6
+ *
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * const optionalNumber = Optional.some(42);
11
+ *
12
+ * if (Optional.isSome(optionalNumber)) {
13
+ * const value: number = optionalNumber.value;
14
+ * assert(value === 42);
15
+ * }
16
+ * ```
17
+ *
18
+ * @template O The {@link UnknownOptional} type to check.
19
+ * @param optional The {@link Optional} to check.
20
+ * @returns `true` if the {@link Optional} is {@link Some}, `false`
21
+ * otherwise.
22
+ */
23
+ export const isSome = <O extends UnknownOptional>(
24
+ optional: O,
25
+ ): optional is NarrowToSome<O> => optional.$$tag === SomeTypeTagName;
@@ -0,0 +1,69 @@
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
+ * Maps an {@link Optional}<S> to {@link Optional}<S2> by applying a function to
9
+ * a contained value. If the {@link Optional} is {@link None}, it
10
+ * returns {@link Optional.none}. Otherwise, it applies the `mapFn` to the
11
+ * value in `Some` and returns a new `Some` with the result.
12
+ *
13
+ * @example
14
+ *
15
+ * ```ts
16
+ * const numberOptional = Optional.some(21);
17
+ * const mapped = Optional.map(numberOptional, (value) => value * 2);
18
+ *
19
+ * assert.deepStrictEqual(mapped, Optional.some(42));
20
+ *
21
+ * const mapToLength = Optional.map((text: string) => text.length);
22
+ *
23
+ * assert.deepStrictEqual(mapToLength(Optional.some('abc')), Optional.some(3));
24
+ * assert.deepStrictEqual(mapToLength(Optional.none), Optional.none);
25
+ * ```
26
+ *
27
+ * @template O The input `UnknownOptional` type.
28
+ * @template S2 The type of the value returned by the mapping function.
29
+ * @param optional The `Optional` to map.
30
+ * @param mapFn The function to apply to the value if it exists.
31
+ * @returns A new `Optional<S2>` resulting from the mapping, or
32
+ * `None` if the input was `None`.
33
+ */
34
+ export function map<O extends UnknownOptional, S2>(
35
+ optional: O,
36
+ mapFn: (value: Unwrap<O>) => S2,
37
+ ): Optional<S2>;
38
+
39
+ // Curried version
40
+ export function map<S, S2>(
41
+ mapFn: (value: S) => S2,
42
+ ): (optional: Optional<S>) => Optional<S2>;
43
+
44
+ export function map<O extends UnknownOptional, S2>(
45
+ ...args:
46
+ | readonly [optional: O, mapFn: (value: Unwrap<O>) => S2]
47
+ | readonly [mapFn: (value: Unwrap<O>) => S2]
48
+ ): Optional<S2> | ((optional: O) => Optional<S2>) {
49
+ switch (args.length) {
50
+ case 2: {
51
+ const [optional, mapFn] = args;
52
+ return mapImpl(optional, mapFn);
53
+ }
54
+ case 1: {
55
+ // Curried version: first argument is mapping function
56
+ const [mapFn] = args;
57
+ return (optional: O) => mapImpl(optional, mapFn);
58
+ }
59
+ }
60
+ }
61
+
62
+ const mapImpl = <O extends UnknownOptional, S2>(
63
+ optional: O,
64
+ mapFn: (value: Unwrap<O>) => S2,
65
+ ): Optional<S2> =>
66
+ isSome(optional)
67
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
68
+ some(mapFn(unwrap(optional)!))
69
+ : none;
@@ -0,0 +1,17 @@
1
+ import { NoneTypeTagName } from './tag.mjs';
2
+
3
+ /**
4
+ * The singleton instance representing {@link None} (an empty
5
+ * Optional).
6
+ *
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * const someValue = Optional.some({ id: 1 });
11
+ * const noneValue = Optional.none;
12
+ *
13
+ * assert.ok(Optional.isSome(someValue));
14
+ * assert.ok(Optional.isNone(noneValue));
15
+ * ```
16
+ */
17
+ export const none: None = { $$tag: NoneTypeTagName } as const;
@@ -0,0 +1,73 @@
1
+ import { isNone } from './optional-is-none.mjs';
2
+ import { type Unwrap } from './types.mjs';
3
+
4
+ /**
5
+ * Returns the `Optional` if it is `Some`, otherwise returns the alternative.
6
+ *
7
+ * Provides a way to chain Optional operations with fallback values. This is
8
+ * particularly useful for implementing default behavior or cascading lookups.
9
+ * Supports both direct usage and curried form for functional composition.
10
+ *
11
+ * @example
12
+ *
13
+ * ```ts
14
+ * const preferred = Optional.some('primary');
15
+ * const fallback = Optional.some('secondary');
16
+ * const noneValue = Optional.none as Optional<string>;
17
+ *
18
+ * assert.deepStrictEqual(Optional.orElse(preferred, fallback), preferred);
19
+ * assert.deepStrictEqual(Optional.orElse(noneValue, fallback), fallback);
20
+ *
21
+ * const orElseFallback = Optional.orElse(Optional.some('default'));
22
+ *
23
+ * assert.deepStrictEqual(orElseFallback(Optional.none), Optional.some('default'));
24
+ * assert.deepStrictEqual(
25
+ * orElseFallback(Optional.some('value')),
26
+ * Optional.some('value'),
27
+ * );
28
+ * ```
29
+ *
30
+ * @template O The input `UnknownOptional` type.
31
+ * @param optional The `Optional` to check.
32
+ * @param alternative The alternative `Optional` to return if the first is
33
+ * `None`.
34
+ * @returns The first `Optional` if `Some`, otherwise the alternative.
35
+ */
36
+ export function orElse<
37
+ O extends UnknownOptional,
38
+ const O2 extends UnknownOptional,
39
+ >(optional: O, alternative: O2): O | O2;
40
+
41
+ // Curried version
42
+ export function orElse<S, S2>(
43
+ alternative: Optional<S2>,
44
+ ): (optional: Optional<S>) => Optional<S> | Optional<S2>;
45
+
46
+ export function orElse<
47
+ O extends UnknownOptional,
48
+ const O2 extends UnknownOptional,
49
+ >(
50
+ ...args: readonly [optional: O, alternative: O2] | readonly [alternative: O2]
51
+ ): (O | O2) | ((optional: Optional<Unwrap<O>>) => Optional<Unwrap<O>> | O2) {
52
+ switch (args.length) {
53
+ case 2: {
54
+ const [optional, alternative] = args;
55
+ return orElseImpl(optional, alternative);
56
+ }
57
+
58
+ case 1: {
59
+ // Curried version
60
+ const [alternative] = args;
61
+ return (optional: Optional<Unwrap<O>>) =>
62
+ orElseImpl(optional, alternative);
63
+ }
64
+ }
65
+ }
66
+
67
+ const orElseImpl = <
68
+ O extends UnknownOptional,
69
+ const O2 extends UnknownOptional,
70
+ >(
71
+ optional: O,
72
+ alternative: O2,
73
+ ): O | O2 => (isNone(optional) ? alternative : optional);
@@ -0,0 +1,23 @@
1
+ import { SomeTypeTagName } from './tag.mjs';
2
+
3
+ /**
4
+ * Creates an {@link Some} containing the given value.
5
+ *
6
+ * @example
7
+ *
8
+ * ```ts
9
+ * const someValue = Optional.some({ id: 1 });
10
+ * const noneValue = Optional.none;
11
+ *
12
+ * assert.ok(Optional.isSome(someValue));
13
+ * assert.ok(Optional.isNone(noneValue));
14
+ * ```
15
+ *
16
+ * @template S The type of the value.
17
+ * @param value The value to wrap in an {@link Some}.
18
+ * @returns An {@link Some}<S> containing the value.
19
+ */
20
+ export const some = <S,>(value: S): Some<S> => ({
21
+ $$tag: SomeTypeTagName,
22
+ value,
23
+ });
@@ -0,0 +1,31 @@
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
+ * Converts an `Optional` to a nullable value.
7
+ *
8
+ * This function extracts the value from an Optional, returning `undefined`
9
+ * for empty Optionals. This is useful when interfacing with APIs or systems
10
+ * that expect nullable values rather than Optional types.
11
+ *
12
+ * Note: This returns `undefined` (not `null`) for consistency with
13
+ * JavaScript's undefined semantics and TypeScript's optional properties.
14
+ *
15
+ * @example
16
+ *
17
+ * ```ts
18
+ * const someNumber = Optional.some(42);
19
+ * const noneNumber = Optional.none as Optional<number>;
20
+ *
21
+ * assert(Optional.toNullable(someNumber) === 42);
22
+ * assert(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 = <O extends UnknownOptional>(
30
+ optional: O,
31
+ ): Unwrap<O> | undefined => (isSome(optional) ? unwrap(optional) : undefined);
@@ -0,0 +1,64 @@
1
+ import { unwrap } from './optional-unwrap.mjs';
2
+ import { type Unwrap } from './types.mjs';
3
+
4
+ /**
5
+ * Unwraps an `Optional`, returning the contained value or a default value if
6
+ * it's `None`.
7
+ *
8
+ * Supports both direct usage and curried form for functional composition.
9
+ * This is often preferred over `unwrap()` when you have a sensible fallback
10
+ * value.
11
+ *
12
+ * @example
13
+ *
14
+ * ```ts
15
+ * const withValue = Optional.some(5);
16
+ * const withoutValue = Optional.none as Optional<number>;
17
+ *
18
+ * assert(Optional.unwrapOr(withValue, 0) === 5);
19
+ * assert(Optional.unwrapOr(withoutValue, 0) === 0);
20
+ *
21
+ * const unwrapWithDefault = Optional.unwrapOr(10);
22
+ *
23
+ * assert(unwrapWithDefault(Optional.some(3)) === 3);
24
+ * assert(unwrapWithDefault(Optional.none) === 10);
25
+ * ```
26
+ *
27
+ * @template O The `UnknownOptional` type to unwrap.
28
+ * @template D The type of the default value.
29
+ * @param optional The `Optional` to unwrap.
30
+ * @param defaultValue The value to return if `optional` is `None`.
31
+ * @returns The contained value if `Some`, otherwise `defaultValue`.
32
+ */
33
+ export function unwrapOr<O extends UnknownOptional, D>(
34
+ optional: O,
35
+ defaultValue: D,
36
+ ): D | Unwrap<O>;
37
+
38
+ // Curried version
39
+ export function unwrapOr<S, D>(
40
+ defaultValue: D,
41
+ ): (optional: Optional<S>) => D | S;
42
+
43
+ export function unwrapOr<O extends UnknownOptional, D>(
44
+ ...args: readonly [optional: O, defaultValue: D] | readonly [defaultValue: D]
45
+ ): (D | Unwrap<O>) | ((optional: Optional<Unwrap<O>>) => D | Unwrap<O>) {
46
+ switch (args.length) {
47
+ case 2: {
48
+ const [optional, defaultValue] = args;
49
+ return unwrapOrImpl(optional, defaultValue);
50
+ }
51
+
52
+ case 1: {
53
+ // Curried version: first argument is default value
54
+ const [defaultValue] = args;
55
+ return (optional: Optional<Unwrap<O>>) =>
56
+ unwrapOrImpl(optional, defaultValue);
57
+ }
58
+ }
59
+ }
60
+
61
+ const unwrapOrImpl = <O extends UnknownOptional, D>(
62
+ optional: O,
63
+ defaultValue: D,
64
+ ): D | Unwrap<O> => unwrap(optional) ?? defaultValue;
@@ -0,0 +1,39 @@
1
+ import { isSome } from './optional-is-some.mjs';
2
+ import { type Unwrap } from './types.mjs';
3
+
4
+ /**
5
+ * Unwraps an `Optional`, returning the contained value. Throws an error if
6
+ * the `Optional` is `None`.
7
+ *
8
+ * This is a safer alternative to direct value access when you know the
9
+ * Optional should contain a value. Use this method when an empty Optional
10
+ * represents a programming error or unexpected condition.
11
+ *
12
+ * @example
13
+ *
14
+ * ```ts
15
+ * const present = Optional.some('available');
16
+ *
17
+ * assert(Optional.unwrapThrow(present) === 'available');
18
+ * assert.throws(
19
+ * () => Optional.unwrapThrow(Optional.none),
20
+ * /has failed because it is `None`/u,
21
+ * );
22
+ * ```
23
+ *
24
+ * @template O The `UnknownOptional` type to unwrap.
25
+ * @param optional The `Optional` to unwrap.
26
+ * @returns The contained value if `Some`.
27
+ * @throws {Error} Error with message "`unwrapThrow()` has failed because it
28
+ * is `None`" if the `Optional` is `None`.
29
+ */
30
+ export const unwrapThrow = <O extends UnknownOptional>(
31
+ optional: O,
32
+ ): Unwrap<O> => {
33
+ if (isSome(optional)) {
34
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
35
+ return optional.value as Unwrap<O>;
36
+ }
37
+
38
+ throw new Error('`unwrapThrow()` has failed because it is `None`');
39
+ };
@@ -0,0 +1,41 @@
1
+ import { isSome } from './optional-is-some.mjs';
2
+ import { type Unwrap } from './types.mjs';
3
+
4
+ /**
5
+ * Unwraps an `Optional`, returning the contained value or `undefined` if
6
+ * empty.
7
+ *
8
+ * This function provides a safe way to extract values from Optionals without
9
+ * throwing exceptions. It has overloaded behavior based on the type:
10
+ *
11
+ * - For `Some<T>`: Always returns `T` (guaranteed by type system)
12
+ * - For general `Optional<T>`: Returns `T | undefined`
13
+ *
14
+ * @example
15
+ *
16
+ * ```ts
17
+ * const someString = Optional.some('text');
18
+ * const noneString = Optional.none as Optional<string>;
19
+ *
20
+ * assert(Optional.unwrap(someString) === 'text');
21
+ * assert(Optional.unwrap(noneString) === undefined);
22
+ * ```
23
+ *
24
+ * @template O The `UnknownOptional` type to unwrap.
25
+ * @param optional The `Optional` to unwrap.
26
+ * @returns The contained value if `Some`, otherwise `undefined`.
27
+ */
28
+ export function unwrap<O extends Some<unknown>>(optional: O): Unwrap<O>;
29
+
30
+ export function unwrap<O extends UnknownOptional>(
31
+ optional: O,
32
+ ): Unwrap<O> | undefined;
33
+
34
+ export function unwrap<O extends UnknownOptional>(
35
+ optional: O,
36
+ ): Unwrap<O> | undefined {
37
+ return isSome(optional)
38
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
39
+ (optional.value as Unwrap<O>)
40
+ : undefined;
41
+ }
@@ -0,0 +1,40 @@
1
+ import { isSome } from './optional-is-some.mjs';
2
+ import { none } from './optional-none.mjs';
3
+ import { some } from './optional-some.mjs';
4
+
5
+ /**
6
+ * Combines two `Optional` values into a single `Optional` containing a tuple.
7
+ * If either `Optional` is `None`, returns `None`.
8
+ *
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * const zipped = Optional.zip(Optional.some('left'), Optional.some(1));
13
+ *
14
+ * assert.ok(Optional.isSome(zipped));
15
+ * if (Optional.isSome(zipped)) {
16
+ * const expected: readonly [string, number] = ['left', 1];
17
+ * assert.deepStrictEqual(zipped.value, expected);
18
+ * }
19
+ *
20
+ * const missing = Optional.zip(
21
+ * Optional.some('value'),
22
+ * Optional.none as Optional<number>,
23
+ * );
24
+ *
25
+ * assert.deepStrictEqual(missing, Optional.none);
26
+ * ```
27
+ *
28
+ * @template A The value type of the first `Optional`.
29
+ * @template B The value type of the second `Optional`.
30
+ * @param optionalA The first `Optional`.
31
+ * @param optionalB The second `Optional`.
32
+ * @returns An `Optional` containing a tuple of both values, or `None`.
33
+ */
34
+ export const zip = <A, const B>(
35
+ optionalA: Optional<A>,
36
+ optionalB: Optional<B>,
37
+ ): Optional<readonly [A, B]> =>
38
+ isSome(optionalA) && isSome(optionalB)
39
+ ? some([optionalA.value, optionalB.value] as const)
40
+ : none;
@@ -0,0 +1,6 @@
1
+ /** @internal String literal tag to identify the 'Some' variant of Optional. */
2
+ export const SomeTypeTagName: Some<unknown>['$$tag'] =
3
+ 'ts-data-forge::Optional.some';
4
+
5
+ /** @internal String literal tag to identify the 'None' variant of Optional. */
6
+ export const NoneTypeTagName: None['$$tag'] = 'ts-data-forge::Optional.none';
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Extracts the value type `S` from an {@link Some}<S>. If the
3
+ * {@link Optional} is {@link None}, resolves to `never`.
4
+ *
5
+ * @template O The {@link UnknownOptional} type to unwrap.
6
+ */
7
+ export type Unwrap<O extends UnknownOptional> =
8
+ O extends Some<infer S> ? S : never;
9
+
10
+ /**
11
+ * Narrows an {@link UnknownOptional} type to {@link Some}<S> if it is a
12
+ * {@link Some}. If the {@link Optional} is {@link None}, resolves to `never`.
13
+ *
14
+ * @template O The {@link UnknownOptional} type to narrow.
15
+ */
16
+ export type NarrowToSome<O extends UnknownOptional> = O extends None
17
+ ? never
18
+ : O;
19
+
20
+ /**
21
+ * Narrows an {@link UnknownOptional} type to {@link None} if it is a
22
+ * {@link None}. If the {@link Optional} is {@link Some}<S>, resolves to never.
23
+ *
24
+ * @template O The {@link UnknownOptional} type to narrow.
25
+ */
26
+ export type NarrowToNone<O extends UnknownOptional> = O extends None
27
+ ? O
28
+ : never;
@@ -0,0 +1 @@
1
+ export * as Optional from './impl/index.mjs';