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
@@ -3,18 +3,24 @@ import { TsDataForgeInternals } from '../refined-number-utils.mjs';
3
3
  export type PositiveFiniteNumber = TtfImported_PositiveFiniteNumber;
4
4
  type ElementType = PositiveFiniteNumber;
5
5
  /**
6
- * Checks if a number is a PositiveFiniteNumber (a finite number > 0).
6
+ * Type guard that checks if a value is a positive finite number.
7
7
  *
8
- * @param value The value to check.
9
- * @returns `true` if the value is a PositiveFiniteNumber, `false` otherwise.
8
+ * Returns `true` only for a finite value — never `NaN`, `Infinity`, or
9
+ * `-Infinity`.
10
+ *
11
+ * @param value - The value to check
12
+ * @returns `true` if the value is a positive finite number, `false` otherwise
10
13
  */
11
14
  export declare const isPositiveFiniteNumber: (a: number) => a is TtfImported_PositiveFiniteNumber;
12
15
  /**
13
- * Casts a number to a PositiveFiniteNumber type.
16
+ * Casts a `number` to the `PositiveFiniteNumber` branded type.
17
+ *
18
+ * Validates that the value is a positive finite number and returns it with the
19
+ * `PositiveFiniteNumber` brand. Throws a `TypeError` otherwise.
14
20
  *
15
- * @param value The value to cast.
16
- * @returns The value as a PositiveFiniteNumber type.
17
- * @throws {TypeError} If the value is not a positive finite number.
21
+ * @param value - The value to cast
22
+ * @returns The value as a `PositiveFiniteNumber`
23
+ * @throws {TypeError} If the value is not a positive finite number
18
24
  */
19
25
  export declare const asPositiveFiniteNumber: <N extends number>(x: N) => number & {
20
26
  readonly "!=0": true;
@@ -30,118 +36,130 @@ export declare const asPositiveFiniteNumber: <N extends number>(x: N) => number
30
36
  'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
31
37
  }> & N;
32
38
  /**
33
- * Namespace providing type-safe arithmetic operations for positive finite
34
- * numbers.
39
+ * Namespace providing type-safe operations for the `PositiveFiniteNumber`
40
+ * branded type.
35
41
  *
36
- * All operations maintain the positive constraint by clamping non-positive
37
- * results to MIN_VALUE, while ensuring results remain finite (excluding NaN and
38
- * Infinity). This type is useful for representing quantities that must always
39
- * be positive, such as probabilities, magnitudes, and physical measurements.
42
+ * The `PositiveFiniteNumber` type represents a positive finite number.
40
43
  */
