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,191 @@
1
+ /** @internal */
2
+ export declare namespace TsVerifiedInternals {
3
+ /**
4
+ * Internal utilities for creating and managing refined (branded) number types.
5
+ *
6
+ * This namespace provides factory functions and type utilities for building
7
+ * type-safe numeric operations with compile-time constraints. It serves as
8
+ * the foundation for all branded number types in the library, including:
9
+ * - Integer types (Int, SafeInt, Int8, Int16, Int32)
10
+ * - Unsigned types (UInt, UInt8, UInt16, UInt32)
11
+ * - Constrained types (NonZero, NonNegative, Positive)
12
+ * - Range-bounded types
13
+ *
14
+ * The utilities handle:
15
+ * - Type validation and narrowing
16
+ * - Arithmetic operations that preserve type constraints
17
+ * - Automatic clamping for bounded types
18
+ * - Random number generation within type bounds
19
+ *
20
+ * @internal This namespace is not part of the public API
21
+ */
22
+ namespace RefinedNumberUtils {
23
+ type UnknownNumberBrand = ChangeBaseBrand<UnknownBrand, number>;
24
+ /**
25
+ * Converts a branded number type to include the Int brand.
26
+ * @template N - A branded number type
27
+ * @internal
28
+ */
29
+ export type ToInt<N extends UnknownNumberBrand> = IntersectBrand<N, Int>;
30
+ type ToNonZero<N extends UnknownNumberBrand> = IntersectBrand<N, NonZeroNumber>;
31
+ type ToNonZeroIntWithSmallInt<N extends Int> = WithSmallInt<CastToInt<ToNonZero<N>>>;
32
+ /**
33
+ * Converts a branded number type to include the NonNegativeNumber brand.
34
+ * @template N - A branded number type
35
+ * @internal
36
+ */
37
+ export type ToNonNegative<N extends UnknownNumberBrand> = IntersectBrand<N, NonNegativeNumber>;
38
+ /**
39
+ * Removes the non-zero brand constraint from a branded number type.
40
+ * Used when operations may produce zero values.
41
+ * @template N - A branded number type
42
+ * @internal
43
+ */
44
+ export type RemoveNonZeroBrandKey<N extends UnknownNumberBrand> = Brand<GetBrandValuePart<N>, RelaxedExclude<UnwrapBrandTrueKeys<N>, '!=0'> & string, UnwrapBrandFalseKeys<N> & string>;
45
+ type CastToInt<N> = N extends Int ? N : never;
46
+ /**
47
+ * Generates a type-safe API for a branded number type based on its characteristics.
48
+ *
49
+ * This type dynamically constructs an object type with appropriate methods based
50
+ * on the number class. For example:
51
+ * - Integer types don't get floor/ceil/round methods
52
+ * - Non-negative types don't get abs method
53
+ * - Range-bounded types get MIN_VALUE/MAX_VALUE constants
54
+ *
55
+ * @template N - The branded number type
56
+ * @template classes - Union of characteristics: 'int' | 'non-negative' | 'positive' | 'range'
57
+ * @internal
58
+ */
59
+ export type NumberClass<N extends UnknownNumberBrand, classes extends 'int' | 'non-negative' | 'positive' | 'range'> = ('int' extends classes ? unknown : 'positive' extends classes ? Readonly<{
60
+ floor: (x: N, y: N) => RemoveNonZeroBrandKey<ToInt<N>>;
61
+ ceil: (x: N, y: N) => ToInt<N>;
62
+ round: (x: N, y: N) => RemoveNonZeroBrandKey<ToInt<N>>;
63
+ }> : Readonly<{
64
+ floor: (x: N, y: N) => ToInt<N>;
65
+ ceil: (x: N, y: N) => ToInt<N>;
66
+ round: (x: N, y: N) => ToInt<N>;
67
+ }>) & ('non-negative' extends classes ? Readonly<{
68
+ MIN_VALUE: number;
69
+ clamp: (a: number) => N;
70
+ }> : unknown) & ('non-negative' extends classes ? unknown : 'positive' extends classes ? unknown : Readonly<{
71
+ abs: (x: N) => ToNonNegative<N>;
72
+ }>) & ('positive' extends classes ? Readonly<{
73
+ MIN_VALUE: number;
74
+ clamp: (a: number) => N;
75
+ }> : unknown) & ('range' extends classes ? Readonly<{
76
+ MIN_VALUE: number;
77
+ MAX_VALUE: number;
78
+ clamp: (a: number) => N;
79
+ }> : unknown) & Readonly<{
80
+ is: (a: number) => a is N;
81
+ min: (...values: readonly N[]) => N;
82
+ max: (...values: readonly N[]) => N;
83
+ random: (min: N, max: N) => N;
84
+ pow: (x: N, y: N) => N;
85
+ add: (x: N, y: N) => N;
86
+ sub: (x: N, y: N) => N;
87
+ mul: (x: N, y: N) => N;
88
+ div: (x: N, y: ToNonZero<N>) => N;
89
+ }>;
90
+ type OperatorsForInteger<ElementType extends Int, MIN_VALUE extends number | undefined, MAX_VALUE extends number | undefined, ElementTypeWithSmallInt extends WithSmallInt<ElementType> = WithSmallInt<ElementType>> = Readonly<{
91
+ MIN_VALUE: MIN_VALUE;
92
+ MAX_VALUE: MAX_VALUE;
93
+ is: (a: number) => a is ElementType;
94
+ abs: (x: ElementTypeWithSmallInt) => ToNonNegative<ElementType>;
95
+ min: (...values: readonly ElementTypeWithSmallInt[]) => ElementType;
96
+ max: (...values: readonly ElementTypeWithSmallInt[]) => ElementType;
97
+ pow: (x: ElementTypeWithSmallInt, y: ElementTypeWithSmallInt) => ElementType;
98
+ add: (x: ElementTypeWithSmallInt, y: ElementTypeWithSmallInt) => ElementType;
99
+ sub: (x: ElementTypeWithSmallInt, y: ElementTypeWithSmallInt) => ElementType;
100
+ mul: (x: ElementTypeWithSmallInt, y: ElementTypeWithSmallInt) => ElementType;
101
+ div: (x: ElementTypeWithSmallInt, y: ToNonZeroIntWithSmallInt<ElementType>) => ElementType;
102
+ random: (min: ElementTypeWithSmallInt, max: ElementTypeWithSmallInt) => ElementType;
103
+ randomNonZero: (min: ElementTypeWithSmallInt, max: ElementTypeWithSmallInt) => ElementType;
104
+ castType: <N extends number>(x: N) => ElementType & N;
105
+ clamp: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true ? undefined : (x: number) => ElementType;
106
+ }>;
107
+ /**
108
+ * Factory function that creates a complete set of type-safe operations for integer types.
109
+ *
110
+ * This function generates:
111
+ * - Type guards and validators
112
+ * - Arithmetic operations that preserve type constraints
113
+ * - Utility functions (min, max, abs, random)
114
+ * - Automatic clamping for bounded types
115
+ *
116
+ * All operations ensure results remain within the type's constraints,
117
+ * using clamping when bounds are specified.
118
+ *
119
+ * @template ElementType - The integer branded type
120
+ * @template MIN_VALUE - Optional minimum value for bounded types
121
+ * @template MAX_VALUE - Optional maximum value for bounded types
122
+ *
123
+ * @param config - Configuration object
124
+ * @param config.integerOrSafeInteger - Whether to use Number.isInteger or Number.isSafeInteger
125
+ * @param config.nonZero - If true, excludes zero from valid values
126
+ * @param config.MIN_VALUE - Minimum valid value (inclusive)
127
+ * @param config.MAX_VALUE - Maximum valid value (inclusive)
128
+ * @param config.typeNameInMessage - Human-readable type name for error messages
129
+ *
130
+ * @returns Object containing all type-safe operations for the integer type
131
+ * @internal
132
+ */
133
+ export const operatorsForInteger: <ElementType extends Int, MIN_VALUE extends number | undefined, MAX_VALUE extends number | undefined>({ integerOrSafeInteger, nonZero, MIN_VALUE, MAX_VALUE, typeNameInMessage, }: Readonly<{
134
+ integerOrSafeInteger: "Integer" | "SafeInteger";
135
+ nonZero?: boolean;
136
+ MIN_VALUE: MIN_VALUE;
137
+ MAX_VALUE: MAX_VALUE;
138
+ typeNameInMessage: string;
139
+ }>) => OperatorsForInteger<ElementType, MIN_VALUE, MAX_VALUE>;
140
+ type OperatorsForFloat<ElementType extends UnknownNumberBrand, MIN_VALUE extends number | undefined, MAX_VALUE extends number | undefined> = Readonly<{
141
+ MIN_VALUE: MIN_VALUE;
142
+ MAX_VALUE: MAX_VALUE;
143
+ is: (a: number) => a is ElementType;
144
+ abs: (x: ElementType) => ToNonNegative<ElementType>;
145
+ min: (...values: readonly ElementType[]) => ElementType;
146
+ max: (...values: readonly ElementType[]) => ElementType;
147
+ pow: (x: ElementType, y: ElementType) => ElementType;
148
+ add: (x: ElementType, y: ElementType) => ElementType;
149
+ sub: (x: ElementType, y: ElementType) => ElementType;
150
+ mul: (x: ElementType, y: ElementType) => ElementType;
151
+ div: (x: ElementType, y: ToNonZero<ElementType>) => ElementType;
152
+ random: (min: ElementType, max: ElementType) => ElementType;
153
+ randomNonZero: (min: ElementType, max: ElementType) => ElementType;
154
+ castType: <N extends number>(x: N) => ElementType & N;
155
+ clamp: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true ? undefined : (x: number) => ElementType;
156
+ }>;
157
+ /**
158
+ * Factory function that creates a complete set of type-safe operations for floating-point types.
159
+ *
160
+ * This function generates:
161
+ * - Type guards and validators (checking for finite values)
162
+ * - Arithmetic operations that preserve type constraints
163
+ * - Utility functions (min, max, abs, random)
164
+ * - Automatic clamping for bounded types
165
+ *
166
+ * All operations ensure results remain finite and within any specified bounds.
167
+ * Division by zero is prevented through type constraints.
168
+ *
169
+ * @template ElementType - The floating-point branded type
170
+ * @template MIN_VALUE - Optional minimum value for bounded types
171
+ * @template MAX_VALUE - Optional maximum value for bounded types
172
+ *
173
+ * @param config - Configuration object
174
+ * @param config.nonZero - If true, excludes zero from valid values
175
+ * @param config.MIN_VALUE - Minimum valid value (inclusive)
176
+ * @param config.MAX_VALUE - Maximum valid value (inclusive)
177
+ * @param config.typeNameInMessage - Human-readable type name for error messages
178
+ *
179
+ * @returns Object containing all type-safe operations for the floating-point type
180
+ * @internal
181
+ */
182
+ export const operatorsForFloat: <ElementType extends UnknownNumberBrand, MIN_VALUE extends number | undefined, MAX_VALUE extends number | undefined>({ nonZero, MIN_VALUE, MAX_VALUE, typeNameInMessage, }: Readonly<{
183
+ nonZero?: boolean;
184
+ MIN_VALUE: MIN_VALUE;
185
+ MAX_VALUE: MAX_VALUE;
186
+ typeNameInMessage: string;
187
+ }>) => OperatorsForFloat<ElementType, MIN_VALUE, MAX_VALUE>;
188
+ export {};
189
+ }
190
+ }
191
+ //# sourceMappingURL=refined-number-utils.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refined-number-utils.d.mts","sourceRoot":"","sources":["../../src/number/refined-number-utils.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ import '../functional/optional.mjs';
2
+ import { pipe } from '../functional/pipe.mjs';
3
+ import '../functional/result.mjs';
4
+ import { Num } from './num.mjs';
5
+
6
+ /** @internal */
7
+ var TsVerifiedInternals;
8
+ (function (TsVerifiedInternals) {
9
+ (function (RefinedNumberUtils) {
10
+ const castTypeImpl = (is, typeNameInErrorMessage) => (a) => {
11
+ if (!is(a)) {
12
+ throw new TypeError(`Expected ${typeNameInErrorMessage}, got: ${a}`);
13
+ }
14
+ return a;
15
+ };
16
+ const isNonZero = (n) => n !== 0;
17
+ const isFnOrUndefined = (min, max) => min === undefined
18
+ ? max === undefined
19
+ ? undefined
20
+ : (n) => n <= max
21
+ : max === undefined
22
+ ? (n) => min <= n
23
+ : Num.isInRangeInclusive(min, max);
24
+ const clampFnOrUndefined = (min, max) => min === undefined
25
+ ? max === undefined
26
+ ? undefined
27
+ : (n) => Math.min(max, n)
28
+ : max === undefined
29
+ ? (n) => Math.max(min, n)
30
+ : Num.clamp(min, max);
31
+ /**
32
+ * Factory function that creates a complete set of type-safe operations for integer types.
33
+ *
34
+ * This function generates:
35
+ * - Type guards and validators
36
+ * - Arithmetic operations that preserve type constraints
37
+ * - Utility functions (min, max, abs, random)
38
+ * - Automatic clamping for bounded types
39
+ *
40
+ * All operations ensure results remain within the type's constraints,
41
+ * using clamping when bounds are specified.
42
+ *
43
+ * @template ElementType - The integer branded type
44
+ * @template MIN_VALUE - Optional minimum value for bounded types
45
+ * @template MAX_VALUE - Optional maximum value for bounded types
46
+ *
47
+ * @param config - Configuration object
48
+ * @param config.integerOrSafeInteger - Whether to use Number.isInteger or Number.isSafeInteger
49
+ * @param config.nonZero - If true, excludes zero from valid values
50
+ * @param config.MIN_VALUE - Minimum valid value (inclusive)
51
+ * @param config.MAX_VALUE - Maximum valid value (inclusive)
52
+ * @param config.typeNameInMessage - Human-readable type name for error messages
53
+ *
54
+ * @returns Object containing all type-safe operations for the integer type
55
+ * @internal
56
+ */
57
+ RefinedNumberUtils.operatorsForInteger = ({ integerOrSafeInteger, nonZero, MIN_VALUE, MAX_VALUE, typeNameInMessage, }) => {
58
+ const is = (a) => (integerOrSafeInteger === 'Integer'
59
+ ? Number.isInteger(a)
60
+ : Number.isSafeInteger(a)) &&
61
+ (nonZero === true ? a !== 0 : true) &&
62
+ (isFnOrUndefined(MIN_VALUE, MAX_VALUE)?.(a) ?? true);
63
+ const castType = castTypeImpl(is, typeNameInMessage);
64
+ const clamp = pipe(clampFnOrUndefined(MIN_VALUE, MAX_VALUE)).mapNullable((cl) => (x) => castType(Math.round(cl(x)))).value;
65
+ const clampOrCastFn = clamp ?? castType;
66
+ const abs = (x) =>
67
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
68
+ Math.abs(clampOrCastFn(x));
69
+ const min_ = (...values) => clampOrCastFn(Math.min(...values));
70
+ const max_ = (...values) => clampOrCastFn(Math.max(...values));
71
+ const pow = (x, y) => clampOrCastFn(x ** y);
72
+ const add = (x, y) => clampOrCastFn(x + y);
73
+ const sub = (x, y) => clampOrCastFn(x - y);
74
+ const mul = (x, y) => clampOrCastFn(x * y);
75
+ const div = (x, y) => clampOrCastFn(Math.floor(x / y));
76
+ const randomImpl = (min, max) => min + Math.floor((Math.max(max, min) - min + 1) * Math.random());
77
+ // [-5, 5] -> floor(11 * Math.random()) + (-5)
78
+ const random = (min, max) => clampOrCastFn(randomImpl(min, max));
79
+ const randomNonZero = (min, max) => {
80
+ while (true) {
81
+ const r = randomImpl(min, max);
82
+ if (Num.isNonZero(r))
83
+ return clampOrCastFn(r);
84
+ }
85
+ };
86
+ return {
87
+ MIN_VALUE,
88
+ MAX_VALUE,
89
+ is,
90
+ abs,
91
+ min: min_,
92
+ max: max_,
93
+ pow,
94
+ add,
95
+ sub,
96
+ mul,
97
+ div,
98
+ random,
99
+ randomNonZero,
100
+ castType,
101
+ clamp:
102
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
103
+ clamp,
104
+ };
105
+ };
106
+ /**
107
+ * Factory function that creates a complete set of type-safe operations for floating-point types.
108
+ *
109
+ * This function generates:
110
+ * - Type guards and validators (checking for finite values)
111
+ * - Arithmetic operations that preserve type constraints
112
+ * - Utility functions (min, max, abs, random)
113
+ * - Automatic clamping for bounded types
114
+ *
115
+ * All operations ensure results remain finite and within any specified bounds.
116
+ * Division by zero is prevented through type constraints.
117
+ *
118
+ * @template ElementType - The floating-point branded type
119
+ * @template MIN_VALUE - Optional minimum value for bounded types
120
+ * @template MAX_VALUE - Optional maximum value for bounded types
121
+ *
122
+ * @param config - Configuration object
123
+ * @param config.nonZero - If true, excludes zero from valid values
124
+ * @param config.MIN_VALUE - Minimum valid value (inclusive)
125
+ * @param config.MAX_VALUE - Maximum valid value (inclusive)
126
+ * @param config.typeNameInMessage - Human-readable type name for error messages
127
+ *
128
+ * @returns Object containing all type-safe operations for the floating-point type
129
+ * @internal
130
+ */
131
+ RefinedNumberUtils.operatorsForFloat = ({ nonZero, MIN_VALUE, MAX_VALUE, typeNameInMessage, }) => {
132
+ const is = (a) => Number.isFinite(a) &&
133
+ (nonZero === true ? a !== 0 : true) &&
134
+ (isFnOrUndefined(MIN_VALUE, MAX_VALUE)?.(a) ?? true);
135
+ const castType = castTypeImpl(is, typeNameInMessage);
136
+ const clamp = pipe(clampFnOrUndefined(MIN_VALUE, MAX_VALUE)).mapNullable((cl) => (x) => castType(cl(x))).value;
137
+ const clampOrCastFn = clamp ?? castType;
138
+ const abs = (x) =>
139
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
140
+ Math.abs(x);
141
+ const min_ = (...values) => clampOrCastFn(Math.min(...values));
142
+ const max_ = (...values) => clampOrCastFn(Math.max(...values));
143
+ const pow = (x, y) => clampOrCastFn(x ** y);
144
+ const add = (x, y) => clampOrCastFn(x + y);
145
+ const sub = (x, y) => clampOrCastFn(x - y);
146
+ const mul = (x, y) => clampOrCastFn(x * y);
147
+ const div = (x, y) => clampOrCastFn(x / y);
148
+ const random = (min, max) => clampOrCastFn(min + (Math.max(max, min) - min) * Math.random());
149
+ const randomNonZero = (min, max) => {
150
+ while (true) {
151
+ const r = random(min, max);
152
+ if (isNonZero(r))
153
+ return r;
154
+ }
155
+ };
156
+ return {
157
+ MIN_VALUE,
158
+ MAX_VALUE,
159
+ is,
160
+ abs,
161
+ min: min_,
162
+ max: max_,
163
+ pow,
164
+ add,
165
+ sub,
166
+ mul,
167
+ div,
168
+ random,
169
+ randomNonZero,
170
+ castType,
171
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
172
+ clamp: clamp,
173
+ };
174
+ };
175
+ })(TsVerifiedInternals.RefinedNumberUtils || (TsVerifiedInternals.RefinedNumberUtils = {}));
176
+ })(TsVerifiedInternals || (TsVerifiedInternals = {}));
177
+
178
+ export { TsVerifiedInternals };
179
+ //# sourceMappingURL=refined-number-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refined-number-utils.mjs","sources":["../../src/number/refined-number-utils.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './object.mjs';
2
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/object/index.mts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Obj } from './object.mjs';
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}