@alwatr/is-number 9.33.0 → 9.36.0
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/README.md +60 -60
- package/dist/dev/main.js +5 -0
- package/dist/dev/main.js.map +10 -0
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/package.json +10 -7
package/README.md
CHANGED
|
@@ -16,14 +16,14 @@ npm install @alwatr/is-number
|
|
|
16
16
|
import {isNumber, toNumber, isFiniteNumber} from '@alwatr/is-number';
|
|
17
17
|
|
|
18
18
|
// Check if a value is a number
|
|
19
|
-
isNumber(123);
|
|
20
|
-
isNumber('123');
|
|
21
|
-
isNumber('abc');
|
|
19
|
+
isNumber(123); // true
|
|
20
|
+
isNumber('123'); // true
|
|
21
|
+
isNumber('abc'); // false
|
|
22
22
|
|
|
23
23
|
// Convert a value to a number if possible
|
|
24
|
-
toNumber(123);
|
|
25
|
-
toNumber('123');
|
|
26
|
-
toNumber('abc');
|
|
24
|
+
toNumber(123); // 123
|
|
25
|
+
toNumber('123'); // 123
|
|
26
|
+
toNumber('abc'); // null
|
|
27
27
|
|
|
28
28
|
// Check if a value is a finite number (without type coercion)
|
|
29
29
|
isFiniteNumber(123); // true
|
|
@@ -51,12 +51,12 @@ this doesn't coerce values to numbers before checking.
|
|
|
51
51
|
JavaScript type behavior can be confusing. This library helps to simplify number validation:
|
|
52
52
|
|
|
53
53
|
```ts
|
|
54
|
-
console.log(typeof '123');
|
|
55
|
-
console.log(+[]);
|
|
56
|
-
console.log(+'');
|
|
57
|
-
console.log(+' ');
|
|
58
|
-
console.log(typeof NaN);
|
|
59
|
-
console.log(typeof Infinity);
|
|
54
|
+
console.log(typeof '123'); // 'string'
|
|
55
|
+
console.log(+[]); // 0
|
|
56
|
+
console.log(+''); // 0
|
|
57
|
+
console.log(+' '); // 0
|
|
58
|
+
console.log(typeof NaN); // 'number'
|
|
59
|
+
console.log(typeof Infinity); // 'number'
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
### isNumber Examples
|
|
@@ -64,37 +64,37 @@ console.log(typeof Infinity); // 'number'
|
|
|
64
64
|
#### Returns `true`
|
|
65
65
|
|
|
66
66
|
```ts
|
|
67
|
-
isNumber(5e3);
|
|
68
|
-
isNumber(0xff);
|
|
69
|
-
isNumber(-1.1);
|
|
70
|
-
isNumber(0);
|
|
71
|
-
isNumber(1);
|
|
72
|
-
isNumber(1.1);
|
|
73
|
-
isNumber('-1.1');
|
|
74
|
-
isNumber('0');
|
|
75
|
-
isNumber('0xff');
|
|
76
|
-
isNumber('1');
|
|
77
|
-
isNumber('1.1');
|
|
78
|
-
isNumber('5e3');
|
|
79
|
-
isNumber('012');
|
|
80
|
-
isNumber(' 123 ');
|
|
67
|
+
isNumber(5e3); // true
|
|
68
|
+
isNumber(0xff); // true
|
|
69
|
+
isNumber(-1.1); // true
|
|
70
|
+
isNumber(0); // true
|
|
71
|
+
isNumber(1); // true
|
|
72
|
+
isNumber(1.1); // true
|
|
73
|
+
isNumber('-1.1'); // true
|
|
74
|
+
isNumber('0'); // true
|
|
75
|
+
isNumber('0xff'); // true
|
|
76
|
+
isNumber('1'); // true
|
|
77
|
+
isNumber('1.1'); // true
|
|
78
|
+
isNumber('5e3'); // true
|
|
79
|
+
isNumber('012'); // true
|
|
80
|
+
isNumber(' 123 '); // true
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
#### Returns `false`
|
|
84
84
|
|
|
85
85
|
```ts
|
|
86
|
-
isNumber(Infinity);
|
|
87
|
-
isNumber(NaN);
|
|
88
|
-
isNumber(null);
|
|
89
|
-
isNumber(undefined);
|
|
90
|
-
isNumber('');
|
|
91
|
-
isNumber(' ');
|
|
92
|
-
isNumber('foo');
|
|
93
|
-
isNumber('123foo');
|
|
94
|
-
isNumber([1]);
|
|
95
|
-
isNumber([]);
|
|
96
|
-
isNumber(function () {});
|
|
97
|
-
isNumber({});
|
|
86
|
+
isNumber(Infinity); // false
|
|
87
|
+
isNumber(NaN); // false
|
|
88
|
+
isNumber(null); // false
|
|
89
|
+
isNumber(undefined); // false
|
|
90
|
+
isNumber(''); // false
|
|
91
|
+
isNumber(' '); // false
|
|
92
|
+
isNumber('foo'); // false
|
|
93
|
+
isNumber('123foo'); // false
|
|
94
|
+
isNumber([1]); // false
|
|
95
|
+
isNumber([]); // false
|
|
96
|
+
isNumber(function () {}); // false
|
|
97
|
+
isNumber({}); // false
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
### toNumber Examples
|
|
@@ -102,33 +102,33 @@ isNumber({}); // false
|
|
|
102
102
|
#### Returns a number
|
|
103
103
|
|
|
104
104
|
```ts
|
|
105
|
-
toNumber(5e3);
|
|
106
|
-
toNumber(0xff);
|
|
107
|
-
toNumber(-1.1);
|
|
108
|
-
toNumber(0);
|
|
109
|
-
toNumber(1);
|
|
110
|
-
toNumber('-1.1');
|
|
111
|
-
toNumber('0');
|
|
112
|
-
toNumber('0xff');
|
|
113
|
-
toNumber('5e3');
|
|
114
|
-
toNumber(' 123 ');
|
|
105
|
+
toNumber(5e3); // 5000
|
|
106
|
+
toNumber(0xff); // 255
|
|
107
|
+
toNumber(-1.1); // -1.1
|
|
108
|
+
toNumber(0); // 0
|
|
109
|
+
toNumber(1); // 1
|
|
110
|
+
toNumber('-1.1'); // -1.1
|
|
111
|
+
toNumber('0'); // 0
|
|
112
|
+
toNumber('0xff'); // 255
|
|
113
|
+
toNumber('5e3'); // 5000
|
|
114
|
+
toNumber(' 123 '); // 123
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
#### Returns `null`
|
|
118
118
|
|
|
119
119
|
```ts
|
|
120
|
-
toNumber(Infinity);
|
|
121
|
-
toNumber(NaN);
|
|
122
|
-
toNumber(null);
|
|
123
|
-
toNumber(undefined);
|
|
124
|
-
toNumber('');
|
|
125
|
-
toNumber(' ');
|
|
126
|
-
toNumber('foo');
|
|
127
|
-
toNumber('123foo');
|
|
128
|
-
toNumber([1]);
|
|
129
|
-
toNumber([]);
|
|
130
|
-
toNumber(function () {});
|
|
131
|
-
toNumber({});
|
|
120
|
+
toNumber(Infinity); // null
|
|
121
|
+
toNumber(NaN); // null
|
|
122
|
+
toNumber(null); // null
|
|
123
|
+
toNumber(undefined); // null
|
|
124
|
+
toNumber(''); // null
|
|
125
|
+
toNumber(' '); // null
|
|
126
|
+
toNumber('foo'); // null
|
|
127
|
+
toNumber('123foo'); // null
|
|
128
|
+
toNumber([1]); // null
|
|
129
|
+
toNumber([]); // null
|
|
130
|
+
toNumber(function () {}); // null
|
|
131
|
+
toNumber({}); // null
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
## Sponsors
|
package/dist/dev/main.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/* 📦 @alwatr/is-number v9.36.0 */
|
|
2
|
+
function z(j){if(typeof Number.isFinite==="function")return Number.isFinite(j);return typeof j==="number"&&isFinite(j)}function A(j){if(typeof j==="number")return j-j===0;if(typeof j==="string"){let k=j.trim();if(k==="")return!1;let q=+k;return z(q)}return!1}function B(j){if(typeof j==="number")return j-j===0?j:null;if(typeof j==="string"){let k=j.trim();if(k==="")return null;let q=+k;return z(q)?q:null}return null}export{B as toNumber,A as isNumber,z as isFiniteNumber};
|
|
3
|
+
|
|
4
|
+
//# debugId=2C49B5BCCE0BF75964756E2164756E21
|
|
5
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/main.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Polyfill for Number.isFinite - properly checks if a value is a finite number\n * without type coercion.\n *\n * @param value - The value to check\n * @returns true if the value is a finite number, false otherwise\n */\nexport function isFiniteNumber(value: unknown): value is number {\n // Use native implementation if available\n if (typeof Number.isFinite === 'function') {\n return Number.isFinite(value);\n }\n // Fallback implementation\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Check if the value is a number or can be converted to a number.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a number or can be converted to a number, otherwise `false`.\n *\n * @example\n * ```ts\n * isNumber(123); // true\n * isNumber('123'); // true\n * isNumber(' 123 '); // true\n * isNumber('0xff'); // true\n * isNumber('-1.1'); // true\n * isNumber(''); // false\n * isNumber(' '); // false\n * isNumber(' 123a '); // false\n * isNumber(NaN); // false\n * isNumber(Infinity); // false\n * isNumber({}); // false\n * isNumber([]); // false\n * isNumber(null); // false\n * isNumber(undefined); // false\n * ```\n */\nexport function isNumber(value: unknown): boolean {\n // Handle number type\n if (typeof value === 'number') {\n return value - value === 0;\n }\n\n // Handle string type\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') return false;\n\n // Use unary plus for fastest string-to-number conversion\n const num = +trimmed;\n return isFiniteNumber(num);\n }\n\n return false;\n}\n\n/**\n * Convert a value to a number if possible.\n *\n * @param value - The value to convert.\n * @returns The converted number if valid, otherwise `null`.\n *\n * @example\n * ```ts\n * toNumber(123); // 123\n * toNumber('123'); // 123\n * toNumber(' 123 '); // 123\n * toNumber('0xff'); // 255\n * toNumber('-1.1'); // -1.1\n * toNumber(''); // null\n * toNumber(' '); // null\n * toNumber('123a'); // null\n * toNumber(NaN); // null\n * toNumber(Infinity); // null\n * toNumber({}); // null\n * toNumber([]); // null\n * toNumber(null); // null\n * toNumber(undefined); // null\n * ```\n */\nexport function toNumber(value: unknown): number | null {\n // Handle number type\n if (typeof value === 'number') {\n return value - value === 0 ? value : null;\n }\n\n // Handle string type\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') return null;\n\n const num = +trimmed;\n return isFiniteNumber(num) ? num : null;\n }\n\n return null;\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAOO,SAAS,CAAc,CAAC,EAAiC,CAE9D,GAAI,OAAO,OAAO,WAAa,WAC7B,OAAO,OAAO,SAAS,CAAK,EAG9B,OAAO,OAAO,IAAU,UAAY,SAAS,CAAK,EA2B7C,SAAS,CAAQ,CAAC,EAAyB,CAEhD,GAAI,OAAO,IAAU,SACnB,OAAO,EAAQ,IAAU,EAI3B,GAAI,OAAO,IAAU,SAAU,CAC7B,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,IAAY,GAAI,MAAO,GAG3B,IAAM,EAAM,CAAC,EACb,OAAO,EAAe,CAAG,EAG3B,MAAO,GA2BF,SAAS,CAAQ,CAAC,EAA+B,CAEtD,GAAI,OAAO,IAAU,SACnB,OAAO,EAAQ,IAAU,EAAI,EAAQ,KAIvC,GAAI,OAAO,IAAU,SAAU,CAC7B,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,IAAY,GAAI,OAAO,KAE3B,IAAM,EAAM,CAAC,EACb,OAAO,EAAe,CAAG,EAAI,EAAM,KAGrC,OAAO",
|
|
8
|
+
"debugId": "2C49B5BCCE0BF75964756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
package/dist/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* 📦 @alwatr/is-number v9.
|
|
1
|
+
/* 📦 @alwatr/is-number v9.36.0 */
|
|
2
2
|
function z(j){if(typeof Number.isFinite==="function")return Number.isFinite(j);return typeof j==="number"&&isFinite(j)}function A(j){if(typeof j==="number")return j-j===0;if(typeof j==="string"){let k=j.trim();if(k==="")return!1;let q=+k;return z(q)}return!1}function B(j){if(typeof j==="number")return j-j===0?j:null;if(typeof j==="string"){let k=j.trim();if(k==="")return null;let q=+k;return z(q)?q:null}return null}export{B as toNumber,A as isNumber,z as isFiniteNumber};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=2C49B5BCCE0BF75964756E2164756E21
|
|
5
5
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * Polyfill for Number.isFinite - properly checks if a value is a finite number\n * without type coercion.\n *\n * @param value - The value to check\n * @returns true if the value is a finite number, false otherwise\n */\nexport function isFiniteNumber(value: unknown): value is number {\n // Use native implementation if available\n if (typeof Number.isFinite === 'function') {\n return Number.isFinite(value);\n }\n // Fallback implementation\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Check if the value is a number or can be converted to a number.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a number or can be converted to a number, otherwise `false`.\n *\n * @example\n * ```ts\n * isNumber(123); // true\n * isNumber('123'); // true\n * isNumber(' 123 '); // true\n * isNumber('0xff'); // true\n * isNumber('-1.1'); // true\n * isNumber(''); // false\n * isNumber(' '); // false\n * isNumber(' 123a '); // false\n * isNumber(NaN); // false\n * isNumber(Infinity); // false\n * isNumber({}); // false\n * isNumber([]); // false\n * isNumber(null); // false\n * isNumber(undefined); // false\n * ```\n */\nexport function isNumber(value: unknown): boolean {\n // Handle number type\n if (typeof value === 'number') {\n return value - value === 0;\n }\n\n // Handle string type\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') return false;\n\n // Use unary plus for fastest string-to-number conversion\n const num = +trimmed;\n return isFiniteNumber(num);\n }\n\n return false;\n}\n\n/**\n * Convert a value to a number if possible.\n *\n * @param value - The value to convert.\n * @returns The converted number if valid, otherwise `null`.\n *\n * @example\n * ```ts\n * toNumber(123); // 123\n * toNumber('123'); // 123\n * toNumber(' 123 '); // 123\n * toNumber('0xff'); // 255\n * toNumber('-1.1'); // -1.1\n * toNumber(''); // null\n * toNumber(' '); // null\n * toNumber('123a'); // null\n * toNumber(NaN); // null\n * toNumber(Infinity); // null\n * toNumber({}); // null\n * toNumber([]); // null\n * toNumber(null); // null\n * toNumber(undefined); // null\n * ```\n */\nexport function toNumber(value: unknown): number | null {\n // Handle number type\n if (typeof value === 'number') {\n return value - value === 0 ? value : null;\n }\n\n // Handle string type\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') return null;\n\n const num = +trimmed;\n return isFiniteNumber(num) ? num : null;\n }\n\n return null;\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";AAOO,SAAS,CAAc,CAAC,EAAiC,CAE9D,GAAI,OAAO,OAAO,WAAa,WAC7B,OAAO,OAAO,SAAS,CAAK,EAG9B,OAAO,OAAO,IAAU,UAAY,SAAS,CAAK,EA2B7C,SAAS,CAAQ,CAAC,EAAyB,CAEhD,GAAI,OAAO,IAAU,SACnB,OAAO,EAAQ,IAAU,EAI3B,GAAI,OAAO,IAAU,SAAU,CAC7B,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,IAAY,GAAI,MAAO,GAG3B,IAAM,EAAM,CAAC,EACb,OAAO,EAAe,CAAG,EAG3B,MAAO,GA2BF,SAAS,CAAQ,CAAC,EAA+B,CAEtD,GAAI,OAAO,IAAU,SACnB,OAAO,EAAQ,IAAU,EAAI,EAAQ,KAIvC,GAAI,OAAO,IAAU,SAAU,CAC7B,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,IAAY,GAAI,OAAO,KAE3B,IAAM,EAAM,CAAC,EACb,OAAO,EAAe,CAAG,EAAI,EAAM,KAGrC,OAAO",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "2C49B5BCCE0BF75964756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwatr/is-number",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.36.0",
|
|
4
4
|
"description": "A simple utility to Check the value is number or can convert to a number, for example string ' 123 ' can be converted to 123.",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"author": "S. Ali Mihandoost <ali.mihandoost@gmail.com> (https://ali.mihandoost.com)",
|
|
@@ -15,31 +15,34 @@
|
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
17
17
|
"types": "./dist/main.d.ts",
|
|
18
|
+
"development": "./dist/dev/main.js",
|
|
18
19
|
"import": "./dist/main.js",
|
|
19
20
|
"default": "./dist/main.js"
|
|
20
21
|
}
|
|
21
22
|
},
|
|
22
23
|
"sideEffects": false,
|
|
23
24
|
"devDependencies": {
|
|
24
|
-
"@alwatr/nano-build": "9.
|
|
25
|
+
"@alwatr/nano-build": "9.33.1",
|
|
25
26
|
"@alwatr/standard": "9.33.0",
|
|
26
|
-
"@alwatr/type-helper": "9.
|
|
27
|
+
"@alwatr/type-helper": "9.36.0",
|
|
27
28
|
"typescript": "^6.0.3"
|
|
28
29
|
},
|
|
29
30
|
"scripts": {
|
|
30
31
|
"b": "bun run build",
|
|
31
32
|
"build": "bun run build:ts && bun run build:es",
|
|
32
|
-
"build:es": "
|
|
33
|
+
"build:es": "bun run build:es:dev && bun run build:es:prod",
|
|
34
|
+
"build:es:dev": "nano-build --preset=module --outdir=dist/dev src/main.ts",
|
|
35
|
+
"build:es:prod": "NODE_ENV=production nano-build --preset=module --outdir=dist src/main.ts",
|
|
33
36
|
"build:ts": "tsc --build",
|
|
34
37
|
"cl": "bun run clean",
|
|
35
38
|
"clean": "rm -rfv dist *.tsbuildinfo",
|
|
36
39
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
37
40
|
"lint": "eslint src/ --ext .ts",
|
|
38
41
|
"t": "bun run test",
|
|
39
|
-
"test": "
|
|
42
|
+
"test": "bun test",
|
|
40
43
|
"w": "bun run watch",
|
|
41
44
|
"watch": "bun run watch:ts & bun run watch:es",
|
|
42
|
-
"watch:es": "bun run build:es --watch",
|
|
45
|
+
"watch:es": "bun run build:es:dev --watch",
|
|
43
46
|
"watch:ts": "bun run build:ts --watch --preserveWatchOutput"
|
|
44
47
|
},
|
|
45
48
|
"files": [
|
|
@@ -88,5 +91,5 @@
|
|
|
88
91
|
"utility",
|
|
89
92
|
"utils"
|
|
90
93
|
],
|
|
91
|
-
"gitHead": "
|
|
94
|
+
"gitHead": "252426e3bf06fdf5331691d5e8c09a4808104275"
|
|
92
95
|
}
|