ts-data-forge 3.3.0 → 3.3.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 (424) hide show
  1. package/README.md +37 -13
  2. package/dist/array/impl/array-utils-creation.d.mts +116 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
  4. package/dist/array/impl/array-utils-creation.mjs +110 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -0
  6. package/dist/array/impl/array-utils-element-access.d.mts +61 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
  8. package/dist/array/impl/array-utils-element-access.mjs +66 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
  10. package/dist/array/impl/array-utils-iterators.d.mts +59 -0
  11. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
  12. package/dist/array/impl/array-utils-iterators.mjs +104 -0
  13. package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
  14. package/dist/array/impl/array-utils-modification.d.mts +154 -0
  15. package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
  16. package/dist/array/impl/array-utils-modification.mjs +139 -0
  17. package/dist/array/impl/array-utils-modification.mjs.map +1 -0
  18. package/dist/array/impl/array-utils-reducing-value.d.mts +214 -0
  19. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
  20. package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +179 -0
  23. package/dist/array/impl/array-utils-search.d.mts.map +1 -0
  24. package/dist/array/impl/array-utils-search.mjs +153 -0
  25. package/dist/array/impl/array-utils-search.mjs.map +1 -0
  26. package/dist/array/impl/array-utils-set-op.d.mts +100 -0
  27. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
  28. package/dist/array/impl/array-utils-set-op.mjs +137 -0
  29. package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
  30. package/dist/array/impl/array-utils-size.d.mts +24 -0
  31. package/dist/array/impl/array-utils-size.d.mts.map +1 -0
  32. package/dist/array/impl/array-utils-size.mjs +28 -0
  33. package/dist/array/impl/array-utils-size.mjs.map +1 -0
  34. package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
  35. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
  36. package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
  37. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
  38. package/dist/array/impl/array-utils-slicing.d.mts +120 -0
  39. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
  40. package/dist/array/impl/array-utils-slicing.mjs +140 -0
  41. package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
  42. package/dist/array/impl/array-utils-transformation.d.mts +348 -0
  43. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
  44. package/dist/array/impl/array-utils-transformation.mjs +331 -0
  45. package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
  46. package/dist/array/impl/array-utils-validation.d.mts +149 -0
  47. package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
  48. package/dist/array/impl/array-utils-validation.mjs +166 -0
  49. package/dist/array/impl/array-utils-validation.mjs.map +1 -0
  50. package/dist/array/impl/index.d.mts +13 -0
  51. package/dist/array/impl/index.d.mts.map +1 -0
  52. package/dist/array/impl/index.mjs +13 -0
  53. package/dist/array/impl/index.mjs.map +1 -0
  54. package/dist/array/index.d.mts +1 -1
  55. package/dist/array/index.d.mts.map +1 -1
  56. package/dist/array/index.mjs +2 -1
  57. package/dist/array/index.mjs.map +1 -1
  58. package/dist/collections/imap-mapped.d.mts +83 -253
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +33 -164
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -163
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +74 -94
  65. package/dist/collections/imap.mjs.map +1 -1
  66. package/dist/collections/iset-mapped.d.mts +828 -345
  67. package/dist/collections/iset-mapped.d.mts.map +1 -1
  68. package/dist/collections/iset-mapped.mjs +200 -242
  69. package/dist/collections/iset-mapped.mjs.map +1 -1
  70. package/dist/collections/iset.d.mts +397 -205
  71. package/dist/collections/iset.d.mts.map +1 -1
  72. package/dist/collections/iset.mjs +102 -184
  73. package/dist/collections/iset.mjs.map +1 -1
  74. package/dist/collections/queue.d.mts +155 -135
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +55 -156
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -154
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +54 -203
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +1 -0
  83. package/dist/entry-point.d.mts.map +1 -1
  84. package/dist/entry-point.mjs +2 -1
  85. package/dist/entry-point.mjs.map +1 -1
  86. package/dist/expect-type.d.mts +43 -172
  87. package/dist/expect-type.d.mts.map +1 -1
  88. package/dist/expect-type.mjs +43 -172
  89. package/dist/expect-type.mjs.map +1 -1
  90. package/dist/functional/match.d.mts +35 -140
  91. package/dist/functional/match.d.mts.map +1 -1
  92. package/dist/functional/match.mjs.map +1 -1
  93. package/dist/functional/optional.d.mts +282 -160
  94. package/dist/functional/optional.d.mts.map +1 -1
  95. package/dist/functional/optional.mjs +131 -71
  96. package/dist/functional/optional.mjs.map +1 -1
  97. package/dist/functional/pipe.d.mts +59 -113
  98. package/dist/functional/pipe.d.mts.map +1 -1
  99. package/dist/functional/pipe.mjs.map +1 -1
  100. package/dist/functional/result.d.mts +433 -332
  101. package/dist/functional/result.d.mts.map +1 -1
  102. package/dist/functional/result.mjs +233 -239
  103. package/dist/functional/result.mjs.map +1 -1
  104. package/dist/globals.d.mts +12 -5
  105. package/dist/guard/has-key.d.mts +23 -74
  106. package/dist/guard/has-key.d.mts.map +1 -1
  107. package/dist/guard/has-key.mjs +23 -74
  108. package/dist/guard/has-key.mjs.map +1 -1
  109. package/dist/guard/is-non-empty-string.d.mts +20 -87
  110. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  111. package/dist/guard/is-non-empty-string.mjs +20 -87
  112. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  113. package/dist/guard/is-non-null-object.d.mts +14 -84
  114. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  115. package/dist/guard/is-non-null-object.mjs +14 -84
  116. package/dist/guard/is-non-null-object.mjs.map +1 -1
  117. package/dist/guard/is-primitive.d.mts +13 -126
  118. package/dist/guard/is-primitive.d.mts.map +1 -1
  119. package/dist/guard/is-primitive.mjs +13 -126
  120. package/dist/guard/is-primitive.mjs.map +1 -1
  121. package/dist/guard/is-record.d.mts +21 -132
  122. package/dist/guard/is-record.d.mts.map +1 -1
  123. package/dist/guard/is-record.mjs +21 -132
  124. package/dist/guard/is-record.mjs.map +1 -1
  125. package/dist/guard/is-type.d.mts +201 -238
  126. package/dist/guard/is-type.d.mts.map +1 -1
  127. package/dist/guard/is-type.mjs +201 -238
  128. package/dist/guard/is-type.mjs.map +1 -1
  129. package/dist/guard/key-is-in.d.mts +22 -139
  130. package/dist/guard/key-is-in.d.mts.map +1 -1
  131. package/dist/guard/key-is-in.mjs +22 -139
  132. package/dist/guard/key-is-in.mjs.map +1 -1
  133. package/dist/index.d.mts +0 -1
  134. package/dist/index.d.mts.map +1 -1
  135. package/dist/index.mjs +0 -1
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/iterator/range.d.mts +29 -62
  138. package/dist/iterator/range.d.mts.map +1 -1
  139. package/dist/iterator/range.mjs.map +1 -1
  140. package/dist/json/json.d.mts +191 -121
  141. package/dist/json/json.d.mts.map +1 -1
  142. package/dist/json/json.mjs +238 -136
  143. package/dist/json/json.mjs.map +1 -1
  144. package/dist/number/branded-types/finite-number.d.mts +24 -156
  145. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  146. package/dist/number/branded-types/finite-number.mjs +27 -159
  147. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  148. package/dist/number/branded-types/int.d.mts +122 -120
  149. package/dist/number/branded-types/int.d.mts.map +1 -1
  150. package/dist/number/branded-types/int.mjs +122 -120
  151. package/dist/number/branded-types/int.mjs.map +1 -1
  152. package/dist/number/branded-types/int16.d.mts +22 -30
  153. package/dist/number/branded-types/int16.d.mts.map +1 -1
  154. package/dist/number/branded-types/int16.mjs +22 -30
  155. package/dist/number/branded-types/int16.mjs.map +1 -1
  156. package/dist/number/branded-types/int32.d.mts +22 -31
  157. package/dist/number/branded-types/int32.d.mts.map +1 -1
  158. package/dist/number/branded-types/int32.mjs +22 -31
  159. package/dist/number/branded-types/int32.mjs.map +1 -1
  160. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  161. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  162. package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
  163. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  164. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  165. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  166. package/dist/number/branded-types/non-negative-int16.mjs +24 -34
  167. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  168. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  169. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  170. package/dist/number/branded-types/non-negative-int32.mjs +26 -35
  171. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  172. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  173. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  174. package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
  175. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  176. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  177. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  178. package/dist/number/branded-types/non-zero-int.mjs +15 -30
  179. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  180. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  181. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  182. package/dist/number/branded-types/non-zero-int16.mjs +27 -35
  183. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  184. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  185. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  186. package/dist/number/branded-types/non-zero-int32.mjs +29 -36
  187. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  188. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  189. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  190. package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
  191. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  192. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  193. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  194. package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
  195. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  196. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  197. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  198. package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
  199. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  200. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  201. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  202. package/dist/number/branded-types/positive-finite-number.mjs +29 -43
  203. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  204. package/dist/number/branded-types/positive-int.d.mts +133 -123
  205. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  206. package/dist/number/branded-types/positive-int.mjs +133 -123
  207. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  208. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  209. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  210. package/dist/number/branded-types/positive-int16.mjs +24 -35
  211. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  212. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  213. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  214. package/dist/number/branded-types/positive-int32.mjs +24 -35
  215. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  216. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  217. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  218. package/dist/number/branded-types/positive-safe-int.mjs +160 -34
  219. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  220. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  221. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  222. package/dist/number/branded-types/positive-uint16.mjs +24 -35
  223. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  224. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  225. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  226. package/dist/number/branded-types/positive-uint32.mjs +26 -36
  227. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  228. package/dist/number/branded-types/safe-int.d.mts +140 -99
  229. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  230. package/dist/number/branded-types/safe-int.mjs +142 -101
  231. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  232. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  233. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  234. package/dist/number/branded-types/safe-uint.mjs +25 -34
  235. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  236. package/dist/number/branded-types/uint.d.mts +121 -30
  237. package/dist/number/branded-types/uint.d.mts.map +1 -1
  238. package/dist/number/branded-types/uint.mjs +121 -30
  239. package/dist/number/branded-types/uint.mjs.map +1 -1
  240. package/dist/number/branded-types/uint16.d.mts +26 -34
  241. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  242. package/dist/number/branded-types/uint16.mjs +26 -34
  243. package/dist/number/branded-types/uint16.mjs.map +1 -1
  244. package/dist/number/branded-types/uint32.d.mts +26 -68
  245. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  246. package/dist/number/branded-types/uint32.mjs +26 -68
  247. package/dist/number/branded-types/uint32.mjs.map +1 -1
  248. package/dist/number/enum/int8.d.mts +37 -101
  249. package/dist/number/enum/int8.d.mts.map +1 -1
  250. package/dist/number/enum/int8.mjs +39 -170
  251. package/dist/number/enum/int8.mjs.map +1 -1
  252. package/dist/number/enum/uint8.d.mts +45 -55
  253. package/dist/number/enum/uint8.d.mts.map +1 -1
  254. package/dist/number/enum/uint8.mjs +46 -155
  255. package/dist/number/enum/uint8.mjs.map +1 -1
  256. package/dist/number/num.d.mts +145 -206
  257. package/dist/number/num.d.mts.map +1 -1
  258. package/dist/number/num.mjs +143 -199
  259. package/dist/number/num.mjs.map +1 -1
  260. package/dist/number/refined-number-utils.d.mts +97 -21
  261. package/dist/number/refined-number-utils.d.mts.map +1 -1
  262. package/dist/number/refined-number-utils.mjs +91 -20
  263. package/dist/number/refined-number-utils.mjs.map +1 -1
  264. package/dist/object/object.d.mts +126 -208
  265. package/dist/object/object.d.mts.map +1 -1
  266. package/dist/object/object.mjs +68 -102
  267. package/dist/object/object.mjs.map +1 -1
  268. package/dist/others/cast-mutable.d.mts +12 -88
  269. package/dist/others/cast-mutable.d.mts.map +1 -1
  270. package/dist/others/cast-mutable.mjs +13 -89
  271. package/dist/others/cast-mutable.mjs.map +1 -1
  272. package/dist/others/cast-readonly.d.mts +12 -168
  273. package/dist/others/cast-readonly.d.mts.map +1 -1
  274. package/dist/others/cast-readonly.mjs +13 -169
  275. package/dist/others/cast-readonly.mjs.map +1 -1
  276. package/dist/others/if-then.d.mts +6 -83
  277. package/dist/others/if-then.d.mts.map +1 -1
  278. package/dist/others/if-then.mjs +6 -83
  279. package/dist/others/if-then.mjs.map +1 -1
  280. package/dist/others/map-nullable.d.mts +12 -136
  281. package/dist/others/map-nullable.d.mts.map +1 -1
  282. package/dist/others/map-nullable.mjs.map +1 -1
  283. package/dist/others/memoize-function.d.mts +14 -157
  284. package/dist/others/memoize-function.d.mts.map +1 -1
  285. package/dist/others/memoize-function.mjs +14 -157
  286. package/dist/others/memoize-function.mjs.map +1 -1
  287. package/dist/others/tuple.d.mts +33 -151
  288. package/dist/others/tuple.d.mts.map +1 -1
  289. package/dist/others/tuple.mjs +33 -151
  290. package/dist/others/tuple.mjs.map +1 -1
  291. package/dist/others/unknown-to-string.d.mts +11 -125
  292. package/dist/others/unknown-to-string.d.mts.map +1 -1
  293. package/dist/others/unknown-to-string.mjs +12 -126
  294. package/dist/others/unknown-to-string.mjs.map +1 -1
  295. package/dist/promise/promise.d.mts +33 -20
  296. package/dist/promise/promise.d.mts.map +1 -1
  297. package/dist/promise/promise.mjs +34 -21
  298. package/dist/promise/promise.mjs.map +1 -1
  299. package/package.json +47 -39
  300. package/src/array/impl/array-utils-creation.mts +192 -0
  301. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  302. package/src/array/impl/array-utils-element-access.mts +115 -0
  303. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  304. package/src/array/impl/array-utils-iterators.mts +79 -0
  305. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  306. package/src/array/impl/array-utils-modification.mts +434 -0
  307. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  308. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  309. package/src/array/impl/array-utils-reducing-value.mts +551 -0
  310. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
  311. package/src/array/impl/array-utils-search.mts +509 -0
  312. package/src/array/impl/array-utils-search.test.mts +346 -0
  313. package/src/array/impl/array-utils-set-op.mts +166 -0
  314. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  315. package/src/array/impl/array-utils-size.mts +30 -0
  316. package/src/array/impl/array-utils-size.test.mts +9 -0
  317. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  318. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
  319. package/src/array/impl/array-utils-slicing.mts +275 -0
  320. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  321. package/src/array/impl/array-utils-transformation.mts +746 -0
  322. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  323. package/src/array/impl/array-utils-validation.mts +241 -0
  324. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  325. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  326. package/src/array/impl/index.mts +12 -0
  327. package/src/array/index.mts +1 -1
  328. package/src/collections/imap-mapped.mts +99 -265
  329. package/src/collections/imap.mts +477 -174
  330. package/src/collections/imap.test.mts +12 -19
  331. package/src/collections/iset-mapped.mts +892 -358
  332. package/src/collections/iset.mts +429 -213
  333. package/src/collections/queue.mts +174 -200
  334. package/src/collections/stack.mts +172 -245
  335. package/src/collections/stack.test.mts +9 -1
  336. package/src/entry-point.mts +1 -0
  337. package/src/expect-type.mts +43 -172
  338. package/src/functional/match.mts +35 -145
  339. package/src/functional/optional.mts +285 -163
  340. package/src/functional/optional.test.mts +4 -1
  341. package/src/functional/pipe.mts +60 -113
  342. package/src/functional/result.mts +452 -351
  343. package/src/functional/result.test.mts +9 -2
  344. package/src/globals.d.mts +12 -5
  345. package/src/guard/has-key.mts +23 -74
  346. package/src/guard/is-non-empty-string.mts +20 -87
  347. package/src/guard/is-non-null-object.mts +14 -84
  348. package/src/guard/is-non-null-object.test.mts +1 -1
  349. package/src/guard/is-primitive.mts +13 -126
  350. package/src/guard/is-primitive.test.mts +1 -1
  351. package/src/guard/is-record.mts +21 -132
  352. package/src/guard/is-type.mts +201 -238
  353. package/src/guard/is-type.test.mts +7 -7
  354. package/src/guard/key-is-in.mts +22 -139
  355. package/src/index.mts +0 -1
  356. package/src/iterator/range.mts +29 -62
  357. package/src/json/json.mts +202 -134
  358. package/src/json/json.test.mts +1 -3
  359. package/src/number/branded-types/finite-number.mts +27 -159
  360. package/src/number/branded-types/int.mts +122 -120
  361. package/src/number/branded-types/int16.mts +22 -30
  362. package/src/number/branded-types/int16.test.mts +24 -24
  363. package/src/number/branded-types/int32.mts +22 -31
  364. package/src/number/branded-types/int32.test.mts +39 -39
  365. package/src/number/branded-types/non-negative-finite-number.mts +31 -39
  366. package/src/number/branded-types/non-negative-int16.mts +24 -34
  367. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  368. package/src/number/branded-types/non-negative-int32.mts +26 -35
  369. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  370. package/src/number/branded-types/non-zero-finite-number.mts +25 -40
  371. package/src/number/branded-types/non-zero-int.mts +15 -30
  372. package/src/number/branded-types/non-zero-int16.mts +27 -35
  373. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  374. package/src/number/branded-types/non-zero-int32.mts +29 -36
  375. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  376. package/src/number/branded-types/non-zero-safe-int.mts +39 -40
  377. package/src/number/branded-types/non-zero-uint16.mts +24 -35
  378. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  379. package/src/number/branded-types/non-zero-uint32.mts +24 -35
  380. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  381. package/src/number/branded-types/positive-finite-number.mts +29 -43
  382. package/src/number/branded-types/positive-int.mts +134 -124
  383. package/src/number/branded-types/positive-int16.mts +24 -35
  384. package/src/number/branded-types/positive-int16.test.mts +14 -14
  385. package/src/number/branded-types/positive-int32.mts +24 -35
  386. package/src/number/branded-types/positive-int32.test.mts +26 -26
  387. package/src/number/branded-types/positive-safe-int.mts +160 -34
  388. package/src/number/branded-types/positive-uint16.mts +24 -35
  389. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  390. package/src/number/branded-types/positive-uint32.mts +26 -36
  391. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  392. package/src/number/branded-types/safe-int.mts +142 -101
  393. package/src/number/branded-types/safe-uint.mts +25 -34
  394. package/src/number/branded-types/uint.mts +121 -30
  395. package/src/number/branded-types/uint16.mts +26 -34
  396. package/src/number/branded-types/uint16.test.mts +16 -16
  397. package/src/number/branded-types/uint32.mts +26 -68
  398. package/src/number/branded-types/uint32.test.mts +28 -28
  399. package/src/number/enum/int8.mts +39 -170
  400. package/src/number/enum/uint8.mts +46 -155
  401. package/src/number/num.mts +157 -212
  402. package/src/number/num.test.mts +4 -4
  403. package/src/number/refined-number-utils.mts +109 -26
  404. package/src/object/object.mts +130 -212
  405. package/src/object/object.test.mts +29 -0
  406. package/src/others/cast-mutable.mts +13 -89
  407. package/src/others/cast-mutable.test.mts +80 -0
  408. package/src/others/cast-readonly.mts +13 -169
  409. package/src/others/if-then.mts +6 -83
  410. package/src/others/map-nullable.mts +12 -136
  411. package/src/others/map-nullable.test.mts +6 -6
  412. package/src/others/memoize-function.mts +14 -157
  413. package/src/others/tuple.mts +33 -151
  414. package/src/others/unknown-to-string.mts +12 -126
  415. package/src/others/unknown-to-string.test.mts +13 -1
  416. package/src/promise/promise.mts +34 -21
  417. package/src/promise/promise.test.mts +43 -0
  418. package/dist/array/array-utils.d.mts +0 -2956
  419. package/dist/array/array-utils.d.mts.map +0 -1
  420. package/dist/array/array-utils.mjs +0 -1838
  421. package/dist/array/array-utils.mjs.map +0 -1
  422. package/src/array/array-utils-search.test.mts +0 -169
  423. package/src/array/array-utils-slicing.test.mts +0 -274
  424. package/src/array/array-utils.mts +0 -4834
