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.
- package/README.md +2 -2
- package/dist/number/branded-types/finite-number.d.mts +47 -61
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +37 -41
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +40 -46
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +29 -31
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +71 -59
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +56 -47
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +71 -59
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +56 -47
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/negative-finite-number.d.mts +76 -60
- package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/negative-finite-number.mjs +62 -49
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/negative-int.d.mts +66 -49
- package/dist/number/branded-types/negative-int.d.mts.map +1 -1
- package/dist/number/branded-types/negative-int.mjs +48 -39
- package/dist/number/branded-types/negative-int.mjs.map +1 -1
- package/dist/number/branded-types/negative-safe-int.d.mts +64 -57
- package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/negative-safe-int.mjs +49 -44
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +80 -65
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +65 -53
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +71 -58
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +55 -45
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +71 -59
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +55 -46
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.d.mts +70 -55
- package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.mjs +55 -43
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-int.d.mts +46 -146
- package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-int.mjs +33 -108
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.d.mts +62 -54
- package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.mjs +46 -41
- package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +62 -49
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +46 -37
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +51 -38
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +31 -27
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +59 -54
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +44 -41
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +59 -55
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +44 -42
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +60 -55
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +44 -42
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +59 -54
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +43 -41
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +59 -54
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +43 -41
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +82 -64
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +67 -52
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +53 -70
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +42 -52
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +68 -58
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +52 -45
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +68 -58
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +52 -45
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +72 -61
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +56 -48
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +68 -58
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +52 -45
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +68 -59
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +52 -46
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +52 -66
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +45 -47
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +68 -58
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +53 -46
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +72 -55
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +52 -45
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +66 -59
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +51 -45
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +66 -57
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +50 -45
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +62 -66
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +57 -51
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +66 -59
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +57 -51
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +9 -9
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +7 -7
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/package.json +2 -1
- package/src/number/branded-types/finite-number.mts +47 -61
- package/src/number/branded-types/int.mts +40 -46
- package/src/number/branded-types/int16.mts +72 -60
- package/src/number/branded-types/int32.mts +72 -60
- package/src/number/branded-types/negative-finite-number.mts +78 -71
- package/src/number/branded-types/negative-finite-number.test.mts +4 -4
- package/src/number/branded-types/negative-int.mts +68 -60
- package/src/number/branded-types/negative-int.test.mts +5 -5
- package/src/number/branded-types/negative-safe-int.mts +66 -68
- package/src/number/branded-types/negative-safe-int.test.mts +4 -4
- package/src/number/branded-types/non-negative-finite-number.mts +81 -66
- package/src/number/branded-types/non-negative-int16.mts +72 -59
- package/src/number/branded-types/non-negative-int32.mts +72 -60
- package/src/number/branded-types/non-positive-finite-number.mts +71 -56
- package/src/number/branded-types/non-positive-finite-number.test.mts +7 -7
- package/src/number/branded-types/non-positive-int.mts +47 -147
- package/src/number/branded-types/non-positive-int.test.mts +7 -7
- package/src/number/branded-types/non-positive-safe-int.mts +63 -55
- package/src/number/branded-types/non-positive-safe-int.test.mts +7 -7
- package/src/number/branded-types/non-zero-finite-number.mts +62 -51
- package/src/number/branded-types/non-zero-int.mts +51 -38
- package/src/number/branded-types/non-zero-int16.mts +60 -55
- package/src/number/branded-types/non-zero-int32.mts +60 -56
- package/src/number/branded-types/non-zero-safe-int.mts +61 -56
- package/src/number/branded-types/non-zero-uint16.mts +60 -55
- package/src/number/branded-types/non-zero-uint32.mts +60 -55
- package/src/number/branded-types/positive-finite-number.mts +83 -65
- package/src/number/branded-types/positive-int.mts +54 -71
- package/src/number/branded-types/positive-int16.mts +69 -59
- package/src/number/branded-types/positive-int32.mts +69 -59
- package/src/number/branded-types/positive-safe-int.mts +73 -62
- package/src/number/branded-types/positive-uint16.mts +69 -59
- package/src/number/branded-types/positive-uint32.mts +69 -60
- package/src/number/branded-types/safe-int.mts +53 -67
- package/src/number/branded-types/safe-uint.mts +69 -59
- package/src/number/branded-types/uint.mts +73 -56
- package/src/number/branded-types/uint16.mts +67 -60
- package/src/number/branded-types/uint32.mts +67 -58
- package/src/number/enum/int8.mts +70 -73
- package/src/number/enum/int8.test.mts +7 -4
- package/src/number/enum/uint8.mts +74 -66
- package/src/number/enum/uint8.test.mts +7 -4
- 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
|
-
*
|
|
39
|
-
*
|
|
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
|
|
57
|
+
* Casts a `number` to the `PositiveInt` branded type.
|
|
58
58
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
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
|
|
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
|
|
79
|
+
* Namespace providing type-safe operations for the `PositiveInt` branded type.
|
|
81
80
|
*
|
|
82
|
-
* PositiveInt represents
|
|
83
|
-
*
|
|
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
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
169
|
-
*
|
|
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.
|
|
165
|
+
* const belowRange = PositiveInt.fromNumber(0);
|
|
175
166
|
*
|
|
176
|
-
* const withinRange = PositiveInt.
|
|
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
|
|
184
|
-
* @returns The value
|
|
174
|
+
* @param value - The value to convert
|
|
175
|
+
* @returns The value as a `PositiveInt`
|
|
185
176
|
*/
|
|
186
|
-
|
|
177
|
+
fromNumber,
|
|
187
178
|
|
|
188
179
|
/**
|
|
189
|
-
* Generates a random
|
|
180
|
+
* Generates a random `PositiveInt` within the given range.
|
|
190
181
|
*
|
|
191
|
-
*
|
|
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
|
|
209
|
-
* @param max - The maximum value (inclusive
|
|
210
|
-
* @returns A random PositiveInt in
|
|
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
|
|
216
|
-
*
|
|
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
|
|
222
|
+
* @returns `a ** b` as a `PositiveInt`
|
|
233
223
|
*/
|
|
234
224
|
pow,
|
|
235
225
|
|
|
236
226
|
/**
|
|
237
|
-
* Adds two positive integers,
|
|
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 -
|
|
248
|
-
* @param b -
|
|
249
|
-
* @returns `a
|
|
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,
|
|
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
|
|
268
|
-
* @param b - The
|
|
269
|
-
* @returns `
|
|
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,
|
|
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 -
|
|
285
|
-
* @param b -
|
|
286
|
-
* @returns `a
|
|
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
|
|
292
|
-
*
|
|
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
|
|
311
|
-
* @param b - The divisor (
|
|
312
|
-
* @returns
|
|
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
|
-
*
|
|
38
|
-
* range [1, 2^15)).
|
|
37
|
+
* Type guard that checks if a value is a positive integer in [1, 2^15).
|
|
39
38
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
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
|
|
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
|
|
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
|
|
56
|
-
*
|
|
60
|
+
* Namespace providing type-safe operations for the `PositiveInt16` branded
|
|
61
|
+
* type.
|
|
57
62
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
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
|
|
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
|
|
69
|
-
*
|
|
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
|
|
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
|
|
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
|
|
89
|
+
* Returns the smallest of the given positive integers.
|
|
89
90
|
*
|
|
90
|
-
* @param
|
|
91
|
-
* @
|
|
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
|
|
97
|
+
* Returns the largest of the given positive integers.
|
|
98
98
|
*
|
|
99
|
-
* @param
|
|
100
|
-
* @
|
|
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
|
-
*
|
|
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
|
|
109
|
-
* @returns The value
|
|
112
|
+
* @param value - The value to convert
|
|
113
|
+
* @returns The value as a `PositiveInt16`
|
|
110
114
|
*/
|
|
111
|
-
|
|
115
|
+
fromNumber,
|
|
112
116
|
|
|
113
117
|
/**
|
|
114
|
-
* Generates a random PositiveInt16
|
|
118
|
+
* Generates a random `PositiveInt16` within the given range.
|
|
119
|
+
*
|
|
120
|
+
* The range is inclusive on both ends.
|
|
115
121
|
*
|
|
116
|
-
* @
|
|
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
|
|
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
|
|
124
|
-
* @param b The exponent
|
|
125
|
-
* @returns `a ** b`
|
|
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
|
|
139
|
+
* Adds two positive integers, returning `a + b` as a `PositiveInt16`.
|
|
131
140
|
*
|
|
132
|
-
* @param a The first
|
|
133
|
-
* @param b The second
|
|
134
|
-
* @returns `a
|
|
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
|
|
148
|
+
* Subtracts two positive integers, returning `a - b` as a `PositiveInt16`.
|
|
140
149
|
*
|
|
141
|
-
* @param a The
|
|
142
|
-
* @param b The
|
|
143
|
-
* @returns `a
|
|
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
|
|
157
|
+
* Multiplies two positive integers, returning `a * b` as a `PositiveInt16`.
|
|
149
158
|
*
|
|
150
|
-
* @param a The first
|
|
151
|
-
* @param b The second
|
|
152
|
-
* @returns `a
|
|
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
|
|
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
|
|
160
|
-
* @param b The divisor
|
|
161
|
-
* @returns
|
|
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;
|