ts-data-forge 10.0.0 → 11.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 (249) hide show
  1. package/dist/array/impl/array-utils-creation.d.mts +3 -3
  2. package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
  3. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  4. package/dist/array/impl/array-utils-element-access.d.mts +4 -4
  5. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  6. package/dist/{guard/as-length-bounded-array.d.mts → array/impl/array-utils-length-bounded-array-cast.d.mts} +9 -9
  7. package/dist/array/impl/array-utils-length-bounded-array-cast.d.mts.map +1 -0
  8. package/dist/{guard/as-length-bounded-array.mjs → array/impl/array-utils-length-bounded-array-cast.mjs} +2 -2
  9. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs.map +1 -0
  10. package/dist/{guard/is-length-bounded-array.d.mts → array/impl/array-utils-length-bounded-array-guard.d.mts} +13 -13
  11. package/dist/array/impl/array-utils-length-bounded-array-guard.d.mts.map +1 -0
  12. package/dist/{guard/is-length-bounded-array.mjs → array/impl/array-utils-length-bounded-array-guard.mjs} +1 -1
  13. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -0
  14. package/dist/array/impl/array-utils-modification.d.mts +9 -9
  15. package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
  16. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  17. package/dist/array/impl/array-utils-reducing-value.d.mts +9 -9
  18. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-size.d.mts +3 -3
  20. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  21. package/dist/array/impl/array-utils-slicing.d.mts +9 -9
  22. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  23. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  24. package/dist/array/impl/array-utils-transformation.d.mts +16 -10
  25. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  26. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  27. package/dist/array/impl/index.d.mts +2 -0
  28. package/dist/array/impl/index.d.mts.map +1 -1
  29. package/dist/array/impl/index.mjs +2 -0
  30. package/dist/array/impl/index.mjs.map +1 -1
  31. package/dist/entry-point.mjs +1 -3
  32. package/dist/entry-point.mjs.map +1 -1
  33. package/dist/guard/index.d.mts +0 -3
  34. package/dist/guard/index.d.mts.map +1 -1
  35. package/dist/guard/index.mjs +0 -3
  36. package/dist/guard/index.mjs.map +1 -1
  37. package/dist/index.d.mts +1 -0
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs +1 -3
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/number/branded-types/finite-number.d.mts +47 -61
  42. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  43. package/dist/number/branded-types/finite-number.mjs +37 -41
  44. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  45. package/dist/number/branded-types/int.d.mts +40 -46
  46. package/dist/number/branded-types/int.d.mts.map +1 -1
  47. package/dist/number/branded-types/int.mjs +29 -31
  48. package/dist/number/branded-types/int.mjs.map +1 -1
  49. package/dist/number/branded-types/int16.d.mts +65 -58
  50. package/dist/number/branded-types/int16.d.mts.map +1 -1
  51. package/dist/number/branded-types/int16.mjs +49 -45
  52. package/dist/number/branded-types/int16.mjs.map +1 -1
  53. package/dist/number/branded-types/int32.d.mts +65 -58
  54. package/dist/number/branded-types/int32.d.mts.map +1 -1
  55. package/dist/number/branded-types/int32.mjs +49 -45
  56. package/dist/number/branded-types/int32.mjs.map +1 -1
  57. package/dist/number/branded-types/negative-finite-number.d.mts +68 -59
  58. package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
  59. package/dist/number/branded-types/negative-finite-number.mjs +52 -46
  60. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  61. package/dist/number/branded-types/negative-int.d.mts +60 -48
  62. package/dist/number/branded-types/negative-int.d.mts.map +1 -1
  63. package/dist/number/branded-types/negative-int.mjs +40 -36
  64. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  65. package/dist/number/branded-types/negative-safe-int.d.mts +57 -56
  66. package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
  67. package/dist/number/branded-types/negative-safe-int.mjs +40 -41
  68. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  69. package/dist/number/branded-types/non-negative-finite-number.d.mts +74 -64
  70. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  71. package/dist/number/branded-types/non-negative-finite-number.mjs +58 -51
  72. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  73. package/dist/number/branded-types/non-negative-int16.d.mts +64 -57
  74. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  75. package/dist/number/branded-types/non-negative-int16.mjs +47 -43
  76. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  77. package/dist/number/branded-types/non-negative-int32.d.mts +64 -58
  78. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  79. package/dist/number/branded-types/non-negative-int32.mjs +47 -44
  80. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  81. package/dist/number/branded-types/non-positive-finite-number.d.mts +64 -54
  82. package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
  83. package/dist/number/branded-types/non-positive-finite-number.mjs +48 -41
  84. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  85. package/dist/number/branded-types/non-positive-int.d.mts +41 -146
  86. package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
  87. package/dist/number/branded-types/non-positive-int.mjs +27 -107
  88. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  89. package/dist/number/branded-types/non-positive-safe-int.d.mts +54 -53
  90. package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
  91. package/dist/number/branded-types/non-positive-safe-int.mjs +37 -39
  92. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  93. package/dist/number/branded-types/non-zero-finite-number.d.mts +62 -49
  94. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  95. package/dist/number/branded-types/non-zero-finite-number.mjs +46 -37
  96. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  97. package/dist/number/branded-types/non-zero-int.d.mts +51 -38
  98. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  99. package/dist/number/branded-types/non-zero-int.mjs +31 -27
  100. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  101. package/dist/number/branded-types/non-zero-int16.d.mts +52 -53
  102. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  103. package/dist/number/branded-types/non-zero-int16.mjs +36 -39
  104. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  105. package/dist/number/branded-types/non-zero-int32.d.mts +52 -54
  106. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  107. package/dist/number/branded-types/non-zero-int32.mjs +36 -40
  108. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  109. package/dist/number/branded-types/non-zero-safe-int.d.mts +53 -54
  110. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  111. package/dist/number/branded-types/non-zero-safe-int.mjs +36 -40
  112. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  113. package/dist/number/branded-types/non-zero-uint16.d.mts +52 -53
  114. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  115. package/dist/number/branded-types/non-zero-uint16.mjs +35 -39
  116. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  117. package/dist/number/branded-types/non-zero-uint32.d.mts +52 -53
  118. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  119. package/dist/number/branded-types/non-zero-uint32.mjs +35 -39
  120. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  121. package/dist/number/branded-types/positive-finite-number.d.mts +74 -63
  122. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  123. package/dist/number/branded-types/positive-finite-number.mjs +58 -50
  124. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  125. package/dist/number/branded-types/positive-int.d.mts +46 -68
  126. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  127. package/dist/number/branded-types/positive-int.mjs +34 -49
  128. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  129. package/dist/number/branded-types/positive-int16.d.mts +61 -57
  130. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  131. package/dist/number/branded-types/positive-int16.mjs +44 -43
  132. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  133. package/dist/number/branded-types/positive-int32.d.mts +61 -57
  134. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  135. package/dist/number/branded-types/positive-int32.mjs +44 -43
  136. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  137. package/dist/number/branded-types/positive-safe-int.d.mts +62 -57
  138. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  139. package/dist/number/branded-types/positive-safe-int.mjs +45 -43
  140. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  141. package/dist/number/branded-types/positive-uint16.d.mts +61 -57
  142. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  143. package/dist/number/branded-types/positive-uint16.mjs +44 -43
  144. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  145. package/dist/number/branded-types/positive-uint32.d.mts +61 -58
  146. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  147. package/dist/number/branded-types/positive-uint32.mjs +44 -44
  148. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  149. package/dist/number/branded-types/safe-int.d.mts +43 -62
  150. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  151. package/dist/number/branded-types/safe-int.mjs +35 -42
  152. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  153. package/dist/number/branded-types/safe-uint.d.mts +62 -57
  154. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  155. package/dist/number/branded-types/safe-uint.mjs +46 -44
  156. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  157. package/dist/number/branded-types/uint.d.mts +63 -50
  158. package/dist/number/branded-types/uint.d.mts.map +1 -1
  159. package/dist/number/branded-types/uint.mjs +42 -39
  160. package/dist/number/branded-types/uint.mjs.map +1 -1
  161. package/dist/number/branded-types/uint16.d.mts +60 -58
  162. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  163. package/dist/number/branded-types/uint16.mjs +44 -43
  164. package/dist/number/branded-types/uint16.mjs.map +1 -1
  165. package/dist/number/branded-types/uint32.d.mts +59 -55
  166. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  167. package/dist/number/branded-types/uint32.mjs +42 -42
  168. package/dist/number/branded-types/uint32.mjs.map +1 -1
  169. package/dist/number/enum/int8.d.mts +56 -65
  170. package/dist/number/enum/int8.d.mts.map +1 -1
  171. package/dist/number/enum/int8.mjs +44 -43
  172. package/dist/number/enum/int8.mjs.map +1 -1
  173. package/dist/number/enum/uint8.d.mts +60 -58
  174. package/dist/number/enum/uint8.d.mts.map +1 -1
  175. package/dist/number/enum/uint8.mjs +44 -43
  176. package/dist/number/enum/uint8.mjs.map +1 -1
  177. package/dist/string/index.d.mts +2 -0
  178. package/dist/string/index.d.mts.map +1 -0
  179. package/dist/string/index.mjs +2 -0
  180. package/dist/string/index.mjs.map +1 -0
  181. package/dist/string/str.d.mts +273 -0
  182. package/dist/string/str.d.mts.map +1 -0
  183. package/dist/string/str.mjs +42 -0
  184. package/dist/string/str.mjs.map +1 -0
  185. package/package.json +31 -92
  186. package/src/array/impl/array-utils-creation.mts +2 -1
  187. package/src/array/impl/array-utils-element-access.mts +3 -3
  188. package/src/array/impl/array-utils-element-access.test.mts +3 -3
  189. package/src/{guard/as-length-bounded-array.mts → array/impl/array-utils-length-bounded-array-cast.mts} +9 -9
  190. package/src/{guard/as-length-bounded-array.test.mts → array/impl/array-utils-length-bounded-array-cast.test.mts} +2 -2
  191. package/src/{guard/is-length-bounded-array.mts → array/impl/array-utils-length-bounded-array-guard.mts} +12 -12
  192. package/src/{guard/is-length-bounded-array.test.mts → array/impl/array-utils-length-bounded-array-guard.test.mts} +2 -2
  193. package/src/array/impl/array-utils-modification.mts +9 -8
  194. package/src/array/impl/array-utils-modification.test.mts +6 -1
  195. package/src/array/impl/array-utils-reducing-value.mts +9 -9
  196. package/src/array/impl/array-utils-size.mts +2 -2
  197. package/src/array/impl/array-utils-slicing.mts +24 -13
  198. package/src/array/impl/array-utils-transformation.mts +18 -12
  199. package/src/array/impl/array-utils-transformation.test.mts +12 -12
  200. package/src/array/impl/index.mts +2 -0
  201. package/src/guard/index.mts +0 -3
  202. package/src/index.mts +1 -0
  203. package/src/number/branded-types/finite-number.mts +47 -61
  204. package/src/number/branded-types/int.mts +40 -46
  205. package/src/number/branded-types/int16.mts +65 -58
  206. package/src/number/branded-types/int32.mts +65 -58
  207. package/src/number/branded-types/negative-finite-number.mts +68 -68
  208. package/src/number/branded-types/negative-int.mts +60 -57
  209. package/src/number/branded-types/negative-safe-int.mts +57 -65
  210. package/src/number/branded-types/non-negative-finite-number.mts +74 -64
  211. package/src/number/branded-types/non-negative-int16.mts +64 -57
  212. package/src/number/branded-types/non-negative-int32.mts +64 -58
  213. package/src/number/branded-types/non-positive-finite-number.mts +64 -54
  214. package/src/number/branded-types/non-positive-int.mts +41 -146
  215. package/src/number/branded-types/non-positive-safe-int.mts +54 -53
  216. package/src/number/branded-types/non-zero-finite-number.mts +62 -51
  217. package/src/number/branded-types/non-zero-int.mts +51 -38
  218. package/src/number/branded-types/non-zero-int16.mts +52 -53
  219. package/src/number/branded-types/non-zero-int32.mts +52 -54
  220. package/src/number/branded-types/non-zero-safe-int.mts +53 -54
  221. package/src/number/branded-types/non-zero-uint16.mts +52 -53
  222. package/src/number/branded-types/non-zero-uint32.mts +52 -53
  223. package/src/number/branded-types/positive-finite-number.mts +74 -63
  224. package/src/number/branded-types/positive-int.mts +46 -68
  225. package/src/number/branded-types/positive-int16.mts +61 -57
  226. package/src/number/branded-types/positive-int32.mts +61 -57
  227. package/src/number/branded-types/positive-safe-int.mts +62 -57
  228. package/src/number/branded-types/positive-uint16.mts +61 -57
  229. package/src/number/branded-types/positive-uint32.mts +61 -58
  230. package/src/number/branded-types/safe-int.mts +43 -62
  231. package/src/number/branded-types/safe-uint.mts +62 -57
  232. package/src/number/branded-types/uint.mts +63 -50
  233. package/src/number/branded-types/uint16.mts +60 -58
  234. package/src/number/branded-types/uint32.mts +59 -55
  235. package/src/number/enum/int8.mts +56 -65
  236. package/src/number/enum/uint8.mts +60 -58
  237. package/src/string/index.mts +1 -0
  238. package/src/string/str.mts +371 -0
  239. package/src/string/str.test.mts +215 -0
  240. package/dist/guard/as-length-bounded-array.d.mts.map +0 -1
  241. package/dist/guard/as-length-bounded-array.mjs.map +0 -1
  242. package/dist/guard/is-length-bounded-array.d.mts.map +0 -1
  243. package/dist/guard/is-length-bounded-array.mjs.map +0 -1
  244. package/dist/guard/is-length-bounded-string.d.mts +0 -163
  245. package/dist/guard/is-length-bounded-string.d.mts.map +0 -1
  246. package/dist/guard/is-length-bounded-string.mjs +0 -7
  247. package/dist/guard/is-length-bounded-string.mjs.map +0 -1
  248. package/src/guard/is-length-bounded-string.mts +0 -199
  249. package/src/guard/is-length-bounded-string.test.mts +0 -170
