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
@@ -6,8 +6,8 @@ const {
6
6
  MIN_VALUE,
7
7
  add,
8
8
  castType,
9
- clamp,
10
9
  div,
10
+ fromNumber,
11
11
  is,
12
12
  max: max_,
13
13
  min: min_,
@@ -26,7 +26,7 @@ const isPositiveSafeInt = is;
26
26
  const asPositiveSafeInt = castType;
27
27
  const PositiveSafeInt = {
28
28
  /**
29
- * Type guard to check if a value is a PositiveSafeInt.
29
+ * Type guard that checks if a value is a positive safe integer.
30
30
  *
31
31
  * @example
32
32
  *
@@ -40,25 +40,23 @@ const PositiveSafeInt = {
40
40
  * assert.isTrue(PositiveSafeInt.is(42));
41
41
  * ```
42
42
  *
43
- * @param value The value to check.
44
- * @returns `true` if the value is a positive safe integer, `false` otherwise.
43
+ * @param value - The value to check
44
+ * @returns `true` if the value is a positive safe integer, `false` otherwise
45
45
  * @see {@link isPositiveSafeInt} for usage examples
46
46
  */
47
47
  is,
48
48
  /**
49
- * The minimum value for a positive safe integer.
50
- *
51
- * @readonly
49
+ * The smallest value representable as `PositiveSafeInt` (the lower saturation
50
+ * target of `fromNumber`).
52
51
  */
53
52
  MIN_VALUE,
54
53
  /**
55
- * The maximum safe integer value (2^53 - 1).
56
- *
57
- * @readonly
54
+ * The largest value representable as `PositiveSafeInt` (the upper saturation
55
+ * target of `fromNumber`).
58
56
  */
59
57
  MAX_VALUE,
60
58
  /**
61
- * Returns the smaller of two PositiveSafeInt values.
59
+ * Returns the smallest of the given positive safe integers.
62
60
  *
63
61
  * @example
64
62
  *
@@ -71,13 +69,12 @@ const PositiveSafeInt = {
71
69
  * assert.isTrue(smallest === 5);
72
70
  * ```
73
71
  *
74
- * @param a The first PositiveSafeInt.
75
- * @param b The second PositiveSafeInt.
76
- * @returns The minimum value as a PositiveSafeInt.
72
+ * @param values - The positive safe integers to compare (at least one required)
73
+ * @returns The smallest value as a `PositiveSafeInt`
77
74
  */
78
75
  min: min_,
79
76
  /**
80
- * Returns the larger of two PositiveSafeInt values.
77
+ * Returns the largest of the given positive safe integers.
81
78
  *
82
79
  * @example
83
80
  *
@@ -90,22 +87,26 @@ const PositiveSafeInt = {
90
87
  * assert.isTrue(largest === 10);
91
88
  * ```
92
89
  *
93
- * @param a The first PositiveSafeInt.
94
- * @param b The second PositiveSafeInt.
95
- * @returns The maximum value as a PositiveSafeInt.
90
+ * @param values - The positive safe integers to compare (at least one required)
91
+ * @returns The largest value as a `PositiveSafeInt`
96
92
  */
97
93
  max: max_,
98
94
  /**
99
- * Clamps a number to the positive safe integer range.
95
+ * Converts an arbitrary `number` into a `PositiveSafeInt`, rounding to the
96
+ * nearest integer and saturating the result into the range `[MIN_VALUE,
97
+ * MAX_VALUE]`.
98
+ *
99
+ * Unlike `asPositiveSafeInt`, this is total: out-of-range inputs are clamped
100
+ * to the nearest representable `PositiveSafeInt` instead of throwing.
100
101
  *
101
102
  * @example
102
103
  *
103
104
  * ```ts
104
- * const belowRange = PositiveSafeInt.clamp(0);
105
+ * const belowRange = PositiveSafeInt.fromNumber(0);
105
106
  *
106
- * const withinRange = PositiveSafeInt.clamp(123);
107
+ * const withinRange = PositiveSafeInt.fromNumber(123);
107
108
  *
108
- * const aboveRange = PositiveSafeInt.clamp(Number.MAX_SAFE_INTEGER + 10);
109
+ * const aboveRange = PositiveSafeInt.fromNumber(Number.MAX_SAFE_INTEGER + 10);
109
110
  *
110
111
  * assert.isTrue(belowRange === 1);
111
112
  *
@@ -114,12 +115,14 @@ const PositiveSafeInt = {
114
115
  * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);
115
116
  * ```
116
117
  *
117
- * @param value The number to clamp.
118
- * @returns The value clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.
118
+ * @param value - The value to convert
119
+ * @returns The value as a `PositiveSafeInt`
119
120
  */
120
- clamp,
121
+ fromNumber,
121
122
  /**
122
- * Generates a random PositiveSafeInt value within the valid range.
123
+ * Generates a random `PositiveSafeInt` within the given range.
124
+ *
125
+ * The range is inclusive on both ends.
123
126
  *
124
127
  * @example
125
128
  *
@@ -135,11 +138,14 @@ const PositiveSafeInt = {
135
138
  * assert.isTrue(randomValue >= 1 && randomValue <= 6);
136
139
  * ```
137
140
  *
138
- * @returns A random PositiveSafeInt between 1 and MAX_SAFE_INTEGER.
141
+ * @param min - The minimum value (inclusive)
142
+ * @param max - The maximum value (inclusive)
143
+ * @returns A random `PositiveSafeInt` in `[min, max]`
139
144
  */
140
145
  random,
141
146
  /**
142
- * Raises a PositiveSafeInt to the power of another PositiveSafeInt.
147
+ * Raises `a` to the power `b`, returning `a ** b` as a `PositiveSafeInt`
148
+ * (floored to an integer).
143
149
  *
144
150
  * @example
145
151
  *
@@ -153,13 +159,13 @@ const PositiveSafeInt = {
153
159
  * assert.isTrue(power === 27);
154
160
  * ```
155
161
  *
156
- * @param a The base PositiveSafeInt.
157
- * @param b The exponent PositiveSafeInt.
158
- * @returns `a ** b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.
162
+ * @param a - The base positive safe integer
163
+ * @param b - The exponent positive safe integer
164
+ * @returns `a ** b` as a `PositiveSafeInt`
159
165
  */
160
166
  pow,
161
167
  /**
162
- * Adds two PositiveSafeInt values.
168
+ * Adds two positive safe integers, returning `a + b` as a `PositiveSafeInt`.
163
169
  *
164
170
  * @example
165
171
  *
@@ -174,13 +180,14 @@ const PositiveSafeInt = {
174
180
  * assert.isTrue(PositiveSafeInt.is(sum));
175
181
  * ```
176
182
  *
177
- * @param a The first PositiveSafeInt.
178
- * @param b The second PositiveSafeInt.
179
- * @returns `a + b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.
183
+ * @param a - The first positive safe integer
184
+ * @param b - The second positive safe integer
185
+ * @returns The sum of `a` and `b` as a `PositiveSafeInt`
180
186
  */
181
187
  add,
182
188
  /**
183
- * Subtracts one PositiveSafeInt from another.
189
+ * Subtracts two positive safe integers, returning `a - b` as a
190
+ * `PositiveSafeInt`.
184
191
  *
185
192
  * @example
186
193
  *
@@ -195,14 +202,14 @@ const PositiveSafeInt = {
195
202
  * assert.isTrue(PositiveSafeInt.is(difference));
196
203
  * ```
197
204
  *
198
- * @param a The minuend PositiveSafeInt.
199
- * @param b The subtrahend PositiveSafeInt.
200
- * @returns `a - b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt
201
- * (minimum 1).
205
+ * @param a - The first positive safe integer
206
+ * @param b - The second positive safe integer
207
+ * @returns The difference of `a` and `b` as a `PositiveSafeInt`
202
208
  */
203
209
  sub,
204
210
  /**
205
- * Multiplies two PositiveSafeInt values.
211
+ * Multiplies two positive safe integers, returning `a * b` as a
212
+ * `PositiveSafeInt`.
206
213
  *
207
214
  * @example
208
215
  *
@@ -217,13 +224,14 @@ const PositiveSafeInt = {
217
224
  * assert.isTrue(PositiveSafeInt.is(product));
218
225
  * ```
219
226
  *
220
- * @param a The first PositiveSafeInt.
221
- * @param b The second PositiveSafeInt.
222
- * @returns `a * b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.
227
+ * @param a - The first positive safe integer
228
+ * @param b - The second positive safe integer
229
+ * @returns The product of `a` and `b` as a `PositiveSafeInt`
223
230
  */
224
231
  mul,
225
232
  /**
226
- * Divides one PositiveSafeInt by another using floor division.
233
+ * Divides two positive safe integers using floor division (`⌊a / b⌋`): the
234
+ * result is `a / b` rounded toward negative infinity, as a `PositiveSafeInt`.
227
235
  *
228
236
  * @example
229
237
  *
@@ -243,9 +251,9 @@ const PositiveSafeInt = {
243
251
  * assert.isTrue(clamped === 1);
244
252
  * ```
245
253
  *
246
- * @param a The dividend PositiveSafeInt.
247
- * @param b The divisor PositiveSafeInt.
248
- * @returns `⌊a / b⌋` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.
254
+ * @param a - The dividend
255
+ * @param b - The divisor (must be non-zero)
256
+ * @returns The floored quotient as a `PositiveSafeInt`
249
257
  */
250
258
  div
251
259
  };
@@ -1 +1 @@
1
- {"version":3,"file":"positive-safe-int.mjs","sources":["../../../src/number/branded-types/positive-safe-int.mts"],"sourcesContent":["import {\n type SafeUint,\n type PositiveSafeInt as TtfImported_PositiveSafeInt,\n} from 'ts-type-forge';\nimport { expectType } from '../../expect-type.mjs';\nimport { TsDataForgeInternals } from '../refined-number-utils.mjs';\n\nexport type PositiveSafeInt = TtfImported_PositiveSafeInt;\n\ntype ElementType = PositiveSafeInt;\n\nconst typeNameInMessage = 'a positive safe integer';\n\nconst {\n MAX_VALUE,\n MIN_VALUE,\n add,\n castType,\n clamp,\n div,\n is,\n max: max_,\n min: min_,\n mul,\n pow,\n random,\n sub,\n} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<\n ElementType,\n 1,\n SafeUint\n>({\n integerOrSafeInteger: 'SafeInteger',\n MIN_VALUE: 1,\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer\n MAX_VALUE: Number.MAX_SAFE_INTEGER as SafeUint,\n typeNameInMessage,\n} as const);\n\n/**\n * Checks if a number is a PositiveSafeInt (a positive safe integer in the range\n * [1, MAX_SAFE_INTEGER]).\n *\n * @example\n *\n * ```ts\n * assert.isTrue(isPositiveSafeInt(1));\n *\n * assert.isTrue(isPositiveSafeInt(Number.MAX_SAFE_INTEGER));\n *\n * assert.isFalse(isPositiveSafeInt(0));\n *\n * assert.isTrue(PositiveSafeInt.is(42));\n * ```\n *\n * @param value The value to check.\n * @returns `true` if the value is a PositiveSafeInt, `false` otherwise.\n */\nexport const isPositiveSafeInt = is;\n\n/**\n * Casts a number to a PositiveSafeInt type.\n *\n * @example\n *\n * ```ts\n * const branded = asPositiveSafeInt(128);\n *\n * assert.isTrue(branded === 128);\n *\n * assert.isTrue(PositiveSafeInt.is(branded));\n * ```\n *\n * @param value The value to cast.\n * @returns The value as a PositiveSafeInt type.\n * @throws {TypeError} If the value is not a positive safe integer.\n */\nexport const asPositiveSafeInt = castType;\n\n/**\n * Namespace providing type-safe arithmetic operations for positive safe\n * integers.\n *\n * All operations automatically clamp results to the positive safe integer range\n * [1, MAX_SAFE_INTEGER]. This ensures that all arithmetic maintains both the\n * positive constraint and IEEE 754 precision guarantees, preventing precision\n * loss and ensuring results are always positive.\n */\nexport const PositiveSafeInt = {\n /**\n * Type guard to check if a value is a PositiveSafeInt.\n *\n * @example\n *\n * ```ts\n * assert.isTrue(isPositiveSafeInt(1));\n *\n * assert.isTrue(isPositiveSafeInt(Number.MAX_SAFE_INTEGER));\n *\n * assert.isFalse(isPositiveSafeInt(0));\n *\n * assert.isTrue(PositiveSafeInt.is(42));\n * ```\n *\n * @param value The value to check.\n * @returns `true` if the value is a positive safe integer, `false` otherwise.\n * @see {@link isPositiveSafeInt} for usage examples\n */\n is,\n\n /**\n * The minimum value for a positive safe integer.\n *\n * @readonly\n */\n MIN_VALUE,\n\n /**\n * The maximum safe integer value (2^53 - 1).\n *\n * @readonly\n */\n MAX_VALUE,\n\n /**\n * Returns the smaller of two PositiveSafeInt values.\n *\n * @example\n *\n * ```ts\n * const smallest = PositiveSafeInt.min(\n * asPositiveSafeInt(10),\n * asPositiveSafeInt(5),\n * );\n *\n * assert.isTrue(smallest === 5);\n * ```\n *\n * @param a The first PositiveSafeInt.\n * @param b The second PositiveSafeInt.\n * @returns The minimum value as a PositiveSafeInt.\n */\n min: min_,\n\n /**\n * Returns the larger of two PositiveSafeInt values.\n *\n * @example\n *\n * ```ts\n * const largest = PositiveSafeInt.max(\n * asPositiveSafeInt(10),\n * asPositiveSafeInt(5),\n * );\n *\n * assert.isTrue(largest === 10);\n * ```\n *\n * @param a The first PositiveSafeInt.\n * @param b The second PositiveSafeInt.\n * @returns The maximum value as a PositiveSafeInt.\n */\n max: max_,\n\n /**\n * Clamps a number to the positive safe integer range.\n *\n * @example\n *\n * ```ts\n * const belowRange = PositiveSafeInt.clamp(0);\n *\n * const withinRange = PositiveSafeInt.clamp(123);\n *\n * const aboveRange = PositiveSafeInt.clamp(Number.MAX_SAFE_INTEGER + 10);\n *\n * assert.isTrue(belowRange === 1);\n *\n * assert.isTrue(withinRange === 123);\n *\n * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);\n * ```\n *\n * @param value The number to clamp.\n * @returns The value clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.\n */\n clamp,\n\n /**\n * Generates a random PositiveSafeInt value within the valid range.\n *\n * @example\n *\n * ```ts\n * const min = asPositiveSafeInt(1);\n *\n * const max = asPositiveSafeInt(6);\n *\n * const randomValue = PositiveSafeInt.random(min, max);\n *\n * assert.isTrue(PositiveSafeInt.is(randomValue));\n *\n * assert.isTrue(randomValue >= 1 && randomValue <= 6);\n * ```\n *\n * @returns A random PositiveSafeInt between 1 and MAX_SAFE_INTEGER.\n */\n random,\n\n /**\n * Raises a PositiveSafeInt to the power of another PositiveSafeInt.\n *\n * @example\n *\n * ```ts\n * const base = asPositiveSafeInt(3);\n *\n * const exponent = asPositiveSafeInt(3);\n *\n * const power = PositiveSafeInt.pow(base, exponent);\n *\n * assert.isTrue(power === 27);\n * ```\n *\n * @param a The base PositiveSafeInt.\n * @param b The exponent PositiveSafeInt.\n * @returns `a ** b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.\n */\n pow,\n\n /**\n * Adds two PositiveSafeInt values.\n *\n * @example\n *\n * ```ts\n * const sum = PositiveSafeInt.add(\n * asPositiveSafeInt(1000),\n * asPositiveSafeInt(2048),\n * );\n *\n * assert.isTrue(sum === 3048);\n *\n * assert.isTrue(PositiveSafeInt.is(sum));\n * ```\n *\n * @param a The first PositiveSafeInt.\n * @param b The second PositiveSafeInt.\n * @returns `a + b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.\n */\n add,\n\n /**\n * Subtracts one PositiveSafeInt from another.\n *\n * @example\n *\n * ```ts\n * const difference = PositiveSafeInt.sub(\n * asPositiveSafeInt(10),\n * asPositiveSafeInt(20),\n * );\n *\n * assert.isTrue(difference === 1);\n *\n * assert.isTrue(PositiveSafeInt.is(difference));\n * ```\n *\n * @param a The minuend PositiveSafeInt.\n * @param b The subtrahend PositiveSafeInt.\n * @returns `a - b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt\n * (minimum 1).\n */\n sub,\n\n /**\n * Multiplies two PositiveSafeInt values.\n *\n * @example\n *\n * ```ts\n * const product = PositiveSafeInt.mul(\n * asPositiveSafeInt(50),\n * asPositiveSafeInt(20),\n * );\n *\n * assert.isTrue(product === 1000);\n *\n * assert.isTrue(PositiveSafeInt.is(product));\n * ```\n *\n * @param a The first PositiveSafeInt.\n * @param b The second PositiveSafeInt.\n * @returns `a * b` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.\n */\n mul,\n\n /**\n * Divides one PositiveSafeInt by another using floor division.\n *\n * @example\n *\n * ```ts\n * const quotient = PositiveSafeInt.div(\n * asPositiveSafeInt(25),\n * asPositiveSafeInt(4),\n * );\n *\n * const clamped = PositiveSafeInt.div(\n * asPositiveSafeInt(5),\n * asPositiveSafeInt(50),\n * );\n *\n * assert.isTrue(quotient === 6);\n *\n * assert.isTrue(clamped === 1);\n * ```\n *\n * @param a The dividend PositiveSafeInt.\n * @param b The divisor PositiveSafeInt.\n * @returns `⌊a / b⌋` clamped to [1, MAX_SAFE_INTEGER] as a PositiveSafeInt.\n */\n div,\n} as const;\n\nexpectType<\n keyof typeof PositiveSafeInt,\n keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'int' | 'positive' | 'range'\n >\n>('=');\n\nexpectType<\n typeof PositiveSafeInt,\n TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'int' | 'positive' | 'range'\n >\n>('<=');\n"],"names":[],"mappings":";;AAWA,MAAM,iBAAA,GAAoB,yBAAA;AAE1B,MAAM;AAAA,EACJ,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,GAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,GAAI,oBAAA,CAAqB,mBAAmB,mBAAA,CAI1C;AAAA,EACA,oBAAA,EAAsB,aAAA;AAAA,EACtB,SAAA,EAAW,CAAA;AAAA;AAAA,EAEX,WAAW,MAAA,CAAO,gBAAA;AAAA,EAClB;AACF,CAAU,CAAA;AAqBH,MAAM,iBAAA,GAAoB;AAmB1B,MAAM,iBAAA,GAAoB;AAW1B,MAAM,eAAA,GAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB7B,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBL,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBL,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA;AACF;;;;"}
1
+ {"version":3,"file":"positive-safe-int.mjs","sources":["../../../src/number/branded-types/positive-safe-int.mts"],"sourcesContent":["import {\n type SafeUint,\n type PositiveSafeInt as TtfImported_PositiveSafeInt,\n} from 'ts-type-forge';\nimport { expectType } from '../../expect-type.mjs';\nimport { TsDataForgeInternals } from '../refined-number-utils.mjs';\n\nexport type PositiveSafeInt = TtfImported_PositiveSafeInt;\n\ntype ElementType = PositiveSafeInt;\n\nconst typeNameInMessage = 'a positive safe integer';\n\nconst {\n MAX_VALUE,\n MIN_VALUE,\n add,\n castType,\n div,\n fromNumber,\n is,\n max: max_,\n min: min_,\n mul,\n pow,\n random,\n sub,\n} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<\n ElementType,\n 1,\n SafeUint\n>({\n integerOrSafeInteger: 'SafeInteger',\n MIN_VALUE: 1,\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer\n MAX_VALUE: Number.MAX_SAFE_INTEGER as SafeUint,\n typeNameInMessage,\n} as const);\n\n/**\n * Type guard that checks if a value is a positive safe integer.\n *\n * Returns `true` for a positive safe integer — a value with no fractional\n * component.\n *\n * @example\n *\n * ```ts\n * assert.isTrue(isPositiveSafeInt(1));\n *\n * assert.isTrue(isPositiveSafeInt(Number.MAX_SAFE_INTEGER));\n *\n * assert.isFalse(isPositiveSafeInt(0));\n *\n * assert.isTrue(PositiveSafeInt.is(42));\n * ```\n *\n * @param value - The value to check\n * @returns `true` if the value is a positive safe integer, `false` otherwise\n */\nexport const isPositiveSafeInt = is;\n\n/**\n * Casts a `number` to the `PositiveSafeInt` branded type.\n *\n * Validates that the value is a positive safe integer and returns it with the\n * `PositiveSafeInt` brand. Throws a `TypeError` otherwise.\n *\n * @example\n *\n * ```ts\n * const branded = asPositiveSafeInt(128);\n *\n * assert.isTrue(branded === 128);\n *\n * assert.isTrue(PositiveSafeInt.is(branded));\n * ```\n *\n * @param value - The value to cast\n * @returns The value as a `PositiveSafeInt`\n * @throws {TypeError} If the value is not a positive safe integer\n */\nexport const asPositiveSafeInt = castType;\n\n/**\n * Namespace providing type-safe operations for the `PositiveSafeInt` branded\n * type.\n *\n * The `PositiveSafeInt` type represents a positive safe integer. Division\n * (`div`) uses floor division.\n */\nexport const PositiveSafeInt = {\n /**\n * Type guard that checks if a value is a positive safe integer.\n *\n * @example\n *\n * ```ts\n * assert.isTrue(isPositiveSafeInt(1));\n *\n * assert.isTrue(isPositiveSafeInt(Number.MAX_SAFE_INTEGER));\n *\n * assert.isFalse(isPositiveSafeInt(0));\n *\n * assert.isTrue(PositiveSafeInt.is(42));\n * ```\n *\n * @param value - The value to check\n * @returns `true` if the value is a positive safe integer, `false` otherwise\n * @see {@link isPositiveSafeInt} for usage examples\n */\n is,\n\n /**\n * The smallest value representable as `PositiveSafeInt` (the lower saturation\n * target of `fromNumber`).\n */\n MIN_VALUE,\n\n /**\n * The largest value representable as `PositiveSafeInt` (the upper saturation\n * target of `fromNumber`).\n */\n MAX_VALUE,\n\n /**\n * Returns the smallest of the given positive safe integers.\n *\n * @example\n *\n * ```ts\n * const smallest = PositiveSafeInt.min(\n * asPositiveSafeInt(10),\n * asPositiveSafeInt(5),\n * );\n *\n * assert.isTrue(smallest === 5);\n * ```\n *\n * @param values - The positive safe integers to compare (at least one required)\n * @returns The smallest value as a `PositiveSafeInt`\n */\n min: min_,\n\n /**\n * Returns the largest of the given positive safe integers.\n *\n * @example\n *\n * ```ts\n * const largest = PositiveSafeInt.max(\n * asPositiveSafeInt(10),\n * asPositiveSafeInt(5),\n * );\n *\n * assert.isTrue(largest === 10);\n * ```\n *\n * @param values - The positive safe integers to compare (at least one required)\n * @returns The largest value as a `PositiveSafeInt`\n */\n max: max_,\n\n /**\n * Converts an arbitrary `number` into a `PositiveSafeInt`, rounding to the\n * nearest integer and saturating the result into the range `[MIN_VALUE,\n * MAX_VALUE]`.\n *\n * Unlike `asPositiveSafeInt`, this is total: out-of-range inputs are clamped\n * to the nearest representable `PositiveSafeInt` instead of throwing.\n *\n * @example\n *\n * ```ts\n * const belowRange = PositiveSafeInt.fromNumber(0);\n *\n * const withinRange = PositiveSafeInt.fromNumber(123);\n *\n * const aboveRange = PositiveSafeInt.fromNumber(Number.MAX_SAFE_INTEGER + 10);\n *\n * assert.isTrue(belowRange === 1);\n *\n * assert.isTrue(withinRange === 123);\n *\n * assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);\n * ```\n *\n * @param value - The value to convert\n * @returns The value as a `PositiveSafeInt`\n */\n fromNumber,\n\n /**\n * Generates a random `PositiveSafeInt` within the given range.\n *\n * The range is inclusive on both ends.\n *\n * @example\n *\n * ```ts\n * const min = asPositiveSafeInt(1);\n *\n * const max = asPositiveSafeInt(6);\n *\n * const randomValue = PositiveSafeInt.random(min, max);\n *\n * assert.isTrue(PositiveSafeInt.is(randomValue));\n *\n * assert.isTrue(randomValue >= 1 && randomValue <= 6);\n * ```\n *\n * @param min - The minimum value (inclusive)\n * @param max - The maximum value (inclusive)\n * @returns A random `PositiveSafeInt` in `[min, max]`\n */\n random,\n\n /**\n * Raises `a` to the power `b`, returning `a ** b` as a `PositiveSafeInt`\n * (floored to an integer).\n *\n * @example\n *\n * ```ts\n * const base = asPositiveSafeInt(3);\n *\n * const exponent = asPositiveSafeInt(3);\n *\n * const power = PositiveSafeInt.pow(base, exponent);\n *\n * assert.isTrue(power === 27);\n * ```\n *\n * @param a - The base positive safe integer\n * @param b - The exponent positive safe integer\n * @returns `a ** b` as a `PositiveSafeInt`\n */\n pow,\n\n /**\n * Adds two positive safe integers, returning `a + b` as a `PositiveSafeInt`.\n *\n * @example\n *\n * ```ts\n * const sum = PositiveSafeInt.add(\n * asPositiveSafeInt(1000),\n * asPositiveSafeInt(2048),\n * );\n *\n * assert.isTrue(sum === 3048);\n *\n * assert.isTrue(PositiveSafeInt.is(sum));\n * ```\n *\n * @param a - The first positive safe integer\n * @param b - The second positive safe integer\n * @returns The sum of `a` and `b` as a `PositiveSafeInt`\n */\n add,\n\n /**\n * Subtracts two positive safe integers, returning `a - b` as a\n * `PositiveSafeInt`.\n *\n * @example\n *\n * ```ts\n * const difference = PositiveSafeInt.sub(\n * asPositiveSafeInt(10),\n * asPositiveSafeInt(20),\n * );\n *\n * assert.isTrue(difference === 1);\n *\n * assert.isTrue(PositiveSafeInt.is(difference));\n * ```\n *\n * @param a - The first positive safe integer\n * @param b - The second positive safe integer\n * @returns The difference of `a` and `b` as a `PositiveSafeInt`\n */\n sub,\n\n /**\n * Multiplies two positive safe integers, returning `a * b` as a\n * `PositiveSafeInt`.\n *\n * @example\n *\n * ```ts\n * const product = PositiveSafeInt.mul(\n * asPositiveSafeInt(50),\n * asPositiveSafeInt(20),\n * );\n *\n * assert.isTrue(product === 1000);\n *\n * assert.isTrue(PositiveSafeInt.is(product));\n * ```\n *\n * @param a - The first positive safe integer\n * @param b - The second positive safe integer\n * @returns The product of `a` and `b` as a `PositiveSafeInt`\n */\n mul,\n\n /**\n * Divides two positive safe integers using floor division (`⌊a / b⌋`): the\n * result is `a / b` rounded toward negative infinity, as a `PositiveSafeInt`.\n *\n * @example\n *\n * ```ts\n * const quotient = PositiveSafeInt.div(\n * asPositiveSafeInt(25),\n * asPositiveSafeInt(4),\n * );\n *\n * const clamped = PositiveSafeInt.div(\n * asPositiveSafeInt(5),\n * asPositiveSafeInt(50),\n * );\n *\n * assert.isTrue(quotient === 6);\n *\n * assert.isTrue(clamped === 1);\n * ```\n *\n * @param a - The dividend\n * @param b - The divisor (must be non-zero)\n * @returns The floored quotient as a `PositiveSafeInt`\n */\n div,\n} as const;\n\nexpectType<\n keyof typeof PositiveSafeInt,\n keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'int' | 'positive' | 'range'\n >\n>('=');\n\nexpectType<\n typeof PositiveSafeInt,\n TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'int' | 'positive' | 'range'\n >\n>('<=');\n"],"names":[],"mappings":";;AAWA,MAAM,iBAAA,GAAoB,yBAAA;AAE1B,MAAM;AAAA,EACJ,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,GAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,GAAI,oBAAA,CAAqB,mBAAmB,mBAAA,CAI1C;AAAA,EACA,oBAAA,EAAsB,aAAA;AAAA,EACtB,SAAA,EAAW,CAAA;AAAA;AAAA,EAEX,WAAW,MAAA,CAAO,gBAAA;AAAA,EAClB;AACF,CAAU,CAAA;AAuBH,MAAM,iBAAA,GAAoB;AAsB1B,MAAM,iBAAA,GAAoB;AAS1B,MAAM,eAAA,GAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB7B,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBL,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BL,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BA;AACF;;;;"}
@@ -1,19 +1,24 @@
1
1
  import { type PositiveUint16 as TtfImported_PositiveUint16 } from 'ts-type-forge';
2
2
  export type PositiveUint16 = TtfImported_PositiveUint16;
3
3
  /**
4
- * Checks if a number is a PositiveUint16 (16-bit positive unsigned integer in
5
- * the range [1, 2^16)).
4
+ * Type guard that checks if a value is a positive integer in [1, 2^16).
6
5
  *
7
- * @param value The value to check.
8
- * @returns `true` if the value is a PositiveUint16, `false` otherwise.
6
+ * Returns `true` for a positive integer in [1, 2^16) — a value with no
7
+ * fractional component.
8
+ *
9
+ * @param value - The value to check
10
+ * @returns `true` if the value is a positive integer in [1, 2^16), `false` otherwise
9
11
  */
10
12
  export declare const isPositiveUint16: (a: number) => a is TtfImported_PositiveUint16;
11
13
  /**
12
- * Casts a number to a PositiveUint16 type.
14
+ * Casts a `number` to the `PositiveUint16` branded type.
15
+ *
16
+ * Validates that the value is a positive integer in [1, 2^16) and returns it
17
+ * with the `PositiveUint16` brand. Throws a `TypeError` otherwise.
13
18
  *
14
- * @param value The value to cast.
15
- * @returns The value as a PositiveUint16 type.
16
- * @throws {TypeError} If the value is not a positive integer in [1, 2^16).
19
+ * @param value - The value to cast
20
+ * @returns The value as a `PositiveUint16`
21
+ * @throws {TypeError} If the value is not a positive integer in [1, 2^16)
17
22
  */
18
23
  export declare const asPositiveUint16: <N extends number>(x: N) => number & {
19
24
  readonly "!=0": true;
@@ -34,102 +39,107 @@ export declare const asPositiveUint16: <N extends number>(x: N) => number & {
34
39
  'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
35
40
  }> & N;
36
41
  /**
37
- * Namespace providing type-safe arithmetic operations for 16-bit positive
38
- * unsigned integers.
42
+ * Namespace providing type-safe operations for the `PositiveUint16` branded
43
+ * type.
39
44
  *
40
- * All operations automatically clamp results to the valid PositiveUint16 range
41
- * [1, 65535]. This ensures that all arithmetic maintains the 16-bit positive
42
- * unsigned integer constraint, with results below 1 clamped to MIN_VALUE and
43
- * overflow results clamped to MAX_VALUE.
45
+ * The `PositiveUint16` type represents a positive integer in [1, 2^16).
46
+ * Division (`div`) uses floor division.
44
47
  */
45
48
  export declare const PositiveUint16: {
46
49
  /**
47
- * Type guard to check if a value is a PositiveUint16.
50
+ * Type guard that checks if a value is a positive integer in [1, 2^16).
48
51
  *
49
- * @param value The value to check.
50
- * @returns `true` if the value is a 16-bit positive unsigned integer, `false`
51
- * otherwise.
52
+ * @param value - The value to check
53
+ * @returns `true` if the value is a positive integer in [1, 2^16), `false` otherwise
54
+ * @see {@link isPositiveUint16} for usage examples
52
55
  */
53
56
  readonly is: (a: number) => a is TtfImported_PositiveUint16;
54
57
  /**
55
- * The minimum value for a 16-bit positive unsigned integer.
56
- *
57
- * @readonly
58
+ * The smallest value representable as `PositiveUint16` (the lower saturation
59
+ * target of `fromNumber`).
58
60
  */
59
61
  readonly MIN_VALUE: 1;
60
62
  /**
61
- * The maximum value for a 16-bit positive unsigned integer.
62
- *
63
- * @readonly
63
+ * The largest value representable as `PositiveUint16` (the upper saturation
64
+ * target of `fromNumber`).
64
65
  */
65
66
  readonly MAX_VALUE: number;
66
67
  /**
67
- * Returns the smaller of two PositiveUint16 values.
68
+ * Returns the smallest of the given positive integers.
68
69
  *
69
- * @param a The first PositiveUint16.
70
- * @param b The second PositiveUint16.
71
- * @returns The minimum value as a PositiveUint16.
70
+ * @param values - The positive integers to compare (at least one required)
71
+ * @returns The smallest value as a `PositiveUint16`
72
72
  */
73
73
  readonly min: (...values: readonly import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>[]) => TtfImported_PositiveUint16;
74
74
  /**
75
- * Returns the larger of two PositiveUint16 values.
75
+ * Returns the largest of the given positive integers.
76
76
  *
77
- * @param a The first PositiveUint16.
78
- * @param b The second PositiveUint16.
79
- * @returns The maximum value as a PositiveUint16.
77
+ * @param values - The positive integers to compare (at least one required)
78
+ * @returns The largest value as a `PositiveUint16`
80
79
  */
81
80
  readonly max: (...values: readonly import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>[]) => TtfImported_PositiveUint16;
82
81
  /**
83
- * Clamps a number to the PositiveUint16 range.
82
+ * Converts an arbitrary `number` into a `PositiveUint16`, rounding to the
83
+ * nearest integer and saturating the result into the range `[MIN_VALUE,
84
+ * MAX_VALUE]`.
85
+ *
86
+ * Unlike `asPositiveUint16`, this is total: out-of-range inputs are clamped
87
+ * to the nearest representable `PositiveUint16` instead of throwing.
84
88
  *
85
- * @param value The number to clamp.
86
- * @returns The value clamped to [1, 65535] as a PositiveUint16.
89
+ * @param value - The value to convert
90
+ * @returns The value as a `PositiveUint16`
87
91
  */
88
- readonly clamp: (x: number) => TtfImported_PositiveUint16;
92
+ readonly fromNumber: (x: number) => TtfImported_PositiveUint16;
89
93
  /**
90
- * Generates a random PositiveUint16 value within the valid range.
94
+ * Generates a random `PositiveUint16` within the given range.
95
+ *
96
+ * The range is inclusive on both ends.
91
97
  *
92
- * @returns A random PositiveUint16 between 1 and 65535.
98
+ * @param min - The minimum value (inclusive)
99
+ * @param max - The maximum value (inclusive)
100
+ * @returns A random `PositiveUint16` in `[min, max]`
93
101
  */
94
102
  readonly random: (min?: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16> | undefined, max?: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16> | undefined) => TtfImported_PositiveUint16;
95
103
  /**
96
- * Raises a PositiveUint16 to the power of another PositiveUint16.
104
+ * Raises `a` to the power `b`, returning `a ** b` as a `PositiveUint16`
105
+ * (floored to an integer).
97
106
  *
98
- * @param a The base PositiveUint16.
99
- * @param b The exponent PositiveUint16.
100
- * @returns `a ** b` clamped to [1, 65535] as a PositiveUint16.
107
+ * @param a - The base positive integer
108
+ * @param b - The exponent positive integer
109
+ * @returns `a ** b` as a `PositiveUint16`
101
110
  */
102
111
  readonly pow: (x: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>, y: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>) => TtfImported_PositiveUint16;
103
112
  /**
104
- * Adds two PositiveUint16 values.
113
+ * Adds two positive integers, returning `a + b` as a `PositiveUint16`.
105
114
  *
106
- * @param a The first PositiveUint16.
107
- * @param b The second PositiveUint16.
108
- * @returns `a + b` clamped to [1, 65535] as a PositiveUint16.
115
+ * @param a - The first positive integer
116
+ * @param b - The second positive integer
117
+ * @returns The sum of `a` and `b` as a `PositiveUint16`
109
118
  */
110
119
  readonly add: (x: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>, y: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>) => TtfImported_PositiveUint16;
111
120
  /**
112
- * Subtracts one PositiveUint16 from another.
121
+ * Subtracts two positive integers, returning `a - b` as a `PositiveUint16`.
113
122
  *
114
- * @param a The minuend PositiveUint16.
115
- * @param b The subtrahend PositiveUint16.
116
- * @returns `a - b` clamped to [1, 65535] as a PositiveUint16 (minimum 1).
123
+ * @param a - The first positive integer
124
+ * @param b - The second positive integer
125
+ * @returns The difference of `a` and `b` as a `PositiveUint16`
117
126
  */
118
127
  readonly sub: (x: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>, y: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>) => TtfImported_PositiveUint16;
119
128
  /**
120
- * Multiplies two PositiveUint16 values.
129
+ * Multiplies two positive integers, returning `a * b` as a `PositiveUint16`.
121
130
  *
122
- * @param a The first PositiveUint16.
123
- * @param b The second PositiveUint16.
124
- * @returns `a * b` clamped to [1, 65535] as a PositiveUint16.
131
+ * @param a - The first positive integer
132
+ * @param b - The second positive integer
133
+ * @returns The product of `a` and `b` as a `PositiveUint16`
125
134
  */
126
135
  readonly mul: (x: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>, y: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>) => TtfImported_PositiveUint16;
127
136
  /**
128
- * Divides one PositiveUint16 by another using floor division.
137
+ * Divides two positive integers using floor division (`⌊a / b⌋`): the result
138
+ * is `a / b` rounded toward negative infinity, as a `PositiveUint16`.
129
139
  *
130
- * @param a The dividend PositiveUint16.
131
- * @param b The divisor PositiveUint16.
132
- * @returns `⌊a / b⌋` clamped to [1, 65535] as a PositiveUint16.
140
+ * @param a - The dividend
141
+ * @param b - The divisor (must be non-zero)
142
+ * @returns The floored quotient as a `PositiveUint16`
133
143
  */
134
144
  readonly div: (x: import("ts-type-forge").WithSmallInt<TtfImported_PositiveUint16>, y: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | import("ts-type-forge").NormalizeBrandUnion<number & {
135
145
  readonly "!=0": true;
@@ -1 +1 @@
1
- {"version":3,"file":"positive-uint16.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/positive-uint16.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,IAAI,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAIlF,MAAM,MAAM,cAAc,GAAG,0BAA0B,CAAC;AA+BxD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,gDAAK,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;MAAW,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;IACzB;;;;;;OAMG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;OAKG;;IAGH;;;;OAIG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;;;;;;;;;;;;;;;;;;CAEK,CAAC"}
1
+ {"version":3,"file":"positive-uint16.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/positive-uint16.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,IAAI,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAIlF,MAAM,MAAM,cAAc,GAAG,0BAA0B,CAAC;AA+BxD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,gDAAK,CAAC;AAEnC;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;MAAW,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;IACzB;;;;;;OAMG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;;;;;;OAUG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;CAEK,CAAC"}
@@ -6,8 +6,8 @@ const {
6
6
  MIN_VALUE,
7
7
  add,
8
8
  castType,
9
- clamp,
10
9
  div,
10
+ fromNumber,
11
11
  is,
12
12
  max: max_,
13
13
  min: min_,
@@ -25,92 +25,99 @@ const isPositiveUint16 = is;
25
25
  const asPositiveUint16 = castType;
26
26
  const PositiveUint16 = {
27
27
  /**
28
- * Type guard to check if a value is a PositiveUint16.
28
+ * Type guard that checks if a value is a positive integer in [1, 2^16).
29
29
  *
30
- * @param value The value to check.
31
- * @returns `true` if the value is a 16-bit positive unsigned integer, `false`
32
- * otherwise.
30
+ * @param value - The value to check
31
+ * @returns `true` if the value is a positive integer in [1, 2^16), `false` otherwise
32
+ * @see {@link isPositiveUint16} for usage examples
33
33
  */
34
34
  is,
35
35
  /**
36
- * The minimum value for a 16-bit positive unsigned integer.
37
- *
38
- * @readonly
36
+ * The smallest value representable as `PositiveUint16` (the lower saturation
37
+ * target of `fromNumber`).
39
38
  */
40
39
  MIN_VALUE,
41
40
  /**
42
- * The maximum value for a 16-bit positive unsigned integer.
43
- *
44
- * @readonly
41
+ * The largest value representable as `PositiveUint16` (the upper saturation
42
+ * target of `fromNumber`).
45
43
  */
46
44
  MAX_VALUE,
47
45
  /**
48
- * Returns the smaller of two PositiveUint16 values.
46
+ * Returns the smallest of the given positive integers.
49
47
  *
50
- * @param a The first PositiveUint16.
51
- * @param b The second PositiveUint16.
52
- * @returns The minimum value as a PositiveUint16.
48
+ * @param values - The positive integers to compare (at least one required)
49
+ * @returns The smallest value as a `PositiveUint16`
53
50
  */
54
51
  min: min_,
55
52
  /**
56
- * Returns the larger of two PositiveUint16 values.
53
+ * Returns the largest of the given positive integers.
57
54
  *
58
- * @param a The first PositiveUint16.
59
- * @param b The second PositiveUint16.
60
- * @returns The maximum value as a PositiveUint16.
55
+ * @param values - The positive integers to compare (at least one required)
56
+ * @returns The largest value as a `PositiveUint16`
61
57
  */
62
58
  max: max_,
63
59
  /**
64
- * Clamps a number to the PositiveUint16 range.
60
+ * Converts an arbitrary `number` into a `PositiveUint16`, rounding to the
61
+ * nearest integer and saturating the result into the range `[MIN_VALUE,
62
+ * MAX_VALUE]`.
65
63
  *
66
- * @param value The number to clamp.
67
- * @returns The value clamped to [1, 65535] as a PositiveUint16.
64
+ * Unlike `asPositiveUint16`, this is total: out-of-range inputs are clamped
65
+ * to the nearest representable `PositiveUint16` instead of throwing.
66
+ *
67
+ * @param value - The value to convert
68
+ * @returns The value as a `PositiveUint16`
68
69
  */
69
- clamp,
70
+ fromNumber,
70
71
  /**
71
- * Generates a random PositiveUint16 value within the valid range.
72
+ * Generates a random `PositiveUint16` within the given range.
73
+ *
74
+ * The range is inclusive on both ends.
72
75
  *
73
- * @returns A random PositiveUint16 between 1 and 65535.
76
+ * @param min - The minimum value (inclusive)
77
+ * @param max - The maximum value (inclusive)
78
+ * @returns A random `PositiveUint16` in `[min, max]`
74
79
  */
75
80
  random,
76
81
  /**
77
- * Raises a PositiveUint16 to the power of another PositiveUint16.
82
+ * Raises `a` to the power `b`, returning `a ** b` as a `PositiveUint16`
83
+ * (floored to an integer).
78
84
  *
79
- * @param a The base PositiveUint16.
80
- * @param b The exponent PositiveUint16.
81
- * @returns `a ** b` clamped to [1, 65535] as a PositiveUint16.
85
+ * @param a - The base positive integer
86
+ * @param b - The exponent positive integer
87
+ * @returns `a ** b` as a `PositiveUint16`
82
88
  */
83
89
  pow,
84
90
  /**
85
- * Adds two PositiveUint16 values.
91
+ * Adds two positive integers, returning `a + b` as a `PositiveUint16`.
86
92
  *
87
- * @param a The first PositiveUint16.
88
- * @param b The second PositiveUint16.
89
- * @returns `a + b` clamped to [1, 65535] as a PositiveUint16.
93
+ * @param a - The first positive integer
94
+ * @param b - The second positive integer
95
+ * @returns The sum of `a` and `b` as a `PositiveUint16`
90
96
  */
91
97
  add,
92
98
  /**
93
- * Subtracts one PositiveUint16 from another.
99
+ * Subtracts two positive integers, returning `a - b` as a `PositiveUint16`.
94
100
  *
95
- * @param a The minuend PositiveUint16.
96
- * @param b The subtrahend PositiveUint16.
97
- * @returns `a - b` clamped to [1, 65535] as a PositiveUint16 (minimum 1).
101
+ * @param a - The first positive integer
102
+ * @param b - The second positive integer
103
+ * @returns The difference of `a` and `b` as a `PositiveUint16`
98
104
  */
99
105
  sub,
100
106
  /**
101
- * Multiplies two PositiveUint16 values.
107
+ * Multiplies two positive integers, returning `a * b` as a `PositiveUint16`.
102
108
  *
103
- * @param a The first PositiveUint16.
104
- * @param b The second PositiveUint16.
105
- * @returns `a * b` clamped to [1, 65535] as a PositiveUint16.
109
+ * @param a - The first positive integer
110
+ * @param b - The second positive integer
111
+ * @returns The product of `a` and `b` as a `PositiveUint16`
106
112
  */
107
113
  mul,
108
114
  /**
109
- * Divides one PositiveUint16 by another using floor division.
115
+ * Divides two positive integers using floor division (`⌊a / b⌋`): the result
116
+ * is `a / b` rounded toward negative infinity, as a `PositiveUint16`.
110
117
  *
111
- * @param a The dividend PositiveUint16.
112
- * @param b The divisor PositiveUint16.
113
- * @returns `⌊a / b⌋` clamped to [1, 65535] as a PositiveUint16.
118
+ * @param a - The dividend
119
+ * @param b - The divisor (must be non-zero)
120
+ * @returns The floored quotient as a `PositiveUint16`
114
121
  */
115
122
  div
116
123
  };