ts-data-forge 11.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 (171) hide show
  1. package/dist/number/branded-types/finite-number.d.mts +47 -61
  2. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  3. package/dist/number/branded-types/finite-number.mjs +37 -41
  4. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  5. package/dist/number/branded-types/int.d.mts +40 -46
  6. package/dist/number/branded-types/int.d.mts.map +1 -1
  7. package/dist/number/branded-types/int.mjs +29 -31
  8. package/dist/number/branded-types/int.mjs.map +1 -1
  9. package/dist/number/branded-types/int16.d.mts +65 -58
  10. package/dist/number/branded-types/int16.d.mts.map +1 -1
  11. package/dist/number/branded-types/int16.mjs +49 -45
  12. package/dist/number/branded-types/int16.mjs.map +1 -1
  13. package/dist/number/branded-types/int32.d.mts +65 -58
  14. package/dist/number/branded-types/int32.d.mts.map +1 -1
  15. package/dist/number/branded-types/int32.mjs +49 -45
  16. package/dist/number/branded-types/int32.mjs.map +1 -1
  17. package/dist/number/branded-types/negative-finite-number.d.mts +68 -59
  18. package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
  19. package/dist/number/branded-types/negative-finite-number.mjs +52 -46
  20. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  21. package/dist/number/branded-types/negative-int.d.mts +60 -48
  22. package/dist/number/branded-types/negative-int.d.mts.map +1 -1
  23. package/dist/number/branded-types/negative-int.mjs +40 -36
  24. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  25. package/dist/number/branded-types/negative-safe-int.d.mts +57 -56
  26. package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
  27. package/dist/number/branded-types/negative-safe-int.mjs +40 -41
  28. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  29. package/dist/number/branded-types/non-negative-finite-number.d.mts +74 -64
  30. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  31. package/dist/number/branded-types/non-negative-finite-number.mjs +58 -51
  32. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  33. package/dist/number/branded-types/non-negative-int16.d.mts +64 -57
  34. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  35. package/dist/number/branded-types/non-negative-int16.mjs +47 -43
  36. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  37. package/dist/number/branded-types/non-negative-int32.d.mts +64 -58
  38. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  39. package/dist/number/branded-types/non-negative-int32.mjs +47 -44
  40. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  41. package/dist/number/branded-types/non-positive-finite-number.d.mts +64 -54
  42. package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
  43. package/dist/number/branded-types/non-positive-finite-number.mjs +48 -41
  44. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  45. package/dist/number/branded-types/non-positive-int.d.mts +41 -146
  46. package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
  47. package/dist/number/branded-types/non-positive-int.mjs +27 -107
  48. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  49. package/dist/number/branded-types/non-positive-safe-int.d.mts +54 -53
  50. package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
  51. package/dist/number/branded-types/non-positive-safe-int.mjs +37 -39
  52. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  53. package/dist/number/branded-types/non-zero-finite-number.d.mts +62 -49
  54. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  55. package/dist/number/branded-types/non-zero-finite-number.mjs +46 -37
  56. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  57. package/dist/number/branded-types/non-zero-int.d.mts +51 -38
  58. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  59. package/dist/number/branded-types/non-zero-int.mjs +31 -27
  60. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  61. package/dist/number/branded-types/non-zero-int16.d.mts +52 -53
  62. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  63. package/dist/number/branded-types/non-zero-int16.mjs +36 -39
  64. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  65. package/dist/number/branded-types/non-zero-int32.d.mts +52 -54
  66. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  67. package/dist/number/branded-types/non-zero-int32.mjs +36 -40
  68. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  69. package/dist/number/branded-types/non-zero-safe-int.d.mts +53 -54
  70. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  71. package/dist/number/branded-types/non-zero-safe-int.mjs +36 -40
  72. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  73. package/dist/number/branded-types/non-zero-uint16.d.mts +52 -53
  74. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  75. package/dist/number/branded-types/non-zero-uint16.mjs +35 -39
  76. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  77. package/dist/number/branded-types/non-zero-uint32.d.mts +52 -53
  78. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  79. package/dist/number/branded-types/non-zero-uint32.mjs +35 -39
  80. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  81. package/dist/number/branded-types/positive-finite-number.d.mts +74 -63
  82. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  83. package/dist/number/branded-types/positive-finite-number.mjs +58 -50
  84. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  85. package/dist/number/branded-types/positive-int.d.mts +46 -68
  86. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  87. package/dist/number/branded-types/positive-int.mjs +34 -49
  88. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  89. package/dist/number/branded-types/positive-int16.d.mts +61 -57
  90. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  91. package/dist/number/branded-types/positive-int16.mjs +44 -43
  92. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  93. package/dist/number/branded-types/positive-int32.d.mts +61 -57
  94. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  95. package/dist/number/branded-types/positive-int32.mjs +44 -43
  96. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  97. package/dist/number/branded-types/positive-safe-int.d.mts +62 -57
  98. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  99. package/dist/number/branded-types/positive-safe-int.mjs +45 -43
  100. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  101. package/dist/number/branded-types/positive-uint16.d.mts +61 -57
  102. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  103. package/dist/number/branded-types/positive-uint16.mjs +44 -43
  104. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  105. package/dist/number/branded-types/positive-uint32.d.mts +61 -58
  106. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  107. package/dist/number/branded-types/positive-uint32.mjs +44 -44
  108. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  109. package/dist/number/branded-types/safe-int.d.mts +43 -62
  110. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  111. package/dist/number/branded-types/safe-int.mjs +35 -42
  112. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  113. package/dist/number/branded-types/safe-uint.d.mts +62 -57
  114. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  115. package/dist/number/branded-types/safe-uint.mjs +46 -44
  116. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  117. package/dist/number/branded-types/uint.d.mts +63 -50
  118. package/dist/number/branded-types/uint.d.mts.map +1 -1
  119. package/dist/number/branded-types/uint.mjs +42 -39
  120. package/dist/number/branded-types/uint.mjs.map +1 -1
  121. package/dist/number/branded-types/uint16.d.mts +60 -58
  122. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  123. package/dist/number/branded-types/uint16.mjs +44 -43
  124. package/dist/number/branded-types/uint16.mjs.map +1 -1
  125. package/dist/number/branded-types/uint32.d.mts +59 -55
  126. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  127. package/dist/number/branded-types/uint32.mjs +42 -42
  128. package/dist/number/branded-types/uint32.mjs.map +1 -1
  129. package/dist/number/enum/int8.d.mts +56 -65
  130. package/dist/number/enum/int8.d.mts.map +1 -1
  131. package/dist/number/enum/int8.mjs +44 -43
  132. package/dist/number/enum/int8.mjs.map +1 -1
  133. package/dist/number/enum/uint8.d.mts +60 -58
  134. package/dist/number/enum/uint8.d.mts.map +1 -1
  135. package/dist/number/enum/uint8.mjs +44 -43
  136. package/dist/number/enum/uint8.mjs.map +1 -1
  137. package/package.json +2 -1
  138. package/src/number/branded-types/finite-number.mts +47 -61
  139. package/src/number/branded-types/int.mts +40 -46
  140. package/src/number/branded-types/int16.mts +65 -58
  141. package/src/number/branded-types/int32.mts +65 -58
  142. package/src/number/branded-types/negative-finite-number.mts +68 -68
  143. package/src/number/branded-types/negative-int.mts +60 -57
  144. package/src/number/branded-types/negative-safe-int.mts +57 -65
  145. package/src/number/branded-types/non-negative-finite-number.mts +74 -64
  146. package/src/number/branded-types/non-negative-int16.mts +64 -57
  147. package/src/number/branded-types/non-negative-int32.mts +64 -58
  148. package/src/number/branded-types/non-positive-finite-number.mts +64 -54
  149. package/src/number/branded-types/non-positive-int.mts +41 -146
  150. package/src/number/branded-types/non-positive-safe-int.mts +54 -53
  151. package/src/number/branded-types/non-zero-finite-number.mts +62 -51
  152. package/src/number/branded-types/non-zero-int.mts +51 -38
  153. package/src/number/branded-types/non-zero-int16.mts +52 -53
  154. package/src/number/branded-types/non-zero-int32.mts +52 -54
  155. package/src/number/branded-types/non-zero-safe-int.mts +53 -54
  156. package/src/number/branded-types/non-zero-uint16.mts +52 -53
  157. package/src/number/branded-types/non-zero-uint32.mts +52 -53
  158. package/src/number/branded-types/positive-finite-number.mts +74 -63
  159. package/src/number/branded-types/positive-int.mts +46 -68
  160. package/src/number/branded-types/positive-int16.mts +61 -57
  161. package/src/number/branded-types/positive-int32.mts +61 -57
  162. package/src/number/branded-types/positive-safe-int.mts +62 -57
  163. package/src/number/branded-types/positive-uint16.mts +61 -57
  164. package/src/number/branded-types/positive-uint32.mts +61 -58
  165. package/src/number/branded-types/safe-int.mts +43 -62
  166. package/src/number/branded-types/safe-uint.mts +62 -57
  167. package/src/number/branded-types/uint.mts +63 -50
  168. package/src/number/branded-types/uint16.mts +60 -58
  169. package/src/number/branded-types/uint32.mts +59 -55
  170. package/src/number/enum/int8.mts +56 -65
  171. package/src/number/enum/uint8.mts +60 -58
