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
|
@@ -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^31)).
|
|
37
|
+
* Type guard that checks if a value is a positive integer in [1, 2^31).
|
|
39
38
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* Returns `true` for a positive integer in [1, 2^31) — 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^31), `false` otherwise
|
|
42
44
|
*/
|
|
43
45
|
export const isPositiveInt32 = is;
|
|
44
46
|
|
|
45
47
|
/**
|
|
46
|
-
* Casts a number to
|
|
48
|
+
* Casts a `number` to the `PositiveInt32` branded type.
|
|
49
|
+
*
|
|
50
|
+
* Validates that the value is a positive integer in [1, 2^31) and returns it
|
|
51
|
+
* with the `PositiveInt32` brand. Throws a `TypeError` otherwise.
|
|
47
52
|
*
|
|
48
|
-
* @param value The value to cast
|
|
49
|
-
* @returns The value as a PositiveInt32
|
|
50
|
-
* @throws {TypeError} If the value is not a positive integer in [1, 2^31)
|
|
53
|
+
* @param value - The value to cast
|
|
54
|
+
* @returns The value as a `PositiveInt32`
|
|
55
|
+
* @throws {TypeError} If the value is not a positive integer in [1, 2^31)
|
|
51
56
|
*/
|
|
52
57
|
export const asPositiveInt32 = castType;
|
|
53
58
|
|
|
54
59
|
/**
|
|
55
|
-
* Namespace providing type-safe
|
|
56
|
-
*
|
|
60
|
+
* Namespace providing type-safe operations for the `PositiveInt32` branded
|
|
61
|
+
* type.
|
|
57
62
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* positive integer constraint, with results below 1 clamped to MIN_VALUE and
|
|
61
|
-
* overflow results clamped to MAX_VALUE.
|
|
63
|
+
* The `PositiveInt32` type represents a positive integer in [1, 2^31). Division
|
|
64
|
+
* (`div`) uses floor division.
|
|
62
65
|
*/
|
|
63
66
|
export const PositiveInt32 = {
|
|
64
67
|
/**
|
|
65
|
-
* Type guard
|
|
68
|
+
* Type guard that checks if a value is a positive integer in [1, 2^31).
|
|
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^31), `false` otherwise
|
|
72
|
+
* @see {@link isPositiveInt32} for usage examples
|
|
70
73
|
*/
|
|
71
74
|
is,
|
|
72
75
|
|
|
73
76
|
/**
|
|
74
|
-
* The
|
|
75
|
-
*
|
|
76
|
-
* @readonly
|
|
77
|
+
* The smallest value representable as `PositiveInt32` (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 `PositiveInt32` (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 PositiveInt32.
|
|
91
|
+
* @param values - The positive integers to compare (at least one required)
|
|
92
|
+
* @returns The smallest value as a `PositiveInt32`
|
|
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 PositiveInt32.
|
|
99
|
+
* @param values - The positive integers to compare (at least one required)
|
|
100
|
+
* @returns The largest value as a `PositiveInt32`
|
|
102
101
|
*/
|
|
103
102
|
max: max_,
|
|
104
103
|
|
|
105
104
|
/**
|
|
106
|
-
*
|
|
105
|
+
* Converts an arbitrary `number` into a `PositiveInt32`, rounding to the
|
|
106
|
+
* nearest integer and saturating the result into the range `[MIN_VALUE,
|
|
107
|
+
* MAX_VALUE]`.
|
|
108
|
+
*
|
|
109
|
+
* Unlike `asPositiveInt32`, this is total: out-of-range inputs are clamped to
|
|
110
|
+
* the nearest representable `PositiveInt32` 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 `PositiveInt32`
|
|
110
114
|
*/
|
|
111
|
-
|
|
115
|
+
fromNumber,
|
|
112
116
|
|
|
113
117
|
/**
|
|
114
|
-
* Generates a random PositiveInt32
|
|
118
|
+
* Generates a random `PositiveInt32` 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 `PositiveInt32` 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 `PositiveInt32`
|
|
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 `PositiveInt32`
|
|
126
135
|
*/
|
|
127
136
|
pow,
|
|
128
137
|
|
|
129
138
|
/**
|
|
130
|
-
* Adds two PositiveInt32
|
|
139
|
+
* Adds two positive integers, returning `a + b` as a `PositiveInt32`.
|
|
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 `PositiveInt32`
|
|
135
144
|
*/
|
|
136
145
|
add,
|
|
137
146
|
|
|
138
147
|
/**
|
|
139
|
-
* Subtracts
|
|
148
|
+
* Subtracts two positive integers, returning `a - b` as a `PositiveInt32`.
|
|
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 `PositiveInt32`
|
|
144
153
|
*/
|
|
145
154
|
sub,
|
|
146
155
|
|
|
147
156
|
/**
|
|
148
|
-
* Multiplies two PositiveInt32
|
|
157
|
+
* Multiplies two positive integers, returning `a * b` as a `PositiveInt32`.
|
|
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 `PositiveInt32`
|
|
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 `PositiveInt32`.
|
|
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 `PositiveInt32`
|
|
162
172
|
*/
|
|
163
173
|
div,
|
|
164
174
|
} as const;
|
|
@@ -16,8 +16,8 @@ const {
|
|
|
16
16
|
MIN_VALUE,
|
|
17
17
|
add,
|
|
18
18
|
castType,
|
|
19
|
-
clamp,
|
|
20
19
|
div,
|
|
20
|
+
fromNumber,
|
|
21
21
|
is,
|
|
22
22
|
max: max_,
|
|
23
23
|
min: min_,
|
|
@@ -38,8 +38,10 @@ const {
|
|
|
38
38
|
} as const);
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
41
|
+
* Type guard that checks if a value is a positive safe integer.
|
|
42
|
+
*
|
|
43
|
+
* Returns `true` for a positive safe integer — a value with no fractional
|
|
44
|
+
* component.
|
|
43
45
|
*
|
|
44
46
|
* @example
|
|
45
47
|
*
|
|
@@ -53,13 +55,16 @@ const {
|
|
|
53
55
|
* assert.isTrue(PositiveSafeInt.is(42));
|
|
54
56
|
* ```
|
|
55
57
|
*
|
|
56
|
-
* @param value The value to check
|
|
57
|
-
* @returns `true` if the value is a
|
|
58
|
+
* @param value - The value to check
|
|
59
|
+
* @returns `true` if the value is a positive safe integer, `false` otherwise
|
|
58
60
|
*/
|
|
59
61
|
export const isPositiveSafeInt = is;
|
|
60
62
|
|
|
61
63
|
/**
|
|
62
|
-
* Casts a number to
|
|
64
|
+
* Casts a `number` to the `PositiveSafeInt` branded type.
|
|
65
|
+
*
|
|
66
|
+
* Validates that the value is a positive safe integer and returns it with the
|
|
67
|
+
* `PositiveSafeInt` brand. Throws a `TypeError` otherwise.
|
|
63
68
|
*
|
|
64
69
|
* @example
|
|
65
70
|
*
|
|
@@ -71,24 +76,22 @@ export const isPositiveSafeInt = is;
|
|
|
71
76
|
* assert.isTrue(PositiveSafeInt.is(branded));
|
|
72
77
|
* ```
|
|
73
78
|
*
|
|
74
|
-
* @param value The value to cast
|
|
75
|
-
* @returns The value as a PositiveSafeInt
|
|
76
|
-
* @throws {TypeError} If the value is not a positive safe integer
|
|
79
|
+
* @param value - The value to cast
|
|
80
|
+
* @returns The value as a `PositiveSafeInt`
|
|
81
|
+
* @throws {TypeError} If the value is not a positive safe integer
|
|
77
82
|
*/
|
|
78
83
|
export const asPositiveSafeInt = castType;
|
|
79
84
|
|
|
80
85
|
/**
|
|
81
|
-
* Namespace providing type-safe
|
|
82
|
-
*
|
|
86
|
+
* Namespace providing type-safe operations for the `PositiveSafeInt` branded
|
|
87
|
+
* type.
|
|
83
88
|
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* positive constraint and IEEE 754 precision guarantees, preventing precision
|
|
87
|
-
* loss and ensuring results are always positive.
|
|
89
|
+
* The `PositiveSafeInt` type represents a positive safe integer. Division
|
|
90
|
+
* (`div`) uses floor division.
|
|
88
91
|
*/
|
|
89
92
|
export const PositiveSafeInt = {
|
|
90
93
|
/**
|
|
91
|
-
* Type guard
|
|
94
|
+
* Type guard that checks if a value is a positive safe integer.
|
|
92
95
|
*
|
|
93
96
|
* @example
|
|
94
97
|
*
|
|
@@ -102,28 +105,26 @@ export const PositiveSafeInt = {
|
|
|
102
105
|
* assert.isTrue(PositiveSafeInt.is(42));
|
|
103
106
|
* ```
|
|
104
107
|
*
|
|
105
|
-
* @param value The value to check
|
|
106
|
-
* @returns `true` if the value is a positive safe integer, `false` otherwise
|
|
108
|
+
* @param value - The value to check
|
|
109
|
+
* @returns `true` if the value is a positive safe integer, `false` otherwise
|
|
107
110
|
* @see {@link isPositiveSafeInt} for usage examples
|
|
108
111
|
*/
|
|
109
112
|
is,
|
|
110
113
|
|
|
111
114
|
/**
|
|
112
|
-
* The
|
|
113
|
-
*
|
|
114
|
-
* @readonly
|
|
115
|
+
* The smallest value representable as `PositiveSafeInt` (the lower saturation
|
|
116
|
+
* target of `fromNumber`).
|
|
115
117
|
*/
|
|
116
118
|
MIN_VALUE,
|
|
117
119
|
|
|
118
120
|
/**
|
|
119
|
-
* The
|
|
120
|
-
*
|
|
121
|
-
* @readonly
|
|
121
|
+
* The largest value representable as `PositiveSafeInt` (the upper saturation
|
|
122
|
+
* target of `fromNumber`).
|
|
122
123
|
*/
|
|
123
124
|
MAX_VALUE,
|
|
124
125
|
|
|
125
126
|
/**
|
|
126
|
-
* Returns the
|
|
127
|
+
* Returns the smallest of the given positive safe integers.
|
|
127
128
|
*
|
|
128
129
|
* @example
|
|
129
130
|
*
|
|
@@ -136,14 +137,13 @@ export const PositiveSafeInt = {
|
|
|
136
137
|
* assert.isTrue(smallest === 5);
|
|
137
138
|
* ```
|
|
138
139
|
*
|
|
139
|
-
* @param
|
|
140
|
-
* @
|
|
141
|
-
* @returns The minimum value as a PositiveSafeInt.
|
|
140
|
+
* @param values - The positive safe integers to compare (at least one required)
|
|
141
|
+
* @returns The smallest value as a `PositiveSafeInt`
|
|
142
142
|
*/
|
|
143
143
|
min: min_,
|
|
144
144
|
|
|
145
145
|
/**
|
|
146
|
-
* Returns the
|
|
146
|
+
* Returns the largest of the given positive safe integers.
|
|
147
147
|
*
|
|
148
148
|
* @example
|
|
149
149
|
*
|
|
@@ -156,23 +156,27 @@ export const PositiveSafeInt = {
|
|
|
156
156
|
* assert.isTrue(largest === 10);
|
|
157
157
|
* ```
|
|
158
158
|
*
|
|
159
|
-
* @param
|
|
160
|
-
* @
|
|
161
|
-
* @returns The maximum value as a PositiveSafeInt.
|
|
159
|
+
* @param values - The positive safe integers to compare (at least one required)
|
|
160
|
+
* @returns The largest value as a `PositiveSafeInt`
|
|
162
161
|
*/
|
|
163
162
|
max: max_,
|
|
164
163
|
|
|
165
164
|
/**
|
|
166
|
-
*
|
|
165
|
+
* Converts an arbitrary `number` into a `PositiveSafeInt`, rounding to the
|
|
166
|
+
* nearest integer and saturating the result into the range `[MIN_VALUE,
|
|
167
|
+
* MAX_VALUE]`.
|
|
168
|
+
*
|
|
169
|
+
* Unlike `asPositiveSafeInt`, this is total: out-of-range inputs are clamped
|
|
170
|
+
* to the nearest representable `PositiveSafeInt` instead of throwing.
|
|
167
171
|
*
|
|
168
172
|
* @example
|
|
169
173
|
*
|
|
170
174
|
* ```ts
|
|
171
|
-
* const belowRange = PositiveSafeInt.
|
|
175
|
+
* const belowRange = PositiveSafeInt.fromNumber(0);
|
|
172
176
|
*
|
|
173
|
-
* const withinRange = PositiveSafeInt.
|
|
177
|
+
* const withinRange = PositiveSafeInt.fromNumber(123);
|
|
174
178
|
*
|
|
175
|
-
* const aboveRange = PositiveSafeInt.
|
|
179
|
+
* const aboveRange = PositiveSafeInt.fromNumber(Number.MAX_SAFE_INTEGER + 10);
|
|
176
180
|
*
|
|
177
181
|
* assert.isTrue(belowRange === 1);
|
|
178
182
|
*
|
|
@@ -181,13 +185,15 @@ export const PositiveSafeInt = {
|
|
|
181
185
|
* assert.isTrue(aboveRange === Number.MAX_SAFE_INTEGER);
|
|
182
186
|
* ```
|
|
183
187
|
*
|
|
184
|
-
* @param value The
|
|
185
|
-
* @returns The value
|
|
188
|
+
* @param value - The value to convert
|
|
189
|
+
* @returns The value as a `PositiveSafeInt`
|
|
186
190
|
*/
|
|
187
|
-
|
|
191
|
+
fromNumber,
|
|
188
192
|
|
|
189
193
|
/**
|
|
190
|
-
* Generates a random PositiveSafeInt
|
|
194
|
+
* Generates a random `PositiveSafeInt` within the given range.
|
|
195
|
+
*
|
|
196
|
+
* The range is inclusive on both ends.
|
|
191
197
|
*
|
|
192
198
|
* @example
|
|
193
199
|
*
|
|
@@ -203,12 +209,15 @@ export const PositiveSafeInt = {
|
|
|
203
209
|
* assert.isTrue(randomValue >= 1 && randomValue <= 6);
|
|
204
210
|
* ```
|
|
205
211
|
*
|
|
206
|
-
* @
|
|
212
|
+
* @param min - The minimum value (inclusive)
|
|
213
|
+
* @param max - The maximum value (inclusive)
|
|
214
|
+
* @returns A random `PositiveSafeInt` in `[min, max]`
|
|
207
215
|
*/
|
|
208
216
|
random,
|
|
209
217
|
|
|
210
218
|
/**
|
|
211
|
-
* Raises a
|
|
219
|
+
* Raises `a` to the power `b`, returning `a ** b` as a `PositiveSafeInt`
|
|
220
|
+
* (floored to an integer).
|
|
212
221
|
*
|
|
213
222
|
* @example
|
|
214
223
|
*
|
|
@@ -222,14 +231,14 @@ export const PositiveSafeInt = {
|
|
|
222
231
|
* assert.isTrue(power === 27);
|
|
223
232
|
* ```
|
|
224
233
|
*
|
|
225
|
-
* @param a The base
|
|
226
|
-
* @param b The exponent
|
|
227
|
-
* @returns `a ** b`
|
|
234
|
+
* @param a - The base positive safe integer
|
|
235
|
+
* @param b - The exponent positive safe integer
|
|
236
|
+
* @returns `a ** b` as a `PositiveSafeInt`
|
|
228
237
|
*/
|
|
229
238
|
pow,
|
|
230
239
|
|
|
231
240
|
/**
|
|
232
|
-
* Adds two PositiveSafeInt
|
|
241
|
+
* Adds two positive safe integers, returning `a + b` as a `PositiveSafeInt`.
|
|
233
242
|
*
|
|
234
243
|
* @example
|
|
235
244
|
*
|
|
@@ -244,14 +253,15 @@ export const PositiveSafeInt = {
|
|
|
244
253
|
* assert.isTrue(PositiveSafeInt.is(sum));
|
|
245
254
|
* ```
|
|
246
255
|
*
|
|
247
|
-
* @param a The first
|
|
248
|
-
* @param b The second
|
|
249
|
-
* @returns `a
|
|
256
|
+
* @param a - The first positive safe integer
|
|
257
|
+
* @param b - The second positive safe integer
|
|
258
|
+
* @returns The sum of `a` and `b` as a `PositiveSafeInt`
|
|
250
259
|
*/
|
|
251
260
|
add,
|
|
252
261
|
|
|
253
262
|
/**
|
|
254
|
-
* Subtracts
|
|
263
|
+
* Subtracts two positive safe integers, returning `a - b` as a
|
|
264
|
+
* `PositiveSafeInt`.
|
|
255
265
|
*
|
|
256
266
|
* @example
|
|
257
267
|
*
|
|
@@ -266,15 +276,15 @@ export const PositiveSafeInt = {
|
|
|
266
276
|
* assert.isTrue(PositiveSafeInt.is(difference));
|
|
267
277
|
* ```
|
|
268
278
|
*
|
|
269
|
-
* @param a The
|
|
270
|
-
* @param b The
|
|
271
|
-
* @returns `a
|
|
272
|
-
* (minimum 1).
|
|
279
|
+
* @param a - The first positive safe integer
|
|
280
|
+
* @param b - The second positive safe integer
|
|
281
|
+
* @returns The difference of `a` and `b` as a `PositiveSafeInt`
|
|
273
282
|
*/
|
|
274
283
|
sub,
|
|
275
284
|
|
|
276
285
|
/**
|
|
277
|
-
* Multiplies two
|
|
286
|
+
* Multiplies two positive safe integers, returning `a * b` as a
|
|
287
|
+
* `PositiveSafeInt`.
|
|
278
288
|
*
|
|
279
289
|
* @example
|
|
280
290
|
*
|
|
@@ -289,14 +299,15 @@ export const PositiveSafeInt = {
|
|
|
289
299
|
* assert.isTrue(PositiveSafeInt.is(product));
|
|
290
300
|
* ```
|
|
291
301
|
*
|
|
292
|
-
* @param a The first
|
|
293
|
-
* @param b The second
|
|
294
|
-
* @returns `a
|
|
302
|
+
* @param a - The first positive safe integer
|
|
303
|
+
* @param b - The second positive safe integer
|
|
304
|
+
* @returns The product of `a` and `b` as a `PositiveSafeInt`
|
|
295
305
|
*/
|
|
296
306
|
mul,
|
|
297
307
|
|
|
298
308
|
/**
|
|
299
|
-
* Divides
|
|
309
|
+
* Divides two positive safe integers using floor division (`⌊a / b⌋`): the
|
|
310
|
+
* result is `a / b` rounded toward negative infinity, as a `PositiveSafeInt`.
|
|
300
311
|
*
|
|
301
312
|
* @example
|
|
302
313
|
*
|
|
@@ -316,9 +327,9 @@ export const PositiveSafeInt = {
|
|
|
316
327
|
* assert.isTrue(clamped === 1);
|
|
317
328
|
* ```
|
|
318
329
|
*
|
|
319
|
-
* @param a The dividend
|
|
320
|
-
* @param b The divisor
|
|
321
|
-
* @returns
|
|
330
|
+
* @param a - The dividend
|
|
331
|
+
* @param b - The divisor (must be non-zero)
|
|
332
|
+
* @returns The floored quotient as a `PositiveSafeInt`
|
|
322
333
|
*/
|
|
323
334
|
div,
|
|
324
335
|
} as const;
|