@@ -31,7 +31,9 @@ const {
31
31
  } as const);
32
32
 
33
33
  /**
34
- * Checks if a number is a PositiveUint32 (32-bit positive unsigned integer in the range [1, 2^32)).
34
+ * Checks if a number is a PositiveUint32 (32-bit positive unsigned integer in
35
+ * the range [1, 2^32)).
36
+ *
35
37
  * @param value The value to check.
36
38
  * @returns `true` if the value is a PositiveUint32, `false` otherwise.
37
39
  */
@@ -39,70 +41,49 @@ export const isPositiveUint32 = is;
39
41
 
40
42
  /**
41
43
  * Casts a number to a PositiveUint32 type.
44
+ *
42
45
  * @param value The value to cast.
43
46
  * @returns The value as a PositiveUint32 type.
44
47
  * @throws {TypeError} If the value is not a positive integer in [1, 2^32).
45
- * @example
46
- * ```typescript
47
- * const x = asPositiveUint32(1000); // PositiveUint32
48
- * const y = asPositiveUint32(4294967295); // PositiveUint32
49
- * // asPositiveUint32(0); // throws TypeError
50
- * // asPositiveUint32(-1); // throws TypeError
51
- * // asPositiveUint32(4294967296); // throws TypeError
52
- * ```
53
48
  */
