is-what 4.1.10-2 → 4.1.10-4

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