ts-data-forge 1.0.0 → 1.0.1

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 +16 -14
@@ -0,0 +1,243 @@
1
+ import { TsVerifiedInternals } from '../refined-number-utils.mjs';
2
+ /**
3
+ * Type guard that checks if a value is a safe integer.
4
+ *
5
+ * A safe integer is an integer that can be exactly represented in JavaScript
6
+ * without precision loss. The range is [±(2^53 - 1)].
7
+ *
8
+ * @param value - The value to check
9
+ * @returns `true` if the value is a safe integer, `false` otherwise
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * isSafeInt(42); // true
14
+ * isSafeInt(Number.MAX_SAFE_INTEGER); // true
15
+ * isSafeInt(Number.MAX_SAFE_INTEGER + 1); // false
16
+ * isSafeInt(3.14); // false
17
+ * isSafeInt(NaN); // false
18
+ * ```
19
+ */
20
+ export declare const isSafeInt: (a: number) => a is SafeInt;
21
+ /**
22
+ * Casts a number to a SafeInt branded type.
23
+ *
24
+ * This function validates that the input is a safe integer (within ±(2^53 - 1))
25
+ * and returns it with the SafeInt brand. This ensures type safety for operations
26
+ * that require precise integer arithmetic.
27
+ *
28
+ * @param value - The value to cast
29
+ * @returns The value as a SafeInt branded type
30
+ * @throws {TypeError} If the value is not a safe integer
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const x = asSafeInt(5); // SafeInt
35
+ * const y = asSafeInt(-1000); // SafeInt
36
+ * const z = asSafeInt(2**50); // SafeInt (within range)
37
+ *
38
+ * // These throw TypeError:
39
+ * // asSafeInt(1.5); // Not an integer
40
+ * // asSafeInt(Number.MAX_SAFE_INTEGER + 1); // Exceeds safe range
41
+ * // asSafeInt(2**53); // Loss of precision
42
+ * ```
43
+ */
44
+ export declare const asSafeInt: <N extends number>(x: N) => number & {
45
+ readonly NaNValue: false;
46
+ readonly Finite: true;
47
+ readonly Int: true;
48
+ readonly SafeInt: true;
49
+ } & Readonly<{
50
+ 'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
51
+ }> & N;
52
+ /**
53
+ * Namespace providing type-safe operations for SafeInt branded types.
54
+ *
55
+ * SafeInt represents integers that can be exactly represented in JavaScript's
56
+ * number type without precision loss. The range is [±(2^53 - 1)], which covers
57
+ * approximately ±9 quadrillion.
58
+ *
59
+ * All operations automatically clamp results to stay within the safe range,
60
+ * preventing precision loss that occurs with larger integers. This makes SafeInt
61
+ * ideal for:
62
+ * - Financial calculations requiring exact cents
63
+ * - Database IDs and counters
64
+ * - Array indices and sizes
65
+ * - Any integer arithmetic requiring precision guarantees
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * // Near the boundary
70
+ * const nearMax = asSafeInt(9007199254740990);
71
+ * const increment = asSafeInt(10);
72
+ *
73
+ * // Automatic clamping prevents precision loss
74
+ * const sum = SafeInt.add(nearMax, increment); // Clamped to MAX_SAFE_INTEGER
75
+ * const product = SafeInt.mul(nearMax, increment); // Clamped to MAX_SAFE_INTEGER
76
+ *
77
+ * // Safe operations
78
+ * const a = asSafeInt(1000000);
79
+ * const b = asSafeInt(500);
80
+ *
81
+ * const diff = SafeInt.sub(a, b); // SafeInt (999500)
82
+ * const quotient = SafeInt.div(a, b); // SafeInt (2000)
83
+ * const power = SafeInt.pow(b, asSafeInt(2)); // SafeInt (250000)
84
+ *
85
+ * // Utility operations
86
+ * const absolute = SafeInt.abs(asSafeInt(-42)); // SafeInt (42)
87
+ * const clamped = SafeInt.clamp(2**60); // SafeInt (MAX_SAFE_INTEGER)
88
+ *
89
+ * // Random generation
90
+ * const die = SafeInt.random(asSafeInt(1), asSafeInt(6)); // Random 1-6
91
+ * ```
92
+ */
93
+ export declare const SafeInt: {
94
+ /**
95
+ * Type guard that checks if a value is a safe integer.
96
+ *
97
+ * @param value - The value to check
98
+ * @returns `true` if the value is a safe integer, `false` otherwise
99
+ *
100
+ * @see {@link isSafeInt} for usage examples
101
+ */
102
+ readonly is: (a: number) => a is SafeInt;
103
+ /**
104
+ * The minimum safe integer value (-(2^53 - 1)).
105
+ * @readonly
106
+ */
107
+ readonly MIN_VALUE: SafeInt;
108
+ /**
109
+ * The maximum safe integer value (2^53 - 1).
110
+ * @readonly
111
+ */
112
+ readonly MAX_VALUE: SafeUint;
113
+ /**
114
+ * Returns the absolute value of a safe integer.
115
+ *
116
+ * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`,
117
+ * so this function clamps the result to maintain the safe integer guarantee.
118
+ *
119
+ * @param a - The safe integer value
120
+ * @returns The absolute value as a SafeInt, clamped if necessary
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * SafeInt.abs(asSafeInt(-42)); // SafeInt (42)
125
+ * SafeInt.abs(asSafeInt(42)); // SafeInt (42)
126
+ * SafeInt.abs(SafeInt.MIN_VALUE); // SafeInt (MAX_SAFE_INTEGER)
127
+ * ```
128
+ */
129
+ readonly abs: (x: WithSmallInt<SafeInt, 40>) => TsVerifiedInternals.RefinedNumberUtils.ToNonNegative<SafeInt>;
130
+ /**
131
+ * Returns the minimum value from a list of safe integers.
132
+ *
133
+ * @param values - The safe integers to compare (at least one required)
134
+ * @returns The smallest value as a SafeInt
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * SafeInt.min(asSafeInt(5), asSafeInt(3)); // SafeInt (3)
139
+ * SafeInt.min(asSafeInt(-10), asSafeInt(0), asSafeInt(10)); // SafeInt (-10)
140
+ * ```
141
+ */
142
+ readonly min: (...values: readonly WithSmallInt<SafeInt, 40>[]) => SafeInt;
143
+ /**
144
+ * Returns the maximum value from a list of safe integers.
145
+ *
146
+ * @param values - The safe integers to compare (at least one required)
147
+ * @returns The largest value as a SafeInt
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * SafeInt.max(asSafeInt(5), asSafeInt(3)); // SafeInt (5)
152
+ * SafeInt.max(asSafeInt(-10), asSafeInt(0), asSafeInt(10)); // SafeInt (10)
153
+ * ```
154
+ */
155
+ readonly max: (...values: readonly WithSmallInt<SafeInt, 40>[]) => SafeInt;
156
+ /**
157
+ * Clamps a number to the safe integer range.
158
+ * @param value The number to clamp.
159
+ * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a SafeInt.
160
+ */
161
+ readonly clamp: (x: number) => SafeInt;
162
+ /**
163
+ * Generates a random safe integer within the specified range (inclusive).
164
+ *
165
+ * The range is inclusive on both ends. If min > max, they are automatically swapped.
166
+ *
167
+ * @param min - The minimum value (inclusive)
168
+ * @param max - The maximum value (inclusive)
169
+ * @returns A random SafeInt in the range [min, max]
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * // Dice roll
174
+ * const d20 = SafeInt.random(asSafeInt(1), asSafeInt(20));
175
+ *
176
+ * // Random index for large array
177
+ * const index = SafeInt.random(asSafeInt(0), asSafeInt(1000000));
178
+ *
179
+ * // Can use full safe range
180
+ * const any = SafeInt.random(SafeInt.MIN_VALUE, SafeInt.MAX_VALUE);
181
+ * ```
182
+ */
183
+ readonly random: (min: WithSmallInt<SafeInt, 40>, max: WithSmallInt<SafeInt, 40>) => SafeInt;
184
+ /**
185
+ * Raises a SafeInt to the power of another SafeInt.
186
+ * @param a The base SafeInt.
187
+ * @param b The exponent SafeInt.
188
+ * @returns `a ** b` clamped to safe integer range as a SafeInt.
189
+ */
190
+ readonly pow: (x: WithSmallInt<SafeInt, 40>, y: WithSmallInt<SafeInt, 40>) => SafeInt;
191
+ /**
192
+ * Adds two SafeInt values.
193
+ * @param a The first SafeInt.
194
+ * @param b The second SafeInt.
195
+ * @returns `a + b` clamped to safe integer range as a SafeInt.
196
+ */
197
+ readonly add: (x: WithSmallInt<SafeInt, 40>, y: WithSmallInt<SafeInt, 40>) => SafeInt;
198
+ /**
199
+ * Subtracts one SafeInt from another.
200
+ * @param a The minuend SafeInt.
201
+ * @param b The subtrahend SafeInt.
202
+ * @returns `a - b` clamped to safe integer range as a SafeInt.
203
+ */
204
+ readonly sub: (x: WithSmallInt<SafeInt, 40>, y: WithSmallInt<SafeInt, 40>) => SafeInt;
205
+ /**
206
+ * Multiplies two SafeInt values.
207
+ * @param a The first SafeInt.
208
+ * @param b The second SafeInt.
209
+ * @returns `a * b` clamped to safe integer range as a SafeInt.
210
+ */
211
+ readonly mul: (x: WithSmallInt<SafeInt, 40>, y: WithSmallInt<SafeInt, 40>) => SafeInt;
212
+ /**
213
+ * Divides one SafeInt by another using floor division.
214
+ *
215
+ * Performs mathematical floor division: `⌊a / b⌋`.
216
+ * The divisor must be non-zero (enforced by type constraints).
217
+ *
218
+ * @param a - The dividend
219
+ * @param b - The divisor (must be non-zero)
220
+ * @returns The integer quotient as a SafeInt
221
+ *
222
+ * @example
223
+ * ```typescript
224
+ * SafeInt.div(asSafeInt(10), asSafeInt(3)); // SafeInt (3)
225
+ * SafeInt.div(asSafeInt(-10), asSafeInt(3)); // SafeInt (-4)
226
+ *
227
+ * // Large number division
228
+ * const large = asSafeInt(1000000000000);
229
+ * const divisor = asSafeInt(1000000);
230
+ * SafeInt.div(large, divisor); // SafeInt (1000000)
231
+ * ```
232
+ */
233
+ readonly div: (x: WithSmallInt<SafeInt, 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 | -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 | -40 | NormalizeBrandUnion<number & {
234
+ readonly NaNValue: false;
235
+ readonly "!=0": true;
236
+ readonly Finite: true;
237
+ readonly Int: true;
238
+ readonly SafeInt: true;
239
+ } & Readonly<{
240
+ 'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
241
+ }>>) => SafeInt;
242
+ };
243
+ //# sourceMappingURL=safe-int.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-int.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/safe-int.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAkClE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,6BAAK,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS;;;;;;;MAAW,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,OAAO;IAClB;;;;;;;OAOG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;;;;;;;;;;;;;OAeG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;;;;;OAoBG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;;;;;;;;;;;;;;;;OAoBG;;;;;;;;;;CAEK,CAAC"}
@@ -0,0 +1,240 @@
1
+ import { TsVerifiedInternals } from '../refined-number-utils.mjs';
2
+
3
+ const typeNameInMessage = 'a safe integer';
4
+ const { MIN_VALUE, MAX_VALUE, abs, min: min_, max: max_, pow, add, sub, mul, div, random, is, castType, clamp, } = TsVerifiedInternals.RefinedNumberUtils.operatorsForInteger({
5
+ integerOrSafeInteger: 'SafeInteger',
6
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
7
+ MIN_VALUE: Number.MIN_SAFE_INTEGER,
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
9
+ MAX_VALUE: Number.MAX_SAFE_INTEGER,
10
+ typeNameInMessage,
11
+ });
12
+ /**
13
+ * Type guard that checks if a value is a safe integer.
14
+ *
15
+ * A safe integer is an integer that can be exactly represented in JavaScript
16
+ * without precision loss. The range is [±(2^53 - 1)].
17
+ *
18
+ * @param value - The value to check
19
+ * @returns `true` if the value is a safe integer, `false` otherwise
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * isSafeInt(42); // true
24
+ * isSafeInt(Number.MAX_SAFE_INTEGER); // true
25
+ * isSafeInt(Number.MAX_SAFE_INTEGER + 1); // false
26
+ * isSafeInt(3.14); // false
27
+ * isSafeInt(NaN); // false
28
+ * ```
29
+ */
30
+ const isSafeInt = is;
31
+ /**
32
+ * Casts a number to a SafeInt branded type.
33
+ *
34
+ * This function validates that the input is a safe integer (within ±(2^53 - 1))
35
+ * and returns it with the SafeInt brand. This ensures type safety for operations
36
+ * that require precise integer arithmetic.
37
+ *
38
+ * @param value - The value to cast
39
+ * @returns The value as a SafeInt branded type
40
+ * @throws {TypeError} If the value is not a safe integer
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const x = asSafeInt(5); // SafeInt
45
+ * const y = asSafeInt(-1000); // SafeInt
46
+ * const z = asSafeInt(2**50); // SafeInt (within range)
47
+ *
48
+ * // These throw TypeError:
49
+ * // asSafeInt(1.5); // Not an integer
50
+ * // asSafeInt(Number.MAX_SAFE_INTEGER + 1); // Exceeds safe range
51
+ * // asSafeInt(2**53); // Loss of precision
52
+ * ```
53
+ */
54
+ const asSafeInt = castType;
55
+ /**
56
+ * Namespace providing type-safe operations for SafeInt branded types.
57
+ *
58
+ * SafeInt represents integers that can be exactly represented in JavaScript's
59
+ * number type without precision loss. The range is [±(2^53 - 1)], which covers
60
+ * approximately ±9 quadrillion.
61
+ *
62
+ * All operations automatically clamp results to stay within the safe range,
63
+ * preventing precision loss that occurs with larger integers. This makes SafeInt
64
+ * ideal for:
65
+ * - Financial calculations requiring exact cents
66
+ * - Database IDs and counters
67
+ * - Array indices and sizes
68
+ * - Any integer arithmetic requiring precision guarantees
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * // Near the boundary
73
+ * const nearMax = asSafeInt(9007199254740990);
74
+ * const increment = asSafeInt(10);
75
+ *
76
+ * // Automatic clamping prevents precision loss
77
+ * const sum = SafeInt.add(nearMax, increment); // Clamped to MAX_SAFE_INTEGER
78
+ * const product = SafeInt.mul(nearMax, increment); // Clamped to MAX_SAFE_INTEGER
79
+ *
80
+ * // Safe operations
81
+ * const a = asSafeInt(1000000);
82
+ * const b = asSafeInt(500);
83
+ *
84
+ * const diff = SafeInt.sub(a, b); // SafeInt (999500)
85
+ * const quotient = SafeInt.div(a, b); // SafeInt (2000)
86
+ * const power = SafeInt.pow(b, asSafeInt(2)); // SafeInt (250000)
87
+ *
88
+ * // Utility operations
89
+ * const absolute = SafeInt.abs(asSafeInt(-42)); // SafeInt (42)
90
+ * const clamped = SafeInt.clamp(2**60); // SafeInt (MAX_SAFE_INTEGER)
91
+ *
92
+ * // Random generation
93
+ * const die = SafeInt.random(asSafeInt(1), asSafeInt(6)); // Random 1-6
94
+ * ```
95
+ */
96
+ const SafeInt = {
97
+ /**
98
+ * Type guard that checks if a value is a safe integer.
99
+ *
100
+ * @param value - The value to check
101
+ * @returns `true` if the value is a safe integer, `false` otherwise
102
+ *
103
+ * @see {@link isSafeInt} for usage examples
104
+ */
105
+ is,
106
+ /**
107
+ * The minimum safe integer value (-(2^53 - 1)).
108
+ * @readonly
109
+ */
110
+ MIN_VALUE,
111
+ /**
112
+ * The maximum safe integer value (2^53 - 1).
113
+ * @readonly
114
+ */
115
+ MAX_VALUE,
116
+ /**
117
+ * Returns the absolute value of a safe integer.
118
+ *
119
+ * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`,
120
+ * so this function clamps the result to maintain the safe integer guarantee.
121
+ *
122
+ * @param a - The safe integer value
123
+ * @returns The absolute value as a SafeInt, clamped if necessary
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * SafeInt.abs(asSafeInt(-42)); // SafeInt (42)
128
+ * SafeInt.abs(asSafeInt(42)); // SafeInt (42)
129
+ * SafeInt.abs(SafeInt.MIN_VALUE); // SafeInt (MAX_SAFE_INTEGER)
130
+ * ```
131
+ */
132
+ abs,
133
+ /**
134
+ * Returns the minimum value from a list of safe integers.
135
+ *
136
+ * @param values - The safe integers to compare (at least one required)
137
+ * @returns The smallest value as a SafeInt
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * SafeInt.min(asSafeInt(5), asSafeInt(3)); // SafeInt (3)
142
+ * SafeInt.min(asSafeInt(-10), asSafeInt(0), asSafeInt(10)); // SafeInt (-10)
143
+ * ```
144
+ */
145
+ min: min_,
146
+ /**
147
+ * Returns the maximum value from a list of safe integers.
148
+ *
149
+ * @param values - The safe integers to compare (at least one required)
150
+ * @returns The largest value as a SafeInt
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * SafeInt.max(asSafeInt(5), asSafeInt(3)); // SafeInt (5)
155
+ * SafeInt.max(asSafeInt(-10), asSafeInt(0), asSafeInt(10)); // SafeInt (10)
156
+ * ```
157
+ */
158
+ max: max_,
159
+ /**
160
+ * Clamps a number to the safe integer range.
161
+ * @param value The number to clamp.
162
+ * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a SafeInt.
163
+ */
164
+ clamp,
165
+ /**
166
+ * Generates a random safe integer within the specified range (inclusive).
167
+ *
168
+ * The range is inclusive on both ends. If min > max, they are automatically swapped.
169
+ *
170
+ * @param min - The minimum value (inclusive)
171
+ * @param max - The maximum value (inclusive)
172
+ * @returns A random SafeInt in the range [min, max]
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * // Dice roll
177
+ * const d20 = SafeInt.random(asSafeInt(1), asSafeInt(20));
178
+ *
179
+ * // Random index for large array
180
+ * const index = SafeInt.random(asSafeInt(0), asSafeInt(1000000));
181
+ *
182
+ * // Can use full safe range
183
+ * const any = SafeInt.random(SafeInt.MIN_VALUE, SafeInt.MAX_VALUE);
184
+ * ```
185
+ */
186
+ random,
187
+ /**
188
+ * Raises a SafeInt to the power of another SafeInt.
189
+ * @param a The base SafeInt.
190
+ * @param b The exponent SafeInt.
191
+ * @returns `a ** b` clamped to safe integer range as a SafeInt.
192
+ */
193
+ pow,
194
+ /**
195
+ * Adds two SafeInt values.
196
+ * @param a The first SafeInt.
197
+ * @param b The second SafeInt.
198
+ * @returns `a + b` clamped to safe integer range as a SafeInt.
199
+ */
200
+ add,
201
+ /**
202
+ * Subtracts one SafeInt from another.
203
+ * @param a The minuend SafeInt.
204
+ * @param b The subtrahend SafeInt.
205
+ * @returns `a - b` clamped to safe integer range as a SafeInt.
206
+ */
207
+ sub,
208
+ /**
209
+ * Multiplies two SafeInt values.
210
+ * @param a The first SafeInt.
211
+ * @param b The second SafeInt.
212
+ * @returns `a * b` clamped to safe integer range as a SafeInt.
213
+ */
214
+ mul,
215
+ /**
216
+ * Divides one SafeInt by another using floor division.
217
+ *
218
+ * Performs mathematical floor division: `⌊a / b⌋`.
219
+ * The divisor must be non-zero (enforced by type constraints).
220
+ *
221
+ * @param a - The dividend
222
+ * @param b - The divisor (must be non-zero)
223
+ * @returns The integer quotient as a SafeInt
224
+ *
225
+ * @example
226
+ * ```typescript
227
+ * SafeInt.div(asSafeInt(10), asSafeInt(3)); // SafeInt (3)
228
+ * SafeInt.div(asSafeInt(-10), asSafeInt(3)); // SafeInt (-4)
229
+ *
230
+ * // Large number division
231
+ * const large = asSafeInt(1000000000000);
232
+ * const divisor = asSafeInt(1000000);
233
+ * SafeInt.div(large, divisor); // SafeInt (1000000)
234
+ * ```
235
+ */
236
+ div,
237
+ };
238
+
239
+ export { SafeInt, asSafeInt, isSafeInt };
240
+ //# sourceMappingURL=safe-int.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-int.mjs","sources":["../../../src/number/branded-types/safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA,MAAM,iBAAiB,GAAG,gBAAgB;AAE1C,MAAM,EACJ,SAAS,EACT,SAAS,EACT,GAAG,EACH,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,mBAAmB,CAI5D;AACA,IAAA,oBAAoB,EAAE,aAAa;;IAEnC,SAAS,EAAE,MAAM,CAAC,gBAA2B;;IAE7C,SAAS,EAAE,MAAM,CAAC,gBAA4B;IAC9C,iBAAiB;AACT,CAAA,CAAC;AAEX;;;;;;;;;;;;;;;;;AAiBG;AACI,MAAM,SAAS,GAAG;AAEzB;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI,MAAM,SAAS,GAAG;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCG;AACI,MAAM,OAAO,GAAG;AACrB;;;;;;;AAOG;IACH,EAAE;AAEF;;;AAGG;IACH,SAAS;AAET;;;AAGG;IACH,SAAS;AAET;;;;;;;;;;;;;;;AAeG;IACH,GAAG;AAEH;;;;;;;;;;;AAWG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;;;;;;;;AAWG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;AAIG;IACH,KAAK;AAEL;;;;;;;;;;;;;;;;;;;;AAoBG;IACH,MAAM;AAEN;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;;;;;;;;;;;;;;;;AAoBG;IACH,GAAG;;;;;"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Checks if a number is a SafeUint.
3
+ * @param value The value to check.
4
+ * @returns `true` if the value is a SafeUint, `false` otherwise.
5
+ */
6
+ export declare const isSafeUint: (a: number) => a is SafeUint;
7
+ /**
8
+ * Casts a number to a SafeUint type.
9
+ * @param value The value to cast.
10
+ * @returns The value as a SafeUint type.
11
+ * @throws {TypeError} If the value is not a non-negative safe integer.
12
+ * @example
13
+ * ```typescript
14
+ * const x = asSafeUint(5); // SafeUint
15
+ * const y = asSafeUint(0); // SafeUint
16
+ * // asSafeUint(-1); // throws TypeError
17
+ * // asSafeUint(1.5); // throws TypeError
18
+ * ```
19
+ */
20
+ export declare const asSafeUint: <N extends number>(x: N) => number & {
21
+ readonly NaNValue: false;
22
+ readonly "> -2^16": true;
23
+ readonly "> -2^32": true;
24
+ readonly ">= -2^15": true;
25
+ readonly ">= -2^31": true;
26
+ readonly ">=0": true;
27
+ readonly Finite: true;
28
+ readonly Int: true;
29
+ readonly SafeInt: true;
30
+ } & Readonly<{
31
+ 'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
32
+ }> & N;
33
+ /**
34
+ * Namespace providing type-safe arithmetic operations for safe unsigned integers.
35
+ *
36
+ * All operations automatically clamp results to the safe unsigned integer range [0, MAX_SAFE_INTEGER].
37
+ * This ensures that all arithmetic maintains both the non-negative constraint and IEEE 754 precision guarantees,
38
+ * preventing precision loss while ensuring results are never negative.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const a = asSafeUint(9007199254740000); // Near MAX_SAFE_INTEGER
43
+ * const b = asSafeUint(1000);
44
+ *
45
+ * // Arithmetic operations with safe unsigned range clamping
46
+ * const sum = SafeUint.add(a, b); // SafeUint (clamped to MAX_SAFE_INTEGER)
47
+ * const diff = SafeUint.sub(b, a); // SafeUint (0 - clamped to MIN_VALUE)
48
+ * const product = SafeUint.mul(a, b); // SafeUint (clamped to MAX_SAFE_INTEGER)
49
+ *
50
+ * // Range operations
51
+ * const clamped = SafeUint.clamp(-100); // SafeUint (0)
52
+ * const minimum = SafeUint.min(a, b); // SafeUint (1000)
53
+ * const maximum = SafeUint.max(a, b); // SafeUint (a)
54
+ *
55
+ * // Utility operations
56
+ * const random = SafeUint.random(); // SafeUint (random safe unsigned integer)
57
+ * const power = SafeUint.pow(asSafeUint(2), asSafeUint(20)); // SafeUint (1048576)
58
+ * ```
59
+ */
60
+ export declare const SafeUint: {
61
+ /**
62
+ * Type guard to check if a value is a SafeUint.
63
+ * @param value The value to check.
64
+ * @returns `true` if the value is a non-negative safe integer, `false` otherwise.
65
+ */
66
+ readonly is: (a: number) => a is SafeUint;
67
+ /**
68
+ * The minimum value for a safe unsigned integer.
69
+ * @readonly
70
+ */
71
+ readonly MIN_VALUE: 0;
72
+ /**
73
+ * The maximum safe integer value (2^53 - 1).
74
+ * @readonly
75
+ */
76
+ readonly MAX_VALUE: SafeUint;
77
+ /**
78
+ * Returns the smaller of two SafeUint values.
79
+ * @param a The first SafeUint.
80
+ * @param b The second SafeUint.
81
+ * @returns The minimum value as a SafeUint.
82
+ */
83
+ readonly min: (...values: readonly WithSmallInt<SafeUint, 40>[]) => SafeUint;
84
+ /**
85
+ * Returns the larger of two SafeUint values.
86
+ * @param a The first SafeUint.
87
+ * @param b The second SafeUint.
88
+ * @returns The maximum value as a SafeUint.
89
+ */
90
+ readonly max: (...values: readonly WithSmallInt<SafeUint, 40>[]) => SafeUint;
91
+ /**
92
+ * Clamps a number to the safe unsigned integer range.
93
+ * @param value The number to clamp.
94
+ * @returns The value clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
95
+ */
96
+ readonly clamp: (x: number) => SafeUint;
97
+ /**
98
+ * Generates a random SafeUint value within the valid range.
99
+ * @returns A random SafeUint between 0 and MAX_SAFE_INTEGER.
100
+ */
101
+ readonly random: (min: WithSmallInt<SafeUint, 40>, max: WithSmallInt<SafeUint, 40>) => SafeUint;
102
+ /**
103
+ * Raises a SafeUint to the power of another SafeUint.
104
+ * @param a The base SafeUint.
105
+ * @param b The exponent SafeUint.
106
+ * @returns `a ** b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
107
+ */
108
+ readonly pow: (x: WithSmallInt<SafeUint, 40>, y: WithSmallInt<SafeUint, 40>) => SafeUint;
109
+ /**
110
+ * Adds two SafeUint values.
111
+ * @param a The first SafeUint.
112
+ * @param b The second SafeUint.
113
+ * @returns `a + b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
114
+ */
115
+ readonly add: (x: WithSmallInt<SafeUint, 40>, y: WithSmallInt<SafeUint, 40>) => SafeUint;
116
+ /**
117
+ * Subtracts one SafeUint from another.
118
+ * @param a The minuend SafeUint.
119
+ * @param b The subtrahend SafeUint.
120
+ * @returns `a - b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint (minimum 0).
121
+ */
122
+ readonly sub: (x: WithSmallInt<SafeUint, 40>, y: WithSmallInt<SafeUint, 40>) => SafeUint;
123
+ /**
124
+ * Multiplies two SafeUint values.
125
+ * @param a The first SafeUint.
126
+ * @param b The second SafeUint.
127
+ * @returns `a * b` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
128
+ */
129
+ readonly mul: (x: WithSmallInt<SafeUint, 40>, y: WithSmallInt<SafeUint, 40>) => SafeUint;
130
+ /**
131
+ * Divides one SafeUint by another using floor division.
132
+ * @param a The dividend SafeUint.
133
+ * @param b The divisor SafeUint.
134
+ * @returns `⌊a / b⌋` clamped to [0, MAX_SAFE_INTEGER] as a SafeUint.
135
+ */
136
+ readonly div: (x: WithSmallInt<SafeUint, 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 & {
137
+ readonly NaNValue: false;
138
+ readonly "!=0": true;
139
+ readonly "> -2^16": true;
140
+ readonly "> -2^32": true;
141
+ readonly ">= -2^15": true;
142
+ readonly ">= -2^31": true;
143
+ readonly ">=0": true;
144
+ readonly Finite: true;
145
+ readonly Int: true;
146
+ readonly SafeInt: true;
147
+ } & Readonly<{
148
+ 'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
149
+ }>>) => SafeUint;
150
+ };
151
+ //# sourceMappingURL=safe-uint.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-uint.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/safe-uint.mts"],"names":[],"mappings":"AAiCA;;;;GAIG;AACH,eAAO,MAAM,UAAU,8BAAK,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;MAAW,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,QAAQ;IACnB;;;;OAIG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;OAIG;;IAGH;;;OAGG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;;;;;;;;;;;;;;CAEK,CAAC"}