54
49
  export const asPositiveUint32 = castType;
55
50
 
56
51
  /**
57
- * Namespace providing type-safe arithmetic operations for 32-bit positive unsigned integers.
58
- *
59
- * All operations automatically clamp results to the valid PositiveUint32 range [1, 4294967295].
60
- * This ensures that all arithmetic maintains the 32-bit positive unsigned integer constraint,
61
- * with results below 1 clamped to MIN_VALUE and overflow results clamped to MAX_VALUE.
62
- *
63
- * @example
64
- * ```typescript
65
- * const a = asPositiveUint32(4000000000);
66
- * const b = asPositiveUint32(1000000000);
67
- *
68
- * // Arithmetic operations with automatic clamping and positive constraint
69
- * const sum = PositiveUint32.add(a, b); // PositiveUint32 (4294967295 - clamped to MAX_VALUE)
70
- * const diff = PositiveUint32.sub(a, b); // PositiveUint32 (3000000000)
71
- * const reverseDiff = PositiveUint32.sub(b, a); // PositiveUint32 (1 - clamped to MIN_VALUE)
72
- * const product = PositiveUint32.mul(a, b); // PositiveUint32 (4294967295 - clamped due to overflow)
73
- *
74
- * // Range operations (maintaining positive constraint)
75
- * const clamped = PositiveUint32.clamp(-100); // PositiveUint32 (1)
76
- * const minimum = PositiveUint32.min(a, b); // PositiveUint32 (1000000000)
77
- * const maximum = PositiveUint32.max(a, b); // PositiveUint32 (4000000000)
52
+ * Namespace providing type-safe arithmetic operations for 32-bit positive
53
+ * unsigned integers.
78
54
  *
79
- * // Utility operations
80
- * const random = PositiveUint32.random(); // PositiveUint32 (random value in [1, 4294967295])
81
- * const power = PositiveUint32.pow(asPositiveUint32(2), asPositiveUint32(20)); // PositiveUint32 (1048576)
82
- * ```
55
+ * All operations automatically clamp results to the valid PositiveUint32 range
56
+ * [1, 4294967295]. This ensures that all arithmetic maintains the 32-bit
57
+ * positive unsigned integer constraint, with results below 1 clamped to
58
+ * MIN_VALUE and overflow results clamped to MAX_VALUE.
83
59
  */
