is-what 4.1.10 → 4.1.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,346 +1,120 @@
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
- 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
- */
4
+ return Object.prototype.toString.call(payload).slice(8, -1);
5
+ }
18
6
  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
- */
7
+ return getType(payload) === "Undefined";
8
+ }
27
9
  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
- */
10
+ return getType(payload) === "Null";
11
+ }
36
12
  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
- */
13
+ if (getType(payload) !== "Object")
14
+ return false;
15
+ const prototype = Object.getPrototypeOf(payload);
16
+ return prototype.constructor === Object && prototype === Object.prototype;
17
+ }
48
18
  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
- */
19
+ return isPlainObject(payload);
20
+ }
57
21
  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
- */
22
+ return isPlainObject(payload) && Object.keys(payload).length === 0;
23
+ }
66
24
  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
- */
25
+ return isPlainObject(payload) && Object.keys(payload).length > 0;
26
+ }
75
27
  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
- */
28
+ return getType(payload) === "Object";
29
+ }
87
30
  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
- */
31
+ return isAnyObject(payload);
32
+ }
96
33
  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
- */
34
+ return typeof payload === "function";
35
+ }
105
36
  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
- */
37
+ return getType(payload) === "Array";
38
+ }
114
39
  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
- */
40
+ return isArray(payload) && payload.length > 0;
41
+ }
123
42
  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
- */
43
+ return isArray(payload) && payload.length === 0;
44
+ }
132
45
  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
- */
46
+ return getType(payload) === "String";
47
+ }
141
48
  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
- */
49
+ return isString(payload) && payload !== "";
50
+ }
150
51
  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
- */
52
+ return payload === "";
53
+ }
161
54
  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
- */
55
+ return getType(payload) === "Number" && !isNaN(payload);
56
+ }
170
57
  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
- */
58
+ return isNumber(payload) && payload > 0;
59
+ }
179
60
  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
- */
61
+ return isNumber(payload) && payload < 0;
62
+ }
188
63
  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
- */
64
+ return getType(payload) === "Boolean";
65
+ }
197
66
  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
- */
67
+ return getType(payload) === "RegExp";
68
+ }
206
69
  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
- */
70
+ return getType(payload) === "Map";
71
+ }
215
72
  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
- */
73
+ return getType(payload) === "WeakMap";
74
+ }
224
75
  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
- */
76
+ return getType(payload) === "Set";
77
+ }
233
78
  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
- */
79
+ return getType(payload) === "WeakSet";
80
+ }
242
81
  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
- */
82
+ return getType(payload) === "Symbol";
83
+ }
251
84
  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
- */
85
+ return getType(payload) === "Date" && !isNaN(payload);
86
+ }
260
87
  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
- */
88
+ return getType(payload) === "Blob";
89
+ }
269
90
  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
- */
91
+ return getType(payload) === "File";
92
+ }
278
93
  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
- */
94
+ return getType(payload) === "Promise";
95
+ }
287
96
  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
- */
97
+ return getType(payload) === "Error";
98
+ }
296
99
  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
- */
100
+ return getType(payload) === "Number" && isNaN(payload);
101
+ }
305
102
  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
- */
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
- 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
- */
107
+ return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);
108
+ }
334
109
  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);
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);
344
118
  }
345
119
 
346
120
  exports.getType = getType;