ts-data-forge 8.0.0 → 9.0.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 (429) hide show
  1. package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
  2. package/dist/array/impl/array-utils-creation.mjs +17 -112
  3. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  4. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
  5. package/dist/array/impl/array-utils-element-access.mjs +22 -61
  6. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  7. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -1
  8. package/dist/array/impl/array-utils-iterators.mjs +9 -63
  9. package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
  10. package/dist/array/impl/array-utils-modification.mjs +78 -78
  11. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  12. package/dist/array/impl/array-utils-reducing-value.mjs +95 -89
  13. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  14. package/dist/array/impl/array-utils-search.mjs +100 -92
  15. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  16. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
  17. package/dist/array/impl/array-utils-set-op.mjs +31 -141
  18. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-size.d.mts.map +1 -1
  20. package/dist/array/impl/array-utils-size.mjs +4 -8
  21. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  22. package/dist/array/impl/array-utils-slice-clamped.mjs +11 -12
  23. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  24. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  25. package/dist/array/impl/array-utils-slicing.mjs +44 -96
  26. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  27. package/dist/array/impl/array-utils-transformation.d.mts +1 -1
  28. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  29. package/dist/array/impl/array-utils-transformation.mjs +150 -292
  30. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  31. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  32. package/dist/array/impl/array-utils-validation.mjs +18 -169
  33. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  34. package/dist/collections/imap-mapped.d.mts.map +1 -1
  35. package/dist/collections/imap-mapped.mjs +243 -330
  36. package/dist/collections/imap-mapped.mjs.map +1 -1
  37. package/dist/collections/imap.d.mts.map +1 -1
  38. package/dist/collections/imap.mjs +190 -275
  39. package/dist/collections/imap.mjs.map +1 -1
  40. package/dist/collections/iset-mapped.d.mts +1 -1
  41. package/dist/collections/iset-mapped.d.mts.map +1 -1
  42. package/dist/collections/iset-mapped.mjs +222 -444
  43. package/dist/collections/iset-mapped.mjs.map +1 -1
  44. package/dist/collections/iset.d.mts +1 -1
  45. package/dist/collections/iset.d.mts.map +1 -1
  46. package/dist/collections/iset.mjs +158 -324
  47. package/dist/collections/iset.mjs.map +1 -1
  48. package/dist/collections/queue.d.mts.map +1 -1
  49. package/dist/collections/queue.mjs +106 -178
  50. package/dist/collections/queue.mjs.map +1 -1
  51. package/dist/collections/stack.d.mts.map +1 -1
  52. package/dist/collections/stack.mjs +95 -165
  53. package/dist/collections/stack.mjs.map +1 -1
  54. package/dist/entry-point.mjs +1 -0
  55. package/dist/entry-point.mjs.map +1 -1
  56. package/dist/expect-type.d.mts +1 -1
  57. package/dist/expect-type.d.mts.map +1 -1
  58. package/dist/expect-type.mjs +1 -69
  59. package/dist/expect-type.mjs.map +1 -1
  60. package/dist/functional/match.mjs +9 -9
  61. package/dist/functional/match.mjs.map +1 -1
  62. package/dist/functional/optional/impl/optional-expect-to-be.mjs +13 -14
  63. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  64. package/dist/functional/optional/impl/optional-filter.mjs +14 -15
  65. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  66. package/dist/functional/optional/impl/optional-flat-map.mjs +10 -11
  67. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  68. package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -1
  69. package/dist/functional/optional/impl/optional-from-nullable.mjs +1 -25
  70. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  71. package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -1
  72. package/dist/functional/optional/impl/optional-is-none.mjs +0 -19
  73. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  74. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
  75. package/dist/functional/optional/impl/optional-is-optional.mjs +1 -23
  76. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  77. package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -1
  78. package/dist/functional/optional/impl/optional-is-some.mjs +0 -20
  79. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  80. package/dist/functional/optional/impl/optional-map.mjs +13 -14
  81. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  82. package/dist/functional/optional/impl/optional-none.mjs +0 -16
  83. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  84. package/dist/functional/optional/impl/optional-or-else.mjs +10 -11
  85. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  86. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
  87. package/dist/functional/optional/impl/optional-some.mjs +2 -21
  88. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  89. package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -1
  90. package/dist/functional/optional/impl/optional-to-nullable.mjs +1 -27
  91. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  92. package/dist/functional/optional/impl/optional-unwrap-or.mjs +9 -10
  93. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  94. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -1
  95. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +4 -32
  96. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  97. package/dist/functional/optional/impl/optional-unwrap.mjs +4 -4
  98. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  99. package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -1
  100. package/dist/functional/optional/impl/optional-zip.mjs +1 -35
  101. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  102. package/dist/functional/optional/impl/tag.mjs +2 -3
  103. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  104. package/dist/functional/pipe.d.mts.map +1 -1
  105. package/dist/functional/pipe.mjs +9 -34
  106. package/dist/functional/pipe.mjs.map +1 -1
  107. package/dist/functional/result/impl/result-err.d.mts.map +1 -1
  108. package/dist/functional/result/impl/result-err.mjs +2 -27
  109. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  110. package/dist/functional/result/impl/result-expect-to-be.mjs +13 -15
  111. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  112. package/dist/functional/result/impl/result-flat-map.mjs +16 -16
  113. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  114. package/dist/functional/result/impl/result-fold.mjs +16 -16
  115. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  116. package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -1
  117. package/dist/functional/result/impl/result-from-promise.mjs +4 -31
  118. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  119. package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -1
  120. package/dist/functional/result/impl/result-from-throwable.mjs +8 -38
  121. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  122. package/dist/functional/result/impl/result-is-err.d.mts.map +1 -1
  123. package/dist/functional/result/impl/result-is-err.mjs +0 -19
  124. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  125. package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -1
  126. package/dist/functional/result/impl/result-is-ok.mjs +0 -19
  127. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  128. package/dist/functional/result/impl/result-is-result.d.mts.map +1 -1
  129. package/dist/functional/result/impl/result-is-result.mjs +1 -23
  130. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  131. package/dist/functional/result/impl/result-map-err.mjs +16 -16
  132. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  133. package/dist/functional/result/impl/result-map.mjs +16 -16
  134. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  135. package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
  136. package/dist/functional/result/impl/result-ok.mjs +2 -27
  137. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  138. package/dist/functional/result/impl/result-or-else.mjs +10 -12
  139. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  140. package/dist/functional/result/impl/result-swap.d.mts.map +1 -1
  141. package/dist/functional/result/impl/result-swap.mjs +4 -22
  142. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  143. package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -1
  144. package/dist/functional/result/impl/result-to-optional.mjs +0 -27
  145. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  146. package/dist/functional/result/impl/result-unwrap-err-or.mjs +9 -11
  147. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  148. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -1
  149. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +13 -40
  150. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  151. package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -1
  152. package/dist/functional/result/impl/result-unwrap-err.mjs +4 -32
  153. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  154. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +9 -11
  155. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  156. package/dist/functional/result/impl/result-unwrap-ok.mjs +4 -4
  157. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  158. package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -1
  159. package/dist/functional/result/impl/result-unwrap-throw.mjs +4 -35
  160. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  161. package/dist/functional/result/impl/result-zip.d.mts.map +1 -1
  162. package/dist/functional/result/impl/result-zip.mjs +1 -34
  163. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  164. package/dist/functional/result/impl/tag.mjs +2 -3
  165. package/dist/functional/result/impl/tag.mjs.map +1 -1
  166. package/dist/functional/ternary-result/impl/tag.mjs +3 -5
  167. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  168. package/dist/functional/ternary-result/impl/ternary-result-err.d.mts.map +1 -1
  169. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +2 -15
  170. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  171. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +13 -13
  172. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  173. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +27 -26
  174. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  175. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +21 -22
  176. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  177. package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts.map +1 -1
  178. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +4 -20
  179. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  180. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts.map +1 -1
  181. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +7 -25
  182. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  183. package/dist/functional/ternary-result/impl/ternary-result-is-err.d.mts.map +1 -1
  184. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +0 -17
  185. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  186. package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts.map +1 -1
  187. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +0 -19
  188. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  189. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts.map +1 -1
  190. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +1 -25
  191. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  192. package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts.map +1 -1
  193. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +0 -18
  194. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  195. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +13 -15
  196. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  197. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +18 -18
  198. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  199. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +21 -22
  200. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  201. package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts.map +1 -1
  202. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +2 -16
  203. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  204. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +9 -9
  205. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  206. package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts.map +1 -1
  207. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +4 -22
  208. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  209. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +9 -9
  210. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  211. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts.map +1 -1
  212. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +12 -27
  213. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  214. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts.map +1 -1
  215. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +4 -19
  216. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  217. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +9 -9
  218. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  219. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +4 -5
  220. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  221. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts.map +1 -1
  222. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +15 -27
  223. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +9 -9
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts.map +1 -1
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +10 -24
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts.map +1 -1
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +4 -19
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  232. package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts.map +1 -1
  233. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +3 -19
  234. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  235. package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts.map +1 -1
  236. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +14 -45
  237. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  238. package/dist/functional/ternary-result/impl/variant-name.d.mts +1 -1
  239. package/dist/functional/ternary-result/impl/variant-name.d.mts.map +1 -1
  240. package/dist/functional/ternary-result/impl/variant-name.mjs +8 -9
  241. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  242. package/dist/functional/ternary-result/ternary-result.d.mts.map +1 -1
  243. package/dist/guard/has-key.d.mts.map +1 -1
  244. package/dist/guard/has-key.mjs +0 -41
  245. package/dist/guard/has-key.mjs.map +1 -1
  246. package/dist/guard/index.d.mts +1 -0
  247. package/dist/guard/index.d.mts.map +1 -1
  248. package/dist/guard/index.mjs +1 -0
  249. package/dist/guard/index.mjs.map +1 -1
  250. package/dist/guard/is-length-bounded-string.d.mts +164 -0
  251. package/dist/guard/is-length-bounded-string.d.mts.map +1 -0
  252. package/dist/guard/is-length-bounded-string.mjs +7 -0
  253. package/dist/guard/is-length-bounded-string.mjs.map +1 -0
  254. package/dist/guard/is-non-empty-string.d.mts +1 -1
  255. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  256. package/dist/guard/is-non-empty-string.mjs +1 -38
  257. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  258. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  259. package/dist/guard/is-non-null-object.mjs +1 -35
  260. package/dist/guard/is-non-null-object.mjs.map +1 -1
  261. package/dist/guard/is-primitive.d.mts.map +1 -1
  262. package/dist/guard/is-primitive.mjs +12 -43
  263. package/dist/guard/is-primitive.mjs.map +1 -1
  264. package/dist/guard/is-record.d.mts.map +1 -1
  265. package/dist/guard/is-record.mjs +0 -86
  266. package/dist/guard/is-record.mjs.map +1 -1
  267. package/dist/guard/is-type.d.mts.map +1 -1
  268. package/dist/guard/is-type.mjs +12 -399
  269. package/dist/guard/is-type.mjs.map +1 -1
  270. package/dist/guard/key-is-in.d.mts.map +1 -1
  271. package/dist/guard/key-is-in.mjs +0 -40
  272. package/dist/guard/key-is-in.mjs.map +1 -1
  273. package/dist/index.mjs +1 -0
  274. package/dist/index.mjs.map +1 -1
  275. package/dist/iterator/range.mjs +16 -16
  276. package/dist/iterator/range.mjs.map +1 -1
  277. package/dist/json/json.d.mts.map +1 -1
  278. package/dist/json/json.mjs +52 -340
  279. package/dist/json/json.mjs.map +1 -1
  280. package/dist/number/branded-types/finite-number.d.mts +3 -3
  281. package/dist/number/branded-types/finite-number.mjs +135 -154
  282. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  283. package/dist/number/branded-types/int.d.mts +4 -4
  284. package/dist/number/branded-types/int.mjs +205 -245
  285. package/dist/number/branded-types/int.mjs.map +1 -1
  286. package/dist/number/branded-types/int16.d.mts +15 -15
  287. package/dist/number/branded-types/int16.mjs +116 -123
  288. package/dist/number/branded-types/int16.mjs.map +1 -1
  289. package/dist/number/branded-types/int32.d.mts +11 -11
  290. package/dist/number/branded-types/int32.mjs +116 -123
  291. package/dist/number/branded-types/int32.mjs.map +1 -1
  292. package/dist/number/branded-types/negative-finite-number.d.mts +4 -4
  293. package/dist/number/branded-types/negative-finite-number.mjs +129 -144
  294. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  295. package/dist/number/branded-types/negative-int.d.mts +5 -5
  296. package/dist/number/branded-types/negative-int.mjs +94 -113
  297. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  298. package/dist/number/branded-types/negative-safe-int.d.mts +5 -5
  299. package/dist/number/branded-types/negative-safe-int.mjs +103 -124
  300. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  301. package/dist/number/branded-types/non-negative-finite-number.d.mts +5 -5
  302. package/dist/number/branded-types/non-negative-finite-number.mjs +136 -142
  303. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  304. package/dist/number/branded-types/non-negative-int16.d.mts +16 -16
  305. package/dist/number/branded-types/non-negative-int16.mjs +109 -118
  306. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  307. package/dist/number/branded-types/non-negative-int32.d.mts +12 -12
  308. package/dist/number/branded-types/non-negative-int32.mjs +110 -119
  309. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  310. package/dist/number/branded-types/non-positive-finite-number.d.mts +3 -3
  311. package/dist/number/branded-types/non-positive-finite-number.mjs +120 -124
  312. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  313. package/dist/number/branded-types/non-positive-int.d.mts +4 -4
  314. package/dist/number/branded-types/non-positive-int.mjs +167 -212
  315. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  316. package/dist/number/branded-types/non-positive-safe-int.d.mts +4 -4
  317. package/dist/number/branded-types/non-positive-safe-int.mjs +95 -106
  318. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  319. package/dist/number/branded-types/non-zero-finite-number.d.mts +4 -4
  320. package/dist/number/branded-types/non-zero-finite-number.mjs +114 -123
  321. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  322. package/dist/number/branded-types/non-zero-int.d.mts +2 -2
  323. package/dist/number/branded-types/non-zero-int.mjs +72 -83
  324. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  325. package/dist/number/branded-types/non-zero-int16.d.mts +7 -7
  326. package/dist/number/branded-types/non-zero-int16.mjs +96 -107
  327. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  328. package/dist/number/branded-types/non-zero-int32.d.mts +5 -5
  329. package/dist/number/branded-types/non-zero-int32.mjs +97 -108
  330. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  331. package/dist/number/branded-types/non-zero-safe-int.d.mts +2 -2
  332. package/dist/number/branded-types/non-zero-safe-int.mjs +100 -111
  333. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  334. package/dist/number/branded-types/non-zero-uint16.d.mts +8 -8
  335. package/dist/number/branded-types/non-zero-uint16.mjs +96 -107
  336. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  337. package/dist/number/branded-types/non-zero-uint32.d.mts +6 -6
  338. package/dist/number/branded-types/non-zero-uint32.mjs +96 -107
  339. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  340. package/dist/number/branded-types/positive-finite-number.d.mts +8 -8
  341. package/dist/number/branded-types/positive-finite-number.mjs +139 -141
  342. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  343. package/dist/number/branded-types/positive-int.d.mts +11 -11
  344. package/dist/number/branded-types/positive-int.mjs +228 -271
  345. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  346. package/dist/number/branded-types/positive-int16.d.mts +19 -19
  347. package/dist/number/branded-types/positive-int16.mjs +109 -118
  348. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  349. package/dist/number/branded-types/positive-int32.d.mts +15 -15
  350. package/dist/number/branded-types/positive-int32.mjs +109 -118
  351. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  352. package/dist/number/branded-types/positive-safe-int.d.mts +11 -11
  353. package/dist/number/branded-types/positive-safe-int.mjs +244 -275
  354. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  355. package/dist/number/branded-types/positive-uint16.d.mts +17 -17
  356. package/dist/number/branded-types/positive-uint16.mjs +109 -118
  357. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  358. package/dist/number/branded-types/positive-uint32.d.mts +13 -13
  359. package/dist/number/branded-types/positive-uint32.mjs +110 -119
  360. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  361. package/dist/number/branded-types/safe-int.d.mts +4 -4
  362. package/dist/number/branded-types/safe-int.mjs +251 -292
  363. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  364. package/dist/number/branded-types/safe-uint.d.mts +8 -8
  365. package/dist/number/branded-types/safe-uint.mjs +111 -119
  366. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  367. package/dist/number/branded-types/uint.d.mts +8 -8
  368. package/dist/number/branded-types/uint.mjs +198 -225
  369. package/dist/number/branded-types/uint.mjs.map +1 -1
  370. package/dist/number/branded-types/uint16.d.mts +14 -14
  371. package/dist/number/branded-types/uint16.mjs +109 -119
  372. package/dist/number/branded-types/uint16.mjs.map +1 -1
  373. package/dist/number/branded-types/uint32.d.mts +10 -10
  374. package/dist/number/branded-types/uint32.mjs +110 -117
  375. package/dist/number/branded-types/uint32.mjs.map +1 -1
  376. package/dist/number/enum/int8.mjs +119 -145
  377. package/dist/number/enum/int8.mjs.map +1 -1
  378. package/dist/number/enum/uint8.mjs +107 -121
  379. package/dist/number/enum/uint8.mjs.map +1 -1
  380. package/dist/number/num.d.mts +2 -2
  381. package/dist/number/num.d.mts.map +1 -1
  382. package/dist/number/num.mjs +76 -537
  383. package/dist/number/num.mjs.map +1 -1
  384. package/dist/number/refined-number-utils.d.mts +1 -1
  385. package/dist/number/refined-number-utils.d.mts.map +1 -1
  386. package/dist/number/refined-number-utils.mjs +127 -263
  387. package/dist/number/refined-number-utils.mjs.map +1 -1
  388. package/dist/object/object.d.mts.map +1 -1
  389. package/dist/object/object.mjs +107 -222
  390. package/dist/object/object.mjs.map +1 -1
  391. package/dist/others/cast-mutable.d.mts.map +1 -1
  392. package/dist/others/cast-mutable.mjs +8 -37
  393. package/dist/others/cast-mutable.mjs.map +1 -1
  394. package/dist/others/cast-readonly.d.mts.map +1 -1
  395. package/dist/others/cast-readonly.mjs +8 -36
  396. package/dist/others/cast-readonly.mjs.map +1 -1
  397. package/dist/others/debounce-function.d.mts.map +1 -1
  398. package/dist/others/debounce-function.mjs +7 -16
  399. package/dist/others/debounce-function.mjs.map +1 -1
  400. package/dist/others/fast-deep-equal.d.mts.map +1 -1
  401. package/dist/others/fast-deep-equal.mjs +43 -59
  402. package/dist/others/fast-deep-equal.mjs.map +1 -1
  403. package/dist/others/if-then.d.mts.map +1 -1
  404. package/dist/others/if-then.mjs +0 -29
  405. package/dist/others/if-then.mjs.map +1 -1
  406. package/dist/others/map-nullable.mjs +9 -9
  407. package/dist/others/map-nullable.mjs.map +1 -1
  408. package/dist/others/memoize-function.mjs +12 -12
  409. package/dist/others/memoize-function.mjs.map +1 -1
  410. package/dist/others/tuple.d.mts.map +1 -1
  411. package/dist/others/tuple.mjs +0 -50
  412. package/dist/others/tuple.mjs.map +1 -1
  413. package/dist/others/unknown-to-string.d.mts.map +1 -1
  414. package/dist/others/unknown-to-string.mjs +41 -88
  415. package/dist/others/unknown-to-string.mjs.map +1 -1
  416. package/dist/promise/promise.d.mts.map +1 -1
  417. package/dist/promise/promise.mjs +4 -49
  418. package/dist/promise/promise.mjs.map +1 -1
  419. package/package.json +17 -16
  420. package/src/array/impl/array-utils-transformation.mts +1 -2
  421. package/src/array/impl/array-utils-transformation.test.mts +3 -36
  422. package/src/array/impl/array-utils-validation.test.mts +1 -3
  423. package/src/expect-type.mts +4 -5
  424. package/src/functional/ternary-result/ternary-result.mts +2 -6
  425. package/src/guard/index.mts +1 -0
  426. package/src/guard/is-length-bounded-string.mts +199 -0
  427. package/src/guard/is-length-bounded-string.test.mts +170 -0
  428. package/src/number/refined-number-utils.mts +1 -9
  429. package/src/object/object.mts +25 -23
