is-what 4.1.10-3 → 4.1.10-4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,346 +1,346 @@
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
- function getType(payload) {
10
- return Object.prototype.toString.call(payload).slice(8, -1);
11
- }
12
- /**
13
- * Returns whether the payload is undefined
14
- *
15
- * @param {*} payload
16
- * @returns {payload is undefined}
17
- */
18
- function isUndefined(payload) {
19
- return getType(payload) === 'Undefined';
20
- }
21
- /**
22
- * Returns whether the payload is null
23
- *
24
- * @param {*} payload
25
- * @returns {payload is null}
26
- */
27
- function isNull(payload) {
28
- return getType(payload) === 'Null';
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
- */
36
- function isPlainObject(payload) {
37
- if (getType(payload) !== 'Object')
38
- return false;
39
- const prototype = Object.getPrototypeOf(payload);
40
- return prototype.constructor === Object && prototype === Object.prototype;
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
- */
48
- function isObject(payload) {
49
- return isPlainObject(payload);
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
- */
57
- function isEmptyObject(payload) {
58
- return isPlainObject(payload) && Object.keys(payload).length === 0;
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
- */
66
- function isFullObject(payload) {
67
- return isPlainObject(payload) && Object.keys(payload).length > 0;
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
- */
75
- function isAnyObject(payload) {
76
- return getType(payload) === 'Object';
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
- */
87
- function isObjectLike(payload) {
88
- return isAnyObject(payload);
89
- }
90
- /**
91
- * Returns whether the payload is a function (regular or async)
92
- *
93
- * @param {*} payload
94
- * @returns {payload is AnyFunction}
95
- */
96
- function isFunction(payload) {
97
- return typeof payload === 'function';
98
- }
99
- /**
100
- * Returns whether the payload is an array
101
- *
102
- * @param {any} payload
103
- * @returns {payload is any[]}
104
- */
105
- function isArray(payload) {
106
- return getType(payload) === 'Array';
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
- */
114
- function isFullArray(payload) {
115
- return isArray(payload) && payload.length > 0;
116
- }
117
- /**
118
- * Returns whether the payload is a an empty array
119
- *
120
- * @param {*} payload
121
- * @returns {payload is []}
122
- */
123
- function isEmptyArray(payload) {
124
- return isArray(payload) && payload.length === 0;
125
- }
126
- /**
127
- * Returns whether the payload is a string
128
- *
129
- * @param {*} payload
130
- * @returns {payload is string}
131
- */
132
- function isString(payload) {
133
- return getType(payload) === 'String';
134
- }
135
- /**
136
- * Returns whether the payload is a string, BUT returns false for ''
137
- *
138
- * @param {*} payload
139
- * @returns {payload is string}
140
- */
141
- function isFullString(payload) {
142
- return isString(payload) && payload !== '';
143
- }
144
- /**
145
- * Returns whether the payload is ''
146
- *
147
- * @param {*} payload
148
- * @returns {payload is string}
149
- */
150
- function isEmptyString(payload) {
151
- return payload === '';
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
- */
161
- function isNumber(payload) {
162
- return getType(payload) === 'Number' && !isNaN(payload);
163
- }
164
- /**
165
- * Returns whether the payload is a positive number (but not 0)
166
- *
167
- * @param {*} payload
168
- * @returns {payload is number}
169
- */
170
- function isPositiveNumber(payload) {
171
- return isNumber(payload) && payload > 0;
172
- }
173
- /**
174
- * Returns whether the payload is a negative number (but not 0)
175
- *
176
- * @param {*} payload
177
- * @returns {payload is number}
178
- */
179
- function isNegativeNumber(payload) {
180
- return isNumber(payload) && payload < 0;
181
- }
182
- /**
183
- * Returns whether the payload is a boolean
184
- *
185
- * @param {*} payload
186
- * @returns {payload is boolean}
187
- */
188
- function isBoolean(payload) {
189
- return getType(payload) === 'Boolean';
190
- }
191
- /**
192
- * Returns whether the payload is a regular expression (RegExp)
193
- *
194
- * @param {*} payload
195
- * @returns {payload is RegExp}
196
- */
197
- function isRegExp(payload) {
198
- return getType(payload) === 'RegExp';
199
- }
200
- /**
201
- * Returns whether the payload is a Map
202
- *
203
- * @param {*} payload
204
- * @returns {payload is Map<any, any>}
205
- */
206
- function isMap(payload) {
207
- return getType(payload) === 'Map';
208
- }
209
- /**
210
- * Returns whether the payload is a WeakMap
211
- *
212
- * @param {*} payload
213
- * @returns {payload is WeakMap<any, any>}
214
- */
215
- function isWeakMap(payload) {
216
- return getType(payload) === 'WeakMap';
217
- }
218
- /**
219
- * Returns whether the payload is a Set
220
- *
221
- * @param {*} payload
222
- * @returns {payload is Set<any>}
223
- */
224
- function isSet(payload) {
225
- return getType(payload) === 'Set';
226
- }
227
- /**
228
- * Returns whether the payload is a WeakSet
229
- *
230
- * @param {*} payload
231
- * @returns {payload is WeakSet<any>}
232
- */
233
- function isWeakSet(payload) {
234
- return getType(payload) === 'WeakSet';
235
- }
236
- /**
237
- * Returns whether the payload is a Symbol
238
- *
239
- * @param {*} payload
240
- * @returns {payload is symbol}
241
- */
242
- function isSymbol(payload) {
243
- return getType(payload) === 'Symbol';
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
- */
251
- function isDate(payload) {
252
- return getType(payload) === 'Date' && !isNaN(payload);
253
- }
254
- /**
255
- * Returns whether the payload is a Blob
256
- *
257
- * @param {*} payload
258
- * @returns {payload is Blob}
259
- */
260
- function isBlob(payload) {
261
- return getType(payload) === 'Blob';
262
- }
263
- /**
264
- * Returns whether the payload is a File
265
- *
266
- * @param {*} payload
267
- * @returns {payload is File}
268
- */
269
- function isFile(payload) {
270
- return getType(payload) === 'File';
271
- }
272
- /**
273
- * Returns whether the payload is a Promise
274
- *
275
- * @param {*} payload
276
- * @returns {payload is Promise<any>}
277
- */
278
- function isPromise(payload) {
279
- return getType(payload) === 'Promise';
280
- }
281
- /**
282
- * Returns whether the payload is an Error
283
- *
284
- * @param {*} payload
285
- * @returns {payload is Error}
286
- */
287
- function isError(payload) {
288
- return getType(payload) === 'Error';
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
- */
296
- function isNaNValue(payload) {
297
- return getType(payload) === 'Number' && isNaN(payload);
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
- */
305
- function isPrimitive(payload) {
306
- return (isBoolean(payload) ||
307
- isNull(payload) ||
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
- */
319
- const isNullOrUndefined = isOneOf(isNull, isUndefined);
320
- function isOneOf(a, b, c, d, e) {
321
- return (value) => a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));
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
- */
334
- function isType(payload, type) {
335
- if (!(type instanceof Function)) {
336
- throw new TypeError('Type must be a function');
337
- }
338
- if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {
339
- throw new TypeError('Type is not a class');
340
- }
341
- // Classes usually have names (as functions usually have names)
342
- const name = type.name;
343
- return getType(payload) === name || Boolean(payload && payload.constructor === type);
3
+ /**
4
+ * Returns the object type of the given payload
5
+ *
6
+ * @param {*} payload
7
+ * @returns {string}
8
+ */
9
+ function getType(payload) {
10
+ return Object.prototype.toString.call(payload).slice(8, -1);
11
+ }
12
+ /**
13
+ * Returns whether the payload is undefined
14
+ *
15
+ * @param {*} payload
16
+ * @returns {payload is undefined}
17
+ */
18
+ function isUndefined(payload) {
19
+ return getType(payload) === 'Undefined';
20
+ }
21
+ /**
22
+ * Returns whether the payload is null
23
+ *
24
+ * @param {*} payload
25
+ * @returns {payload is null}
26
+ */
27
+ function isNull(payload) {
28
+ return getType(payload) === 'Null';
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
+ */
36
+ function isPlainObject(payload) {
37
+ if (getType(payload) !== 'Object')
38
+ return false;
39
+ const prototype = Object.getPrototypeOf(payload);
40
+ return prototype.constructor === Object && prototype === Object.prototype;
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
+ */
48
+ function isObject(payload) {
49
+ return isPlainObject(payload);
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
+ */
57
+ function isEmptyObject(payload) {
58
+ return isPlainObject(payload) && Object.keys(payload).length === 0;
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
+ */
66
+ function isFullObject(payload) {
67
+ return isPlainObject(payload) && Object.keys(payload).length > 0;
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
+ */
75
+ function isAnyObject(payload) {
76
+ return getType(payload) === 'Object';
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
+ */
87
+ function isObjectLike(payload) {
88
+ return isAnyObject(payload);
89
+ }
90
+ /**
91
+ * Returns whether the payload is a function (regular or async)
92
+ *
93
+ * @param {*} payload
94
+ * @returns {payload is AnyFunction}
95
+ */
96
+ function isFunction(payload) {
97
+ return typeof payload === 'function';
98
+ }
99
+ /**
100
+ * Returns whether the payload is an array
101
+ *
102
+ * @param {any} payload
103
+ * @returns {payload is any[]}
104
+ */
105
+ function isArray(payload) {
106
+ return getType(payload) === 'Array';
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
+ */
114
+ function isFullArray(payload) {
115
+ return isArray(payload) && payload.length > 0;
116
+ }
117
+ /**
118
+ * Returns whether the payload is a an empty array
119
+ *
120
+ * @param {*} payload
121
+ * @returns {payload is []}
122
+ */
123
+ function isEmptyArray(payload) {
124
+ return isArray(payload) && payload.length === 0;
125
+ }
126
+ /**
127
+ * Returns whether the payload is a string
128
+ *
129
+ * @param {*} payload
130
+ * @returns {payload is string}
131
+ */
132
+ function isString(payload) {
133
+ return getType(payload) === 'String';
134
+ }
135
+ /**
136
+ * Returns whether the payload is a string, BUT returns false for ''
137
+ *
138
+ * @param {*} payload
139
+ * @returns {payload is string}
140
+ */
141
+ function isFullString(payload) {
142
+ return isString(payload) && payload !== '';
143
+ }
144
+ /**
145
+ * Returns whether the payload is ''
146
+ *
147
+ * @param {*} payload
148
+ * @returns {payload is string}
149
+ */
150
+ function isEmptyString(payload) {
151
+ return payload === '';
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
+ */
161
+ function isNumber(payload) {
162
+ return getType(payload) === 'Number' && !isNaN(payload);
163
+ }
164
+ /**
165
+ * Returns whether the payload is a positive number (but not 0)
166
+ *
167
+ * @param {*} payload
168
+ * @returns {payload is number}
169
+ */
170
+ function isPositiveNumber(payload) {
171
+ return isNumber(payload) && payload > 0;
172
+ }
173
+ /**
174
+ * Returns whether the payload is a negative number (but not 0)
175
+ *
176
+ * @param {*} payload
177
+ * @returns {payload is number}
178
+ */
179
+ function isNegativeNumber(payload) {
180
+ return isNumber(payload) && payload < 0;
181
+ }
182
+ /**
183
+ * Returns whether the payload is a boolean
184
+ *
185
+ * @param {*} payload
186
+ * @returns {payload is boolean}
187
+ */
188
+ function isBoolean(payload) {
189
+ return getType(payload) === 'Boolean';
190
+ }
191
+ /**
192
+ * Returns whether the payload is a regular expression (RegExp)
193
+ *
194
+ * @param {*} payload
195
+ * @returns {payload is RegExp}
196
+ */
197
+ function isRegExp(payload) {
198
+ return getType(payload) === 'RegExp';
199
+ }
200
+ /**
201
+ * Returns whether the payload is a Map
202
+ *
203
+ * @param {*} payload
204
+ * @returns {payload is Map<any, any>}
205
+ */
206
+ function isMap(payload) {
207
+ return getType(payload) === 'Map';
208
+ }
209
+ /**
210
+ * Returns whether the payload is a WeakMap
211
+ *
212
+ * @param {*} payload
213
+ * @returns {payload is WeakMap<any, any>}
214
+ */
215
+ function isWeakMap(payload) {
216
+ return getType(payload) === 'WeakMap';
217
+ }
218
+ /**
219
+ * Returns whether the payload is a Set
220
+ *
221
+ * @param {*} payload
222
+ * @returns {payload is Set<any>}
223
+ */
224
+ function isSet(payload) {
225
+ return getType(payload) === 'Set';
226
+ }
227
+ /**
228
+ * Returns whether the payload is a WeakSet
229
+ *
230
+ * @param {*} payload
231
+ * @returns {payload is WeakSet<any>}
232
+ */
233
+ function isWeakSet(payload) {
234
+ return getType(payload) === 'WeakSet';
235
+ }
236
+ /**
237
+ * Returns whether the payload is a Symbol
238
+ *
239
+ * @param {*} payload
240
+ * @returns {payload is symbol}
241
+ */
242
+ function isSymbol(payload) {
243
+ return getType(payload) === 'Symbol';
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
+ */
251
+ function isDate(payload) {
252
+ return getType(payload) === 'Date' && !isNaN(payload);
253
+ }
254
+ /**
255
+ * Returns whether the payload is a Blob
256
+ *
257
+ * @param {*} payload
258
+ * @returns {payload is Blob}
259
+ */
260
+ function isBlob(payload) {
261
+ return getType(payload) === 'Blob';
262
+ }
263
+ /**
264
+ * Returns whether the payload is a File
265
+ *
266
+ * @param {*} payload
267
+ * @returns {payload is File}
268
+ */
269
+ function isFile(payload) {
270
+ return getType(payload) === 'File';
271
+ }
272
+ /**
273
+ * Returns whether the payload is a Promise
274
+ *
275
+ * @param {*} payload
276
+ * @returns {payload is Promise<any>}
277
+ */
278
+ function isPromise(payload) {
279
+ return getType(payload) === 'Promise';
280
+ }
281
+ /**
282
+ * Returns whether the payload is an Error
283
+ *
284
+ * @param {*} payload
285
+ * @returns {payload is Error}
286
+ */
287
+ function isError(payload) {
288
+ return getType(payload) === 'Error';
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
+ */
296
+ function isNaNValue(payload) {
297
+ return getType(payload) === 'Number' && isNaN(payload);
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
+ */
305
+ function isPrimitive(payload) {
306
+ return (isBoolean(payload) ||
307
+ isNull(payload) ||
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
+ */
319
+ const isNullOrUndefined = isOneOf(isNull, isUndefined);
320
+ function isOneOf(a, b, c, d, e) {
321
+ return (value) => a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));
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
+ */
334
+ function isType(payload, type) {
335
+ if (!(type instanceof Function)) {
336
+ throw new TypeError('Type must be a function');
337
+ }
338
+ if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {
339
+ throw new TypeError('Type is not a class');
340
+ }
341
+ // Classes usually have names (as functions usually have names)
342
+ const name = type.name;
343
+ return getType(payload) === name || Boolean(payload && payload.constructor === type);
344
344
  }
345
345
 
346
346
  exports.getType = getType;