ts-data-forge 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +2 -2
  2. package/dist/number/branded-types/finite-number.d.mts +47 -61
  3. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  4. package/dist/number/branded-types/finite-number.mjs +37 -41
  5. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  6. package/dist/number/branded-types/int.d.mts +40 -46
  7. package/dist/number/branded-types/int.d.mts.map +1 -1
  8. package/dist/number/branded-types/int.mjs +29 -31
  9. package/dist/number/branded-types/int.mjs.map +1 -1
  10. package/dist/number/branded-types/int16.d.mts +71 -59
  11. package/dist/number/branded-types/int16.d.mts.map +1 -1
  12. package/dist/number/branded-types/int16.mjs +56 -47
  13. package/dist/number/branded-types/int16.mjs.map +1 -1
  14. package/dist/number/branded-types/int32.d.mts +71 -59
  15. package/dist/number/branded-types/int32.d.mts.map +1 -1
  16. package/dist/number/branded-types/int32.mjs +56 -47
  17. package/dist/number/branded-types/int32.mjs.map +1 -1
  18. package/dist/number/branded-types/negative-finite-number.d.mts +76 -60
  19. package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
  20. package/dist/number/branded-types/negative-finite-number.mjs +62 -49
  21. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  22. package/dist/number/branded-types/negative-int.d.mts +66 -49
  23. package/dist/number/branded-types/negative-int.d.mts.map +1 -1
  24. package/dist/number/branded-types/negative-int.mjs +48 -39
  25. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  26. package/dist/number/branded-types/negative-safe-int.d.mts +64 -57
  27. package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
  28. package/dist/number/branded-types/negative-safe-int.mjs +49 -44
  29. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  30. package/dist/number/branded-types/non-negative-finite-number.d.mts +80 -65
  31. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  32. package/dist/number/branded-types/non-negative-finite-number.mjs +65 -53
  33. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  34. package/dist/number/branded-types/non-negative-int16.d.mts +71 -58
  35. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  36. package/dist/number/branded-types/non-negative-int16.mjs +55 -45
  37. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  38. package/dist/number/branded-types/non-negative-int32.d.mts +71 -59
  39. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  40. package/dist/number/branded-types/non-negative-int32.mjs +55 -46
  41. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  42. package/dist/number/branded-types/non-positive-finite-number.d.mts +70 -55
  43. package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
  44. package/dist/number/branded-types/non-positive-finite-number.mjs +55 -43
  45. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  46. package/dist/number/branded-types/non-positive-int.d.mts +46 -146
  47. package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
  48. package/dist/number/branded-types/non-positive-int.mjs +33 -108
  49. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  50. package/dist/number/branded-types/non-positive-safe-int.d.mts +62 -54
  51. package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
  52. package/dist/number/branded-types/non-positive-safe-int.mjs +46 -41
  53. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  54. package/dist/number/branded-types/non-zero-finite-number.d.mts +62 -49
  55. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  56. package/dist/number/branded-types/non-zero-finite-number.mjs +46 -37
  57. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  58. package/dist/number/branded-types/non-zero-int.d.mts +51 -38
  59. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  60. package/dist/number/branded-types/non-zero-int.mjs +31 -27
  61. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  62. package/dist/number/branded-types/non-zero-int16.d.mts +59 -54
  63. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  64. package/dist/number/branded-types/non-zero-int16.mjs +44 -41
  65. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  66. package/dist/number/branded-types/non-zero-int32.d.mts +59 -55
  67. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  68. package/dist/number/branded-types/non-zero-int32.mjs +44 -42
  69. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  70. package/dist/number/branded-types/non-zero-safe-int.d.mts +60 -55
  71. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  72. package/dist/number/branded-types/non-zero-safe-int.mjs +44 -42
  73. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  74. package/dist/number/branded-types/non-zero-uint16.d.mts +59 -54
  75. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  76. package/dist/number/branded-types/non-zero-uint16.mjs +43 -41
  77. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  78. package/dist/number/branded-types/non-zero-uint32.d.mts +59 -54
  79. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  80. package/dist/number/branded-types/non-zero-uint32.mjs +43 -41
  81. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  82. package/dist/number/branded-types/positive-finite-number.d.mts +82 -64
  83. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  84. package/dist/number/branded-types/positive-finite-number.mjs +67 -52
  85. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  86. package/dist/number/branded-types/positive-int.d.mts +53 -70
  87. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  88. package/dist/number/branded-types/positive-int.mjs +42 -52
  89. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  90. package/dist/number/branded-types/positive-int16.d.mts +68 -58
  91. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  92. package/dist/number/branded-types/positive-int16.mjs +52 -45
  93. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  94. package/dist/number/branded-types/positive-int32.d.mts +68 -58
  95. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  96. package/dist/number/branded-types/positive-int32.mjs +52 -45
  97. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  98. package/dist/number/branded-types/positive-safe-int.d.mts +72 -61
  99. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  100. package/dist/number/branded-types/positive-safe-int.mjs +56 -48
  101. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  102. package/dist/number/branded-types/positive-uint16.d.mts +68 -58
  103. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  104. package/dist/number/branded-types/positive-uint16.mjs +52 -45
  105. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  106. package/dist/number/branded-types/positive-uint32.d.mts +68 -59
  107. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  108. package/dist/number/branded-types/positive-uint32.mjs +52 -46
  109. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  110. package/dist/number/branded-types/safe-int.d.mts +52 -66
  111. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  112. package/dist/number/branded-types/safe-int.mjs +45 -47
  113. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  114. package/dist/number/branded-types/safe-uint.d.mts +68 -58
  115. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  116. package/dist/number/branded-types/safe-uint.mjs +53 -46
  117. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  118. package/dist/number/branded-types/uint.d.mts +72 -55
  119. package/dist/number/branded-types/uint.d.mts.map +1 -1
  120. package/dist/number/branded-types/uint.mjs +52 -45
  121. package/dist/number/branded-types/uint.mjs.map +1 -1
  122. package/dist/number/branded-types/uint16.d.mts +66 -59
  123. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  124. package/dist/number/branded-types/uint16.mjs +51 -45
  125. package/dist/number/branded-types/uint16.mjs.map +1 -1
  126. package/dist/number/branded-types/uint32.d.mts +66 -57
  127. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  128. package/dist/number/branded-types/uint32.mjs +50 -45
  129. package/dist/number/branded-types/uint32.mjs.map +1 -1
  130. package/dist/number/enum/int8.d.mts +62 -66
  131. package/dist/number/enum/int8.d.mts.map +1 -1
  132. package/dist/number/enum/int8.mjs +57 -51
  133. package/dist/number/enum/int8.mjs.map +1 -1
  134. package/dist/number/enum/uint8.d.mts +66 -59
  135. package/dist/number/enum/uint8.d.mts.map +1 -1
  136. package/dist/number/enum/uint8.mjs +57 -51
  137. package/dist/number/enum/uint8.mjs.map +1 -1
  138. package/dist/number/refined-number-utils.d.mts +9 -9
  139. package/dist/number/refined-number-utils.d.mts.map +1 -1
  140. package/dist/number/refined-number-utils.mjs +7 -7
  141. package/dist/number/refined-number-utils.mjs.map +1 -1
  142. package/package.json +2 -1
  143. package/src/number/branded-types/finite-number.mts +47 -61
  144. package/src/number/branded-types/int.mts +40 -46
  145. package/src/number/branded-types/int16.mts +72 -60
  146. package/src/number/branded-types/int32.mts +72 -60
  147. package/src/number/branded-types/negative-finite-number.mts +78 -71
  148. package/src/number/branded-types/negative-finite-number.test.mts +4 -4
  149. package/src/number/branded-types/negative-int.mts +68 -60
  150. package/src/number/branded-types/negative-int.test.mts +5 -5
  151. package/src/number/branded-types/negative-safe-int.mts +66 -68
  152. package/src/number/branded-types/negative-safe-int.test.mts +4 -4
  153. package/src/number/branded-types/non-negative-finite-number.mts +81 -66
  154. package/src/number/branded-types/non-negative-int16.mts +72 -59
  155. package/src/number/branded-types/non-negative-int32.mts +72 -60
  156. package/src/number/branded-types/non-positive-finite-number.mts +71 -56
  157. package/src/number/branded-types/non-positive-finite-number.test.mts +7 -7
  158. package/src/number/branded-types/non-positive-int.mts +47 -147
  159. package/src/number/branded-types/non-positive-int.test.mts +7 -7
  160. package/src/number/branded-types/non-positive-safe-int.mts +63 -55
  161. package/src/number/branded-types/non-positive-safe-int.test.mts +7 -7
  162. package/src/number/branded-types/non-zero-finite-number.mts +62 -51
  163. package/src/number/branded-types/non-zero-int.mts +51 -38
  164. package/src/number/branded-types/non-zero-int16.mts +60 -55
  165. package/src/number/branded-types/non-zero-int32.mts +60 -56
  166. package/src/number/branded-types/non-zero-safe-int.mts +61 -56
  167. package/src/number/branded-types/non-zero-uint16.mts +60 -55
  168. package/src/number/branded-types/non-zero-uint32.mts +60 -55
  169. package/src/number/branded-types/positive-finite-number.mts +83 -65
  170. package/src/number/branded-types/positive-int.mts +54 -71
  171. package/src/number/branded-types/positive-int16.mts +69 -59
  172. package/src/number/branded-types/positive-int32.mts +69 -59
  173. package/src/number/branded-types/positive-safe-int.mts +73 -62
  174. package/src/number/branded-types/positive-uint16.mts +69 -59
  175. package/src/number/branded-types/positive-uint32.mts +69 -60
  176. package/src/number/branded-types/safe-int.mts +53 -67
  177. package/src/number/branded-types/safe-uint.mts +69 -59
  178. package/src/number/branded-types/uint.mts +73 -56
  179. package/src/number/branded-types/uint16.mts +67 -60
  180. package/src/number/branded-types/uint32.mts +67 -58
  181. package/src/number/enum/int8.mts +70 -73
  182. package/src/number/enum/int8.test.mts +7 -4
  183. package/src/number/enum/uint8.mts +74 -66
  184. package/src/number/enum/uint8.test.mts +7 -4
  185. package/src/number/refined-number-utils.mts +22 -19