@@ -34,8 +34,6 @@ const {
34
34
  typeNameInMessage,
35
35
  } as const);
36
36
 
37
- // Not provided because reasonable rounding operations that avoid becoming 0 cannot be defined
38
-
39
37
  const floor = (
40
38
  x: ElementType,
41
39
  ): TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType> =>
@@ -67,125 +65,138 @@ expectType<
67
65
  >('=');
68
66
 
69
67
  /**
70
- * Checks if a number is a NonZeroFiniteNumber (a finite number that is not 0).
68
+ * Type guard that checks if a value is a non-zero finite number.
69
+ *
70
+ * Returns `true` only for a finite value — never `NaN`, `Infinity`, or
71
+ * `-Infinity`.
71
72
  *
72
- * @param value The value to check.
73
- * @returns `true` if the value is a NonZeroFiniteNumber, `false` otherwise.
73
+ * @param value - The value to check
74
+ * @returns `true` if the value is a non-zero finite number, `false` otherwise
74
75
  */
75
76
  export const isNonZeroFiniteNumber = is;
76
77
 
77
78
  /**
78
- * Casts a number to a NonZeroFiniteNumber type.
79
+ * Casts a `number` to the `NonZeroFiniteNumber` branded type.
80
+ *
81
+ * Validates that the value is a non-zero finite number and returns it with the
82
+ * `NonZeroFiniteNumber` brand. Throws a `TypeError` otherwise.
79
83
  *
80
- * @param value The value to cast.
81
- * @returns The value as a NonZeroFiniteNumber type.
82
- * @throws {TypeError} If the value is not a non-zero finite number.
84
+ * @param value - The value to cast
85
+ * @returns The value as a `NonZeroFiniteNumber`
86
+ * @throws {TypeError} If the value is not a non-zero finite number
83
87
  */
