ts-data-forge 14.6.0 → 14.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/dist/array/impl/array-utils-creation.mjs +126 -26
  2. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  3. package/dist/array/impl/array-utils-element-access.mjs +63 -30
  4. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  5. package/dist/array/impl/array-utils-iterators.mjs +69 -53
  6. package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
  7. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +109 -73
  8. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs.map +1 -1
  9. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +71 -33
  10. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -1
  11. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +102 -73
  12. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs.map +1 -1
  13. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +77 -33
  14. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs.map +1 -1
  15. package/dist/array/impl/array-utils-modification.mjs +75 -122
  16. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  17. package/dist/array/impl/array-utils-reducing-value.mjs +100 -150
  18. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-search.mjs +110 -134
  20. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  21. package/dist/array/impl/array-utils-set-op.mjs +146 -38
  22. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-size.mjs +10 -8
  24. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  25. package/dist/array/impl/array-utils-slice-clamped.mjs +13 -50
  26. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  27. package/dist/array/impl/array-utils-slicing.mjs +94 -78
  28. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  29. package/dist/array/impl/array-utils-transformation.mjs +291 -199
  30. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  31. package/dist/array/impl/array-utils-validation.mjs +54 -56
  32. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  33. package/dist/array/impl/index.mjs +17 -17
  34. package/dist/array/impl/index.mjs.map +1 -1
  35. package/dist/array/index.mjs +2 -3
  36. package/dist/array/index.mjs.map +1 -1
  37. package/dist/collections/imap-mapped.mjs +335 -291
  38. package/dist/collections/imap-mapped.mjs.map +1 -1
  39. package/dist/collections/imap.mjs +280 -239
  40. package/dist/collections/imap.mjs.map +1 -1
  41. package/dist/collections/index.mjs +7 -7
  42. package/dist/collections/index.mjs.map +1 -1
  43. package/dist/collections/iset-mapped.d.mts.map +1 -1
  44. package/dist/collections/iset-mapped.mjs +448 -263
  45. package/dist/collections/iset-mapped.mjs.map +1 -1
  46. package/dist/collections/iset.mjs +328 -201
  47. package/dist/collections/iset.mjs.map +1 -1
  48. package/dist/collections/queue.mjs +183 -151
  49. package/dist/collections/queue.mjs.map +1 -1
  50. package/dist/collections/stack.mjs +169 -140
  51. package/dist/collections/stack.mjs.map +1 -1
  52. package/dist/entry-point.mjs +4 -77
  53. package/dist/entry-point.mjs.map +1 -1
  54. package/dist/expect-type.mjs +70 -4
  55. package/dist/expect-type.mjs.map +1 -1
  56. package/dist/functional/async-result/async-result.mjs +2 -3
  57. package/dist/functional/async-result/async-result.mjs.map +1 -1
  58. package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
  59. package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
  60. package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
  61. package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
  62. package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
  63. package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
  64. package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
  65. package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
  66. package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
  67. package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
  68. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
  69. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
  70. package/dist/functional/async-result/impl/index.mjs +8 -7
  71. package/dist/functional/async-result/impl/index.mjs.map +1 -1
  72. package/dist/functional/async-result/impl/types.mjs +2 -2
  73. package/dist/functional/async-result/impl/types.mjs.map +1 -1
  74. package/dist/functional/async-result/index.mjs +2 -3
  75. package/dist/functional/async-result/index.mjs.map +1 -1
  76. package/dist/functional/index.mjs +7 -11
  77. package/dist/functional/index.mjs.map +1 -1
  78. package/dist/functional/match.mjs +27 -13
  79. package/dist/functional/match.mjs.map +1 -1
  80. package/dist/functional/optional/impl/index.mjs +19 -18
  81. package/dist/functional/optional/impl/index.mjs.map +1 -1
  82. package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
  83. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  84. package/dist/functional/optional/impl/optional-filter.mjs +17 -19
  85. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  86. package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
  87. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  88. package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
  89. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  90. package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
  91. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  92. package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
  93. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  94. package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
  95. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  96. package/dist/functional/optional/impl/optional-map.mjs +16 -18
  97. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  98. package/dist/functional/optional/impl/optional-match.mjs +16 -18
  99. package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
  100. package/dist/functional/optional/impl/optional-none.mjs +18 -5
  101. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  102. package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
  103. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  104. package/dist/functional/optional/impl/optional-some.mjs +23 -7
  105. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  106. package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
  107. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  108. package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
  109. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  110. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
  111. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  112. package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
  113. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  114. package/dist/functional/optional/impl/optional-zip.mjs +36 -5
  115. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  116. package/dist/functional/optional/impl/tag.mjs +4 -5
  117. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  118. package/dist/functional/optional/impl/types.mjs +2 -2
  119. package/dist/functional/optional/impl/types.mjs.map +1 -1
  120. package/dist/functional/optional/index.mjs +2 -3
  121. package/dist/functional/optional/index.mjs.map +1 -1
  122. package/dist/functional/optional/optional.mjs +2 -3
  123. package/dist/functional/optional/optional.mjs.map +1 -1
  124. package/dist/functional/pipe.mjs +42 -14
  125. package/dist/functional/pipe.mjs.map +1 -1
  126. package/dist/functional/result/impl/index.mjs +28 -27
  127. package/dist/functional/result/impl/index.mjs.map +1 -1
  128. package/dist/functional/result/impl/result-err.mjs +29 -7
  129. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  130. package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
  131. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  132. package/dist/functional/result/impl/result-flat-map.mjs +18 -21
  133. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  134. package/dist/functional/result/impl/result-fold.mjs +18 -21
  135. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  136. package/dist/functional/result/impl/result-from-optional.mjs +17 -20
  137. package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
  138. package/dist/functional/result/impl/result-from-promise.mjs +37 -8
  139. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  140. package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
  141. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  142. package/dist/functional/result/impl/result-is-err.mjs +21 -5
  143. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  144. package/dist/functional/result/impl/result-is-ok.mjs +21 -5
  145. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  146. package/dist/functional/result/impl/result-is-result.mjs +25 -7
  147. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  148. package/dist/functional/result/impl/result-map-err.mjs +18 -21
  149. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  150. package/dist/functional/result/impl/result-map.mjs +18 -21
  151. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  152. package/dist/functional/result/impl/result-match.mjs +17 -21
  153. package/dist/functional/result/impl/result-match.mjs.map +1 -1
  154. package/dist/functional/result/impl/result-ok.mjs +29 -7
  155. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  156. package/dist/functional/result/impl/result-or-else.mjs +14 -15
  157. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  158. package/dist/functional/result/impl/result-safe-try.mjs +32 -21
  159. package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
  160. package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
  161. package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
  162. package/dist/functional/result/impl/result-swap.mjs +23 -8
  163. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  164. package/dist/functional/result/impl/result-to-optional.mjs +30 -7
  165. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  166. package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
  167. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  168. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
  169. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  170. package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
  171. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  172. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
  173. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  174. package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
  175. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  176. package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
  177. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  178. package/dist/functional/result/impl/result-zip.mjs +35 -5
  179. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  180. package/dist/functional/result/impl/tag.mjs +4 -5
  181. package/dist/functional/result/impl/tag.mjs.map +1 -1
  182. package/dist/functional/result/impl/types.mjs +2 -2
  183. package/dist/functional/result/impl/types.mjs.map +1 -1
  184. package/dist/functional/result/index.mjs +2 -3
  185. package/dist/functional/result/index.mjs.map +1 -1
  186. package/dist/functional/result/result.mjs +2 -3
  187. package/dist/functional/result/result.mjs.map +1 -1
  188. package/dist/functional/ternary-result/impl/index.mjs +29 -28
  189. package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
  190. package/dist/functional/ternary-result/impl/tag.mjs +6 -6
  191. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  192. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
  193. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  194. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +15 -18
  195. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  196. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +28 -32
  197. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  198. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
  199. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  200. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
  201. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  202. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
  203. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  204. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
  205. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  206. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
  207. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  208. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +28 -8
  209. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  210. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +20 -5
  211. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  212. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +17 -18
  213. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  214. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +20 -23
  215. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  216. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
  217. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  218. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
  219. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  220. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
  221. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  222. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
  223. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +11 -14
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +30 -19
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +20 -8
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +11 -14
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  232. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +7 -9
  233. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  234. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
  235. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  236. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +11 -14
  237. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  238. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +27 -17
  239. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  240. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +20 -8
  241. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  242. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
  243. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  244. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
  245. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  246. package/dist/functional/ternary-result/impl/types.mjs +2 -2
  247. package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
  248. package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
  249. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  250. package/dist/functional/ternary-result/index.mjs +2 -3
  251. package/dist/functional/ternary-result/index.mjs.map +1 -1
  252. package/dist/functional/ternary-result/ternary-result.mjs +2 -3
  253. package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
  254. package/dist/guard/has-key.mjs +43 -4
  255. package/dist/guard/has-key.mjs.map +1 -1
  256. package/dist/guard/index.mjs +8 -8
  257. package/dist/guard/index.mjs.map +1 -1
  258. package/dist/guard/is-non-empty-string.mjs +39 -4
  259. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  260. package/dist/guard/is-non-null-object.mjs +36 -4
  261. package/dist/guard/is-non-null-object.mjs.map +1 -1
  262. package/dist/guard/is-primitive.mjs +46 -15
  263. package/dist/guard/is-primitive.mjs.map +1 -1
  264. package/dist/guard/is-record.mjs +89 -6
  265. package/dist/guard/is-record.mjs.map +1 -1
  266. package/dist/guard/is-type.mjs +404 -19
  267. package/dist/guard/is-type.mjs.map +1 -1
  268. package/dist/guard/key-is-in.mjs +42 -4
  269. package/dist/guard/key-is-in.mjs.map +1 -1
  270. package/dist/index.mjs +12 -65
  271. package/dist/index.mjs.map +1 -1
  272. package/dist/iterator/index.mjs +2 -2
  273. package/dist/iterator/index.mjs.map +1 -1
  274. package/dist/iterator/range.mjs +19 -57
  275. package/dist/iterator/range.mjs.map +1 -1
  276. package/dist/json/index.mjs +2 -2
  277. package/dist/json/index.mjs.map +1 -1
  278. package/dist/json/json.mjs +346 -105
  279. package/dist/json/json.mjs.map +1 -1
  280. package/dist/number/branded-types/finite-number.mjs +148 -137
  281. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  282. package/dist/number/branded-types/index.mjs +33 -33
  283. package/dist/number/branded-types/index.mjs.map +1 -1
  284. package/dist/number/branded-types/int.mjs +245 -209
  285. package/dist/number/branded-types/int.mjs.map +1 -1
  286. package/dist/number/branded-types/int16.mjs +141 -131
  287. package/dist/number/branded-types/int16.mjs.map +1 -1
  288. package/dist/number/branded-types/int32.mjs +141 -131
  289. package/dist/number/branded-types/int32.mjs.map +1 -1
  290. package/dist/number/branded-types/negative-finite-number.mjs +155 -149
  291. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  292. package/dist/number/branded-types/negative-int.mjs +125 -110
  293. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  294. package/dist/number/branded-types/negative-safe-int.mjs +126 -115
  295. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  296. package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
  297. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  298. package/dist/number/branded-types/non-negative-int16.mjs +137 -125
  299. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  300. package/dist/number/branded-types/non-negative-int32.mjs +137 -125
  301. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  302. package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
  303. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  304. package/dist/number/branded-types/non-positive-int.mjs +116 -99
  305. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  306. package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
  307. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  308. package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
  309. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  310. package/dist/number/branded-types/non-zero-int.mjs +102 -82
  311. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  312. package/dist/number/branded-types/non-zero-int16.mjs +118 -105
  313. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  314. package/dist/number/branded-types/non-zero-int32.mjs +118 -105
  315. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  316. package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
  317. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  318. package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
  319. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  320. package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
  321. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  322. package/dist/number/branded-types/positive-finite-number.mjs +167 -160
  323. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  324. package/dist/number/branded-types/positive-int.mjs +260 -224
  325. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  326. package/dist/number/branded-types/positive-int16.mjs +134 -122
  327. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  328. package/dist/number/branded-types/positive-int32.mjs +134 -122
  329. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  330. package/dist/number/branded-types/positive-safe-int.mjs +292 -258
  331. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  332. package/dist/number/branded-types/positive-uint16.mjs +134 -122
  333. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  334. package/dist/number/branded-types/positive-uint32.mjs +134 -122
  335. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  336. package/dist/number/branded-types/safe-int.mjs +284 -255
  337. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  338. package/dist/number/branded-types/safe-uint.mjs +135 -124
  339. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  340. package/dist/number/branded-types/uint.mjs +248 -211
  341. package/dist/number/branded-types/uint.mjs.map +1 -1
  342. package/dist/number/branded-types/uint16.mjs +132 -121
  343. package/dist/number/branded-types/uint16.mjs.map +1 -1
  344. package/dist/number/branded-types/uint32.mjs +132 -121
  345. package/dist/number/branded-types/uint32.mjs.map +1 -1
  346. package/dist/number/enum/index.mjs +3 -3
  347. package/dist/number/enum/index.mjs.map +1 -1
  348. package/dist/number/enum/int8.mjs +146 -131
  349. package/dist/number/enum/int8.mjs.map +1 -1
  350. package/dist/number/enum/uint8.mjs +133 -119
  351. package/dist/number/enum/uint8.mjs.map +1 -1
  352. package/dist/number/index.mjs +6 -37
  353. package/dist/number/index.mjs.map +1 -1
  354. package/dist/number/num-arithmetic-types.mjs +42 -1
  355. package/dist/number/num-arithmetic-types.mjs.map +1 -1
  356. package/dist/number/num.mjs +541 -83
  357. package/dist/number/num.mjs.map +1 -1
  358. package/dist/number/refined-number-utils.mjs +294 -133
  359. package/dist/number/refined-number-utils.mjs.map +1 -1
  360. package/dist/object/index.mjs +2 -2
  361. package/dist/object/index.mjs.map +1 -1
  362. package/dist/object/object.mjs +355 -202
  363. package/dist/object/object.mjs.map +1 -1
  364. package/dist/others/cast-mutable.mjs +38 -11
  365. package/dist/others/cast-mutable.mjs.map +1 -1
  366. package/dist/others/cast-readonly.mjs +37 -11
  367. package/dist/others/cast-readonly.mjs.map +1 -1
  368. package/dist/others/debounce-function.mjs +22 -11
  369. package/dist/others/debounce-function.mjs.map +1 -1
  370. package/dist/others/fast-deep-equal.mjs +70 -51
  371. package/dist/others/fast-deep-equal.mjs.map +1 -1
  372. package/dist/others/if-then.mjs +32 -5
  373. package/dist/others/if-then.mjs.map +1 -1
  374. package/dist/others/index.mjs +10 -10
  375. package/dist/others/index.mjs.map +1 -1
  376. package/dist/others/map-nullable.mjs +11 -13
  377. package/dist/others/map-nullable.mjs.map +1 -1
  378. package/dist/others/memoize-function.mjs +14 -16
  379. package/dist/others/memoize-function.mjs.map +1 -1
  380. package/dist/others/tuple.mjs +52 -4
  381. package/dist/others/tuple.mjs.map +1 -1
  382. package/dist/others/unknown-to-string.mjs +91 -47
  383. package/dist/others/unknown-to-string.mjs.map +1 -1
  384. package/dist/promise/index.mjs +2 -2
  385. package/dist/promise/index.mjs.map +1 -1
  386. package/dist/promise/promise.mjs +51 -10
  387. package/dist/promise/promise.mjs.map +1 -1
  388. package/dist/string/index.mjs +2 -2
  389. package/dist/string/index.mjs.map +1 -1
  390. package/dist/string/str.mjs +250 -83
  391. package/dist/string/str.mjs.map +1 -1
  392. package/dist/types.mjs +3 -2
  393. package/dist/types.mjs.map +1 -1
  394. package/package.json +5 -6
  395. package/src/array/impl/array-utils-length-constraint-preservation.test.mts +2 -2
  396. package/src/collections/imap-mapped.mts +4 -4
  397. package/src/collections/imap.mts +1 -1
  398. package/src/collections/imap.test.mts +1 -1
  399. package/src/collections/iset-mapped.mts +2 -1
  400. package/src/collections/iset.mts +1 -1
  401. package/src/functional/async-result.test.mts +3 -2
  402. package/src/functional/optional.test.mts +2 -1
  403. package/src/functional/result.test.mts +0 -2
  404. package/src/guard/is-non-empty-string.test.mts +2 -2
  405. package/src/guard/is-non-null-object.test.mts +3 -3
  406. package/src/guard/is-primitive.test.mts +3 -3
  407. package/src/guard/is-type.test.mts +3 -3
  408. package/src/json/json.test.mts +1 -1
  409. package/src/number/enum/int8.mts +1 -1
