ts-data-forge 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/README.md +45 -21
  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 +61 -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 +214 -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 +160 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +179 -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 +331 -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 -253
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +33 -164
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -163
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +74 -94
  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 -135
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +55 -156
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -154
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +54 -203
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +3 -0
  83. package/dist/entry-point.d.mts.map +1 -0
  84. package/dist/entry-point.mjs +62 -0
  85. package/dist/entry-point.mjs.map +1 -0
  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/match.d.mts +35 -140
  91. package/dist/functional/match.d.mts.map +1 -1
  92. package/dist/functional/match.mjs.map +1 -1
  93. package/dist/functional/optional.d.mts +282 -160
  94. package/dist/functional/optional.d.mts.map +1 -1
  95. package/dist/functional/optional.mjs +131 -71
  96. package/dist/functional/optional.mjs.map +1 -1
  97. package/dist/functional/pipe.d.mts +59 -113
  98. package/dist/functional/pipe.d.mts.map +1 -1
  99. package/dist/functional/pipe.mjs.map +1 -1
  100. package/dist/functional/result.d.mts +433 -332
  101. package/dist/functional/result.d.mts.map +1 -1
  102. package/dist/functional/result.mjs +233 -239
  103. package/dist/functional/result.mjs.map +1 -1
  104. package/dist/globals.d.mts +12 -5
  105. package/dist/guard/has-key.d.mts +23 -74
  106. package/dist/guard/has-key.d.mts.map +1 -1
  107. package/dist/guard/has-key.mjs +23 -74
  108. package/dist/guard/has-key.mjs.map +1 -1
  109. package/dist/guard/is-non-empty-string.d.mts +20 -87
  110. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  111. package/dist/guard/is-non-empty-string.mjs +20 -87
  112. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  113. package/dist/guard/is-non-null-object.d.mts +14 -84
  114. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  115. package/dist/guard/is-non-null-object.mjs +14 -84
  116. package/dist/guard/is-non-null-object.mjs.map +1 -1
  117. package/dist/guard/is-primitive.d.mts +13 -126
  118. package/dist/guard/is-primitive.d.mts.map +1 -1
  119. package/dist/guard/is-primitive.mjs +13 -126
  120. package/dist/guard/is-primitive.mjs.map +1 -1
  121. package/dist/guard/is-record.d.mts +21 -132
  122. package/dist/guard/is-record.d.mts.map +1 -1
  123. package/dist/guard/is-record.mjs +21 -132
  124. package/dist/guard/is-record.mjs.map +1 -1
  125. package/dist/guard/is-type.d.mts +201 -238
  126. package/dist/guard/is-type.d.mts.map +1 -1
  127. package/dist/guard/is-type.mjs +201 -238
  128. package/dist/guard/is-type.mjs.map +1 -1
  129. package/dist/guard/key-is-in.d.mts +22 -139
  130. package/dist/guard/key-is-in.d.mts.map +1 -1
  131. package/dist/guard/key-is-in.mjs +22 -139
  132. package/dist/guard/key-is-in.mjs.map +1 -1
  133. package/dist/index.d.mts +0 -1
  134. package/dist/index.d.mts.map +1 -1
  135. package/dist/index.mjs +0 -1
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/iterator/range.d.mts +29 -62
  138. package/dist/iterator/range.d.mts.map +1 -1
  139. package/dist/iterator/range.mjs.map +1 -1
  140. package/dist/json/json.d.mts +191 -121
  141. package/dist/json/json.d.mts.map +1 -1
  142. package/dist/json/json.mjs +238 -136
  143. package/dist/json/json.mjs.map +1 -1
  144. package/dist/number/branded-types/finite-number.d.mts +24 -156
  145. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  146. package/dist/number/branded-types/finite-number.mjs +27 -159
  147. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  148. package/dist/number/branded-types/int.d.mts +122 -120
  149. package/dist/number/branded-types/int.d.mts.map +1 -1
  150. package/dist/number/branded-types/int.mjs +122 -120
  151. package/dist/number/branded-types/int.mjs.map +1 -1
  152. package/dist/number/branded-types/int16.d.mts +22 -30
  153. package/dist/number/branded-types/int16.d.mts.map +1 -1
  154. package/dist/number/branded-types/int16.mjs +22 -30
  155. package/dist/number/branded-types/int16.mjs.map +1 -1
  156. package/dist/number/branded-types/int32.d.mts +22 -31
  157. package/dist/number/branded-types/int32.d.mts.map +1 -1
  158. package/dist/number/branded-types/int32.mjs +22 -31
  159. package/dist/number/branded-types/int32.mjs.map +1 -1
  160. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  161. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  162. package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
  163. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  164. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  165. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  166. package/dist/number/branded-types/non-negative-int16.mjs +24 -34
  167. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  168. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  169. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  170. package/dist/number/branded-types/non-negative-int32.mjs +26 -35
  171. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  172. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  173. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  174. package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
  175. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  176. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  177. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  178. package/dist/number/branded-types/non-zero-int.mjs +15 -30
  179. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  180. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  181. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  182. package/dist/number/branded-types/non-zero-int16.mjs +27 -35
  183. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  184. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  185. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  186. package/dist/number/branded-types/non-zero-int32.mjs +29 -36
  187. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  188. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  189. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  190. package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
  191. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  192. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  193. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  194. package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
  195. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  196. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  197. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  198. package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
  199. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  200. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  201. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  202. package/dist/number/branded-types/positive-finite-number.mjs +29 -43
  203. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  204. package/dist/number/branded-types/positive-int.d.mts +133 -123
  205. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  206. package/dist/number/branded-types/positive-int.mjs +133 -123
  207. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  208. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  209. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  210. package/dist/number/branded-types/positive-int16.mjs +24 -35
  211. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  212. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  213. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  214. package/dist/number/branded-types/positive-int32.mjs +24 -35
  215. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  216. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  217. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  218. package/dist/number/branded-types/positive-safe-int.mjs +160 -34
  219. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  220. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  221. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  222. package/dist/number/branded-types/positive-uint16.mjs +24 -35
  223. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  224. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  225. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  226. package/dist/number/branded-types/positive-uint32.mjs +26 -36
  227. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  228. package/dist/number/branded-types/safe-int.d.mts +140 -99
  229. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  230. package/dist/number/branded-types/safe-int.mjs +142 -101
  231. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  232. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  233. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  234. package/dist/number/branded-types/safe-uint.mjs +25 -34
  235. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  236. package/dist/number/branded-types/uint.d.mts +121 -30
  237. package/dist/number/branded-types/uint.d.mts.map +1 -1
  238. package/dist/number/branded-types/uint.mjs +121 -30
  239. package/dist/number/branded-types/uint.mjs.map +1 -1
  240. package/dist/number/branded-types/uint16.d.mts +26 -34
  241. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  242. package/dist/number/branded-types/uint16.mjs +26 -34
  243. package/dist/number/branded-types/uint16.mjs.map +1 -1
  244. package/dist/number/branded-types/uint32.d.mts +26 -68
  245. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  246. package/dist/number/branded-types/uint32.mjs +26 -68
  247. package/dist/number/branded-types/uint32.mjs.map +1 -1
  248. package/dist/number/enum/int8.d.mts +37 -101
  249. package/dist/number/enum/int8.d.mts.map +1 -1
  250. package/dist/number/enum/int8.mjs +39 -170
  251. package/dist/number/enum/int8.mjs.map +1 -1
  252. package/dist/number/enum/uint8.d.mts +45 -55
  253. package/dist/number/enum/uint8.d.mts.map +1 -1
  254. package/dist/number/enum/uint8.mjs +46 -155
  255. package/dist/number/enum/uint8.mjs.map +1 -1
  256. package/dist/number/num.d.mts +145 -206
  257. package/dist/number/num.d.mts.map +1 -1
  258. package/dist/number/num.mjs +143 -199
  259. package/dist/number/num.mjs.map +1 -1
  260. package/dist/number/refined-number-utils.d.mts +97 -21
  261. package/dist/number/refined-number-utils.d.mts.map +1 -1
  262. package/dist/number/refined-number-utils.mjs +91 -20
  263. package/dist/number/refined-number-utils.mjs.map +1 -1
  264. package/dist/object/object.d.mts +126 -208
  265. package/dist/object/object.d.mts.map +1 -1
  266. package/dist/object/object.mjs +68 -102
  267. package/dist/object/object.mjs.map +1 -1
  268. package/dist/others/cast-mutable.d.mts +12 -88
  269. package/dist/others/cast-mutable.d.mts.map +1 -1
  270. package/dist/others/cast-mutable.mjs +13 -89
  271. package/dist/others/cast-mutable.mjs.map +1 -1
  272. package/dist/others/cast-readonly.d.mts +12 -168
  273. package/dist/others/cast-readonly.d.mts.map +1 -1
  274. package/dist/others/cast-readonly.mjs +13 -169
  275. package/dist/others/cast-readonly.mjs.map +1 -1
  276. package/dist/others/if-then.d.mts +6 -83
  277. package/dist/others/if-then.d.mts.map +1 -1
  278. package/dist/others/if-then.mjs +6 -83
  279. package/dist/others/if-then.mjs.map +1 -1
  280. package/dist/others/map-nullable.d.mts +12 -136
  281. package/dist/others/map-nullable.d.mts.map +1 -1
  282. package/dist/others/map-nullable.mjs.map +1 -1
  283. package/dist/others/memoize-function.d.mts +14 -157
  284. package/dist/others/memoize-function.d.mts.map +1 -1
  285. package/dist/others/memoize-function.mjs +14 -157
  286. package/dist/others/memoize-function.mjs.map +1 -1
  287. package/dist/others/tuple.d.mts +33 -151
  288. package/dist/others/tuple.d.mts.map +1 -1
  289. package/dist/others/tuple.mjs +33 -151
  290. package/dist/others/tuple.mjs.map +1 -1
  291. package/dist/others/unknown-to-string.d.mts +11 -125
  292. package/dist/others/unknown-to-string.d.mts.map +1 -1
  293. package/dist/others/unknown-to-string.mjs +14 -127
  294. package/dist/others/unknown-to-string.mjs.map +1 -1
  295. package/dist/promise/promise.d.mts +33 -20
  296. package/dist/promise/promise.d.mts.map +1 -1
  297. package/dist/promise/promise.mjs +34 -21
  298. package/dist/promise/promise.mjs.map +1 -1
  299. package/dist/types.d.mts +1 -1
  300. package/package.json +54 -50
  301. package/src/array/impl/array-utils-creation.mts +192 -0
  302. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  303. package/src/array/impl/array-utils-element-access.mts +115 -0
  304. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  305. package/src/array/impl/array-utils-iterators.mts +79 -0
  306. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  307. package/src/array/impl/array-utils-modification.mts +434 -0
  308. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  309. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  310. package/src/array/impl/array-utils-reducing-value.mts +551 -0
  311. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
  312. package/src/array/impl/array-utils-search.mts +509 -0
  313. package/src/array/impl/array-utils-search.test.mts +346 -0
  314. package/src/array/impl/array-utils-set-op.mts +166 -0
  315. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  316. package/src/array/impl/array-utils-size.mts +30 -0
  317. package/src/array/impl/array-utils-size.test.mts +9 -0
  318. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  319. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
  320. package/src/array/impl/array-utils-slicing.mts +275 -0
  321. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  322. package/src/array/impl/array-utils-transformation.mts +746 -0
  323. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  324. package/src/array/impl/array-utils-validation.mts +241 -0
  325. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  326. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  327. package/src/array/impl/index.mts +12 -0
  328. package/src/array/index.mts +1 -1
  329. package/src/collections/imap-mapped.mts +99 -265
  330. package/src/collections/imap.mts +477 -174
  331. package/src/collections/imap.test.mts +12 -19
  332. package/src/collections/iset-mapped.mts +892 -358
  333. package/src/collections/iset.mts +429 -213
  334. package/src/collections/queue.mts +174 -200
  335. package/src/collections/stack.mts +172 -245
  336. package/src/collections/stack.test.mts +9 -1
  337. package/src/entry-point.mts +2 -0
  338. package/src/expect-type.mts +43 -172
  339. package/src/functional/match.mts +35 -145
  340. package/src/functional/optional.mts +285 -163
  341. package/src/functional/optional.test.mts +4 -1
  342. package/src/functional/pipe.mts +60 -113
  343. package/src/functional/result.mts +452 -351
  344. package/src/functional/result.test.mts +9 -2
  345. package/src/globals.d.mts +12 -5
  346. package/src/guard/has-key.mts +23 -74
  347. package/src/guard/is-non-empty-string.mts +20 -87
  348. package/src/guard/is-non-null-object.mts +14 -84
  349. package/src/guard/is-non-null-object.test.mts +1 -1
  350. package/src/guard/is-primitive.mts +13 -126
  351. package/src/guard/is-primitive.test.mts +1 -1
  352. package/src/guard/is-record.mts +21 -132
  353. package/src/guard/is-record.test.mts +0 -1
  354. package/src/guard/is-type.mts +201 -238
  355. package/src/guard/is-type.test.mts +7 -7
  356. package/src/guard/key-is-in.mts +22 -139
  357. package/src/index.mts +0 -1
  358. package/src/iterator/range.mts +29 -62
  359. package/src/json/json.mts +202 -134
  360. package/src/json/json.test.mts +1 -3
  361. package/src/number/branded-types/finite-number.mts +27 -159
  362. package/src/number/branded-types/int.mts +122 -120
  363. package/src/number/branded-types/int16.mts +22 -30
  364. package/src/number/branded-types/int16.test.mts +24 -24
  365. package/src/number/branded-types/int32.mts +22 -31
  366. package/src/number/branded-types/int32.test.mts +39 -39
  367. package/src/number/branded-types/non-negative-finite-number.mts +31 -39
  368. package/src/number/branded-types/non-negative-int16.mts +24 -34
  369. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  370. package/src/number/branded-types/non-negative-int32.mts +26 -35
  371. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  372. package/src/number/branded-types/non-zero-finite-number.mts +25 -40
  373. package/src/number/branded-types/non-zero-int.mts +15 -30
  374. package/src/number/branded-types/non-zero-int16.mts +27 -35
  375. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  376. package/src/number/branded-types/non-zero-int32.mts +29 -36
  377. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  378. package/src/number/branded-types/non-zero-safe-int.mts +39 -40
  379. package/src/number/branded-types/non-zero-uint16.mts +24 -35
  380. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  381. package/src/number/branded-types/non-zero-uint32.mts +24 -35
  382. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  383. package/src/number/branded-types/positive-finite-number.mts +29 -43
  384. package/src/number/branded-types/positive-int.mts +134 -124
  385. package/src/number/branded-types/positive-int16.mts +24 -35
  386. package/src/number/branded-types/positive-int16.test.mts +14 -14
  387. package/src/number/branded-types/positive-int32.mts +24 -35
  388. package/src/number/branded-types/positive-int32.test.mts +26 -26
  389. package/src/number/branded-types/positive-safe-int.mts +160 -34
  390. package/src/number/branded-types/positive-uint16.mts +24 -35
  391. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  392. package/src/number/branded-types/positive-uint32.mts +26 -36
  393. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  394. package/src/number/branded-types/safe-int.mts +142 -101
  395. package/src/number/branded-types/safe-uint.mts +25 -34
  396. package/src/number/branded-types/uint.mts +121 -30
  397. package/src/number/branded-types/uint16.mts +26 -34
  398. package/src/number/branded-types/uint16.test.mts +16 -16
  399. package/src/number/branded-types/uint32.mts +26 -68
  400. package/src/number/branded-types/uint32.test.mts +28 -28
  401. package/src/number/enum/int8.mts +39 -170
  402. package/src/number/enum/uint8.mts +46 -155
  403. package/src/number/num.mts +157 -212
  404. package/src/number/num.test.mts +4 -4
  405. package/src/number/refined-number-utils.mts +109 -26
  406. package/src/object/object.mts +130 -212
  407. package/src/object/object.test.mts +29 -0
  408. package/src/others/cast-mutable.mts +13 -89
  409. package/src/others/cast-mutable.test.mts +80 -0
  410. package/src/others/cast-readonly.mts +13 -169
  411. package/src/others/if-then.mts +6 -83
  412. package/src/others/map-nullable.mts +12 -136
  413. package/src/others/map-nullable.test.mts +6 -6
  414. package/src/others/memoize-function.mts +14 -157
  415. package/src/others/tuple.mts +33 -151
  416. package/src/others/unknown-to-string.mts +15 -127
  417. package/src/others/unknown-to-string.test.mts +14 -2
  418. package/src/promise/promise.mts +34 -21
  419. package/src/promise/promise.test.mts +43 -0
  420. package/dist/array/array-utils.d.mts +0 -2956
  421. package/dist/array/array-utils.d.mts.map +0 -1
  422. package/dist/array/array-utils.mjs +0 -1838
  423. package/dist/array/array-utils.mjs.map +0 -1
  424. package/src/array/array-utils-search.test.mts +0 -169
  425. package/src/array/array-utils-slicing.test.mts +0 -274
  426. package/src/array/array-utils.mts +0 -4834