84
88
  export const asNonZeroFiniteNumber = castType;
85
89
 
86
90
  /**
87
- * Namespace providing type-safe arithmetic operations for non-zero finite
88
- * numbers.
91
+ * Namespace providing type-safe operations for the `NonZeroFiniteNumber`
92
+ * branded type.
89
93
  *
90
- * All operations maintain the non-zero constraint while ensuring results remain
91
- * finite (excluding NaN and Infinity). This type is useful for values that must
92
- * never be zero, such as denominators, scaling factors, and ratios.
94
+ * The `NonZeroFiniteNumber` type represents a non-zero finite number.
93
95
  */
94
96
  export const NonZeroFiniteNumber = {
95
97
  /**
96
- * Type guard to check if a value is a NonZeroFiniteNumber.
98
+ * Type guard that checks if a value is a non-zero finite number.
97
99
  *
98
- * @param value The value to check.
99
- * @returns `true` if the value is a non-zero finite number, `false`
100
- * otherwise.
100
+ * @param value - The value to check
101
+ * @returns `true` if the value is a non-zero finite number, `false` otherwise
102
+ * @see {@link isNonZeroFiniteNumber} for usage examples
101
103
  */
102
104
  is,
103
105
 
104
106
  /**
105
107
  * Returns the absolute value of a non-zero finite number.
106
108
  *
107
- * @param a The NonZeroFiniteNumber.
108
- * @returns The absolute value as a NonZeroFiniteNumber.
109
+ * The result is non-negative and keeps the `NonZeroFiniteNumber` brand.
110
+ *
111
+ * @param a - The non-zero finite number value
112
+ * @returns The absolute value as a non-negative `NonZeroFiniteNumber`
109
113
  */
110
114
  abs,
111
115
 
112
116
  /**
113
- * Returns the smaller of two NonZeroFiniteNumber values.
117
+ * Returns the smallest of the given non-zero finite numbers.
114
118
  *
115
- * @param a The first NonZeroFiniteNumber.
116
- * @param b The second NonZeroFiniteNumber.
117
- * @returns The minimum value as a NonZeroFiniteNumber.
119
+ * @param values - The non-zero finite numbers to compare (at least one required)
120
+ * @returns The smallest value as a `NonZeroFiniteNumber`
118
121
  */
119
122
  min: min_,
120
123
 
121
124
  /**
122
- * Returns the larger of two NonZeroFiniteNumber values.
125
+ * Returns the largest of the given non-zero finite numbers.
123
126
  *
124
- * @param a The first NonZeroFiniteNumber.
125
- * @param b The second NonZeroFiniteNumber.
126
- * @returns The maximum value as a NonZeroFiniteNumber.
127
+ * @param values - The non-zero finite numbers to compare (at least one required)
128
+ * @returns The largest value as a `NonZeroFiniteNumber`
127
129
  */
128
130
  max: max_,
129
131
 
130
132
  /**
131
- * Rounds down a NonZeroFiniteNumber to the nearest integer.
133
+ * Returns the greatest integer less than or equal to a non-zero finite
134
+ * number.
132
135
  *
133
- * @param x The NonZeroFiniteNumber to round down.
134
- * @returns The floor value as a NonZeroInt.
136
+ * @param a - The non-zero finite number value
137
+ * @returns The floored value as an integer
135
138
  */
136
139
  floor,
137
140
 
138
141
  /**
139
- * Rounds up a NonZeroFiniteNumber to the nearest integer.
142
+ * Returns the smallest integer greater than or equal to a non-zero finite
143
+ * number.
140
144
  *
141
- * @param x The NonZeroFiniteNumber to round up.
142
- * @returns The ceiling value as a NonZeroInt.
145
+ * @param a - The non-zero finite number value
146
+ * @returns The ceiled value as an integer
143
147
  */
144
148
  ceil,
145
149
 
146
150
  /**
147
- * Rounds a NonZeroFiniteNumber to the nearest integer.
151
+ * Returns the value of a non-zero finite number rounded to the nearest
152
+ * integer.
148
153
  *
149
- * @param x The NonZeroFiniteNumber to round.
150
- * @returns The rounded value as a NonZeroInt.
154
+ * @param a - The non-zero finite number value
155
+ * @returns The rounded value as an integer
151
156
  */
152
157
  round,
153
158
 
154
159
  /**
155
- * Generates a random NonZeroFiniteNumber value.
160
+ * Generates a random `NonZeroFiniteNumber` within the given range.
161
+ *
162
+ * The range is inclusive on both ends.
156
163
  *
157
- * @returns A random non-zero finite number.
164
+ * @param min - The minimum value (inclusive)
165
+ * @param max - The maximum value (inclusive)
166
+ * @returns A random `NonZeroFiniteNumber` in `[min, max]`
158
167
  */
159
168
  random,
160
169
 
161
170
  /**
162
- * Raises a NonZeroFiniteNumber to the power of another NonZeroFiniteNumber.
171
+ * Raises `a` to the power `b`, returning `a ** b` as a `NonZeroFiniteNumber`.
163
172
  *
164
- * @param a The base NonZeroFiniteNumber.
165
- * @param b The exponent NonZeroFiniteNumber.
166
- * @returns `a ** b` as a NonZeroFiniteNumber.
173
+ * @param a - The base non-zero finite number
174
+ * @param b - The exponent non-zero finite number
175
+ * @returns `a ** b` as a `NonZeroFiniteNumber`
167
176
  */
168
177
  pow,
169
178
 
170
179
  /**
171
- * Multiplies two NonZeroFiniteNumber values.
180
+ * Multiplies two non-zero finite numbers, returning `a * b` as a
181
+ * `NonZeroFiniteNumber`.
172
182
  *
173
- * @param a The first NonZeroFiniteNumber.
174
- * @param b The second NonZeroFiniteNumber.
175
- * @returns `a * b` as a NonZeroFiniteNumber.
183
+ * @param a - The first non-zero finite number
184
+ * @param b - The second non-zero finite number
185
+ * @returns The product of `a` and `b` as a `NonZeroFiniteNumber`
176
186
  */
177
187
  mul,
178
188
 
179
189
  /**
180
- * Divides one NonZeroFiniteNumber by another.
190
+ * Divides two non-zero finite numbers, returning `a / b` as a
191
+ * `NonZeroFiniteNumber`.
181
192
  *
182
193
  * Exact (non-flooring) division of two non-zero finite numbers is always
183
194
  * non-zero, so this stays closed. For the non-closed operations (`add`/`sub`,
184
195
  * whose result may be `0`) use {@link Num.add}/{@link Num.sub}.
185
196
  *
186
- * @param a The dividend NonZeroFiniteNumber.
187
- * @param b The divisor NonZeroFiniteNumber.
188
- * @returns `a / b` as a NonZeroFiniteNumber.
197
+ * @param a - The dividend
198
+ * @param b - The divisor (must be non-zero)
199
+ * @returns `a / b` as a `NonZeroFiniteNumber`
189
200
  */
190
201
  div,
191
202
  } as const;