84
60
  export const PositiveUint32 = {
85
61
  /**
86
62
  * Type guard to check if a value is a PositiveUint32.
63
+ *
87
64
  * @param value The value to check.
88
- * @returns `true` if the value is a 32-bit positive unsigned integer, `false` otherwise.
65
+ * @returns `true` if the value is a 32-bit positive unsigned integer, `false`
66
+ * otherwise.
89
67
  */
90
68
  is,
91
69
 
92
70
  /**
93
71
  * The minimum value for a 32-bit positive unsigned integer.
72
+ *
94
73
  * @readonly
95
74
  */
96
75
  MIN_VALUE,
97
76
 
98
77
  /**
99
78
  * The maximum value for a 32-bit positive unsigned integer.
79
+ *
100
80
  * @readonly
101
81
  */
102
82
  MAX_VALUE,
103
83
 
104
84
  /**
105
85
  * Returns the smaller of two PositiveUint32 values.
86
+ *
106
87
  * @param a The first PositiveUint32.
107
88
  * @param b The second PositiveUint32.
108
89
  * @returns The minimum value as a PositiveUint32.
@@ -111,6 +92,7 @@ export const PositiveUint32 = {
111
92
 
112
93
  /**
113
94
  * Returns the larger of two PositiveUint32 values.
95
+ *
114
96
  * @param a The first PositiveUint32.
115
97
  * @param b The second PositiveUint32.
116
98
  * @returns The maximum value as a PositiveUint32.
@@ -119,6 +101,7 @@ export const PositiveUint32 = {
119
101
 
120
102
  /**
121
103
  * Clamps a number to the PositiveUint32 range.
104
+ *
122
105
  * @param value The number to clamp.
123
106
  * @returns The value clamped to [1, 4294967295] as a PositiveUint32.
124
107
  */
@@ -126,12 +109,14 @@ export const PositiveUint32 = {
126
109
 
127
110
  /**
128
111
  * Generates a random PositiveUint32 value within the valid range.
112
+ *
129
113
  * @returns A random PositiveUint32 between 1 and 4294967295.
130
114
  */
131
115
  random,
132
116
 
133
117
  /**
134
118
  * Raises a PositiveUint32 to the power of another PositiveUint32.
119
+ *
135
120
  * @param a The base PositiveUint32.
136
121
  * @param b The exponent PositiveUint32.
137
122
  * @returns `a ** b` clamped to [1, 4294967295] as a PositiveUint32.
@@ -140,6 +125,7 @@ export const PositiveUint32 = {
140
125
 
141
126
  /**
142
127
  * Adds two PositiveUint32 values.
128
+ *
143
129
  * @param a The first PositiveUint32.
144
130
  * @param b The second PositiveUint32.
145
131
  * @returns `a + b` clamped to [1, 4294967295] as a PositiveUint32.
@@ -148,14 +134,17 @@ export const PositiveUint32 = {
148
134
 
149
135
  /**
150
136
  * Subtracts one PositiveUint32 from another.
137
+ *
151
138
  * @param a The minuend PositiveUint32.
152
139
  * @param b The subtrahend PositiveUint32.
153
- * @returns `a - b` clamped to [1, 4294967295] as a PositiveUint32 (minimum 1).
140
+ * @returns `a - b` clamped to [1, 4294967295] as a PositiveUint32 (minimum
141
+ * 1).
154
142
  */
155
143
  sub,
156
144
 
157
145
  /**
158
146
  * Multiplies two PositiveUint32 values.
147
+ *
159
148
  * @param a The first PositiveUint32.
160
149
  * @param b The second PositiveUint32.
161
150
  * @returns `a * b` clamped to [1, 4294967295] as a PositiveUint32.
@@ -164,6 +153,7 @@ export const PositiveUint32 = {
164
153
 
165
154
  /**
166
155
  * Divides one PositiveUint32 by another using floor division.
156
+ *
167
157
  * @param a The dividend PositiveUint32.
168
158
  * @param b The divisor PositiveUint32.
169
159
  * @returns `⌊a / b⌋` clamped to [1, 4294967295] as a PositiveUint32.
@@ -11,8 +11,8 @@ describe('PositiveUint32', () => {
11
11
  test('accepts valid positive uint32 values', () => {
12
12
  expect(() => asPositiveUint32(1)).not.toThrow();
13
13
  expect(() => asPositiveUint32(1000)).not.toThrow();
14
- expect(() => asPositiveUint32(4294967295)).not.toThrow(); // 2^32 - 1
15
- expect(() => asPositiveUint32(2147483648)).not.toThrow(); // 2^31
14
+ expect(() => asPositiveUint32(4_294_967_295)).not.toThrow(); // 2^32 - 1
15
+ expect(() => asPositiveUint32(2_147_483_648)).not.toThrow(); // 2^31
16
16
  });
17
17
 
18
18
  test('rejects zero', () => {
@@ -20,8 +20,8 @@ describe('PositiveUint32', () => {
20
20
  });
21
21
 
22
22
  test('rejects values outside uint32 range', () => {
23
- expect(() => asPositiveUint32(4294967296)).toThrow(TypeError); // 2^32
24
- expect(() => asPositiveUint32(10000000000)).toThrow(TypeError);
23
+ expect(() => asPositiveUint32(4_294_967_296)).toThrow(TypeError); // 2^32
24
+ expect(() => asPositiveUint32(10_000_000_000)).toThrow(TypeError);
25
25
  });
26
26
 
27
27
  test('rejects negative integers', () => {
@@ -44,7 +44,7 @@ describe('PositiveUint32', () => {
44
44
  test('returns the same value for valid inputs', () => {
45
45
  expect(asPositiveUint32(5)).toBe(5);
46
46
  expect(asPositiveUint32(1)).toBe(1);
47
- expect(asPositiveUint32(4294967295)).toBe(4294967295);
47
+ expect(asPositiveUint32(4_294_967_295)).toBe(4_294_967_295);
48
48
  });
49
49
 
50
50
  test.each([
@@ -55,7 +55,7 @@ describe('PositiveUint32', () => {
55
55
  { name: '-3.4', value: -3.4 },
56
56
  { name: '0', value: 0 },
57
57
  { name: '-1', value: -1 },
58
- { name: '4294967296', value: 4294967296 },
58
+ { name: '4294967296', value: 4_294_967_296 },
59
59
  ] as const)(
60
60
  `asPositiveUint32($name) should throw a TypeError`,
61
61
  ({ value }) => {
@@ -72,8 +72,8 @@ describe('PositiveUint32', () => {
72
72
  test('correctly identifies positive uint32 values', () => {
73
73
  expect(isPositiveUint32(1)).toBe(true);
74
74
  expect(isPositiveUint32(1000)).toBe(true);
75
- expect(isPositiveUint32(4294967295)).toBe(true);
76
- expect(isPositiveUint32(2147483648)).toBe(true);
75
+ expect(isPositiveUint32(4_294_967_295)).toBe(true);
76
+ expect(isPositiveUint32(2_147_483_648)).toBe(true);
77
77
  });
78
78
 
79
79
  test('correctly identifies zero', () => {
@@ -81,8 +81,8 @@ describe('PositiveUint32', () => {
81
81
  });
82
82
 
83
83
  test('correctly identifies values outside uint32 range', () => {
84
- expect(isPositiveUint32(4294967296)).toBe(false);
85
- expect(isPositiveUint32(10000000000)).toBe(false);
84
+ expect(isPositiveUint32(4_294_967_296)).toBe(false);
85
+ expect(isPositiveUint32(10_000_000_000)).toBe(false);
86
86
  });
87
87
 
88
88
  test('correctly identifies negative integers', () => {
@@ -110,60 +110,63 @@ describe('PositiveUint32', () => {
110
110
  describe('constants', () => {
111
111
  test('MIN_VALUE and MAX_VALUE', () => {
112
112
  expect(PositiveUint32.MIN_VALUE).toBe(1);
113
- expect(PositiveUint32.MAX_VALUE).toBe(4294967295);
113
+ expect(PositiveUint32.MAX_VALUE).toBe(4_294_967_295);
114
114
  });
115
115
  });
116
116
 
117
117
  describe('mathematical operations', () => {
118
- const a = asPositiveUint32(1000000);
119
- const b = asPositiveUint32(500000);
118
+ const a = asPositiveUint32(1_000_000);
119
+ const b = asPositiveUint32(500_000);
120
120
 
121
121
  test('min and max', () => {
122
- expect(PositiveUint32.min(a, b)).toBe(500000);
123
- expect(PositiveUint32.max(a, b)).toBe(1000000);
122
+ expect(PositiveUint32.min(a, b)).toBe(500_000);
123
+ expect(PositiveUint32.max(a, b)).toBe(1_000_000);
124
124
  });
125
125
 
126
126
  test('add (with clamping to positive uint32 range)', () => {
127
127
  const result = PositiveUint32.add(
128
- asPositiveUint32(4294967000),
128
+ asPositiveUint32(4_294_967_000),
129
129
  asPositiveUint32(1000),
130
130
  );
131
- expect(result).toBe(4294967295); // clamped to max
132
- expect(PositiveUint32.add(a, b)).toBe(1500000);
131
+ expect(result).toBe(4_294_967_295); // clamped to max
132
+ expect(PositiveUint32.add(a, b)).toBe(1_500_000);
133
133
  });
134
134
 
135
135
  test('sub (never goes below 1)', () => {
136
- expect(PositiveUint32.sub(a, b)).toBe(500000);
136
+ expect(PositiveUint32.sub(a, b)).toBe(500_000);
137
137
  expect(PositiveUint32.sub(b, a)).toBe(1); // clamped to 1
138
138
  });
139
139
 
140
140
  test('mul (with clamping to positive uint32 range)', () => {
141
141
  const result = PositiveUint32.mul(
142
- asPositiveUint32(100000),
143
- asPositiveUint32(100000),
142
+ asPositiveUint32(100_000),
143
+ asPositiveUint32(100_000),
144
144
  );
145
- expect(result).toBe(4294967295); // clamped to max
145
+ expect(result).toBe(4_294_967_295); // clamped to max
146
146
  expect(
147
147
  PositiveUint32.mul(asPositiveUint32(1000), asPositiveUint32(5)),
148
148
  ).toBe(5000);
149
149
  });
150
150
 
151
151
  test('div (floor division, never goes below 1)', () => {
152
- expect(PositiveUint32.div(a, asPositiveUint32(500000))).toBe(2);
152
+ expect(PositiveUint32.div(a, asPositiveUint32(500_000))).toBe(2);
153
153
  expect(PositiveUint32.div(asPositiveUint32(7), asPositiveUint32(3))).toBe(
154
154
  2,
155
155
  );
156
156
  expect(
157
- PositiveUint32.div(asPositiveUint32(500000), asPositiveUint32(1000000)),
157
+ PositiveUint32.div(
158
+ asPositiveUint32(500_000),
159
+ asPositiveUint32(1_000_000),
160
+ ),
158
161
  ).toBe(1); // floor(500000/1000000) = 0, clamped to 1
159
162
  });
160
163
 
161
164
  test('pow (with clamping to positive uint32 range)', () => {
162
165
  const result = PositiveUint32.pow(
163
- asPositiveUint32(10000),
166
+ asPositiveUint32(10_000),
164
167
  asPositiveUint32(3),
165
168
  );
166
- expect(result).toBe(4294967295); // clamped to max
169
+ expect(result).toBe(4_294_967_295); // clamped to max
167
170
  expect(PositiveUint32.pow(asPositiveUint32(2), asPositiveUint32(3))).toBe(
168
171
  8,
169
172
  );
@@ -189,7 +192,7 @@ describe('PositiveUint32', () => {
189
192
  for (const _ of range(10)) {
190
193
  const result = PositiveUint32.random(1, 30);
191
194
  expect(result).toBeGreaterThanOrEqual(1);
192
- expect(result).toBeLessThanOrEqual(4294967295);
195
+ expect(result).toBeLessThanOrEqual(4_294_967_295);
193
196
  }
194
197
  });
195
198
  });
@@ -198,7 +201,7 @@ describe('PositiveUint32', () => {
198
201
  test('type relationships', () => {
199
202
  expectType<PositiveUint32, number>('<=');
200
203
 
201
- expectTypeOf(asPositiveUint32(1000000)).toExtend<PositiveUint32>();
204
+ expectTypeOf(asPositiveUint32(1_000_000)).toExtend<PositiveUint32>();
202
205
  });
203
206
  });
204
207
  });
@@ -26,9 +26,9 @@ const {
26
26
  SafeUint
27
27
  >({
28
28
  integerOrSafeInteger: 'SafeInteger',
29
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
29
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
30
30
  MIN_VALUE: Number.MIN_SAFE_INTEGER as SafeInt,
31
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
31
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
32
32
  MAX_VALUE: Number.MAX_SAFE_INTEGER as SafeUint,
33
33
  typeNameInMessage,
34
34
  } as const);
@@ -39,17 +39,16 @@ const {
39
39
  * A safe integer is an integer that can be exactly represented in JavaScript
40
40
  * without precision loss. The range is [±(2^53 - 1)].
41
41
  *
42
- * @param value - The value to check
43
- * @returns `true` if the value is a safe integer, `false` otherwise
44
- *
45
42
  * @example
46
- * ```typescript
47
- * isSafeInt(42); // true
48
- * isSafeInt(Number.MAX_SAFE_INTEGER); // true
49
- * isSafeInt(Number.MAX_SAFE_INTEGER + 1); // false
50
- * isSafeInt(3.14); // false
51
- * isSafeInt(NaN); // false
43
+ *
44
+ * ```ts
45
+ * assert.ok(isSafeInt(Number.MAX_SAFE_INTEGER));
46
+ * assert.notOk(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
47
+ * assert.ok(SafeInt.is(Number.MIN_SAFE_INTEGER));
52
48
  * ```
49
+ *
50
+ * @param value - The value to check
51
+ * @returns `true` if the value is a safe integer, `false` otherwise
53
52
  */
54
53
  export const isSafeInt = is;
55
54
 
@@ -57,24 +56,21 @@ export const isSafeInt = is;
57
56
  * Casts a number to a SafeInt branded type.
58
57
  *
59
58
  * This function validates that the input is a safe integer (within ±(2^53 - 1))
60
- * and returns it with the SafeInt brand. This ensures type safety for operations
61
- * that require precise integer arithmetic.
62
- *
63
- * @param value - The value to cast
64
- * @returns The value as a SafeInt branded type
65
- * @throws {TypeError} If the value is not a safe integer
59
+ * and returns it with the SafeInt brand. This ensures type safety for
60
+ * operations that require precise integer arithmetic.
66
61
  *
67
62
  * @example
68
- * ```typescript
69
- * const x = asSafeInt(5); // SafeInt
70
- * const y = asSafeInt(-1000); // SafeInt
71
- * const z = asSafeInt(2**50); // SafeInt (within range)
72
63
  *
73
- * // These throw TypeError:
74
- * // asSafeInt(1.5); // Not an integer
75
- * // asSafeInt(Number.MAX_SAFE_INTEGER + 1); // Exceeds safe range
76
- * // asSafeInt(2**53); // Loss of precision
64
+ * ```ts
65
+ * const branded = asSafeInt(123);
66
+ *
67
+ * assert(branded === 123);
68
+ * assert.ok(SafeInt.is(branded));
77
69
  * ```
70
+ *
71
+ * @param value - The value to cast
72
+ * @returns The value as a SafeInt branded type
73
+ * @throws {TypeError} If the value is not a safe integer
78
74
  */
79
75
  export const asSafeInt = castType;
80
76
 
@@ -86,58 +82,42 @@ export const asSafeInt = castType;
86
82
  * approximately ±9 quadrillion.
87
83
  *
88
84
  * All operations automatically clamp results to stay within the safe range,
89
- * preventing precision loss that occurs with larger integers. This makes SafeInt
90
- * ideal for:
85
+ * preventing precision loss that occurs with larger integers. This makes
86
+ * SafeInt ideal for:
87
+ *
91
88
  * - Financial calculations requiring exact cents
92
89
  * - Database IDs and counters
93
90
  * - Array indices and sizes
94
91
  * - Any integer arithmetic requiring precision guarantees
95
- *
96
- * @example
97
- * ```typescript
98
- * // Near the boundary
99
- * const nearMax = asSafeInt(9007199254740990);
100
- * const increment = asSafeInt(10);
101
- *
102
- * // Automatic clamping prevents precision loss
103
- * const sum = SafeInt.add(nearMax, increment); // Clamped to MAX_SAFE_INTEGER
104
- * const product = SafeInt.mul(nearMax, increment); // Clamped to MAX_SAFE_INTEGER
105
- *
106
- * // Safe operations
107
- * const a = asSafeInt(1000000);
108
- * const b = asSafeInt(500);
109
- *
110
- * const diff = SafeInt.sub(a, b); // SafeInt (999500)
111
- * const quotient = SafeInt.div(a, b); // SafeInt (2000)
112
- * const power = SafeInt.pow(b, asSafeInt(2)); // SafeInt (250000)
113
- *
114
- * // Utility operations
115
- * const absolute = SafeInt.abs(asSafeInt(-42)); // SafeInt (42)
116
- * const clamped = SafeInt.clamp(2**60); // SafeInt (MAX_SAFE_INTEGER)
117
- *
118
- * // Random generation
119
- * const die = SafeInt.random(asSafeInt(1), asSafeInt(6)); // Random 1-6
120
- * ```
121
92
  */
122
93
  export const SafeInt = {
123
94
  /**
124
95
  * Type guard that checks if a value is a safe integer.
125
96
  *
97
+ * @example
98
+ *
99
+ * ```ts
100
+ * assert.ok(isSafeInt(Number.MAX_SAFE_INTEGER));
101
+ * assert.notOk(isSafeInt(Number.MAX_SAFE_INTEGER + 0.5));
102
+ * assert.ok(SafeInt.is(Number.MIN_SAFE_INTEGER));
103
+ * ```
104
+ *
126
105
  * @param value - The value to check
127
106
  * @returns `true` if the value is a safe integer, `false` otherwise
128
- *
129
107
  * @see {@link isSafeInt} for usage examples
130
108
  */
131
109
  is,
132
110
 
133
111
  /**
134
112
  * The minimum safe integer value (-(2^53 - 1)).
113
+ *
135
114
  * @readonly
136
115
  */
137
116
  MIN_VALUE,
138
117
 
139
118
  /**
140
119
  * The maximum safe integer value (2^53 - 1).
120
+ *
141
121
  * @readonly
142
122
  */
143
123
  MAX_VALUE,
@@ -145,81 +125,114 @@ export const SafeInt = {
145
125
  /**
146
126
  * Returns the absolute value of a safe integer.
147
127
  *
148
- * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`,
149
- * so this function clamps the result to maintain the safe integer guarantee.
150
- *
151
- * @param a - The safe integer value
152
- * @returns The absolute value as a SafeInt, clamped if necessary
128
+ * Note: `Math.abs(MIN_SAFE_INTEGER)` would exceed `MAX_SAFE_INTEGER`, so this
129
+ * function clamps the result to maintain the safe integer guarantee.
153
130
  *
154
131
  * @example
155
- * ```typescript
156
- * SafeInt.abs(asSafeInt(-42)); // SafeInt (42)
157
- * SafeInt.abs(asSafeInt(42)); // SafeInt (42)
158
- * SafeInt.abs(SafeInt.MIN_VALUE); // SafeInt (MAX_SAFE_INTEGER)
132
+ *
133
+ * ```ts
134
+ * const negative = asSafeInt(-900);
135
+ * const absolute = SafeInt.abs(negative);
136
+ *
137
+ * assert(absolute === 900);
138
+ * assert.ok(SafeInt.is(absolute));
159
139
  * ```
140
+ *
141
+ * @param a - The safe integer value
142
+ * @returns The absolute value as a SafeInt, clamped if necessary
160
143
  */
161
144
  abs,
162
145
 
163
146
  /**
164
147
  * Returns the minimum value from a list of safe integers.
165
148
  *
166
- * @param values - The safe integers to compare (at least one required)
167
- * @returns The smallest value as a SafeInt
168
- *
169
149
  * @example
170
- * ```typescript
171
- * SafeInt.min(asSafeInt(5), asSafeInt(3)); // SafeInt (3)
172
- * SafeInt.min(asSafeInt(-10), asSafeInt(0), asSafeInt(10)); // SafeInt (-10)
150
+ *
151
+ * ```ts
152
+ * const smallest = SafeInt.min(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
153
+ *
154
+ * assert(smallest === -14);
173
155
  * ```
156
+ *
157
+ * @param values - The safe integers to compare (at least one required)
158
+ * @returns The smallest value as a SafeInt
174
159
  */
175
160
  min: min_,
176
161
 
177
162
  /**
178
163
  * Returns the maximum value from a list of safe integers.
179
164
  *
180
- * @param values - The safe integers to compare (at least one required)
181
- * @returns The largest value as a SafeInt
182
- *
183
165
  * @example
184
- * ```typescript
185
- * SafeInt.max(asSafeInt(5), asSafeInt(3)); // SafeInt (5)
186
- * SafeInt.max(asSafeInt(-10), asSafeInt(0), asSafeInt(10)); // SafeInt (10)
166
+ *
167
+ * ```ts
168
+ * const largest = SafeInt.max(asSafeInt(25), asSafeInt(-14), asSafeInt(99));
169
+ *
170
+ * assert(largest === 99);
187
171
  * ```
172
+ *
173
+ * @param values - The safe integers to compare (at least one required)
174
+ * @returns The largest value as a SafeInt
188
175
  */
189
176
  max: max_,
190
177
 
191
178
  /**
192
179
  * Clamps a number to the safe integer range.
180
+ *
181
+ * @example
182
+ *
183
+ * ```ts
184
+ * const aboveRange = SafeInt.clamp(1e20);
185
+ * const withinRange = SafeInt.clamp(123);
186
+ * const belowRange = SafeInt.clamp(-1e20);
187
+ *
188
+ * assert(aboveRange === Number.MAX_SAFE_INTEGER);
189
+ * assert(withinRange === 123);
190
+ * assert(belowRange === Number.MIN_SAFE_INTEGER);
191
+ * ```
192
+ *
193
193
  * @param value The number to clamp.
194
- * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a SafeInt.
194
+ * @returns The value clamped to [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] as a
195
+ * SafeInt.
195
196
  */
196
197
  clamp,
197
198
 
198
199
  /**
199
200
  * Generates a random safe integer within the specified range (inclusive).
200
201
  *
201
- * The range is inclusive on both ends. If min > max, they are automatically swapped.
202
- *
203
- * @param min - The minimum value (inclusive)
204
- * @param max - The maximum value (inclusive)
205
- * @returns A random SafeInt in the range [min, max]
202
+ * The range is inclusive on both ends. If min > max, they are automatically
203
+ * swapped.
206
204
  *
207
205
  * @example
208
- * ```typescript
209
- * // Dice roll
210
- * const d20 = SafeInt.random(asSafeInt(1), asSafeInt(20));
211
206
  *
212
- * // Random index for large array
213
- * const index = SafeInt.random(asSafeInt(0), asSafeInt(1000000));
207
+ * ```ts
208
+ * const min = asSafeInt(-10);
209
+ * const max = asSafeInt(10);
210
+ * const randomValue = SafeInt.random(min, max);
214
211
  *
215
- * // Can use full safe range
216
- * const any = SafeInt.random(SafeInt.MIN_VALUE, SafeInt.MAX_VALUE);
212
+ * assert.ok(SafeInt.is(randomValue));
213
+ * assert.ok(randomValue >= -10 && randomValue <= 10);
217
214
  * ```
215
+ *
216
+ * @param min - The minimum value (inclusive)
217
+ * @param max - The maximum value (inclusive)
218
+ * @returns A random SafeInt in the range [min, max]
218
219
  */
219
220
  random,
220
221
 
221
222
  /**
222
223
  * Raises a SafeInt to the power of another SafeInt.
224
+ *
225
+ * @example
226
+ *
227
+ * ```ts
228
+ * const base = asSafeInt(3);
229
+ * const exponent = asSafeInt(5);
230
+ * const power = SafeInt.pow(base, exponent);
231
+ *
232
+ * assert(power === 243);
233
+ * assert.ok(SafeInt.is(power));
234
+ * ```
235
+ *
223
236
  * @param a The base SafeInt.
224
237
  * @param b The exponent SafeInt.
225
238
  * @returns `a ** b` clamped to safe integer range as a SafeInt.
@@ -228,6 +241,16 @@ export const SafeInt = {
228
241
 
229
242
  /**
230
243
  * Adds two SafeInt values.
244
+ *
245
+ * @example
246
+ *
247
+ * ```ts
248
+ * const sum = SafeInt.add(asSafeInt(9), asSafeInt(4));
249
+ *
250
+ * assert(sum === 13);
251
+ * assert.ok(SafeInt.is(sum));
252
+ * ```
253
+ *
231
254
  * @param a The first SafeInt.
232
255
  * @param b The second SafeInt.
233
256
  * @returns `a + b` clamped to safe integer range as a SafeInt.
@@ -236,6 +259,16 @@ export const SafeInt = {
236
259
 
237
260
  /**
238
261
  * Subtracts one SafeInt from another.
262
+ *
263
+ * @example
264
+ *
265
+ * ```ts
266
+ * const difference = SafeInt.sub(asSafeInt(9), asSafeInt(14));
267
+ *
268
+ * assert(difference === -5);
269
+ * assert.ok(SafeInt.is(difference));
270
+ * ```
271
+ *
239
272
  * @param a The minuend SafeInt.
240
273
  * @param b The subtrahend SafeInt.
241
274
  * @returns `a - b` clamped to safe integer range as a SafeInt.
@@ -244,6 +277,16 @@ export const SafeInt = {
244
277
 
245
278
  /**
246
279
  * Multiplies two SafeInt values.
280
+ *
281
+ * @example
282
+ *
283
+ * ```ts
284
+ * const product = SafeInt.mul(asSafeInt(-8), asSafeInt(7));
285
+ *
286
+ * assert(product === -56);
287
+ * assert.ok(SafeInt.is(product));
288
+ * ```
289
+ *
247
290
  * @param a The first SafeInt.
248
291
  * @param b The second SafeInt.
249
292
  * @returns `a * b` clamped to safe integer range as a SafeInt.
@@ -253,23 +296,21 @@ export const SafeInt = {
253
296
  /**
254
297
  * Divides one SafeInt by another using floor division.
255
298
  *
256
- * Performs mathematical floor division: `⌊a / b⌋`.
257
- * The divisor must be non-zero (enforced by type constraints).
299
+ * Performs mathematical floor division: `⌊a / b⌋`. The divisor must be
300
+ * non-zero (enforced by type constraints).
301
+ *
302
+ * @example
303
+ *
304
+ * ```ts
305
+ * const quotient = SafeInt.div(asSafeInt(-17), asSafeInt(5));
306
+ *
307
+ * assert(quotient === -4);
308
+ * assert.ok(SafeInt.is(quotient));
309
+ * ```
258
310
  *
259
311
  * @param a - The dividend
260
312
  * @param b - The divisor (must be non-zero)
261
313
  * @returns The integer quotient as a SafeInt
262
- *
263
- * @example
264
- * ```typescript
265
- * SafeInt.div(asSafeInt(10), asSafeInt(3)); // SafeInt (3)
266
- * SafeInt.div(asSafeInt(-10), asSafeInt(3)); // SafeInt (-4)
267
- *
268
- * // Large number division
269
- * const large = asSafeInt(1000000000000);
270
- * const divisor = asSafeInt(1000000);
271
- * SafeInt.div(large, divisor); // SafeInt (1000000)
272
- * ```
273
314
  */
274
315
  div,
275
316
  } as const;