ts-data-forge 14.10.2 → 14.11.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 (424) hide show
  1. package/README.md +34 -1
  2. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
  3. package/dist/array/impl/array-utils-reducing-value.mjs +4 -3
  4. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  5. package/dist/array/impl/array-utils-slice-clamped.mjs +1 -1
  6. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  7. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  8. package/dist/array/impl/array-utils-slicing.mjs +10 -3
  9. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  10. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  11. package/dist/array/impl/array-utils-transformation.mjs +2 -2
  12. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  13. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  14. package/dist/array/impl/array-utils-validation.mjs +2 -1
  15. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  16. package/dist/built-in-tag.d.mts +22 -0
  17. package/dist/built-in-tag.d.mts.map +1 -0
  18. package/dist/built-in-tag.mjs +34 -0
  19. package/dist/built-in-tag.mjs.map +1 -0
  20. package/dist/collections/stack.mjs +3 -3
  21. package/dist/collections/stack.mjs.map +1 -1
  22. package/dist/iterator/range.d.mts +1 -1
  23. package/dist/iterator/range.d.mts.map +1 -1
  24. package/dist/iterator/range.mjs +5 -2
  25. package/dist/iterator/range.mjs.map +1 -1
  26. package/dist/json/json.d.mts +20 -2
  27. package/dist/json/json.d.mts.map +1 -1
  28. package/dist/json/json.mjs +18 -0
  29. package/dist/json/json.mjs.map +1 -1
  30. package/dist/number/branded-types/finite-number.d.mts +4 -9
  31. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  32. package/dist/number/branded-types/finite-number.mjs +9 -9
  33. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  34. package/dist/number/branded-types/int.d.mts +3 -9
  35. package/dist/number/branded-types/int.d.mts.map +1 -1
  36. package/dist/number/branded-types/int.mjs +9 -10
  37. package/dist/number/branded-types/int.mjs.map +1 -1
  38. package/dist/number/branded-types/int16.d.mts +3 -18
  39. package/dist/number/branded-types/int16.d.mts.map +1 -1
  40. package/dist/number/branded-types/int16.mjs +9 -10
  41. package/dist/number/branded-types/int16.mjs.map +1 -1
  42. package/dist/number/branded-types/int32.d.mts +3 -14
  43. package/dist/number/branded-types/int32.d.mts.map +1 -1
  44. package/dist/number/branded-types/int32.mjs +9 -10
  45. package/dist/number/branded-types/int32.mjs.map +1 -1
  46. package/dist/number/branded-types/negative-finite-number.d.mts +4 -16
  47. package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
  48. package/dist/number/branded-types/negative-finite-number.mjs +9 -10
  49. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  50. package/dist/number/branded-types/negative-int.d.mts +3 -16
  51. package/dist/number/branded-types/negative-int.d.mts.map +1 -1
  52. package/dist/number/branded-types/negative-int.mjs +9 -11
  53. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  54. package/dist/number/branded-types/negative-safe-int.d.mts +3 -17
  55. package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
  56. package/dist/number/branded-types/negative-safe-int.mjs +9 -11
  57. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  58. package/dist/number/branded-types/non-negative-finite-number.d.mts +4 -14
  59. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  60. package/dist/number/branded-types/non-negative-finite-number.mjs +9 -9
  61. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  62. package/dist/number/branded-types/non-negative-int16.d.mts +3 -19
  63. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  64. package/dist/number/branded-types/non-negative-int16.mjs +9 -10
  65. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  66. package/dist/number/branded-types/non-negative-int32.d.mts +3 -17
  67. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  68. package/dist/number/branded-types/non-negative-int32.mjs +9 -10
  69. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  70. package/dist/number/branded-types/non-positive-finite-number.d.mts +4 -14
  71. package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
  72. package/dist/number/branded-types/non-positive-finite-number.mjs +9 -9
  73. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  74. package/dist/number/branded-types/non-positive-int.d.mts +3 -14
  75. package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
  76. package/dist/number/branded-types/non-positive-int.mjs +9 -10
  77. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  78. package/dist/number/branded-types/non-positive-safe-int.d.mts +3 -15
  79. package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
  80. package/dist/number/branded-types/non-positive-safe-int.mjs +9 -10
  81. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  82. package/dist/number/branded-types/non-zero-finite-number.d.mts +4 -10
  83. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  84. package/dist/number/branded-types/non-zero-finite-number.mjs +9 -10
  85. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  86. package/dist/number/branded-types/non-zero-int.d.mts +3 -10
  87. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  88. package/dist/number/branded-types/non-zero-int.mjs +9 -11
  89. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  90. package/dist/number/branded-types/non-zero-int16.d.mts +3 -19
  91. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  92. package/dist/number/branded-types/non-zero-int16.mjs +12 -11
  93. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  94. package/dist/number/branded-types/non-zero-int32.d.mts +3 -15
  95. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  96. package/dist/number/branded-types/non-zero-int32.mjs +12 -11
  97. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  98. package/dist/number/branded-types/non-zero-safe-int.d.mts +6 -14
  99. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  100. package/dist/number/branded-types/non-zero-safe-int.mjs +9 -13
  101. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  102. package/dist/number/branded-types/non-zero-uint16.d.mts +3 -20
  103. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  104. package/dist/number/branded-types/non-zero-uint16.mjs +9 -11
  105. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  106. package/dist/number/branded-types/non-zero-uint32.d.mts +3 -18
  107. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  108. package/dist/number/branded-types/non-zero-uint32.mjs +9 -11
  109. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  110. package/dist/number/branded-types/positive-finite-number.d.mts +4 -16
  111. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  112. package/dist/number/branded-types/positive-finite-number.mjs +9 -9
  113. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  114. package/dist/number/branded-types/positive-int.d.mts +3 -16
  115. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  116. package/dist/number/branded-types/positive-int.mjs +9 -10
  117. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  118. package/dist/number/branded-types/positive-int16.d.mts +3 -21
  119. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  120. package/dist/number/branded-types/positive-int16.mjs +9 -10
  121. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  122. package/dist/number/branded-types/positive-int32.d.mts +3 -19
  123. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  124. package/dist/number/branded-types/positive-int32.mjs +9 -10
  125. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  126. package/dist/number/branded-types/positive-safe-int.d.mts +5 -19
  127. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  128. package/dist/number/branded-types/positive-safe-int.mjs +9 -11
  129. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  130. package/dist/number/branded-types/positive-uint16.d.mts +3 -20
  131. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  132. package/dist/number/branded-types/positive-uint16.mjs +9 -10
  133. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  134. package/dist/number/branded-types/positive-uint32.d.mts +3 -18
  135. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  136. package/dist/number/branded-types/positive-uint32.mjs +9 -10
  137. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  138. package/dist/number/branded-types/safe-int.d.mts +5 -12
  139. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  140. package/dist/number/branded-types/safe-int.mjs +9 -12
  141. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  142. package/dist/number/branded-types/safe-uint.d.mts +3 -15
  143. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  144. package/dist/number/branded-types/safe-uint.mjs +9 -11
  145. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  146. package/dist/number/branded-types/uint.d.mts +3 -14
  147. package/dist/number/branded-types/uint.d.mts.map +1 -1
  148. package/dist/number/branded-types/uint.mjs +9 -10
  149. package/dist/number/branded-types/uint.mjs.map +1 -1
  150. package/dist/number/branded-types/uint16.d.mts +3 -18
  151. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  152. package/dist/number/branded-types/uint16.mjs +9 -10
  153. package/dist/number/branded-types/uint16.mjs.map +1 -1
  154. package/dist/number/branded-types/uint32.d.mts +3 -16
  155. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  156. package/dist/number/branded-types/uint32.mjs +9 -10
  157. package/dist/number/branded-types/uint32.mjs.map +1 -1
  158. package/dist/number/enum/int8.d.mts +13 -15
  159. package/dist/number/enum/int8.d.mts.map +1 -1
  160. package/dist/number/enum/int8.mjs +20 -25
  161. package/dist/number/enum/int8.mjs.map +1 -1
  162. package/dist/number/enum/uint8.d.mts +12 -14
  163. package/dist/number/enum/uint8.d.mts.map +1 -1
  164. package/dist/number/enum/uint8.mjs +18 -23
  165. package/dist/number/enum/uint8.mjs.map +1 -1
  166. package/dist/number/index.d.mts +1 -1
  167. package/dist/number/index.d.mts.map +1 -1
  168. package/dist/number/index.mjs +1 -1
  169. package/dist/number/index.mjs.map +1 -1
  170. package/dist/number/num/impl/index.d.mts +2 -0
  171. package/dist/number/num/impl/index.d.mts.map +1 -0
  172. package/dist/number/num/impl/index.mjs +2 -0
  173. package/dist/number/num/impl/index.mjs.map +1 -0
  174. package/dist/number/num/impl/num.d.mts +531 -0
  175. package/dist/number/num/impl/num.d.mts.map +1 -0
  176. package/dist/number/num/impl/num.mjs +542 -0
  177. package/dist/number/num/impl/num.mjs.map +1 -0
  178. package/dist/number/num/index.d.mts +17 -0
  179. package/dist/number/num/index.d.mts.map +1 -0
  180. package/dist/number/num/index.mjs +17 -0
  181. package/dist/number/num/index.mjs.map +1 -0
  182. package/dist/number/operators/finite-number.d.mts +16 -0
  183. package/dist/number/operators/finite-number.d.mts.map +1 -0
  184. package/dist/number/operators/finite-number.mjs +7 -0
  185. package/dist/number/operators/finite-number.mjs.map +1 -0
  186. package/dist/number/operators/int.d.mts +16 -0
  187. package/dist/number/operators/int.d.mts.map +1 -0
  188. package/dist/number/operators/int.mjs +8 -0
  189. package/dist/number/operators/int.mjs.map +1 -0
  190. package/dist/number/operators/int16.d.mts +25 -0
  191. package/dist/number/operators/int16.d.mts.map +1 -0
  192. package/dist/number/operators/int16.mjs +8 -0
  193. package/dist/number/operators/int16.mjs.map +1 -0
  194. package/dist/number/operators/int32.d.mts +21 -0
  195. package/dist/number/operators/int32.d.mts.map +1 -0
  196. package/dist/number/operators/int32.mjs +8 -0
  197. package/dist/number/operators/int32.mjs.map +1 -0
  198. package/dist/number/operators/int8.d.mts +24 -0
  199. package/dist/number/operators/int8.d.mts.map +1 -0
  200. package/dist/number/operators/int8.mjs +8 -0
  201. package/dist/number/operators/int8.mjs.map +1 -0
  202. package/dist/number/operators/negative-finite-number.d.mts +11 -0
  203. package/dist/number/operators/negative-finite-number.d.mts.map +1 -0
  204. package/dist/number/operators/negative-finite-number.mjs +8 -0
  205. package/dist/number/operators/negative-finite-number.mjs.map +1 -0
  206. package/dist/number/operators/negative-int.d.mts +10 -0
  207. package/dist/number/operators/negative-int.d.mts.map +1 -0
  208. package/dist/number/operators/negative-int.mjs +9 -0
  209. package/dist/number/operators/negative-int.mjs.map +1 -0
  210. package/dist/number/operators/negative-safe-int.d.mts +10 -0
  211. package/dist/number/operators/negative-safe-int.d.mts.map +1 -0
  212. package/dist/number/operators/negative-safe-int.mjs +9 -0
  213. package/dist/number/operators/negative-safe-int.mjs.map +1 -0
  214. package/dist/number/operators/non-negative-finite-number.d.mts +22 -0
  215. package/dist/number/operators/non-negative-finite-number.d.mts.map +1 -0
  216. package/dist/number/operators/non-negative-finite-number.mjs +7 -0
  217. package/dist/number/operators/non-negative-finite-number.mjs.map +1 -0
  218. package/dist/number/operators/non-negative-int16.d.mts +27 -0
  219. package/dist/number/operators/non-negative-int16.d.mts.map +1 -0
  220. package/dist/number/operators/non-negative-int16.mjs +8 -0
  221. package/dist/number/operators/non-negative-int16.mjs.map +1 -0
  222. package/dist/number/operators/non-negative-int32.d.mts +25 -0
  223. package/dist/number/operators/non-negative-int32.d.mts.map +1 -0
  224. package/dist/number/operators/non-negative-int32.mjs +8 -0
  225. package/dist/number/operators/non-negative-int32.mjs.map +1 -0
  226. package/dist/number/operators/non-positive-finite-number.d.mts +11 -0
  227. package/dist/number/operators/non-positive-finite-number.d.mts.map +1 -0
  228. package/dist/number/operators/non-positive-finite-number.mjs +7 -0
  229. package/dist/number/operators/non-positive-finite-number.mjs.map +1 -0
  230. package/dist/number/operators/non-positive-int.d.mts +10 -0
  231. package/dist/number/operators/non-positive-int.d.mts.map +1 -0
  232. package/dist/number/operators/non-positive-int.mjs +8 -0
  233. package/dist/number/operators/non-positive-int.mjs.map +1 -0
  234. package/dist/number/operators/non-positive-safe-int.d.mts +10 -0
  235. package/dist/number/operators/non-positive-safe-int.d.mts.map +1 -0
  236. package/dist/number/operators/non-positive-safe-int.mjs +8 -0
  237. package/dist/number/operators/non-positive-safe-int.mjs.map +1 -0
  238. package/dist/number/operators/non-zero-finite-number.d.mts +16 -0
  239. package/dist/number/operators/non-zero-finite-number.d.mts.map +1 -0
  240. package/dist/number/operators/non-zero-finite-number.mjs +8 -0
  241. package/dist/number/operators/non-zero-finite-number.mjs.map +1 -0
  242. package/dist/number/operators/non-zero-int.d.mts +10 -0
  243. package/dist/number/operators/non-zero-int.d.mts.map +1 -0
  244. package/dist/number/operators/non-zero-int.mjs +9 -0
  245. package/dist/number/operators/non-zero-int.mjs.map +1 -0
  246. package/dist/number/operators/non-zero-int16.d.mts +10 -0
  247. package/dist/number/operators/non-zero-int16.d.mts.map +1 -0
  248. package/dist/number/operators/non-zero-int16.mjs +9 -0
  249. package/dist/number/operators/non-zero-int16.mjs.map +1 -0
  250. package/dist/number/operators/non-zero-int32.d.mts +10 -0
  251. package/dist/number/operators/non-zero-int32.d.mts.map +1 -0
  252. package/dist/number/operators/non-zero-int32.mjs +9 -0
  253. package/dist/number/operators/non-zero-int32.mjs.map +1 -0
  254. package/dist/number/operators/non-zero-safe-int.d.mts +10 -0
  255. package/dist/number/operators/non-zero-safe-int.d.mts.map +1 -0
  256. package/dist/number/operators/non-zero-safe-int.mjs +11 -0
  257. package/dist/number/operators/non-zero-safe-int.mjs.map +1 -0
  258. package/dist/number/operators/non-zero-uint16.d.mts +2 -0
  259. package/dist/number/operators/non-zero-uint16.d.mts.map +1 -0
  260. package/dist/number/operators/non-zero-uint16.mjs +9 -0
  261. package/dist/number/operators/non-zero-uint16.mjs.map +1 -0
  262. package/dist/number/operators/non-zero-uint32.d.mts +2 -0
  263. package/dist/number/operators/non-zero-uint32.d.mts.map +1 -0
  264. package/dist/number/operators/non-zero-uint32.mjs +9 -0
  265. package/dist/number/operators/non-zero-uint32.mjs.map +1 -0
  266. package/dist/number/operators/positive-finite-number.d.mts +23 -0
  267. package/dist/number/operators/positive-finite-number.d.mts.map +1 -0
  268. package/dist/number/operators/positive-finite-number.mjs +7 -0
  269. package/dist/number/operators/positive-finite-number.mjs.map +1 -0
  270. package/dist/number/operators/positive-int.d.mts +23 -0
  271. package/dist/number/operators/positive-int.d.mts.map +1 -0
  272. package/dist/number/operators/positive-int.mjs +8 -0
  273. package/dist/number/operators/positive-int.mjs.map +1 -0
  274. package/dist/number/operators/positive-int16.d.mts +28 -0
  275. package/dist/number/operators/positive-int16.d.mts.map +1 -0
  276. package/dist/number/operators/positive-int16.mjs +8 -0
  277. package/dist/number/operators/positive-int16.mjs.map +1 -0
  278. package/dist/number/operators/positive-int32.d.mts +26 -0
  279. package/dist/number/operators/positive-int32.d.mts.map +1 -0
  280. package/dist/number/operators/positive-int32.mjs +8 -0
  281. package/dist/number/operators/positive-int32.mjs.map +1 -0
  282. package/dist/number/operators/positive-safe-int.d.mts +24 -0
  283. package/dist/number/operators/positive-safe-int.d.mts.map +1 -0
  284. package/dist/number/operators/positive-safe-int.mjs +9 -0
  285. package/dist/number/operators/positive-safe-int.mjs.map +1 -0
  286. package/dist/number/operators/positive-uint16.d.mts +27 -0
  287. package/dist/number/operators/positive-uint16.d.mts.map +1 -0
  288. package/dist/number/operators/positive-uint16.mjs +8 -0
  289. package/dist/number/operators/positive-uint16.mjs.map +1 -0
  290. package/dist/number/operators/positive-uint32.d.mts +25 -0
  291. package/dist/number/operators/positive-uint32.d.mts.map +1 -0
  292. package/dist/number/operators/positive-uint32.mjs +8 -0
  293. package/dist/number/operators/positive-uint32.mjs.map +1 -0
  294. package/dist/number/operators/safe-int.d.mts +17 -0
  295. package/dist/number/operators/safe-int.d.mts.map +1 -0
  296. package/dist/number/operators/safe-int.mjs +10 -0
  297. package/dist/number/operators/safe-int.mjs.map +1 -0
  298. package/dist/number/operators/safe-uint.d.mts +22 -0
  299. package/dist/number/operators/safe-uint.d.mts.map +1 -0
  300. package/dist/number/operators/safe-uint.mjs +9 -0
  301. package/dist/number/operators/safe-uint.mjs.map +1 -0
  302. package/dist/number/operators/uint.d.mts +14 -0
  303. package/dist/number/operators/uint.d.mts.map +1 -0
  304. package/dist/number/operators/uint.mjs +8 -0
  305. package/dist/number/operators/uint.mjs.map +1 -0
  306. package/dist/number/operators/uint16.d.mts +25 -0
  307. package/dist/number/operators/uint16.d.mts.map +1 -0
  308. package/dist/number/operators/uint16.mjs +8 -0
  309. package/dist/number/operators/uint16.mjs.map +1 -0
  310. package/dist/number/operators/uint32.d.mts +23 -0
  311. package/dist/number/operators/uint32.d.mts.map +1 -0
  312. package/dist/number/operators/uint32.mjs +8 -0
  313. package/dist/number/operators/uint32.mjs.map +1 -0
  314. package/dist/number/operators/uint8.d.mts +24 -0
  315. package/dist/number/operators/uint8.d.mts.map +1 -0
  316. package/dist/number/operators/uint8.mjs +8 -0
  317. package/dist/number/operators/uint8.mjs.map +1 -0
  318. package/dist/number/refined-number-utils.d.mts +2 -2
  319. package/dist/number/refined-number-utils.d.mts.map +1 -1
  320. package/dist/number/refined-number-utils.mjs +1 -1
  321. package/dist/number/refined-number-utils.mjs.map +1 -1
  322. package/dist/object/object.mjs +1 -1
  323. package/dist/object/object.mjs.map +1 -1
  324. package/dist/others/fast-deep-equal.mjs +1 -1
  325. package/dist/others/fast-deep-equal.mjs.map +1 -1
  326. package/package.json +23 -10
  327. package/src/array/impl/array-utils-reducing-value.mts +4 -3
  328. package/src/array/impl/array-utils-shape-invariants.test.mts +1 -1
  329. package/src/array/impl/array-utils-slice-clamped.mts +1 -1
  330. package/src/array/impl/array-utils-slicing.mts +12 -3
  331. package/src/array/impl/array-utils-transformation.mts +6 -2
  332. package/src/array/impl/array-utils-transformation.test.mts +44 -1
  333. package/src/array/impl/array-utils-validation.mts +2 -1
  334. package/src/built-in-tag.mts +59 -0
  335. package/src/built-in-tag.test.mts +215 -0
  336. package/src/collections/stack.mts +3 -3
  337. package/src/iterator/range.mts +10 -2
  338. package/src/iterator/range.test.mts +7 -0
  339. package/src/json/json.mts +20 -2
  340. package/src/json/json.test.mts +63 -0
  341. package/src/number/branded-types/finite-number.mts +23 -25
  342. package/src/number/branded-types/int.mts +20 -26
  343. package/src/number/branded-types/int16.mts +21 -26
  344. package/src/number/branded-types/int32.mts +21 -26
  345. package/src/number/branded-types/negative-finite-number.mts +25 -26
  346. package/src/number/branded-types/negative-int.mts +20 -27
  347. package/src/number/branded-types/negative-safe-int.mts +23 -28
  348. package/src/number/branded-types/non-negative-finite-number.mts +24 -25
  349. package/src/number/branded-types/non-negative-int16.mts +23 -26
  350. package/src/number/branded-types/non-negative-int32.mts +23 -26
  351. package/src/number/branded-types/non-positive-finite-number.mts +24 -25
  352. package/src/number/branded-types/non-positive-int.mts +20 -26
  353. package/src/number/branded-types/non-positive-safe-int.mts +21 -26
  354. package/src/number/branded-types/non-zero-finite-number.mts +23 -25
  355. package/src/number/branded-types/non-zero-int.mts +19 -25
  356. package/src/number/branded-types/non-zero-int16.mts +27 -28
  357. package/src/number/branded-types/non-zero-int32.mts +27 -28
  358. package/src/number/branded-types/non-zero-safe-int.mts +25 -35
  359. package/src/number/branded-types/non-zero-uint16.mts +24 -28
  360. package/src/number/branded-types/non-zero-uint32.mts +24 -28
  361. package/src/number/branded-types/positive-finite-number.mts +25 -25
  362. package/src/number/branded-types/positive-int.mts +21 -26
  363. package/src/number/branded-types/positive-int16.mts +23 -26
  364. package/src/number/branded-types/positive-int32.mts +23 -26
  365. package/src/number/branded-types/positive-safe-int.mts +24 -31
  366. package/src/number/branded-types/positive-uint16.mts +23 -26
  367. package/src/number/branded-types/positive-uint32.mts +23 -26
  368. package/src/number/branded-types/safe-int.mts +22 -29
  369. package/src/number/branded-types/safe-uint.mts +21 -27
  370. package/src/number/branded-types/uint.mts +21 -26
  371. package/src/number/branded-types/uint16.mts +21 -26
  372. package/src/number/branded-types/uint32.mts +21 -26
  373. package/src/number/enum/int8.mts +40 -52
  374. package/src/number/enum/uint8.mts +40 -48
  375. package/src/number/index.mts +1 -1
  376. package/src/number/num/impl/index.mts +1 -0
  377. package/src/number/num/impl/num.mts +715 -0
  378. package/src/number/{num.test.mts → num/impl/num.test.mts} +4 -4
  379. package/src/number/num/index.mts +16 -0
  380. package/src/number/num-arithmetic.test.mts +1 -1
  381. package/src/number/operators/finite-number.mts +20 -0
  382. package/src/number/operators/int.mts +20 -0
  383. package/src/number/operators/int16.mts +33 -0
  384. package/src/number/operators/int32.mts +33 -0
  385. package/src/number/operators/int8.mts +18 -0
  386. package/src/number/operators/negative-finite-number.mts +22 -0
  387. package/src/number/operators/negative-int.mts +22 -0
  388. package/src/number/operators/negative-safe-int.mts +32 -0
  389. package/src/number/operators/non-negative-finite-number.mts +32 -0
  390. package/src/number/operators/non-negative-int16.mts +33 -0
  391. package/src/number/operators/non-negative-int32.mts +33 -0
  392. package/src/number/operators/non-positive-finite-number.mts +21 -0
  393. package/src/number/operators/non-positive-int.mts +21 -0
  394. package/src/number/operators/non-positive-safe-int.mts +31 -0
  395. package/src/number/operators/non-zero-finite-number.mts +21 -0
  396. package/src/number/operators/non-zero-int.mts +22 -0
  397. package/src/number/operators/non-zero-int16.mts +32 -0
  398. package/src/number/operators/non-zero-int32.mts +32 -0
  399. package/src/number/operators/non-zero-safe-int.mts +34 -0
  400. package/src/number/operators/non-zero-uint16.mts +32 -0
  401. package/src/number/operators/non-zero-uint32.mts +32 -0
  402. package/src/number/operators/positive-finite-number.mts +32 -0
  403. package/src/number/operators/positive-int.mts +32 -0
  404. package/src/number/operators/positive-int16.mts +33 -0
  405. package/src/number/operators/positive-int32.mts +33 -0
  406. package/src/number/operators/positive-safe-int.mts +34 -0
  407. package/src/number/operators/positive-uint16.mts +33 -0
  408. package/src/number/operators/positive-uint32.mts +33 -0
  409. package/src/number/operators/safe-int.mts +35 -0
  410. package/src/number/operators/safe-uint.mts +33 -0
  411. package/src/number/operators/uint.mts +31 -0
  412. package/src/number/operators/uint16.mts +32 -0
  413. package/src/number/operators/uint32.mts +32 -0
  414. package/src/number/operators/uint8.mts +16 -0
  415. package/src/number/refined-number-utils.mts +4 -4
  416. package/src/object/object.mts +1 -1
  417. package/src/others/fast-deep-equal.mts +1 -1
  418. package/src/others/replace-equal-deep.test.mts +0 -2
  419. package/dist/number/num.d.mts +0 -550
  420. package/dist/number/num.d.mts.map +0 -1
  421. package/dist/number/num.mjs +0 -563
  422. package/dist/number/num.mjs.map +0 -1
  423. package/src/guard/is-error.test.mts +0 -145
  424. package/src/number/num.mts +0 -735
