is-what 4.1.10 → 4.1.12
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 +12 -0
- package/dist/cjs/index.cjs +95 -303
- package/dist/cjs/index.d.cts +111 -44
- package/dist/index.d.ts +111 -44
- package/dist/index.js +95 -304
- package/package.json +9 -6
package/README.md
CHANGED
@@ -180,6 +180,18 @@ getType('') // returns 'String'
|
|
180
180
|
isType('', String) // returns true
|
181
181
|
```
|
182
182
|
|
183
|
+
If you just want to make sure your object _inherits_ from a particular class or
|
184
|
+
`toStringTag` value, you can use `isInstanceOf()` like this:
|
185
|
+
|
186
|
+
```js
|
187
|
+
import { isInstanceOf } from 'is-what'
|
188
|
+
|
189
|
+
isInstanceOf(new XMLHttpRequest(), "EventTarget")
|
190
|
+
// returns true
|
191
|
+
isInstanceOf(globalThis, ReadableStream)
|
192
|
+
// returns false
|
193
|
+
```
|
194
|
+
|
183
195
|
## TypeScript
|
184
196
|
|
185
197
|
is-what makes TypeScript know the type during if statements. This means that a check returns the type of the payload for TypeScript users.
|
package/dist/cjs/index.cjs
CHANGED
@@ -1,346 +1,137 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
/**
|
4
|
-
* Returns the object type of the given payload
|
5
|
-
*
|
6
|
-
* @param {*} payload
|
7
|
-
* @returns {string}
|
8
|
-
*/
|
9
3
|
function getType(payload) {
|
10
|
-
|
11
|
-
}
|
12
|
-
/**
|
13
|
-
* Returns whether the payload is undefined
|
14
|
-
*
|
15
|
-
* @param {*} payload
|
16
|
-
* @returns {payload is undefined}
|
17
|
-
*/
|
4
|
+
return Object.prototype.toString.call(payload).slice(8, -1);
|
5
|
+
}
|
18
6
|
function isUndefined(payload) {
|
19
|
-
|
20
|
-
}
|
21
|
-
/**
|
22
|
-
* Returns whether the payload is null
|
23
|
-
*
|
24
|
-
* @param {*} payload
|
25
|
-
* @returns {payload is null}
|
26
|
-
*/
|
7
|
+
return getType(payload) === "Undefined";
|
8
|
+
}
|
27
9
|
function isNull(payload) {
|
28
|
-
|
29
|
-
}
|
30
|
-
/**
|
31
|
-
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
32
|
-
*
|
33
|
-
* @param {*} payload
|
34
|
-
* @returns {payload is PlainObject}
|
35
|
-
*/
|
10
|
+
return getType(payload) === "Null";
|
11
|
+
}
|
36
12
|
function isPlainObject(payload) {
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
}
|
42
|
-
/**
|
43
|
-
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
44
|
-
*
|
45
|
-
* @param {*} payload
|
46
|
-
* @returns {payload is PlainObject}
|
47
|
-
*/
|
13
|
+
if (getType(payload) !== "Object")
|
14
|
+
return false;
|
15
|
+
const prototype = Object.getPrototypeOf(payload);
|
16
|
+
return !!prototype && prototype.constructor === Object && prototype === Object.prototype;
|
17
|
+
}
|
48
18
|
function isObject(payload) {
|
49
|
-
|
50
|
-
}
|
51
|
-
/**
|
52
|
-
* Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)
|
53
|
-
*
|
54
|
-
* @param {*} payload
|
55
|
-
* @returns {payload is { [K in any]: never }}
|
56
|
-
*/
|
19
|
+
return isPlainObject(payload);
|
20
|
+
}
|
57
21
|
function isEmptyObject(payload) {
|
58
|
-
|
59
|
-
}
|
60
|
-
/**
|
61
|
-
* Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)
|
62
|
-
*
|
63
|
-
* @param {*} payload
|
64
|
-
* @returns {payload is PlainObject}
|
65
|
-
*/
|
22
|
+
return isPlainObject(payload) && Object.keys(payload).length === 0;
|
23
|
+
}
|
66
24
|
function isFullObject(payload) {
|
67
|
-
|
68
|
-
}
|
69
|
-
/**
|
70
|
-
* Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)
|
71
|
-
*
|
72
|
-
* @param {*} payload
|
73
|
-
* @returns {payload is PlainObject}
|
74
|
-
*/
|
25
|
+
return isPlainObject(payload) && Object.keys(payload).length > 0;
|
26
|
+
}
|
75
27
|
function isAnyObject(payload) {
|
76
|
-
|
77
|
-
}
|
78
|
-
/**
|
79
|
-
* Returns whether the payload is an object like a type passed in < >
|
80
|
-
*
|
81
|
-
* Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.
|
82
|
-
*
|
83
|
-
* @template T this must be passed in < >
|
84
|
-
* @param {*} payload
|
85
|
-
* @returns {payload is T}
|
86
|
-
*/
|
28
|
+
return getType(payload) === "Object";
|
29
|
+
}
|
87
30
|
function isObjectLike(payload) {
|
88
|
-
|
89
|
-
}
|
90
|
-
/**
|
91
|
-
* Returns whether the payload is a function (regular or async)
|
92
|
-
*
|
93
|
-
* @param {*} payload
|
94
|
-
* @returns {payload is AnyFunction}
|
95
|
-
*/
|
31
|
+
return isAnyObject(payload);
|
32
|
+
}
|
96
33
|
function isFunction(payload) {
|
97
|
-
|
98
|
-
}
|
99
|
-
/**
|
100
|
-
* Returns whether the payload is an array
|
101
|
-
*
|
102
|
-
* @param {any} payload
|
103
|
-
* @returns {payload is any[]}
|
104
|
-
*/
|
34
|
+
return typeof payload === "function";
|
35
|
+
}
|
105
36
|
function isArray(payload) {
|
106
|
-
|
107
|
-
}
|
108
|
-
/**
|
109
|
-
* Returns whether the payload is a an array with at least 1 item
|
110
|
-
*
|
111
|
-
* @param {*} payload
|
112
|
-
* @returns {payload is any[]}
|
113
|
-
*/
|
37
|
+
return getType(payload) === "Array";
|
38
|
+
}
|
114
39
|
function isFullArray(payload) {
|
115
|
-
|
116
|
-
}
|
117
|
-
/**
|
118
|
-
* Returns whether the payload is a an empty array
|
119
|
-
*
|
120
|
-
* @param {*} payload
|
121
|
-
* @returns {payload is []}
|
122
|
-
*/
|
40
|
+
return isArray(payload) && payload.length > 0;
|
41
|
+
}
|
123
42
|
function isEmptyArray(payload) {
|
124
|
-
|
125
|
-
}
|
126
|
-
/**
|
127
|
-
* Returns whether the payload is a string
|
128
|
-
*
|
129
|
-
* @param {*} payload
|
130
|
-
* @returns {payload is string}
|
131
|
-
*/
|
43
|
+
return isArray(payload) && payload.length === 0;
|
44
|
+
}
|
132
45
|
function isString(payload) {
|
133
|
-
|
134
|
-
}
|
135
|
-
/**
|
136
|
-
* Returns whether the payload is a string, BUT returns false for ''
|
137
|
-
*
|
138
|
-
* @param {*} payload
|
139
|
-
* @returns {payload is string}
|
140
|
-
*/
|
46
|
+
return getType(payload) === "String";
|
47
|
+
}
|
141
48
|
function isFullString(payload) {
|
142
|
-
|
143
|
-
}
|
144
|
-
/**
|
145
|
-
* Returns whether the payload is ''
|
146
|
-
*
|
147
|
-
* @param {*} payload
|
148
|
-
* @returns {payload is string}
|
149
|
-
*/
|
49
|
+
return isString(payload) && payload !== "";
|
50
|
+
}
|
150
51
|
function isEmptyString(payload) {
|
151
|
-
|
152
|
-
}
|
153
|
-
/**
|
154
|
-
* Returns whether the payload is a number (but not NaN)
|
155
|
-
*
|
156
|
-
* This will return `false` for `NaN`!!
|
157
|
-
*
|
158
|
-
* @param {*} payload
|
159
|
-
* @returns {payload is number}
|
160
|
-
*/
|
52
|
+
return payload === "";
|
53
|
+
}
|
161
54
|
function isNumber(payload) {
|
162
|
-
|
163
|
-
}
|
164
|
-
/**
|
165
|
-
* Returns whether the payload is a positive number (but not 0)
|
166
|
-
*
|
167
|
-
* @param {*} payload
|
168
|
-
* @returns {payload is number}
|
169
|
-
*/
|
55
|
+
return getType(payload) === "Number" && !isNaN(payload);
|
56
|
+
}
|
170
57
|
function isPositiveNumber(payload) {
|
171
|
-
|
172
|
-
}
|
173
|
-
/**
|
174
|
-
* Returns whether the payload is a negative number (but not 0)
|
175
|
-
*
|
176
|
-
* @param {*} payload
|
177
|
-
* @returns {payload is number}
|
178
|
-
*/
|
58
|
+
return isNumber(payload) && payload > 0;
|
59
|
+
}
|
179
60
|
function isNegativeNumber(payload) {
|
180
|
-
|
181
|
-
}
|
182
|
-
/**
|
183
|
-
* Returns whether the payload is a boolean
|
184
|
-
*
|
185
|
-
* @param {*} payload
|
186
|
-
* @returns {payload is boolean}
|
187
|
-
*/
|
61
|
+
return isNumber(payload) && payload < 0;
|
62
|
+
}
|
188
63
|
function isBoolean(payload) {
|
189
|
-
|
190
|
-
}
|
191
|
-
/**
|
192
|
-
* Returns whether the payload is a regular expression (RegExp)
|
193
|
-
*
|
194
|
-
* @param {*} payload
|
195
|
-
* @returns {payload is RegExp}
|
196
|
-
*/
|
64
|
+
return getType(payload) === "Boolean";
|
65
|
+
}
|
197
66
|
function isRegExp(payload) {
|
198
|
-
|
199
|
-
}
|
200
|
-
/**
|
201
|
-
* Returns whether the payload is a Map
|
202
|
-
*
|
203
|
-
* @param {*} payload
|
204
|
-
* @returns {payload is Map<any, any>}
|
205
|
-
*/
|
67
|
+
return getType(payload) === "RegExp";
|
68
|
+
}
|
206
69
|
function isMap(payload) {
|
207
|
-
|
208
|
-
}
|
209
|
-
/**
|
210
|
-
* Returns whether the payload is a WeakMap
|
211
|
-
*
|
212
|
-
* @param {*} payload
|
213
|
-
* @returns {payload is WeakMap<any, any>}
|
214
|
-
*/
|
70
|
+
return getType(payload) === "Map";
|
71
|
+
}
|
215
72
|
function isWeakMap(payload) {
|
216
|
-
|
217
|
-
}
|
218
|
-
/**
|
219
|
-
* Returns whether the payload is a Set
|
220
|
-
*
|
221
|
-
* @param {*} payload
|
222
|
-
* @returns {payload is Set<any>}
|
223
|
-
*/
|
73
|
+
return getType(payload) === "WeakMap";
|
74
|
+
}
|
224
75
|
function isSet(payload) {
|
225
|
-
|
226
|
-
}
|
227
|
-
/**
|
228
|
-
* Returns whether the payload is a WeakSet
|
229
|
-
*
|
230
|
-
* @param {*} payload
|
231
|
-
* @returns {payload is WeakSet<any>}
|
232
|
-
*/
|
76
|
+
return getType(payload) === "Set";
|
77
|
+
}
|
233
78
|
function isWeakSet(payload) {
|
234
|
-
|
235
|
-
}
|
236
|
-
/**
|
237
|
-
* Returns whether the payload is a Symbol
|
238
|
-
*
|
239
|
-
* @param {*} payload
|
240
|
-
* @returns {payload is symbol}
|
241
|
-
*/
|
79
|
+
return getType(payload) === "WeakSet";
|
80
|
+
}
|
242
81
|
function isSymbol(payload) {
|
243
|
-
|
244
|
-
}
|
245
|
-
/**
|
246
|
-
* Returns whether the payload is a Date, and that the date is valid
|
247
|
-
*
|
248
|
-
* @param {*} payload
|
249
|
-
* @returns {payload is Date}
|
250
|
-
*/
|
82
|
+
return getType(payload) === "Symbol";
|
83
|
+
}
|
251
84
|
function isDate(payload) {
|
252
|
-
|
253
|
-
}
|
254
|
-
/**
|
255
|
-
* Returns whether the payload is a Blob
|
256
|
-
*
|
257
|
-
* @param {*} payload
|
258
|
-
* @returns {payload is Blob}
|
259
|
-
*/
|
85
|
+
return getType(payload) === "Date" && !isNaN(payload);
|
86
|
+
}
|
260
87
|
function isBlob(payload) {
|
261
|
-
|
262
|
-
}
|
263
|
-
/**
|
264
|
-
* Returns whether the payload is a File
|
265
|
-
*
|
266
|
-
* @param {*} payload
|
267
|
-
* @returns {payload is File}
|
268
|
-
*/
|
88
|
+
return getType(payload) === "Blob";
|
89
|
+
}
|
269
90
|
function isFile(payload) {
|
270
|
-
|
271
|
-
}
|
272
|
-
/**
|
273
|
-
* Returns whether the payload is a Promise
|
274
|
-
*
|
275
|
-
* @param {*} payload
|
276
|
-
* @returns {payload is Promise<any>}
|
277
|
-
*/
|
91
|
+
return getType(payload) === "File";
|
92
|
+
}
|
278
93
|
function isPromise(payload) {
|
279
|
-
|
280
|
-
}
|
281
|
-
/**
|
282
|
-
* Returns whether the payload is an Error
|
283
|
-
*
|
284
|
-
* @param {*} payload
|
285
|
-
* @returns {payload is Error}
|
286
|
-
*/
|
94
|
+
return getType(payload) === "Promise";
|
95
|
+
}
|
287
96
|
function isError(payload) {
|
288
|
-
|
289
|
-
}
|
290
|
-
/**
|
291
|
-
* Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)
|
292
|
-
*
|
293
|
-
* @param {*} payload
|
294
|
-
* @returns {payload is typeof NaN}
|
295
|
-
*/
|
97
|
+
return getType(payload) === "Error";
|
98
|
+
}
|
296
99
|
function isNaNValue(payload) {
|
297
|
-
|
298
|
-
}
|
299
|
-
/**
|
300
|
-
* Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)
|
301
|
-
*
|
302
|
-
* @param {*} payload
|
303
|
-
* @returns {(payload is boolean | null | undefined | number | string | symbol)}
|
304
|
-
*/
|
100
|
+
return getType(payload) === "Number" && isNaN(payload);
|
101
|
+
}
|
305
102
|
function isPrimitive(payload) {
|
306
|
-
|
307
|
-
|
308
|
-
isUndefined(payload) ||
|
309
|
-
isNumber(payload) ||
|
310
|
-
isString(payload) ||
|
311
|
-
isSymbol(payload));
|
312
|
-
}
|
313
|
-
/**
|
314
|
-
* Returns true whether the payload is null or undefined
|
315
|
-
*
|
316
|
-
* @param {*} payload
|
317
|
-
* @returns {(payload is null | undefined)}
|
318
|
-
*/
|
103
|
+
return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);
|
104
|
+
}
|
319
105
|
const isNullOrUndefined = isOneOf(isNull, isUndefined);
|
320
106
|
function isOneOf(a, b, c, d, e) {
|
321
|
-
|
322
|
-
}
|
323
|
-
/**
|
324
|
-
* Does a generic check to check that the given payload is of a given type.
|
325
|
-
* In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);
|
326
|
-
* It will, however, differentiate between object and null
|
327
|
-
*
|
328
|
-
* @template T
|
329
|
-
* @param {*} payload
|
330
|
-
* @param {T} type
|
331
|
-
* @throws {TypeError} Will throw type error if type is an invalid type
|
332
|
-
* @returns {payload is T}
|
333
|
-
*/
|
107
|
+
return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);
|
108
|
+
}
|
334
109
|
function isType(payload, type) {
|
335
|
-
|
336
|
-
|
110
|
+
if (!(type instanceof Function)) {
|
111
|
+
throw new TypeError("Type must be a function");
|
112
|
+
}
|
113
|
+
if (!Object.prototype.hasOwnProperty.call(type, "prototype")) {
|
114
|
+
throw new TypeError("Type is not a class");
|
115
|
+
}
|
116
|
+
const name = type.name;
|
117
|
+
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
118
|
+
}
|
119
|
+
function isInstanceOf(value, classOrClassName) {
|
120
|
+
if (typeof classOrClassName === "function") {
|
121
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
122
|
+
if (isType(p, classOrClassName)) {
|
123
|
+
return true;
|
124
|
+
}
|
337
125
|
}
|
338
|
-
|
339
|
-
|
126
|
+
return false;
|
127
|
+
} else {
|
128
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
129
|
+
if (getType(p) === classOrClassName) {
|
130
|
+
return true;
|
131
|
+
}
|
340
132
|
}
|
341
|
-
|
342
|
-
|
343
|
-
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
133
|
+
return false;
|
134
|
+
}
|
344
135
|
}
|
345
136
|
|
346
137
|
exports.getType = getType;
|
@@ -358,6 +149,7 @@ exports.isFullArray = isFullArray;
|
|
358
149
|
exports.isFullObject = isFullObject;
|
359
150
|
exports.isFullString = isFullString;
|
360
151
|
exports.isFunction = isFunction;
|
152
|
+
exports.isInstanceOf = isInstanceOf;
|
361
153
|
exports.isMap = isMap;
|
362
154
|
exports.isNaNValue = isNaNValue;
|
363
155
|
exports.isNegativeNumber = isNegativeNumber;
|