@@ -30,90 +30,103 @@ const {
30
30
  } as const);
31
31
 
32
32
  /**
33
- * Checks if a number is a NonZeroInt.
33
+ * Type guard that checks if a value is a non-zero integer.
34
34
  *
35
- * @param value The value to check.
36
- * @returns `true` if the value is a NonZeroInt, `false` otherwise.
35
+ * Returns `true` for a non-zero integer — a value with no fractional component,
36
+ * including values outside the safe integer range (unlike `SafeInt`).
37
+ *
38
+ * @param value - The value to check
39
+ * @returns `true` if the value is a non-zero integer, `false` otherwise
37
40
  */
38
41
  export const isNonZeroInt = is;
39
42
 
40
43
  /**
41
- * Casts a number to a NonZeroInt type.
44
+ * Casts a `number` to the `NonZeroInt` branded type.
45
+ *
46
+ * Validates that the value is a non-zero integer and returns it with the
47
+ * `NonZeroInt` brand. Throws a `TypeError` otherwise.
42
48
  *
43
- * @param value The value to cast.
44
- * @returns The value as a NonZeroInt type.
45
- * @throws {TypeError} If the value is not a non-zero integer.
49
+ * @param value - The value to cast
50
+ * @returns The value as a `NonZeroInt`
51
+ * @throws {TypeError} If the value is not a non-zero integer
46
52
  */