@@ -10,7 +10,7 @@ const {
10
10
  MAX_VALUE,
11
11
  MIN_VALUE,
12
12
  castType: castTypeImpl,
13
- clamp: clampImpl,
13
+ fromNumber: fromNumberImpl,
14
14
  is: isImpl,
15
15
  random: randomImpl,
16
16
  } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<Uint16, 0, 255>(
@@ -28,7 +28,7 @@ const castType = (x: number): Uint8 =>
28
28
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
29
29
  castTypeImpl(x) as Uint8;
30
30
 
31
- const clamp = (a: number): Uint8 => castType(clampImpl(a));
31
+ const fromNumber = (a: number): Uint8 => castType(fromNumberImpl(a));
32
32
 
33
33
  const min_ = (...values: readonly Uint8[]): Uint8 =>
34
34
  castType(Math.min(...values));
@@ -36,146 +36,154 @@ const min_ = (...values: readonly Uint8[]): Uint8 =>
36
36
  const max_ = (...values: readonly Uint8[]): Uint8 =>
37
37
  castType(Math.max(...values));
38
38
 
39
- const pow = (x: Uint8, y: Uint8): Uint8 => clamp(x ** y);
39
+ const pow = (x: Uint8, y: Uint8): Uint8 => fromNumber(x ** y);
40
40
 
41
- const add = (x: Uint8, y: Uint8): Uint8 => clamp(x + y);
41
+ const add = (x: Uint8, y: Uint8): Uint8 => fromNumber(x + y);
42
42
 
43
- const sub = (x: Uint8, y: Uint8): Uint8 => clamp(x - y);
43
+ const sub = (x: Uint8, y: Uint8): Uint8 => fromNumber(x - y);
44
44
 
45
- const mul = (x: Uint8, y: Uint8): Uint8 => clamp(x * y);
45
+ const mul = (x: Uint8, y: Uint8): Uint8 => fromNumber(x * y);
46
46
 
47
- const div = (x: Uint8, y: Exclude<Uint8, 0>): Uint8 => clamp(Math.floor(x / y));
47
+ const div = (x: Uint8, y: Exclude<Uint8, 0>): Uint8 =>
48
+ fromNumber(Math.floor(x / y));
48
49
 
49
50
  const random = (min: Uint8, max: Uint8): Uint8 =>
50
51
  castType(randomImpl(castTypeImpl(min), castTypeImpl(max)));
51
52
 
52
53
  /**
53
- * Checks if a number is a Uint8 (8-bit unsigned integer in the range [0, 255]).
54
+ * Type guard that checks if a value is an non-negative integer less than 256.
54
55
  *
55
- * @param value The value to check.
56
- * @returns `true` if the value is a Uint8, `false` otherwise.
56
+ * Returns `true` for an non-negative integer less than 256 — a value with no
57
+ * fractional component.
58
+ *
59
+ * @param value - The value to check
60
+ * @returns `true` if the value is an non-negative integer less than 256, `false` otherwise
57
61
  */
58
62
  export const isUint8 = is;
59
63
 
60
64
  /**
61
- * Casts a number to a Uint8 type. This function validates that the input is
62
- * within the Uint8 range [0, 255] and is an integer, then returns it with the
63
- * Uint8 brand.
65
+ * Casts a `number` to the `Uint8` branded type.
66
+ *
67
+ * Validates that the value is an non-negative integer less than 256 and returns
68
+ * it with the `Uint8` brand. Throws a `TypeError` otherwise.
64
69
  *
65
- * @param value The value to cast.
66
- * @returns The value as a Uint8 type.
67
- * @throws {TypeError} If the value is not a valid 8-bit unsigned integer.
70
+ * @param value - The value to cast
71
+ * @returns The value as an `Uint8`
72
+ * @throws {TypeError} If the value is not an non-negative integer less than 256
68
73
  */
69
74
  export const asUint8 = castType;
70
75
 
71
76
  /**
72
- * Namespace providing type-safe arithmetic operations for 8-bit unsigned
73
- * integers.
77
+ * Namespace providing type-safe operations for the `Uint8` branded type.
74
78
  *
75
- * All operations automatically clamp results to the valid Uint8 range [0, 255].
76
- * This ensures that all arithmetic maintains the 8-bit unsigned integer
77
- * constraint, with negative results clamped to 0 and overflow results clamped
78
- * to MAX_VALUE.
79
+ * The `Uint8` type represents an non-negative integer less than 256. Division
80
+ * (`div`) uses floor division.
79
81
  */
80
82
  export const Uint8 = {
81
83
  /**
82
- * Type guard that checks if a value is an 8-bit unsigned integer.
84
+ * Type guard that checks if a value is an non-negative integer less than 256.
83
85
  *
84
- * @param value The value to check.
85
- * @returns `true` if the value is an 8-bit unsigned integer, `false`
86
- * otherwise.
86
+ * @param value - The value to check
87
+ * @returns `true` if the value is an non-negative integer less than 256, `false` otherwise
88
+ * @see {@link isUint8} for usage examples
87
89
  */
88
90
  is,
89
91
 
90
92
  /**
91
- * The minimum value for an 8-bit unsigned integer.
92
- *
93
- * @readonly
93
+ * The smallest value representable as `Uint8` (the lower saturation target of
94
+ * `fromNumber`).
94
95
  */
95
96
  MIN_VALUE,
96
97
 
97
98
  /**
98
- * The maximum value for an 8-bit unsigned integer.
99
- *
100
- * @readonly
99
+ * The largest value representable as `Uint8` (the upper saturation target of
100
+ * `fromNumber`).
101
101
  */
102
102
  MAX_VALUE,
103
103
 
104
104
  /**
105
- * Returns the larger of the given Uint8 values.
105
+ * Returns the largest of the given non-negative integers.
106
106
  *
107
- * @param values The Uint8 values to compare.
108
- * @returns The maximum value as a Uint8.
107
+ * @param values - The non-negative integers to compare (at least one required)
108
+ * @returns The largest value as an `Uint8`
109
109
  */
110
110
  max: max_,
111
111
 
112
112
  /**
113
- * Returns the smaller of the given Uint8 values.
113
+ * Returns the smallest of the given non-negative integers.
114
114
  *
115
- * @param values The Uint8 values to compare.
116
- * @returns The minimum value as a Uint8.
115
+ * @param values - The non-negative integers to compare (at least one required)
116
+ * @returns The smallest value as an `Uint8`
117
117
  */
118
118
  min: min_,
119
119
 
120
120
  /**
121
- * Clamps a number to the Uint8 range.
121
+ * Converts an arbitrary `number` into an `Uint8`, rounding to the nearest
122
+ * integer and saturating the result into the range `[MIN_VALUE, MAX_VALUE]`.
123
+ *
124
+ * Unlike `asUint8`, this is total: out-of-range inputs are clamped to the
125
+ * nearest representable `Uint8` instead of throwing.
122
126
  *
123
- * @param value The number to clamp.
124
- * @returns The value clamped to [0, 255] as a Uint8.
127
+ * @param value - The value to convert
128
+ * @returns The value as an `Uint8`
125
129
  */
126
- clamp,
130
+ fromNumber,
127
131
 
128
132
  /**
129
- * Generates a random Uint8 value within the specified range.
133
+ * Generates a random `Uint8` within the given range.
134
+ *
135
+ * The range is inclusive on both ends.
130
136
  *
131
- * @param min The minimum value (inclusive).
132
- * @param max The maximum value (inclusive).
133
- * @returns A random Uint8 between min and max.
137
+ * @param min - The minimum value (inclusive)
138
+ * @param max - The maximum value (inclusive)
139
+ * @returns A random `Uint8` in `[min, max]`
134
140
  */
135
141
  random,
136
142
 
137
143
  /**
138
- * Raises x to the power of y, clamped to Uint8 range.
144
+ * Raises `a` to the power `b`, returning `a ** b` as an `Uint8` (floored to
145
+ * an integer).
139
146
  *
140
- * @param x - The base
141
- * @param y - The exponent
142
- * @returns `x ** y` clamped to [0, 255]
147
+ * @param a - The base non-negative integer
148
+ * @param b - The exponent non-negative integer
149
+ * @returns `a ** b` as an `Uint8`
143
150
  */
144
151
  pow,
145
152
 
146
153
  /**
147
- * Adds two Uint8 values, clamped to Uint8 range.
154
+ * Adds two non-negative integers, returning `a + b` as an `Uint8`.
148
155
  *
149
- * @param x - First operand
150
- * @param y - Second operand
151
- * @returns `x + y` clamped to [0, 255]
156
+ * @param a - The first non-negative integer
157
+ * @param b - The second non-negative integer
158
+ * @returns The sum of `a` and `b` as an `Uint8`
152
159
  */
153
160
  add,
154
161
 
155
162
  /**
156
- * Subtracts two Uint8 values, clamped to Uint8 range.
163
+ * Subtracts two non-negative integers, returning `a - b` as an `Uint8`.
157
164
  *
158
- * @param x - First operand
159
- * @param y - Second operand
160
- * @returns `x - y` clamped to [0, 255]
165
+ * @param a - The first non-negative integer
166
+ * @param b - The second non-negative integer
167
+ * @returns The difference of `a` and `b` as an `Uint8`
161
168
  */
162
169
  sub,
163
170
 
164
171
  /**
165
- * Multiplies two Uint8 values, clamped to Uint8 range.
172
+ * Multiplies two non-negative integers, returning `a * b` as an `Uint8`.
166
173
  *
167
- * @param x - First operand
168
- * @param y - Second operand
169
- * @returns `x * y` clamped to [0, 255]
174
+ * @param a - The first non-negative integer
175
+ * @param b - The second non-negative integer
176
+ * @returns The product of `a` and `b` as an `Uint8`
170
177
  */
171
178
  mul,
172
179
 
173
180
  /**
174
- * Divides two Uint8 values, clamped to Uint8 range.
181
+ * Divides two non-negative integers using floor division (`⌊a / b⌋`): the
182
+ * result is `a / b` rounded toward negative infinity, as an `Uint8`.
175
183
  *
176
- * @param x - The dividend
177
- * @param y - The divisor (cannot be 0)
178
- * @returns `⌊x / y⌋` clamped to [0, 255]
184
+ * @param a - The dividend
185
+ * @param b - The divisor (must be non-zero)
186
+ * @returns The floored quotient as an `Uint8`
179
187
  */
180
188
  div,
181
189
  } as const;
@@ -61,7 +61,7 @@ describe('Uint8 test', () => {
61
61
  });
62
62
  });