@@ -1,259 +1,288 @@
1
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
2
1
 
3
- const typeNameInMessage = "a safe integer";
4
- const {
5
- MAX_VALUE,
6
- MIN_VALUE,
7
- abs,
8
- add,
9
- castType,
10
- div,
11
- fromNumber,
12
- is,
13
- max: max_,
14
- min: min_,
15
- mul,
16
- pow,
17
- random,
18
- sub
19
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger({
20
- integerOrSafeInteger: "SafeInteger",
21
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer
22
- MIN_VALUE: Number.MIN_SAFE_INTEGER,
23
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
24
- MAX_VALUE: Number.MAX_SAFE_INTEGER,
25
- typeNameInMessage
2
+ import { TsDataForgeInternals } from '../refined-number-utils.mjs';
3
+ const typeNameInMessage = 'a safe integer';
4
+ const { MAX_VALUE, MIN_VALUE, abs, add, castType, div, fromNumber, is, max: max_, min: min_, mul, pow, random, sub, } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger({
5
+ integerOrSafeInteger: 'SafeInteger',
6
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer
7
+ MIN_VALUE: Number.MIN_SAFE_INTEGER,
8
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
9
+ MAX_VALUE: Number.MAX_SAFE_INTEGER,
10
+ typeNameInMessage,
26
11
  });
27
- const isSafeInt = is;
28
- const asSafeInt = castType;
29
- const SafeInt = {
30
- /**
31
- * Type guard that checks if a value is a safe integer.
32
- *
33
- * @example
34
- *
35
- * ```ts
36
- * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));
37
- *
38
- * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
39
- *
40
- * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));
41
- * ```
42
- *
43
- * @param value - The value to check
44
- * @returns `true` if the value is a safe integer, `false` otherwise
45
- * @see {@link isSafeInt} for usage examples
46
- */
47
- is,
48
- /**
49
- * The smallest value representable as `SafeInt` (the lower saturation target
50
- * of `fromNumber`).
51
- */
52
- MIN_VALUE,
53
- /**
54
- * The largest value representable as `SafeInt` (the upper saturation target
55
- * of `fromNumber`).
56
- */
57
- MAX_VALUE,
58
- /**
59
- * Returns the absolute value of a safe integer.
60
- *
61
- * The result is non-negative and keeps the `SafeInt` brand.
62
- *
63
- * @example
64
- *
65
- * ```ts
66
- * const negative = asSafeInt(-900);
67
- *
68
- * const absolute = SafeInt.abs(negative);
69
- *
70
- * assert.isTrue(absolute === 900);
71
- *
72
- * assert.isTrue(SafeInt.is(absolute));
73
- * ```
74
- *
75
- * @param a - The safe integer value
76
- * @returns The absolute value as a non-negative `SafeInt`
77
- */
78
- abs,
79
- /**
80
- * Returns the smallest of the given safe integers.
81
- *
82
- * @example
83
- *
84
- * ```ts
85
- * const smallest = SafeInt.min(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
86
- *
87
- * assert.isTrue(smallest === -14);
88
- * ```
89
- *
90
- * @param values - The safe integers to compare (at least one required)
91
- * @returns The smallest value as a `SafeInt`
92
- */
93
- min: min_,
94
- /**
95
- * Returns the largest of the given safe integers.
96
- *
97
- * @example
98
- *
99
- * ```ts
100
- * const largest = SafeInt.max(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
101
- *
102
- * assert.isTrue(largest === 99);
103
- * ```
104
- *
105
- * @param values - The safe integers to compare (at least one required)
106
- * @returns The largest value as a `SafeInt`
107
- */
108
- max: max_,
109
- /**
110
- * Converts an arbitrary `number` into a `SafeInt`, rounding to the nearest
111
- * integer and saturating the result into the range `[MIN_VALUE, MAX_VALUE]`.
112
- *
113
- * Unlike `asSafeInt`, this is total: out-of-range inputs are clamped to the
114
- * nearest representable `SafeInt` instead of throwing.
115
- *
116
- * @example
117
- *
118
- * ```ts
119
- * const aboveRange = SafeInt.fromNumber(1e20);
120
- *
121
- * const withinRange = SafeInt.fromNumber(123);
122
- *
123
- * const belowRange = SafeInt.fromNumber(-1e20);
124
- *
125
- * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);
126
- *
127
- * assert.isTrue(withinRange === 123);
128
- *
129
- * assert.isTrue(belowRange === Number.MIN_SAFE_INTEGER);
130
- * ```
131
- *
132
- * @param value - The value to convert
133
- * @returns The value as a `SafeInt`
134
- */
135
- fromNumber,
136
- /**
137
- * Generates a random `SafeInt` within the given range.
138
- *
139
- * The range is inclusive on both ends.
140
- *
141
- * @example
142
- *
143
- * ```ts
144
- * const min = asSafeInt(-10);
145
- *
146
- * const max = asSafeInt(10);
147
- *
148
- * const randomValue = SafeInt.random(min, max);
149
- *
150
- * assert.isTrue(SafeInt.is(randomValue));
151
- *
152
- * assert.isTrue(randomValue >= -10 && randomValue <= 10);
153
- * ```
154
- *
155
- * @param min - The minimum value (inclusive)
156
- * @param max - The maximum value (inclusive)
157
- * @returns A random `SafeInt` in `[min, max]`
158
- */
159
- random,
160
- /**
161
- * Raises `a` to the power `b`, returning `a ** b` as a `SafeInt` (floored to
162
- * an integer).
163
- *
164
- * @example
165
- *
166
- * ```ts
167
- * const base = asSafeInt(3);
168
- *
169
- * const exponent = asSafeInt(5);
170
- *
171
- * const power = SafeInt.pow(base, exponent);
172
- *
173
- * assert.isTrue(power === 243);
174
- *
175
- * assert.isTrue(SafeInt.is(power));
176
- * ```
177
- *
178
- * @param a - The base safe integer
179
- * @param b - The exponent safe integer
180
- * @returns `a ** b` as a `SafeInt`
181
- */
182
- pow,
183
- /**
184
- * Adds two safe integers, returning `a + b` as a `SafeInt`.
185
- *
186
- * @example
187
- *
188
- * ```ts
189
- * const sum = SafeInt.add(asSafeInt(9), asSafeInt(4));
190
- *
191
- * assert.isTrue(sum === 13);
192
- *
193
- * assert.isTrue(SafeInt.is(sum));
194
- * ```
195
- *
196
- * @param a - The first safe integer
197
- * @param b - The second safe integer
198
- * @returns The sum of `a` and `b` as a `SafeInt`
199
- */
200
- add,
201
- /**
202
- * Subtracts two safe integers, returning `a - b` as a `SafeInt`.
203
- *
204
- * @example
205
- *
206
- * ```ts
207
- * const difference = SafeInt.sub(asSafeInt(9), asSafeInt(14));
208
- *
209
- * assert.isTrue(difference === -5);
210
- *
211
- * assert.isTrue(SafeInt.is(difference));
212
- * ```
213
- *
214
- * @param a - The first safe integer
215
- * @param b - The second safe integer
216
- * @returns The difference of `a` and `b` as a `SafeInt`
217
- */
218
- sub,
219
- /**
220
- * Multiplies two safe integers, returning `a * b` as a `SafeInt`.
221
- *
222
- * @example
223
- *
224
- * ```ts
225
- * const product = SafeInt.mul(asSafeInt(-8), asSafeInt(7));
226
- *
227
- * assert.isTrue(product === -56);
228
- *
229
- * assert.isTrue(SafeInt.is(product));
230
- * ```
231
- *
232
- * @param a - The first safe integer
233
- * @param b - The second safe integer
234
- * @returns The product of `a` and `b` as a `SafeInt`
235
- */
236
- mul,
237
- /**
238
- * Divides two safe integers using floor division (`⌊a / b⌋`): the result is
239
- * `a / b` rounded toward negative infinity, as a `SafeInt`.
240
- *
241
- * @example
242
- *
243
- * ```ts
244
- * const quotient = SafeInt.div(asSafeInt(-17), asSafeInt(5));
245
- *
246
- * assert.isTrue(quotient === -4);
247
- *
248
- * assert.isTrue(SafeInt.is(quotient));
249
- * ```
250
- *
251
- * @param a - The dividend
252
- * @param b - The divisor (must be non-zero)
253
- * @returns The floored quotient as a `SafeInt`
254
- */
255
- div
12
+ /**
13
+ * Type guard that checks if a value is a safe integer.
14
+ *
15
+ * Returns `true` for a safe integer — a value with no fractional component.
16
+ *
17
+ * @example
18
+ *
19
+ * ```ts
20
+ * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));
21
+ *
22
+ * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
23
+ *
24
+ * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));
25
+ * ```
26
+ *
27
+ * @param value - The value to check
28
+ * @returns `true` if the value is a safe integer, `false` otherwise
29
+ */
30
+ export const isSafeInt = is;
31
+ /**
32
+ * Casts a `number` to the `SafeInt` branded type.
33
+ *
34
+ * Validates that the value is a safe integer and returns it with the `SafeInt`
35
+ * brand. Throws a `TypeError` otherwise.
36
+ *
37
+ * @example
38
+ *
39
+ * ```ts
40
+ * const branded = asSafeInt(123);
41
+ *
42
+ * assert.isTrue(branded === 123);
43
+ *
44
+ * assert.isTrue(SafeInt.is(branded));
45
+ * ```
46
+ *
47
+ * @param value - The value to cast
48
+ * @returns The value as a `SafeInt`
49
+ * @throws {TypeError} If the value is not a safe integer
50
+ */
51
+ export const asSafeInt = castType;
52
+ /**
53
+ * Namespace providing type-safe operations for the `SafeInt` branded type.
54
+ *
55
+ * The `SafeInt` type represents a safe integer. Division (`div`) uses floor
56
+ * division.
57
+ */
58
+ export const SafeInt = {
59
+ /**
60
+ * Type guard that checks if a value is a safe integer.
61
+ *
62
+ * @example
63
+ *
64
+ * ```ts
65
+ * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));
66
+ *
67
+ * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
68
+ *
69
+ * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));
70
+ * ```
71
+ *
72
+ * @param value - The value to check
73
+ * @returns `true` if the value is a safe integer, `false` otherwise
74
+ * @see {@link isSafeInt} for usage examples
75
+ */
76
+ is,
77
+ /**
78
+ * The smallest value representable as `SafeInt` (the lower saturation target
79
+ * of `fromNumber`).
80
+ */
81
+ MIN_VALUE,
82
+ /**
83
+ * The largest value representable as `SafeInt` (the upper saturation target
84
+ * of `fromNumber`).
85
+ */
86
+ MAX_VALUE,
87
+ /**
88
+ * Returns the absolute value of a safe integer.
89
+ *
90
+ * The result is non-negative and keeps the `SafeInt` brand.
91
+ *
92
+ * @example
93
+ *
94
+ * ```ts
95
+ * const negative = asSafeInt(-900);
96
+ *
97
+ * const absolute = SafeInt.abs(negative);
98
+ *
99
+ * assert.isTrue(absolute === 900);
100
+ *
101
+ * assert.isTrue(SafeInt.is(absolute));
102
+ * ```
103
+ *
104
+ * @param a - The safe integer value
105
+ * @returns The absolute value as a non-negative `SafeInt`
106
+ */
107
+ abs,
108
+ /**
109
+ * Returns the smallest of the given safe integers.
110
+ *
111
+ * @example
112
+ *
113
+ * ```ts
114
+ * const smallest = SafeInt.min(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
115
+ *
116
+ * assert.isTrue(smallest === -14);
117
+ * ```
118
+ *
119
+ * @param values - The safe integers to compare (at least one required)
120
+ * @returns The smallest value as a `SafeInt`
121
+ */
122
+ min: min_,
123
+ /**
124
+ * Returns the largest of the given safe integers.
125
+ *
126
+ * @example
127
+ *
128
+ * ```ts
129
+ * const largest = SafeInt.max(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
130
+ *
131
+ * assert.isTrue(largest === 99);
132
+ * ```
133
+ *
134
+ * @param values - The safe integers to compare (at least one required)
135
+ * @returns The largest value as a `SafeInt`
136
+ */
137
+ max: max_,
138
+ /**
139
+ * Converts an arbitrary `number` into a `SafeInt`, rounding to the nearest
140
+ * integer and saturating the result into the range `[MIN_VALUE, MAX_VALUE]`.
141
+ *
142
+ * Unlike `asSafeInt`, this is total: out-of-range inputs are clamped to the
143
+ * nearest representable `SafeInt` instead of throwing.
144
+ *
145
+ * @example
146
+ *
147
+ * ```ts
148
+ * const aboveRange = SafeInt.fromNumber(1e20);
149
+ *
150
+ * const withinRange = SafeInt.fromNumber(123);
151
+ *
152
+ * const belowRange = SafeInt.fromNumber(-1e20);
153
+ *
154
+ * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);
155
+ *
156
+ * assert.isTrue(withinRange === 123);
157
+ *
158
+ * assert.isTrue(belowRange === Number.MIN_SAFE_INTEGER);
159
+ * ```
160
+ *
161
+ * @param value - The value to convert
162
+ * @returns The value as a `SafeInt`
163
+ */
164
+ fromNumber,
165
+ /**
166
+ * Generates a random `SafeInt` within the given range.
167
+ *
168
+ * The range is inclusive on both ends.
169
+ *
170
+ * @example
171
+ *
172
+ * ```ts
173
+ * const min = asSafeInt(-10);
174
+ *
175
+ * const max = asSafeInt(10);
176
+ *
177
+ * const randomValue = SafeInt.random(min, max);
178
+ *
179
+ * assert.isTrue(SafeInt.is(randomValue));
180
+ *
181
+ * assert.isTrue(randomValue >= -10 && randomValue <= 10);
182
+ * ```
183
+ *
184
+ * @param min - The minimum value (inclusive)
185
+ * @param max - The maximum value (inclusive)
186
+ * @returns A random `SafeInt` in `[min, max]`
187
+ */
188
+ random,
189
+ /**
190
+ * Raises `a` to the power `b`, returning `a ** b` as a `SafeInt` (floored to
191
+ * an integer).
192
+ *
193
+ * @example
194
+ *
195
+ * ```ts
196
+ * const base = asSafeInt(3);
197
+ *
198
+ * const exponent = asSafeInt(5);
199
+ *
200
+ * const power = SafeInt.pow(base, exponent);
201
+ *
202
+ * assert.isTrue(power === 243);
203
+ *
204
+ * assert.isTrue(SafeInt.is(power));
205
+ * ```
206
+ *
207
+ * @param a - The base safe integer
208
+ * @param b - The exponent safe integer
209
+ * @returns `a ** b` as a `SafeInt`
210
+ */
211
+ pow,
212
+ /**
213
+ * Adds two safe integers, returning `a + b` as a `SafeInt`.
214
+ *
215
+ * @example
216
+ *
217
+ * ```ts
218
+ * const sum = SafeInt.add(asSafeInt(9), asSafeInt(4));
219
+ *
220
+ * assert.isTrue(sum === 13);
221
+ *
222
+ * assert.isTrue(SafeInt.is(sum));
223
+ * ```
224
+ *
225
+ * @param a - The first safe integer
226
+ * @param b - The second safe integer
227
+ * @returns The sum of `a` and `b` as a `SafeInt`
228
+ */
229
+ add,
230
+ /**
231
+ * Subtracts two safe integers, returning `a - b` as a `SafeInt`.
232
+ *
233
+ * @example
234
+ *
235
+ * ```ts
236
+ * const difference = SafeInt.sub(asSafeInt(9), asSafeInt(14));
237
+ *
238
+ * assert.isTrue(difference === -5);
239
+ *
240
+ * assert.isTrue(SafeInt.is(difference));
241
+ * ```
242
+ *
243
+ * @param a - The first safe integer
244
+ * @param b - The second safe integer
245
+ * @returns The difference of `a` and `b` as a `SafeInt`
246
+ */
247
+ sub,
248
+ /**
249
+ * Multiplies two safe integers, returning `a * b` as a `SafeInt`.
250
+ *
251
+ * @example
252
+ *
253
+ * ```ts
254
+ * const product = SafeInt.mul(asSafeInt(-8), asSafeInt(7));
255
+ *
256
+ * assert.isTrue(product === -56);
257
+ *
258
+ * assert.isTrue(SafeInt.is(product));
259
+ * ```
260
+ *
261
+ * @param a - The first safe integer
262
+ * @param b - The second safe integer
263
+ * @returns The product of `a` and `b` as a `SafeInt`
264
+ */
265
+ mul,
266
+ /**
267
+ * Divides two safe integers using floor division (`⌊a / b⌋`): the result is
268
+ * `a / b` rounded toward negative infinity, as a `SafeInt`.
269
+ *
270
+ * @example
271
+ *
272
+ * ```ts
273
+ * const quotient = SafeInt.div(asSafeInt(-17), asSafeInt(5));
274
+ *
275
+ * assert.isTrue(quotient === -4);
276
+ *
277
+ * assert.isTrue(SafeInt.is(quotient));
278
+ * ```
279
+ *
280
+ * @param a - The dividend
281
+ * @param b - The divisor (must be non-zero)
282
+ * @returns The floored quotient as a `SafeInt`
283
+ */
284
+ div,
256
285
  };
257
286
 
258
- export { SafeInt, asSafeInt, isSafeInt };
259
- //# sourceMappingURL=safe-int.mjs.map
287
+
288
+ //# sourceMappingURL=safe-int.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-int.mjs","sources":["../../../src/number/branded-types/safe-int.mts"],"sourcesContent":["import {\n type SafeUint,\n type SafeInt as TtfImported_SafeInt,\n} from 'ts-type-forge';\nimport { expectType } from '../../expect-type.mjs';\nimport { TsDataForgeInternals } from '../refined-number-utils.mjs';\n\nexport type SafeInt = TtfImported_SafeInt;\n\ntype ElementType = SafeInt;\n\nconst typeNameInMessage = 'a safe integer';\n\nconst {\n MAX_VALUE,\n MIN_VALUE,\n abs,\n add,\n castType,\n div,\n fromNumber,\n is,\n max: max_,\n min: min_,\n mul,\n pow,\n random,\n sub,\n} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<\n ElementType,\n SafeInt,\n SafeUint\n>({\n integerOrSafeInteger: 'SafeInteger',\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer\n MIN_VALUE: Number.MIN_SAFE_INTEGER as SafeInt,\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer\n MAX_VALUE: Number.MAX_SAFE_INTEGER as SafeUint,\n typeNameInMessage,\n} as const);\n\n/**\n * Type guard that checks if a value is a safe integer.\n *\n * Returns `true` for a safe integer — a value with no fractional component.\n *\n * @example\n *\n * ```ts\n * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));\n *\n * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));\n *\n * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));\n * ```\n *\n * @param value - The value to check\n * @returns `true` if the value is a safe integer, `false` otherwise\n */\nexport const isSafeInt = is;\n\n/**\n * Casts a `number` to the `SafeInt` branded type.\n *\n * Validates that the value is a safe integer and returns it with the `SafeInt`\n * brand. Throws a `TypeError` otherwise.\n *\n * @example\n *\n * ```ts\n * const branded = asSafeInt(123);\n *\n * assert.isTrue(branded === 123);\n *\n * assert.isTrue(SafeInt.is(branded));\n * ```\n *\n * @param value - The value to cast\n * @returns The value as a `SafeInt`\n * @throws {TypeError} If the value is not a safe integer\n */\nexport const asSafeInt = castType;\n\n/**\n * Namespace providing type-safe operations for the `SafeInt` branded type.\n *\n * The `SafeInt` type represents a safe integer. Division (`div`) uses floor\n * division.\n */\nexport const SafeInt = {\n /**\n * Type guard that checks if a value is a safe integer.\n *\n * @example\n *\n * ```ts\n * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));\n *\n * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));\n *\n * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));\n * ```\n *\n * @param value - The value to check\n * @returns `true` if the value is a safe integer, `false` otherwise\n * @see {@link isSafeInt} for usage examples\n */\n is,\n\n /**\n * The smallest value representable as `SafeInt` (the lower saturation target\n * of `fromNumber`).\n */\n MIN_VALUE,\n\n /**\n * The largest value representable as `SafeInt` (the upper saturation target\n * of `fromNumber`).\n */\n MAX_VALUE,\n\n /**\n * Returns the absolute value of a safe integer.\n *\n * The result is non-negative and keeps the `SafeInt` brand.\n *\n * @example\n *\n * ```ts\n * const negative = asSafeInt(-900);\n *\n * const absolute = SafeInt.abs(negative);\n *\n * assert.isTrue(absolute === 900);\n *\n * assert.isTrue(SafeInt.is(absolute));\n * ```\n *\n * @param a - The safe integer value\n * @returns The absolute value as a non-negative `SafeInt`\n */\n abs,\n\n /**\n * Returns the smallest of the given safe integers.\n *\n * @example\n *\n * ```ts\n * const smallest = SafeInt.min(asSafeInt(25), asSafeInt(-14), asSafeInt(99));\n *\n * assert.isTrue(smallest === -14);\n * ```\n *\n * @param values - The safe integers to compare (at least one required)\n * @returns The smallest value as a `SafeInt`\n */\n min: min_,\n\n /**\n * Returns the largest of the given safe integers.\n *\n * @example\n *\n * ```ts\n * const largest = SafeInt.max(asSafeInt(25), asSafeInt(-14), asSafeInt(99));\n *\n * assert.isTrue(largest === 99);\n * ```\n *\n * @param values - The safe integers to compare (at least one required)\n * @returns The largest value as a `SafeInt`\n */\n max: max_,\n\n /**\n * Converts an arbitrary `number` into a `SafeInt`, rounding to the nearest\n * integer and saturating the result into the range `[MIN_VALUE, MAX_VALUE]`.\n *\n * Unlike `asSafeInt`, this is total: out-of-range inputs are clamped to the\n * nearest representable `SafeInt` instead of throwing.\n *\n * @example\n *\n * ```ts\n * const aboveRange = SafeInt.fromNumber(1e20);\n *\n * const withinRange = SafeInt.fromNumber(123);\n *\n * const belowRange = SafeInt.fromNumber(-1e20);\n *\n * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);\n *\n * assert.isTrue(withinRange === 123);\n *\n * assert.isTrue(belowRange === Number.MIN_SAFE_INTEGER);\n * ```\n *\n * @param value - The value to convert\n * @returns The value as a `SafeInt`\n */\n fromNumber,\n\n /**\n * Generates a random `SafeInt` within the given range.\n *\n * The range is inclusive on both ends.\n *\n * @example\n *\n * ```ts\n * const min = asSafeInt(-10);\n *\n * const max = asSafeInt(10);\n *\n * const randomValue = SafeInt.random(min, max);\n *\n * assert.isTrue(SafeInt.is(randomValue));\n *\n * assert.isTrue(randomValue >= -10 && randomValue <= 10);\n * ```\n *\n * @param min - The minimum value (inclusive)\n * @param max - The maximum value (inclusive)\n * @returns A random `SafeInt` in `[min, max]`\n */\n random,\n\n /**\n * Raises `a` to the power `b`, returning `a ** b` as a `SafeInt` (floored to\n * an integer).\n *\n * @example\n *\n * ```ts\n * const base = asSafeInt(3);\n *\n * const exponent = asSafeInt(5);\n *\n * const power = SafeInt.pow(base, exponent);\n *\n * assert.isTrue(power === 243);\n *\n * assert.isTrue(SafeInt.is(power));\n * ```\n *\n * @param a - The base safe integer\n * @param b - The exponent safe integer\n * @returns `a ** b` as a `SafeInt`\n */\n pow,\n\n /**\n * Adds two safe integers, returning `a + b` as a `SafeInt`.\n *\n * @example\n *\n * ```ts\n * const sum = SafeInt.add(asSafeInt(9), asSafeInt(4));\n *\n * assert.isTrue(sum === 13);\n *\n * assert.isTrue(SafeInt.is(sum));\n * ```\n *\n * @param a - The first safe integer\n * @param b - The second safe integer\n * @returns The sum of `a` and `b` as a `SafeInt`\n */\n add,\n\n /**\n * Subtracts two safe integers, returning `a - b` as a `SafeInt`.\n *\n * @example\n *\n * ```ts\n * const difference = SafeInt.sub(asSafeInt(9), asSafeInt(14));\n *\n * assert.isTrue(difference === -5);\n *\n * assert.isTrue(SafeInt.is(difference));\n * ```\n *\n * @param a - The first safe integer\n * @param b - The second safe integer\n * @returns The difference of `a` and `b` as a `SafeInt`\n */\n sub,\n\n /**\n * Multiplies two safe integers, returning `a * b` as a `SafeInt`.\n *\n * @example\n *\n * ```ts\n * const product = SafeInt.mul(asSafeInt(-8), asSafeInt(7));\n *\n * assert.isTrue(product === -56);\n *\n * assert.isTrue(SafeInt.is(product));\n * ```\n *\n * @param a - The first safe integer\n * @param b - The second safe integer\n * @returns The product of `a` and `b` as a `SafeInt`\n */\n mul,\n\n /**\n * Divides two safe integers using floor division (`⌊a / b⌋`): the result is\n * `a / b` rounded toward negative infinity, as a `SafeInt`.\n *\n * @example\n *\n * ```ts\n * const quotient = SafeInt.div(asSafeInt(-17), asSafeInt(5));\n *\n * assert.isTrue(quotient === -4);\n *\n * assert.isTrue(SafeInt.is(quotient));\n * ```\n *\n * @param a - The dividend\n * @param b - The divisor (must be non-zero)\n * @returns The floored quotient as a `SafeInt`\n */\n div,\n} as const;\n\nexpectType<\n keyof typeof SafeInt,\n keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'int' | 'range'\n >\n>('=');\n\nexpectType<\n typeof SafeInt,\n TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'int' | 'range'\n >\n>('<=');\n"],"names":[],"mappings":";;AAWA,MAAM,iBAAA,GAAoB,gBAAA;AAE1B,MAAM;AAAA,EACJ,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,GAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,GAAI,oBAAA,CAAqB,mBAAmB,mBAAA,CAI1C;AAAA,EACA,oBAAA,EAAsB,aAAA;AAAA;AAAA,EAEtB,WAAW,MAAA,CAAO,gBAAA;AAAA;AAAA,EAElB,WAAW,MAAA,CAAO,gBAAA;AAAA,EAClB;AACF,CAAU,CAAA;AAoBH,MAAM,SAAA,GAAY;AAsBlB,MAAM,SAAA,GAAY;AAQlB,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBrB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBL,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BL,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA;AACF;;;;"}
1
+ {"version":3,"file":"safe-int.mjs","sourceRoot":"","sources":["../../../src/number/branded-types/safe-int.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAMnE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAE3C,MAAM,EACJ,SAAS,EACT,SAAS,EACT,GAAG,EACH,GAAG,EACH,QAAQ,EACR,GAAG,EACH,UAAU,EACV,EAAE,EACF,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,IAAI,EACT,GAAG,EACH,GAAG,EACH,MAAM,EACN,GAAG,GACJ,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,mBAAmB,CAI7D;IACA,oBAAoB,EAAE,aAAa;IACnC,yGAAyG;IACzG,SAAS,EAAE,MAAM,CAAC,gBAA2B;IAC7C,yGAAyG;IACzG,SAAS,EAAE,MAAM,CAAC,gBAA4B;IAC9C,iBAAiB;CACT,CAAC,CAAC;AAEZ;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;AAElC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;;;;;;;;;;;;;;;;OAgBG;IACH,EAAE;IAEF;;;OAGG;IACH,SAAS;IAET;;;OAGG;IACH,SAAS;IAET;;;;;;;;;;;;;;;;;;;OAmBG;IACH,GAAG;IAEH;;;;;;;;;;;;;OAaG;IACH,GAAG,EAAE,IAAI;IAET;;;;;;;;;;;;;OAaG;IACH,GAAG,EAAE,IAAI;IAET;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,UAAU;IAEV;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM;IAEN;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG;IAEH;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG;IAEH;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG;IAEH;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG;IAEH;;;;;;;;;;;;;;;;;OAiBG;IACH,GAAG;CACK,CAAC;AAEX,UAAU,CAMR,GAAG,CAAC,CAAC;AAEP,UAAU,CAMR,IAAI,CAAC,CAAC"}