ts-data-forge 11.0.0 → 12.0.0

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 (185) hide show
  1. package/README.md +2 -2
  2. package/dist/number/branded-types/finite-number.d.mts +47 -61
  3. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  4. package/dist/number/branded-types/finite-number.mjs +37 -41
  5. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  6. package/dist/number/branded-types/int.d.mts +40 -46
  7. package/dist/number/branded-types/int.d.mts.map +1 -1
  8. package/dist/number/branded-types/int.mjs +29 -31
  9. package/dist/number/branded-types/int.mjs.map +1 -1
  10. package/dist/number/branded-types/int16.d.mts +71 -59
  11. package/dist/number/branded-types/int16.d.mts.map +1 -1
  12. package/dist/number/branded-types/int16.mjs +56 -47
  13. package/dist/number/branded-types/int16.mjs.map +1 -1
  14. package/dist/number/branded-types/int32.d.mts +71 -59
  15. package/dist/number/branded-types/int32.d.mts.map +1 -1
  16. package/dist/number/branded-types/int32.mjs +56 -47
  17. package/dist/number/branded-types/int32.mjs.map +1 -1
  18. package/dist/number/branded-types/negative-finite-number.d.mts +76 -60
  19. package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
  20. package/dist/number/branded-types/negative-finite-number.mjs +62 -49
  21. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  22. package/dist/number/branded-types/negative-int.d.mts +66 -49
  23. package/dist/number/branded-types/negative-int.d.mts.map +1 -1
  24. package/dist/number/branded-types/negative-int.mjs +48 -39
  25. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  26. package/dist/number/branded-types/negative-safe-int.d.mts +64 -57
  27. package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
  28. package/dist/number/branded-types/negative-safe-int.mjs +49 -44
  29. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  30. package/dist/number/branded-types/non-negative-finite-number.d.mts +80 -65
  31. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  32. package/dist/number/branded-types/non-negative-finite-number.mjs +65 -53
  33. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  34. package/dist/number/branded-types/non-negative-int16.d.mts +71 -58
  35. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  36. package/dist/number/branded-types/non-negative-int16.mjs +55 -45
  37. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  38. package/dist/number/branded-types/non-negative-int32.d.mts +71 -59
  39. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  40. package/dist/number/branded-types/non-negative-int32.mjs +55 -46
  41. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  42. package/dist/number/branded-types/non-positive-finite-number.d.mts +70 -55
  43. package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
  44. package/dist/number/branded-types/non-positive-finite-number.mjs +55 -43
  45. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  46. package/dist/number/branded-types/non-positive-int.d.mts +46 -146
  47. package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
  48. package/dist/number/branded-types/non-positive-int.mjs +33 -108
  49. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  50. package/dist/number/branded-types/non-positive-safe-int.d.mts +62 -54
  51. package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
  52. package/dist/number/branded-types/non-positive-safe-int.mjs +46 -41
  53. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  54. package/dist/number/branded-types/non-zero-finite-number.d.mts +62 -49
  55. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  56. package/dist/number/branded-types/non-zero-finite-number.mjs +46 -37
  57. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  58. package/dist/number/branded-types/non-zero-int.d.mts +51 -38
  59. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  60. package/dist/number/branded-types/non-zero-int.mjs +31 -27
  61. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  62. package/dist/number/branded-types/non-zero-int16.d.mts +59 -54
  63. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  64. package/dist/number/branded-types/non-zero-int16.mjs +44 -41
  65. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  66. package/dist/number/branded-types/non-zero-int32.d.mts +59 -55
  67. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  68. package/dist/number/branded-types/non-zero-int32.mjs +44 -42
  69. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  70. package/dist/number/branded-types/non-zero-safe-int.d.mts +60 -55
  71. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  72. package/dist/number/branded-types/non-zero-safe-int.mjs +44 -42
  73. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  74. package/dist/number/branded-types/non-zero-uint16.d.mts +59 -54
  75. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  76. package/dist/number/branded-types/non-zero-uint16.mjs +43 -41
  77. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  78. package/dist/number/branded-types/non-zero-uint32.d.mts +59 -54
  79. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  80. package/dist/number/branded-types/non-zero-uint32.mjs +43 -41
  81. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  82. package/dist/number/branded-types/positive-finite-number.d.mts +82 -64
  83. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  84. package/dist/number/branded-types/positive-finite-number.mjs +67 -52
  85. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  86. package/dist/number/branded-types/positive-int.d.mts +53 -70
  87. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  88. package/dist/number/branded-types/positive-int.mjs +42 -52
  89. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  90. package/dist/number/branded-types/positive-int16.d.mts +68 -58
  91. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  92. package/dist/number/branded-types/positive-int16.mjs +52 -45
  93. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  94. package/dist/number/branded-types/positive-int32.d.mts +68 -58
  95. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  96. package/dist/number/branded-types/positive-int32.mjs +52 -45
  97. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  98. package/dist/number/branded-types/positive-safe-int.d.mts +72 -61
  99. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  100. package/dist/number/branded-types/positive-safe-int.mjs +56 -48
  101. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  102. package/dist/number/branded-types/positive-uint16.d.mts +68 -58
  103. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  104. package/dist/number/branded-types/positive-uint16.mjs +52 -45
  105. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  106. package/dist/number/branded-types/positive-uint32.d.mts +68 -59
  107. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  108. package/dist/number/branded-types/positive-uint32.mjs +52 -46
  109. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  110. package/dist/number/branded-types/safe-int.d.mts +52 -66
  111. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  112. package/dist/number/branded-types/safe-int.mjs +45 -47
  113. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  114. package/dist/number/branded-types/safe-uint.d.mts +68 -58
  115. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  116. package/dist/number/branded-types/safe-uint.mjs +53 -46
  117. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  118. package/dist/number/branded-types/uint.d.mts +72 -55
  119. package/dist/number/branded-types/uint.d.mts.map +1 -1
  120. package/dist/number/branded-types/uint.mjs +52 -45
  121. package/dist/number/branded-types/uint.mjs.map +1 -1
  122. package/dist/number/branded-types/uint16.d.mts +66 -59
  123. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  124. package/dist/number/branded-types/uint16.mjs +51 -45
  125. package/dist/number/branded-types/uint16.mjs.map +1 -1
  126. package/dist/number/branded-types/uint32.d.mts +66 -57
  127. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  128. package/dist/number/branded-types/uint32.mjs +50 -45
  129. package/dist/number/branded-types/uint32.mjs.map +1 -1
  130. package/dist/number/enum/int8.d.mts +62 -66
  131. package/dist/number/enum/int8.d.mts.map +1 -1
  132. package/dist/number/enum/int8.mjs +57 -51
  133. package/dist/number/enum/int8.mjs.map +1 -1
  134. package/dist/number/enum/uint8.d.mts +66 -59
  135. package/dist/number/enum/uint8.d.mts.map +1 -1
  136. package/dist/number/enum/uint8.mjs +57 -51
  137. package/dist/number/enum/uint8.mjs.map +1 -1
  138. package/dist/number/refined-number-utils.d.mts +9 -9
  139. package/dist/number/refined-number-utils.d.mts.map +1 -1
  140. package/dist/number/refined-number-utils.mjs +7 -7
  141. package/dist/number/refined-number-utils.mjs.map +1 -1
  142. package/package.json +2 -1
  143. package/src/number/branded-types/finite-number.mts +47 -61
  144. package/src/number/branded-types/int.mts +40 -46
  145. package/src/number/branded-types/int16.mts +72 -60
  146. package/src/number/branded-types/int32.mts +72 -60
  147. package/src/number/branded-types/negative-finite-number.mts +78 -71
  148. package/src/number/branded-types/negative-finite-number.test.mts +4 -4
  149. package/src/number/branded-types/negative-int.mts +68 -60
  150. package/src/number/branded-types/negative-int.test.mts +5 -5
  151. package/src/number/branded-types/negative-safe-int.mts +66 -68
  152. package/src/number/branded-types/negative-safe-int.test.mts +4 -4
  153. package/src/number/branded-types/non-negative-finite-number.mts +81 -66
  154. package/src/number/branded-types/non-negative-int16.mts +72 -59
  155. package/src/number/branded-types/non-negative-int32.mts +72 -60
  156. package/src/number/branded-types/non-positive-finite-number.mts +71 -56
  157. package/src/number/branded-types/non-positive-finite-number.test.mts +7 -7
  158. package/src/number/branded-types/non-positive-int.mts +47 -147
  159. package/src/number/branded-types/non-positive-int.test.mts +7 -7
  160. package/src/number/branded-types/non-positive-safe-int.mts +63 -55
  161. package/src/number/branded-types/non-positive-safe-int.test.mts +7 -7
  162. package/src/number/branded-types/non-zero-finite-number.mts +62 -51
  163. package/src/number/branded-types/non-zero-int.mts +51 -38
  164. package/src/number/branded-types/non-zero-int16.mts +60 -55
  165. package/src/number/branded-types/non-zero-int32.mts +60 -56
  166. package/src/number/branded-types/non-zero-safe-int.mts +61 -56
  167. package/src/number/branded-types/non-zero-uint16.mts +60 -55
  168. package/src/number/branded-types/non-zero-uint32.mts +60 -55
  169. package/src/number/branded-types/positive-finite-number.mts +83 -65
  170. package/src/number/branded-types/positive-int.mts +54 -71
  171. package/src/number/branded-types/positive-int16.mts +69 -59
  172. package/src/number/branded-types/positive-int32.mts +69 -59
  173. package/src/number/branded-types/positive-safe-int.mts +73 -62
  174. package/src/number/branded-types/positive-uint16.mts +69 -59
  175. package/src/number/branded-types/positive-uint32.mts +69 -60
  176. package/src/number/branded-types/safe-int.mts +53 -67
  177. package/src/number/branded-types/safe-uint.mts +69 -59
  178. package/src/number/branded-types/uint.mts +73 -56
  179. package/src/number/branded-types/uint16.mts +67 -60
  180. package/src/number/branded-types/uint32.mts +67 -58
  181. package/src/number/enum/int8.mts +70 -73
  182. package/src/number/enum/int8.test.mts +7 -4
  183. package/src/number/enum/uint8.mts +74 -66
  184. package/src/number/enum/uint8.test.mts +7 -4
  185. package/src/number/refined-number-utils.mts +22 -19