@@ -42,8 +42,7 @@ const {
42
42
  /**
43
43
  * Type guard that checks if a value is a safe integer.
44
44
  *
45
- * A safe integer is an integer that can be exactly represented in JavaScript
46
- * without precision loss. The range is [±(2^53 - 1)].
45
+ * Returns `true` for a safe integer — a value with no fractional component.
47
46
  *
48
47
  * @example
49
48
  *
@@ -61,11 +60,10 @@ const {
61
60
  export const isSafeInt = is;
62
61
 
63
62
  /**
64
- * Casts a number to a SafeInt branded type.
63
+ * Casts a `number` to the `SafeInt` branded type.
65
64
  *
66
- * This function validates that the input is a safe integer (within ±(2^53 - 1))
67
- * and returns it with the SafeInt brand. This ensures type safety for
68
- * operations that require precise integer arithmetic.
65
+ * Validates that the value is a safe integer and returns it with the `SafeInt`
66
+ * brand. Throws a `TypeError` otherwise.
69
67
  *
70
68
  * @example
71
69
  *
@@ -78,26 +76,16 @@ export const isSafeInt = is;
78
76
  * ```
79
77
  *
80
78
  * @param value - The value to cast
81
- * @returns The value as a SafeInt branded type
79
+ * @returns The value as a `SafeInt`
82
80
  * @throws {TypeError} If the value is not a safe integer
83
81
  */
84
82
  export const asSafeInt = castType;
85
83
 
86
84
  /**
87
- * Namespace providing type-safe operations for SafeInt branded types.
85
+ * Namespace providing type-safe operations for the `SafeInt` branded type.
88
86
  *
89
- * SafeInt represents integers that can be exactly represented in JavaScript's
90
- * number type without precision loss. The range is [±(2^53 - 1)], which covers
91
- * approximately ±9 quadrillion.
92
- *
93
- * All operations automatically clamp results to stay within the safe range,
94
- * preventing precision loss that occurs with larger integers. This makes
95
- * SafeInt ideal for:
96
- *
97
- * - Financial calculations requiring exact cents
98
- * - Database IDs and counters
99
- * - Array indices and sizes
100
- * - Any integer arithmetic requiring precision guarantees
87
+ * The `SafeInt` type represents a safe integer. Division (`div`) uses floor
88
+ * division.
101
89
  */
102
90
  export const SafeInt = {
103
91
  /**
@@ -120,24 +108,19 @@ export const SafeInt = {
120
108
  is,
121
109
 
122
110
  /**
123
- * The minimum safe integer value (-(2^53 - 1)).
124
- *
125
- * @readonly
111
+ * The smallest value representable as `SafeInt`.
126
112
  */
127
113
  MIN_VALUE,
128
114
 
129
115
  /**
130
- * The maximum safe integer value (2^53 - 1).
131
- *
132
- * @readonly
116
+ * The largest value representable as `SafeInt`.
133
117
  */
134
118
  MAX_VALUE,
135
119
 
136
120
  /**
137
121
  * Returns the absolute value of a safe integer.
138
122
  *
139
- * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`, so this
140
- * function clamps the result to maintain the safe integer guarantee.
123
+ * The result is non-negative and keeps the `SafeInt` brand.
141
124
  *
142
125
  * @example
143
126
  *
@@ -152,12 +135,12 @@ export const SafeInt = {
152
135
  * ```
153
136
  *
154
137
  * @param a - The safe integer value
155
- * @returns The absolute value as a SafeInt, clamped if necessary
138
+ * @returns The absolute value as a non-negative `SafeInt`
156
139
  */
157
140
  abs,
158
141
 
159
142
  /**
160
- * Returns the minimum value from a list of safe integers.
143
+ * Returns the smallest of the given safe integers.
161
144
  *
162
145
  * @example
163
146
  *
@@ -168,12 +151,12 @@ export const SafeInt = {
168
151
  * ```
169
152
  *
170
153
  * @param values - The safe integers to compare (at least one required)
171
- * @returns The smallest value as a SafeInt
154
+ * @returns The smallest value as a `SafeInt`
172
155
  */
173
156
  min: min_,
174
157
 
175
158
  /**
176
- * Returns the maximum value from a list of safe integers.
159
+ * Returns the largest of the given safe integers.
177
160
  *
178
161
  * @example
179
162
  *
@@ -184,12 +167,13 @@ export const SafeInt = {
184
167
  * ```
185
168
  *
186
169
  * @param values - The safe integers to compare (at least one required)
187
- * @returns The largest value as a SafeInt
170
+ * @returns The largest value as a `SafeInt`
188
171
  */
189
172
  max: max_,
190
173
 
191
174
  /**
192
- * Clamps a number to the safe integer range.
175
+ * Clamps a `number` into the `SafeInt` range, rounding to the nearest integer
176
+ * and constraining the result to `[MIN_VALUE, MAX_VALUE]`.
193
177
  *
194
178
  * @example
195
179
  *
@@ -207,17 +191,15 @@ export const SafeInt = {
207
191
  * assert.isTrue(belowRange === Number.MIN_SAFE_INTEGER);
208
192
  * ```
209
193
  *
210
- * @param value The number to clamp.
211
- * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a
212
- * SafeInt.
194
+ * @param value - The value to clamp
195
+ * @returns The clamped value as a `SafeInt`
213
196
  */
214
197
  clamp,
215
198
 
216
199
  /**
217
- * Generates a random safe integer within the specified range (inclusive).
200
+ * Generates a random `SafeInt` within the given range.
218
201
  *
219
- * The range is inclusive on both ends. If min > max, they are automatically
220
- * swapped.
202
+ * The range is inclusive on both ends.
221
203
  *
222
204
  * @example
223
205
  *
@@ -235,12 +217,13 @@ export const SafeInt = {
235
217
  *
236
218
  * @param min - The minimum value (inclusive)
237
219
  * @param max - The maximum value (inclusive)
238
- * @returns A random SafeInt in the range [min, max]
220
+ * @returns A random `SafeInt` in `[min, max]`
239
221
  */
240
222
  random,
241
223
 
242
224
  /**
243
- * Raises a SafeInt to the power of another SafeInt.
225
+ * Raises `a` to the power `b`, returning `a ** b` as a `SafeInt` (floored to
226
+ * an integer).
244
227
  *
245
228
  * @example
246
229
  *
@@ -256,14 +239,14 @@ export const SafeInt = {
256
239
  * assert.isTrue(SafeInt.is(power));
257
240
  * ```
258
241
  *
259
- * @param a The base SafeInt.
260
- * @param b The exponent SafeInt.
261
- * @returns `a ** b` clamped to safe integer range as a SafeInt.
242
+ * @param a - The base safe integer
243
+ * @param b - The exponent safe integer
244
+ * @returns `a ** b` as a `SafeInt`
262
245
  */
263
246
  pow,
264
247
 
265
248
  /**
266
- * Adds two SafeInt values.
249
+ * Adds two safe integers, returning `a + b` as a `SafeInt`.
267
250
  *
268
251
  * @example
269
252
  *
@@ -275,14 +258,14 @@ export const SafeInt = {
275
258
  * assert.isTrue(SafeInt.is(sum));
276
259
  * ```
277
260
  *
278
- * @param a The first SafeInt.
279
- * @param b The second SafeInt.
280
- * @returns `a + b` clamped to safe integer range as a SafeInt.
261
+ * @param a - The first safe integer
262
+ * @param b - The second safe integer
263
+ * @returns The sum of `a` and `b` as a `SafeInt`
281
264
  */
282
265
  add,
283
266
 
284
267
  /**
285
- * Subtracts one SafeInt from another.
268
+ * Subtracts two safe integers, returning `a - b` as a `SafeInt`.
286
269
  *
287
270
  * @example
288
271
  *
@@ -294,14 +277,14 @@ export const SafeInt = {
294
277
  * assert.isTrue(SafeInt.is(difference));
295
278
  * ```
296
279
  *
297
- * @param a The minuend SafeInt.
298
- * @param b The subtrahend SafeInt.
299
- * @returns `a - b` clamped to safe integer range as a SafeInt.
280
+ * @param a - The first safe integer
281
+ * @param b - The second safe integer
282
+ * @returns The difference of `a` and `b` as a `SafeInt`
300
283
  */
301
284
  sub,
302
285
 
303
286
  /**
304
- * Multiplies two SafeInt values.
287
+ * Multiplies two safe integers, returning `a * b` as a `SafeInt`.
305
288
  *
306
289
  * @example
307
290
  *
@@ -313,17 +296,15 @@ export const SafeInt = {
313
296
  * assert.isTrue(SafeInt.is(product));
314
297
  * ```
315
298
  *
316
- * @param a The first SafeInt.
317
- * @param b The second SafeInt.
318
- * @returns `a * b` clamped to safe integer range as a SafeInt.
299
+ * @param a - The first safe integer
300
+ * @param b - The second safe integer
301
+ * @returns The product of `a` and `b` as a `SafeInt`
319
302
  */
320
303
  mul,
321
304
 
322
305
  /**
323
- * Divides one SafeInt by another using floor division.
324
- *
325
- * Performs mathematical floor division: `⌊a / b⌋`. The divisor must be
326
- * non-zero (enforced by type constraints).
306
+ * Divides two safe integers using floor division (`⌊a / b⌋`): the result is
307
+ * `a / b` rounded toward negative infinity, as a `SafeInt`.
327
308
  *
328
309
  * @example
329
310
  *
@@ -337,7 +318,7 @@ export const SafeInt = {
337
318
  *
338
319
  * @param a - The dividend
339
320
  * @param b - The divisor (must be non-zero)
340
- * @returns The integer quotient as a SafeInt
321
+ * @returns The floored quotient as a `SafeInt`
341
322
  */
342
323
  div,
343
324
  } as const;
@@ -35,131 +35,136 @@ const {
35
35
  } as const);
