@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.
- package/LICENSE +21 -0
- package/README.md +68 -0
- package/dist/index.cjs +2858 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +2838 -0
- package/dist/lib/array/advanced.cjs +2227 -0
- package/dist/lib/array/advanced.d.ts +1116 -0
- package/dist/lib/array/advanced.d.ts.map +1 -0
- package/dist/lib/array/advanced.js +2429 -0
- package/dist/lib/array/advanced.mjs +2204 -0
- package/dist/lib/array/array.cjs +57 -0
- package/dist/lib/array/array.d.ts +6 -0
- package/dist/lib/array/array.d.ts.map +1 -0
- package/dist/lib/array/array.js +31 -0
- package/dist/lib/array/array.mjs +36 -0
- package/dist/lib/array/index.cjs +2344 -0
- package/dist/lib/array/index.d.ts +4 -0
- package/dist/lib/array/index.d.ts.map +1 -0
- package/dist/lib/array/index.js +3 -0
- package/dist/lib/array/index.mjs +2322 -0
- package/dist/lib/array/utils.cjs +103 -0
- package/dist/lib/array/utils.d.ts +100 -0
- package/dist/lib/array/utils.d.ts.map +1 -0
- package/dist/lib/array/utils.js +165 -0
- package/dist/lib/array/utils.mjs +82 -0
- package/dist/lib/color/color.cjs +2190 -0
- package/dist/lib/color/color.d.ts +366 -0
- package/dist/lib/color/color.d.ts.map +1 -0
- package/dist/lib/color/color.js +722 -0
- package/dist/lib/color/color.mjs +2167 -0
- package/dist/lib/color/constants.cjs +380 -0
- package/dist/lib/color/constants.d.ts +361 -0
- package/dist/lib/color/constants.d.ts.map +1 -0
- package/dist/lib/color/constants.js +358 -0
- package/dist/lib/color/constants.mjs +359 -0
- package/dist/lib/color/conversions.cjs +629 -0
- package/dist/lib/color/conversions.d.ts +166 -0
- package/dist/lib/color/conversions.d.ts.map +1 -0
- package/dist/lib/color/conversions.js +766 -0
- package/dist/lib/color/conversions.mjs +608 -0
- package/dist/lib/color/helpers.cjs +2534 -0
- package/dist/lib/color/helpers.d.ts +75 -0
- package/dist/lib/color/helpers.d.ts.map +1 -0
- package/dist/lib/color/helpers.js +419 -0
- package/dist/lib/color/helpers.mjs +2511 -0
- package/dist/lib/color/index.cjs +2641 -0
- package/dist/lib/color/index.d.ts +12 -0
- package/dist/lib/color/index.d.ts.map +1 -0
- package/dist/lib/color/index.js +15 -0
- package/dist/lib/color/index.mjs +2619 -0
- package/dist/lib/color/types.cjs +18 -0
- package/dist/lib/color/types.d.ts +179 -0
- package/dist/lib/color/types.d.ts.map +1 -0
- package/dist/lib/color/types.js +1 -0
- package/dist/lib/color/types.mjs +0 -0
- package/dist/lib/color/utils.cjs +962 -0
- package/dist/lib/color/utils.d.ts +199 -0
- package/dist/lib/color/utils.d.ts.map +1 -0
- package/dist/lib/color/utils.js +858 -0
- package/dist/lib/color/utils.mjs +939 -0
- package/dist/lib/compare/comparators.cjs +171 -0
- package/dist/lib/compare/comparators.d.ts +65 -0
- package/dist/lib/compare/comparators.d.ts.map +1 -0
- package/dist/lib/compare/comparators.js +210 -0
- package/dist/lib/compare/comparators.mjs +150 -0
- package/dist/lib/compare/index.cjs +172 -0
- package/dist/lib/compare/index.d.ts +2 -0
- package/dist/lib/compare/index.d.ts.map +1 -0
- package/dist/lib/compare/index.js +1 -0
- package/dist/lib/compare/index.mjs +152 -0
- package/dist/lib/cookie/codec.cjs +72 -0
- package/dist/lib/cookie/codec.d.ts +22 -0
- package/dist/lib/cookie/codec.d.ts.map +1 -0
- package/dist/lib/cookie/codec.js +67 -0
- package/dist/lib/cookie/codec.mjs +51 -0
- package/dist/lib/cookie/index.cjs +75 -0
- package/dist/lib/cookie/index.d.ts +2 -0
- package/dist/lib/cookie/index.d.ts.map +1 -0
- package/dist/lib/cookie/index.js +1 -0
- package/dist/lib/cookie/index.mjs +53 -0
- package/dist/lib/crypto/hash.cjs +83 -0
- package/dist/lib/crypto/hash.d.ts +6 -0
- package/dist/lib/crypto/hash.d.ts.map +1 -0
- package/dist/lib/crypto/hash.js +53 -0
- package/dist/lib/crypto/hash.mjs +62 -0
- package/dist/lib/crypto/index.cjs +85 -0
- package/dist/lib/crypto/index.d.ts +2 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +1 -0
- package/dist/lib/crypto/index.mjs +62 -0
- package/dist/lib/dom/events.cjs +40 -0
- package/dist/lib/dom/events.d.ts +159 -0
- package/dist/lib/dom/events.d.ts.map +1 -0
- package/dist/lib/dom/events.js +50 -0
- package/dist/lib/dom/events.mjs +19 -0
- package/dist/lib/dom/index.cjs +78 -0
- package/dist/lib/dom/index.d.ts +3 -0
- package/dist/lib/dom/index.d.ts.map +1 -0
- package/dist/lib/dom/index.js +2 -0
- package/dist/lib/dom/index.mjs +56 -0
- package/dist/lib/dom/utils.cjs +57 -0
- package/dist/lib/dom/utils.d.ts +6 -0
- package/dist/lib/dom/utils.d.ts.map +1 -0
- package/dist/lib/dom/utils.js +37 -0
- package/dist/lib/dom/utils.mjs +36 -0
- package/dist/lib/functions/functions.cjs +366 -0
- package/dist/lib/functions/functions.d.ts +329 -0
- package/dist/lib/functions/functions.d.ts.map +1 -0
- package/dist/lib/functions/functions.js +585 -0
- package/dist/lib/functions/functions.mjs +345 -0
- package/dist/lib/functions/index.cjs +369 -0
- package/dist/lib/functions/index.d.ts +3 -0
- package/dist/lib/functions/index.d.ts.map +1 -0
- package/dist/lib/functions/index.js +1 -0
- package/dist/lib/functions/index.mjs +347 -0
- package/dist/lib/functions/types.cjs +18 -0
- package/dist/lib/functions/types.d.ts +2 -0
- package/dist/lib/functions/types.d.ts.map +1 -0
- package/dist/lib/functions/types.js +1 -0
- package/dist/lib/functions/types.mjs +0 -0
- package/dist/lib/helpers.cjs +78 -0
- package/dist/lib/helpers.d.ts +13 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +66 -0
- package/dist/lib/helpers.mjs +59 -0
- package/dist/lib/index.cjs +2857 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +8 -0
- package/dist/lib/index.mjs +2836 -0
- package/dist/lib/maths/constants.cjs +70 -0
- package/dist/lib/maths/constants.d.ts +84 -0
- package/dist/lib/maths/constants.d.ts.map +1 -0
- package/dist/lib/maths/constants.js +79 -0
- package/dist/lib/maths/constants.mjs +50 -0
- package/dist/lib/maths/fn/advanced.cjs +231 -0
- package/dist/lib/maths/fn/advanced.d.ts +149 -0
- package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
- package/dist/lib/maths/fn/advanced.js +264 -0
- package/dist/lib/maths/fn/advanced.mjs +208 -0
- package/dist/lib/maths/fn/basic.cjs +212 -0
- package/dist/lib/maths/fn/basic.d.ts +182 -0
- package/dist/lib/maths/fn/basic.d.ts.map +1 -0
- package/dist/lib/maths/fn/basic.js +343 -0
- package/dist/lib/maths/fn/basic.mjs +191 -0
- package/dist/lib/maths/fn/complex.cjs +268 -0
- package/dist/lib/maths/fn/complex.d.ts +153 -0
- package/dist/lib/maths/fn/complex.d.ts.map +1 -0
- package/dist/lib/maths/fn/complex.js +383 -0
- package/dist/lib/maths/fn/complex.mjs +247 -0
- package/dist/lib/maths/fn/index.cjs +877 -0
- package/dist/lib/maths/fn/index.d.ts +10 -0
- package/dist/lib/maths/fn/index.d.ts.map +1 -0
- package/dist/lib/maths/fn/index.js +9 -0
- package/dist/lib/maths/fn/index.mjs +855 -0
- package/dist/lib/maths/fn/trigo.cjs +179 -0
- package/dist/lib/maths/fn/trigo.d.ts +147 -0
- package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
- package/dist/lib/maths/fn/trigo.js +227 -0
- package/dist/lib/maths/fn/trigo.mjs +156 -0
- package/dist/lib/maths/fn/vector.cjs +728 -0
- package/dist/lib/maths/fn/vector.d.ts +512 -0
- package/dist/lib/maths/fn/vector.d.ts.map +1 -0
- package/dist/lib/maths/fn/vector.js +1136 -0
- package/dist/lib/maths/fn/vector.mjs +707 -0
- package/dist/lib/maths/formatter.cjs +61 -0
- package/dist/lib/maths/formatter.d.ts +35 -0
- package/dist/lib/maths/formatter.d.ts.map +1 -0
- package/dist/lib/maths/formatter.js +56 -0
- package/dist/lib/maths/formatter.mjs +40 -0
- package/dist/lib/maths/guards.cjs +164 -0
- package/dist/lib/maths/guards.d.ts +166 -0
- package/dist/lib/maths/guards.d.ts.map +1 -0
- package/dist/lib/maths/guards.js +315 -0
- package/dist/lib/maths/guards.mjs +144 -0
- package/dist/lib/maths/index.cjs +1152 -0
- package/dist/lib/maths/index.d.ts +24 -0
- package/dist/lib/maths/index.d.ts.map +1 -0
- package/dist/lib/maths/index.js +29 -0
- package/dist/lib/maths/index.mjs +1130 -0
- package/dist/lib/maths/parser.cjs +75 -0
- package/dist/lib/maths/parser.d.ts +20 -0
- package/dist/lib/maths/parser.d.ts.map +1 -0
- package/dist/lib/maths/parser.js +78 -0
- package/dist/lib/maths/parser.mjs +54 -0
- package/dist/lib/maths/random.cjs +49 -0
- package/dist/lib/maths/random.d.ts +27 -0
- package/dist/lib/maths/random.d.ts.map +1 -0
- package/dist/lib/maths/random.js +49 -0
- package/dist/lib/maths/random.mjs +28 -0
- package/dist/lib/maths/types/advanced.cjs +18 -0
- package/dist/lib/maths/types/advanced.d.ts +357 -0
- package/dist/lib/maths/types/advanced.d.ts.map +1 -0
- package/dist/lib/maths/types/advanced.js +5 -0
- package/dist/lib/maths/types/advanced.mjs +0 -0
- package/dist/lib/maths/types/basic.cjs +18 -0
- package/dist/lib/maths/types/basic.d.ts +95 -0
- package/dist/lib/maths/types/basic.d.ts.map +1 -0
- package/dist/lib/maths/types/basic.js +5 -0
- package/dist/lib/maths/types/basic.mjs +0 -0
- package/dist/lib/maths/types/index.cjs +19 -0
- package/dist/lib/maths/types/index.d.ts +4 -0
- package/dist/lib/maths/types/index.d.ts.map +1 -0
- package/dist/lib/maths/types/index.js +3 -0
- package/dist/lib/maths/types/index.mjs +1 -0
- package/dist/lib/maths/types/negative.cjs +18 -0
- package/dist/lib/maths/types/negative.d.ts +51 -0
- package/dist/lib/maths/types/negative.d.ts.map +1 -0
- package/dist/lib/maths/types/negative.js +5 -0
- package/dist/lib/maths/types/negative.mjs +0 -0
- package/dist/lib/maths/types/operations.cjs +18 -0
- package/dist/lib/maths/types/operations.d.ts +188 -0
- package/dist/lib/maths/types/operations.d.ts.map +1 -0
- package/dist/lib/maths/types/operations.js +6 -0
- package/dist/lib/maths/types/operations.mjs +0 -0
- package/dist/lib/object/clone.cjs +88 -0
- package/dist/lib/object/clone.d.ts +46 -0
- package/dist/lib/object/clone.d.ts.map +1 -0
- package/dist/lib/object/clone.js +104 -0
- package/dist/lib/object/clone.mjs +65 -0
- package/dist/lib/object/diff.cjs +573 -0
- package/dist/lib/object/diff.d.ts +203 -0
- package/dist/lib/object/diff.d.ts.map +1 -0
- package/dist/lib/object/diff.js +805 -0
- package/dist/lib/object/diff.mjs +550 -0
- package/dist/lib/object/getter-setter.cjs +2351 -0
- package/dist/lib/object/getter-setter.d.ts +361 -0
- package/dist/lib/object/getter-setter.d.ts.map +1 -0
- package/dist/lib/object/getter-setter.js +1771 -0
- package/dist/lib/object/getter-setter.mjs +2330 -0
- package/dist/lib/object/index.cjs +3956 -0
- package/dist/lib/object/index.d.ts +13 -0
- package/dist/lib/object/index.d.ts.map +1 -0
- package/dist/lib/object/index.js +12 -0
- package/dist/lib/object/index.mjs +3936 -0
- package/dist/lib/object/merge.cjs +1029 -0
- package/dist/lib/object/merge.d.ts +93 -0
- package/dist/lib/object/merge.d.ts.map +1 -0
- package/dist/lib/object/merge.js +474 -0
- package/dist/lib/object/merge.mjs +1006 -0
- package/dist/lib/object/object.cjs +280 -0
- package/dist/lib/object/object.d.ts +128 -0
- package/dist/lib/object/object.d.ts.map +1 -0
- package/dist/lib/object/object.js +432 -0
- package/dist/lib/object/object.mjs +257 -0
- package/dist/lib/object/omit.cjs +2022 -0
- package/dist/lib/object/omit.d.ts +351 -0
- package/dist/lib/object/omit.d.ts.map +1 -0
- package/dist/lib/object/omit.js +656 -0
- package/dist/lib/object/omit.mjs +1999 -0
- package/dist/lib/object/reconcile.cjs +126 -0
- package/dist/lib/object/reconcile.d.ts +7 -0
- package/dist/lib/object/reconcile.d.ts.map +1 -0
- package/dist/lib/object/reconcile.js +122 -0
- package/dist/lib/object/reconcile.mjs +105 -0
- package/dist/lib/object/selector.cjs +303 -0
- package/dist/lib/object/selector.d.ts +50 -0
- package/dist/lib/object/selector.d.ts.map +1 -0
- package/dist/lib/object/selector.js +371 -0
- package/dist/lib/object/selector.mjs +282 -0
- package/dist/lib/object/sort.cjs +209 -0
- package/dist/lib/object/sort.d.ts +149 -0
- package/dist/lib/object/sort.d.ts.map +1 -0
- package/dist/lib/object/sort.js +298 -0
- package/dist/lib/object/sort.mjs +186 -0
- package/dist/lib/object/transform.cjs +2211 -0
- package/dist/lib/object/transform.d.ts +620 -0
- package/dist/lib/object/transform.d.ts.map +1 -0
- package/dist/lib/object/transform.js +1058 -0
- package/dist/lib/object/transform.mjs +2190 -0
- package/dist/lib/object/types.cjs +18 -0
- package/dist/lib/object/types.d.ts +250 -0
- package/dist/lib/object/types.d.ts.map +1 -0
- package/dist/lib/object/types.js +1 -0
- package/dist/lib/object/types.mjs +0 -0
- package/dist/lib/object/utils.cjs +326 -0
- package/dist/lib/object/utils.d.ts +165 -0
- package/dist/lib/object/utils.d.ts.map +1 -0
- package/dist/lib/object/utils.js +444 -0
- package/dist/lib/object/utils.mjs +305 -0
- package/dist/lib/primitive/boolean/boolean.cjs +407 -0
- package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
- package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/boolean.js +615 -0
- package/dist/lib/primitive/boolean/boolean.mjs +386 -0
- package/dist/lib/primitive/boolean/index.cjs +382 -0
- package/dist/lib/primitive/boolean/index.d.ts +3 -0
- package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/index.js +2 -0
- package/dist/lib/primitive/boolean/index.mjs +359 -0
- package/dist/lib/primitive/boolean/types.cjs +18 -0
- package/dist/lib/primitive/boolean/types.d.ts +14 -0
- package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/types.js +1 -0
- package/dist/lib/primitive/boolean/types.mjs +0 -0
- package/dist/lib/primitive/date/date.cjs +1126 -0
- package/dist/lib/primitive/date/date.d.ts +641 -0
- package/dist/lib/primitive/date/date.d.ts.map +1 -0
- package/dist/lib/primitive/date/date.js +1998 -0
- package/dist/lib/primitive/date/date.mjs +1105 -0
- package/dist/lib/primitive/date/index.cjs +1128 -0
- package/dist/lib/primitive/date/index.d.ts +3 -0
- package/dist/lib/primitive/date/index.d.ts.map +1 -0
- package/dist/lib/primitive/date/index.js +2 -0
- package/dist/lib/primitive/date/index.mjs +1105 -0
- package/dist/lib/primitive/date/types.cjs +18 -0
- package/dist/lib/primitive/date/types.d.ts +205 -0
- package/dist/lib/primitive/date/types.d.ts.map +1 -0
- package/dist/lib/primitive/date/types.js +7 -0
- package/dist/lib/primitive/date/types.mjs +0 -0
- package/dist/lib/primitive/index.cjs +2338 -0
- package/dist/lib/primitive/index.d.ts +5 -0
- package/dist/lib/primitive/index.d.ts.map +1 -0
- package/dist/lib/primitive/index.js +4 -0
- package/dist/lib/primitive/index.mjs +2316 -0
- package/dist/lib/primitive/string/index.cjs +875 -0
- package/dist/lib/primitive/string/index.d.ts +3 -0
- package/dist/lib/primitive/string/index.d.ts.map +1 -0
- package/dist/lib/primitive/string/index.js +2 -0
- package/dist/lib/primitive/string/index.mjs +852 -0
- package/dist/lib/primitive/string/parser-2.cjs +543 -0
- package/dist/lib/primitive/string/parser-2.d.ts +17 -0
- package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser-2.js +656 -0
- package/dist/lib/primitive/string/parser-2.mjs +522 -0
- package/dist/lib/primitive/string/parser.cjs +236 -0
- package/dist/lib/primitive/string/parser.d.ts +9 -0
- package/dist/lib/primitive/string/parser.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser.js +775 -0
- package/dist/lib/primitive/string/parser.mjs +215 -0
- package/dist/lib/primitive/string/string.cjs +926 -0
- package/dist/lib/primitive/string/string.d.ts +535 -0
- package/dist/lib/primitive/string/string.d.ts.map +1 -0
- package/dist/lib/primitive/string/string.js +1301 -0
- package/dist/lib/primitive/string/string.mjs +903 -0
- package/dist/lib/primitive/string/types.cjs +18 -0
- package/dist/lib/primitive/string/types.d.ts +318 -0
- package/dist/lib/primitive/string/types.d.ts.map +1 -0
- package/dist/lib/primitive/string/types.js +5 -0
- package/dist/lib/primitive/string/types.mjs +0 -0
- package/dist/lib/primitive/types.cjs +18 -0
- package/dist/lib/primitive/types.d.ts +27 -0
- package/dist/lib/primitive/types.d.ts.map +1 -0
- package/dist/lib/primitive/types.js +1 -0
- package/dist/lib/primitive/types.mjs +0 -0
- package/dist/lib/url/index.cjs +327 -0
- package/dist/lib/url/index.d.ts +3 -0
- package/dist/lib/url/index.d.ts.map +1 -0
- package/dist/lib/url/index.js +2 -0
- package/dist/lib/url/index.mjs +304 -0
- package/dist/lib/url/parser.cjs +325 -0
- package/dist/lib/url/parser.d.ts +216 -0
- package/dist/lib/url/parser.d.ts.map +1 -0
- package/dist/lib/url/parser.js +488 -0
- package/dist/lib/url/parser.mjs +304 -0
- package/dist/lib/url/types.cjs +18 -0
- package/dist/lib/url/types.d.ts +18 -0
- package/dist/lib/url/types.d.ts.map +1 -0
- package/dist/lib/url/types.js +1 -0
- package/dist/lib/url/types.mjs +0 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- 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
|
+
};
|