41
44
  export declare const PositiveFiniteNumber: {
42
45
  /**
43
- * Type guard to check if a value is a PositiveFiniteNumber.
46
+ * Type guard that checks if a value is a positive finite number.
44
47
  *
45
- * @param value The value to check.
46
- * @returns `true` if the value is a positive finite number, `false`
47
- * otherwise.
48
+ * @param value - The value to check
49
+ * @returns `true` if the value is a positive finite number, `false` otherwise
50
+ * @see {@link isPositiveFiniteNumber} for usage examples
48
51
  */
49
52
  readonly is: (a: number) => a is TtfImported_PositiveFiniteNumber;
50
53
  /**
51
- * The minimum value for a positive finite number.
52
- *
53
- * @readonly
54
+ * The smallest value representable as `PositiveFiniteNumber` (the lower
55
+ * saturation target of `fromNumber`). The domain is open at `0` (excluded),
56
+ * so this is `Number.MIN_VALUE` — the smallest positive double — rather than
57
+ * `0`.
54
58
  */
55
59
  readonly MIN_VALUE: number;
56
60
  /**
57
- * Returns the smaller of two PositiveFiniteNumber values.
61
+ * Returns the smallest of the given positive finite numbers.
58
62
  *
59
- * @param a The first PositiveFiniteNumber.
60
- * @param b The second PositiveFiniteNumber.
61
- * @returns The minimum value as a PositiveFiniteNumber.
63
+ * @param values - The positive finite numbers to compare (at least one required)
64
+ * @returns The smallest value as a `PositiveFiniteNumber`
62
65
  */
63
66
  readonly min: (...values: readonly TtfImported_PositiveFiniteNumber[]) => TtfImported_PositiveFiniteNumber;
64
67
  /**
65
- * Returns the larger of two PositiveFiniteNumber values.
68
+ * Returns the largest of the given positive finite numbers.
66
69
  *
67
- * @param a The first PositiveFiniteNumber.
68
- * @param b The second PositiveFiniteNumber.
69
- * @returns The maximum value as a PositiveFiniteNumber.
70
+ * @param values - The positive finite numbers to compare (at least one required)
71
+ * @returns The largest value as a `PositiveFiniteNumber`
70
72
  */
71
73
  readonly max: (...values: readonly TtfImported_PositiveFiniteNumber[]) => TtfImported_PositiveFiniteNumber;
72
74
  /**
73
- * Clamps a number to the positive finite range.
75
+ * Converts an arbitrary `number` into a `PositiveFiniteNumber`, saturating it
76
+ * into the range `[MIN_VALUE, MAX_VALUE]`.
74
77
  *
75
- * @param value The number to clamp.
76
- * @returns The value clamped to (0, +∞) as a PositiveFiniteNumber.
78
+ * Unlike `asPositiveFiniteNumber`, this is total: out-of-range inputs are
79
+ * clamped to the nearest representable `PositiveFiniteNumber` instead of
80
+ * throwing.
81
+ *
82
+ * @param value - The value to convert
83
+ * @returns The value as a `PositiveFiniteNumber`
77
84
  */
78
- readonly clamp: (x: number) => TtfImported_PositiveFiniteNumber;
85
+ readonly fromNumber: (x: number) => TtfImported_PositiveFiniteNumber;
79
86
  /**
80
- * Rounds down a PositiveFiniteNumber to the nearest integer.
87
+ * Returns the greatest integer less than or equal to a positive finite
88
+ * number.
81
89
  *
82
- * @param x The PositiveFiniteNumber to round down.
83
- * @returns The floor value as a Uint (can be 0).
90
+ * @param a - The positive finite number value
91
+ * @returns The floored value as an integer
84
92
  */
85
93
  readonly floor: (x: ElementType) => TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>>;
86
94
  /**
87
- * Rounds up a PositiveFiniteNumber to the nearest integer.
95
+ * Returns the smallest integer greater than or equal to a positive finite
96
+ * number.
88
97
  *
89
- * @param x The PositiveFiniteNumber to round up.
90
- * @returns The ceiling value as a PositiveInt (always >= 1).
98
+ * @param a - The positive finite number value
99
+ * @returns The ceiled value as an integer
91
100
  */
92
101
  readonly ceil: (x: ElementType) => TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>;
93
102
  /**
94
- * Rounds a PositiveFiniteNumber to the nearest integer.
103
+ * Returns the value of a positive finite number rounded to the nearest
104
+ * integer.
95
105
  *
96
- * @param x The PositiveFiniteNumber to round.
97
- * @returns The rounded value as a Uint (can be 0 if x < 0.5).
106
+ * @param a - The positive finite number value
107
+ * @returns The rounded value as an integer
98
108
  */
99
109
  readonly round: (x: ElementType) => TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>>;
100
110
  /**
101
- * Generates a random PositiveFiniteNumber value.
111
+ * Generates a random `PositiveFiniteNumber` within the given range.
112
+ *
113
+ * The range is inclusive on both ends.
102
114
  *
103
- * @returns A random positive finite number.
115
+ * @param min - The minimum value (inclusive)
116
+ * @param max - The maximum value (inclusive)
117
+ * @returns A random `PositiveFiniteNumber` in `[min, max]`
104
118
  */
105
119
  readonly random: (min?: TtfImported_PositiveFiniteNumber | undefined, max?: TtfImported_PositiveFiniteNumber | undefined) => TtfImported_PositiveFiniteNumber;
106
120
  /**
107
- * Raises a PositiveFiniteNumber to the power of another PositiveFiniteNumber.
121
+ * Raises `a` to the power `b`, returning `a ** b` as a
122
+ * `PositiveFiniteNumber`.
108
123
  *
109
- * @param a The base PositiveFiniteNumber.
110
- * @param b The exponent PositiveFiniteNumber.
111
- * @returns `a ** b` clamped to (0, +∞) as a PositiveFiniteNumber.
124
+ * @param a - The base positive finite number
125
+ * @param b - The exponent positive finite number
126
+ * @returns `a ** b` as a `PositiveFiniteNumber`
112
127
  */
113
128
  readonly pow: (x: TtfImported_PositiveFiniteNumber, y: TtfImported_PositiveFiniteNumber) => TtfImported_PositiveFiniteNumber;
114
129
  /**
115
- * Adds two PositiveFiniteNumber values.
130
+ * Adds two positive finite numbers, returning `a + b` as a
131
+ * `PositiveFiniteNumber`.
116
132
  *
117
- * @param a The first PositiveFiniteNumber.
118
- * @param b The second PositiveFiniteNumber.
119
- * @returns `a + b` clamped to (0, +∞) as a PositiveFiniteNumber.
133
+ * @param a - The first positive finite number
134
+ * @param b - The second positive finite number
135
+ * @returns The sum of `a` and `b` as a `PositiveFiniteNumber`
120
136
  */
121
137
  readonly add: (x: TtfImported_PositiveFiniteNumber, y: TtfImported_PositiveFiniteNumber) => TtfImported_PositiveFiniteNumber;
122
138
  /**
123
- * Subtracts one PositiveFiniteNumber from another.
139
+ * Subtracts two positive finite numbers, returning `a - b` as a
140
+ * `PositiveFiniteNumber`.
124
141
  *
125
- * @param a The minuend PositiveFiniteNumber.
126
- * @param b The subtrahend PositiveFiniteNumber.
127
- * @returns `a - b` clamped to (0, +∞) as a PositiveFiniteNumber (minimum
128
- * MIN_VALUE).
142
+ * @param a - The first positive finite number
143
+ * @param b - The second positive finite number
144
+ * @returns The difference of `a` and `b` as a `PositiveFiniteNumber`
129
145
  */
130
146
  readonly sub: (x: TtfImported_PositiveFiniteNumber, y: TtfImported_PositiveFiniteNumber) => TtfImported_PositiveFiniteNumber;
131
147
  /**
132
- * Multiplies two PositiveFiniteNumber values.
148
+ * Multiplies two positive finite numbers, returning `a * b` as a
149
+ * `PositiveFiniteNumber`.
133
150
  *
134
- * @param a The first PositiveFiniteNumber.
135
- * @param b The second PositiveFiniteNumber.
136
- * @returns `a * b` clamped to (0, +∞) as a PositiveFiniteNumber.
151
+ * @param a - The first positive finite number
152
+ * @param b - The second positive finite number
153
+ * @returns The product of `a` and `b` as a `PositiveFiniteNumber`
137
154
  */
138
155
  readonly mul: (x: TtfImported_PositiveFiniteNumber, y: TtfImported_PositiveFiniteNumber) => TtfImported_PositiveFiniteNumber;
139
156
  /**
140
- * Divides one PositiveFiniteNumber by another.
157
+ * Divides two positive finite numbers, returning `a / b` as a
158
+ * `PositiveFiniteNumber`.
141
159
  *
142
- * @param a The dividend PositiveFiniteNumber.
143
- * @param b The divisor PositiveFiniteNumber.
144
- * @returns `a / b` clamped to (0, +∞) as a PositiveFiniteNumber.
160
+ * @param a - The dividend
161
+ * @param b - The divisor (must be non-zero)
162
+ * @returns `a / b` as a `PositiveFiniteNumber`
145
163
  */
146
164
  readonly div: (x: TtfImported_PositiveFiniteNumber, y: number & {
147
165
  readonly "!=0": true;
@@ -1 +1 @@
1
- {"version":3,"file":"positive-finite-number.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/positive-finite-number.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,IAAI,gCAAgC,EAE9D,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AAEpE,KAAK,WAAW,GAAG,oBAAoB,CAAC;AAqExC;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,sDAAK,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;MAAW,CAAC;AAE/C;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB;IAC/B;;;;;;OAMG;;IAGH;;;;OAIG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;wBAnHA,WAAW,KACb,oBAAoB,CAAC,kBAAkB,CAAC,qBAAqB,CAC9D,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAC3D;IAmHC;;;;;OAKG;uBA/GA,WAAW,KACb,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;IAiH3D;;;;;OAKG;wBAjHA,WAAW,KACb,oBAAoB,CAAC,kBAAkB,CAAC,qBAAqB,CAC9D,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAC3D;IAiHC;;;;OAIG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;;;;;;;;;;;;;CAEK,CAAC"}
1
+ {"version":3,"file":"positive-finite-number.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/positive-finite-number.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,IAAI,gCAAgC,EAE9D,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AAEpE,KAAK,WAAW,GAAG,oBAAoB,CAAC;AAqExC;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,sDAAK,CAAC;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;MAAW,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;IAC/B;;;;;;OAMG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;;;;;;OAUG;;IAGH;;;;;;OAMG;wBA3HA,WAAW,KACb,oBAAoB,CAAC,kBAAkB,CAAC,qBAAqB,CAC9D,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAC3D;IA2HC;;;;;;OAMG;uBAxHA,WAAW,KACb,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;IA0H3D;;;;;;OAMG;wBA3HA,WAAW,KACb,oBAAoB,CAAC,kBAAkB,CAAC,qBAAqB,CAC9D,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAC3D;IA2HC;;;;;;;;OAQG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;OAOG;;;;;;;;;;;;;;CAEK,CAAC"}
@@ -5,8 +5,8 @@ const {
5
5
  MIN_VALUE,
6
6
  add,
7
7
  castType,
8
- clamp,
9
8
  div,
9
+ fromNumber,
10
10
  is,
11
11
  max: max_,
12
12
  min: min_,
@@ -39,108 +39,123 @@ const isPositiveFiniteNumber = is;
39
39
  const asPositiveFiniteNumber = castType;
40
40
  const PositiveFiniteNumber = {
41
41
  /**
42
- * Type guard to check if a value is a PositiveFiniteNumber.
42
+ * Type guard that checks if a value is a positive finite number.
43
43
  *
44
- * @param value The value to check.
45
- * @returns `true` if the value is a positive finite number, `false`
46
- * otherwise.
44
+ * @param value - The value to check
45
+ * @returns `true` if the value is a positive finite number, `false` otherwise
46
+ * @see {@link isPositiveFiniteNumber} for usage examples
47
47
  */
48
48
  is,
49
49
  /**
50
- * The minimum value for a positive finite number.
51
- *
52
- * @readonly
50
+ * The smallest value representable as `PositiveFiniteNumber` (the lower
51
+ * saturation target of `fromNumber`). The domain is open at `0` (excluded),
52
+ * so this is `Number.MIN_VALUE` — the smallest positive double — rather than
53
+ * `0`.
53
54
  */
54
55
  MIN_VALUE,
55
56
  /**
56
- * Returns the smaller of two PositiveFiniteNumber values.
57
+ * Returns the smallest of the given positive finite numbers.
57
58
  *
58
- * @param a The first PositiveFiniteNumber.
59
- * @param b The second PositiveFiniteNumber.
60
- * @returns The minimum value as a PositiveFiniteNumber.
59
+ * @param values - The positive finite numbers to compare (at least one required)
60
+ * @returns The smallest value as a `PositiveFiniteNumber`
61
61
  */
62
62
  min: min_,
63
63
  /**
64
- * Returns the larger of two PositiveFiniteNumber values.
64
+ * Returns the largest of the given positive finite numbers.
65
65
  *
66
- * @param a The first PositiveFiniteNumber.
67
- * @param b The second PositiveFiniteNumber.
68
- * @returns The maximum value as a PositiveFiniteNumber.
66
+ * @param values - The positive finite numbers to compare (at least one required)
67
+ * @returns The largest value as a `PositiveFiniteNumber`
69
68
  */
70
69
  max: max_,
71
70
  /**
72
- * Clamps a number to the positive finite range.
71
+ * Converts an arbitrary `number` into a `PositiveFiniteNumber`, saturating it
72
+ * into the range `[MIN_VALUE, MAX_VALUE]`.
73
+ *
74
+ * Unlike `asPositiveFiniteNumber`, this is total: out-of-range inputs are
75
+ * clamped to the nearest representable `PositiveFiniteNumber` instead of
76
+ * throwing.
73
77
  *
74
- * @param value The number to clamp.
75
- * @returns The value clamped to (0, +∞) as a PositiveFiniteNumber.
78
+ * @param value - The value to convert
79
+ * @returns The value as a `PositiveFiniteNumber`
76
80
  */
77
- clamp,
81
+ fromNumber,
78
82
  /**
79
- * Rounds down a PositiveFiniteNumber to the nearest integer.
83
+ * Returns the greatest integer less than or equal to a positive finite
84
+ * number.
80
85
  *
81
- * @param x The PositiveFiniteNumber to round down.
82
- * @returns The floor value as a Uint (can be 0).
86
+ * @param a - The positive finite number value
87
+ * @returns The floored value as an integer
83
88
  */
84
89
  floor,
85
90
  /**
86
- * Rounds up a PositiveFiniteNumber to the nearest integer.
91
+ * Returns the smallest integer greater than or equal to a positive finite
92
+ * number.
87
93
  *
88
- * @param x The PositiveFiniteNumber to round up.
89
- * @returns The ceiling value as a PositiveInt (always >= 1).
94
+ * @param a - The positive finite number value
95
+ * @returns The ceiled value as an integer
90
96
  */
91
97
  ceil,
92
98
  /**
93
- * Rounds a PositiveFiniteNumber to the nearest integer.
99
+ * Returns the value of a positive finite number rounded to the nearest
100
+ * integer.
94
101
  *
95
- * @param x The PositiveFiniteNumber to round.
96
- * @returns The rounded value as a Uint (can be 0 if x < 0.5).
102
+ * @param a - The positive finite number value
103
+ * @returns The rounded value as an integer
97
104
  */
98
105
  round,
99
106
  /**
100
- * Generates a random PositiveFiniteNumber value.
107
+ * Generates a random `PositiveFiniteNumber` within the given range.
108
+ *
109
+ * The range is inclusive on both ends.
101
110
  *
102
- * @returns A random positive finite number.
111
+ * @param min - The minimum value (inclusive)
112
+ * @param max - The maximum value (inclusive)
113
+ * @returns A random `PositiveFiniteNumber` in `[min, max]`
103
114
  */
104
115
  random,
105
116
  /**
106
- * Raises a PositiveFiniteNumber to the power of another PositiveFiniteNumber.
117
+ * Raises `a` to the power `b`, returning `a ** b` as a
118
+ * `PositiveFiniteNumber`.
107
119
  *
108
- * @param a The base PositiveFiniteNumber.
109
- * @param b The exponent PositiveFiniteNumber.
110
- * @returns `a ** b` clamped to (0, +∞) as a PositiveFiniteNumber.
120
+ * @param a - The base positive finite number
121
+ * @param b - The exponent positive finite number
122
+ * @returns `a ** b` as a `PositiveFiniteNumber`
111
123
  */
112
124
  pow,
113
125
  /**
114
- * Adds two PositiveFiniteNumber values.
126
+ * Adds two positive finite numbers, returning `a + b` as a
127
+ * `PositiveFiniteNumber`.
115
128
  *
116
- * @param a The first PositiveFiniteNumber.
117
- * @param b The second PositiveFiniteNumber.
118
- * @returns `a + b` clamped to (0, +∞) as a PositiveFiniteNumber.
129
+ * @param a - The first positive finite number
130
+ * @param b - The second positive finite number
131
+ * @returns The sum of `a` and `b` as a `PositiveFiniteNumber`
119
132
  */
120
133
  add,
121
134
  /**
122
- * Subtracts one PositiveFiniteNumber from another.
135
+ * Subtracts two positive finite numbers, returning `a - b` as a
136
+ * `PositiveFiniteNumber`.
123
137
  *
124
- * @param a The minuend PositiveFiniteNumber.
125
- * @param b The subtrahend PositiveFiniteNumber.
126
- * @returns `a - b` clamped to (0, +∞) as a PositiveFiniteNumber (minimum
127
- * MIN_VALUE).
138
+ * @param a - The first positive finite number
139
+ * @param b - The second positive finite number
140
+ * @returns The difference of `a` and `b` as a `PositiveFiniteNumber`
128
141
  */
129
142
  sub,
130
143
  /**
131
- * Multiplies two PositiveFiniteNumber values.
144
+ * Multiplies two positive finite numbers, returning `a * b` as a
145
+ * `PositiveFiniteNumber`.
132
146
  *
133
- * @param a The first PositiveFiniteNumber.
134
- * @param b The second PositiveFiniteNumber.
135
- * @returns `a * b` clamped to (0, +∞) as a PositiveFiniteNumber.
147
+ * @param a - The first positive finite number
148
+ * @param b - The second positive finite number
149
+ * @returns The product of `a` and `b` as a `PositiveFiniteNumber`
136
150
  */
137
151
  mul,
138
152
  /**
139
- * Divides one PositiveFiniteNumber by another.
153
+ * Divides two positive finite numbers, returning `a / b` as a
154
+ * `PositiveFiniteNumber`.
140
155
  *
141
- * @param a The dividend PositiveFiniteNumber.
142
- * @param b The divisor PositiveFiniteNumber.
143
- * @returns `a / b` clamped to (0, +∞) as a PositiveFiniteNumber.
156
+ * @param a - The dividend
157
+ * @param b - The divisor (must be non-zero)
158
+ * @returns `a / b` as a `PositiveFiniteNumber`
144
159
  */
145
160
  div
146
161
  };
@@ -1 +1 @@
1
- {"version":3,"file":"positive-finite-number.mjs","sources":["../../../src/number/branded-types/positive-finite-number.mts"],"sourcesContent":["import {\n type PositiveInt,\n type PositiveFiniteNumber as TtfImported_PositiveFiniteNumber,\n type Uint,\n} from 'ts-type-forge';\nimport { expectType } from '../../expect-type.mjs';\nimport { TsDataForgeInternals } from '../refined-number-utils.mjs';\n\nexport type PositiveFiniteNumber = TtfImported_PositiveFiniteNumber;\n\ntype ElementType = PositiveFiniteNumber;\n\nconst typeNameInMessage = 'a positive finite number';\n\nconst {\n MIN_VALUE,\n add,\n castType,\n clamp,\n div,\n is,\n max: max_,\n min: min_,\n mul,\n pow,\n random,\n sub,\n} = TsDataForgeInternals.RefinedNumberUtils.operatorsForFloat<\n ElementType,\n number,\n number\n>({\n MIN_VALUE: Number.MIN_VALUE,\n MAX_VALUE: Number.MAX_VALUE,\n typeNameInMessage,\n} as const);\n\nconst floor = (\n x: ElementType,\n): TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Math.floor(\n x,\n ) as TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n >;\n\nconst ceil = (\n x: ElementType,\n): TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Math.ceil(x) as TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>;\n\nconst round = (\n x: ElementType,\n): TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Math.round(\n x,\n ) as TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n >;\n\nexpectType<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>,\n PositiveInt\n>('=');\n\nexpectType<\n TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n >,\n Uint\n>('=');\n\n/**\n * Checks if a number is a PositiveFiniteNumber (a finite number > 0).\n *\n * @param value The value to check.\n * @returns `true` if the value is a PositiveFiniteNumber, `false` otherwise.\n */\nexport const isPositiveFiniteNumber = is;\n\n/**\n * Casts a number to a PositiveFiniteNumber type.\n *\n * @param value The value to cast.\n * @returns The value as a PositiveFiniteNumber type.\n * @throws {TypeError} If the value is not a positive finite number.\n */\nexport const asPositiveFiniteNumber = castType;\n\n/**\n * Namespace providing type-safe arithmetic operations for positive finite\n * numbers.\n *\n * All operations maintain the positive constraint by clamping non-positive\n * results to MIN_VALUE, while ensuring results remain finite (excluding NaN and\n * Infinity). This type is useful for representing quantities that must always\n * be positive, such as probabilities, magnitudes, and physical measurements.\n */\nexport const PositiveFiniteNumber = {\n /**\n * Type guard to check if a value is a PositiveFiniteNumber.\n *\n * @param value The value to check.\n * @returns `true` if the value is a positive finite number, `false`\n * otherwise.\n */\n is,\n\n /**\n * The minimum value for a positive finite number.\n *\n * @readonly\n */\n MIN_VALUE,\n\n /**\n * Returns the smaller of two PositiveFiniteNumber values.\n *\n * @param a The first PositiveFiniteNumber.\n * @param b The second PositiveFiniteNumber.\n * @returns The minimum value as a PositiveFiniteNumber.\n */\n min: min_,\n\n /**\n * Returns the larger of two PositiveFiniteNumber values.\n *\n * @param a The first PositiveFiniteNumber.\n * @param b The second PositiveFiniteNumber.\n * @returns The maximum value as a PositiveFiniteNumber.\n */\n max: max_,\n\n /**\n * Clamps a number to the positive finite range.\n *\n * @param value The number to clamp.\n * @returns The value clamped to (0, +∞) as a PositiveFiniteNumber.\n */\n clamp,\n\n /**\n * Rounds down a PositiveFiniteNumber to the nearest integer.\n *\n * @param x The PositiveFiniteNumber to round down.\n * @returns The floor value as a Uint (can be 0).\n */\n floor,\n\n /**\n * Rounds up a PositiveFiniteNumber to the nearest integer.\n *\n * @param x The PositiveFiniteNumber to round up.\n * @returns The ceiling value as a PositiveInt (always >= 1).\n */\n ceil,\n\n /**\n * Rounds a PositiveFiniteNumber to the nearest integer.\n *\n * @param x The PositiveFiniteNumber to round.\n * @returns The rounded value as a Uint (can be 0 if x < 0.5).\n */\n round,\n\n /**\n * Generates a random PositiveFiniteNumber value.\n *\n * @returns A random positive finite number.\n */\n random,\n\n /**\n * Raises a PositiveFiniteNumber to the power of another PositiveFiniteNumber.\n *\n * @param a The base PositiveFiniteNumber.\n * @param b The exponent PositiveFiniteNumber.\n * @returns `a ** b` clamped to (0, +∞) as a PositiveFiniteNumber.\n */\n pow,\n\n /**\n * Adds two PositiveFiniteNumber values.\n *\n * @param a The first PositiveFiniteNumber.\n * @param b The second PositiveFiniteNumber.\n * @returns `a + b` clamped to (0, +∞) as a PositiveFiniteNumber.\n */\n add,\n\n /**\n * Subtracts one PositiveFiniteNumber from another.\n *\n * @param a The minuend PositiveFiniteNumber.\n * @param b The subtrahend PositiveFiniteNumber.\n * @returns `a - b` clamped to (0, +∞) as a PositiveFiniteNumber (minimum\n * MIN_VALUE).\n */\n sub,\n\n /**\n * Multiplies two PositiveFiniteNumber values.\n *\n * @param a The first PositiveFiniteNumber.\n * @param b The second PositiveFiniteNumber.\n * @returns `a * b` clamped to (0, +∞) as a PositiveFiniteNumber.\n */\n mul,\n\n /**\n * Divides one PositiveFiniteNumber by another.\n *\n * @param a The dividend PositiveFiniteNumber.\n * @param b The divisor PositiveFiniteNumber.\n * @returns `a / b` clamped to (0, +∞) as a PositiveFiniteNumber.\n */\n div,\n} as const;\n\nexpectType<\n keyof typeof PositiveFiniteNumber,\n keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'positive'\n >\n>('=');\n\nexpectType<\n typeof PositiveFiniteNumber,\n TsDataForgeInternals.RefinedNumberUtils.NumberClass<ElementType, 'positive'>\n>('<=');\n"],"names":[],"mappings":";;AAYA,MAAM,iBAAA,GAAoB,0BAAA;AAE1B,MAAM;AAAA,EACJ,SAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,GAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,GAAI,oBAAA,CAAqB,mBAAmB,iBAAA,CAI1C;AAAA,EACA,WAAW,MAAA,CAAO,SAAA;AAAA,EAClB,WAAW,MAAA,CAAO,SAAA;AAAA,EAClB;AACF,CAAU,CAAA;AAEV,MAAM,QAAQ,CACZ,CAAA;AAAA;AAAA,EAKA,IAAA,CAAK,KAAA;AAAA,IACH;AAAA;AACF,CAAA;AAIF,MAAM,OAAO,CACX,CAAA;AAAA;AAAA,EAGA,IAAA,CAAK,KAAK,CAAC;AAAA,CAAA;AAEb,MAAM,QAAQ,CACZ,CAAA;AAAA;AAAA,EAKA,IAAA,CAAK,KAAA;AAAA,IACH;AAAA;AACF,CAAA;AAsBK,MAAM,sBAAA,GAAyB;AAS/B,MAAM,sBAAA,GAAyB;AAW/B,MAAM,oBAAA,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASL,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQL,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AACF;;;;"}
1
+ {"version":3,"file":"positive-finite-number.mjs","sources":["../../../src/number/branded-types/positive-finite-number.mts"],"sourcesContent":["import {\n type PositiveInt,\n type PositiveFiniteNumber as TtfImported_PositiveFiniteNumber,\n type Uint,\n} from 'ts-type-forge';\nimport { expectType } from '../../expect-type.mjs';\nimport { TsDataForgeInternals } from '../refined-number-utils.mjs';\n\nexport type PositiveFiniteNumber = TtfImported_PositiveFiniteNumber;\n\ntype ElementType = PositiveFiniteNumber;\n\nconst typeNameInMessage = 'a positive finite number';\n\nconst {\n MIN_VALUE,\n add,\n castType,\n div,\n fromNumber,\n is,\n max: max_,\n min: min_,\n mul,\n pow,\n random,\n sub,\n} = TsDataForgeInternals.RefinedNumberUtils.operatorsForFloat<\n ElementType,\n number,\n number\n>({\n MIN_VALUE: Number.MIN_VALUE,\n MAX_VALUE: Number.MAX_VALUE,\n typeNameInMessage,\n} as const);\n\nconst floor = (\n x: ElementType,\n): TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Math.floor(\n x,\n ) as TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n >;\n\nconst ceil = (\n x: ElementType,\n): TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Math.ceil(x) as TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>;\n\nconst round = (\n x: ElementType,\n): TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Math.round(\n x,\n ) as TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n >;\n\nexpectType<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>,\n PositiveInt\n>('=');\n\nexpectType<\n TsDataForgeInternals.RefinedNumberUtils.RemoveNonZeroBrandKey<\n TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>\n >,\n Uint\n>('=');\n\n/**\n * Type guard that checks if a value is a positive finite number.\n *\n * Returns `true` only for a finite value — never `NaN`, `Infinity`, or\n * `-Infinity`.\n *\n * @param value - The value to check\n * @returns `true` if the value is a positive finite number, `false` otherwise\n */\nexport const isPositiveFiniteNumber = is;\n\n/**\n * Casts a `number` to the `PositiveFiniteNumber` branded type.\n *\n * Validates that the value is a positive finite number and returns it with the\n * `PositiveFiniteNumber` brand. Throws a `TypeError` otherwise.\n *\n * @param value - The value to cast\n * @returns The value as a `PositiveFiniteNumber`\n * @throws {TypeError} If the value is not a positive finite number\n */\nexport const asPositiveFiniteNumber = castType;\n\n/**\n * Namespace providing type-safe operations for the `PositiveFiniteNumber`\n * branded type.\n *\n * The `PositiveFiniteNumber` type represents a positive finite number.\n */\nexport const PositiveFiniteNumber = {\n /**\n * Type guard that checks if a value is a positive finite number.\n *\n * @param value - The value to check\n * @returns `true` if the value is a positive finite number, `false` otherwise\n * @see {@link isPositiveFiniteNumber} for usage examples\n */\n is,\n\n /**\n * The smallest value representable as `PositiveFiniteNumber` (the lower\n * saturation target of `fromNumber`). The domain is open at `0` (excluded),\n * so this is `Number.MIN_VALUE` — the smallest positive double — rather than\n * `0`.\n */\n MIN_VALUE,\n\n /**\n * Returns the smallest of the given positive finite numbers.\n *\n * @param values - The positive finite numbers to compare (at least one required)\n * @returns The smallest value as a `PositiveFiniteNumber`\n */\n min: min_,\n\n /**\n * Returns the largest of the given positive finite numbers.\n *\n * @param values - The positive finite numbers to compare (at least one required)\n * @returns The largest value as a `PositiveFiniteNumber`\n */\n max: max_,\n\n /**\n * Converts an arbitrary `number` into a `PositiveFiniteNumber`, saturating it\n * into the range `[MIN_VALUE, MAX_VALUE]`.\n *\n * Unlike `asPositiveFiniteNumber`, this is total: out-of-range inputs are\n * clamped to the nearest representable `PositiveFiniteNumber` instead of\n * throwing.\n *\n * @param value - The value to convert\n * @returns The value as a `PositiveFiniteNumber`\n */\n fromNumber,\n\n /**\n * Returns the greatest integer less than or equal to a positive finite\n * number.\n *\n * @param a - The positive finite number value\n * @returns The floored value as an integer\n */\n floor,\n\n /**\n * Returns the smallest integer greater than or equal to a positive finite\n * number.\n *\n * @param a - The positive finite number value\n * @returns The ceiled value as an integer\n */\n ceil,\n\n /**\n * Returns the value of a positive finite number rounded to the nearest\n * integer.\n *\n * @param a - The positive finite number value\n * @returns The rounded value as an integer\n */\n round,\n\n /**\n * Generates a random `PositiveFiniteNumber` within the given range.\n *\n * The range is inclusive on both ends.\n *\n * @param min - The minimum value (inclusive)\n * @param max - The maximum value (inclusive)\n * @returns A random `PositiveFiniteNumber` in `[min, max]`\n */\n random,\n\n /**\n * Raises `a` to the power `b`, returning `a ** b` as a\n * `PositiveFiniteNumber`.\n *\n * @param a - The base positive finite number\n * @param b - The exponent positive finite number\n * @returns `a ** b` as a `PositiveFiniteNumber`\n */\n pow,\n\n /**\n * Adds two positive finite numbers, returning `a + b` as a\n * `PositiveFiniteNumber`.\n *\n * @param a - The first positive finite number\n * @param b - The second positive finite number\n * @returns The sum of `a` and `b` as a `PositiveFiniteNumber`\n */\n add,\n\n /**\n * Subtracts two positive finite numbers, returning `a - b` as a\n * `PositiveFiniteNumber`.\n *\n * @param a - The first positive finite number\n * @param b - The second positive finite number\n * @returns The difference of `a` and `b` as a `PositiveFiniteNumber`\n */\n sub,\n\n /**\n * Multiplies two positive finite numbers, returning `a * b` as a\n * `PositiveFiniteNumber`.\n *\n * @param a - The first positive finite number\n * @param b - The second positive finite number\n * @returns The product of `a` and `b` as a `PositiveFiniteNumber`\n */\n mul,\n\n /**\n * Divides two positive finite numbers, returning `a / b` as a\n * `PositiveFiniteNumber`.\n *\n * @param a - The dividend\n * @param b - The divisor (must be non-zero)\n * @returns `a / b` as a `PositiveFiniteNumber`\n */\n div,\n} as const;\n\nexpectType<\n keyof typeof PositiveFiniteNumber,\n keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<\n ElementType,\n 'positive'\n >\n>('=');\n\nexpectType<\n typeof PositiveFiniteNumber,\n TsDataForgeInternals.RefinedNumberUtils.NumberClass<ElementType, 'positive'>\n>('<=');\n"],"names":[],"mappings":";;AAYA,MAAM,iBAAA,GAAoB,0BAAA;AAE1B,MAAM;AAAA,EACJ,SAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,GAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,GAAI,oBAAA,CAAqB,mBAAmB,iBAAA,CAI1C;AAAA,EACA,WAAW,MAAA,CAAO,SAAA;AAAA,EAClB,WAAW,MAAA,CAAO,SAAA;AAAA,EAClB;AACF,CAAU,CAAA;AAEV,MAAM,QAAQ,CACZ,CAAA;AAAA;AAAA,EAKA,IAAA,CAAK,KAAA;AAAA,IACH;AAAA;AACF,CAAA;AAIF,MAAM,OAAO,CACX,CAAA;AAAA;AAAA,EAGA,IAAA,CAAK,KAAK,CAAC;AAAA,CAAA;AAEb,MAAM,QAAQ,CACZ,CAAA;AAAA;AAAA,EAKA,IAAA,CAAK,KAAA;AAAA,IACH;AAAA;AACF,CAAA;AAyBK,MAAM,sBAAA,GAAyB;AAY/B,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,oBAAA,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQL,GAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaL,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA;AACF;;;;"}