ts-data-forge 1.0.0 → 1.0.2

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 (292) hide show
  1. package/README.md +1 -1
  2. package/dist/array/array-utils.d.mts +2617 -0
  3. package/dist/array/array-utils.d.mts.map +1 -0
  4. package/dist/array/array-utils.mjs +2915 -0
  5. package/dist/array/array-utils.mjs.map +1 -0
  6. package/dist/array/index.d.mts +3 -0
  7. package/dist/array/index.d.mts.map +1 -0
  8. package/dist/array/index.mjs +3 -0
  9. package/dist/array/index.mjs.map +1 -0
  10. package/dist/array/tuple-utils.d.mts +421 -0
  11. package/dist/array/tuple-utils.d.mts.map +1 -0
  12. package/dist/array/tuple-utils.mjs +391 -0
  13. package/dist/array/tuple-utils.mjs.map +1 -0
  14. package/dist/collections/imap-mapped.d.mts +445 -0
  15. package/dist/collections/imap-mapped.d.mts.map +1 -0
  16. package/dist/collections/imap-mapped.mjs +424 -0
  17. package/dist/collections/imap-mapped.mjs.map +1 -0
  18. package/dist/collections/imap.d.mts +359 -0
  19. package/dist/collections/imap.d.mts.map +1 -0
  20. package/dist/collections/imap.mjs +338 -0
  21. package/dist/collections/imap.mjs.map +1 -0
  22. package/dist/collections/index.d.mts +7 -0
  23. package/dist/collections/index.d.mts.map +1 -0
  24. package/dist/collections/index.mjs +7 -0
  25. package/dist/collections/index.mjs.map +1 -0
  26. package/dist/collections/iset-mapped.d.mts +576 -0
  27. package/dist/collections/iset-mapped.d.mts.map +1 -0
  28. package/dist/collections/iset-mapped.mjs +522 -0
  29. package/dist/collections/iset-mapped.mjs.map +1 -0
  30. package/dist/collections/iset.d.mts +426 -0
  31. package/dist/collections/iset.d.mts.map +1 -0
  32. package/dist/collections/iset.mjs +437 -0
  33. package/dist/collections/iset.mjs.map +1 -0
  34. package/dist/collections/queue.d.mts +190 -0
  35. package/dist/collections/queue.d.mts.map +1 -0
  36. package/dist/collections/queue.mjs +317 -0
  37. package/dist/collections/queue.mjs.map +1 -0
  38. package/dist/collections/stack.d.mts +210 -0
  39. package/dist/collections/stack.d.mts.map +1 -0
  40. package/dist/collections/stack.mjs +353 -0
  41. package/dist/collections/stack.mjs.map +1 -0
  42. package/dist/expect-type.d.mts +199 -0
  43. package/dist/expect-type.d.mts.map +1 -0
  44. package/dist/expect-type.mjs +201 -0
  45. package/dist/expect-type.mjs.map +1 -0
  46. package/dist/functional/index.d.mts +5 -0
  47. package/dist/functional/index.d.mts.map +1 -0
  48. package/dist/functional/index.mjs +5 -0
  49. package/dist/functional/index.mjs.map +1 -0
  50. package/dist/functional/match.d.mts +215 -0
  51. package/dist/functional/match.d.mts.map +1 -0
  52. package/dist/functional/match.mjs +139 -0
  53. package/dist/functional/match.mjs.map +1 -0
  54. package/dist/functional/optional.d.mts +517 -0
  55. package/dist/functional/optional.d.mts.map +1 -0
  56. package/dist/functional/optional.mjs +532 -0
  57. package/dist/functional/optional.mjs.map +1 -0
  58. package/dist/functional/pipe.d.mts +185 -0
  59. package/dist/functional/pipe.d.mts.map +1 -0
  60. package/dist/functional/pipe.mjs +129 -0
  61. package/dist/functional/pipe.mjs.map +1 -0
  62. package/dist/functional/result.d.mts +796 -0
  63. package/dist/functional/result.d.mts.map +1 -0
  64. package/dist/functional/result.mjs +844 -0
  65. package/dist/functional/result.mjs.map +1 -0
  66. package/dist/globals.d.mts +38 -0
  67. package/dist/guard/has-key.d.mts +100 -0
  68. package/dist/guard/has-key.d.mts.map +1 -0
  69. package/dist/guard/has-key.mjs +94 -0
  70. package/dist/guard/has-key.mjs.map +1 -0
  71. package/dist/guard/index.d.mts +8 -0
  72. package/dist/guard/index.d.mts.map +1 -0
  73. package/dist/guard/index.mjs +8 -0
  74. package/dist/guard/index.mjs.map +1 -0
  75. package/dist/guard/is-non-empty-string.d.mts +106 -0
  76. package/dist/guard/is-non-empty-string.d.mts.map +1 -0
  77. package/dist/guard/is-non-empty-string.mjs +108 -0
  78. package/dist/guard/is-non-empty-string.mjs.map +1 -0
  79. package/dist/guard/is-non-null-object.d.mts +105 -0
  80. package/dist/guard/is-non-null-object.d.mts.map +1 -0
  81. package/dist/guard/is-non-null-object.mjs +108 -0
  82. package/dist/guard/is-non-null-object.mjs.map +1 -0
  83. package/dist/guard/is-primitive.d.mts +146 -0
  84. package/dist/guard/is-primitive.d.mts.map +1 -0
  85. package/dist/guard/is-primitive.mjs +161 -0
  86. package/dist/guard/is-primitive.mjs.map +1 -0
  87. package/dist/guard/is-record.d.mts +151 -0
  88. package/dist/guard/is-record.d.mts.map +1 -0
  89. package/dist/guard/is-record.mjs +155 -0
  90. package/dist/guard/is-record.mjs.map +1 -0
  91. package/dist/guard/is-type.d.mts +430 -0
  92. package/dist/guard/is-type.d.mts.map +1 -0
  93. package/dist/guard/is-type.mjs +432 -0
  94. package/dist/guard/is-type.mjs.map +1 -0
  95. package/dist/guard/key-is-in.d.mts +158 -0
  96. package/dist/guard/key-is-in.d.mts.map +1 -0
  97. package/dist/guard/key-is-in.mjs +160 -0
  98. package/dist/guard/key-is-in.mjs.map +1 -0
  99. package/dist/index.d.mts +11 -0
  100. package/dist/index.d.mts.map +1 -0
  101. package/dist/index.mjs +61 -0
  102. package/dist/index.mjs.map +1 -0
  103. package/dist/iterator/index.d.mts +2 -0
  104. package/dist/iterator/index.d.mts.map +1 -0
  105. package/dist/iterator/index.mjs +2 -0
  106. package/dist/iterator/index.mjs.map +1 -0
  107. package/dist/iterator/range.d.mts +97 -0
  108. package/dist/iterator/range.d.mts.map +1 -0
  109. package/dist/iterator/range.mjs +130 -0
  110. package/dist/iterator/range.mjs.map +1 -0
  111. package/dist/json/index.d.mts +2 -0
  112. package/dist/json/index.d.mts.map +1 -0
  113. package/dist/json/index.mjs +2 -0
  114. package/dist/json/index.mjs.map +1 -0
  115. package/dist/json/json.d.mts +597 -0
  116. package/dist/json/json.d.mts.map +1 -0
  117. package/dist/json/json.mjs +687 -0
  118. package/dist/json/json.mjs.map +1 -0
  119. package/dist/number/branded-types/finite-number.d.mts +291 -0
  120. package/dist/number/branded-types/finite-number.d.mts.map +1 -0
  121. package/dist/number/branded-types/finite-number.mjs +296 -0
  122. package/dist/number/branded-types/finite-number.mjs.map +1 -0
  123. package/dist/number/branded-types/index.d.mts +27 -0
  124. package/dist/number/branded-types/index.d.mts.map +1 -0
  125. package/dist/number/branded-types/index.mjs +27 -0
  126. package/dist/number/branded-types/index.mjs.map +1 -0
  127. package/dist/number/branded-types/int.d.mts +242 -0
  128. package/dist/number/branded-types/int.d.mts.map +1 -0
  129. package/dist/number/branded-types/int.mjs +239 -0
  130. package/dist/number/branded-types/int.mjs.map +1 -0
  131. package/dist/number/branded-types/int16.d.mts +162 -0
  132. package/dist/number/branded-types/int16.d.mts.map +1 -0
  133. package/dist/number/branded-types/int16.mjs +141 -0
  134. package/dist/number/branded-types/int16.mjs.map +1 -0
  135. package/dist/number/branded-types/int32.d.mts +155 -0
  136. package/dist/number/branded-types/int32.d.mts.map +1 -0
  137. package/dist/number/branded-types/int32.mjs +142 -0
  138. package/dist/number/branded-types/int32.mjs.map +1 -0
  139. package/dist/number/branded-types/non-negative-finite-number.d.mts +165 -0
  140. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -0
  141. package/dist/number/branded-types/non-negative-finite-number.mjs +160 -0
  142. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -0
  143. package/dist/number/branded-types/non-negative-int16.d.mts +160 -0
  144. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -0
  145. package/dist/number/branded-types/non-negative-int16.mjs +138 -0
  146. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -0
  147. package/dist/number/branded-types/non-negative-int32.d.mts +156 -0
  148. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -0
  149. package/dist/number/branded-types/non-negative-int32.mjs +138 -0
  150. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -0
  151. package/dist/number/branded-types/non-zero-finite-number.d.mts +154 -0
  152. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -0
  153. package/dist/number/branded-types/non-zero-finite-number.mjs +160 -0
  154. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -0
  155. package/dist/number/branded-types/non-zero-int.d.mts +131 -0
  156. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -0
  157. package/dist/number/branded-types/non-zero-int.mjs +128 -0
  158. package/dist/number/branded-types/non-zero-int.mjs.map +1 -0
  159. package/dist/number/branded-types/non-zero-int16.d.mts +166 -0
  160. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -0
  161. package/dist/number/branded-types/non-zero-int16.mjs +145 -0
  162. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -0
  163. package/dist/number/branded-types/non-zero-int32.d.mts +158 -0
  164. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -0
  165. package/dist/number/branded-types/non-zero-int32.mjs +145 -0
  166. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -0
  167. package/dist/number/branded-types/non-zero-safe-int.d.mts +148 -0
  168. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -0
  169. package/dist/number/branded-types/non-zero-safe-int.mjs +145 -0
  170. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -0
  171. package/dist/number/branded-types/non-zero-uint16.d.mts +160 -0
  172. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -0
  173. package/dist/number/branded-types/non-zero-uint16.mjs +140 -0
  174. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -0
  175. package/dist/number/branded-types/non-zero-uint32.d.mts +156 -0
  176. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -0
  177. package/dist/number/branded-types/non-zero-uint32.mjs +140 -0
  178. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -0
  179. package/dist/number/branded-types/positive-finite-number.d.mts +171 -0
  180. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -0
  181. package/dist/number/branded-types/positive-finite-number.mjs +165 -0
  182. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -0
  183. package/dist/number/branded-types/positive-int.d.mts +270 -0
  184. package/dist/number/branded-types/positive-int.d.mts.map +1 -0
  185. package/dist/number/branded-types/positive-int.mjs +257 -0
  186. package/dist/number/branded-types/positive-int.mjs.map +1 -0
  187. package/dist/number/branded-types/positive-int16.d.mts +162 -0
  188. package/dist/number/branded-types/positive-int16.d.mts.map +1 -0
  189. package/dist/number/branded-types/positive-int16.mjs +139 -0
  190. package/dist/number/branded-types/positive-int16.mjs.map +1 -0
  191. package/dist/number/branded-types/positive-int32.d.mts +158 -0
  192. package/dist/number/branded-types/positive-int32.d.mts.map +1 -0
  193. package/dist/number/branded-types/positive-int32.mjs +139 -0
  194. package/dist/number/branded-types/positive-int32.mjs.map +1 -0
  195. package/dist/number/branded-types/positive-safe-int.d.mts +152 -0
  196. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -0
  197. package/dist/number/branded-types/positive-safe-int.mjs +138 -0
  198. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -0
  199. package/dist/number/branded-types/positive-uint16.d.mts +160 -0
  200. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -0
  201. package/dist/number/branded-types/positive-uint16.mjs +139 -0
  202. package/dist/number/branded-types/positive-uint16.mjs.map +1 -0
  203. package/dist/number/branded-types/positive-uint32.d.mts +156 -0
  204. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -0
  205. package/dist/number/branded-types/positive-uint32.mjs +139 -0
  206. package/dist/number/branded-types/positive-uint32.mjs.map +1 -0
  207. package/dist/number/branded-types/safe-int.d.mts +243 -0
  208. package/dist/number/branded-types/safe-int.d.mts.map +1 -0
  209. package/dist/number/branded-types/safe-int.mjs +240 -0
  210. package/dist/number/branded-types/safe-int.mjs.map +1 -0
  211. package/dist/number/branded-types/safe-uint.d.mts +151 -0
  212. package/dist/number/branded-types/safe-uint.d.mts.map +1 -0
  213. package/dist/number/branded-types/safe-uint.mjs +138 -0
  214. package/dist/number/branded-types/safe-uint.mjs.map +1 -0
  215. package/dist/number/branded-types/uint.d.mts +144 -0
  216. package/dist/number/branded-types/uint.d.mts.map +1 -0
  217. package/dist/number/branded-types/uint.mjs +132 -0
  218. package/dist/number/branded-types/uint.mjs.map +1 -0
  219. package/dist/number/branded-types/uint16.d.mts +157 -0
  220. package/dist/number/branded-types/uint16.d.mts.map +1 -0
  221. package/dist/number/branded-types/uint16.mjs +137 -0
  222. package/dist/number/branded-types/uint16.mjs.map +1 -0
  223. package/dist/number/branded-types/uint32.d.mts +185 -0
  224. package/dist/number/branded-types/uint32.d.mts.map +1 -0
  225. package/dist/number/branded-types/uint32.mjs +169 -0
  226. package/dist/number/branded-types/uint32.mjs.map +1 -0
  227. package/dist/number/enum/index.d.mts +3 -0
  228. package/dist/number/enum/index.d.mts.map +1 -0
  229. package/dist/number/enum/index.mjs +3 -0
  230. package/dist/number/enum/index.mjs.map +1 -0
  231. package/dist/number/enum/int8.d.mts +202 -0
  232. package/dist/number/enum/int8.d.mts.map +1 -0
  233. package/dist/number/enum/int8.mjs +296 -0
  234. package/dist/number/enum/int8.mjs.map +1 -0
  235. package/dist/number/enum/uint8.d.mts +128 -0
  236. package/dist/number/enum/uint8.d.mts.map +1 -0
  237. package/dist/number/enum/uint8.mjs +251 -0
  238. package/dist/number/enum/uint8.mjs.map +1 -0
  239. package/dist/number/index.d.mts +5 -0
  240. package/dist/number/index.d.mts.map +1 -0
  241. package/dist/number/index.mjs +31 -0
  242. package/dist/number/index.mjs.map +1 -0
  243. package/dist/number/num.d.mts +515 -0
  244. package/dist/number/num.d.mts.map +1 -0
  245. package/dist/number/num.mjs +513 -0
  246. package/dist/number/num.mjs.map +1 -0
  247. package/dist/number/refined-number-utils.d.mts +191 -0
  248. package/dist/number/refined-number-utils.d.mts.map +1 -0
  249. package/dist/number/refined-number-utils.mjs +179 -0
  250. package/dist/number/refined-number-utils.mjs.map +1 -0
  251. package/dist/object/index.d.mts +2 -0
  252. package/dist/object/index.d.mts.map +1 -0
  253. package/dist/object/index.mjs +2 -0
  254. package/dist/object/index.mjs.map +1 -0
  255. package/dist/object/object.d.mts +296 -0
  256. package/dist/object/object.d.mts.map +1 -0
  257. package/dist/object/object.mjs +295 -0
  258. package/dist/object/object.mjs.map +1 -0
  259. package/dist/others/cast-mutable.d.mts +110 -0
  260. package/dist/others/cast-mutable.d.mts.map +1 -0
  261. package/dist/others/cast-mutable.mjs +114 -0
  262. package/dist/others/cast-mutable.mjs.map +1 -0
  263. package/dist/others/cast-readonly.d.mts +189 -0
  264. package/dist/others/cast-readonly.d.mts.map +1 -0
  265. package/dist/others/cast-readonly.mjs +193 -0
  266. package/dist/others/cast-readonly.mjs.map +1 -0
  267. package/dist/others/if-then.d.mts +98 -0
  268. package/dist/others/if-then.d.mts.map +1 -0
  269. package/dist/others/if-then.mjs +100 -0
  270. package/dist/others/if-then.mjs.map +1 -0
  271. package/dist/others/index.d.mts +8 -0
  272. package/dist/others/index.d.mts.map +1 -0
  273. package/dist/others/index.mjs +8 -0
  274. package/dist/others/index.mjs.map +1 -0
  275. package/dist/others/map-nullable.d.mts +151 -0
  276. package/dist/others/map-nullable.d.mts.map +1 -0
  277. package/dist/others/map-nullable.mjs +159 -0
  278. package/dist/others/map-nullable.mjs.map +1 -0
  279. package/dist/others/memoize-function.d.mts +173 -0
  280. package/dist/others/memoize-function.d.mts.map +1 -0
  281. package/dist/others/memoize-function.mjs +189 -0
  282. package/dist/others/memoize-function.mjs.map +1 -0
  283. package/dist/others/tuple.d.mts +159 -0
  284. package/dist/others/tuple.d.mts.map +1 -0
  285. package/dist/others/tuple.mjs +161 -0
  286. package/dist/others/tuple.mjs.map +1 -0
  287. package/dist/others/unknown-to-string.d.mts +180 -0
  288. package/dist/others/unknown-to-string.d.mts.map +1 -0
  289. package/dist/others/unknown-to-string.mjs +211 -0
  290. package/dist/others/unknown-to-string.mjs.map +1 -0
  291. package/dist/tsconfig.json +1 -0
  292. package/package.json +18 -16