@@ -1,301 +1,260 @@
1
1
  import { TsDataForgeInternals } from '../refined-number-utils.mjs';
2
2
 
3
- const typeNameInMessage = 'a safe integer';
4
- const { MAX_VALUE, MIN_VALUE, abs, add, castType, clamp, div, 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,
3
+ const typeNameInMessage = "a safe integer";
4
+ const {
5
+ MAX_VALUE,
6
+ MIN_VALUE,
7
+ abs,
8
+ add,
9
+ castType,
10
+ clamp,
11
+ div,
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
11
26
  });
12
- /**
13
- * Type guard that checks if a value is a safe integer.
14
- *
15
- * A safe integer is an integer that can be exactly represented in JavaScript
16
- * without precision loss. The range is [±(2^53 - 1)].
17
- *
18
- * @example
19
- *
20
- * ```ts
21
- * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));
22
- *
23
- * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
24
- *
25
- * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));
26
- * ```
27
- *
28
- * @param value - The value to check
29
- * @returns `true` if the value is a safe integer, `false` otherwise
30
- */
31
27
  const isSafeInt = is;
32
- /**
33
- * Casts a number to a SafeInt branded type.
34
- *
35
- * This function validates that the input is a safe integer (within ±(2^53 - 1))
36
- * and returns it with the SafeInt brand. This ensures type safety for
37
- * operations that require precise integer arithmetic.
38
- *
39
- * @example
40
- *
41
- * ```ts
42
- * const branded = asSafeInt(123);
43
- *
44
- * assert.isTrue(branded === 123);
45
- *
46
- * assert.isTrue(SafeInt.is(branded));
47
- * ```
48
- *
49
- * @param value - The value to cast
50
- * @returns The value as a SafeInt branded type
51
- * @throws {TypeError} If the value is not a safe integer
52
- */
53
28
  const asSafeInt = castType;