@@ -1,40 +1,26 @@
1
- import type { SafeUint, SafeInt as TtfImported_SafeInt } from 'ts-type-forge';
1
+ import type { SafeInt as TtfImported_SafeInt } from 'ts-type-forge';
2
2
  import { expectType } from '../../expect-type.mjs';
3
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
4
-
5
- export type SafeInt = TtfImported_SafeInt;
6
-
7
- type ElementType = SafeInt;
8
-
9
- const typeNameInMessage = 'a safe integer';
10
-
11
- const {
3
+ import {
12
4
  MAX_VALUE,
13
5
  MIN_VALUE,
14
6
  abs,
15
7
  add,
16
- castType,
17
8
  div,
18
9
  fromNumber,
19
- is,
20
- max: max_,
21
- min: min_,
10
+ max as max_,
11
+ min as min_,
22
12
  mul,
23
13
  pow,
24
14
  random,
25
15
  sub,
26
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
27
- ElementType,
28
- SafeInt,
29
- SafeUint
30
- >({
31
- integerOrSafeInteger: 'SafeInteger',
32
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer
33
- MIN_VALUE: Number.MIN_SAFE_INTEGER as SafeInt,
34
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
35
- MAX_VALUE: Number.MAX_SAFE_INTEGER as SafeUint,
36
- typeNameInMessage,
37
- } as const);
16
+ } from '../operators/safe-int.mjs';
17
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
18
+
19
+ export type SafeInt = TtfImported_SafeInt;
20
+
21
+ type ElementType = SafeInt;
22
+
23
+ const typeNameInMessage = 'a safe integer';
38
24
 
39
25
  /**
40
26
  * Type guard that checks if a value is a safe integer.
@@ -54,7 +40,8 @@ const {
54
40
  * @param value - The value to check
55
41
  * @returns `true` if the value is a safe integer, `false` otherwise
56
42
  */
57
- export const isSafeInt = is;
43
+ export const isSafeInt = (value: number): value is SafeInt =>
44
+ Number.isSafeInteger(value);
58
45
 
59
46
  /**
60
47
  * Casts a `number` to the `SafeInt` branded type.
@@ -76,7 +63,13 @@ export const isSafeInt = is;
76
63
  * @returns The value as a `SafeInt`
77
64
  * @throws {TypeError} If the value is not a safe integer
78
65
  */
79
- export const asSafeInt = castType;
66
+ export const asSafeInt = <N extends number>(value: N): SafeInt & N => {
67
+ if (!isSafeInt(value)) {
68
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
69
+ }
70
+
71
+ return value;
72
+ };
80
73
 
81
74
  /**
82
75
  * Namespace providing type-safe operations for the `SafeInt` branded type.
@@ -102,7 +95,7 @@ export const SafeInt = {
102
95
  * @returns `true` if the value is a safe integer, `false` otherwise
103
96
  * @see {@link isSafeInt} for usage examples
104
97
  */
105
- is,
98
+ is: isSafeInt,
106
99
 
107
100
  /**
108
101
  * The smallest value representable as `SafeInt` (the lower saturation target
@@ -1,38 +1,25 @@
1
1
  import type { SafeUint as TtfImported_SafeUint } from 'ts-type-forge';
2
2
  import { expectType } from '../../expect-type.mjs';
3
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
4
-
5
- export type SafeUint = TtfImported_SafeUint;
6
-
7
- type ElementType = SafeUint;
8
-
9
- const typeNameInMessage = 'a non-negative safe integer';
10
-
11
- const {
3
+ import {
12
4
  MAX_VALUE,
13
5
  MIN_VALUE,
14
6
  add,
15
- castType,
16
7
  div,
17
8
  fromNumber,
18
- is,
19
- max: max_,
20
- min: min_,
9
+ max as max_,
10
+ min as min_,
21
11
  mul,
22
12
  pow,
23
13
  random,
24
14
  sub,
25
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
26
- ElementType,
27
- 0,
28
- SafeUint
29
- >({
30
- integerOrSafeInteger: 'SafeInteger',
31
- MIN_VALUE: 0,
32
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
33
- MAX_VALUE: Number.MAX_SAFE_INTEGER as SafeUint,
34
- typeNameInMessage,
35
- } as const);
15
+ } from '../operators/safe-uint.mjs';
16
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
17
+
18
+ export type SafeUint = TtfImported_SafeUint;
19
+
20
+ type ElementType = SafeUint;
21
+
22
+ const typeNameInMessage = 'a non-negative safe integer';
36
23
 
37
24
  /**
38
25
  * Type guard that checks if a value is a non-negative safe integer.
@@ -43,7 +30,8 @@ const {
43
30
  * @param value - The value to check
44
31
  * @returns `true` if the value is a non-negative safe integer, `false` otherwise
45
32
  */
46
- export const isSafeUint = is;
33
+ export const isSafeUint = (value: number): value is SafeUint =>
34
+ Number.isSafeInteger(value) && value >= 0;
47
35
 
48
36
  /**
49
37
  * Casts a `number` to the `SafeUint` branded type.
@@ -55,7 +43,13 @@ export const isSafeUint = is;
55
43
  * @returns The value as a `SafeUint`
56
44
  * @throws {TypeError} If the value is not a non-negative safe integer
57
45
  */
58
- export const asSafeUint = castType;
46
+ export const asSafeUint = <N extends number>(value: N): SafeUint & N => {
47
+ if (!isSafeUint(value)) {
48
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
49
+ }
50
+
51
+ return value;
52
+ };
59
53
 
60
54
  /**
61
55
  * Namespace providing type-safe operations for the `SafeUint` branded type.
@@ -71,7 +65,7 @@ export const SafeUint = {
71
65
  * @returns `true` if the value is a non-negative safe integer, `false` otherwise
72
66
  * @see {@link isSafeUint} for usage examples
73
67
  */
74
- is,
68
+ is: isSafeUint,
75
69
 
76
70
  /**
77
71
  * The smallest value representable as `SafeUint` (the lower saturation target
@@ -1,36 +1,24 @@
1
1
  import type { Uint as TtfImported_Uint } from 'ts-type-forge';
2
2
  import { expectType } from '../../expect-type.mjs';
3
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
4
-
5
- export type Uint = TtfImported_Uint;
6
-
7
- type ElementType = Uint;
8
-
9
- const typeNameInMessage = 'a non-negative integer';
10
-
11
- const {
3
+ import {
12
4
  MIN_VALUE,
13
5
  add,
14
- castType,
15
6
  div,
16
7
  fromNumber,
17
- is,
18
- max: max_,
19
- min: min_,
8
+ max as max_,
9
+ min as min_,
20
10
  mul,
21
11
  pow,
22
12
  random,
23
13
  sub,
24
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
25
- ElementType,
26
- 0,
27
- number
28
- >({
29
- integerOrSafeInteger: 'Integer',
30
- MIN_VALUE: 0,
31
- MAX_VALUE: Number.MAX_VALUE,
32
- typeNameInMessage,
33
- } as const);
14
+ } from '../operators/uint.mjs';
15
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
16
+
17
+ export type Uint = TtfImported_Uint;
18
+
19
+ type ElementType = Uint;
20
+
21
+ const typeNameInMessage = 'a non-negative integer';
34
22
 
35
23
  /**
36
24
  * Type guard that checks if a value is a non-negative integer.
@@ -52,7 +40,8 @@ const {
52
40
  * @param value - The value to check
53
41
  * @returns `true` if the value is a non-negative integer, `false` otherwise
54
42
  */
55
- export const isUint = is;
43
+ export const isUint = (value: number): value is Uint =>
44
+ Number.isInteger(value) && value >= 0;
56
45
 
57
46
  /**
58
47
  * Casts a `number` to the `Uint` branded type.
@@ -74,7 +63,13 @@ export const isUint = is;
74
63
  * @returns The value as an `Uint`
75
64
  * @throws {TypeError} If the value is not a non-negative integer
76
65
  */
77
- export const asUint = castType;
66
+ export const asUint = <N extends number>(value: N): Uint & N => {
67
+ if (!isUint(value)) {
68
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
69
+ }
70
+
71
+ return value;
72
+ };
78
73
 
79
74
  /**
80
75
  * Namespace providing type-safe operations for the `Uint` branded type.
@@ -104,7 +99,7 @@ export const Uint = {
104
99
  * @returns `true` if the value is a non-negative integer, `false` otherwise
105
100
  * @see {@link isUint} for usage examples
106
101
  */
107
- is,
102
+ is: isUint,
108
103
 
109
104
  /**
110
105
  * The smallest value representable as `Uint` (the lower saturation target of
@@ -1,37 +1,25 @@
1
1
  import type { Uint16 as TtfImported_Uint16 } from 'ts-type-forge';
2
2
  import { expectType } from '../../expect-type.mjs';
3
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
4
-
5
- export type Uint16 = TtfImported_Uint16;
6
-
7
- type ElementType = Uint16;
8
-
9
- const typeNameInMessage = 'a non-negative integer less than 2^16';
10
-
11
- const {
3
+ import {
12
4
  MAX_VALUE,
13
5
  MIN_VALUE,
14
6
  add,
15
- castType,
16
7
  div,
17
8
  fromNumber,
18
- is,
19
- max: max_,
20
- min: min_,
9
+ max as max_,
10
+ min as min_,
21
11
  mul,
22
12
  pow,
23
13
  random,
24
14
  sub,
25
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
26
- ElementType,
27
- 0,
28
- number
29
- >({
30
- integerOrSafeInteger: 'SafeInteger',
31
- MIN_VALUE: 0,
32
- MAX_VALUE: 2 ** 16 - 1,
33
- typeNameInMessage,
34
- } as const);
15
+ } from '../operators/uint16.mjs';
16
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
17
+
18
+ export type Uint16 = TtfImported_Uint16;
19
+
20
+ type ElementType = Uint16;
21
+
22
+ const typeNameInMessage = 'a non-negative integer less than 2^16';
35
23
 
36
24
  /**
37
25
  * Type guard that checks if a value is a non-negative integer less than 2^16.
@@ -42,7 +30,8 @@ const {
42
30
  * @param value - The value to check
43
31
  * @returns `true` if the value is a non-negative integer less than 2^16, `false` otherwise
44
32
  */
45
- export const isUint16 = is;
33
+ export const isUint16 = (value: number): value is Uint16 =>
34
+ Number.isSafeInteger(value) && 0 <= value && value <= 2 ** 16 - 1;
46
35
 
47
36
  /**
48
37
  * Casts a `number` to the `Uint16` branded type.
@@ -54,7 +43,13 @@ export const isUint16 = is;
54
43
  * @returns The value as an `Uint16`
55
44
  * @throws {TypeError} If the value is not a non-negative integer less than 2^16
56
45
  */
57
- export const asUint16 = castType;
46
+ export const asUint16 = <N extends number>(value: N): Uint16 & N => {
47
+ if (!isUint16(value)) {
48
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
49
+ }
50
+
51
+ return value;
52
+ };
58
53
 
59
54
  /**
60
55
  * Namespace providing type-safe operations for the `Uint16` branded type.
@@ -70,7 +65,7 @@ export const Uint16 = {
70
65
  * @returns `true` if the value is a non-negative integer less than 2^16, `false` otherwise
71
66
  * @see {@link isUint16} for usage examples
72
67
  */
73
- is,
68
+ is: isUint16,
74
69
 
75
70
  /**
76
71
  * The smallest value representable as `Uint16` (the lower saturation target
@@ -1,37 +1,25 @@
1
1
  import type { Uint32 as TtfImported_Uint32 } from 'ts-type-forge';
2
2
  import { expectType } from '../../expect-type.mjs';
3
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
4
-
5
- export type Uint32 = TtfImported_Uint32;
6
-
7
- type ElementType = Uint32;
8
-
9
- const typeNameInMessage = 'a non-negative integer less than 2^32';
10
-
11
- const {
3
+ import {
12
4
  MAX_VALUE,
13
5
  MIN_VALUE,
14
6
  add,
15
- castType,
16
7
  div,
17
8
  fromNumber,
18
- is,
19
- max: max_,
20
- min: min_,
9
+ max as max_,
10
+ min as min_,
21
11
  mul,
22
12
  pow,
23
13
  random,
24
14
  sub,
25
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
26
- ElementType,
27
- 0,
28
- number
29
- >({
30
- integerOrSafeInteger: 'SafeInteger',
31
- MIN_VALUE: 0,
32
- MAX_VALUE: 2 ** 32 - 1,
33
- typeNameInMessage,
34
- } as const);
15
+ } from '../operators/uint32.mjs';
16
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
17
+
18
+ export type Uint32 = TtfImported_Uint32;
19
+
20
+ type ElementType = Uint32;
21
+
22
+ const typeNameInMessage = 'a non-negative integer less than 2^32';
35
23
 
36
24
  /**
37
25
  * Type guard that checks if a value is a non-negative integer less than 2^32.
@@ -42,7 +30,8 @@ const {
42
30
  * @param value - The value to check
43
31
  * @returns `true` if the value is a non-negative integer less than 2^32, `false` otherwise
44
32
  */
45
- export const isUint32 = is;
33
+ export const isUint32 = (value: number): value is Uint32 =>
34
+ Number.isSafeInteger(value) && 0 <= value && value <= 2 ** 32 - 1;
46
35
 
47
36
  /**
48
37
  * Casts a `number` to the `Uint32` branded type.
@@ -54,7 +43,13 @@ export const isUint32 = is;
54
43
  * @returns The value as an `Uint32`
55
44
  * @throws {TypeError} If the value is not a non-negative integer less than 2^32
56
45
  */
57
- export const asUint32 = castType;
46
+ export const asUint32 = <N extends number>(value: N): Uint32 & N => {
47
+ if (!isUint32(value)) {
48
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
49
+ }
50
+
51
+ return value;
52
+ };
58
53
 
59
54
  /**
60
55
  * Namespace providing type-safe operations for the `Uint32` branded type.
@@ -70,7 +65,7 @@ export const Uint32 = {
70
65
  * @returns `true` if the value is a non-negative integer less than 2^32, `false` otherwise
71
66
  * @see {@link isUint32} for usage examples
72
67
  */
73
- is,
68
+ is: isUint32,
74
69
 
75
70
  /**
76
71
  * The smallest value representable as `Uint32` (the lower saturation target
@@ -5,47 +5,58 @@ import type {
5
5
  Int8 as TtfImported_Int8,
6
6
  } from 'ts-type-forge';
7
7
  import { expectType } from '../../expect-type.mjs';
8
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
8
+ import {
9
+ MAX_VALUE,
10
+ MIN_VALUE,
11
+ castType as castTypeImpl,
12
+ fromNumber as fromNumberImpl,
13
+ random as randomImpl,
14
+ } from '../operators/int8.mjs';
15
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
9
16
 
10
17
  export type Int8 = TtfImported_Int8;
11
18
 
12
19
  const typeNameInMessage = 'an integer in [-128, 127]';
13
20
 
14
- const {
15
- MAX_VALUE,
16
- MIN_VALUE,
17
- castType: castTypeImpl,
18
- fromNumber: fromNumberImpl,
19
- is: isImpl,
20
- random: randomImpl,
21
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
22
- Int16,
23
- -128,
24
- 127
25
- >({
26
- integerOrSafeInteger: 'SafeInteger',
27
- MIN_VALUE: -128,
28
- MAX_VALUE: 127,
29
- typeNameInMessage,
30
- } as const);
21
+ /**
22
+ * Type guard that checks if a value is an integer in [-128, 127].
23
+ *
24
+ * Returns `true` for an integer in [-128, 127] — a value with no fractional
25
+ * component.
26
+ *
27
+ * @param value - The value to check
28
+ * @returns `true` if the value is an integer in [-128, 127], `false` otherwise
29
+ */
30
+ export const isInt8 = (value: number): value is Int8 =>
31
+ Number.isSafeInteger(value) && -128 <= value && value <= 127;
31
32
 
32
- const is = (x: number): x is Int8 => isImpl(x);
33
+ /**
34
+ * Casts a `number` to the `Int8` branded type.
35
+ *
36
+ * Validates that the value is an integer in [-128, 127] and returns it with the
37
+ * `Int8` brand. Throws a `TypeError` otherwise.
38
+ *
39
+ * @param value - The value to cast
40
+ * @returns The value as an `Int8`
41
+ * @throws {TypeError} If the value is not an integer in [-128, 127]
42
+ */
43
+ export const asInt8 = (value: number): Int8 => {
44
+ if (!isInt8(value)) {
45
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
46
+ }
33
47
 
34
- const castType = (x: number): Int8 =>
35
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
36
- castTypeImpl(x) as Int8;
48
+ return value;
49
+ };
37
50
 
38
- const fromNumber = (a: number): Int8 => castType(fromNumberImpl(a));
51
+ const fromNumber = (a: number): Int8 => asInt8(fromNumberImpl(a));
39
52
 
40
53
  const abs = <N extends Int8>(x: N): AbsoluteValue<N> =>
41
54
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion, @typescript-eslint/no-unnecessary-type-assertion -- unnecessary only under the strict standard library; the stock one types `Math.abs` as returning `number`
42
55
  Math.abs(x) as unknown as AbsoluteValue<N>;
43
56
 
44
- const min_ = (...values: readonly Int8[]): Int8 =>
45
- castType(Math.min(...values));
57
+ const min_ = (...values: readonly Int8[]): Int8 => asInt8(Math.min(...values));
46
58
 
47
- const max_ = (...values: readonly Int8[]): Int8 =>
48
- castType(Math.max(...values));
59
+ const max_ = (...values: readonly Int8[]): Int8 => asInt8(Math.max(...values));
49
60
 
50
61
  const pow = (x: Int8, y: Int8): Int8 => fromNumber(x ** y);
51
62
 
@@ -59,30 +70,7 @@ const div = (x: Int8, y: StrictExclude<Int8, 0>): Int8 =>
59
70
  fromNumber(Math.floor(x / y));
60
71
 
61
72
  const random = (min: Int8, max: Int8): Int8 =>
62
- castType(randomImpl(castTypeImpl(min), castTypeImpl(max)));
63
-
64
- /**
65
- * Type guard that checks if a value is an integer in [-128, 127].
66
- *
67
- * Returns `true` for an integer in [-128, 127] — a value with no fractional
68
- * component.
69
- *
70
- * @param value - The value to check
71
- * @returns `true` if the value is an integer in [-128, 127], `false` otherwise
72
- */
73
- export const isInt8 = is;
74
-
75
- /**
76
- * Casts a `number` to the `Int8` branded type.
77
- *
78
- * Validates that the value is an integer in [-128, 127] and returns it with the
79
- * `Int8` brand. Throws a `TypeError` otherwise.
80
- *
81
- * @param value - The value to cast
82
- * @returns The value as an `Int8`
83
- * @throws {TypeError} If the value is not an integer in [-128, 127]
84
- */
85
- export const asInt8 = castType;
73
+ asInt8(randomImpl(castTypeImpl(min), castTypeImpl(max)));
86
74
 
87
75
  /**
88
76
  * Namespace providing type-safe operations for the `Int8` branded type.
@@ -98,7 +86,7 @@ export const Int8 = {
98
86
  * @returns `true` if the value is an integer in [-128, 127], `false` otherwise
99
87
  * @see {@link isInt8} for usage examples
100
88
  */
101
- is,
89
+ is: isInt8,
102
90
 
103
91
  /**
104
92
  * The smallest value representable as `Int8` (the lower saturation target of
@@ -4,55 +4,18 @@ import type {
4
4
  Uint16,
5
5
  } from 'ts-type-forge';
6
6
  import { expectType } from '../../expect-type.mjs';
7
- import { TsDataForgeInternals } from '../refined-number-utils.mjs';
8
-
9
- export type Uint8 = TtfImported_Uint8;
10
-
11
- const typeNameInMessage = 'an non-negative integer less than 256';
12
-
13
- const {
7
+ import {
14
8
  MAX_VALUE,
15
9
  MIN_VALUE,
16
- castType: castTypeImpl,
17
- fromNumber: fromNumberImpl,
18
- is: isImpl,
19
- random: randomImpl,
20
- } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<Uint16, 0, 255>(
21
- {
22
- integerOrSafeInteger: 'SafeInteger',
23
- MIN_VALUE: 0,
24
- MAX_VALUE: 255,
25
- typeNameInMessage,
26
- } as const,
27
- );
28
-
29
- const is = (x: number): x is Uint8 => isImpl(x);
30
-
31
- const castType = (x: number): Uint8 =>
32
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
33
- castTypeImpl(x) as Uint8;
34
-
35
- const fromNumber = (a: number): Uint8 => castType(fromNumberImpl(a));
36
-
37
- const min_ = (...values: readonly Uint8[]): Uint8 =>
38
- castType(Math.min(...values));
39
-
40
- const max_ = (...values: readonly Uint8[]): Uint8 =>
41
- castType(Math.max(...values));
42
-
43
- const pow = (x: Uint8, y: Uint8): Uint8 => fromNumber(x ** y);
10
+ castType as castTypeImpl,
11
+ fromNumber as fromNumberImpl,
12
+ random as randomImpl,
13
+ } from '../operators/uint8.mjs';
14
+ import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
44
15
 
45
- const add = (x: Uint8, y: Uint8): Uint8 => fromNumber(x + y);
46
-
47
- const sub = (x: Uint8, y: Uint8): Uint8 => fromNumber(x - y);
48
-
49
- const mul = (x: Uint8, y: Uint8): Uint8 => fromNumber(x * y);
50
-
51
- const div = (x: Uint8, y: StrictExclude<Uint8, 0>): Uint8 =>
52
- fromNumber(Math.floor(x / y));
16
+ export type Uint8 = TtfImported_Uint8;
53
17
 
54
- const random = (min: Uint8, max: Uint8): Uint8 =>
55
- castType(randomImpl(castTypeImpl(min), castTypeImpl(max)));
18
+ const typeNameInMessage = 'an non-negative integer less than 256';
56
19
 
57
20
  /**
58
21
  * Type guard that checks if a value is an non-negative integer less than 256.
@@ -63,7 +26,8 @@ const random = (min: Uint8, max: Uint8): Uint8 =>
63
26
  * @param value - The value to check
64
27
  * @returns `true` if the value is an non-negative integer less than 256, `false` otherwise
65
28
  */
66
- export const isUint8 = is;
29
+ export const isUint8 = (value: number): value is Uint8 =>
30
+ Number.isSafeInteger(value) && 0 <= value && value <= 255;
67
31
 
68
32
  /**
69
33
  * Casts a `number` to the `Uint8` branded type.
@@ -75,7 +39,35 @@ export const isUint8 = is;
75
39
  * @returns The value as an `Uint8`
76
40
  * @throws {TypeError} If the value is not an non-negative integer less than 256
77
41
  */
78
- export const asUint8 = castType;
42
+ export const asUint8 = (value: number): Uint8 => {
43
+ if (!isUint8(value)) {
44
+ throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
45
+ }
46
+
47
+ return value;
48
+ };
49
+
50
+ const fromNumber = (a: number): Uint8 => asUint8(fromNumberImpl(a));
51
+
52
+ const min_ = (...values: readonly Uint8[]): Uint8 =>
53
+ asUint8(Math.min(...values));
54
+
55
+ const max_ = (...values: readonly Uint8[]): Uint8 =>
56
+ asUint8(Math.max(...values));
57
+
58
+ const pow = (x: Uint8, y: Uint8): Uint8 => fromNumber(x ** y);
59
+
60
+ const add = (x: Uint8, y: Uint8): Uint8 => fromNumber(x + y);
61
+
62
+ const sub = (x: Uint8, y: Uint8): Uint8 => fromNumber(x - y);
63
+
64
+ const mul = (x: Uint8, y: Uint8): Uint8 => fromNumber(x * y);
65
+
66
+ const div = (x: Uint8, y: StrictExclude<Uint8, 0>): Uint8 =>
67
+ fromNumber(Math.floor(x / y));
68
+
69
+ const random = (min: Uint8, max: Uint8): Uint8 =>
70
+ asUint8(randomImpl(castTypeImpl(min), castTypeImpl(max)));
79
71
 
80
72
  /**
81
73
  * Namespace providing type-safe operations for the `Uint8` branded type.
@@ -91,7 +83,7 @@ export const Uint8 = {
91
83
  * @returns `true` if the value is an non-negative integer less than 256, `false` otherwise
92
84
  * @see {@link isUint8} for usage examples
93
85
  */
94
- is,
86
+ is: isUint8,
95
87
 
96
88
  /**
97
89
  * The smallest value representable as `Uint8` (the lower saturation target of
@@ -1,5 +1,5 @@
1
1
  export * from './branded-types/index.mjs';
2
2
  export * from './enum/index.mjs';
3
3
  export * from './num-arithmetic-types.mjs';
4
- export * from './num.mjs';
4
+ export * from './num/index.mjs';
5
5
  export * from './refined-number-utils.mjs';
@@ -0,0 +1 @@
1
+ export * from './num.mjs';