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
|
@@ -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
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
88
|
-
*
|
|
91
|
+
* Namespace providing type-safe operations for the `NonZeroFiniteNumber`
|
|
92
|
+
* branded type.
|
|
89
93
|
*
|
|
90
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
108
|
-
*
|
|
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
|
|
117
|
+
* Returns the smallest of the given non-zero finite numbers.
|
|
114
118
|
*
|
|
115
|
-
* @param
|
|
116
|
-
* @
|
|
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
|
|
125
|
+
* Returns the largest of the given non-zero finite numbers.
|
|
123
126
|
*
|
|
124
|
-
* @param
|
|
125
|
-
* @
|
|
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
|
-
*
|
|
133
|
+
* Returns the greatest integer less than or equal to a non-zero finite
|
|
134
|
+
* number.
|
|
132
135
|
*
|
|
133
|
-
* @param
|
|
134
|
-
* @returns The
|
|
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
|
-
*
|
|
142
|
+
* Returns the smallest integer greater than or equal to a non-zero finite
|
|
143
|
+
* number.
|
|
140
144
|
*
|
|
141
|
-
* @param
|
|
142
|
-
* @returns The
|
|
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
|
-
*
|
|
151
|
+
* Returns the value of a non-zero finite number rounded to the nearest
|
|
152
|
+
* integer.
|
|
148
153
|
*
|
|
149
|
-
* @param
|
|
150
|
-
* @returns The rounded value as
|
|
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
|
|
160
|
+
* Generates a random `NonZeroFiniteNumber` within the given range.
|
|
161
|
+
*
|
|
162
|
+
* The range is inclusive on both ends.
|
|
156
163
|
*
|
|
157
|
-
* @
|
|
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
|
|
171
|
+
* Raises `a` to the power `b`, returning `a ** b` as a `NonZeroFiniteNumber`.
|
|
163
172
|
*
|
|
164
|
-
* @param a The base
|
|
165
|
-
* @param b The exponent
|
|
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
|
|
180
|
+
* Multiplies two non-zero finite numbers, returning `a * b` as a
|
|
181
|
+
* `NonZeroFiniteNumber`.
|
|
172
182
|
*
|
|
173
|
-
* @param a The first
|
|
174
|
-
* @param b The second
|
|
175
|
-
* @returns `a
|
|
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
|
|
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
|
|
187
|
-
* @param b The divisor
|
|
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
|
-
*
|
|
33
|
+
* Type guard that checks if a value is a non-zero integer.
|
|
34
34
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
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
|
|
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
|
-
*
|
|
69
|
-
*
|
|
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
|
|
88
|
+
* Returns the smallest of the given non-zero integers.
|
|
75
89
|
*
|
|
76
|
-
* @param
|
|
77
|
-
* @
|
|
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
|
|
96
|
+
* Returns the largest of the given non-zero integers.
|
|
84
97
|
*
|
|
85
|
-
* @param
|
|
86
|
-
* @
|
|
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
|
|
104
|
+
* Generates a random `NonZeroInt` within the given range.
|
|
105
|
+
*
|
|
106
|
+
* The range is inclusive on both ends.
|
|
93
107
|
*
|
|
94
|
-
* @
|
|
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
|
|
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
|
|
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;
|
|
@@ -13,7 +13,7 @@ const {
|
|
|
13
13
|
MIN_VALUE,
|
|
14
14
|
abs,
|
|
15
15
|
castType,
|
|
16
|
-
|
|
16
|
+
fromNumber,
|
|
17
17
|
is,
|
|
18
18
|
max: max_,
|
|
19
19
|
min: min_,
|
|
@@ -33,117 +33,122 @@ const {
|
|
|
33
33
|
} as const);
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
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
|
-
*
|
|
40
|
-
*
|
|
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
|
|
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
|
|
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
|
|
55
|
-
* signed integers.
|
|
59
|
+
* Namespace providing type-safe operations for the `NonZeroInt16` branded type.
|
|
56
60
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
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
|
|
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
|
|
68
|
-
*
|
|
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
|
|
74
|
-
*
|
|
75
|
-
* @readonly
|
|
75
|
+
* The smallest value representable as `NonZeroInt16` (the lower saturation
|
|
76
|
+
* target of `fromNumber`).
|
|
76
77
|
*/
|
|
77
78
|
MIN_VALUE,
|
|
78
79
|
|
|
79
80
|
/**
|
|
80
|
-
* The
|
|
81
|
-
*
|
|
82
|
-
* @readonly
|
|
81
|
+
* The largest value representable as `NonZeroInt16` (the upper saturation
|
|
82
|
+
* target of `fromNumber`).
|
|
83
83
|
*/
|
|
84
84
|
MAX_VALUE,
|
|
85
85
|
|
|
86
86
|
/**
|
|
87
|
-
* Returns the absolute value of a
|
|
87
|
+
* Returns the absolute value of a non-zero integer in [-2^15, 2^15).
|
|
88
88
|
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
89
|
+
* The result is non-negative and keeps the `NonZeroInt16` brand.
|
|
90
|
+
*
|
|
91
|
+
* @param a - The non-zero integer value
|
|
92
|
+
* @returns The absolute value as a non-negative `NonZeroInt16`
|
|
91
93
|
*/
|
|
92
94
|
abs,
|
|
93
95
|
|
|
94
96
|
/**
|
|
95
|
-
* Returns the
|
|
97
|
+
* Returns the smallest of the given non-zero integers.
|
|
96
98
|
*
|
|
97
|
-
* @param
|
|
98
|
-
* @
|
|
99
|
-
* @returns The minimum value as a NonZeroInt16.
|
|
99
|
+
* @param values - The non-zero integers to compare (at least one required)
|
|
100
|
+
* @returns The smallest value as a `NonZeroInt16`
|
|
100
101
|
*/
|
|
101
102
|
min: min_,
|
|
102
103
|
|
|
103
104
|
/**
|
|
104
|
-
* Returns the
|
|
105
|
+
* Returns the largest of the given non-zero integers.
|
|
105
106
|
*
|
|
106
|
-
* @param
|
|
107
|
-
* @
|
|
108
|
-
* @returns The maximum value as a NonZeroInt16.
|
|
107
|
+
* @param values - The non-zero integers to compare (at least one required)
|
|
108
|
+
* @returns The largest value as a `NonZeroInt16`
|
|
109
109
|
*/
|
|
110
110
|
max: max_,
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
|
-
*
|
|
113
|
+
* Converts an arbitrary `number` into a `NonZeroInt16`, rounding to the
|
|
114
|
+
* nearest integer and saturating the result into the range `[MIN_VALUE,
|
|
115
|
+
* MAX_VALUE]`.
|
|
116
|
+
*
|
|
117
|
+
* Unlike `asNonZeroInt16`, this is total: out-of-range inputs are clamped to
|
|
118
|
+
* the nearest representable `NonZeroInt16` instead of throwing.
|
|
114
119
|
*
|
|
115
|
-
* @param value The
|
|
116
|
-
* @returns The value
|
|
120
|
+
* @param value - The value to convert
|
|
121
|
+
* @returns The value as a `NonZeroInt16`
|
|
117
122
|
*/
|
|
118
|
-
|
|
123
|
+
fromNumber,
|
|
119
124
|
|
|
120
125
|
/**
|
|
121
|
-
* Generates a random NonZeroInt16
|
|
126
|
+
* Generates a random `NonZeroInt16` within the given range.
|
|
122
127
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
128
|
+
* The range is inclusive on both ends.
|
|
129
|
+
*
|
|
130
|
+
* @param min - The minimum value (inclusive)
|
|
131
|
+
* @param max - The maximum value (inclusive)
|
|
132
|
+
* @returns A random `NonZeroInt16` in `[min, max]`
|
|
125
133
|
*/
|
|
126
134
|
random,
|
|
127
135
|
|
|
128
136
|
/**
|
|
129
|
-
* Raises a
|
|
137
|
+
* Raises `a` to the power `b`, returning `a ** b` as a `NonZeroInt16`
|
|
138
|
+
* (floored to an integer).
|
|
130
139
|
*
|
|
131
|
-
* @param a The base
|
|
132
|
-
* @param b The exponent
|
|
133
|
-
* @returns `a ** b`
|
|
140
|
+
* @param a - The base non-zero integer
|
|
141
|
+
* @param b - The exponent non-zero integer
|
|
142
|
+
* @returns `a ** b` as a `NonZeroInt16`
|
|
134
143
|
*/
|
|
135
144
|
pow,
|
|
136
145
|
|
|
137
146
|
/**
|
|
138
|
-
* Multiplies two NonZeroInt16
|
|
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}.
|
|
147
|
+
* Multiplies two non-zero integers, returning `a * b` as a `NonZeroInt16`.
|
|
143
148
|
*
|
|
144
|
-
* @param a The first
|
|
145
|
-
* @param b The second
|
|
146
|
-
* @returns `a
|
|
149
|
+
* @param a - The first non-zero integer
|
|
150
|
+
* @param b - The second non-zero integer
|
|
151
|
+
* @returns The product of `a` and `b` as a `NonZeroInt16`
|
|
147
152
|
*/
|
|
148
153
|
mul,
|
|
149
154
|
} as const;
|