@@ -12,8 +12,8 @@ const {
12
12
  MIN_VALUE,
13
13
  add,
14
14
  castType,
15
- clamp,
16
15
  div,
16
+ fromNumber,
17
17
  is,
18
18
  max: max_,
19
19
  min: min_,
@@ -35,8 +35,8 @@ const {
35
35
  /**
36
36
  * Type guard that checks if a value is a positive integer.
37
37
  *
38
- * A positive integer is any integer greater than zero (>= 1). This excludes
39
- * zero, negative numbers, and non-integers.
38
+ * Returns `true` for a positive integer — a value with no fractional component,
39
+ * including values outside the safe integer range (unlike `SafeInt`).
40
40
  *
41
41
  * @example
42
42
  *
@@ -54,11 +54,10 @@ const {
54
54
  export const isPositiveInt = is;
55
55
 
56
56
  /**
57
- * Casts a number to a PositiveInt branded type.
57
+ * Casts a `number` to the `PositiveInt` branded type.
58
58
  *
59
- * This function validates that the input is a positive integer (>= 1) and
60
- * returns it with the PositiveInt brand. This ensures type safety for
61
- * operations that require strictly positive integer values.
59
+ * Validates that the value is a positive integer and returns it with the
60
+ * `PositiveInt` brand. Throws a `TypeError` otherwise.
62
61
  *
63
62
  * @example
64
63
  *
@@ -71,26 +70,20 @@ export const isPositiveInt = is;
71
70
  * ```
72
71
  *
73
72
  * @param value - The value to cast
74
- * @returns The value as a PositiveInt branded type
73
+ * @returns The value as a `PositiveInt`
75
74
  * @throws {TypeError} If the value is not a positive integer
76
75
  */
77
76
  export const asPositiveInt = castType;
78
77
 
79
78
  /**
80
- * Namespace providing type-safe operations for PositiveInt branded types.
79
+ * Namespace providing type-safe operations for the `PositiveInt` branded type.
81
80
  *
82
- * PositiveInt represents integers that are strictly greater than zero (>= 1).
83
- * All operations automatically clamp results to maintain the positive
84
- * constraint, ensuring that arithmetic operations never produce zero or
85
- * negative values.
81
+ * The `PositiveInt` type represents a positive integer. Division (`div`) uses
82
+ * floor division.
86
83
  *
87
- * This type is essential for:
88
- *
89
- * - Array lengths and sizes (length >= 1)
90
- * - Counts and quantities that must be positive
91
- * - Denominators in division operations
92
- * - Loop counters and iteration counts
93
- * - Database primary keys and IDs
84
+ * Unlike `SafeInt`, `PositiveInt` allows values outside the safe integer range
85
+ * (±2^53 − 1), so very large magnitudes may lose precision in JavaScript's
86
+ * `number` type.
94
87
  */
95
88
  export const PositiveInt = {
96
89
  /**
@@ -113,17 +106,13 @@ export const PositiveInt = {
113
106
  is,
114
107
 
115
108
  /**
116
- * The minimum value for a PositiveInt.
117
- *
118
- * @readonly
109
+ * The smallest value representable as `PositiveInt` (the lower saturation
110
+ * target of `fromNumber`).
119
111
  */
120
112
  MIN_VALUE,
121
113
 
122
114
  /**
123
- * Returns the minimum value from a list of positive integers.
124
- *
125
- * Since all inputs are guaranteed to be >= 1, the result is also guaranteed
126
- * to be a positive integer.
115
+ * Returns the smallest of the given positive integers.
127
116
  *
128
117
  * @example
129
118
  *
@@ -138,12 +127,12 @@ export const PositiveInt = {
138
127
  * ```
139
128
  *
140
129
  * @param values - The positive integers to compare (at least one required)
141
- * @returns The smallest value as a PositiveInt
130
+ * @returns The smallest value as a `PositiveInt`
142
131
  */
143
132
  min: min_,
144
133
 
145
134
  /**
146
- * Returns the maximum value from a list of positive integers.
135
+ * Returns the largest of the given positive integers.
147
136
  *
148
137
  * @example
149
138
  *
@@ -158,38 +147,39 @@ export const PositiveInt = {
158
147
  * ```
159
148
  *
160
149
  * @param values - The positive integers to compare (at least one required)
161
- * @returns The largest value as a PositiveInt
150
+ * @returns The largest value as a `PositiveInt`
162
151
  */
163
152
  max: max_,
164
153
 
165
154
  /**
166
- * Clamps a number to the positive integer range.
155
+ * Converts an arbitrary `number` into a `PositiveInt`, rounding to the
156
+ * nearest integer and saturating the result into the range `[MIN_VALUE,
157
+ * MAX_VALUE]`.
167
158
  *
168
- * Since PositiveInt has a minimum value of 1, this function ensures that any
169
- * input less than 1 is clamped to 1.
159
+ * Unlike `asPositiveInt`, this is total: out-of-range inputs are clamped to
160
+ * the nearest representable `PositiveInt` instead of throwing.
170
161
  *
171
162
  * @example
172
163
  *
173
164
  * ```ts
174
- * const belowRange = PositiveInt.clamp(0);
165
+ * const belowRange = PositiveInt.fromNumber(0);
175
166
  *
176
- * const withinRange = PositiveInt.clamp(10);
167
+ * const withinRange = PositiveInt.fromNumber(10);
177
168
  *
178
169
  * assert.isTrue(belowRange === 1);
179
170
  *
180
171
  * assert.isTrue(withinRange === 10);
181
172
  * ```
182
173
  *
183
- * @param value - The number to clamp
184
- * @returns The value clamped to >= 1 as a PositiveInt
174
+ * @param value - The value to convert
175
+ * @returns The value as a `PositiveInt`
185
176
  */
186
- clamp,
177
+ fromNumber,
187
178
 
188
179
  /**
189
- * Generates a random positive integer within the specified range (inclusive).
180
+ * Generates a random `PositiveInt` within the given range.
190
181
  *
191
- * Both bounds are inclusive, and both min and max must be positive integers.
192
- * If min > max, they are automatically swapped.
182
+ * The range is inclusive on both ends.
193
183
  *
194
184
  * @example
195
185
  *
@@ -205,15 +195,15 @@ export const PositiveInt = {
205
195
  * assert.isTrue(randomValue >= 3 && randomValue <= 6);
206
196
  * ```
207
197
  *
208
- * @param min - The minimum value (inclusive, must be >= 1)
209
- * @param max - The maximum value (inclusive, must be >= min)
210
- * @returns A random PositiveInt in the range [min, max]
198
+ * @param min - The minimum value (inclusive)
199
+ * @param max - The maximum value (inclusive)
200
+ * @returns A random `PositiveInt` in `[min, max]`
211
201
  */
212
202
  random,
213
203
 
214
204
  /**
215
- * Raises a positive integer to a power, ensuring the result is never less
216
- * than 1.
205
+ * Raises `a` to the power `b`, returning `a ** b` as a `PositiveInt` (floored
206
+ * to an integer).
217
207
  *
218
208
  * @example
219
209
  *
@@ -229,12 +219,12 @@ export const PositiveInt = {
229
219
  *
230
220
  * @param a - The base positive integer
231
221
  * @param b - The exponent positive integer
232
- * @returns `a ** b` as a PositiveInt, but never less than 1
222
+ * @returns `a ** b` as a `PositiveInt`
233
223
  */
234
224
  pow,
235
225
 
236
226
  /**
237
- * Adds two positive integers, ensuring the result is never less than 1.
227
+ * Adds two positive integers, returning `a + b` as a `PositiveInt`.
238
228
  *
239
229
  * @example
240
230
  *
@@ -244,17 +234,14 @@ export const PositiveInt = {
244
234
  * assert.isTrue(sum === 9);
245
235
  * ```
246
236
  *
247
- * @param a - First positive integer
248
- * @param b - Second positive integer
249
- * @returns `a + b` as a PositiveInt, but never less than 1
237
+ * @param a - The first positive integer
238
+ * @param b - The second positive integer
239
+ * @returns The sum of `a` and `b` as a `PositiveInt`
250
240
  */
251
241
  add,
252
242
 
253
243
  /**
254
- * Subtracts two positive integers, clamping the result to remain positive.
255
- *
256
- * If the mathematical result would be <= 0, it is clamped to 1 to maintain
257
- * the positive integer constraint.
244
+ * Subtracts two positive integers, returning `a - b` as a `PositiveInt`.
258
245
  *
259
246
  * @example
260
247
  *
@@ -264,14 +251,14 @@ export const PositiveInt = {
264
251
  * assert.isTrue(difference === 1);
265
252
  * ```
266
253
  *
267
- * @param a - The minuend (positive integer)
268
- * @param b - The subtrahend (positive integer)
269
- * @returns `max(1, a - b)` as a PositiveInt
254
+ * @param a - The first positive integer
255
+ * @param b - The second positive integer
256
+ * @returns The difference of `a` and `b` as a `PositiveInt`
270
257
  */
271
258
  sub,
272
259
 
273
260
  /**
274
- * Multiplies two positive integers, ensuring the result is never less than 1.
261
+ * Multiplies two positive integers, returning `a * b` as a `PositiveInt`.
275
262
  *
276
263
  * @example
277
264
  *
@@ -281,19 +268,15 @@ export const PositiveInt = {
281
268
  * assert.isTrue(product === 21);
282
269
  * ```
283
270
  *
284
- * @param a - First positive integer
285
- * @param b - Second positive integer
286
- * @returns `a * b` as a PositiveInt, but never less than 1
271
+ * @param a - The first positive integer
272
+ * @param b - The second positive integer
273
+ * @returns The product of `a` and `b` as a `PositiveInt`
287
274
  */
288
275
  mul,
289
276
 
290
277
  /**
291
- * Divides two positive integers using floor division, clamping to remain
292
- * positive.
293
- *
294
- * Performs mathematical floor division: `⌊a / b⌋`. If the result would be 0
295
- * (when a < b), it is clamped to 1 to maintain the positive integer
296
- * constraint.
278
+ * Divides two positive integers using floor division (`⌊a / b⌋`): the result
279
+ * is `a / b` rounded toward negative infinity, as a `PositiveInt`.
297
280
  *
298
281
  * @example
299
282
  *
@@ -307,9 +290,9 @@ export const PositiveInt = {
307
290
  * assert.isTrue(clamped === 1);
308
291
  * ```
309
292
  *
310
- * @param a - The dividend (positive integer)
311
- * @param b - The divisor (positive integer, guaranteed non-zero)
312
- * @returns `max(1, ⌊a / b⌋)` as a PositiveInt
293
+ * @param a - The dividend
294
+ * @param b - The divisor (must be non-zero)
295
+ * @returns The floored quotient as a `PositiveInt`
313
296
  */
314
297
  div,
315
298
  } as const;
@@ -13,8 +13,8 @@ const {
13
13
  MIN_VALUE,
14
14
  add,
15
15
  castType,
16
- clamp,
17
16
  div,
17
+ fromNumber,
18
18
  is,
19
19
  max: max_,
20
20
  min: min_,
@@ -34,131 +34,141 @@ const {
34
34
  } as const);
35
35
 
36
36
  /**
37
- * Checks if a number is a PositiveInt16 (16-bit positive signed integer in the
38
- * range [1, 2^15)).
37
+ * Type guard that checks if a value is a positive integer in [1, 2^15).
39
38
  *
40
- * @param value The value to check.
41
- * @returns `true` if the value is a PositiveInt16, `false` otherwise.
39
+ * Returns `true` for a positive integer in [1, 2^15) — a value with no
40
+ * fractional component.
41
+ *
42
+ * @param value - The value to check
43
+ * @returns `true` if the value is a positive integer in [1, 2^15), `false` otherwise
42
44
  */
43
45
  export const isPositiveInt16 = is;
44
46
 
45
47
  /**
46
- * Casts a number to a PositiveInt16 type.
48
+ * Casts a `number` to the `PositiveInt16` branded type.
49
+ *
50
+ * Validates that the value is a positive integer in [1, 2^15) and returns it
51
+ * with the `PositiveInt16` brand. Throws a `TypeError` otherwise.
47
52
  *
48
- * @param value The value to cast.
49
- * @returns The value as a PositiveInt16 type.
50
- * @throws {TypeError} If the value is not a positive integer in [1, 2^15).
53
+ * @param value - The value to cast
54
+ * @returns The value as a `PositiveInt16`
55
+ * @throws {TypeError} If the value is not a positive integer in [1, 2^15)
51
56
  */
52
57
  export const asPositiveInt16 = castType;
53
58
 
54
59
  /**
55
- * Namespace providing type-safe arithmetic operations for 16-bit positive
56
- * integers.
60
+ * Namespace providing type-safe operations for the `PositiveInt16` branded
61
+ * type.
57
62
  *
58
- * All operations automatically clamp results to the valid PositiveInt16 range
59
- * [1, 32767]. This ensures that all arithmetic maintains the 16-bit positive
60
- * integer constraint, with results below 1 clamped to MIN_VALUE and overflow
61
- * results clamped to MAX_VALUE.
63
+ * The `PositiveInt16` type represents a positive integer in [1, 2^15). Division
64
+ * (`div`) uses floor division.
62
65
  */
63
66
  export const PositiveInt16 = {
64
67
  /**
65
- * Type guard to check if a value is a PositiveInt16.
68
+ * Type guard that checks if a value is a positive integer in [1, 2^15).
66
69
  *
67
- * @param value The value to check.
68
- * @returns `true` if the value is a 16-bit positive integer, `false`
69
- * otherwise.
70
+ * @param value - The value to check
71
+ * @returns `true` if the value is a positive integer in [1, 2^15), `false` otherwise
72
+ * @see {@link isPositiveInt16} for usage examples
70
73
  */
71
74
  is,
72
75
 
73
76
  /**
74
- * The minimum value for a 16-bit positive integer.
75
- *
76
- * @readonly
77
+ * The smallest value representable as `PositiveInt16` (the lower saturation
78
+ * target of `fromNumber`).
77
79
  */
78
80
  MIN_VALUE,
79
81
 
80
82
  /**
81
- * The maximum value for a 16-bit positive integer.
82
- *
83
- * @readonly
83
+ * The largest value representable as `PositiveInt16` (the upper saturation
84
+ * target of `fromNumber`).
84
85
  */
85
86
  MAX_VALUE,
86
87
 
87
88
  /**
88
- * Returns the smaller of two PositiveInt16 values.
89
+ * Returns the smallest of the given positive integers.
89
90
  *
90
- * @param a The first PositiveInt16.
91
- * @param b The second PositiveInt16.
92
- * @returns The minimum value as a PositiveInt16.
91
+ * @param values - The positive integers to compare (at least one required)
92
+ * @returns The smallest value as a `PositiveInt16`
93
93
  */
94
94
  min: min_,
95
95
 
96
96
  /**
97
- * Returns the larger of two PositiveInt16 values.
97
+ * Returns the largest of the given positive integers.
98
98
  *
99
- * @param a The first PositiveInt16.
100
- * @param b The second PositiveInt16.
101
- * @returns The maximum value as a PositiveInt16.
99
+ * @param values - The positive integers to compare (at least one required)
100
+ * @returns The largest value as a `PositiveInt16`
102
101
  */
103
102
  max: max_,
104
103
 
105
104
  /**
106
- * Clamps a number to the PositiveInt16 range.
105
+ * Converts an arbitrary `number` into a `PositiveInt16`, rounding to the
106
+ * nearest integer and saturating the result into the range `[MIN_VALUE,
107
+ * MAX_VALUE]`.
108
+ *
109
+ * Unlike `asPositiveInt16`, this is total: out-of-range inputs are clamped to
110
+ * the nearest representable `PositiveInt16` instead of throwing.
107
111
  *
108
- * @param value The number to clamp.
109
- * @returns The value clamped to [1, 32767] as a PositiveInt16.
112
+ * @param value - The value to convert
113
+ * @returns The value as a `PositiveInt16`
110
114
  */
111
- clamp,
115
+ fromNumber,
112
116
 
113
117
  /**
114
- * Generates a random PositiveInt16 value within the valid range.
118
+ * Generates a random `PositiveInt16` within the given range.
119
+ *
120
+ * The range is inclusive on both ends.
115
121
  *
116
- * @returns A random PositiveInt16 between 1 and 32767.
122
+ * @param min - The minimum value (inclusive)
123
+ * @param max - The maximum value (inclusive)
124
+ * @returns A random `PositiveInt16` in `[min, max]`
117
125
  */
118
126
  random,
119
127
 
120
128
  /**
121
- * Raises a PositiveInt16 to the power of another PositiveInt16.
129
+ * Raises `a` to the power `b`, returning `a ** b` as a `PositiveInt16`
130
+ * (floored to an integer).
122
131
  *
123
- * @param a The base PositiveInt16.
124
- * @param b The exponent PositiveInt16.
125
- * @returns `a ** b` clamped to [1, 32767] as a PositiveInt16.
132
+ * @param a - The base positive integer
133
+ * @param b - The exponent positive integer
134
+ * @returns `a ** b` as a `PositiveInt16`
126
135
  */
127
136
  pow,
128
137
 
129
138
  /**
130
- * Adds two PositiveInt16 values.
139
+ * Adds two positive integers, returning `a + b` as a `PositiveInt16`.
131
140
  *
132
- * @param a The first PositiveInt16.
133
- * @param b The second PositiveInt16.
134
- * @returns `a + b` clamped to [1, 32767] as a PositiveInt16.
141
+ * @param a - The first positive integer
142
+ * @param b - The second positive integer
143
+ * @returns The sum of `a` and `b` as a `PositiveInt16`
135
144
  */
136
145
  add,
137
146
 
138
147
  /**
139
- * Subtracts one PositiveInt16 from another.
148
+ * Subtracts two positive integers, returning `a - b` as a `PositiveInt16`.
140
149
  *
141
- * @param a The minuend PositiveInt16.
142
- * @param b The subtrahend PositiveInt16.
143
- * @returns `a - b` clamped to [1, 32767] as a PositiveInt16 (minimum 1).
150
+ * @param a - The first positive integer
151
+ * @param b - The second positive integer
152
+ * @returns The difference of `a` and `b` as a `PositiveInt16`
144
153
  */
145
154
  sub,
146
155
 
147
156
  /**
148
- * Multiplies two PositiveInt16 values.
157
+ * Multiplies two positive integers, returning `a * b` as a `PositiveInt16`.
149
158
  *
150
- * @param a The first PositiveInt16.
151
- * @param b The second PositiveInt16.
152
- * @returns `a * b` clamped to [1, 32767] as a PositiveInt16.
159
+ * @param a - The first positive integer
160
+ * @param b - The second positive integer
161
+ * @returns The product of `a` and `b` as a `PositiveInt16`
153
162
  */
154
163
  mul,
155
164
 
156
165
  /**
157
- * Divides one PositiveInt16 by another using floor division.
166
+ * Divides two positive integers using floor division (`⌊a / b⌋`): the result
167
+ * is `a / b` rounded toward negative infinity, as a `PositiveInt16`.
158
168
  *
159
- * @param a The dividend PositiveInt16.
160
- * @param b The divisor PositiveInt16.
161
- * @returns `⌊a / b⌋` clamped to [1, 32767] as a PositiveInt16.
169
+ * @param a - The dividend
170
+ * @param b - The divisor (must be non-zero)
171
+ * @returns The floored quotient as a `PositiveInt16`
162
172
  */
163
173
  div,
164
174
  } as const;