47
53
  export const asNonZeroInt = castType;
48
54
 
49
55
  /**
50
- * Namespace providing type-safe arithmetic operations for non-zero integers.
56
+ * Namespace providing type-safe operations for the `NonZeroInt` branded type.
57
+ *
58
+ * The `NonZeroInt` type represents a non-zero integer. Division (`div`) uses
59
+ * floor division.
51
60
  *
52
- * All operations maintain the non-zero constraint, ensuring that results are
53
- * always valid NonZeroInt values. Division operations return floor division
54
- * results, and all arithmetic maintains integer precision.
61
+ * Unlike `SafeInt`, `NonZeroInt` allows values outside the safe integer range
62
+ * (±2^53 − 1), so very large magnitudes may lose precision in JavaScript's
63
+ * `number` type.
55
64
  */
56
65
  export const NonZeroInt = {
57
66
  /**
58
- * Type guard to check if a value is a NonZeroInt.
67
+ * Type guard that checks if a value is a non-zero integer.
59
68
  *
60
- * @param value The value to check.
61
- * @returns `true` if the value is a non-zero integer, `false` otherwise.
69
+ * @param value - The value to check
70
+ * @returns `true` if the value is a non-zero integer, `false` otherwise
71
+ * @see {@link isNonZeroInt} for usage examples
62
72
  */
63
73
  is,
64
74
 
65
75
  /**
66
76
  * Returns the absolute value of a non-zero integer.
67
77
  *
68
- * @param a The non-zero integer.
69
- * @returns The absolute value as a NonZeroInt.
78
+ * The result is non-negative and keeps the `NonZeroInt` brand. Note that
79
+ * `Math.abs(Number.MIN_SAFE_INTEGER)` exceeds `Number.MAX_SAFE_INTEGER`, so
80
+ * use `SafeInt` for guaranteed precision.
81
+ *
82
+ * @param a - The non-zero integer value
83
+ * @returns The absolute value as a non-negative `NonZeroInt`
70
84
  */
71
85
  abs,
72
86
 
73
87
  /**
74
- * Returns the smaller of two non-zero integers.
88
+ * Returns the smallest of the given non-zero integers.
75
89
  *
76
- * @param a The first non-zero integer.
77
- * @param b The second non-zero integer.
78
- * @returns The minimum value as a NonZeroInt.
90
+ * @param values - The non-zero integers to compare (at least one required)
91
+ * @returns The smallest value as a `NonZeroInt`
79
92
  */
80
93
  min: min_,
81
94
 
82
95
  /**
83
- * Returns the larger of two non-zero integers.
96
+ * Returns the largest of the given non-zero integers.
84
97
  *
85
- * @param a The first non-zero integer.
86
- * @param b The second non-zero integer.
87
- * @returns The maximum value as a NonZeroInt.
98
+ * @param values - The non-zero integers to compare (at least one required)
99
+ * @returns The largest value as a `NonZeroInt`
88
100
  */
89
101
  max: max_,
90
102
 
91
103
  /**
92
- * Generates a random non-zero integer.
104
+ * Generates a random `NonZeroInt` within the given range.
105
+ *
106
+ * The range is inclusive on both ends.
93
107
  *
94
- * @returns A random NonZeroInt value.
108
+ * @param min - The minimum value (inclusive)
109
+ * @param max - The maximum value (inclusive)
110
+ * @returns A random `NonZeroInt` in `[min, max]`
95
111
  */
96
112
  random,
97
113
 
98
114
  /**
99
- * Raises a non-zero integer to the power of another non-zero integer.
115
+ * Raises `a` to the power `b`, returning `a ** b` as a `NonZeroInt` (floored
116
+ * to an integer).
100
117
  *
101
- * @param a The base non-zero integer.
102
- * @param b The exponent non-zero integer.
103
- * @returns `a ** b` as a NonZeroInt.
118
+ * @param a - The base non-zero integer
119
+ * @param b - The exponent non-zero integer
120
+ * @returns `a ** b` as a `NonZeroInt`
104
121
  */
105
122
  pow,
106
123
 
107
124
  /**
108
- * Multiplies two non-zero integers.
109
- *
110
- * The product of two non-zero integers is always non-zero, so this stays
111
- * closed; for the non-closed operations (`add`/`sub`/`div`, whose result may
112
- * be `0`) use {@link Num.add}/{@link Num.sub}/{@link Num.divInt}.
125
+ * Multiplies two non-zero integers, returning `a * b` as a `NonZeroInt`.
113
126
  *
114
- * @param a The first non-zero integer.
115
- * @param b The second non-zero integer.
116
- * @returns `a * b` as a NonZeroInt.
127
+ * @param a - The first non-zero integer
128
+ * @param b - The second non-zero integer
129
+ * @returns The product of `a` and `b` as a `NonZeroInt`
117
130
  */
118
131
  mul,
119
132
  } as const;
