@rickosborne/guard 2024.12.33 → 2024.12.35
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 +20 -8
- package/cjs/ts/is-int.js +27 -1
- package/cjs/ts/is-int.js.map +1 -1
- package/esm/ts/is-int.js +25 -0
- package/esm/ts/is-int.js.map +1 -1
- package/package.json +2 -2
- package/types/ts/has-number.d.ts +1 -1
- package/types/ts/is-int.d.ts +6 -0
- package/types/ts/is-int.d.ts.map +1 -1
- package/types/ts/is-int.js +27 -1
- package/types/ts/is-int.js.map +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# @rickosborne/guard
|
|
2
2
|
|
|
3
|
-
Basic type guards building on [@rickosborne/typical](https://www.npmjs.com/package/@rickosborne/typical).
|
|
3
|
+
Basic type guards building on helper types from [@rickosborne/typical](https://www.npmjs.com/package/@rickosborne/typical).
|
|
4
|
+
|
|
4
5
|
***
|
|
5
6
|
|
|
6
7
|
## API
|
|
@@ -12,7 +13,7 @@ Basic type guards building on [@rickosborne/typical](https://www.npmjs.com/packa
|
|
|
12
13
|
<a id="api-assertdefined"></a>
|
|
13
14
|
|
|
14
15
|
```typescript
|
|
15
|
-
|
|
16
|
+
function assertDefined<T>(value: T, messageOrError: MessageOrError): asserts value is NonNullable<T>;
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
Assert the given value is not null or undefined. Throws with the given message or error, otherwise.
|
|
@@ -23,7 +24,7 @@ Assert the given value is not null or undefined. Throws with the given message o
|
|
|
23
24
|
<a id="api-assertint"></a>
|
|
24
25
|
|
|
25
26
|
```typescript
|
|
26
|
-
|
|
27
|
+
function assertInt(value: unknown, messageOrError: MessageOrError): asserts value is number;
|
|
27
28
|
```
|
|
28
29
|
|
|
29
30
|
Throw if the given value is not an integer.
|
|
@@ -67,7 +68,7 @@ Coerce a value's type to a number, throwing if it's not an integer.
|
|
|
67
68
|
<a id="api-hasarray"></a>
|
|
68
69
|
|
|
69
70
|
```typescript
|
|
70
|
-
|
|
71
|
+
function hasArray<Name extends string>(obj: unknown, name: Name, predicate?: undefined): obj is {
|
|
71
72
|
[K in Name]: unknown[];
|
|
72
73
|
};
|
|
73
74
|
```
|
|
@@ -80,7 +81,7 @@ Guard for whether the given value is an object which has a property with its own
|
|
|
80
81
|
<a id="api-hasarray"></a>
|
|
81
82
|
|
|
82
83
|
```typescript
|
|
83
|
-
|
|
84
|
+
function hasArray<Name extends string, Item>(obj: unknown, name: Name, predicate?: (item: unknown, index: number, items: unknown[]) => item is Item): obj is {
|
|
84
85
|
[K in Name]: Item[];
|
|
85
86
|
};
|
|
86
87
|
```
|
|
@@ -93,7 +94,7 @@ Guard for whether the given value is an object which has a property with its own
|
|
|
93
94
|
<a id="api-hasnumber"></a>
|
|
94
95
|
|
|
95
96
|
```typescript
|
|
96
|
-
hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]:
|
|
97
|
+
hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]: number; }
|
|
97
98
|
```
|
|
98
99
|
|
|
99
100
|
Guard for whether an object has a property with the given name and a numeric value.
|
|
@@ -104,7 +105,7 @@ Guard for whether an object has a property with the given name and a numeric val
|
|
|
104
105
|
<a id="api-hasown"></a>
|
|
105
106
|
|
|
106
107
|
```typescript
|
|
107
|
-
|
|
108
|
+
function hasOwn<Name extends string>(obj: unknown, name: Name): obj is {
|
|
108
109
|
[K in Name]: unknown;
|
|
109
110
|
};
|
|
110
111
|
```
|
|
@@ -117,7 +118,7 @@ Guard for whether the given value is an object with a property with the given na
|
|
|
117
118
|
<a id="api-hasown"></a>
|
|
118
119
|
|
|
119
120
|
```typescript
|
|
120
|
-
|
|
121
|
+
function hasOwn<Name extends string, T>(obj: unknown, name: Name, predicate: (value: unknown) => value is T): obj is {
|
|
121
122
|
[K in Name]: T;
|
|
122
123
|
};
|
|
123
124
|
```
|
|
@@ -191,6 +192,17 @@ isUnaryPredicate: (obj: unknown) => obj is UnaryPredicate<unknown>
|
|
|
191
192
|
Tests whether the given object is a function and takes at least one parameter, and could maybe act as a unary predicate. Warning! Since no type information is available at runtime, it may not actually act as a predicate!
|
|
192
193
|
|
|
193
194
|
|
|
195
|
+
#### maybeInt
|
|
196
|
+
|
|
197
|
+
<a id="api-maybeint"></a>
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
maybeInt: (text: string) => number | undefined
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Convert to an integer, if it seems like it could be done safely. See [decimal separator on Wikipedia](https://en.wikipedia.org/wiki/Decimal_separator) for details on how this is probably very wrong in many countries.
|
|
204
|
+
|
|
205
|
+
|
|
194
206
|
#### scrubStackTrace
|
|
195
207
|
|
|
196
208
|
<a id="api-scrubstacktrace"></a>
|
package/cjs/ts/is-int.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.expectInt = exports.isInt = void 0;
|
|
3
|
+
exports.maybeInt = exports.expectInt = exports.isInt = void 0;
|
|
4
4
|
exports.assertInt = assertInt;
|
|
5
5
|
const error_from_message_js_1 = require("./error-from-message.js");
|
|
6
6
|
/**
|
|
@@ -25,4 +25,30 @@ const expectInt = (obj, messageOrError) => {
|
|
|
25
25
|
return obj;
|
|
26
26
|
};
|
|
27
27
|
exports.expectInt = expectInt;
|
|
28
|
+
/**
|
|
29
|
+
* Convert to an integer, if it seems like it could be done safely.
|
|
30
|
+
* See {@link https://en.wikipedia.org/wiki/Decimal_separator | decimal separator on Wikipedia}
|
|
31
|
+
* for details on how this is probably very wrong in many countries.
|
|
32
|
+
*/
|
|
33
|
+
const maybeInt = (text) => {
|
|
34
|
+
let sign = 1;
|
|
35
|
+
let clean = text.trim();
|
|
36
|
+
// This just makes the patterns below a little easier.
|
|
37
|
+
if (text.startsWith("-")) {
|
|
38
|
+
sign = -1;
|
|
39
|
+
clean = clean.substring(1);
|
|
40
|
+
}
|
|
41
|
+
clean = clean
|
|
42
|
+
.replace(/(?<=\d)[_ ](?=\d)/g, "")
|
|
43
|
+
.replace(/^0+[,'.·]0*$/, "0")
|
|
44
|
+
.replace(/^(\d+(?:,\d+)+)[.·]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
45
|
+
.replace(/^(\d+(?:'\d+)+)[.,]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
46
|
+
.replace(/^(\d+(?:\.\d+)+)[,']0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
47
|
+
.replace(/^(\d{4,})[,'.·]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""));
|
|
48
|
+
if (/^-?(0|[1-9][0-9]*)$/.test(clean)) {
|
|
49
|
+
return parseInt(clean, 10) * sign;
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
exports.maybeInt = maybeInt;
|
|
28
54
|
//# sourceMappingURL=is-int.js.map
|
package/cjs/ts/is-int.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAWA,8BAIC;AAfD,mEAAuF;AAEvF;;;GAGG;AACI,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB"}
|
|
1
|
+
{"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAWA,8BAIC;AAfD,mEAAuF;AAEvF;;;GAGG;AACI,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEF;;;;GAIG;AACI,MAAM,QAAQ,GAAG,CACvB,IAAY,EACS,EAAE;IACvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,sDAAsD;IACtD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,CAAC,CAAC;QACV,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,GAAG,KAAK;SACX,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC3F,OAAO,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC3F,OAAO,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC5F,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CACxF;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAtBW,QAAA,QAAQ,YAsBnB"}
|
package/esm/ts/is-int.js
CHANGED
|
@@ -19,4 +19,29 @@ export const expectInt = (obj, messageOrError) => {
|
|
|
19
19
|
assertInt(obj, messageOrError);
|
|
20
20
|
return obj;
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Convert to an integer, if it seems like it could be done safely.
|
|
24
|
+
* See {@link https://en.wikipedia.org/wiki/Decimal_separator | decimal separator on Wikipedia}
|
|
25
|
+
* for details on how this is probably very wrong in many countries.
|
|
26
|
+
*/
|
|
27
|
+
export const maybeInt = (text) => {
|
|
28
|
+
let sign = 1;
|
|
29
|
+
let clean = text.trim();
|
|
30
|
+
// This just makes the patterns below a little easier.
|
|
31
|
+
if (text.startsWith("-")) {
|
|
32
|
+
sign = -1;
|
|
33
|
+
clean = clean.substring(1);
|
|
34
|
+
}
|
|
35
|
+
clean = clean
|
|
36
|
+
.replace(/(?<=\d)[_ ](?=\d)/g, "")
|
|
37
|
+
.replace(/^0+[,'.·]0*$/, "0")
|
|
38
|
+
.replace(/^(\d+(?:,\d+)+)[.·]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
39
|
+
.replace(/^(\d+(?:'\d+)+)[.,]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
40
|
+
.replace(/^(\d+(?:\.\d+)+)[,']0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
41
|
+
.replace(/^(\d{4,})[,'.·]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""));
|
|
42
|
+
if (/^-?(0|[1-9][0-9]*)$/.test(clean)) {
|
|
43
|
+
return parseInt(clean, 10) * sign;
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
};
|
|
22
47
|
//# sourceMappingURL=is-int.js.map
|
package/esm/ts/is-int.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAEjK;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,uBAAuB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAEjK;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,uBAAuB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAY,EACS,EAAE;IACvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,sDAAsD;IACtD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,CAAC,CAAC;QACV,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,GAAG,KAAK;SACX,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC3F,OAAO,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC3F,OAAO,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC5F,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CACxF;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"url": "https://rickosborne.org"
|
|
5
5
|
},
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@rickosborne/typical": "2024.12.
|
|
7
|
+
"@rickosborne/typical": "2024.12.35"
|
|
8
8
|
},
|
|
9
9
|
"description": "Rick Osborne's collection of type guards.",
|
|
10
10
|
"engines": {
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
},
|
|
41
41
|
"types": "types/index.d.ts",
|
|
42
42
|
"typings": "types/index.d.ts",
|
|
43
|
-
"version": "2024.12.
|
|
43
|
+
"version": "2024.12.35"
|
|
44
44
|
}
|
package/types/ts/has-number.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Guard for whether an object has a property with the given name
|
|
3
3
|
* and a numeric value.
|
|
4
4
|
*/
|
|
5
|
-
export declare const hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]:
|
|
5
|
+
export declare const hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]: number; };
|
|
6
6
|
//# sourceMappingURL=has-number.d.ts.map
|
package/types/ts/is-int.d.ts
CHANGED
|
@@ -12,4 +12,10 @@ export declare function assertInt(value: unknown, messageOrError: MessageOrError
|
|
|
12
12
|
* Coerce a value's type to a number, throwing if it's not an integer.
|
|
13
13
|
*/
|
|
14
14
|
export declare const expectInt: (obj: unknown, messageOrError: MessageOrError) => number;
|
|
15
|
+
/**
|
|
16
|
+
* Convert to an integer, if it seems like it could be done safely.
|
|
17
|
+
* See {@link https://en.wikipedia.org/wiki/Decimal_separator | decimal separator on Wikipedia}
|
|
18
|
+
* for details on how this is probably very wrong in many countries.
|
|
19
|
+
*/
|
|
20
|
+
export declare const maybeInt: (text: string) => number | undefined;
|
|
15
21
|
//# sourceMappingURL=is-int.d.ts.map
|
package/types/ts/is-int.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-int.d.ts","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,KAAK,QAAS,OAAO,KAAG,GAAG,IAAI,MAAoH,CAAC;AAEjK;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIjG;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,QAChB,OAAO,kBACI,cAAc,KAC5B,MAGF,CAAC"}
|
|
1
|
+
{"version":3,"file":"is-int.d.ts","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,KAAK,QAAS,OAAO,KAAG,GAAG,IAAI,MAAoH,CAAC;AAEjK;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIjG;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,QAChB,OAAO,kBACI,cAAc,KAC5B,MAGF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,SACd,MAAM,KACV,MAAM,GAAG,SAoBX,CAAC"}
|
package/types/ts/is-int.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.expectInt = exports.isInt = void 0;
|
|
3
|
+
exports.maybeInt = exports.expectInt = exports.isInt = void 0;
|
|
4
4
|
exports.assertInt = assertInt;
|
|
5
5
|
const error_from_message_js_1 = require("./error-from-message.js");
|
|
6
6
|
/**
|
|
@@ -25,4 +25,30 @@ const expectInt = (obj, messageOrError) => {
|
|
|
25
25
|
return obj;
|
|
26
26
|
};
|
|
27
27
|
exports.expectInt = expectInt;
|
|
28
|
+
/**
|
|
29
|
+
* Convert to an integer, if it seems like it could be done safely.
|
|
30
|
+
* See {@link https://en.wikipedia.org/wiki/Decimal_separator | decimal separator on Wikipedia}
|
|
31
|
+
* for details on how this is probably very wrong in many countries.
|
|
32
|
+
*/
|
|
33
|
+
const maybeInt = (text) => {
|
|
34
|
+
let sign = 1;
|
|
35
|
+
let clean = text.trim();
|
|
36
|
+
// This just makes the patterns below a little easier.
|
|
37
|
+
if (text.startsWith("-")) {
|
|
38
|
+
sign = -1;
|
|
39
|
+
clean = clean.substring(1);
|
|
40
|
+
}
|
|
41
|
+
clean = clean
|
|
42
|
+
.replace(/(?<=\d)[_ ](?=\d)/g, "")
|
|
43
|
+
.replace(/^0+[,'.·]0*$/, "0")
|
|
44
|
+
.replace(/^(\d+(?:,\d+)+)[.·]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
45
|
+
.replace(/^(\d+(?:'\d+)+)[.,]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
46
|
+
.replace(/^(\d+(?:\.\d+)+)[,']0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""))
|
|
47
|
+
.replace(/^(\d{4,})[,'.·]0*$/, (_all, digits) => digits.replace(/[^-0-9]/g, ""));
|
|
48
|
+
if (/^-?(0|[1-9][0-9]*)$/.test(clean)) {
|
|
49
|
+
return parseInt(clean, 10) * sign;
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
exports.maybeInt = maybeInt;
|
|
28
54
|
//# sourceMappingURL=is-int.js.map
|
package/types/ts/is-int.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAWA,8BAIC;AAfD,mEAAuF;AAEvF;;;GAGG;AACI,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB"}
|
|
1
|
+
{"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAWA,8BAIC;AAfD,mEAAuF;AAEvF;;;GAGG;AACI,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEF;;;;GAIG;AACI,MAAM,QAAQ,GAAG,CACvB,IAAY,EACS,EAAE;IACvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,sDAAsD;IACtD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,CAAC,CAAC;QACV,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,GAAG,KAAK;SACX,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC3F,OAAO,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC3F,OAAO,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC5F,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CACxF;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAtBW,QAAA,QAAQ,YAsBnB"}
|