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/dist/index.js
CHANGED
@@ -1,344 +1,135 @@
|
|
1
|
-
/**
|
2
|
-
* Returns the object type of the given payload
|
3
|
-
*
|
4
|
-
* @param {*} payload
|
5
|
-
* @returns {string}
|
6
|
-
*/
|
7
1
|
function getType(payload) {
|
8
|
-
|
9
|
-
}
|
10
|
-
/**
|
11
|
-
* Returns whether the payload is undefined
|
12
|
-
*
|
13
|
-
* @param {*} payload
|
14
|
-
* @returns {payload is undefined}
|
15
|
-
*/
|
2
|
+
return Object.prototype.toString.call(payload).slice(8, -1);
|
3
|
+
}
|
16
4
|
function isUndefined(payload) {
|
17
|
-
|
18
|
-
}
|
19
|
-
/**
|
20
|
-
* Returns whether the payload is null
|
21
|
-
*
|
22
|
-
* @param {*} payload
|
23
|
-
* @returns {payload is null}
|
24
|
-
*/
|
5
|
+
return getType(payload) === "Undefined";
|
6
|
+
}
|
25
7
|
function isNull(payload) {
|
26
|
-
|
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
|
-
*/
|
8
|
+
return getType(payload) === "Null";
|
9
|
+
}
|
34
10
|
function isPlainObject(payload) {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
*/
|
11
|
+
if (getType(payload) !== "Object")
|
12
|
+
return false;
|
13
|
+
const prototype = Object.getPrototypeOf(payload);
|
14
|
+
return !!prototype && prototype.constructor === Object && prototype === Object.prototype;
|
15
|
+
}
|
46
16
|
function isObject(payload) {
|
47
|
-
|
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
|
-
*/
|
17
|
+
return isPlainObject(payload);
|
18
|
+
}
|
55
19
|
function isEmptyObject(payload) {
|
56
|
-
|
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
|
-
*/
|
20
|
+
return isPlainObject(payload) && Object.keys(payload).length === 0;
|
21
|
+
}
|
64
22
|
function isFullObject(payload) {
|
65
|
-
|
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
|
-
*/
|
23
|
+
return isPlainObject(payload) && Object.keys(payload).length > 0;
|
24
|
+
}
|
73
25
|
function isAnyObject(payload) {
|
74
|
-
|
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
|
-
*/
|
26
|
+
return getType(payload) === "Object";
|
27
|
+
}
|
85
28
|
function isObjectLike(payload) {
|
86
|
-
|
87
|
-
}
|
88
|
-
/**
|
89
|
-
* Returns whether the payload is a function (regular or async)
|
90
|
-
*
|
91
|
-
* @param {*} payload
|
92
|
-
* @returns {payload is AnyFunction}
|
93
|
-
*/
|
29
|
+
return isAnyObject(payload);
|
30
|
+
}
|
94
31
|
function isFunction(payload) {
|
95
|
-
|
96
|
-
}
|
97
|
-
/**
|
98
|
-
* Returns whether the payload is an array
|
99
|
-
*
|
100
|
-
* @param {any} payload
|
101
|
-
* @returns {payload is any[]}
|
102
|
-
*/
|
32
|
+
return typeof payload === "function";
|
33
|
+
}
|
103
34
|
function isArray(payload) {
|
104
|
-
|
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
|
-
*/
|
35
|
+
return getType(payload) === "Array";
|
36
|
+
}
|
112
37
|
function isFullArray(payload) {
|
113
|
-
|
114
|
-
}
|
115
|
-
/**
|
116
|
-
* Returns whether the payload is a an empty array
|
117
|
-
*
|
118
|
-
* @param {*} payload
|
119
|
-
* @returns {payload is []}
|
120
|
-
*/
|
38
|
+
return isArray(payload) && payload.length > 0;
|
39
|
+
}
|
121
40
|
function isEmptyArray(payload) {
|
122
|
-
|
123
|
-
}
|
124
|
-
/**
|
125
|
-
* Returns whether the payload is a string
|
126
|
-
*
|
127
|
-
* @param {*} payload
|
128
|
-
* @returns {payload is string}
|
129
|
-
*/
|
41
|
+
return isArray(payload) && payload.length === 0;
|
42
|
+
}
|
130
43
|
function isString(payload) {
|
131
|
-
|
132
|
-
}
|
133
|
-
/**
|
134
|
-
* Returns whether the payload is a string, BUT returns false for ''
|
135
|
-
*
|
136
|
-
* @param {*} payload
|
137
|
-
* @returns {payload is string}
|
138
|
-
*/
|
44
|
+
return getType(payload) === "String";
|
45
|
+
}
|
139
46
|
function isFullString(payload) {
|
140
|
-
|
141
|
-
}
|
142
|
-
/**
|
143
|
-
* Returns whether the payload is ''
|
144
|
-
*
|
145
|
-
* @param {*} payload
|
146
|
-
* @returns {payload is string}
|
147
|
-
*/
|
47
|
+
return isString(payload) && payload !== "";
|
48
|
+
}
|
148
49
|
function isEmptyString(payload) {
|
149
|
-
|
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
|
-
*/
|
50
|
+
return payload === "";
|
51
|
+
}
|
159
52
|
function isNumber(payload) {
|
160
|
-
|
161
|
-
}
|
162
|
-
/**
|
163
|
-
* Returns whether the payload is a positive number (but not 0)
|
164
|
-
*
|
165
|
-
* @param {*} payload
|
166
|
-
* @returns {payload is number}
|
167
|
-
*/
|
53
|
+
return getType(payload) === "Number" && !isNaN(payload);
|
54
|
+
}
|
168
55
|
function isPositiveNumber(payload) {
|
169
|
-
|
170
|
-
}
|
171
|
-
/**
|
172
|
-
* Returns whether the payload is a negative number (but not 0)
|
173
|
-
*
|
174
|
-
* @param {*} payload
|
175
|
-
* @returns {payload is number}
|
176
|
-
*/
|
56
|
+
return isNumber(payload) && payload > 0;
|
57
|
+
}
|
177
58
|
function isNegativeNumber(payload) {
|
178
|
-
|
179
|
-
}
|
180
|
-
/**
|
181
|
-
* Returns whether the payload is a boolean
|
182
|
-
*
|
183
|
-
* @param {*} payload
|
184
|
-
* @returns {payload is boolean}
|
185
|
-
*/
|
59
|
+
return isNumber(payload) && payload < 0;
|
60
|
+
}
|
186
61
|
function isBoolean(payload) {
|
187
|
-
|
188
|
-
}
|
189
|
-
/**
|
190
|
-
* Returns whether the payload is a regular expression (RegExp)
|
191
|
-
*
|
192
|
-
* @param {*} payload
|
193
|
-
* @returns {payload is RegExp}
|
194
|
-
*/
|
62
|
+
return getType(payload) === "Boolean";
|
63
|
+
}
|
195
64
|
function isRegExp(payload) {
|
196
|
-
|
197
|
-
}
|
198
|
-
/**
|
199
|
-
* Returns whether the payload is a Map
|
200
|
-
*
|
201
|
-
* @param {*} payload
|
202
|
-
* @returns {payload is Map<any, any>}
|
203
|
-
*/
|
65
|
+
return getType(payload) === "RegExp";
|
66
|
+
}
|
204
67
|
function isMap(payload) {
|
205
|
-
|
206
|
-
}
|
207
|
-
/**
|
208
|
-
* Returns whether the payload is a WeakMap
|
209
|
-
*
|
210
|
-
* @param {*} payload
|
211
|
-
* @returns {payload is WeakMap<any, any>}
|
212
|
-
*/
|
68
|
+
return getType(payload) === "Map";
|
69
|
+
}
|
213
70
|
function isWeakMap(payload) {
|
214
|
-
|
215
|
-
}
|
216
|
-
/**
|
217
|
-
* Returns whether the payload is a Set
|
218
|
-
*
|
219
|
-
* @param {*} payload
|
220
|
-
* @returns {payload is Set<any>}
|
221
|
-
*/
|
71
|
+
return getType(payload) === "WeakMap";
|
72
|
+
}
|
222
73
|
function isSet(payload) {
|
223
|
-
|
224
|
-
}
|
225
|
-
/**
|
226
|
-
* Returns whether the payload is a WeakSet
|
227
|
-
*
|
228
|
-
* @param {*} payload
|
229
|
-
* @returns {payload is WeakSet<any>}
|
230
|
-
*/
|
74
|
+
return getType(payload) === "Set";
|
75
|
+
}
|
231
76
|
function isWeakSet(payload) {
|
232
|
-
|
233
|
-
}
|
234
|
-
/**
|
235
|
-
* Returns whether the payload is a Symbol
|
236
|
-
*
|
237
|
-
* @param {*} payload
|
238
|
-
* @returns {payload is symbol}
|
239
|
-
*/
|
77
|
+
return getType(payload) === "WeakSet";
|
78
|
+
}
|
240
79
|
function isSymbol(payload) {
|
241
|
-
|
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
|
-
*/
|
80
|
+
return getType(payload) === "Symbol";
|
81
|
+
}
|
249
82
|
function isDate(payload) {
|
250
|
-
|
251
|
-
}
|
252
|
-
/**
|
253
|
-
* Returns whether the payload is a Blob
|
254
|
-
*
|
255
|
-
* @param {*} payload
|
256
|
-
* @returns {payload is Blob}
|
257
|
-
*/
|
83
|
+
return getType(payload) === "Date" && !isNaN(payload);
|
84
|
+
}
|
258
85
|
function isBlob(payload) {
|
259
|
-
|
260
|
-
}
|
261
|
-
/**
|
262
|
-
* Returns whether the payload is a File
|
263
|
-
*
|
264
|
-
* @param {*} payload
|
265
|
-
* @returns {payload is File}
|
266
|
-
*/
|
86
|
+
return getType(payload) === "Blob";
|
87
|
+
}
|
267
88
|
function isFile(payload) {
|
268
|
-
|
269
|
-
}
|
270
|
-
/**
|
271
|
-
* Returns whether the payload is a Promise
|
272
|
-
*
|
273
|
-
* @param {*} payload
|
274
|
-
* @returns {payload is Promise<any>}
|
275
|
-
*/
|
89
|
+
return getType(payload) === "File";
|
90
|
+
}
|
276
91
|
function isPromise(payload) {
|
277
|
-
|
278
|
-
}
|
279
|
-
/**
|
280
|
-
* Returns whether the payload is an Error
|
281
|
-
*
|
282
|
-
* @param {*} payload
|
283
|
-
* @returns {payload is Error}
|
284
|
-
*/
|
92
|
+
return getType(payload) === "Promise";
|
93
|
+
}
|
285
94
|
function isError(payload) {
|
286
|
-
|
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
|
-
*/
|
95
|
+
return getType(payload) === "Error";
|
96
|
+
}
|
294
97
|
function isNaNValue(payload) {
|
295
|
-
|
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
|
-
*/
|
98
|
+
return getType(payload) === "Number" && isNaN(payload);
|
99
|
+
}
|
303
100
|
function isPrimitive(payload) {
|
304
|
-
|
305
|
-
|
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
|
-
*/
|
101
|
+
return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);
|
102
|
+
}
|
317
103
|
const isNullOrUndefined = isOneOf(isNull, isUndefined);
|
318
104
|
function isOneOf(a, b, c, d, e) {
|
319
|
-
|
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
|
-
*/
|
105
|
+
return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);
|
106
|
+
}
|
332
107
|
function isType(payload, type) {
|
333
|
-
|
334
|
-
|
108
|
+
if (!(type instanceof Function)) {
|
109
|
+
throw new TypeError("Type must be a function");
|
110
|
+
}
|
111
|
+
if (!Object.prototype.hasOwnProperty.call(type, "prototype")) {
|
112
|
+
throw new TypeError("Type is not a class");
|
113
|
+
}
|
114
|
+
const name = type.name;
|
115
|
+
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
116
|
+
}
|
117
|
+
function isInstanceOf(value, classOrClassName) {
|
118
|
+
if (typeof classOrClassName === "function") {
|
119
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
120
|
+
if (isType(p, classOrClassName)) {
|
121
|
+
return true;
|
122
|
+
}
|
335
123
|
}
|
336
|
-
|
337
|
-
|
124
|
+
return false;
|
125
|
+
} else {
|
126
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
127
|
+
if (getType(p) === classOrClassName) {
|
128
|
+
return true;
|
129
|
+
}
|
338
130
|
}
|
339
|
-
|
340
|
-
|
341
|
-
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
131
|
+
return false;
|
132
|
+
}
|
342
133
|
}
|
343
134
|
|
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 };
|
135
|
+
export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isInstanceOf, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };
|
package/package.json
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
{
|
2
2
|
"name": "is-what",
|
3
|
-
"
|
4
|
-
"type": "module",
|
5
|
-
"version": "4.1.10",
|
3
|
+
"version": "4.1.12",
|
6
4
|
"description": "JS type check (TypeScript supported) functions like `isPlainObject() isArray()` etc. A simple & small integration.",
|
5
|
+
"type": "module",
|
6
|
+
"sideEffects": false,
|
7
7
|
"types": "./dist/index.d.ts",
|
8
8
|
"module": "./dist/index.js",
|
9
9
|
"main": "./dist/index.js",
|
@@ -28,7 +28,8 @@
|
|
28
28
|
"scripts": {
|
29
29
|
"test": "vitest run",
|
30
30
|
"lint": "tsc --noEmit && eslint ./src --ext .ts",
|
31
|
-
"build": "rollup -c ./
|
31
|
+
"build": "rollup -c ./rollup.config.js",
|
32
|
+
"build:docs": "typedoc",
|
32
33
|
"release": "npm run lint && del dist && npm run build && np"
|
33
34
|
},
|
34
35
|
"repository": {
|
@@ -73,9 +74,11 @@
|
|
73
74
|
"np": "^7.7.0",
|
74
75
|
"prettier": "^2.8.8",
|
75
76
|
"rollup": "^3.22.0",
|
76
|
-
"rollup-plugin-
|
77
|
+
"rollup-plugin-dts": "^5.3.0",
|
78
|
+
"rollup-plugin-esbuild": "^5.0.0",
|
77
79
|
"typescript": "^5.0.4",
|
78
|
-
"vitest": "^0.31.1"
|
80
|
+
"vitest": "^0.31.1",
|
81
|
+
"typedoc": "^0.24.7"
|
79
82
|
},
|
80
83
|
"ava": {
|
81
84
|
"extensions": {
|