@@ -33,117 +33,116 @@ const {
33
33
  } as const);
34
34
 
35
35
  /**
36
- * Checks if a number is a NonZeroInt16 (16-bit non-zero signed integer in the
37
- * range [-2^15, 2^15) excluding 0).
36
+ * Type guard that checks if a value is a non-zero integer in [-2^15, 2^15).
38
37
  *
39
- * @param value The value to check.
40
- * @returns `true` if the value is a NonZeroInt16, `false` otherwise.
38
+ * Returns `true` for a non-zero integer in [-2^15, 2^15) — a value with no
39
+ * fractional component.
40
+ *
41
+ * @param value - The value to check
42
+ * @returns `true` if the value is a non-zero integer in [-2^15, 2^15), `false` otherwise
41
43
  */
42
44
  export const isNonZeroInt16 = is;
43
45
 
44
46
  /**
45
- * Casts a number to a NonZeroInt16 type.
47
+ * Casts a `number` to the `NonZeroInt16` branded type.
48
+ *
49
+ * Validates that the value is a non-zero integer in [-2^15, 2^15) and returns
50
+ * it with the `NonZeroInt16` brand. Throws a `TypeError` otherwise.
46
51
  *
47
- * @param value The value to cast.
48
- * @returns The value as a NonZeroInt16 type.
49
- * @throws {TypeError} If the value is not a non-zero integer in [-2^15, 2^15).
52
+ * @param value - The value to cast
53
+ * @returns The value as a `NonZeroInt16`
54
+ * @throws {TypeError} If the value is not a non-zero integer in [-2^15, 2^15)
50
55
  */