54
- /**
55
- * Namespace providing type-safe operations for SafeInt branded types.
56
- *
57
- * SafeInt represents integers that can be exactly represented in JavaScript's
58
- * number type without precision loss. The range is [±(2^53 - 1)], which covers
59
- * approximately ±9 quadrillion.
60
- *
61
- * All operations automatically clamp results to stay within the safe range,
62
- * preventing precision loss that occurs with larger integers. This makes
63
- * SafeInt ideal for:
64
- *
65
- * - Financial calculations requiring exact cents
66
- * - Database IDs and counters
67
- * - Array indices and sizes
68
- * - Any integer arithmetic requiring precision guarantees
69
- */
70
29
  const SafeInt = {
71
- /**
72
- * Type guard that checks if a value is a safe integer.
73
- *
74
- * @example
75
- *
76
- * ```ts
77
- * assert.isTrue(isSafeInt(Number.MAX_SAFE_INTEGER));
78
- *
79
- * assert.isFalse(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
80
- *
81
- * assert.isTrue(SafeInt.is(Number.MIN_SAFE_INTEGER));
82
- * ```
83
- *
84
- * @param value - The value to check
85
- * @returns `true` if the value is a safe integer, `false` otherwise
86
- * @see {@link isSafeInt} for usage examples
87
- */
88
- is,
89
- /**
90
- * The minimum safe integer value (-(2^53 - 1)).
91
- *
92
- * @readonly
93
- */
94
- MIN_VALUE,
95
- /**
96
- * The maximum safe integer value (2^53 - 1).
97
- *
98
- * @readonly
99
- */
100
- MAX_VALUE,
101
- /**
102
- * Returns the absolute value of a safe integer.
103
- *
104
- * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`, so this
105
- * function clamps the result to maintain the safe integer guarantee.
106
- *
107
- * @example
108
- *
109
- * ```ts
110
- * const negative = asSafeInt(-900);
111
- *
112
- * const absolute = SafeInt.abs(negative);
113
- *
114
- * assert.isTrue(absolute === 900);
115
- *
116
- * assert.isTrue(SafeInt.is(absolute));
117
- * ```
118
- *
119
- * @param a - The safe integer value
120
- * @returns The absolute value as a SafeInt, clamped if necessary
121
- */
122
- abs,
123
- /**
124
- * Returns the minimum value from a list of safe integers.
125
- *
126
- * @example
127
- *
128
- * ```ts
129
- * const smallest = SafeInt.min(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
130
- *
131
- * assert.isTrue(smallest === -14);
132
- * ```
133
- *
134
- * @param values - The safe integers to compare (at least one required)
135
- * @returns The smallest value as a SafeInt
136
- */
137
- min: min_,
138
- /**
139
- * Returns the maximum value from a list of safe integers.
140
- *
141
- * @example
142
- *
143
- * ```ts
144
- * const largest = SafeInt.max(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
145
- *
146
- * assert.isTrue(largest === 99);
147
- * ```
148
- *
149
- * @param values - The safe integers to compare (at least one required)
150
- * @returns The largest value as a SafeInt
151
- */
152
- max: max_,
153
- /**
154
- * Clamps a number to the safe integer range.
155
- *
156
- * @example
157
- *
158
- * ```ts
159
- * const aboveRange = SafeInt.clamp(1e20);
160
- *
161
- * const withinRange = SafeInt.clamp(123);
162
- *
163
- * const belowRange = SafeInt.clamp(-1e20);
164
- *
165
- * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);
166
- *
167
- * assert.isTrue(withinRange === 123);
168
- *
169
- * assert.isTrue(belowRange === Number.MIN_SAFE_INTEGER);
170
- * ```
171
- *
172
- * @param value The number to clamp.
173
- * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a
174
- * SafeInt.
175
- */
176
- clamp,
177
- /**
178
- * Generates a random safe integer within the specified range (inclusive).
179
- *
180
- * The range is inclusive on both ends. If min > max, they are automatically
181
- * swapped.
182
- *
183
- * @example
184
- *
185
- * ```ts
186
- * const min = asSafeInt(-10);
187
- *
188
- * const max = asSafeInt(10);
189
- *
190
- * const randomValue = SafeInt.random(min, max);
191
- *
192
- * assert.isTrue(SafeInt.is(randomValue));
193
- *
194
- * assert.isTrue(randomValue >= -10 && randomValue <= 10);
195
- * ```
196
- *
197
- * @param min - The minimum value (inclusive)
198
- * @param max - The maximum value (inclusive)
199
- * @returns A random SafeInt in the range [min, max]
200
- */
201
- random,
202
- /**
203
- * Raises a SafeInt to the power of another SafeInt.
204
- *
205
- * @example
206
- *
207
- * ```ts
208
- * const base = asSafeInt(3);
209
- *
210
- * const exponent = asSafeInt(5);
211
- *
212
- * const power = SafeInt.pow(base, exponent);
213
- *
214
- * assert.isTrue(power === 243);
215
- *
216
- * assert.isTrue(SafeInt.is(power));
217
- * ```
218
- *
219
- * @param a The base SafeInt.
220
- * @param b The exponent SafeInt.
221
- * @returns `a ** b` clamped to safe integer range as a SafeInt.
222
- */
223
- pow,
224
- /**
225
- * Adds two SafeInt values.
226
- *
227
- * @example
228
- *
229
- * ```ts
230
- * const sum = SafeInt.add(asSafeInt(9), asSafeInt(4));
231
- *
232
- * assert.isTrue(sum === 13);
233
- *
234
- * assert.isTrue(SafeInt.is(sum));
235
- * ```
236
- *
237
- * @param a The first SafeInt.
238
- * @param b The second SafeInt.
239
- * @returns `a + b` clamped to safe integer range as a SafeInt.
240
- */
241
- add,
242
- /**
243
- * Subtracts one SafeInt from another.
244
- *
245
- * @example
246
- *
247
- * ```ts
248
- * const difference = SafeInt.sub(asSafeInt(9), asSafeInt(14));
249
- *
250
- * assert.isTrue(difference === -5);
251
- *
252
- * assert.isTrue(SafeInt.is(difference));
253
- * ```
254
- *
255
- * @param a The minuend SafeInt.
256
- * @param b The subtrahend SafeInt.
257
- * @returns `a - b` clamped to safe integer range as a SafeInt.
258
- */
259
- sub,
260
- /**
261
- * Multiplies two SafeInt values.
262
- *
263
- * @example
264
- *
265
- * ```ts
266
- * const product = SafeInt.mul(asSafeInt(-8), asSafeInt(7));
267
- *
268
- * assert.isTrue(product === -56);
269
- *
270
- * assert.isTrue(SafeInt.is(product));
271
- * ```
272
- *
273
- * @param a The first SafeInt.
274
- * @param b The second SafeInt.
275
- * @returns `a * b` clamped to safe integer range as a SafeInt.
276
- */
277
- mul,
278
- /**
279
- * Divides one SafeInt by another using floor division.
280
- *
281
- * Performs mathematical floor division: `⌊a / b⌋`. The divisor must be
282
- * non-zero (enforced by type constraints).
283
- *
284
- * @example
285
- *
286
- * ```ts
287
- * const quotient = SafeInt.div(asSafeInt(-17), asSafeInt(5));
288
- *
289
- * assert.isTrue(quotient === -4);
290
- *
291
- * assert.isTrue(SafeInt.is(quotient));
292
- * ```
293
- *
294
- * @param a - The dividend
295
- * @param b - The divisor (must be non-zero)
296
- * @returns The integer quotient as a SafeInt
297
- */
298
- div,
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 minimum safe integer value (-(2^53 - 1)).
50
+ *
51
+ * @readonly
52
+ */
53
+ MIN_VALUE,
54
+ /**
55
+ * The maximum safe integer value (2^53 - 1).
56
+ *
57
+ * @readonly
58
+ */
59
+ MAX_VALUE,
60
+ /**
61
+ * Returns the absolute value of a safe integer.
62
+ *
63
+ * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`, so this
64
+ * function clamps the result to maintain the safe integer guarantee.
65
+ *
66
+ * @example
67
+ *
68
+ * ```ts
69
+ * const negative = asSafeInt(-900);
70
+ *
71
+ * const absolute = SafeInt.abs(negative);
72
+ *
73
+ * assert.isTrue(absolute === 900);
74
+ *
75
+ * assert.isTrue(SafeInt.is(absolute));
76
+ * ```
77
+ *
78
+ * @param a - The safe integer value
79
+ * @returns The absolute value as a SafeInt, clamped if necessary
80
+ */
81
+ abs,
82
+ /**
83
+ * Returns the minimum value from a list of safe integers.
84
+ *
85
+ * @example
86
+ *
87
+ * ```ts
88
+ * const smallest = SafeInt.min(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
89
+ *
90
+ * assert.isTrue(smallest === -14);
91
+ * ```
92
+ *
93
+ * @param values - The safe integers to compare (at least one required)
94
+ * @returns The smallest value as a SafeInt
95
+ */
96
+ min: min_,
97
+ /**
98
+ * Returns the maximum value from a list of safe integers.
99
+ *
100
+ * @example
101
+ *
102
+ * ```ts
103
+ * const largest = SafeInt.max(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
104
+ *
105
+ * assert.isTrue(largest === 99);
106
+ * ```
107
+ *
108
+ * @param values - The safe integers to compare (at least one required)
109
+ * @returns The largest value as a SafeInt
110
+ */
111
+ max: max_,
112
+ /**
113
+ * Clamps a number to the safe integer range.
114
+ *
115
+ * @example
116
+ *
117
+ * ```ts
118
+ * const aboveRange = SafeInt.clamp(1e20);
119
+ *
120
+ * const withinRange = SafeInt.clamp(123);
121
+ *
122
+ * const belowRange = SafeInt.clamp(-1e20);
123
+ *
124
+ * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);
125
+ *
126
+ * assert.isTrue(withinRange === 123);
127
+ *
128
+ * assert.isTrue(belowRange === Number.MIN_SAFE_INTEGER);
129
+ * ```
130
+ *
131
+ * @param value The number to clamp.
132
+ * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a
133
+ * SafeInt.
134
+ */
135
+ clamp,
136
+ /**
137
+ * Generates a random safe integer within the specified range (inclusive).
138
+ *
139
+ * The range is inclusive on both ends. If min > max, they are automatically
140
+ * swapped.
141
+ *
142
+ * @example
143
+ *
144
+ * ```ts
145
+ * const min = asSafeInt(-10);
146
+ *
147
+ * const max = asSafeInt(10);
148
+ *
149
+ * const randomValue = SafeInt.random(min, max);
150
+ *
151
+ * assert.isTrue(SafeInt.is(randomValue));
152
+ *
153
+ * assert.isTrue(randomValue >= -10 && randomValue <= 10);
154
+ * ```
155
+ *
156
+ * @param min - The minimum value (inclusive)
157
+ * @param max - The maximum value (inclusive)
158
+ * @returns A random SafeInt in the range [min, max]
159
+ */
160
+ random,
161
+ /**
162
+ * Raises a SafeInt to the power of another SafeInt.
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 SafeInt.
179
+ * @param b The exponent SafeInt.
180
+ * @returns `a ** b` clamped to safe integer range as a SafeInt.
181
+ */
182
+ pow,
183
+ /**
184
+ * Adds two SafeInt values.
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 SafeInt.
197
+ * @param b The second SafeInt.
198
+ * @returns `a + b` clamped to safe integer range as a SafeInt.
199
+ */
200
+ add,
201
+ /**
202
+ * Subtracts one SafeInt from another.
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 minuend SafeInt.
215
+ * @param b The subtrahend SafeInt.
216
+ * @returns `a - b` clamped to safe integer range as a SafeInt.
217
+ */
218
+ sub,
219
+ /**
220
+ * Multiplies two SafeInt values.
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 SafeInt.
233
+ * @param b The second SafeInt.
234
+ * @returns `a * b` clamped to safe integer range as a SafeInt.
235
+ */
236
+ mul,
237
+ /**
238
+ * Divides one SafeInt by another using floor division.
239
+ *
240
+ * Performs mathematical floor division: `⌊a / b⌋`. The divisor must be
241
+ * non-zero (enforced by type constraints).
242
+ *
243
+ * @example
244
+ *
245
+ * ```ts
246
+ * const quotient = SafeInt.div(asSafeInt(-17), asSafeInt(5));
247
+ *
248
+ * assert.isTrue(quotient === -4);
249
+ *
250
+ * assert.isTrue(SafeInt.is(quotient));
251
+ * ```
252
+ *
253
+ * @param a - The dividend
254
+ * @param b - The divisor (must be non-zero)
255
+ * @returns The integer quotient as a SafeInt
256
+ */
257
+ div
299
258
  };