36
36
 
37
37
  /**
38
- * Checks if a number is a SafeUint.
38
+ * Type guard that checks if a value is a non-negative safe integer.
39
39
  *
40
- * @param value The value to check.
41
- * @returns `true` if the value is a SafeUint, `false` otherwise.
40
+ * Returns `true` for a non-negative safe integer — a value with no fractional
41
+ * component.
42
+ *
43
+ * @param value - The value to check
44
+ * @returns `true` if the value is a non-negative safe integer, `false` otherwise
42
45
  */
43
46
  export const isSafeUint = is;
44
47
 
45
48
  /**
46
- * Casts a number to a SafeUint type.
49
+ * Casts a `number` to the `SafeUint` branded type.
50
+ *
51
+ * Validates that the value is a non-negative safe integer and returns it with
52
+ * the `SafeUint` brand. Throws a `TypeError` otherwise.
47
53
  *
48
- * @param value The value to cast.
49
- * @returns The value as a SafeUint type.
50
- * @throws {TypeError} If the value is not a non-negative safe integer.
54
+ * @param value - The value to cast
55
+ * @returns The value as a `SafeUint`
56
+ * @throws {TypeError} If the value is not a non-negative safe integer
51
57
  */
52
58
  export const asSafeUint = castType;
53
59
 