51
56
  export const asNonZeroInt16 = castType;
52
57
 
53
58
  /**
54
- * Namespace providing type-safe arithmetic operations for 16-bit non-zero
55
- * signed integers.
59
+ * Namespace providing type-safe operations for the `NonZeroInt16` branded type.
56
60
  *
57
- * All operations automatically clamp results to the valid NonZeroInt16 range
58
- * [-32768, 32767] excluding 0. This ensures that all arithmetic maintains the
59
- * 16-bit non-zero signed integer constraint, preventing zero results and
60
- * overflow.
61
+ * The `NonZeroInt16` type represents a non-zero integer in [-2^15, 2^15).
62
+ * Division (`div`) uses floor division.
61
63
  */
62
64
  export const NonZeroInt16 = {
63
65
  /**
64
- * Type guard to check if a value is a NonZeroInt16.
66
+ * Type guard that checks if a value is a non-zero integer in [-2^15, 2^15).
65
67
  *
66
- * @param value The value to check.
67
- * @returns `true` if the value is a 16-bit non-zero signed integer, `false`
68
- * otherwise.
68
+ * @param value - The value to check
69
+ * @returns `true` if the value is a non-zero integer in [-2^15, 2^15), `false` otherwise
70
+ * @see {@link isNonZeroInt16} for usage examples
69
71
  */
70
72
  is,
71
73
 
72
74
  /**
73
- * The minimum value for a 16-bit non-zero signed integer.
74
- *
75
- * @readonly
75
+ * The smallest value representable as `NonZeroInt16`.
76
76
  */
77
77
  MIN_VALUE,
78
78
 
79
79
  /**
80
- * The maximum value for a 16-bit non-zero signed integer.
81
- *
82
- * @readonly
80
+ * The largest value representable as `NonZeroInt16`.
83
81
  */
84
82
  MAX_VALUE,
85
83
 
86
84
  /**
87
- * Returns the absolute value of a 16-bit non-zero signed integer.
85
+ * Returns the absolute value of a non-zero integer in [-2^15, 2^15).
88
86
  *
89
- * @param a The NonZeroInt16 value.
90
- * @returns The absolute value as a NonZeroInt16, clamped to valid range.
87
+ * The result is non-negative and keeps the `NonZeroInt16` brand.
88
+ *
89
+ * @param a - The non-zero integer value
90
+ * @returns The absolute value as a non-negative `NonZeroInt16`
91
91
  */
92
92
  abs,
93
93
 
94
94
  /**
95
- * Returns the smaller of two NonZeroInt16 values.
95
+ * Returns the smallest of the given non-zero integers.
96
96
  *
97
- * @param a The first NonZeroInt16.
98
- * @param b The second NonZeroInt16.
99
- * @returns The minimum value as a NonZeroInt16.
97
+ * @param values - The non-zero integers to compare (at least one required)
98
+ * @returns The smallest value as a `NonZeroInt16`
100
99
  */
101
100
  min: min_,
102
101
 
103
102
  /**
104
- * Returns the larger of two NonZeroInt16 values.
103
+ * Returns the largest of the given non-zero integers.
105
104
  *
106
- * @param a The first NonZeroInt16.
107
- * @param b The second NonZeroInt16.
108
- * @returns The maximum value as a NonZeroInt16.
105
+ * @param values - The non-zero integers to compare (at least one required)
106
+ * @returns The largest value as a `NonZeroInt16`
109
107
  */
110
108
  max: max_,
111
109
 
112
110
  /**
113
- * Clamps a number to the NonZeroInt16 range (avoiding zero).
111
+ * Clamps a `number` into the `NonZeroInt16` range, rounding to the nearest
112
+ * integer and constraining the result to `[MIN_VALUE, MAX_VALUE]`.
114
113
  *
115
- * @param value The number to clamp.
116
- * @returns The value clamped to [-32768, 32767] \ {0} as a NonZeroInt16.
114
+ * @param value - The value to clamp
115
+ * @returns The clamped value as a `NonZeroInt16`
117
116
  */
118
117
  clamp,
119
118
 
120
119
  /**
121
- * Generates a random NonZeroInt16 value within the valid range.
120
+ * Generates a random `NonZeroInt16` within the given range.
121
+ *
122
+ * The range is inclusive on both ends.
122
123
  *
123
- * @returns A random NonZeroInt16 between MIN_VALUE and MAX_VALUE (excluding
124
- * 0).
124
+ * @param min - The minimum value (inclusive)
125
+ * @param max - The maximum value (inclusive)
126
+ * @returns A random `NonZeroInt16` in `[min, max]`
125
127
  */
126
128
  random,
127
129
 
128
130
  /**
129
- * Raises a NonZeroInt16 to the power of another NonZeroInt16.
131
+ * Raises `a` to the power `b`, returning `a ** b` as a `NonZeroInt16`
132
+ * (floored to an integer).
130
133
  *
131
- * @param a The base NonZeroInt16.
132
- * @param b The exponent NonZeroInt16.
133
- * @returns `a ** b` clamped to [-32768, 32767] as a NonZeroInt16.
134
+ * @param a - The base non-zero integer
135
+ * @param b - The exponent non-zero integer
136
+ * @returns `a ** b` as a `NonZeroInt16`
134
137
  */
135
138
  pow,
136
139
 
137
140
  /**
138
- * Multiplies two NonZeroInt16 values.
139
- *
140
- * The product of two non-zero integers is always non-zero, so this stays
141
- * closed; for the non-closed operations (`add`/`sub`/`div`, whose result may
142
- * be `0`) use {@link Num.add}/{@link Num.sub}/{@link Num.divInt}.
141
+ * Multiplies two non-zero integers, returning `a * b` as a `NonZeroInt16`.
143
142
  *
144
- * @param a The first NonZeroInt16.
145
- * @param b The second NonZeroInt16.
146
- * @returns `a * b` clamped to [-32768, 32767] as a NonZeroInt16.
143
+ * @param a - The first non-zero integer
144
+ * @param b - The second non-zero integer
145
+ * @returns The product of `a` and `b` as a `NonZeroInt16`
147
146
  */
148
147
  mul,
149
148
  } as const;