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
|
@@ -16,7 +16,7 @@ const {
|
|
|
16
16
|
MIN_VALUE,
|
|
17
17
|
add,
|
|
18
18
|
castType,
|
|
19
|
-
|
|
19
|
+
fromNumber,
|
|
20
20
|
is,
|
|
21
21
|
max: max_,
|
|
22
22
|
min: min_,
|
|
@@ -35,139 +35,137 @@ const {
|
|
|
35
35
|
typeNameInMessage,
|
|
36
36
|
} as const);
|
|
37
37
|
|
|
38
|
-
/**
|
|
39
|
-
* Returns the absolute value of a negative safe integer.
|
|
40
|
-
*
|
|
41
|
-
* The absolute value of a negative safe integer is always a positive safe
|
|
42
|
-
* integer (`>= 1`), so the result is typed as a {@link PositiveSafeInt}.
|
|
43
|
-
*
|
|
44
|
-
* @param x - The negative safe integer.
|
|
45
|
-
* @returns `|x|` as a PositiveSafeInt.
|
|
46
|
-
*/
|
|
47
38
|
const abs = (x: WithSmallInt<ElementType>): PositiveSafeInt =>
|
|
48
|
-
PositiveSafeInt.
|
|
39
|
+
PositiveSafeInt.fromNumber(Math.abs(x));
|
|
49
40
|
|
|
50
41
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
42
|
+
* Type guard that checks if a value is a negative safe integer.
|
|
43
|
+
*
|
|
44
|
+
* Returns `true` for a negative safe integer — a value with no fractional
|
|
45
|
+
* component.
|
|
53
46
|
*
|
|
54
|
-
* @param value The value to check
|
|
55
|
-
* @returns `true` if the value is a
|
|
47
|
+
* @param value - The value to check
|
|
48
|
+
* @returns `true` if the value is a negative safe integer, `false` otherwise
|
|
56
49
|
*/
|
|
57
50
|
export const isNegativeSafeInt = is;
|
|
58
51
|
|
|
59
52
|
/**
|
|
60
|
-
* Casts a number to
|
|
53
|
+
* Casts a `number` to the `NegativeSafeInt` branded type.
|
|
54
|
+
*
|
|
55
|
+
* Validates that the value is a negative safe integer and returns it with the
|
|
56
|
+
* `NegativeSafeInt` brand. Throws a `TypeError` otherwise.
|
|
61
57
|
*
|
|
62
|
-
* @param value The value to cast
|
|
63
|
-
* @returns The value as a NegativeSafeInt
|
|
64
|
-
* @throws {TypeError} If the value is not a negative safe integer
|
|
58
|
+
* @param value - The value to cast
|
|
59
|
+
* @returns The value as a `NegativeSafeInt`
|
|
60
|
+
* @throws {TypeError} If the value is not a negative safe integer
|
|
65
61
|
*/
|
|
66
62
|
export const asNegativeSafeInt = castType;
|
|
67
63
|
|
|
68
64
|
/**
|
|
69
|
-
* Namespace providing type-safe
|
|
70
|
-
*
|
|
65
|
+
* Namespace providing type-safe operations for the `NegativeSafeInt` branded
|
|
66
|
+
* type.
|
|
71
67
|
*
|
|
72
|
-
* NegativeSafeInt represents
|
|
73
|
-
* (`
|
|
74
|
-
* safe integers clamp their results to the valid range, while operations whose
|
|
75
|
-
* result leaves the set (`mul`, `div`, `abs`) are typed to reflect the actual
|
|
76
|
-
* sign of the result.
|
|
68
|
+
* The `NegativeSafeInt` type represents a negative safe integer. Division
|
|
69
|
+
* (`div`) uses floor division.
|
|
77
70
|
*/
|
|
78
71
|
export const NegativeSafeInt = {
|
|
79
72
|
/**
|
|
80
|
-
* Type guard
|
|
73
|
+
* Type guard that checks if a value is a negative safe integer.
|
|
81
74
|
*
|
|
82
|
-
* @param value The value to check
|
|
83
|
-
* @returns `true` if the value is a negative safe integer, `false` otherwise
|
|
75
|
+
* @param value - The value to check
|
|
76
|
+
* @returns `true` if the value is a negative safe integer, `false` otherwise
|
|
77
|
+
* @see {@link isNegativeSafeInt} for usage examples
|
|
84
78
|
*/
|
|
85
79
|
is,
|
|
86
80
|
|
|
87
81
|
/**
|
|
88
|
-
* The
|
|
89
|
-
*
|
|
90
|
-
* @readonly
|
|
82
|
+
* The smallest value representable as `NegativeSafeInt` (the lower saturation
|
|
83
|
+
* target of `fromNumber`).
|
|
91
84
|
*/
|
|
92
85
|
MIN_VALUE,
|
|
93
86
|
|
|
94
87
|
/**
|
|
95
|
-
* The
|
|
96
|
-
*
|
|
97
|
-
* @readonly
|
|
88
|
+
* The largest value representable as `NegativeSafeInt` (the upper saturation
|
|
89
|
+
* target of `fromNumber`).
|
|
98
90
|
*/
|
|
99
91
|
MAX_VALUE,
|
|
100
92
|
|
|
101
93
|
/**
|
|
102
94
|
* Returns the absolute value of a negative safe integer.
|
|
103
95
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
96
|
+
* The result is non-negative and keeps the `NegativeSafeInt` brand.
|
|
97
|
+
*
|
|
98
|
+
* @param a - The negative safe integer value
|
|
99
|
+
* @returns The absolute value as a non-negative `NegativeSafeInt`
|
|
106
100
|
*/
|
|
107
101
|
abs,
|
|
108
102
|
|
|
109
103
|
/**
|
|
110
|
-
* Returns the
|
|
104
|
+
* Returns the smallest of the given negative safe integers.
|
|
111
105
|
*
|
|
112
|
-
* @param
|
|
113
|
-
* @
|
|
114
|
-
* @returns The minimum value as a NegativeSafeInt.
|
|
106
|
+
* @param values - The negative safe integers to compare (at least one required)
|
|
107
|
+
* @returns The smallest value as a `NegativeSafeInt`
|
|
115
108
|
*/
|
|
116
109
|
min: min_,
|
|
117
110
|
|
|
118
111
|
/**
|
|
119
|
-
* Returns the
|
|
112
|
+
* Returns the largest of the given negative safe integers.
|
|
120
113
|
*
|
|
121
|
-
* @param
|
|
122
|
-
* @
|
|
123
|
-
* @returns The maximum value as a NegativeSafeInt.
|
|
114
|
+
* @param values - The negative safe integers to compare (at least one required)
|
|
115
|
+
* @returns The largest value as a `NegativeSafeInt`
|
|
124
116
|
*/
|
|
125
117
|
max: max_,
|
|
126
118
|
|
|
127
119
|
/**
|
|
128
|
-
*
|
|
120
|
+
* Converts an arbitrary `number` into a `NegativeSafeInt`, rounding to the
|
|
121
|
+
* nearest integer and saturating the result into the range `[MIN_VALUE,
|
|
122
|
+
* MAX_VALUE]`.
|
|
129
123
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
124
|
+
* Unlike `asNegativeSafeInt`, this is total: out-of-range inputs are clamped
|
|
125
|
+
* to the nearest representable `NegativeSafeInt` instead of throwing.
|
|
126
|
+
*
|
|
127
|
+
* @param value - The value to convert
|
|
128
|
+
* @returns The value as a `NegativeSafeInt`
|
|
133
129
|
*/
|
|
134
|
-
|
|
130
|
+
fromNumber,
|
|
135
131
|
|
|
136
132
|
/**
|
|
137
|
-
* Generates a random NegativeSafeInt
|
|
133
|
+
* Generates a random `NegativeSafeInt` within the given range.
|
|
134
|
+
*
|
|
135
|
+
* The range is inclusive on both ends.
|
|
138
136
|
*
|
|
139
|
-
* @
|
|
137
|
+
* @param min - The minimum value (inclusive)
|
|
138
|
+
* @param max - The maximum value (inclusive)
|
|
139
|
+
* @returns A random `NegativeSafeInt` in `[min, max]`
|
|
140
140
|
*/
|
|
141
141
|
random,
|
|
142
142
|
|
|
143
143
|
/**
|
|
144
|
-
* Raises a
|
|
145
|
-
* integer.
|
|
144
|
+
* Raises `a` to the power `b`, returning `a ** b` as a `NegativeSafeInt`
|
|
145
|
+
* (floored to an integer).
|
|
146
146
|
*
|
|
147
|
-
* @param a The base negative safe integer
|
|
148
|
-
* @param b The exponent negative safe integer
|
|
149
|
-
* @returns `a ** b`
|
|
147
|
+
* @param a - The base negative safe integer
|
|
148
|
+
* @param b - The exponent negative safe integer
|
|
149
|
+
* @returns `a ** b` as a `NegativeSafeInt`
|
|
150
150
|
*/
|
|
151
151
|
pow,
|
|
152
152
|
|
|
153
153
|
/**
|
|
154
|
-
* Adds two negative safe integers
|
|
154
|
+
* Adds two negative safe integers, returning `a + b` as a `NegativeSafeInt`.
|
|
155
155
|
*
|
|
156
|
-
* @param a The first negative safe integer
|
|
157
|
-
* @param b The second negative safe integer
|
|
158
|
-
* @returns `a
|
|
156
|
+
* @param a - The first negative safe integer
|
|
157
|
+
* @param b - The second negative safe integer
|
|
158
|
+
* @returns The sum of `a` and `b` as a `NegativeSafeInt`
|
|
159
159
|
*/
|
|
160
160
|
add,
|
|
161
161
|
|
|
162
162
|
/**
|
|
163
|
-
* Subtracts
|
|
164
|
-
*
|
|
165
|
-
* The mathematical result can be positive, so it is clamped to the
|
|
166
|
-
* NegativeSafeInt range (maximum `-1`).
|
|
163
|
+
* Subtracts two negative safe integers, returning `a - b` as a
|
|
164
|
+
* `NegativeSafeInt`.
|
|
167
165
|
*
|
|
168
|
-
* @param a The
|
|
169
|
-
* @param b The
|
|
170
|
-
* @returns `a
|
|
166
|
+
* @param a - The first negative safe integer
|
|
167
|
+
* @param b - The second negative safe integer
|
|
168
|
+
* @returns The difference of `a` and `b` as a `NegativeSafeInt`
|
|
171
169
|
*/
|
|
172
170
|
sub,
|
|
173
171
|
} as const;
|
|
@@ -86,13 +86,13 @@ describe('NegativeSafeInt test', () => {
|
|
|
86
86
|
});
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
describe('NegativeSafeInt.
|
|
89
|
+
describe('NegativeSafeInt.fromNumber', () => {
|
|
90
90
|
test('clamps to the valid range', () => {
|
|
91
|
-
expect(NegativeSafeInt.
|
|
91
|
+
expect(NegativeSafeInt.fromNumber(-5)).toBe(-5);
|
|
92
92
|
|
|
93
|
-
expect(NegativeSafeInt.
|
|
93
|
+
expect(NegativeSafeInt.fromNumber(0)).toBe(-1);
|
|
94
94
|
|
|
95
|
-
expect(NegativeSafeInt.
|
|
95
|
+
expect(NegativeSafeInt.fromNumber(Number.MIN_SAFE_INTEGER - 100)).toBe(
|
|
96
96
|
Number.MIN_SAFE_INTEGER,
|
|
97
97
|
);
|
|
98
98
|
});
|
|
@@ -15,8 +15,8 @@ const {
|
|
|
15
15
|
MIN_VALUE,
|
|
16
16
|
add,
|
|
17
17
|
castType,
|
|
18
|
-
clamp,
|
|
19
18
|
div,
|
|
19
|
+
fromNumber,
|
|
20
20
|
is,
|
|
21
21
|
max: max_,
|
|
22
22
|
min: min_,
|
|
@@ -57,149 +57,164 @@ expectType<TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>, Uint>(
|
|
|
57
57
|
);
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* Type guard that checks if a value is a non-negative finite number.
|
|
61
61
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
62
|
+
* Returns `true` only for a finite value — never `NaN`, `Infinity`, or
|
|
63
|
+
* `-Infinity`.
|
|
64
|
+
*
|
|
65
|
+
* @param value - The value to check
|
|
66
|
+
* @returns `true` if the value is a non-negative finite number, `false` otherwise
|
|
64
67
|
*/
|
|
65
68
|
export const isNonNegativeFiniteNumber = is;
|
|
66
69
|
|
|
67
70
|
/**
|
|
68
|
-
* Casts a number to
|
|
71
|
+
* Casts a `number` to the `NonNegativeFiniteNumber` branded type.
|
|
72
|
+
*
|
|
73
|
+
* Validates that the value is a non-negative finite number and returns it with
|
|
74
|
+
* the `NonNegativeFiniteNumber` brand. Throws a `TypeError` otherwise.
|
|
69
75
|
*
|
|
70
|
-
* @param value The value to cast
|
|
71
|
-
* @returns The value as a NonNegativeFiniteNumber
|
|
72
|
-
* @throws {TypeError} If the value is not a non-negative finite number
|
|
76
|
+
* @param value - The value to cast
|
|
77
|
+
* @returns The value as a `NonNegativeFiniteNumber`
|
|
78
|
+
* @throws {TypeError} If the value is not a non-negative finite number
|
|
73
79
|
*/
|
|
74
80
|
export const asNonNegativeFiniteNumber = castType;
|
|
75
81
|
|
|
76
82
|
/**
|
|
77
|
-
* Namespace providing type-safe
|
|
78
|
-
*
|
|
83
|
+
* Namespace providing type-safe operations for the `NonNegativeFiniteNumber`
|
|
84
|
+
* branded type.
|
|
79
85
|
*
|
|
80
|
-
*
|
|
81
|
-
* results to 0, while ensuring results remain finite (excluding NaN and
|
|
82
|
-
* Infinity). This type is useful for representing measurements, distances,
|
|
83
|
-
* weights, and other inherently non-negative values.
|
|
86
|
+
* The `NonNegativeFiniteNumber` type represents a non-negative finite number.
|
|
84
87
|
*/
|
|
85
88
|
export const NonNegativeFiniteNumber = {
|
|
86
89
|
/**
|
|
87
|
-
* Type guard
|
|
90
|
+
* Type guard that checks if a value is a non-negative finite number.
|
|
88
91
|
*
|
|
89
|
-
* @param value The value to check
|
|
90
|
-
* @returns `true` if the value is a non-negative finite number, `false`
|
|
91
|
-
*
|
|
92
|
+
* @param value - The value to check
|
|
93
|
+
* @returns `true` if the value is a non-negative finite number, `false` otherwise
|
|
94
|
+
* @see {@link isNonNegativeFiniteNumber} for usage examples
|
|
92
95
|
*/
|
|
93
96
|
is,
|
|
94
97
|
|
|
95
98
|
/**
|
|
96
|
-
* The
|
|
97
|
-
*
|
|
98
|
-
* @readonly
|
|
99
|
+
* The smallest value representable as `NonNegativeFiniteNumber` (the lower
|
|
100
|
+
* saturation target of `fromNumber`).
|
|
99
101
|
*/
|
|
100
102
|
MIN_VALUE,
|
|
101
103
|
|
|
102
104
|
/**
|
|
103
|
-
* Returns the
|
|
105
|
+
* Returns the smallest of the given non-negative finite numbers.
|
|
104
106
|
*
|
|
105
|
-
* @param
|
|
106
|
-
* @
|
|
107
|
-
* @returns The minimum value as a NonNegativeFiniteNumber.
|
|
107
|
+
* @param values - The non-negative finite numbers to compare (at least one required)
|
|
108
|
+
* @returns The smallest value as a `NonNegativeFiniteNumber`
|
|
108
109
|
*/
|
|
109
110
|
min: min_,
|
|
110
111
|
|
|
111
112
|
/**
|
|
112
|
-
* Returns the
|
|
113
|
+
* Returns the largest of the given non-negative finite numbers.
|
|
113
114
|
*
|
|
114
|
-
* @param
|
|
115
|
-
* @
|
|
116
|
-
* @returns The maximum value as a NonNegativeFiniteNumber.
|
|
115
|
+
* @param values - The non-negative finite numbers to compare (at least one required)
|
|
116
|
+
* @returns The largest value as a `NonNegativeFiniteNumber`
|
|
117
117
|
*/
|
|
118
118
|
max: max_,
|
|
119
119
|
|
|
120
120
|
/**
|
|
121
|
-
*
|
|
121
|
+
* Converts an arbitrary `number` into a `NonNegativeFiniteNumber`, saturating
|
|
122
|
+
* it into the range `[MIN_VALUE, MAX_VALUE]`.
|
|
122
123
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
124
|
+
* Unlike `asNonNegativeFiniteNumber`, this is total: out-of-range inputs are
|
|
125
|
+
* clamped to the nearest representable `NonNegativeFiniteNumber` instead of
|
|
126
|
+
* throwing.
|
|
127
|
+
*
|
|
128
|
+
* @param value - The value to convert
|
|
129
|
+
* @returns The value as a `NonNegativeFiniteNumber`
|
|
125
130
|
*/
|
|
126
|
-
|
|
131
|
+
fromNumber,
|
|
127
132
|
|
|
128
133
|
/**
|
|
129
|
-
*
|
|
134
|
+
* Returns the greatest integer less than or equal to a non-negative finite
|
|
135
|
+
* number.
|
|
130
136
|
*
|
|
131
|
-
* @param
|
|
132
|
-
* @returns The
|
|
137
|
+
* @param a - The non-negative finite number value
|
|
138
|
+
* @returns The floored value as an integer
|
|
133
139
|
*/
|
|
134
140
|
floor,
|
|
135
141
|
|
|
136
142
|
/**
|
|
137
|
-
*
|
|
143
|
+
* Returns the smallest integer greater than or equal to a non-negative finite
|
|
144
|
+
* number.
|
|
138
145
|
*
|
|
139
|
-
* @param
|
|
140
|
-
* @returns The
|
|
146
|
+
* @param a - The non-negative finite number value
|
|
147
|
+
* @returns The ceiled value as an integer
|
|
141
148
|
*/
|
|
142
149
|
ceil,
|
|
143
150
|
|
|
144
151
|
/**
|
|
145
|
-
*
|
|
152
|
+
* Returns the value of a non-negative finite number rounded to the nearest
|
|
153
|
+
* integer.
|
|
146
154
|
*
|
|
147
|
-
* @param
|
|
148
|
-
* @returns The rounded value as
|
|
155
|
+
* @param a - The non-negative finite number value
|
|
156
|
+
* @returns The rounded value as an integer
|
|
149
157
|
*/
|
|
150
158
|
round,
|
|
151
159
|
|
|
152
160
|
/**
|
|
153
|
-
* Generates a random NonNegativeFiniteNumber
|
|
161
|
+
* Generates a random `NonNegativeFiniteNumber` within the given range.
|
|
162
|
+
*
|
|
163
|
+
* The range is inclusive on both ends.
|
|
154
164
|
*
|
|
155
|
-
* @
|
|
165
|
+
* @param min - The minimum value (inclusive)
|
|
166
|
+
* @param max - The maximum value (inclusive)
|
|
167
|
+
* @returns A random `NonNegativeFiniteNumber` in `[min, max]`
|
|
156
168
|
*/
|
|
157
169
|
random,
|
|
158
170
|
|
|
159
171
|
/**
|
|
160
|
-
* Raises a
|
|
161
|
-
* NonNegativeFiniteNumber
|
|
172
|
+
* Raises `a` to the power `b`, returning `a ** b` as a
|
|
173
|
+
* `NonNegativeFiniteNumber`.
|
|
162
174
|
*
|
|
163
|
-
* @param a The base
|
|
164
|
-
* @param b The exponent
|
|
165
|
-
* @returns `a ** b`
|
|
175
|
+
* @param a - The base non-negative finite number
|
|
176
|
+
* @param b - The exponent non-negative finite number
|
|
177
|
+
* @returns `a ** b` as a `NonNegativeFiniteNumber`
|
|
166
178
|
*/
|
|
167
179
|
pow,
|
|
168
180
|
|
|
169
181
|
/**
|
|
170
|
-
* Adds two
|
|
182
|
+
* Adds two non-negative finite numbers, returning `a + b` as a
|
|
183
|
+
* `NonNegativeFiniteNumber`.
|
|
171
184
|
*
|
|
172
|
-
* @param a The first
|
|
173
|
-
* @param b The second
|
|
174
|
-
* @returns `a
|
|
185
|
+
* @param a - The first non-negative finite number
|
|
186
|
+
* @param b - The second non-negative finite number
|
|
187
|
+
* @returns The sum of `a` and `b` as a `NonNegativeFiniteNumber`
|
|
175
188
|
*/
|
|
176
189
|
add,
|
|
177
190
|
|
|
178
191
|
/**
|
|
179
|
-
* Subtracts
|
|
192
|
+
* Subtracts two non-negative finite numbers, returning `a - b` as a
|
|
193
|
+
* `NonNegativeFiniteNumber`.
|
|
180
194
|
*
|
|
181
|
-
* @param a The
|
|
182
|
-
* @param b The
|
|
183
|
-
* @returns `a
|
|
184
|
-
* 0).
|
|
195
|
+
* @param a - The first non-negative finite number
|
|
196
|
+
* @param b - The second non-negative finite number
|
|
197
|
+
* @returns The difference of `a` and `b` as a `NonNegativeFiniteNumber`
|
|
185
198
|
*/
|
|
186
199
|
sub,
|
|
187
200
|
|
|
188
201
|
/**
|
|
189
|
-
* Multiplies two
|
|
202
|
+
* Multiplies two non-negative finite numbers, returning `a * b` as a
|
|
203
|
+
* `NonNegativeFiniteNumber`.
|
|
190
204
|
*
|
|
191
|
-
* @param a The first
|
|
192
|
-
* @param b The second
|
|
193
|
-
* @returns `a
|
|
205
|
+
* @param a - The first non-negative finite number
|
|
206
|
+
* @param b - The second non-negative finite number
|
|
207
|
+
* @returns The product of `a` and `b` as a `NonNegativeFiniteNumber`
|
|
194
208
|
*/
|
|
195
209
|
mul,
|
|
196
210
|
|
|
197
211
|
/**
|
|
198
|
-
* Divides
|
|
212
|
+
* Divides two non-negative finite numbers, returning `a / b` as a
|
|
213
|
+
* `NonNegativeFiniteNumber`.
|
|
199
214
|
*
|
|
200
|
-
* @param a The dividend
|
|
201
|
-
* @param b The divisor
|
|
202
|
-
* @returns `a / b`
|
|
215
|
+
* @param a - The dividend
|
|
216
|
+
* @param b - The divisor (must be non-zero)
|
|
217
|
+
* @returns `a / b` as a `NonNegativeFiniteNumber`
|
|
203
218
|
*/
|
|
204
219
|
div,
|
|
205
220
|
} as const;
|