@rickosborne/guard 2024.12.32 → 2024.12.34
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 +82 -6
- package/cjs/index.js +2 -1
- package/cjs/index.js.map +1 -1
- package/cjs/ts/error-from-message.js +2 -1
- package/cjs/ts/error-from-message.js.map +1 -1
- package/cjs/ts/has-number.js +4 -0
- package/cjs/ts/has-number.js.map +1 -1
- package/cjs/ts/has-own.js +4 -0
- package/cjs/ts/has-own.js.map +1 -1
- package/cjs/ts/is-defined.js +30 -0
- package/cjs/ts/is-defined.js.map +1 -0
- package/cjs/ts/is-int.js +37 -1
- package/cjs/ts/is-int.js.map +1 -1
- package/cjs/ts/is-list-of.js +4 -0
- package/cjs/ts/is-list-of.js.map +1 -1
- package/cjs/ts/is-object.js +8 -0
- package/cjs/ts/is-object.js.map +1 -1
- package/cjs/ts/scrub-stack-trace.js +48 -0
- package/cjs/ts/scrub-stack-trace.js.map +1 -0
- package/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/ts/error-from-message.js +2 -1
- package/esm/ts/error-from-message.js.map +1 -1
- package/esm/ts/has-number.js +4 -0
- package/esm/ts/has-number.js.map +1 -1
- package/esm/ts/has-own.js +4 -0
- package/esm/ts/has-own.js.map +1 -1
- package/esm/ts/is-defined.js +24 -0
- package/esm/ts/is-defined.js.map +1 -0
- package/esm/ts/is-int.js +35 -0
- package/esm/ts/is-int.js.map +1 -1
- package/esm/ts/is-list-of.js +4 -0
- package/esm/ts/is-list-of.js.map +1 -1
- package/esm/ts/is-object.js +8 -0
- package/esm/ts/is-object.js.map +1 -1
- package/esm/ts/scrub-stack-trace.js +46 -0
- package/esm/ts/scrub-stack-trace.js.map +1 -0
- package/esm/tsconfig.module.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/types/index.d.ts +2 -1
- package/types/index.d.ts.map +1 -1
- package/types/index.js +2 -1
- package/types/index.js.map +1 -1
- package/types/ts/error-from-message.d.ts.map +1 -1
- package/types/ts/error-from-message.js +2 -1
- package/types/ts/error-from-message.js.map +1 -1
- package/types/ts/has-number.d.ts +4 -0
- package/types/ts/has-number.d.ts.map +1 -1
- package/types/ts/has-number.js +4 -0
- package/types/ts/has-number.js.map +1 -1
- package/types/ts/has-own.d.ts +10 -0
- package/types/ts/has-own.d.ts.map +1 -1
- package/types/ts/has-own.js +4 -0
- package/types/ts/has-own.js.map +1 -1
- package/types/ts/is-defined.d.ts +16 -0
- package/types/ts/is-defined.d.ts.map +1 -0
- package/types/ts/is-defined.js +30 -0
- package/types/ts/is-defined.js.map +1 -0
- package/types/ts/is-int.d.ts +16 -0
- package/types/ts/is-int.d.ts.map +1 -1
- package/types/ts/is-int.js +37 -1
- package/types/ts/is-int.js.map +1 -1
- package/types/ts/is-list-of.d.ts +4 -0
- package/types/ts/is-list-of.d.ts.map +1 -1
- package/types/ts/is-list-of.js +4 -0
- package/types/ts/is-list-of.js.map +1 -1
- package/types/ts/is-object.d.ts +8 -0
- package/types/ts/is-object.d.ts.map +1 -1
- package/types/ts/is-object.js +8 -0
- package/types/ts/is-object.js.map +1 -1
- package/types/ts/scrub-stack-trace.d.ts +14 -0
- package/types/ts/scrub-stack-trace.d.ts.map +1 -0
- package/types/ts/scrub-stack-trace.js +50 -0
- package/types/ts/scrub-stack-trace.js.map +1 -0
- package/types/tsconfig.types.tsbuildinfo +1 -1
- package/cjs/ts/assert-defined.js +0 -11
- package/cjs/ts/assert-defined.js.map +0 -1
- package/esm/ts/assert-defined.js +0 -8
- package/esm/ts/assert-defined.js.map +0 -1
- package/types/ts/assert-defined.d.ts +0 -3
- package/types/ts/assert-defined.d.ts.map +0 -1
- package/types/ts/assert-defined.js +0 -11
- package/types/ts/assert-defined.js.map +0 -1
- /package/{types/tsdoc-metadata.json → tsdoc-metadata.json} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# @rickosborne/guard
|
|
2
2
|
|
|
3
3
|
Basic type guards building on [@rickosborne/typical](https://www.npmjs.com/package/@rickosborne/typical).
|
|
4
|
+
|
|
4
5
|
***
|
|
5
6
|
|
|
6
7
|
## API
|
|
@@ -12,17 +13,23 @@ 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
|
|
|
19
|
+
Assert the given value is not null or undefined. Throws with the given message or error, otherwise.
|
|
20
|
+
|
|
21
|
+
|
|
18
22
|
#### assertInt
|
|
19
23
|
|
|
20
24
|
<a id="api-assertint"></a>
|
|
21
25
|
|
|
22
26
|
```typescript
|
|
23
|
-
|
|
27
|
+
function assertInt(value: unknown, messageOrError: MessageOrError): asserts value is number;
|
|
24
28
|
```
|
|
25
29
|
|
|
30
|
+
Throw if the given value is not an integer.
|
|
31
|
+
|
|
32
|
+
|
|
26
33
|
#### errorFromMessageOrError
|
|
27
34
|
|
|
28
35
|
<a id="api-errorfrommessageorerror"></a>
|
|
@@ -34,6 +41,17 @@ errorFromMessageOrError: (messageOrError: MessageOrError, defaultConstructor?: (
|
|
|
34
41
|
Helper for guards which expect text or an error, or can generate one when needed.
|
|
35
42
|
|
|
36
43
|
|
|
44
|
+
#### expectDefined
|
|
45
|
+
|
|
46
|
+
<a id="api-expectdefined"></a>
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
expectDefined: <T>(obj: T, messageOrError: MessageOrError) => NonNullable<T>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Coerce a value's type to exclude null or undefined, or throw if it actually is null or undefined.
|
|
53
|
+
|
|
54
|
+
|
|
37
55
|
#### expectInt
|
|
38
56
|
|
|
39
57
|
<a id="api-expectint"></a>
|
|
@@ -42,12 +60,15 @@ Helper for guards which expect text or an error, or can generate one when needed
|
|
|
42
60
|
expectInt: (obj: unknown, messageOrError: MessageOrError) => number
|
|
43
61
|
```
|
|
44
62
|
|
|
63
|
+
Coerce a value's type to a number, throwing if it's not an integer.
|
|
64
|
+
|
|
65
|
+
|
|
45
66
|
#### hasArray
|
|
46
67
|
|
|
47
68
|
<a id="api-hasarray"></a>
|
|
48
69
|
|
|
49
70
|
```typescript
|
|
50
|
-
|
|
71
|
+
function hasArray<Name extends string>(obj: unknown, name: Name, predicate?: undefined): obj is {
|
|
51
72
|
[K in Name]: unknown[];
|
|
52
73
|
};
|
|
53
74
|
```
|
|
@@ -60,7 +81,7 @@ Guard for whether the given value is an object which has a property with its own
|
|
|
60
81
|
<a id="api-hasarray"></a>
|
|
61
82
|
|
|
62
83
|
```typescript
|
|
63
|
-
|
|
84
|
+
function hasArray<Name extends string, Item>(obj: unknown, name: Name, predicate?: (item: unknown, index: number, items: unknown[]) => item is Item): obj is {
|
|
64
85
|
[K in Name]: Item[];
|
|
65
86
|
};
|
|
66
87
|
```
|
|
@@ -76,26 +97,46 @@ Guard for whether the given value is an object which has a property with its own
|
|
|
76
97
|
hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]: string; }
|
|
77
98
|
```
|
|
78
99
|
|
|
100
|
+
Guard for whether an object has a property with the given name and a numeric value.
|
|
101
|
+
|
|
102
|
+
|
|
79
103
|
#### hasOwn
|
|
80
104
|
|
|
81
105
|
<a id="api-hasown"></a>
|
|
82
106
|
|
|
83
107
|
```typescript
|
|
84
|
-
|
|
108
|
+
function hasOwn<Name extends string>(obj: unknown, name: Name): obj is {
|
|
85
109
|
[K in Name]: unknown;
|
|
86
110
|
};
|
|
87
111
|
```
|
|
88
112
|
|
|
113
|
+
Guard for whether the given value is an object with a property with the given name. This variant does not check the value, only that the property exists.
|
|
114
|
+
|
|
115
|
+
|
|
89
116
|
#### hasOwn
|
|
90
117
|
|
|
91
118
|
<a id="api-hasown"></a>
|
|
92
119
|
|
|
93
120
|
```typescript
|
|
94
|
-
|
|
121
|
+
function hasOwn<Name extends string, T>(obj: unknown, name: Name, predicate: (value: unknown) => value is T): obj is {
|
|
95
122
|
[K in Name]: T;
|
|
96
123
|
};
|
|
97
124
|
```
|
|
98
125
|
|
|
126
|
+
Guard for whether the given value is an object with a property with the given name. This variant checks the value against the given predicate.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#### isDefined
|
|
130
|
+
|
|
131
|
+
<a id="api-isdefined"></a>
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
isDefined: <T>(obj: T) => obj is NonNullable<T>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Guard to filter out null or undefined values.
|
|
138
|
+
|
|
139
|
+
|
|
99
140
|
#### isInt
|
|
100
141
|
|
|
101
142
|
<a id="api-isint"></a>
|
|
@@ -104,6 +145,9 @@ declare function hasOwn<Name extends string, T>(obj: unknown, name: Name, predic
|
|
|
104
145
|
isInt: (obj: unknown) => obj is number
|
|
105
146
|
```
|
|
106
147
|
|
|
148
|
+
Check whether the given value is not just numeric, but is also an integer.
|
|
149
|
+
|
|
150
|
+
|
|
107
151
|
#### isListOf
|
|
108
152
|
|
|
109
153
|
<a id="api-islistof"></a>
|
|
@@ -112,6 +156,9 @@ isInt: (obj: unknown) => obj is number
|
|
|
112
156
|
isListOf: <T>(list: unknown, predicate: (item: unknown, index: number, items: unknown[]) => item is T) => list is T[]
|
|
113
157
|
```
|
|
114
158
|
|
|
159
|
+
Guard to check if the given value is an array where all the items match the given predicate.
|
|
160
|
+
|
|
161
|
+
|
|
115
162
|
#### isObject
|
|
116
163
|
|
|
117
164
|
<a id="api-isobject"></a>
|
|
@@ -120,6 +167,9 @@ isListOf: <T>(list: unknown, predicate: (item: unknown, index: number, items: un
|
|
|
120
167
|
isObject: (obj: unknown) => obj is NonNullable<object>
|
|
121
168
|
```
|
|
122
169
|
|
|
170
|
+
Guard to check that the given value is defined and object-like.
|
|
171
|
+
|
|
172
|
+
|
|
123
173
|
#### isPlainObject
|
|
124
174
|
|
|
125
175
|
<a id="api-isplainobject"></a>
|
|
@@ -128,6 +178,9 @@ isObject: (obj: unknown) => obj is NonNullable<object>
|
|
|
128
178
|
isPlainObject: (obj: unknown) => obj is Record<never, never>
|
|
129
179
|
```
|
|
130
180
|
|
|
181
|
+
Guard to check that the given value is defined, is an object, and seems to be a "plain" object, descending directly from Object. This won't prevent all shenanigans, but is a low-effort check.
|
|
182
|
+
|
|
183
|
+
|
|
131
184
|
#### isUnaryPredicate
|
|
132
185
|
|
|
133
186
|
<a id="api-isunarypredicate"></a>
|
|
@@ -139,6 +192,29 @@ isUnaryPredicate: (obj: unknown) => obj is UnaryPredicate<unknown>
|
|
|
139
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!
|
|
140
193
|
|
|
141
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
|
+
|
|
206
|
+
#### scrubStackTrace
|
|
207
|
+
|
|
208
|
+
<a id="api-scrubstacktrace"></a>
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
scrubStackTrace: <E extends Error>(err: E, removeIf?: Predicate<string> | RegExp | string | undefined) => E
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Wrap an Error in a proxy which cleans up the stack trace to be more human-readable. It filters out lines from third-party code, so you can quickly see your own code in the call stack. May optionally include some way of indicating additional lines which should be removed, so a guard function could make itself transparent, making it seem like the caller threw the error.
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
142
218
|
### TypeAliases
|
|
143
219
|
|
|
144
220
|
#### MessageOrError
|
package/cjs/index.js
CHANGED
|
@@ -14,13 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./ts/assert-defined.js"), exports);
|
|
18
17
|
__exportStar(require("./ts/error-from-message.js"), exports);
|
|
19
18
|
__exportStar(require("./ts/has-array.js"), exports);
|
|
20
19
|
__exportStar(require("./ts/has-number.js"), exports);
|
|
21
20
|
__exportStar(require("./ts/has-own.js"), exports);
|
|
21
|
+
__exportStar(require("./ts/is-defined.js"), exports);
|
|
22
22
|
__exportStar(require("./ts/is-int.js"), exports);
|
|
23
23
|
__exportStar(require("./ts/is-list-of.js"), exports);
|
|
24
24
|
__exportStar(require("./ts/is-object.js"), exports);
|
|
25
25
|
__exportStar(require("./ts/is-predicate.js"), exports);
|
|
26
|
+
__exportStar(require("./ts/scrub-stack-trace.js"), exports);
|
|
26
27
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,oDAAkC;AAClC,uDAAqC;AACrC,4DAA0C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.errorFromMessageOrError = void 0;
|
|
4
|
+
const scrub_stack_trace_js_1 = require("./scrub-stack-trace.js");
|
|
4
5
|
/**
|
|
5
6
|
* Helper for guards which expect text or an error, or
|
|
6
7
|
* can generate one when needed.
|
|
@@ -20,7 +21,7 @@ const errorFromMessageOrError = (messageOrError, defaultConstructor = Error) =>
|
|
|
20
21
|
else {
|
|
21
22
|
error = stringOrError;
|
|
22
23
|
}
|
|
23
|
-
return error;
|
|
24
|
+
return (0, scrub_stack_trace_js_1.scrubStackTrace)(error, " at errorFromMessageOrError ");
|
|
24
25
|
};
|
|
25
26
|
exports.errorFromMessageOrError = errorFromMessageOrError;
|
|
26
27
|
//# sourceMappingURL=error-from-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":";;;AAAA,iEAAyD;AAOzD;;;GAGG;AACI,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,IAAA,sCAAe,EAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC/D,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
|
package/cjs/ts/has-number.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasNumber = void 0;
|
|
4
4
|
const has_own_js_1 = require("./has-own.js");
|
|
5
|
+
/**
|
|
6
|
+
* Guard for whether an object has a property with the given name
|
|
7
|
+
* and a numeric value.
|
|
8
|
+
*/
|
|
5
9
|
const hasNumber = (obj, name) => {
|
|
6
10
|
return (0, has_own_js_1.hasOwn)(obj, name) && typeof obj[name] === "number";
|
|
7
11
|
};
|
package/cjs/ts/has-number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":";;;AAAA,6CAAsC;
|
|
1
|
+
{"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":";;;AAAA,6CAAsC;AAEtC;;;GAGG;AACI,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAkC,EAAE;IAC1G,OAAO,IAAA,mBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAE,IAAI,CAAE,KAAK,QAAQ,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
|
package/cjs/ts/has-own.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasOwn = hasOwn;
|
|
4
4
|
const is_object_js_1 = require("./is-object.js");
|
|
5
|
+
/**
|
|
6
|
+
* Guard for whether the given value is an object with a property
|
|
7
|
+
* with the given name.
|
|
8
|
+
*/
|
|
5
9
|
function hasOwn(obj, name, predicate) {
|
|
6
10
|
if (!(0, is_object_js_1.isObject)(obj) || !Object.hasOwn(obj, name)) {
|
|
7
11
|
return false;
|
package/cjs/ts/has-own.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":";;AAkBA,wBAKC;AAvBD,iDAA0C;AAc1C;;;GAGG;AACH,SAAgB,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,IAAA,uBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAE,IAAwB,CAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expectDefined = exports.isDefined = void 0;
|
|
4
|
+
exports.assertDefined = assertDefined;
|
|
5
|
+
const error_from_message_js_1 = require("./error-from-message.js");
|
|
6
|
+
/**
|
|
7
|
+
* Assert the given value is not null or undefined.
|
|
8
|
+
* Throws with the given message or error, otherwise.
|
|
9
|
+
*/
|
|
10
|
+
function assertDefined(value, messageOrError) {
|
|
11
|
+
if (value != null) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, RangeError);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Guard to filter out null or undefined values.
|
|
18
|
+
*/
|
|
19
|
+
const isDefined = (obj) => obj != null;
|
|
20
|
+
exports.isDefined = isDefined;
|
|
21
|
+
/**
|
|
22
|
+
* Coerce a value's type to exclude null or undefined, or throw
|
|
23
|
+
* if it actually is null or undefined.
|
|
24
|
+
*/
|
|
25
|
+
const expectDefined = (obj, messageOrError) => {
|
|
26
|
+
assertDefined(obj, messageOrError);
|
|
27
|
+
return obj;
|
|
28
|
+
};
|
|
29
|
+
exports.expectDefined = expectDefined;
|
|
30
|
+
//# sourceMappingURL=is-defined.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-defined.js","sourceRoot":"","sources":["../../../ts/is-defined.ts"],"names":[],"mappings":";;;AAMA,sCAQC;AAdD,mEAAuF;AAEvF;;;GAGG;AACH,SAAgB,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CAAI,GAAM,EAAyB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAA9D,QAAA,SAAS,aAAqD;AAE3E;;;GAGG;AACI,MAAM,aAAa,GAAG,CAC5B,GAAM,EACN,cAA8B,EACb,EAAE;IACnB,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
|
package/cjs/ts/is-int.js
CHANGED
|
@@ -1,18 +1,54 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Check whether the given value is not just numeric, but is
|
|
8
|
+
* also an integer.
|
|
9
|
+
*/
|
|
6
10
|
const isInt = (obj) => typeof obj === "number" && !isNaN(obj) && Math.trunc(obj) === obj && obj !== Infinity && obj !== -Infinity;
|
|
7
11
|
exports.isInt = isInt;
|
|
12
|
+
/**
|
|
13
|
+
* Throw if the given value is not an integer.
|
|
14
|
+
*/
|
|
8
15
|
function assertInt(value, messageOrError) {
|
|
9
16
|
if (!(0, exports.isInt)(value)) {
|
|
10
17
|
throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, TypeError);
|
|
11
18
|
}
|
|
12
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Coerce a value's type to a number, throwing if it's not an integer.
|
|
22
|
+
*/
|
|
13
23
|
const expectInt = (obj, messageOrError) => {
|
|
14
24
|
assertInt(obj, messageOrError);
|
|
15
25
|
return obj;
|
|
16
26
|
};
|
|
17
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;
|
|
18
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":";;;
|
|
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/cjs/ts/is-list-of.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isListOf = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Guard to check if the given value is an array where all the
|
|
6
|
+
* items match the given predicate.
|
|
7
|
+
*/
|
|
4
8
|
const isListOf = (list, predicate) => {
|
|
5
9
|
return Array.isArray(list) && list.every(predicate);
|
|
6
10
|
};
|
package/cjs/ts/is-list-of.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACI,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC;AALW,QAAA,QAAQ,YAKnB"}
|
package/cjs/ts/is-object.js
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isPlainObject = exports.isObject = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Guard to check that the given value is defined and object-like.
|
|
6
|
+
*/
|
|
4
7
|
const isObject = (obj) => {
|
|
5
8
|
return obj != null && typeof obj === "object";
|
|
6
9
|
};
|
|
7
10
|
exports.isObject = isObject;
|
|
11
|
+
/**
|
|
12
|
+
* Guard to check that the given value is defined, is an object,
|
|
13
|
+
* and seems to be a "plain" object, descending directly from Object.
|
|
14
|
+
* This won't prevent all shenanigans, but is a low-effort check.
|
|
15
|
+
*/
|
|
8
16
|
const isPlainObject = (obj) => {
|
|
9
17
|
if (!(0, exports.isObject)(obj)) {
|
|
10
18
|
return false;
|
package/cjs/ts/is-object.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEF;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scrubStackTrace = void 0;
|
|
4
|
+
const defaultKeepIf = (line) => {
|
|
5
|
+
return !line.includes("node:internal")
|
|
6
|
+
&& (!line.includes("/node_modules/") || line.includes("@rickosborne/"));
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Wrap an Error in a proxy which cleans up the stack trace to be
|
|
10
|
+
* more human-readable. It filters out lines from third-party code,
|
|
11
|
+
* so you can quickly see your own code in the call stack.
|
|
12
|
+
* May optionally include some way of indicating additional lines
|
|
13
|
+
* which should be removed, so a guard function could make itself
|
|
14
|
+
* transparent, making it seem like the caller threw the error.
|
|
15
|
+
* @param err - Some kind of Error.
|
|
16
|
+
* @param removeIf - A matcher to indicate whether a line should be removed (not kept!).
|
|
17
|
+
* Generally, you'll pass in the name of the calling function, calling file, or similar.
|
|
18
|
+
*/
|
|
19
|
+
const scrubStackTrace = (err, removeIf) => {
|
|
20
|
+
let keepIf;
|
|
21
|
+
if (typeof removeIf === "string") {
|
|
22
|
+
keepIf = (line) => !line.includes(removeIf);
|
|
23
|
+
}
|
|
24
|
+
else if (removeIf instanceof RegExp) {
|
|
25
|
+
keepIf = (line) => !removeIf.test(line);
|
|
26
|
+
}
|
|
27
|
+
else if (typeof removeIf === "function") {
|
|
28
|
+
keepIf = (line) => !removeIf(line);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
keepIf = () => true;
|
|
32
|
+
}
|
|
33
|
+
let scrubbedStack;
|
|
34
|
+
return new Proxy(err, {
|
|
35
|
+
get(target, p) {
|
|
36
|
+
var _a;
|
|
37
|
+
if (p !== "stack") {
|
|
38
|
+
return target[p];
|
|
39
|
+
}
|
|
40
|
+
if (scrubbedStack == null) {
|
|
41
|
+
scrubbedStack = (_a = target.stack) === null || _a === void 0 ? void 0 : _a.split("\n").filter(defaultKeepIf).filter(keepIf).join("\n");
|
|
42
|
+
}
|
|
43
|
+
return scrubbedStack;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
exports.scrubStackTrace = scrubStackTrace;
|
|
48
|
+
//# sourceMappingURL=scrub-stack-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrub-stack-trace.js","sourceRoot":"","sources":["../../../ts/scrub-stack-trace.ts"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;WAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACI,MAAM,eAAe,GAAG,CAC9B,GAAM,EACN,QAA0D,EACtD,EAAE;IACN,IAAI,MAAyB,CAAC;IAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,QAAQ,YAAY,MAAM,EAAE,CAAC;QACvC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,aAAiC,CAAC;IACtC,OAAO,IAAI,KAAK,CAAI,GAAG,EAAE;QACxB,GAAG,CAAC,MAAS,EAAE,CAAkB;;YAChC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAE,CAAY,CAAE,CAAC;YAC/B,CAAC;YACD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC3B,aAAa,GAAG,MAAA,MAAM,CAAC,KAAK,0CAAE,KAAK,CAAC,IAAI,EACtC,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,OAAO,aAAa,CAAC;QACtB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,eAAe,mBA6B1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../index.ts","../../ts/
|
|
1
|
+
{"root":["../../index.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-defined.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts","../../ts/scrub-stack-trace.ts"],"version":"5.7.2"}
|
package/esm/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export * from "./ts/assert-defined.js";
|
|
2
1
|
export * from "./ts/error-from-message.js";
|
|
3
2
|
export * from "./ts/has-array.js";
|
|
4
3
|
export * from "./ts/has-number.js";
|
|
5
4
|
export * from "./ts/has-own.js";
|
|
5
|
+
export * from "./ts/is-defined.js";
|
|
6
6
|
export * from "./ts/is-int.js";
|
|
7
7
|
export * from "./ts/is-list-of.js";
|
|
8
8
|
export * from "./ts/is-object.js";
|
|
9
9
|
export * from "./ts/is-predicate.js";
|
|
10
|
+
export * from "./ts/scrub-stack-trace.js";
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { scrubStackTrace } from "./scrub-stack-trace.js";
|
|
1
2
|
/**
|
|
2
3
|
* Helper for guards which expect text or an error, or
|
|
3
4
|
* can generate one when needed.
|
|
@@ -17,6 +18,6 @@ export const errorFromMessageOrError = (messageOrError, defaultConstructor = Err
|
|
|
17
18
|
else {
|
|
18
19
|
error = stringOrError;
|
|
19
20
|
}
|
|
20
|
-
return error;
|
|
21
|
+
return scrubStackTrace(error, " at errorFromMessageOrError ");
|
|
21
22
|
};
|
|
22
23
|
//# sourceMappingURL=error-from-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC/D,CAAC,CAAC"}
|
package/esm/ts/has-number.js
CHANGED
package/esm/ts/has-number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,
|
|
1
|
+
{"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAkC,EAAE;IAC1G,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAE,IAAI,CAAE,KAAK,QAAQ,CAAC;AAC7D,CAAC,CAAC"}
|
package/esm/ts/has-own.js
CHANGED
package/esm/ts/has-own.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAc1C;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAE,IAAwB,CAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { errorFromMessageOrError } from "./error-from-message.js";
|
|
2
|
+
/**
|
|
3
|
+
* Assert the given value is not null or undefined.
|
|
4
|
+
* Throws with the given message or error, otherwise.
|
|
5
|
+
*/
|
|
6
|
+
export function assertDefined(value, messageOrError) {
|
|
7
|
+
if (value != null) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
throw errorFromMessageOrError(messageOrError, RangeError);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Guard to filter out null or undefined values.
|
|
14
|
+
*/
|
|
15
|
+
export const isDefined = (obj) => obj != null;
|
|
16
|
+
/**
|
|
17
|
+
* Coerce a value's type to exclude null or undefined, or throw
|
|
18
|
+
* if it actually is null or undefined.
|
|
19
|
+
*/
|
|
20
|
+
export const expectDefined = (obj, messageOrError) => {
|
|
21
|
+
assertDefined(obj, messageOrError);
|
|
22
|
+
return obj;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=is-defined.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-defined.js","sourceRoot":"","sources":["../../../ts/is-defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,uBAAuB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAM,EAAyB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,GAAM,EACN,cAA8B,EACb,EAAE;IACnB,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
|
package/esm/ts/is-int.js
CHANGED
|
@@ -1,12 +1,47 @@
|
|
|
1
1
|
import { errorFromMessageOrError } from "./error-from-message.js";
|
|
2
|
+
/**
|
|
3
|
+
* Check whether the given value is not just numeric, but is
|
|
4
|
+
* also an integer.
|
|
5
|
+
*/
|
|
2
6
|
export const isInt = (obj) => typeof obj === "number" && !isNaN(obj) && Math.trunc(obj) === obj && obj !== Infinity && obj !== -Infinity;
|
|
7
|
+
/**
|
|
8
|
+
* Throw if the given value is not an integer.
|
|
9
|
+
*/
|
|
3
10
|
export function assertInt(value, messageOrError) {
|
|
4
11
|
if (!isInt(value)) {
|
|
5
12
|
throw errorFromMessageOrError(messageOrError, TypeError);
|
|
6
13
|
}
|
|
7
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Coerce a value's type to a number, throwing if it's not an integer.
|
|
17
|
+
*/
|
|
8
18
|
export const expectInt = (obj, messageOrError) => {
|
|
9
19
|
assertInt(obj, messageOrError);
|
|
10
20
|
return obj;
|
|
11
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
|
+
};
|
|
12
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,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,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,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"}
|