300
259
 
301
260
  export { SafeInt, asSafeInt, isSafeInt };
@@ -1 +1 @@
1
- {"version":3,"file":"safe-int.mjs","sources":["../../../src/number/branded-types/safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAWA,MAAM,iBAAiB,GAAG,gBAAgB;AAE1C,MAAM,EACJ,SAAS,EACT,SAAS,EACT,GAAG,EACH,GAAG,EACH,QAAQ,EACR,KAAK,EACL,GAAG,EACH,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;AACA,IAAA,oBAAoB,EAAE,aAAa;;IAEnC,SAAS,EAAE,MAAM,CAAC,gBAA2B;;IAE7C,SAAS,EAAE,MAAM,CAAC,gBAA4B;IAC9C,iBAAiB;AACT,CAAA,CAAC;AAEX;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,SAAS,GAAG;AAEzB;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,SAAS,GAAG;AAEzB;;;;;;;;;;;;;;;AAeG;AACI,MAAM,OAAO,GAAG;AACrB;;;;;;;;;;;;;;;;AAgBG;IACH,EAAE;AAEF;;;;AAIG;IACH,SAAS;AAET;;;;AAIG;IACH,SAAS;AAET;;;;;;;;;;;;;;;;;;;;AAoBG;IACH,GAAG;AAEH;;;;;;;;;;;;;AAaG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;;;;;;;;;;AAaG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;;;;;;;;;;;;;;;;;;;AAsBG;IACH,KAAK;AAEL;;;;;;;;;;;;;;;;;;;;;;;AAuBG;IACH,MAAM;AAEN;;;;;;;;;;;;;;;;;;;;AAoBG;IACH,GAAG;AAEH;;;;;;;;;;;;;;;;AAgBG;IACH,GAAG;AAEH;;;;;;;;;;;;;;;;AAgBG;IACH,GAAG;AAEH;;;;;;;;;;;;;;;;AAgBG;IACH,GAAG;AAEH;;;;;;;;;;;;;;;;;;;AAmBG;IACH,GAAG;;;;;"}
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 clamp,\n div,\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 * A safe integer is an integer that can be exactly represented in JavaScript\n * without precision loss. The range is [±(2^53 - 1)].\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 a SafeInt branded type.\n *\n * This function validates that the input is a safe integer (within ±(2^53 - 1))\n * and returns it with the SafeInt brand. This ensures type safety for\n * operations that require precise integer arithmetic.\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 branded type\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 SafeInt branded types.\n *\n * SafeInt represents integers that can be exactly represented in JavaScript's\n * number type without precision loss. The range is [±(2^53 - 1)], which covers\n * approximately ±9 quadrillion.\n *\n * All operations automatically clamp results to stay within the safe range,\n * preventing precision loss that occurs with larger integers. This makes\n * SafeInt ideal for:\n *\n * - Financial calculations requiring exact cents\n * - Database IDs and counters\n * - Array indices and sizes\n * - Any integer arithmetic requiring precision guarantees\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 minimum safe integer value (-(2^53 - 1)).\n *\n * @readonly\n */\n MIN_VALUE,\n\n /**\n * The maximum safe integer value (2^53 - 1).\n *\n * @readonly\n */\n MAX_VALUE,\n\n /**\n * Returns the absolute value of a safe integer.\n *\n * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`, so this\n * function clamps the result to maintain the safe integer guarantee.\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 SafeInt, clamped if necessary\n */\n abs,\n\n /**\n * Returns the minimum value from a list of 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 maximum value from a list of 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 * Clamps a number to the safe integer range.\n *\n * @example\n *\n * ```ts\n * const aboveRange = SafeInt.clamp(1e20);\n *\n * const withinRange = SafeInt.clamp(123);\n *\n * const belowRange = SafeInt.clamp(-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 number to clamp.\n * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a\n * SafeInt.\n */\n clamp,\n\n /**\n * Generates a random safe integer within the specified range (inclusive).\n *\n * The range is inclusive on both ends. If min > max, they are automatically\n * swapped.\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 the range [min, max]\n */\n random,\n\n /**\n * Raises a SafeInt to the power of another SafeInt.\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 SafeInt.\n * @param b The exponent SafeInt.\n * @returns `a ** b` clamped to safe integer range as a SafeInt.\n */\n pow,\n\n /**\n * Adds two SafeInt values.\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 SafeInt.\n * @param b The second SafeInt.\n * @returns `a + b` clamped to safe integer range as a SafeInt.\n */\n add,\n\n /**\n * Subtracts one SafeInt from another.\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 minuend SafeInt.\n * @param b The subtrahend SafeInt.\n * @returns `a - b` clamped to safe integer range as a SafeInt.\n */\n sub,\n\n /**\n * Multiplies two SafeInt values.\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 SafeInt.\n * @param b The second SafeInt.\n * @returns `a * b` clamped to safe integer range as a SafeInt.\n */\n mul,\n\n /**\n * Divides one SafeInt by another using floor division.\n *\n * Performs mathematical floor division: `⌊a / b⌋`. The divisor must be\n * non-zero (enforced by type constraints).\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 integer 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,KAAA;AAAA,EACA,GAAA;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;AAqBH,MAAM,SAAA,GAAY;AAuBlB,MAAM,SAAA,GAAY;AAkBlB,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;AAAA,EAOA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,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,EAyBL,KAAA;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,EA0BA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,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;AAAA;AAAA,EAsBA;AACF;;;;"}
@@ -15,14 +15,14 @@ export declare const isSafeUint: (a: number) => a is TtfImported_SafeUint;
15
15
  * @throws {TypeError} If the value is not a non-negative safe integer.
16
16
  */
17
17
  export declare const asSafeUint: <N extends number>(x: N) => number & {
18
- readonly NaNValue: false;
19
- readonly Finite: true;
20
- readonly Int: true;
21
18
  readonly "> -2^16": true;
22
19
  readonly "> -2^32": true;
23
20
  readonly ">= -2^15": true;
24
21
  readonly ">= -2^31": true;
25
22
  readonly ">=0": true;
23
+ readonly Finite: true;
24
+ readonly Int: true;
25
+ readonly NaNValue: false;
26
26
  readonly SafeInt: true;
27
27
  } & Readonly<{
28
28
  'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
@@ -126,16 +126,16 @@ export declare const SafeUint: {
126
126
  * @param b The divisor SafeUint.
127
127
  * @returns `⌊a / b⌋` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
128
128
  */
129
- readonly div: (x: import("ts-type-forge").WithSmallInt<TtfImported_SafeUint>, y: 1 | 2 | 3 | 32 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 10 | 20 | 30 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | import("ts-type-forge").NormalizeBrandUnion<number & {
130
- readonly NaNValue: false;
131
- readonly Finite: true;
132
- readonly Int: true;
129
+ readonly div: (x: import("ts-type-forge").WithSmallInt<TtfImported_SafeUint>, y: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | import("ts-type-forge").NormalizeBrandUnion<number & {
130
+ readonly "!=0": true;
133
131
  readonly "> -2^16": true;
134
132
  readonly "> -2^32": true;
135
133
  readonly ">= -2^15": true;
136
134
  readonly ">= -2^31": true;
137
135
  readonly ">=0": true;
138
- readonly "!=0": true;
136
+ readonly Finite: true;
137
+ readonly Int: true;
138
+ readonly NaNValue: false;
139
139
  readonly SafeInt: true;
140
140
  } & Readonly<{
141
141
  'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;