@@ -0,0 +1,165 @@
1
+ import { TsVerifiedInternals } from '../refined-number-utils.mjs';
2
+
3
+ const typeNameInMessage = 'a positive finite number';
4
+ const { MIN_VALUE, min: min_, max: max_, pow, add, sub, mul, div, random, is, castType, clamp, } = TsVerifiedInternals.RefinedNumberUtils.operatorsForFloat({
5
+ MIN_VALUE: Number.MIN_VALUE,
6
+ MAX_VALUE: undefined,
7
+ typeNameInMessage,
8
+ });
9
+ const floor = (x) =>
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
11
+ Math.floor(x);
12
+ const ceil = (x) =>
13
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
14
+ Math.ceil(x);
15
+ const round = (x) =>
16
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
17
+ Math.round(x);
18
+ /**
19
+ * Checks if a number is a PositiveFiniteNumber (a finite number > 0).
20
+ * @param value The value to check.
21
+ * @returns `true` if the value is a PositiveFiniteNumber, `false` otherwise.
22
+ */
23
+ const isPositiveFiniteNumber = is;
24
+ /**
25
+ * Casts a number to a PositiveFiniteNumber type.
26
+ * @param value The value to cast.
27
+ * @returns The value as a PositiveFiniteNumber type.
28
+ * @throws {TypeError} If the value is not a positive finite number.
29
+ * @example
30
+ * ```typescript
31
+ * const x = asPositiveFiniteNumber(5.5); // PositiveFiniteNumber
32
+ * const y = asPositiveFiniteNumber(0.001); // PositiveFiniteNumber
33
+ * // asPositiveFiniteNumber(0); // throws TypeError
34
+ * // asPositiveFiniteNumber(-1); // throws TypeError
35
+ * ```
36
+ */
37
+ const asPositiveFiniteNumber = castType;
38
+ /**
39
+ * Namespace providing type-safe arithmetic operations for positive finite numbers.
40
+ *
41
+ * All operations maintain the positive constraint by clamping non-positive results to MIN_VALUE,
42
+ * while ensuring results remain finite (excluding NaN and Infinity). This type is useful
43
+ * for representing quantities that must always be positive, such as probabilities, magnitudes,
44
+ * and physical measurements.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const probability = asPositiveFiniteNumber(0.75);
49
+ * const rate = asPositiveFiniteNumber(1.25);
50
+ *
51
+ * // Arithmetic operations with positive clamping
52
+ * const combined = PositiveFiniteNumber.add(probability, rate); // PositiveFiniteNumber (2.0)
53
+ * const difference = PositiveFiniteNumber.sub(rate, probability); // PositiveFiniteNumber (0.5)
54
+ * const scaled = PositiveFiniteNumber.mul(probability, rate); // PositiveFiniteNumber (0.9375)
55
+ * const ratio = PositiveFiniteNumber.div(rate, probability); // PositiveFiniteNumber (1.666...)
56
+ *
57
+ * // Range operations
58
+ * const clamped = PositiveFiniteNumber.clamp(-10.5); // PositiveFiniteNumber (MIN_VALUE)
59
+ * const minimum = PositiveFiniteNumber.min(probability, rate); // PositiveFiniteNumber (0.75)
60
+ * const maximum = PositiveFiniteNumber.max(probability, rate); // PositiveFiniteNumber (1.25)
61
+ *
62
+ * // Rounding operations (different return types based on operation)
63
+ * const ceiled = PositiveFiniteNumber.ceil(probability); // PositiveInt (1)
64
+ * const floored = PositiveFiniteNumber.floor(rate); // Uint (1)
65
+ * const rounded = PositiveFiniteNumber.round(rate); // Uint (1)
66
+ *
67
+ * // Utility operations
68
+ * const random = PositiveFiniteNumber.random(); // PositiveFiniteNumber (random positive value)
69
+ * const power = PositiveFiniteNumber.pow(rate, probability); // PositiveFiniteNumber (1.18...)
70
+ * ```
71
+ */
72
+ const PositiveFiniteNumber = {
73
+ /**
74
+ * Type guard to check if a value is a PositiveFiniteNumber.
75
+ * @param value The value to check.
76
+ * @returns `true` if the value is a positive finite number, `false` otherwise.
77
+ */
78
+ is,
79
+ /**
80
+ * The minimum value for a positive finite number.
81
+ * @readonly
82
+ */
83
+ MIN_VALUE,
84
+ /**
85
+ * Returns the smaller of two PositiveFiniteNumber values.
86
+ * @param a The first PositiveFiniteNumber.
87
+ * @param b The second PositiveFiniteNumber.
88
+ * @returns The minimum value as a PositiveFiniteNumber.
89
+ */
90
+ min: min_,
91
+ /**
92
+ * Returns the larger of two PositiveFiniteNumber values.
93
+ * @param a The first PositiveFiniteNumber.
94
+ * @param b The second PositiveFiniteNumber.
95
+ * @returns The maximum value as a PositiveFiniteNumber.
96
+ */
97
+ max: max_,
98
+ /**
99
+ * Clamps a number to the positive finite range.
100
+ * @param value The number to clamp.
101
+ * @returns The value clamped to (0, +∞) as a PositiveFiniteNumber.
102
+ */
103
+ clamp,
104
+ /**
105
+ * Rounds down a PositiveFiniteNumber to the nearest integer.
106
+ * @param x The PositiveFiniteNumber to round down.
107
+ * @returns The floor value as a Uint (can be 0).
108
+ */
109
+ floor,
110
+ /**
111
+ * Rounds up a PositiveFiniteNumber to the nearest integer.
112
+ * @param x The PositiveFiniteNumber to round up.
113
+ * @returns The ceiling value as a PositiveInt (always >= 1).
114
+ */
115
+ ceil,
116
+ /**
117
+ * Rounds a PositiveFiniteNumber to the nearest integer.
118
+ * @param x The PositiveFiniteNumber to round.
119
+ * @returns The rounded value as a Uint (can be 0 if x < 0.5).
120
+ */
121
+ round,
122
+ /**
123
+ * Generates a random PositiveFiniteNumber value.
124
+ * @returns A random positive finite number.
125
+ */
126
+ random,
127
+ /**
128
+ * Raises a PositiveFiniteNumber to the power of another PositiveFiniteNumber.
129
+ * @param a The base PositiveFiniteNumber.
130
+ * @param b The exponent PositiveFiniteNumber.
131
+ * @returns `a ** b` clamped to (0, +∞) as a PositiveFiniteNumber.
132
+ */
133
+ pow,
134
+ /**
135
+ * Adds two PositiveFiniteNumber values.
136
+ * @param a The first PositiveFiniteNumber.
137
+ * @param b The second PositiveFiniteNumber.
138
+ * @returns `a + b` clamped to (0, +∞) as a PositiveFiniteNumber.
139
+ */
140
+ add,
141
+ /**
142
+ * Subtracts one PositiveFiniteNumber from another.
143
+ * @param a The minuend PositiveFiniteNumber.
144
+ * @param b The subtrahend PositiveFiniteNumber.
145
+ * @returns `a - b` clamped to (0, +∞) as a PositiveFiniteNumber (minimum MIN_VALUE).
146
+ */
147
+ sub,
148
+ /**
149
+ * Multiplies two PositiveFiniteNumber values.
150
+ * @param a The first PositiveFiniteNumber.
151
+ * @param b The second PositiveFiniteNumber.
152
+ * @returns `a * b` clamped to (0, +∞) as a PositiveFiniteNumber.
153
+ */
154
+ mul,
155
+ /**
156
+ * Divides one PositiveFiniteNumber by another.
157
+ * @param a The dividend PositiveFiniteNumber.
158
+ * @param b The divisor PositiveFiniteNumber.
159
+ * @returns `a / b` clamped to (0, +∞) as a PositiveFiniteNumber.
160
+ */
161
+ div,
162
+ };
163
+
164
+ export { PositiveFiniteNumber, asPositiveFiniteNumber, isPositiveFiniteNumber };
165
+ //# sourceMappingURL=positive-finite-number.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positive-finite-number.mjs","sources":["../../../src/number/branded-types/positive-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA,MAAM,iBAAiB,GAAG,0BAA0B;AAEpD,MAAM,EACJ,SAAS,EACT,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,IAAI,EACT,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,MAAM,EACN,EAAE,EACF,QAAQ,EACR,KAAK,GACN,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,iBAAiB,CAI1D;IACA,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,IAAA,SAAS,EAAE,SAAS;IACpB,iBAAiB;AACT,CAAA,CAAC;AAEX,MAAM,KAAK,GAAG,CACZ,CAAc;AAId;AACA,IAAI,CAAC,KAAK,CAAC,CAAC,CAEX;AAEH,MAAM,IAAI,GAAG,CACX,CAAc;AAEd;AACA,IAAI,CAAC,IAAI,CAAC,CAAC,CAA8D;AAE3E,MAAM,KAAK,GAAG,CACZ,CAAc;AAId;AACA,IAAI,CAAC,KAAK,CAAC,CAAC,CAEX;AAcH;;;;AAIG;AACI,MAAM,sBAAsB,GAAG;AAEtC;;;;;;;;;;;;AAYG;AACI,MAAM,sBAAsB,GAAG;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACI,MAAM,oBAAoB,GAAG;AAClC;;;;AAIG;IACH,EAAE;AAEF;;;AAGG;IACH,SAAS;AAET;;;;;AAKG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;;AAKG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;AAIG;IACH,KAAK;AAEL;;;;AAIG;IACH,KAAK;AAEL;;;;AAIG;IACH,IAAI;AAEJ;;;;AAIG;IACH,KAAK;AAEL;;;AAGG;IACH,MAAM;AAEN;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;;;;;"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Type guard that checks if a value is a positive integer.
3
+ *
4
+ * A positive integer is any integer greater than zero (>= 1).
5
+ * This excludes zero, negative numbers, and non-integers.
6
+ *
7
+ * @param value - The value to check
8
+ * @returns `true` if the value is a positive integer, `false` otherwise
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * isPositiveInt(5); // true
13
+ * isPositiveInt(1); // true
14
+ * isPositiveInt(0); // false (zero is not positive)
15
+ * isPositiveInt(-1); // false (negative)
16
+ * isPositiveInt(5.5); // false (not an integer)
17
+ * isPositiveInt(NaN); // false
18
+ * ```
19
+ */
20
+ export declare const isPositiveInt: (a: number) => a is PositiveInt;
21
+ /**
22
+ * Casts a number to a PositiveInt branded type.
23
+ *
24
+ * This function validates that the input is a positive integer (>= 1)
25
+ * and returns it with the PositiveInt brand. This ensures type safety
26
+ * for operations that require strictly positive integer values.
27
+ *
28
+ * @param value - The value to cast
29
+ * @returns The value as a PositiveInt branded type
30
+ * @throws {TypeError} If the value is not a positive integer
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const count = asPositiveInt(5); // PositiveInt
35
+ * const length = asPositiveInt(100); // PositiveInt
36
+ * const one = asPositiveInt(1); // PositiveInt (minimum valid)
37
+ *
38
+ * // These throw TypeError:
39
+ * // asPositiveInt(0); // Zero is not positive
40
+ * // asPositiveInt(-1); // Negative numbers not allowed
41
+ * // asPositiveInt(5.5); // Not an integer
42
+ * // asPositiveInt(Infinity); // Not finite
43
+ * ```
44
+ */
45
+ export declare const asPositiveInt: <N extends number>(x: N) => number & {
46
+ readonly NaNValue: false;
47
+ readonly "!=0": true;
48
+ readonly "> -2^16": true;
49
+ readonly "> -2^32": true;
50
+ readonly ">= -2^15": true;
51
+ readonly ">= -2^31": true;
52
+ readonly ">=0": true;
53
+ readonly Finite: true;
54
+ readonly Int: true;
55
+ } & Readonly<{
56
+ 'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
57
+ }> & N;
58
+ /**
59
+ * Namespace providing type-safe operations for PositiveInt branded types.
60
+ *
61
+ * PositiveInt represents integers that are strictly greater than zero (>= 1).
62
+ * All operations automatically clamp results to maintain the positive constraint,
63
+ * ensuring that arithmetic operations never produce zero or negative values.
64
+ *
65
+ * This type is essential for:
66
+ * - Array lengths and sizes (length >= 1)
67
+ * - Counts and quantities that must be positive
68
+ * - Denominators in division operations
69
+ * - Loop counters and iteration counts
70
+ * - Database primary keys and IDs
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // Type validation
75
+ * PositiveInt.is(5); // true
76
+ * PositiveInt.is(1); // true (minimum value)
77
+ * PositiveInt.is(0); // false
78
+ * PositiveInt.is(-1); // false
79
+ *
80
+ * // Automatic clamping in operations
81
+ * const a = asPositiveInt(10);
82
+ * const b = asPositiveInt(3);
83
+ *
84
+ * const sum = PositiveInt.add(a, b); // PositiveInt (13)
85
+ * const diff1 = PositiveInt.sub(a, b); // PositiveInt (7)
86
+ * const diff2 = PositiveInt.sub(b, a); // PositiveInt (1) - clamped!
87
+ * const product = PositiveInt.mul(a, b); // PositiveInt (30)
88
+ * const quotient = PositiveInt.div(a, b); // PositiveInt (3)
89
+ *
90
+ * // Edge case: division that would be < 1
91
+ * const small = PositiveInt.div(asPositiveInt(2), asPositiveInt(3)); // PositiveInt (1)
92
+ *
93
+ * // Range operations
94
+ * const minimum = PositiveInt.min(a, b); // PositiveInt (3)
95
+ * const maximum = PositiveInt.max(a, b); // PositiveInt (10)
96
+ *
97
+ * // Random generation
98
+ * const dice = PositiveInt.random(asPositiveInt(1), asPositiveInt(6)); // 1-6
99
+ * const id = PositiveInt.random(asPositiveInt(1000), asPositiveInt(9999)); // 4-digit ID
100
+ * ```
101
+ */
102
+ export declare const PositiveInt: {
103
+ /**
104
+ * Type guard that checks if a value is a positive integer.
105
+ *
106
+ * @param value - The value to check
107
+ * @returns `true` if the value is a positive integer, `false` otherwise
108
+ *
109
+ * @see {@link isPositiveInt} for usage examples
110
+ */
111
+ readonly is: (a: number) => a is PositiveInt;
112
+ /**
113
+ * The minimum value for a PositiveInt.
114
+ * @readonly
115
+ */
116
+ readonly MIN_VALUE: 1;
117
+ /**
118
+ * Returns the minimum value from a list of positive integers.
119
+ *
120
+ * Since all inputs are guaranteed to be >= 1, the result is also guaranteed
121
+ * to be a positive integer.
122
+ *
123
+ * @param values - The positive integers to compare (at least one required)
124
+ * @returns The smallest value as a PositiveInt
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * PositiveInt.min(asPositiveInt(5), asPositiveInt(3)); // PositiveInt (3)
129
+ * PositiveInt.min(asPositiveInt(10), asPositiveInt(1), asPositiveInt(7)); // PositiveInt (1)
130
+ * ```
131
+ */
132
+ readonly min: (...values: readonly WithSmallInt<PositiveInt, 40>[]) => PositiveInt;
133
+ /**
134
+ * Returns the maximum value from a list of positive integers.
135
+ *
136
+ * @param values - The positive integers to compare (at least one required)
137
+ * @returns The largest value as a PositiveInt
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * PositiveInt.max(asPositiveInt(5), asPositiveInt(3)); // PositiveInt (5)
142
+ * PositiveInt.max(asPositiveInt(10), asPositiveInt(1), asPositiveInt(7)); // PositiveInt (10)
143
+ * ```
144
+ */
145
+ readonly max: (...values: readonly WithSmallInt<PositiveInt, 40>[]) => PositiveInt;
146
+ /**
147
+ * Clamps a number to the positive integer range.
148
+ *
149
+ * Since PositiveInt has a minimum value of 1, this function ensures
150
+ * that any input less than 1 is clamped to 1.
151
+ *
152
+ * @param value - The number to clamp
153
+ * @returns The value clamped to >= 1 as a PositiveInt
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * PositiveInt.clamp(5); // PositiveInt (5)
158
+ * PositiveInt.clamp(0); // PositiveInt (1) - clamped to minimum
159
+ * PositiveInt.clamp(-10); // PositiveInt (1) - clamped to minimum
160
+ * PositiveInt.clamp(100); // PositiveInt (100)
161
+ * ```
162
+ */
163
+ readonly clamp: (x: number) => PositiveInt;
164
+ /**
165
+ * Generates a random positive integer within the specified range (inclusive).
166
+ *
167
+ * Both bounds are inclusive, and both min and max must be positive integers.
168
+ * If min > max, they are automatically swapped.
169
+ *
170
+ * @param min - The minimum value (inclusive, must be >= 1)
171
+ * @param max - The maximum value (inclusive, must be >= min)
172
+ * @returns A random PositiveInt in the range [min, max]
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * // Dice roll
177
+ * const d6 = PositiveInt.random(asPositiveInt(1), asPositiveInt(6));
178
+ *
179
+ * // Random user ID
180
+ * const userId = PositiveInt.random(asPositiveInt(1000), asPositiveInt(9999));
181
+ *
182
+ * // Random page count
183
+ * const pages = PositiveInt.random(asPositiveInt(50), asPositiveInt(500));
184
+ * ```
185
+ */
186
+ readonly random: (min: WithSmallInt<PositiveInt, 40>, max: WithSmallInt<PositiveInt, 40>) => PositiveInt;
187
+ /**
188
+ * Raises a positive integer to a power, ensuring the result is never less than 1.
189
+ * @param a - The base positive integer
190
+ * @param b - The exponent positive integer
191
+ * @returns `a ** b` as a PositiveInt, but never less than 1
192
+ * @example
193
+ * ```typescript
194
+ * PositiveInt.pow(asPositiveInt(2), asPositiveInt(3)); // PositiveInt (8)
195
+ * ```
196
+ */
197
+ readonly pow: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
198
+ /**
199
+ * Adds two positive integers, ensuring the result is never less than 1.
200
+ * @param a - First positive integer
201
+ * @param b - Second positive integer
202
+ * @returns `a + b` as a PositiveInt, but never less than 1
203
+ * @example
204
+ * ```typescript
205
+ * PositiveInt.add(asPositiveInt(5), asPositiveInt(3)); // PositiveInt (8)
206
+ * ```
207
+ */
208
+ readonly add: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
209
+ /**
210
+ * Subtracts two positive integers, clamping the result to remain positive.
211
+ *
212
+ * If the mathematical result would be <= 0, it is clamped to 1 to maintain
213
+ * the positive integer constraint.
214
+ *
215
+ * @param a - The minuend (positive integer)
216
+ * @param b - The subtrahend (positive integer)
217
+ * @returns `max(1, a - b)` as a PositiveInt
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * PositiveInt.sub(asPositiveInt(8), asPositiveInt(3)); // PositiveInt (5)
222
+ * PositiveInt.sub(asPositiveInt(3), asPositiveInt(8)); // PositiveInt (1) - clamped
223
+ * PositiveInt.sub(asPositiveInt(5), asPositiveInt(5)); // PositiveInt (1) - clamped
224
+ * ```
225
+ */
226
+ readonly sub: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
227
+ /**
228
+ * Multiplies two positive integers, ensuring the result is never less than 1.
229
+ * @param a - First positive integer
230
+ * @param b - Second positive integer
231
+ * @returns `a * b` as a PositiveInt, but never less than 1
232
+ * @example
233
+ * ```typescript
234
+ * PositiveInt.mul(asPositiveInt(4), asPositiveInt(3)); // PositiveInt (12)
235
+ * ```
236
+ */
237
+ readonly mul: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
238
+ /**
239
+ * Divides two positive integers using floor division, clamping to remain positive.
240
+ *
241
+ * Performs mathematical floor division: `⌊a / b⌋`. If the result would be 0
242
+ * (when a < b), it is clamped to 1 to maintain the positive integer constraint.
243
+ *
244
+ * @param a - The dividend (positive integer)
245
+ * @param b - The divisor (positive integer, guaranteed non-zero)
246
+ * @returns `max(1, ⌊a / b⌋)` as a PositiveInt
247
+ *
248
+ * @example
249
+ * ```typescript
250
+ * PositiveInt.div(asPositiveInt(10), asPositiveInt(3)); // PositiveInt (3)
251
+ * PositiveInt.div(asPositiveInt(9), asPositiveInt(3)); // PositiveInt (3)
252
+ * PositiveInt.div(asPositiveInt(2), asPositiveInt(3)); // PositiveInt (1) - clamped
253
+ * PositiveInt.div(asPositiveInt(1), asPositiveInt(5)); // PositiveInt (1) - clamped
254
+ * ```
255
+ */
256
+ readonly div: (x: WithSmallInt<PositiveInt, 40>, y: 1 | 2 | 3 | 32 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 10 | 24 | 14 | 34 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | 35 | 36 | 37 | 38 | 39 | NormalizeBrandUnion<number & {
257
+ readonly NaNValue: false;
258
+ readonly "!=0": true;
259
+ readonly "> -2^16": true;
260
+ readonly "> -2^32": true;
261
+ readonly ">= -2^15": true;
262
+ readonly ">= -2^31": true;
263
+ readonly ">=0": true;
264
+ readonly Finite: true;
265
+ readonly Int: true;
266
+ } & Readonly<{
267
+ 'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
268
+ }>>) => PositiveInt;
269
+ };
270
+ //# sourceMappingURL=positive-int.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positive-int.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/positive-int.mts"],"names":[],"mappings":"AA+BA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,iCAAK,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;MAAW,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,WAAW;IACtB;;;;;;;OAOG;;IAGH;;;OAGG;;IAGH;;;;;;;;;;;;;;OAcG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;OAqBG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;;OAiBG;;;;;;;;;;;;;;CAEK,CAAC"}