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/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
- 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
- */
2
+ return Object.prototype.toString.call(payload).slice(8, -1);
3
+ }
16
4
  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
- */
5
+ return getType(payload) === "Undefined";
6
+ }
25
7
  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
- */
8
+ return getType(payload) === "Null";
9
+ }
34
10
  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
- */
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
- 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
- */
17
+ return isPlainObject(payload);
18
+ }
55
19
  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
- */
20
+ return isPlainObject(payload) && Object.keys(payload).length === 0;
21
+ }
64
22
  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
- */
23
+ return isPlainObject(payload) && Object.keys(payload).length > 0;
24
+ }
73
25
  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
- */
26
+ return getType(payload) === "Object";
27
+ }
85
28
  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
- */
29
+ return isAnyObject(payload);
30
+ }
94
31
  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
- */
32
+ return typeof payload === "function";
33
+ }
103
34
  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
- */
35
+ return getType(payload) === "Array";
36
+ }
112
37
  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
- */
38
+ return isArray(payload) && payload.length > 0;
39
+ }
121
40
  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
- */
41
+ return isArray(payload) && payload.length === 0;
42
+ }
130
43
  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
- */
44
+ return getType(payload) === "String";
45
+ }
139
46
  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
- */
47
+ return isString(payload) && payload !== "";
48
+ }
148
49
  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
- */
50
+ return payload === "";
51
+ }
159
52
  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
- */
53
+ return getType(payload) === "Number" && !isNaN(payload);
54
+ }
168
55
  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
- */
56
+ return isNumber(payload) && payload > 0;
57
+ }
177
58
  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
- */
59
+ return isNumber(payload) && payload < 0;
60
+ }
186
61
  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
- */
62
+ return getType(payload) === "Boolean";
63
+ }
195
64
  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
- */
65
+ return getType(payload) === "RegExp";
66
+ }
204
67
  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
- */
68
+ return getType(payload) === "Map";
69
+ }
213
70
  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
- */
71
+ return getType(payload) === "WeakMap";
72
+ }
222
73
  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
- */
74
+ return getType(payload) === "Set";
75
+ }
231
76
  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
- */
77
+ return getType(payload) === "WeakSet";
78
+ }
240
79
  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
- */
80
+ return getType(payload) === "Symbol";
81
+ }
249
82
  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
- */
83
+ return getType(payload) === "Date" && !isNaN(payload);
84
+ }
258
85
  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
- */
86
+ return getType(payload) === "Blob";
87
+ }
267
88
  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
- */
89
+ return getType(payload) === "File";
90
+ }
276
91
  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
- */
92
+ return getType(payload) === "Promise";
93
+ }
285
94
  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
- */
95
+ return getType(payload) === "Error";
96
+ }
294
97
  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
- */
98
+ return getType(payload) === "Number" && isNaN(payload);
99
+ }
303
100
  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
- */
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
- 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
- */
105
+ return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);
106
+ }
332
107
  function isType(payload, type) {
333
- if (!(type instanceof Function)) {
334
- throw new TypeError('Type must be a function');
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
- if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {
337
- throw new TypeError('Type is not a class');
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
- // Classes usually have names (as functions usually have names)
340
- const name = type.name;
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
- "sideEffects": false,
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 ./scripts/rollup.config.js",
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-typescript2": "^0.34.1",
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": {