@fluixi/utils 1.0.0-alpha.100

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 (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -0
  3. package/dist/index.cjs +2858 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +1 -0
  7. package/dist/index.mjs +2838 -0
  8. package/dist/lib/array/advanced.cjs +2227 -0
  9. package/dist/lib/array/advanced.d.ts +1116 -0
  10. package/dist/lib/array/advanced.d.ts.map +1 -0
  11. package/dist/lib/array/advanced.js +2429 -0
  12. package/dist/lib/array/advanced.mjs +2204 -0
  13. package/dist/lib/array/array.cjs +57 -0
  14. package/dist/lib/array/array.d.ts +6 -0
  15. package/dist/lib/array/array.d.ts.map +1 -0
  16. package/dist/lib/array/array.js +31 -0
  17. package/dist/lib/array/array.mjs +36 -0
  18. package/dist/lib/array/index.cjs +2344 -0
  19. package/dist/lib/array/index.d.ts +4 -0
  20. package/dist/lib/array/index.d.ts.map +1 -0
  21. package/dist/lib/array/index.js +3 -0
  22. package/dist/lib/array/index.mjs +2322 -0
  23. package/dist/lib/array/utils.cjs +103 -0
  24. package/dist/lib/array/utils.d.ts +100 -0
  25. package/dist/lib/array/utils.d.ts.map +1 -0
  26. package/dist/lib/array/utils.js +165 -0
  27. package/dist/lib/array/utils.mjs +82 -0
  28. package/dist/lib/color/color.cjs +2190 -0
  29. package/dist/lib/color/color.d.ts +366 -0
  30. package/dist/lib/color/color.d.ts.map +1 -0
  31. package/dist/lib/color/color.js +722 -0
  32. package/dist/lib/color/color.mjs +2167 -0
  33. package/dist/lib/color/constants.cjs +380 -0
  34. package/dist/lib/color/constants.d.ts +361 -0
  35. package/dist/lib/color/constants.d.ts.map +1 -0
  36. package/dist/lib/color/constants.js +358 -0
  37. package/dist/lib/color/constants.mjs +359 -0
  38. package/dist/lib/color/conversions.cjs +629 -0
  39. package/dist/lib/color/conversions.d.ts +166 -0
  40. package/dist/lib/color/conversions.d.ts.map +1 -0
  41. package/dist/lib/color/conversions.js +766 -0
  42. package/dist/lib/color/conversions.mjs +608 -0
  43. package/dist/lib/color/helpers.cjs +2534 -0
  44. package/dist/lib/color/helpers.d.ts +75 -0
  45. package/dist/lib/color/helpers.d.ts.map +1 -0
  46. package/dist/lib/color/helpers.js +419 -0
  47. package/dist/lib/color/helpers.mjs +2511 -0
  48. package/dist/lib/color/index.cjs +2641 -0
  49. package/dist/lib/color/index.d.ts +12 -0
  50. package/dist/lib/color/index.d.ts.map +1 -0
  51. package/dist/lib/color/index.js +15 -0
  52. package/dist/lib/color/index.mjs +2619 -0
  53. package/dist/lib/color/types.cjs +18 -0
  54. package/dist/lib/color/types.d.ts +179 -0
  55. package/dist/lib/color/types.d.ts.map +1 -0
  56. package/dist/lib/color/types.js +1 -0
  57. package/dist/lib/color/types.mjs +0 -0
  58. package/dist/lib/color/utils.cjs +962 -0
  59. package/dist/lib/color/utils.d.ts +199 -0
  60. package/dist/lib/color/utils.d.ts.map +1 -0
  61. package/dist/lib/color/utils.js +858 -0
  62. package/dist/lib/color/utils.mjs +939 -0
  63. package/dist/lib/compare/comparators.cjs +171 -0
  64. package/dist/lib/compare/comparators.d.ts +65 -0
  65. package/dist/lib/compare/comparators.d.ts.map +1 -0
  66. package/dist/lib/compare/comparators.js +210 -0
  67. package/dist/lib/compare/comparators.mjs +150 -0
  68. package/dist/lib/compare/index.cjs +172 -0
  69. package/dist/lib/compare/index.d.ts +2 -0
  70. package/dist/lib/compare/index.d.ts.map +1 -0
  71. package/dist/lib/compare/index.js +1 -0
  72. package/dist/lib/compare/index.mjs +152 -0
  73. package/dist/lib/cookie/codec.cjs +72 -0
  74. package/dist/lib/cookie/codec.d.ts +22 -0
  75. package/dist/lib/cookie/codec.d.ts.map +1 -0
  76. package/dist/lib/cookie/codec.js +67 -0
  77. package/dist/lib/cookie/codec.mjs +51 -0
  78. package/dist/lib/cookie/index.cjs +75 -0
  79. package/dist/lib/cookie/index.d.ts +2 -0
  80. package/dist/lib/cookie/index.d.ts.map +1 -0
  81. package/dist/lib/cookie/index.js +1 -0
  82. package/dist/lib/cookie/index.mjs +53 -0
  83. package/dist/lib/crypto/hash.cjs +83 -0
  84. package/dist/lib/crypto/hash.d.ts +6 -0
  85. package/dist/lib/crypto/hash.d.ts.map +1 -0
  86. package/dist/lib/crypto/hash.js +53 -0
  87. package/dist/lib/crypto/hash.mjs +62 -0
  88. package/dist/lib/crypto/index.cjs +85 -0
  89. package/dist/lib/crypto/index.d.ts +2 -0
  90. package/dist/lib/crypto/index.d.ts.map +1 -0
  91. package/dist/lib/crypto/index.js +1 -0
  92. package/dist/lib/crypto/index.mjs +62 -0
  93. package/dist/lib/dom/events.cjs +40 -0
  94. package/dist/lib/dom/events.d.ts +159 -0
  95. package/dist/lib/dom/events.d.ts.map +1 -0
  96. package/dist/lib/dom/events.js +50 -0
  97. package/dist/lib/dom/events.mjs +19 -0
  98. package/dist/lib/dom/index.cjs +78 -0
  99. package/dist/lib/dom/index.d.ts +3 -0
  100. package/dist/lib/dom/index.d.ts.map +1 -0
  101. package/dist/lib/dom/index.js +2 -0
  102. package/dist/lib/dom/index.mjs +56 -0
  103. package/dist/lib/dom/utils.cjs +57 -0
  104. package/dist/lib/dom/utils.d.ts +6 -0
  105. package/dist/lib/dom/utils.d.ts.map +1 -0
  106. package/dist/lib/dom/utils.js +37 -0
  107. package/dist/lib/dom/utils.mjs +36 -0
  108. package/dist/lib/functions/functions.cjs +366 -0
  109. package/dist/lib/functions/functions.d.ts +329 -0
  110. package/dist/lib/functions/functions.d.ts.map +1 -0
  111. package/dist/lib/functions/functions.js +585 -0
  112. package/dist/lib/functions/functions.mjs +345 -0
  113. package/dist/lib/functions/index.cjs +369 -0
  114. package/dist/lib/functions/index.d.ts +3 -0
  115. package/dist/lib/functions/index.d.ts.map +1 -0
  116. package/dist/lib/functions/index.js +1 -0
  117. package/dist/lib/functions/index.mjs +347 -0
  118. package/dist/lib/functions/types.cjs +18 -0
  119. package/dist/lib/functions/types.d.ts +2 -0
  120. package/dist/lib/functions/types.d.ts.map +1 -0
  121. package/dist/lib/functions/types.js +1 -0
  122. package/dist/lib/functions/types.mjs +0 -0
  123. package/dist/lib/helpers.cjs +78 -0
  124. package/dist/lib/helpers.d.ts +13 -0
  125. package/dist/lib/helpers.d.ts.map +1 -0
  126. package/dist/lib/helpers.js +66 -0
  127. package/dist/lib/helpers.mjs +59 -0
  128. package/dist/lib/index.cjs +2857 -0
  129. package/dist/lib/index.d.ts +6 -0
  130. package/dist/lib/index.d.ts.map +1 -0
  131. package/dist/lib/index.js +8 -0
  132. package/dist/lib/index.mjs +2836 -0
  133. package/dist/lib/maths/constants.cjs +70 -0
  134. package/dist/lib/maths/constants.d.ts +84 -0
  135. package/dist/lib/maths/constants.d.ts.map +1 -0
  136. package/dist/lib/maths/constants.js +79 -0
  137. package/dist/lib/maths/constants.mjs +50 -0
  138. package/dist/lib/maths/fn/advanced.cjs +231 -0
  139. package/dist/lib/maths/fn/advanced.d.ts +149 -0
  140. package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
  141. package/dist/lib/maths/fn/advanced.js +264 -0
  142. package/dist/lib/maths/fn/advanced.mjs +208 -0
  143. package/dist/lib/maths/fn/basic.cjs +212 -0
  144. package/dist/lib/maths/fn/basic.d.ts +182 -0
  145. package/dist/lib/maths/fn/basic.d.ts.map +1 -0
  146. package/dist/lib/maths/fn/basic.js +343 -0
  147. package/dist/lib/maths/fn/basic.mjs +191 -0
  148. package/dist/lib/maths/fn/complex.cjs +268 -0
  149. package/dist/lib/maths/fn/complex.d.ts +153 -0
  150. package/dist/lib/maths/fn/complex.d.ts.map +1 -0
  151. package/dist/lib/maths/fn/complex.js +383 -0
  152. package/dist/lib/maths/fn/complex.mjs +247 -0
  153. package/dist/lib/maths/fn/index.cjs +877 -0
  154. package/dist/lib/maths/fn/index.d.ts +10 -0
  155. package/dist/lib/maths/fn/index.d.ts.map +1 -0
  156. package/dist/lib/maths/fn/index.js +9 -0
  157. package/dist/lib/maths/fn/index.mjs +855 -0
  158. package/dist/lib/maths/fn/trigo.cjs +179 -0
  159. package/dist/lib/maths/fn/trigo.d.ts +147 -0
  160. package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
  161. package/dist/lib/maths/fn/trigo.js +227 -0
  162. package/dist/lib/maths/fn/trigo.mjs +156 -0
  163. package/dist/lib/maths/fn/vector.cjs +728 -0
  164. package/dist/lib/maths/fn/vector.d.ts +512 -0
  165. package/dist/lib/maths/fn/vector.d.ts.map +1 -0
  166. package/dist/lib/maths/fn/vector.js +1136 -0
  167. package/dist/lib/maths/fn/vector.mjs +707 -0
  168. package/dist/lib/maths/formatter.cjs +61 -0
  169. package/dist/lib/maths/formatter.d.ts +35 -0
  170. package/dist/lib/maths/formatter.d.ts.map +1 -0
  171. package/dist/lib/maths/formatter.js +56 -0
  172. package/dist/lib/maths/formatter.mjs +40 -0
  173. package/dist/lib/maths/guards.cjs +164 -0
  174. package/dist/lib/maths/guards.d.ts +166 -0
  175. package/dist/lib/maths/guards.d.ts.map +1 -0
  176. package/dist/lib/maths/guards.js +315 -0
  177. package/dist/lib/maths/guards.mjs +144 -0
  178. package/dist/lib/maths/index.cjs +1152 -0
  179. package/dist/lib/maths/index.d.ts +24 -0
  180. package/dist/lib/maths/index.d.ts.map +1 -0
  181. package/dist/lib/maths/index.js +29 -0
  182. package/dist/lib/maths/index.mjs +1130 -0
  183. package/dist/lib/maths/parser.cjs +75 -0
  184. package/dist/lib/maths/parser.d.ts +20 -0
  185. package/dist/lib/maths/parser.d.ts.map +1 -0
  186. package/dist/lib/maths/parser.js +78 -0
  187. package/dist/lib/maths/parser.mjs +54 -0
  188. package/dist/lib/maths/random.cjs +49 -0
  189. package/dist/lib/maths/random.d.ts +27 -0
  190. package/dist/lib/maths/random.d.ts.map +1 -0
  191. package/dist/lib/maths/random.js +49 -0
  192. package/dist/lib/maths/random.mjs +28 -0
  193. package/dist/lib/maths/types/advanced.cjs +18 -0
  194. package/dist/lib/maths/types/advanced.d.ts +357 -0
  195. package/dist/lib/maths/types/advanced.d.ts.map +1 -0
  196. package/dist/lib/maths/types/advanced.js +5 -0
  197. package/dist/lib/maths/types/advanced.mjs +0 -0
  198. package/dist/lib/maths/types/basic.cjs +18 -0
  199. package/dist/lib/maths/types/basic.d.ts +95 -0
  200. package/dist/lib/maths/types/basic.d.ts.map +1 -0
  201. package/dist/lib/maths/types/basic.js +5 -0
  202. package/dist/lib/maths/types/basic.mjs +0 -0
  203. package/dist/lib/maths/types/index.cjs +19 -0
  204. package/dist/lib/maths/types/index.d.ts +4 -0
  205. package/dist/lib/maths/types/index.d.ts.map +1 -0
  206. package/dist/lib/maths/types/index.js +3 -0
  207. package/dist/lib/maths/types/index.mjs +1 -0
  208. package/dist/lib/maths/types/negative.cjs +18 -0
  209. package/dist/lib/maths/types/negative.d.ts +51 -0
  210. package/dist/lib/maths/types/negative.d.ts.map +1 -0
  211. package/dist/lib/maths/types/negative.js +5 -0
  212. package/dist/lib/maths/types/negative.mjs +0 -0
  213. package/dist/lib/maths/types/operations.cjs +18 -0
  214. package/dist/lib/maths/types/operations.d.ts +188 -0
  215. package/dist/lib/maths/types/operations.d.ts.map +1 -0
  216. package/dist/lib/maths/types/operations.js +6 -0
  217. package/dist/lib/maths/types/operations.mjs +0 -0
  218. package/dist/lib/object/clone.cjs +88 -0
  219. package/dist/lib/object/clone.d.ts +46 -0
  220. package/dist/lib/object/clone.d.ts.map +1 -0
  221. package/dist/lib/object/clone.js +104 -0
  222. package/dist/lib/object/clone.mjs +65 -0
  223. package/dist/lib/object/diff.cjs +573 -0
  224. package/dist/lib/object/diff.d.ts +203 -0
  225. package/dist/lib/object/diff.d.ts.map +1 -0
  226. package/dist/lib/object/diff.js +805 -0
  227. package/dist/lib/object/diff.mjs +550 -0
  228. package/dist/lib/object/getter-setter.cjs +2351 -0
  229. package/dist/lib/object/getter-setter.d.ts +361 -0
  230. package/dist/lib/object/getter-setter.d.ts.map +1 -0
  231. package/dist/lib/object/getter-setter.js +1771 -0
  232. package/dist/lib/object/getter-setter.mjs +2330 -0
  233. package/dist/lib/object/index.cjs +3956 -0
  234. package/dist/lib/object/index.d.ts +13 -0
  235. package/dist/lib/object/index.d.ts.map +1 -0
  236. package/dist/lib/object/index.js +12 -0
  237. package/dist/lib/object/index.mjs +3936 -0
  238. package/dist/lib/object/merge.cjs +1029 -0
  239. package/dist/lib/object/merge.d.ts +93 -0
  240. package/dist/lib/object/merge.d.ts.map +1 -0
  241. package/dist/lib/object/merge.js +474 -0
  242. package/dist/lib/object/merge.mjs +1006 -0
  243. package/dist/lib/object/object.cjs +280 -0
  244. package/dist/lib/object/object.d.ts +128 -0
  245. package/dist/lib/object/object.d.ts.map +1 -0
  246. package/dist/lib/object/object.js +432 -0
  247. package/dist/lib/object/object.mjs +257 -0
  248. package/dist/lib/object/omit.cjs +2022 -0
  249. package/dist/lib/object/omit.d.ts +351 -0
  250. package/dist/lib/object/omit.d.ts.map +1 -0
  251. package/dist/lib/object/omit.js +656 -0
  252. package/dist/lib/object/omit.mjs +1999 -0
  253. package/dist/lib/object/reconcile.cjs +126 -0
  254. package/dist/lib/object/reconcile.d.ts +7 -0
  255. package/dist/lib/object/reconcile.d.ts.map +1 -0
  256. package/dist/lib/object/reconcile.js +122 -0
  257. package/dist/lib/object/reconcile.mjs +105 -0
  258. package/dist/lib/object/selector.cjs +303 -0
  259. package/dist/lib/object/selector.d.ts +50 -0
  260. package/dist/lib/object/selector.d.ts.map +1 -0
  261. package/dist/lib/object/selector.js +371 -0
  262. package/dist/lib/object/selector.mjs +282 -0
  263. package/dist/lib/object/sort.cjs +209 -0
  264. package/dist/lib/object/sort.d.ts +149 -0
  265. package/dist/lib/object/sort.d.ts.map +1 -0
  266. package/dist/lib/object/sort.js +298 -0
  267. package/dist/lib/object/sort.mjs +186 -0
  268. package/dist/lib/object/transform.cjs +2211 -0
  269. package/dist/lib/object/transform.d.ts +620 -0
  270. package/dist/lib/object/transform.d.ts.map +1 -0
  271. package/dist/lib/object/transform.js +1058 -0
  272. package/dist/lib/object/transform.mjs +2190 -0
  273. package/dist/lib/object/types.cjs +18 -0
  274. package/dist/lib/object/types.d.ts +250 -0
  275. package/dist/lib/object/types.d.ts.map +1 -0
  276. package/dist/lib/object/types.js +1 -0
  277. package/dist/lib/object/types.mjs +0 -0
  278. package/dist/lib/object/utils.cjs +326 -0
  279. package/dist/lib/object/utils.d.ts +165 -0
  280. package/dist/lib/object/utils.d.ts.map +1 -0
  281. package/dist/lib/object/utils.js +444 -0
  282. package/dist/lib/object/utils.mjs +305 -0
  283. package/dist/lib/primitive/boolean/boolean.cjs +407 -0
  284. package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
  285. package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
  286. package/dist/lib/primitive/boolean/boolean.js +615 -0
  287. package/dist/lib/primitive/boolean/boolean.mjs +386 -0
  288. package/dist/lib/primitive/boolean/index.cjs +382 -0
  289. package/dist/lib/primitive/boolean/index.d.ts +3 -0
  290. package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
  291. package/dist/lib/primitive/boolean/index.js +2 -0
  292. package/dist/lib/primitive/boolean/index.mjs +359 -0
  293. package/dist/lib/primitive/boolean/types.cjs +18 -0
  294. package/dist/lib/primitive/boolean/types.d.ts +14 -0
  295. package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
  296. package/dist/lib/primitive/boolean/types.js +1 -0
  297. package/dist/lib/primitive/boolean/types.mjs +0 -0
  298. package/dist/lib/primitive/date/date.cjs +1126 -0
  299. package/dist/lib/primitive/date/date.d.ts +641 -0
  300. package/dist/lib/primitive/date/date.d.ts.map +1 -0
  301. package/dist/lib/primitive/date/date.js +1998 -0
  302. package/dist/lib/primitive/date/date.mjs +1105 -0
  303. package/dist/lib/primitive/date/index.cjs +1128 -0
  304. package/dist/lib/primitive/date/index.d.ts +3 -0
  305. package/dist/lib/primitive/date/index.d.ts.map +1 -0
  306. package/dist/lib/primitive/date/index.js +2 -0
  307. package/dist/lib/primitive/date/index.mjs +1105 -0
  308. package/dist/lib/primitive/date/types.cjs +18 -0
  309. package/dist/lib/primitive/date/types.d.ts +205 -0
  310. package/dist/lib/primitive/date/types.d.ts.map +1 -0
  311. package/dist/lib/primitive/date/types.js +7 -0
  312. package/dist/lib/primitive/date/types.mjs +0 -0
  313. package/dist/lib/primitive/index.cjs +2338 -0
  314. package/dist/lib/primitive/index.d.ts +5 -0
  315. package/dist/lib/primitive/index.d.ts.map +1 -0
  316. package/dist/lib/primitive/index.js +4 -0
  317. package/dist/lib/primitive/index.mjs +2316 -0
  318. package/dist/lib/primitive/string/index.cjs +875 -0
  319. package/dist/lib/primitive/string/index.d.ts +3 -0
  320. package/dist/lib/primitive/string/index.d.ts.map +1 -0
  321. package/dist/lib/primitive/string/index.js +2 -0
  322. package/dist/lib/primitive/string/index.mjs +852 -0
  323. package/dist/lib/primitive/string/parser-2.cjs +543 -0
  324. package/dist/lib/primitive/string/parser-2.d.ts +17 -0
  325. package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
  326. package/dist/lib/primitive/string/parser-2.js +656 -0
  327. package/dist/lib/primitive/string/parser-2.mjs +522 -0
  328. package/dist/lib/primitive/string/parser.cjs +236 -0
  329. package/dist/lib/primitive/string/parser.d.ts +9 -0
  330. package/dist/lib/primitive/string/parser.d.ts.map +1 -0
  331. package/dist/lib/primitive/string/parser.js +775 -0
  332. package/dist/lib/primitive/string/parser.mjs +215 -0
  333. package/dist/lib/primitive/string/string.cjs +926 -0
  334. package/dist/lib/primitive/string/string.d.ts +535 -0
  335. package/dist/lib/primitive/string/string.d.ts.map +1 -0
  336. package/dist/lib/primitive/string/string.js +1301 -0
  337. package/dist/lib/primitive/string/string.mjs +903 -0
  338. package/dist/lib/primitive/string/types.cjs +18 -0
  339. package/dist/lib/primitive/string/types.d.ts +318 -0
  340. package/dist/lib/primitive/string/types.d.ts.map +1 -0
  341. package/dist/lib/primitive/string/types.js +5 -0
  342. package/dist/lib/primitive/string/types.mjs +0 -0
  343. package/dist/lib/primitive/types.cjs +18 -0
  344. package/dist/lib/primitive/types.d.ts +27 -0
  345. package/dist/lib/primitive/types.d.ts.map +1 -0
  346. package/dist/lib/primitive/types.js +1 -0
  347. package/dist/lib/primitive/types.mjs +0 -0
  348. package/dist/lib/url/index.cjs +327 -0
  349. package/dist/lib/url/index.d.ts +3 -0
  350. package/dist/lib/url/index.d.ts.map +1 -0
  351. package/dist/lib/url/index.js +2 -0
  352. package/dist/lib/url/index.mjs +304 -0
  353. package/dist/lib/url/parser.cjs +325 -0
  354. package/dist/lib/url/parser.d.ts +216 -0
  355. package/dist/lib/url/parser.d.ts.map +1 -0
  356. package/dist/lib/url/parser.js +488 -0
  357. package/dist/lib/url/parser.mjs +304 -0
  358. package/dist/lib/url/types.cjs +18 -0
  359. package/dist/lib/url/types.d.ts +18 -0
  360. package/dist/lib/url/types.d.ts.map +1 -0
  361. package/dist/lib/url/types.js +1 -0
  362. package/dist/lib/url/types.mjs +0 -0
  363. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  364. package/package.json +127 -0
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Type guard functions for mathematical types.
3
+ * @module TypeGuards
4
+ */
5
+ /**
6
+ * Checks if a string is a valid numeric string.
7
+ * @param value - The string to check
8
+ * @returns True if the string is a valid numeric string
9
+ */
10
+ export const isNumericString = (value) => {
11
+ const trimmed = value.trim();
12
+ if (trimmed === '')
13
+ return false;
14
+ // Allow: optional sign, digits, optional decimal with digits, optional exponent
15
+ if (!/^[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$/.test(trimmed))
16
+ return false;
17
+ const num = Number(trimmed);
18
+ return Number.isFinite(num);
19
+ };
20
+ /**
21
+ * Type guard to check if a value is numeric.
22
+ * @param value - The value to check
23
+ * @returns True if the value is numeric
24
+ */
25
+ export const isNumeric = (value) => {
26
+ if (typeof value === 'number')
27
+ return Number.isFinite(value);
28
+ if (typeof value === 'string')
29
+ return isNumericString(value);
30
+ return false;
31
+ };
32
+ /**
33
+ * Checks if a value is an integer with high performance
34
+ * @param value - The value to check
35
+ * @returns True if the value is a valid integer
36
+ * @example
37
+ * isInt(42) // true
38
+ * isInt("42") // true
39
+ * isInt("42.5") // false
40
+ * isInt(null) // false
41
+ */
42
+ export const isInt = (value) => {
43
+ // Fast path: number type
44
+ if (typeof value === 'number') {
45
+ return Number.isInteger(value);
46
+ }
47
+ // Fast path: string type
48
+ if (typeof value === 'string') {
49
+ const trimmed = value.trim();
50
+ if (!trimmed)
51
+ return false;
52
+ // Fast regex check: optional sign, digits only
53
+ if (!/^[-+]?\d+$/.test(trimmed))
54
+ return false;
55
+ // Parse and validate
56
+ const num = Number(trimmed);
57
+ return Number.isInteger(num) && Number.isFinite(num);
58
+ }
59
+ // Fast reject for non-numeric types
60
+ if (typeof value === 'boolean' || value == null) {
61
+ return false;
62
+ }
63
+ if (Array.isArray(value))
64
+ return false;
65
+ // For other types, attempt conversion
66
+ const num = Number(value);
67
+ return !Number.isNaN(num) && Number.isInteger(num) && Number.isFinite(num);
68
+ };
69
+ /**
70
+ * Checks if a value is a finite number (not NaN, Infinity, or string)
71
+ * @param value - The value to check
72
+ * @returns True if the value is a finite number
73
+ * @example
74
+ * isNumber(42) // true
75
+ * isNumber(NaN) // false
76
+ * isNumber(Infinity) // false
77
+ * isNumber("42") // false
78
+ */
79
+ export const isNumber = (value) => {
80
+ return typeof value === 'number' && Number.isFinite(value);
81
+ };
82
+ /**
83
+ * Checks if a value is a safe integer within Number.MAX_SAFE_INTEGER range
84
+ * @param value - The value to check
85
+ * @returns True if value is a safe integer
86
+ * @example
87
+ * isSafeInteger(42) // true
88
+ * isSafeInteger(9007199254740992) // false (beyond safe range)
89
+ */
90
+ export const isSafeInteger = (value) => {
91
+ return typeof value === 'number' && Number.isSafeInteger(value);
92
+ };
93
+ /**
94
+ * Checks if a value is a float (not an integer)
95
+ * @param value - The value to check
96
+ * @returns True if the value is a float
97
+ */
98
+ export const isFloat = (value) => {
99
+ if (typeof value !== 'number' || !Number.isFinite(value))
100
+ return false;
101
+ return !Number.isInteger(value);
102
+ };
103
+ /**
104
+ * Type guard to check if a number is an integer.
105
+ * @param value - The number to check
106
+ * @returns True if the number is an integer
107
+ */
108
+ export function isInteger(value) {
109
+ return Number.isInteger(value);
110
+ }
111
+ /**
112
+ * Type guard to check if a number is a finite number.
113
+ * @param value - The number to check
114
+ * @returns True if the number is finite
115
+ */
116
+ export function isFiniteNumber(value) {
117
+ return Number.isFinite(value);
118
+ }
119
+ /**
120
+ * Type guard to check if a value is a valid Vector2D.
121
+ * @param value - The value to check
122
+ * @returns True if the value is a valid Vector2D
123
+ */
124
+ export function isVector2D(value) {
125
+ return (typeof value === 'object' &&
126
+ value !== null &&
127
+ 'x' in value &&
128
+ 'y' in value &&
129
+ typeof value.x === 'number' &&
130
+ typeof value.y === 'number');
131
+ }
132
+ /**
133
+ * Type guard to check if a value is a valid Vector3D.
134
+ * @param value - The value to check
135
+ * @returns True if the value is a valid Vector3D
136
+ */
137
+ export function isVector3D(value) {
138
+ return (typeof value === 'object' &&
139
+ value !== null &&
140
+ 'x' in value &&
141
+ 'y' in value &&
142
+ 'z' in value &&
143
+ typeof value.x === 'number' &&
144
+ typeof value.y === 'number' &&
145
+ typeof value.z === 'number');
146
+ }
147
+ /**
148
+ * Type guard to check if a value is a valid ComplexNumber.
149
+ * @param value - The value to check
150
+ * @returns True if the value is a valid ComplexNumber
151
+ */
152
+ export function isComplexNumber(value) {
153
+ return (typeof value === 'object' &&
154
+ value !== null &&
155
+ 'real' in value &&
156
+ 'imag' in value &&
157
+ typeof value.real === 'number' &&
158
+ typeof value.imag === 'number');
159
+ }
160
+ /**
161
+ * Type guard to check if a value is a valid Fraction.
162
+ * @param value - The value to check
163
+ * @returns True if the value is a valid Fraction
164
+ */
165
+ export function isFraction(value) {
166
+ return (typeof value === 'object' &&
167
+ value !== null &&
168
+ 'numerator' in value &&
169
+ 'denominator' in value &&
170
+ typeof value.numerator === 'number' &&
171
+ typeof value.denominator === 'number' &&
172
+ value.denominator !== 0);
173
+ }
174
+ /**
175
+ * Type guard to check if a value is a valid Matrix.
176
+ * @param value - The value to check
177
+ * @returns True if the value is a valid Matrix
178
+ */
179
+ export function isMatrix(value) {
180
+ return (typeof value === 'object' &&
181
+ value !== null &&
182
+ 'rows' in value &&
183
+ 'columns' in value &&
184
+ 'data' in value &&
185
+ typeof value.rows === 'number' &&
186
+ typeof value.columns === 'number' &&
187
+ Array.isArray(value.data) &&
188
+ value.data.every((row) => Array.isArray(row)));
189
+ }
190
+ /**
191
+ * Type guard to check if a number is positive (> 0).
192
+ * @param value - The number to check
193
+ * @returns True if the number is positive
194
+ */
195
+ export const isPositive = (value) => {
196
+ return Number.isFinite(value) && value > 0;
197
+ };
198
+ /**
199
+ * Type guard to check if a number is negative (< 0).
200
+ * @param value - The number to check
201
+ * @returns True if the number is negative
202
+ */
203
+ export const isNegative = (value) => {
204
+ return Number.isFinite(value) && value < 0;
205
+ };
206
+ /**
207
+ * Type guard to check if a number is non-negative (>= 0).
208
+ * @param value - The number to check
209
+ * @returns True if the number is non-negative
210
+ */
211
+ export function isNonNegative(value) {
212
+ return Number.isFinite(value) && value >= 0;
213
+ }
214
+ /**
215
+ * Type guard to check if a number is non-positive (<= 0).
216
+ * @param value - The number to check
217
+ * @returns True if the number is non-positive
218
+ */
219
+ export function isNonPositive(value) {
220
+ return Number.isFinite(value) && value <= 0;
221
+ }
222
+ /**
223
+ * Checks if a number is zero (or very close to zero)
224
+ */
225
+ export const isZero = (value, epsilon = 1e-10) => {
226
+ return Number.isFinite(value) && Math.abs(value) < epsilon;
227
+ };
228
+ /**
229
+ * Type guard to check if a number is within a range (inclusive).
230
+ * @param value - The number to check
231
+ * @param min - Minimum value
232
+ * @param max - Maximum value
233
+ * @param inclusive - Whether the range is inclusive
234
+ * @returns True if the number is within the range
235
+ */
236
+ export function isInRange(value, min, max, inclusive = true) {
237
+ return inclusive ? value >= min && value <= max : value > min && value < max;
238
+ }
239
+ /**
240
+ * Type guard to check if a number is even.
241
+ * @param value - The number to check
242
+ * @returns True if the number is even
243
+ */
244
+ export function isEven(value) {
245
+ // return value % 2 === 0;
246
+ return (value & 1) === 0;
247
+ }
248
+ /**
249
+ * Type guard to check if a number is odd.
250
+ * @param value - The number to check
251
+ * @returns True if the number is odd
252
+ */
253
+ export function isOdd(value) {
254
+ // return value % 2 !== 0;
255
+ return (value & 1) === 1;
256
+ }
257
+ /**
258
+ * Checks if a number is prime.
259
+ * @param n - The number to check
260
+ * @returns True if the number is prime, false otherwise
261
+ */
262
+ export const isPrime = (n) => {
263
+ // First check if it's an integer
264
+ if (!Number.isInteger(n)) {
265
+ return false;
266
+ }
267
+ if (n <= 1)
268
+ return false;
269
+ if (n <= 3)
270
+ return true;
271
+ if (n % 2 === 0 || n % 3 === 0)
272
+ return false;
273
+ for (let i = 5; i * i <= n; i += 6) {
274
+ if (n % i === 0 || n % (i + 2) === 0)
275
+ return false;
276
+ }
277
+ return true;
278
+ };
279
+ /**
280
+ * Checks if two numbers are approximately equal.
281
+ * @param a - First number
282
+ * @param b - Second number
283
+ * @param epsilon - The maximum allowed difference between the numbers
284
+ * @returns True if the numbers are approximately equal, false otherwise
285
+ */
286
+ export const approxEqual = (a, b, epsilon = Math.E) => {
287
+ // Handle edge cases
288
+ if (a === b)
289
+ return true;
290
+ if (!Number.isFinite(a) || !Number.isFinite(b)) {
291
+ // Both are NaN or both are same infinity
292
+ return a === b;
293
+ }
294
+ // Use relative epsilon for better precision across different magnitudes
295
+ const absA = Math.abs(a);
296
+ const absB = Math.abs(b);
297
+ const diff = Math.abs(a - b);
298
+ // For very small numbers, use absolute epsilon
299
+ if (a === 0 || b === 0 || diff < epsilon) {
300
+ return diff < epsilon;
301
+ }
302
+ if (diff > epsilon)
303
+ return false;
304
+ // For larger numbers, use relative epsilon
305
+ const relativeError = diff / Math.min(absA + absB, Number.MAX_SAFE_INTEGER);
306
+ return relativeError < epsilon;
307
+ };
308
+ /**
309
+ * Checks if a number is a power of two
310
+ * @param n - The number to check
311
+ * Optimized: Bitwise trick
312
+ */
313
+ export const isPowerOfTwo = (n) => {
314
+ return n > 0 && (n & (n - 1)) === 0;
315
+ };
@@ -0,0 +1,144 @@
1
+ /*! @fluixi/utils v1.0.0-alpha.100 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
+
3
+ // src/lib/maths/guards.ts
4
+ var isNumericString = (value) => {
5
+ const trimmed = value.trim();
6
+ if (trimmed === "") return false;
7
+ if (!/^[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$/.test(trimmed)) return false;
8
+ const num = Number(trimmed);
9
+ return Number.isFinite(num);
10
+ };
11
+ var isNumeric = (value) => {
12
+ if (typeof value === "number") return Number.isFinite(value);
13
+ if (typeof value === "string") return isNumericString(value);
14
+ return false;
15
+ };
16
+ var isInt = (value) => {
17
+ if (typeof value === "number") {
18
+ return Number.isInteger(value);
19
+ }
20
+ if (typeof value === "string") {
21
+ const trimmed = value.trim();
22
+ if (!trimmed) return false;
23
+ if (!/^[-+]?\d+$/.test(trimmed)) return false;
24
+ const num2 = Number(trimmed);
25
+ return Number.isInteger(num2) && Number.isFinite(num2);
26
+ }
27
+ if (typeof value === "boolean" || value == null) {
28
+ return false;
29
+ }
30
+ if (Array.isArray(value)) return false;
31
+ const num = Number(value);
32
+ return !Number.isNaN(num) && Number.isInteger(num) && Number.isFinite(num);
33
+ };
34
+ var isNumber = (value) => {
35
+ return typeof value === "number" && Number.isFinite(value);
36
+ };
37
+ var isSafeInteger = (value) => {
38
+ return typeof value === "number" && Number.isSafeInteger(value);
39
+ };
40
+ var isFloat = (value) => {
41
+ if (typeof value !== "number" || !Number.isFinite(value)) return false;
42
+ return !Number.isInteger(value);
43
+ };
44
+ function isInteger(value) {
45
+ return Number.isInteger(value);
46
+ }
47
+ function isFiniteNumber(value) {
48
+ return Number.isFinite(value);
49
+ }
50
+ function isVector2D(value) {
51
+ return typeof value === "object" && value !== null && "x" in value && "y" in value && typeof value.x === "number" && typeof value.y === "number";
52
+ }
53
+ function isVector3D(value) {
54
+ return typeof value === "object" && value !== null && "x" in value && "y" in value && "z" in value && typeof value.x === "number" && typeof value.y === "number" && typeof value.z === "number";
55
+ }
56
+ function isComplexNumber(value) {
57
+ return typeof value === "object" && value !== null && "real" in value && "imag" in value && typeof value.real === "number" && typeof value.imag === "number";
58
+ }
59
+ function isFraction(value) {
60
+ return typeof value === "object" && value !== null && "numerator" in value && "denominator" in value && typeof value.numerator === "number" && typeof value.denominator === "number" && value.denominator !== 0;
61
+ }
62
+ function isMatrix(value) {
63
+ return typeof value === "object" && value !== null && "rows" in value && "columns" in value && "data" in value && typeof value.rows === "number" && typeof value.columns === "number" && Array.isArray(value.data) && value.data.every((row) => Array.isArray(row));
64
+ }
65
+ var isPositive = (value) => {
66
+ return Number.isFinite(value) && value > 0;
67
+ };
68
+ var isNegative = (value) => {
69
+ return Number.isFinite(value) && value < 0;
70
+ };
71
+ function isNonNegative(value) {
72
+ return Number.isFinite(value) && value >= 0;
73
+ }
74
+ function isNonPositive(value) {
75
+ return Number.isFinite(value) && value <= 0;
76
+ }
77
+ var isZero = (value, epsilon = 1e-10) => {
78
+ return Number.isFinite(value) && Math.abs(value) < epsilon;
79
+ };
80
+ function isInRange(value, min, max, inclusive = true) {
81
+ return inclusive ? value >= min && value <= max : value > min && value < max;
82
+ }
83
+ function isEven(value) {
84
+ return (value & 1) === 0;
85
+ }
86
+ function isOdd(value) {
87
+ return (value & 1) === 1;
88
+ }
89
+ var isPrime = (n) => {
90
+ if (!Number.isInteger(n)) {
91
+ return false;
92
+ }
93
+ if (n <= 1) return false;
94
+ if (n <= 3) return true;
95
+ if (n % 2 === 0 || n % 3 === 0) return false;
96
+ for (let i = 5; i * i <= n; i += 6) {
97
+ if (n % i === 0 || n % (i + 2) === 0) return false;
98
+ }
99
+ return true;
100
+ };
101
+ var approxEqual = (a, b, epsilon = Math.E) => {
102
+ if (a === b) return true;
103
+ if (!Number.isFinite(a) || !Number.isFinite(b)) {
104
+ return a === b;
105
+ }
106
+ const absA = Math.abs(a);
107
+ const absB = Math.abs(b);
108
+ const diff = Math.abs(a - b);
109
+ if (a === 0 || b === 0 || diff < epsilon) {
110
+ return diff < epsilon;
111
+ }
112
+ if (diff > epsilon) return false;
113
+ const relativeError = diff / Math.min(absA + absB, Number.MAX_SAFE_INTEGER);
114
+ return relativeError < epsilon;
115
+ };
116
+ var isPowerOfTwo = (n) => {
117
+ return n > 0 && (n & n - 1) === 0;
118
+ };
119
+ export {
120
+ approxEqual,
121
+ isComplexNumber,
122
+ isEven,
123
+ isFiniteNumber,
124
+ isFloat,
125
+ isFraction,
126
+ isInRange,
127
+ isInt,
128
+ isInteger,
129
+ isMatrix,
130
+ isNegative,
131
+ isNonNegative,
132
+ isNonPositive,
133
+ isNumber,
134
+ isNumeric,
135
+ isNumericString,
136
+ isOdd,
137
+ isPositive,
138
+ isPowerOfTwo,
139
+ isPrime,
140
+ isSafeInteger,
141
+ isVector2D,
142
+ isVector3D,
143
+ isZero
144
+ };