63
63
 
64
- describe('Uint8.clamp', () => {
64
+ describe('Uint8.fromNumber', () => {
65
65
  test.each([
66
66
  { value: -100, expected: 0 },
67
67
  { value: 0, expected: 0 },
@@ -69,9 +69,12 @@ describe('Uint8 test', () => {
69
69
  { value: 255, expected: 255 },
70
70
  { value: 300, expected: 255 },
71
71
  { value: 1.5, expected: 2 },
72
- ])('Uint8.clamp($value) should return $expected', ({ expected, value }) => {
73
- expect(Uint8.clamp(value)).toBe(expected);
74
- });
72
+ ])(
73
+ 'Uint8.fromNumber($value) should return $expected',
74
+ ({ expected, value }) => {
75
+ expect(Uint8.fromNumber(value)).toBe(expected);
76
+ },
77
+ );
75
78
  });
76
79
 
77
80
  describe('Uint8.min', () => {
@@ -144,7 +144,7 @@ export namespace TsDataForgeInternals {
144
144
  ('non-negative' extends classes
145
145
  ? Readonly<{
146
146
  MIN_VALUE: number;
147
- clamp: (a: number) => N;
147
+ fromNumber: (a: number) => N;
148
148
  }>
149
149
  : unknown) &
150
150
  ('non-negative' extends classes
@@ -157,14 +157,14 @@ export namespace TsDataForgeInternals {
157
157
  ('positive' extends classes
158
158
  ? Readonly<{
159
159
  MIN_VALUE: number;
160
- clamp: (a: number) => N;
160
+ fromNumber: (a: number) => N;
161
161
  }>
162
162
  : unknown) &
163
163
  ('range' extends classes
164
164
  ? Readonly<{
165
165
  MIN_VALUE: number;
166
166
  MAX_VALUE: number;
167
- clamp: (a: number) => N;
167
+ fromNumber: (a: number) => N;
168
168
  }>
169
169
  : unknown) &
170
170
  Pick<
@@ -200,17 +200,17 @@ export namespace TsDataForgeInternals {
200
200
 
201
201
  expectType<
202
202
  keyof NumberClass<UnknownNumberBrand, 'non-negative'>,
203
- BaseKeys | FloatMethods | 'clamp' | 'MIN_VALUE'
203
+ BaseKeys | FloatMethods | 'fromNumber' | 'MIN_VALUE'
204
204
  >('=');
205
205
 
206
206
  expectType<
207
207
  keyof NumberClass<UnknownNumberBrand, 'positive'>,
208
- BaseKeys | FloatMethods | 'clamp' | 'MIN_VALUE'
208
+ BaseKeys | FloatMethods | 'fromNumber' | 'MIN_VALUE'
209
209
  >('=');
210
210
 
211
211
  expectType<
212
212
  keyof NumberClass<UnknownNumberBrand, 'int' | 'range'>,
213
- BaseKeys | 'abs' | 'clamp' | 'MAX_VALUE' | 'MIN_VALUE'
213
+ BaseKeys | 'abs' | 'fromNumber' | 'MAX_VALUE' | 'MIN_VALUE'
214
214
  >('=');
215
215
 
216
216
  const isFnOrUndefined = (
@@ -292,7 +292,7 @@ export namespace TsDataForgeInternals {
292
292
 
293
293
  castType: <N extends number>(x: N) => ElementType & N;
294
294
 
295
- clamp: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
295
+ fromNumber: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
296
296
  ? undefined
297
297
  : (x: number) => ElementType;
298
298
  }>;
@@ -337,7 +337,7 @@ export namespace TsDataForgeInternals {
337
337
  *
338
338
  * const quotient = intOps.div(six, intOps.castType(2));
339
339
  *
340
- * const roundedClamp = intOps.clamp(1.5);
340
+ * const coerced = intOps.fromNumber(1.5);
341
341
  *
342
342
  * const randomValue = intOps.random();
343
343
  *
@@ -349,7 +349,7 @@ export namespace TsDataForgeInternals {
349
349
  *
350
350
  * assert.isTrue(quotient === 3);
351
351
  *
352
- * assert.isTrue(roundedClamp === 2);
352
+ * assert.isTrue(coerced === 2);
353
353
  *
354
354
  * assert.isTrue(Number.isSafeInteger(randomValue));
355
355
  * ```
@@ -396,7 +396,7 @@ export namespace TsDataForgeInternals {
396
396
 
397
397
  const castType = castTypeImpl<ElementType>(is, typeNameInMessage);
398
398
 
399
- const clamp: ((a: number) => ElementType) | undefined = pipe(
399
+ const fromNumber: ((a: number) => ElementType) | undefined = pipe(
400
400
  clampFnOrUndefined(MIN_VALUE, MAX_VALUE),
401
401
  ).mapNullable(
402
402
  (cl) =>
@@ -404,7 +404,7 @@ export namespace TsDataForgeInternals {
404
404
  castType(Math.round(cl(x))),
405
405
  ).value;
406
406
 
407
- const clampOrCastFn: (a: number) => ElementType = clamp ?? castType;
407
+ const clampOrCastFn: (a: number) => ElementType = fromNumber ?? castType;
408
408
 
409
409
  const abs = (x: ElementTypeWithSmallInt): ToNonNegative<ElementType> =>
410
410
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
@@ -488,9 +488,9 @@ export namespace TsDataForgeInternals {
488
488
  randomNonZero,
489
489
  castType,
490
490
 
491
- clamp:
491
+ fromNumber:
492
492
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
493
- clamp as TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
493
+ fromNumber as TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
494
494
  ? undefined
495
495
  : (x: number) => ElementType,
496
496
  } as const;
@@ -519,7 +519,7 @@ export namespace TsDataForgeInternals {
519
519
 
520
520
  castType: <N extends number>(x: N) => ElementType & N;
521
521
 
522
- clamp: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
522
+ fromNumber: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
523
523
  ? undefined
524
524
  : (x: number) => ElementType;
525
525
  }>;
@@ -560,7 +560,7 @@ export namespace TsDataForgeInternals {
560
560
  *
561
561
  * const ratio = floatOps.div(sum, floatOps.castType(10));
562
562
  *
563
- * const clamped = floatOps.clamp(0);
563
+ * const coerced = floatOps.fromNumber(0);
564
564
  *
565
565
  * const boundedRandom = floatOps.random(
566
566
  * floatOps.castType(10),
@@ -573,7 +573,7 @@ export namespace TsDataForgeInternals {
573
573
  *
574
574
  * assert.isTrue(ratio === 5);
575
575
  *
576
- * assert.isTrue(clamped >= Number.MIN_VALUE);
576
+ * assert.isTrue(coerced >= Number.MIN_VALUE);
577
577
  *
578
578
  * assert.isTrue(boundedRandom >= 10 && boundedRandom <= 20);
579
579
  *
@@ -615,7 +615,7 @@ export namespace TsDataForgeInternals {
615
615
 
616
616
  const castType = castTypeImpl<ElementType>(is, typeNameInMessage);
617
617
 
618
- const clamp: ((a: number) => ElementType) | undefined = pipe(
618
+ const fromNumber: ((a: number) => ElementType) | undefined = pipe(
619
619
  clampFnOrUndefined(MIN_VALUE, MAX_VALUE),
620
620
  ).mapNullable(
621
621
  (cl) =>
@@ -623,7 +623,7 @@ export namespace TsDataForgeInternals {
623
623
  castType(cl(x)),
624
624
  ).value;
625
625
 
626
- const clampOrCastFn: (a: number) => ElementType = clamp ?? castType;
626
+ const clampOrCastFn: (a: number) => ElementType = fromNumber ?? castType;
627
627
 
628
628
  const abs = (x: ElementType): ToNonNegative<ElementType> =>
629
629
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
@@ -687,7 +687,10 @@ export namespace TsDataForgeInternals {
687
687
  castType,
688
688
 
689
689
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
690
- clamp: clamp as TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
690
+ fromNumber: fromNumber as TypeEq<
691
+ MAX_VALUE | MIN_VALUE,
692
+ undefined
693
+ > extends true
691
694
  ? undefined
692
695
  : (x: number) => ElementType,
693
696
  } as const;