54
60
  /**
55
- * Namespace providing type-safe arithmetic operations for safe unsigned
56
- * integers.
61
+ * Namespace providing type-safe operations for the `SafeUint` branded type.
57
62
  *
58
- * All operations automatically clamp results to the safe unsigned integer range
59
- * [0, MAX_SAFE_INTEGER]. This ensures that all arithmetic maintains both the
60
- * non-negative constraint and IEEE 754 precision guarantees, preventing
61
- * precision loss while ensuring results are never negative.
63
+ * The `SafeUint` type represents a non-negative safe integer. Division (`div`)
64
+ * uses floor division.
62
65
  */
63
66
  export const SafeUint = {
64
67
  /**
65
- * Type guard to check if a value is a SafeUint.
68
+ * Type guard that checks if a value is a non-negative safe integer.
66
69
  *
67
- * @param value The value to check.
68
- * @returns `true` if the value is a non-negative safe integer, `false`
69
- * otherwise.
70
+ * @param value - The value to check
71
+ * @returns `true` if the value is a non-negative safe integer, `false` otherwise
72
+ * @see {@link isSafeUint} for usage examples
70
73
  */
71
74
  is,
72
75
 
73
76
  /**
74
- * The minimum value for a safe unsigned integer.
75
- *
76
- * @readonly
77
+ * The smallest value representable as `SafeUint`.
77
78
  */
78
79
  MIN_VALUE,
79
80
 
80
81
  /**
81
- * The maximum safe integer value (2^53 - 1).
82
- *
83
- * @readonly
82
+ * The largest value representable as `SafeUint`.
84
83
  */
85
84
  MAX_VALUE,
86
85
 
87
86
  /**
88
- * Returns the smaller of two SafeUint values.
87
+ * Returns the smallest of the given non-negative safe integers.
89
88
  *
90
- * @param a The first SafeUint.
91
- * @param b The second SafeUint.
92
- * @returns The minimum value as a SafeUint.
89
+ * @param values - The non-negative safe integers to compare (at least one required)
90
+ * @returns The smallest value as a `SafeUint`
93
91
  */
94
92
  min: min_,
95
93
 
96
94
  /**
97
- * Returns the larger of two SafeUint values.
95
+ * Returns the largest of the given non-negative safe integers.
98
96
  *
99
- * @param a The first SafeUint.
100
- * @param b The second SafeUint.
101
- * @returns The maximum value as a SafeUint.
97
+ * @param values - The non-negative safe integers to compare (at least one required)
98
+ * @returns The largest value as a `SafeUint`
102
99
  */
103
100
  max: max_,
104
101
 
105
102
  /**
106
- * Clamps a number to the safe unsigned integer range.
103
+ * Clamps a `number` into the `SafeUint` range, rounding to the nearest
104
+ * integer and constraining the result to `[MIN_VALUE, MAX_VALUE]`.
107
105
  *
108
- * @param value The number to clamp.
109
- * @returns The value clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
106
+ * @param value - The value to clamp
107
+ * @returns The clamped value as a `SafeUint`
110
108
  */
111
109
  clamp,
112
110
 
113
111
  /**
114
- * Generates a random SafeUint value within the valid range.
112
+ * Generates a random `SafeUint` within the given range.
113
+ *
114
+ * The range is inclusive on both ends.
115
115
  *
116
- * @returns A random SafeUint between 0 and MAX_SAFE_INTEGER.
116
+ * @param min - The minimum value (inclusive)
117
+ * @param max - The maximum value (inclusive)
118
+ * @returns A random `SafeUint` in `[min, max]`
117
119
  */
118
120
  random,
119
121
 
120
122
  /**
121
- * Raises a SafeUint to the power of another SafeUint.
123
+ * Raises `a` to the power `b`, returning `a ** b` as a `SafeUint` (floored to
124
+ * an integer).
122
125
  *
123
- * @param a The base SafeUint.
124
- * @param b The exponent SafeUint.
125
- * @returns `a ** b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
126
+ * @param a - The base non-negative safe integer
127
+ * @param b - The exponent non-negative safe integer
128
+ * @returns `a ** b` as a `SafeUint`
126
129
  */
127
130
  pow,
128
131
 
129
132
  /**
130
- * Adds two SafeUint values.
133
+ * Adds two non-negative safe integers, returning `a + b` as a `SafeUint`.
131
134
  *
132
- * @param a The first SafeUint.
133
- * @param b The second SafeUint.
134
- * @returns `a + b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
135
+ * @param a - The first non-negative safe integer
136
+ * @param b - The second non-negative safe integer
137
+ * @returns The sum of `a` and `b` as a `SafeUint`
135
138
  */
136
139
  add,
137
140
 
138
141
  /**
139
- * Subtracts one SafeUint from another.
142
+ * Subtracts two non-negative safe integers, returning `a - b` as a
143
+ * `SafeUint`.
140
144
  *
141
- * @param a The minuend SafeUint.
142
- * @param b The subtrahend SafeUint.
143
- * @returns `a - b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint (minimum
144
- * 0).
145
+ * @param a - The first non-negative safe integer
146
+ * @param b - The second non-negative safe integer
147
+ * @returns The difference of `a` and `b` as a `SafeUint`
145
148
  */
146
149
  sub,
147
150
 
148
151
  /**
149
- * Multiplies two SafeUint values.
152
+ * Multiplies two non-negative safe integers, returning `a * b` as a
153
+ * `SafeUint`.
150
154
  *
151
- * @param a The first SafeUint.
152
- * @param b The second SafeUint.
153
- * @returns `a * b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
155
+ * @param a - The first non-negative safe integer
156
+ * @param b - The second non-negative safe integer
157
+ * @returns The product of `a` and `b` as a `SafeUint`
154
158
  */
155
159
  mul,
156
160
 
157
161
  /**
158
- * Divides one SafeUint by another using floor division.
162
+ * Divides two non-negative safe integers using floor division (`⌊a / b⌋`):
163
+ * the result is `a / b` rounded toward negative infinity, as a `SafeUint`.
159
164
  *
160
- * @param a The dividend SafeUint.
161
- * @param b The divisor SafeUint.
162
- * @returns `⌊a / b⌋` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
165
+ * @param a - The dividend
166
+ * @param b - The divisor (must be non-zero)
167
+ * @returns The floored quotient as a `SafeUint`
163
168
  */
164
169
  div,
165
170
  } as const;