@@ -7,13 +7,26 @@ const OkTypeTagName = 'ts-data-forge::Result.ok';
7
7
  /** @internal String literal tag to identify the 'Err' variant of Result. */
8
8
  const ErrTypeTagName = 'ts-data-forge::Result.err';
9
9
  /**
10
- * Namespace for the `Result` type and related functions.
11
- * Provides utilities to handle operations that can succeed or fail.
10
+ * Namespace for the `Result` type and related functions. Provides utilities to
11
+ * handle operations that can succeed or fail.
12
12
  */
13
13
  var Result;
14
14
  (function (Result) {
15
15
  /**
16
16
  * Checks if the given value is a `Result`.
17
+ *
18
+ * @example
19
+ *
20
+ * ```ts
21
+ * const okValue = Result.ok('success');
22
+ * const errValue = Result.err(new Error('failure'));
23
+ * const notResult = { $$tag: 'ts-data-forge::Result.ok' };
24
+ *
25
+ * assert.ok(Result.isResult(okValue));
26
+ * assert.ok(Result.isResult(errValue));
27
+ * assert.notOk(Result.isResult(notResult));
28
+ * ```
29
+ *
17
30
  * @param maybeOptional The value to check.
18
31
  * @returns `true` if the value is a `Result`, otherwise `false`.
19
32
  */
@@ -25,30 +38,25 @@ var Result;
25
38
  /**
26
39
  * Creates a `Result.Ok` containing the given success value.
27
40
  *
28
- * Use this constructor when an operation succeeds and you want to wrap
29
- * the successful result in a Result type for consistent error handling.
41
+ * Use this constructor when an operation succeeds and you want to wrap the
42
+ * successful result in a Result type for consistent error handling.
30
43
  *
31
- * @template S The type of the success value.
32
- * @param value The success value.
33
- * @returns A `Result.Ok<S>` containing the value.
34
44
  * @example
35
- * ```typescript
36
- * // Basic success case
37
- * const success = Result.ok(42);
38
- * console.log(Result.isOk(success)); // true
39
- * console.log(Result.unwrapOk(success)); // 42
40
- *
41
- * // Function that returns a Result
42
- * function divide(a: number, b: number): Result<number, string> {
43
- * if (b === 0) {
44
- * return Result.err("Division by zero");
45
- * }
46
- * return Result.ok(a / b);
47
- * }
48
45
  *
49
- * const result = divide(10, 2);
50
- * console.log(Result.unwrapOk(result)); // 5
46
+ * ```ts
47
+ * const success = Result.ok({ id: 1 });
48
+ * const failure = Result.err(new Error('missing data'));
49
+ *
50
+ * assert.deepStrictEqual(success, {
51
+ * $$tag: 'ts-data-forge::Result.ok',
52
+ * value: { id: 1 },
53
+ * });
54
+ * assert.ok(Result.isErr(failure));
51
55
  * ```
56
+ *
57
+ * @template S The type of the success value.
58
+ * @param value The success value.
59
+ * @returns A `Result.Ok<S>` containing the value.
52
60
  */
53
61
  Result.ok = (value) => ({
54
62
  $$tag: OkTypeTagName,
@@ -57,42 +65,25 @@ var Result;
57
65
  /**
58
66
  * Creates a `Result.Err` containing the given error value.
59
67
  *
60
- * Use this constructor when an operation fails and you want to wrap
61
- * the error information in a Result type for consistent error handling.
68
+ * Use this constructor when an operation fails and you want to wrap the error
69
+ * information in a Result type for consistent error handling.
62
70
  *
63
- * @template E The type of the error value.
64
- * @param value The error value.
65
- * @returns A `Result.Err<E>` containing the value.
66
71
  * @example
67
- * ```typescript
68
- * // Basic error case
69
- * const failure = Result.err("Something went wrong");
70
- * console.log(Result.isErr(failure)); // true
71
- * console.log(Result.unwrapErr(failure)); // "Something went wrong"
72
- *
73
- * // Function that can fail
74
- * function parseInteger(input: string): Result<number, string> {
75
- * const num = parseInt(input, 10);
76
- * if (isNaN(num)) {
77
- * return Result.err(`Invalid number format: ${input}`);
78
- * }
79
- * return Result.ok(num);
80
- * }
81
72
  *
82
- * const result = parseInteger("abc");
83
- * console.log(Result.unwrapErr(result)); // "Invalid number format: abc"
73
+ * ```ts
74
+ * const success = Result.ok({ id: 1 });
75
+ * const failure = Result.err(new Error('missing data'));
84
76
  *
85
- * // Using custom error types
86
- * interface ValidationError {
87
- * field: string;
88
- * message: string;
89
- * }
90
- *
91
- * const validationError = Result.err<ValidationError>({
92
- * field: "email",
93
- * message: "Invalid email format"
77
+ * assert.deepStrictEqual(success, {
78
+ * $$tag: 'ts-data-forge::Result.ok',
79
+ * value: { id: 1 },
94
80
  * });
81
+ * assert.ok(Result.isErr(failure));
95
82
  * ```
83
+ *
84
+ * @template E The type of the error value.
85
+ * @param value The error value.
86
+ * @returns A `Result.Err<E>` containing the value.
96
87
  */
97
88
  Result.err = (value) => ({
98
89
  $$tag: ErrTypeTagName,
@@ -104,128 +95,98 @@ var Result;
104
95
  */
105
96
  const toStr_ = String;
106
97
  /**
107
- * Checks if a `Result` is `Result.Ok`.
108
- * Acts as a type guard, narrowing the type to the success variant.
98
+ * Checks if a `Result` is `Result.Ok`. Acts as a type guard, narrowing the
99
+ * type to the success variant.
109
100
  *
110
101
  * This function is essential for type-safe Result handling, allowing
111
- * TypeScript to understand that subsequent operations will work with
112
- * the success value rather than the error value.
102
+ * TypeScript to understand that subsequent operations will work with the
103
+ * success value rather than the error value.
113
104
  *
114
- * @template R The `Result.Base` type to check.
115
- * @param result The `Result` to check.
116
- * @returns `true` if the `Result` is `Result.Ok`, otherwise `false`.
117
105
  * @example
118
- * ```typescript
119
- * // Basic type guard usage
120
- * const result: Result<number, string> = divide(10, 2);
121
- *
122
- * if (Result.isOk(result)) {
123
- * // TypeScript knows result is Result.Ok<number>
124
- * console.log(result.value); // Safe to access .value
125
- * console.log(Result.unwrapOk(result)); // 5
126
- * } else {
127
- * // TypeScript knows result is Result.Err<string>
128
- * console.log(result.value); // Error message
106
+ *
107
+ * ```ts
108
+ * const operation = Result.ok(3);
109
+ * const failure = Result.err('error');
110
+ *
111
+ * if (Result.isOk(operation)) {
112
+ * const value: number = operation.value;
113
+ * assert(value === 3);
129
114
  * }
130
115
  *
131
- * // Using in conditional logic
132
- * const processResult = (r: Result<string, Error>) => {
133
- * return Result.isOk(r)
134
- * ? r.value.toUpperCase() // Safe string operations
135
- * : "Error occurred";
136
- * };
137
- *
138
- * // Filtering arrays of Results
139
- * const results: Result<number, string>[] = [
140
- * Result.ok(1),
141
- * Result.err("error"),
142
- * Result.ok(2)
143
- * ];
144
- * const successes = results.filter(Result.isOk);
145
- * // successes is Result.Ok<number>[]
116
+ * assert.ok(Result.isErr(failure));
146
117
  * ```
118
+ *
119
+ * @template R The `Result.Base` type to check.
120
+ * @param result The `Result` to check.
121
+ * @returns `true` if the `Result` is `Result.Ok`, otherwise `false`.
147
122
  */
148
123
  Result.isOk = (result) => result.$$tag === OkTypeTagName;
149
124
  /**
150
- * Checks if a `Result` is `Result.Err`.
151
- * Acts as a type guard, narrowing the type to the error variant.
125
+ * Checks if a `Result` is `Result.Err`. Acts as a type guard, narrowing the
126
+ * type to the error variant.
152
127
  *
153
128
  * This function is essential for type-safe Result handling, allowing
154
- * TypeScript to understand that subsequent operations will work with
155
- * the error value rather than the success value.
129
+ * TypeScript to understand that subsequent operations will work with the
130
+ * error value rather than the success value.
156
131
  *
157
- * @template R The `Result.Base` type to check.
158
- * @param result The `Result` to check.
159
- * @returns `true` if the `Result` is `Result.Err`, otherwise `false`.
160
132
  * @example
161
- * ```typescript
162
- * // Basic type guard usage
163
- * const result: Result<number, string> = divide(10, 0);
164
- *
165
- * if (Result.isErr(result)) {
166
- * // TypeScript knows result is Result.Err<string>
167
- * console.log(result.value); // Safe to access error .value
168
- * console.log(Result.unwrapErr(result)); // "Division by zero"
169
- * } else {
170
- * // TypeScript knows result is Result.Ok<number>
171
- * console.log(result.value); // Success value
133
+ *
134
+ * ```ts
135
+ * const operation = Result.ok(3);
136
+ * const failure = Result.err('error');
137
+ *
138
+ * if (Result.isOk(operation)) {
139
+ * const value: number = operation.value;
140
+ * assert(value === 3);
172
141
  * }
173
142
  *
174
- * // Error handling patterns
175
- * const handleResult = (r: Result<Data, ApiError>) => {
176
- * if (Result.isErr(r)) {
177
- * logError(r.value); // Safe error operations
178
- * return null;
179
- * }
180
- * return processData(r.value);
181
- * };
182
- *
183
- * // Collecting errors from multiple Results
184
- * const results: Result<string, ValidationError>[] = validateForm();
185
- * const errors = results
186
- * .filter(Result.isErr)
187
- * .map(err => err.value); // ValidationError[]
143
+ * assert.ok(Result.isErr(failure));
188
144
  * ```
145
+ *
146
+ * @template R The `Result.Base` type to check.
147
+ * @param result The `Result` to check.
148
+ * @returns `true` if the `Result` is `Result.Err`, otherwise `false`.
189
149
  */
190
150
  Result.isErr = (result) => result.$$tag === ErrTypeTagName;
191
151
  /**
192
- * Unwraps a `Result`, returning the success value.
193
- * Throws an error if the `Result` is `Result.Err`.
152
+ * Unwraps a `Result`, returning the success value. Throws an error if the
153
+ * `Result` is `Result.Err`.
194
154
  *
195
- * This is useful when you're confident that a Result should contain a success value
196
- * and want to treat errors as exceptional conditions. The error message will be
197
- * constructed from the error value using the provided string conversion function.
155
+ * This is useful when you're confident that a Result should contain a success
156
+ * value and want to treat errors as exceptional conditions. The error message
157
+ * will be constructed from the error value using the provided string
158
+ * conversion function.
159
+ *
160
+ * @example
161
+ *
162
+ * ```ts
163
+ * const okResult = Result.ok('data');
164
+ * const errResult = Result.err(new Error('fail'));
165
+ *
166
+ * assert(Result.unwrapThrow(okResult) === 'data');
167
+ * assert.throws(() => Result.unwrapThrow(errResult), /fail/u);
168
+ * ```
198
169
  *
199
170
  * @template R The `Result.Base` type to unwrap.
200
171
  * @param result The `Result` to unwrap.
201
- * @param toStr An optional function to convert the error value to a string for the error message. Defaults to `String`.
172
+ * @param toStr An optional function to convert the error value to a string
173
+ * for the error message. Defaults to `String`.
202
174
  * @returns The success value if `Result.Ok`.
203
- * @throws {Error} Error with the stringified error value if the `Result` is `Result.Err`.
204
- * @example
205
- * ```typescript
206
- * const success = Result.ok(42);
207
- * console.log(Result.unwrapThrow(success)); // 42
208
- *
209
- * const failure = Result.err("Network error");
210
- * try {
211
- * Result.unwrapThrow(failure); // throws Error: "Network error"
212
- * } catch (error) {
213
- * console.log(error.message); // "Network error"
214
- * }
215
- * ```
175
+ * @throws {Error} Error with the stringified error value if the `Result` is
176
+ * `Result.Err`.
216
177
  */
217
178
  Result.unwrapThrow = (result, toStr = toStr_) => {
218
179
  if (Result.isErr(result)) {
219
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
180
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
220
181
  throw new Error(toStr(result.value));
221
182
  }
222
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
183
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
223
184
  return result.value;
224
185
  };
225
186
  function unwrapOk(result) {
226
187
  return Result.isErr(result)
227
188
  ? undefined
228
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
189
+ : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
229
190
  result.value;
230
191
  }
231
192
  Result.unwrapOk = unwrapOk;
@@ -234,7 +195,7 @@ var Result;
234
195
  case 2: {
235
196
  // Direct version: first argument is result
236
197
  const [result, defaultValue] = args;
237
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
198
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
238
199
  return Result.isErr(result) ? defaultValue : result.value;
239
200
  }
240
201
  case 1: {
@@ -246,68 +207,77 @@ var Result;
246
207
  }
247
208
  Result.unwrapOkOr = unwrapOkOr;
248
209
  /**
249
- * Unwraps a `Result`, returning the error value.
250
- * Throws an error if the `Result` is `Result.Ok`.
210
+ * Unwraps a `Result`, returning the error value. Throws an error if the
211
+ * `Result` is `Result.Ok`.
251
212
  *
252
213
  * This function is used when you expect a Result to be an error and want to
253
- * extract the error value. If the Result is unexpectedly Ok, it will throw
254
- * an error with information about the unexpected success value.
214
+ * extract the error value. If the Result is unexpectedly Ok, it will throw an
215
+ * error with information about the unexpected success value.
216
+ *
217
+ * @example
218
+ *
219
+ * ```ts
220
+ * const errResult = Result.err(new Error('broken'));
221
+ * const okResult = Result.ok('value');
222
+ *
223
+ * assert(Result.unwrapErrThrow(errResult).message === 'broken');
224
+ * assert.throws(() => Result.unwrapErrThrow(okResult), /Expected Err/u);
225
+ * ```
255
226
  *
256
227
  * @template R The `Result.Base` type to unwrap.
257
228
  * @param result The `Result` to unwrap.
258
- * @param toStr An optional function to convert the success value to a string for the error message when the Result is unexpectedly Ok. Defaults to `String`.
229
+ * @param toStr An optional function to convert the success value to a string
230
+ * for the error message when the Result is unexpectedly Ok. Defaults to
231
+ * `String`.
259
232
  * @returns The error value if `Result.Err`.
260
- * @throws {Error} Error with message "Expected Err but got Ok: {value}" if the `Result` is `Result.Ok`.
261
- * @example
262
- * ```typescript
263
- * const failure = Result.err("Network timeout");
264
- * console.log(Result.unwrapErrThrow(failure)); // "Network timeout"
265
- *
266
- * const success = Result.ok(42);
267
- * try {
268
- * Result.unwrapErrThrow(success); // throws Error: "Expected Err but got Ok: 42"
269
- * } catch (error) {
270
- * console.log(error.message); // "Expected Err but got Ok: 42"
271
- * }
272
- * ```
233
+ * @throws {Error} Error with message "Expected Err but got Ok: {value}" if
234
+ * the `Result` is `Result.Ok`.
273
235
  */
274
236
  Result.unwrapErrThrow = (result, toStr = toStr_) => {
275
237
  if (Result.isOk(result)) {
276
238
  throw new Error(
277
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
239
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
278
240
  `Expected Err but got Ok: ${toStr(result.value)}`);
279
241
  }
280
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
242
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
281
243
  return result.value;
282
244
  };
283
245
  /**
284
- * Unwraps a `Result`, returning the error value or `undefined` if it is `Result.Ok`.
246
+ * Unwraps a `Result`, returning the error value or `undefined` if it is
247
+ * `Result.Ok`.
285
248
  *
286
- * This provides a safe way to extract error values from Results without throwing
287
- * exceptions. Useful for error handling patterns where you want to check for
288
- * specific error conditions.
249
+ * This provides a safe way to extract error values from Results without
250
+ * throwing exceptions. Useful for error handling patterns where you want to
251
+ * check for specific error conditions.
289
252
  *
290
- * @template R The `Result.Base` type to unwrap.
291
- * @param result The `Result` to unwrap.
292
- * @returns The error value if `Result.Err`, otherwise `undefined`.
293
253
  * @example
294
- * ```typescript
295
- * const failure = Result.err("Connection failed");
296
- * console.log(Result.unwrapErr(failure)); // "Connection failed"
297
254
  *
298
- * const success = Result.ok(42);
299
- * console.log(Result.unwrapErr(success)); // undefined
255
+ * ```ts
256
+ * const okResult = Result.ok('data');
257
+ * const errResult = Result.err('problem');
258
+ *
259
+ * // Result.unwrapErr returns undefined for Ok results
260
+ * // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
261
+ * assert(Result.unwrapErr(okResult) === undefined);
262
+ *
263
+ * // Result.unwrapErr returns the error value for Err results
264
+ *
265
+ * assert(Result.unwrapErr(errResult) === 'problem');
300
266
  * ```
267
+ *
268
+ * @template R The `Result.Base` type to unwrap.
269
+ * @param result The `Result` to unwrap.
270
+ * @returns The error value if `Result.Err`, otherwise `undefined`.
301
271
  */
302
272
  Result.unwrapErr = (result) =>
303
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
273
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
304
274
  Result.isErr(result) ? result.value : undefined;
305
275
  function unwrapErrOr(...args) {
306
276
  switch (args.length) {
307
277
  case 2: {
308
278
  // Direct version: first argument is result
309
279
  const [result, defaultValue] = args;
310
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
280
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
311
281
  return Result.isErr(result) ? result.value : defaultValue;
312
282
  }
313
283
  case 1: {
@@ -323,9 +293,9 @@ var Result;
323
293
  case 2: {
324
294
  const [result, mapFn] = args;
325
295
  return Result.isErr(result)
326
- ? // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
296
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
327
297
  result
328
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
298
+ : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
329
299
  Result.ok(mapFn(result.value));
330
300
  }
331
301
  case 1: {
@@ -341,9 +311,9 @@ var Result;
341
311
  case 2: {
342
312
  const [result, mapFn] = args;
343
313
  return Result.isOk(result)
344
- ? // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
314
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
345
315
  result
346
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
316
+ : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
347
317
  Result.err(mapFn(result.value));
348
318
  }
349
319
  case 1: {
@@ -359,9 +329,9 @@ var Result;
359
329
  case 3: {
360
330
  const [result, mapFn, mapErrFn] = args;
361
331
  return Result.isOk(result)
362
- ? // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
332
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
363
333
  Result.ok(mapFn(result.value))
364
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
334
+ : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
365
335
  Result.err(mapErrFn(result.value));
366
336
  }
367
337
  case 2: {
@@ -376,9 +346,9 @@ var Result;
376
346
  case 2: {
377
347
  const [result, flatMapFn] = args;
378
348
  return Result.isErr(result)
379
- ? // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
349
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
380
350
  result
381
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
351
+ : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
382
352
  flatMapFn(result.value);
383
353
  }
384
354
  case 1: {
@@ -407,48 +377,64 @@ var Result;
407
377
  }
408
378
  Result.expectToBe = expectToBe;
409
379
  /**
410
- * Converts a Promise into a Promise that resolves to a `Result`.
411
- * If the input Promise resolves, the `Result` will be `Ok` with the resolved value.
412
- * If the input Promise rejects, the `Result` will be `Err` with the rejection reason.
380
+ * Converts a Promise into a Promise that resolves to a `Result`. If the input
381
+ * Promise resolves, the `Result` will be `Ok` with the resolved value. If the
382
+ * input Promise rejects, the `Result` will be `Err` with the rejection
383
+ * reason.
384
+ *
385
+ * @example
386
+ *
387
+ * ```ts
388
+ * const successPromise = Result.fromPromise(Promise.resolve('ok'));
389
+ * const failurePromise = Result.fromPromise(Promise.reject(new Error('fail')));
390
+ *
391
+ * const resolved = await successPromise;
392
+ * const rejected = await failurePromise;
393
+ *
394
+ * assert.deepStrictEqual(resolved, Result.ok('ok'));
395
+ * assert.ok(Result.isErr(rejected));
396
+ * ```
397
+ *
413
398
  * @template P The type of the input Promise.
414
399
  * @param promise The Promise to convert.
415
400
  * @returns A Promise that resolves to `Result<UnwrapPromise<P>, unknown>`.
416
401
  */
417
402
  Result.fromPromise = (promise) =>
418
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
403
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
419
404
  promise.then((v) => Result.ok(v)).catch(Result.err);
420
405
  /**
421
406
  * Wraps a function that may throw an exception in a `Result`.
422
407
  *
423
- * This is a fundamental utility for converting traditional exception-based error
424
- * handling into Result-based error handling. Any thrown value is converted to an
425
- * Error object for consistent error handling.
408
+ * This is a fundamental utility for converting traditional exception-based
409
+ * error handling into Result-based error handling. Any thrown value is
410
+ * converted to an Error object for consistent error handling.
426
411
  *
427
412
  * If the function executes successfully, returns `Result.Ok` with the result.
428
413
  * If the function throws, returns `Result.Err` with the caught error.
429
414
  *
430
- * @template T The return type of the function.
431
- * @param fn The function to execute that may throw.
432
- * @returns A `Result<T, Error>` containing either the successful result or the caught error.
433
415
  * @example
434
- * ```typescript
435
- * // Wrapping JSON.parse which can throw
436
- * const parseJson = <T>(text: string): Result<T, Error> =>
437
- * Result.fromThrowable(() => JSON.parse(text) as T);
438
- *
439
- * const validJson = parseJson<{valid: boolean}>('{"valid": true}');
440
- * if (Result.isOk(validJson)) {
441
- * console.log(validJson.value.valid); // true
442
- * }
443
416
  *
417
+ * ```ts
418
+ * const success = Result.fromThrowable(() => 1 + 1);
419
+ * const failure = Result.fromThrowable(() => {
420
+ * throw new Error('boom');
421
+ * });
422
+ *
423
+ * assert.deepStrictEqual(success, Result.ok(2));
424
+ * assert.ok(Result.isErr(failure));
444
425
  * ```
426
+ *
427
+ * @template T The return type of the function.
428
+ * @param fn The function to execute that may throw.
429
+ * @returns A `Result<T, Error>` containing either the successful result or
430
+ * the caught error.
445
431
  */
446
432
  Result.fromThrowable = (fn) => {
447
433
  try {
448
434
  return Result.ok(fn());
449
435
  }
450
436
  catch (error) {
451
- if (error instanceof Error) {
437
+ if (Error.isError(error)) {
452
438
  return Result.err(error);
453
439
  }
454
440
  const msg = unknownToString(error);
@@ -457,46 +443,48 @@ var Result;
457
443
  };
458
444
  /**
459
445
  * Swaps the success and error values of a `Result`.
446
+ *
447
+ * @example
448
+ *
449
+ * ```ts
450
+ * const okValue = Result.ok('value');
451
+ * const errValue = Result.err('error');
452
+ *
453
+ * assert.deepStrictEqual(Result.swap(okValue), Result.err('value'));
454
+ * assert.deepStrictEqual(Result.swap(errValue), Result.ok('error'));
455
+ * ```
456
+ *
460
457
  * @template R The input `Result.Base` type.
461
458
  * @param result The `Result` to swap.
462
459
  * @returns A new `Result` with success and error swapped.
463
- * @example
464
- * ```typescript
465
- * const okResult = Result.ok(42);
466
- * const swapped = Result.swap(okResult);
467
- * console.log(Result.isErr(swapped)); // true
468
- * console.log(Result.unwrapErr(swapped)); // 42
469
- * ```
470
460
  */
471
461
  Result.swap = (result) =>
472
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
462
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
473
463
  Result.isOk(result) ? Result.err(unwrapOk(result)) : Result.ok(result.value);
474
464
  /**
475
465
  * Converts a `Result` to an `Optional`.
476
466
  *
477
- * This conversion is useful when you want to discard error information and only
478
- * care about whether an operation succeeded. The error information is lost in
479
- * this conversion, so use it when error details are not needed.
467
+ * This conversion is useful when you want to discard error information and
468
+ * only care about whether an operation succeeded. The error information is
469
+ * lost in this conversion, so use it when error details are not needed.
480
470
  *
481
- * If the `Result` is `Ok`, returns `Some` with the value.
482
- * If the `Result` is `Err`, returns `None`.
471
+ * If the `Result` is `Ok`, returns `Some` with the value. If the `Result` is
472
+ * `Err`, returns `None`.
483
473
  *
484
- * @template R The input `Result.Base` type.
485
- * @param result The `Result` to convert.
486
- * @returns An `Optional<UnwrapOk<R>>` containing the success value or representing `None`.
487
474
  * @example
488
- * ```typescript
489
- * // Basic conversion
490
- * const okResult = Result.ok(42);
491
- * const optional = Result.toOptional(okResult);
492
- * console.log(Optional.isSome(optional)); // true
493
- * console.log(Optional.unwrap(optional)); // 42
494
475
  *
495
- * const errResult = Result.err("Network error");
496
- * const none = Result.toOptional(errResult);
497
- * console.log(Optional.isNone(none)); // true
476
+ * ```ts
477
+ * const okValue = Result.ok(7);
478
+ * const errValue = Result.err('fail');
498
479
  *
480
+ * assert.deepStrictEqual(Result.toOptional(okValue), Optional.some(7));
481
+ * assert.deepStrictEqual(Result.toOptional(errValue), Optional.none);
499
482
  * ```
483
+ *
484
+ * @template R The input `Result.Base` type.
485
+ * @param result The `Result` to convert.
486
+ * @returns An `Optional<UnwrapOk<R>>` containing the success value or
487
+ * representing `None`.
500
488
  */
501
489
  Result.toOptional = (result) => Result.isOk(result) ? Optional.some(unwrapOk(result)) : Optional.none;
502
490
  function orElse(...args) {
@@ -514,8 +502,24 @@ var Result;
514
502
  }
515
503
  Result.orElse = orElse;
516
504
  /**
517
- * Combines two `Result` values into a single `Result` containing a tuple.
518
- * If either `Result` is `Err`, returns the first `Err` encountered.
505
+ * Combines two `Result` values into a single `Result` containing a tuple. If
506
+ * either `Result` is `Err`, returns the first `Err` encountered.
507
+ *
508
+ * @example
509
+ *
510
+ * ```ts
511
+ * const first = Result.ok('left');
512
+ * const second = Result.ok(1);
513
+ *
514
+ * const expected: readonly [string, number] = ['left', 1];
515
+ *
516
+ * assert.deepStrictEqual(Result.zip(first, second), Result.ok(expected));
517
+ * assert.deepStrictEqual(
518
+ * Result.zip(first, Result.err('error')),
519
+ * Result.err('error'),
520
+ * );
521
+ * ```
522
+ *
519
523
  * @template S1 The success type of the first `Result`.
520
524
  * @template E1 The error type of the first `Result`.
521
525
  * @template S2 The success type of the second `Result`.
@@ -523,16 +527,6 @@ var Result;
523
527
  * @param resultA The first `Result`.
524
528
  * @param resultB The second `Result`.
525
529
  * @returns A `Result` containing a tuple of both values, or the first `Err`.
526
- * @example
527
- * ```typescript
528
- * const a = Result.ok(1);
529
- * const b = Result.ok("hello");
530
- * const zipped = Result.zip(a, b);
531
- * console.log(Result.unwrapOk(zipped)); // [1, "hello"]
532
- *
533
- * const withErr = Result.zip(a, Result.err("error"));
534
- * console.log(Result.unwrapErr(withErr)); // "error"
535
- * ```
536
530
  */
537
531
  Result.zip = (resultA, resultB) => Result.isOk(resultA)
538
532
  ? Result.isOk(resultB)