is-what 3.9.0 → 3.11.2
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/.eslintignore +1 -0
- package/README.md +7 -5
- package/{build/rollup.js → build.js} +1 -1
- package/dist/index.cjs.js +34 -14
- package/dist/index.esm.js +33 -15
- package/package.json +27 -22
- package/src/index.ts +43 -20
- package/test/ava.ts +68 -0
- package/tsconfig.json +1 -0
- package/types/index.d.ts +37 -25
package/.eslintignore
CHANGED
package/README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# is What? 🙉
|
|
2
2
|
|
|
3
|
+
Very simple & small JS type check functions. It's fully TypeScript supported!
|
|
4
|
+
|
|
3
5
|
```
|
|
4
6
|
npm i is-what
|
|
5
7
|
```
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
Or for deno available at: `"deno.land/x/is_what"`
|
|
8
10
|
|
|
9
11
|
## Motivation
|
|
10
12
|
|
|
@@ -110,7 +112,7 @@ getType(specialObject) // returns 'Object'
|
|
|
110
112
|
|
|
111
113
|
is-what makes TypeScript know the type during if statements. This means that a check returns the type of the payload for TypeScript users.
|
|
112
114
|
|
|
113
|
-
```
|
|
115
|
+
```ts
|
|
114
116
|
function isNumber (payload: any): payload is number {
|
|
115
117
|
// return boolean
|
|
116
118
|
}
|
|
@@ -127,7 +129,7 @@ function fn (payload: string | number): number {
|
|
|
127
129
|
|
|
128
130
|
`isPlainObject` and `isAnyObject` with TypeScript will declare the payload to be an object type with any props:
|
|
129
131
|
|
|
130
|
-
```
|
|
132
|
+
```ts
|
|
131
133
|
function isPlainObject (payload: any): payload is {[key: string]: any}
|
|
132
134
|
function isAnyObject (payload: any): payload is {[key: string]: any}
|
|
133
135
|
// The reason to return `{[key: string]: any}` is to be able to do
|
|
@@ -139,7 +141,7 @@ if (isPlainObject(payload) && payload.id) return payload.id
|
|
|
139
141
|
|
|
140
142
|
If you want more control over which kind of objects are allowed you can use `isObjectLike<T>`:
|
|
141
143
|
|
|
142
|
-
```
|
|
144
|
+
```ts
|
|
143
145
|
import { isObjectLike } from 'is-what'
|
|
144
146
|
// usage examples:
|
|
145
147
|
isObjectLike<{specificKey: string}>(payload)
|
|
@@ -149,7 +151,7 @@ isObjectLike<object>(payload)
|
|
|
149
151
|
|
|
150
152
|
`isObjectLike<T>` works like this under the hood:
|
|
151
153
|
|
|
152
|
-
```
|
|
154
|
+
```ts
|
|
153
155
|
function isObjectLike<T extends object> (payload: any): payload is T {
|
|
154
156
|
return isAnyObject(payload)
|
|
155
157
|
}
|
|
@@ -18,7 +18,7 @@ import typescript from 'rollup-plugin-typescript2'
|
|
|
18
18
|
// ------------------------------------------------------------------------------------------
|
|
19
19
|
// setup
|
|
20
20
|
// ------------------------------------------------------------------------------------------
|
|
21
|
-
const pkg = require('
|
|
21
|
+
const pkg = require('./package.json')
|
|
22
22
|
const name = pkg.name
|
|
23
23
|
const className = name.replace(/(^\w|-\w)/g, c => c.replace('-', '').toUpperCase())
|
|
24
24
|
const external = Object.keys(pkg.dependencies || [])
|
package/dist/index.cjs.js
CHANGED
|
@@ -33,7 +33,7 @@ function isNull(payload) {
|
|
|
33
33
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
34
34
|
*
|
|
35
35
|
* @param {*} payload
|
|
36
|
-
* @returns {payload is
|
|
36
|
+
* @returns {payload is Record<string, any>}
|
|
37
37
|
*/
|
|
38
38
|
function isPlainObject(payload) {
|
|
39
39
|
if (getType(payload) !== 'Object')
|
|
@@ -44,16 +44,25 @@ function isPlainObject(payload) {
|
|
|
44
44
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
45
45
|
*
|
|
46
46
|
* @param {*} payload
|
|
47
|
-
* @returns {payload is
|
|
47
|
+
* @returns {payload is Record<string, any>}
|
|
48
48
|
*/
|
|
49
49
|
function isObject(payload) {
|
|
50
50
|
return isPlainObject(payload);
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)
|
|
54
|
+
*
|
|
55
|
+
* @param {*} payload
|
|
56
|
+
* @returns {payload is { [K in any]: never }}
|
|
57
|
+
*/
|
|
58
|
+
function isEmptyObject(payload) {
|
|
59
|
+
return isPlainObject(payload) && Object.keys(payload).length === 0;
|
|
60
|
+
}
|
|
52
61
|
/**
|
|
53
62
|
* Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)
|
|
54
63
|
*
|
|
55
64
|
* @param {*} payload
|
|
56
|
-
* @returns {payload is
|
|
65
|
+
* @returns {payload is Record<string, any>}
|
|
57
66
|
*/
|
|
58
67
|
function isAnyObject(payload) {
|
|
59
68
|
return getType(payload) === 'Object';
|
|
@@ -74,7 +83,7 @@ function isObjectLike(payload) {
|
|
|
74
83
|
* Returns whether the payload is a function
|
|
75
84
|
*
|
|
76
85
|
* @param {*} payload
|
|
77
|
-
* @returns {payload is
|
|
86
|
+
* @returns {payload is AnyFunction}
|
|
78
87
|
*/
|
|
79
88
|
function isFunction(payload) {
|
|
80
89
|
return getType(payload) === 'Function';
|
|
@@ -82,12 +91,21 @@ function isFunction(payload) {
|
|
|
82
91
|
/**
|
|
83
92
|
* Returns whether the payload is an array
|
|
84
93
|
*
|
|
85
|
-
* @param {
|
|
86
|
-
* @returns {payload is
|
|
94
|
+
* @param {any} payload
|
|
95
|
+
* @returns {payload is any[]}
|
|
87
96
|
*/
|
|
88
97
|
function isArray(payload) {
|
|
89
98
|
return getType(payload) === 'Array';
|
|
90
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns whether the payload is a an empty array
|
|
102
|
+
*
|
|
103
|
+
* @param {*} payload
|
|
104
|
+
* @returns {payload is []}
|
|
105
|
+
*/
|
|
106
|
+
function isEmptyArray(payload) {
|
|
107
|
+
return isArray(payload) && payload.length === 0;
|
|
108
|
+
}
|
|
91
109
|
/**
|
|
92
110
|
* Returns whether the payload is a string
|
|
93
111
|
*
|
|
@@ -116,9 +134,9 @@ function isEmptyString(payload) {
|
|
|
116
134
|
return payload === '';
|
|
117
135
|
}
|
|
118
136
|
/**
|
|
119
|
-
* Returns whether the payload is a number
|
|
137
|
+
* Returns whether the payload is a number (but not NaN)
|
|
120
138
|
*
|
|
121
|
-
* This will return false for NaN
|
|
139
|
+
* This will return `false` for `NaN`!!
|
|
122
140
|
*
|
|
123
141
|
* @param {*} payload
|
|
124
142
|
* @returns {payload is number}
|
|
@@ -148,7 +166,7 @@ function isRegExp(payload) {
|
|
|
148
166
|
* Returns whether the payload is a Map
|
|
149
167
|
*
|
|
150
168
|
* @param {*} payload
|
|
151
|
-
* @returns {payload is Map}
|
|
169
|
+
* @returns {payload is Map<any, any>}
|
|
152
170
|
*/
|
|
153
171
|
function isMap(payload) {
|
|
154
172
|
return getType(payload) === 'Map';
|
|
@@ -157,7 +175,7 @@ function isMap(payload) {
|
|
|
157
175
|
* Returns whether the payload is a WeakMap
|
|
158
176
|
*
|
|
159
177
|
* @param {*} payload
|
|
160
|
-
* @returns {payload is WeakMap}
|
|
178
|
+
* @returns {payload is WeakMap<any, any>}
|
|
161
179
|
*/
|
|
162
180
|
function isWeakMap(payload) {
|
|
163
181
|
return getType(payload) === 'WeakMap';
|
|
@@ -166,7 +184,7 @@ function isWeakMap(payload) {
|
|
|
166
184
|
* Returns whether the payload is a Set
|
|
167
185
|
*
|
|
168
186
|
* @param {*} payload
|
|
169
|
-
* @returns {payload is Set}
|
|
187
|
+
* @returns {payload is Set<any>}
|
|
170
188
|
*/
|
|
171
189
|
function isSet(payload) {
|
|
172
190
|
return getType(payload) === 'Set';
|
|
@@ -175,7 +193,7 @@ function isSet(payload) {
|
|
|
175
193
|
* Returns whether the payload is a WeakSet
|
|
176
194
|
*
|
|
177
195
|
* @param {*} payload
|
|
178
|
-
* @returns {payload is WeakSet}
|
|
196
|
+
* @returns {payload is WeakSet<any>}
|
|
179
197
|
*/
|
|
180
198
|
function isWeakSet(payload) {
|
|
181
199
|
return getType(payload) === 'WeakSet';
|
|
@@ -220,7 +238,7 @@ function isFile(payload) {
|
|
|
220
238
|
* Returns whether the payload is a Promise
|
|
221
239
|
*
|
|
222
240
|
* @param {*} payload
|
|
223
|
-
* @returns {payload is Promise}
|
|
241
|
+
* @returns {payload is Promise<any>}
|
|
224
242
|
*/
|
|
225
243
|
function isPromise(payload) {
|
|
226
244
|
return getType(payload) === 'Promise';
|
|
@@ -235,7 +253,7 @@ function isError(payload) {
|
|
|
235
253
|
return getType(payload) === 'Error';
|
|
236
254
|
}
|
|
237
255
|
/**
|
|
238
|
-
* Returns whether the payload is
|
|
256
|
+
* Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)
|
|
239
257
|
*
|
|
240
258
|
* @param {*} payload
|
|
241
259
|
* @returns {payload is typeof NaN}
|
|
@@ -295,6 +313,8 @@ exports.isArray = isArray;
|
|
|
295
313
|
exports.isBlob = isBlob;
|
|
296
314
|
exports.isBoolean = isBoolean;
|
|
297
315
|
exports.isDate = isDate;
|
|
316
|
+
exports.isEmptyArray = isEmptyArray;
|
|
317
|
+
exports.isEmptyObject = isEmptyObject;
|
|
298
318
|
exports.isEmptyString = isEmptyString;
|
|
299
319
|
exports.isError = isError;
|
|
300
320
|
exports.isFile = isFile;
|
package/dist/index.esm.js
CHANGED
|
@@ -29,7 +29,7 @@ function isNull(payload) {
|
|
|
29
29
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
30
30
|
*
|
|
31
31
|
* @param {*} payload
|
|
32
|
-
* @returns {payload is
|
|
32
|
+
* @returns {payload is Record<string, any>}
|
|
33
33
|
*/
|
|
34
34
|
function isPlainObject(payload) {
|
|
35
35
|
if (getType(payload) !== 'Object')
|
|
@@ -40,16 +40,25 @@ function isPlainObject(payload) {
|
|
|
40
40
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
41
41
|
*
|
|
42
42
|
* @param {*} payload
|
|
43
|
-
* @returns {payload is
|
|
43
|
+
* @returns {payload is Record<string, any>}
|
|
44
44
|
*/
|
|
45
45
|
function isObject(payload) {
|
|
46
46
|
return isPlainObject(payload);
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)
|
|
50
|
+
*
|
|
51
|
+
* @param {*} payload
|
|
52
|
+
* @returns {payload is { [K in any]: never }}
|
|
53
|
+
*/
|
|
54
|
+
function isEmptyObject(payload) {
|
|
55
|
+
return isPlainObject(payload) && Object.keys(payload).length === 0;
|
|
56
|
+
}
|
|
48
57
|
/**
|
|
49
58
|
* Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)
|
|
50
59
|
*
|
|
51
60
|
* @param {*} payload
|
|
52
|
-
* @returns {payload is
|
|
61
|
+
* @returns {payload is Record<string, any>}
|
|
53
62
|
*/
|
|
54
63
|
function isAnyObject(payload) {
|
|
55
64
|
return getType(payload) === 'Object';
|
|
@@ -70,7 +79,7 @@ function isObjectLike(payload) {
|
|
|
70
79
|
* Returns whether the payload is a function
|
|
71
80
|
*
|
|
72
81
|
* @param {*} payload
|
|
73
|
-
* @returns {payload is
|
|
82
|
+
* @returns {payload is AnyFunction}
|
|
74
83
|
*/
|
|
75
84
|
function isFunction(payload) {
|
|
76
85
|
return getType(payload) === 'Function';
|
|
@@ -78,12 +87,21 @@ function isFunction(payload) {
|
|
|
78
87
|
/**
|
|
79
88
|
* Returns whether the payload is an array
|
|
80
89
|
*
|
|
81
|
-
* @param {
|
|
82
|
-
* @returns {payload is
|
|
90
|
+
* @param {any} payload
|
|
91
|
+
* @returns {payload is any[]}
|
|
83
92
|
*/
|
|
84
93
|
function isArray(payload) {
|
|
85
94
|
return getType(payload) === 'Array';
|
|
86
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns whether the payload is a an empty array
|
|
98
|
+
*
|
|
99
|
+
* @param {*} payload
|
|
100
|
+
* @returns {payload is []}
|
|
101
|
+
*/
|
|
102
|
+
function isEmptyArray(payload) {
|
|
103
|
+
return isArray(payload) && payload.length === 0;
|
|
104
|
+
}
|
|
87
105
|
/**
|
|
88
106
|
* Returns whether the payload is a string
|
|
89
107
|
*
|
|
@@ -112,9 +130,9 @@ function isEmptyString(payload) {
|
|
|
112
130
|
return payload === '';
|
|
113
131
|
}
|
|
114
132
|
/**
|
|
115
|
-
* Returns whether the payload is a number
|
|
133
|
+
* Returns whether the payload is a number (but not NaN)
|
|
116
134
|
*
|
|
117
|
-
* This will return false for NaN
|
|
135
|
+
* This will return `false` for `NaN`!!
|
|
118
136
|
*
|
|
119
137
|
* @param {*} payload
|
|
120
138
|
* @returns {payload is number}
|
|
@@ -144,7 +162,7 @@ function isRegExp(payload) {
|
|
|
144
162
|
* Returns whether the payload is a Map
|
|
145
163
|
*
|
|
146
164
|
* @param {*} payload
|
|
147
|
-
* @returns {payload is Map}
|
|
165
|
+
* @returns {payload is Map<any, any>}
|
|
148
166
|
*/
|
|
149
167
|
function isMap(payload) {
|
|
150
168
|
return getType(payload) === 'Map';
|
|
@@ -153,7 +171,7 @@ function isMap(payload) {
|
|
|
153
171
|
* Returns whether the payload is a WeakMap
|
|
154
172
|
*
|
|
155
173
|
* @param {*} payload
|
|
156
|
-
* @returns {payload is WeakMap}
|
|
174
|
+
* @returns {payload is WeakMap<any, any>}
|
|
157
175
|
*/
|
|
158
176
|
function isWeakMap(payload) {
|
|
159
177
|
return getType(payload) === 'WeakMap';
|
|
@@ -162,7 +180,7 @@ function isWeakMap(payload) {
|
|
|
162
180
|
* Returns whether the payload is a Set
|
|
163
181
|
*
|
|
164
182
|
* @param {*} payload
|
|
165
|
-
* @returns {payload is Set}
|
|
183
|
+
* @returns {payload is Set<any>}
|
|
166
184
|
*/
|
|
167
185
|
function isSet(payload) {
|
|
168
186
|
return getType(payload) === 'Set';
|
|
@@ -171,7 +189,7 @@ function isSet(payload) {
|
|
|
171
189
|
* Returns whether the payload is a WeakSet
|
|
172
190
|
*
|
|
173
191
|
* @param {*} payload
|
|
174
|
-
* @returns {payload is WeakSet}
|
|
192
|
+
* @returns {payload is WeakSet<any>}
|
|
175
193
|
*/
|
|
176
194
|
function isWeakSet(payload) {
|
|
177
195
|
return getType(payload) === 'WeakSet';
|
|
@@ -216,7 +234,7 @@ function isFile(payload) {
|
|
|
216
234
|
* Returns whether the payload is a Promise
|
|
217
235
|
*
|
|
218
236
|
* @param {*} payload
|
|
219
|
-
* @returns {payload is Promise}
|
|
237
|
+
* @returns {payload is Promise<any>}
|
|
220
238
|
*/
|
|
221
239
|
function isPromise(payload) {
|
|
222
240
|
return getType(payload) === 'Promise';
|
|
@@ -231,7 +249,7 @@ function isError(payload) {
|
|
|
231
249
|
return getType(payload) === 'Error';
|
|
232
250
|
}
|
|
233
251
|
/**
|
|
234
|
-
* Returns whether the payload is
|
|
252
|
+
* Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)
|
|
235
253
|
*
|
|
236
254
|
* @param {*} payload
|
|
237
255
|
* @returns {payload is typeof NaN}
|
|
@@ -285,4 +303,4 @@ function isType(payload, type) {
|
|
|
285
303
|
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
|
286
304
|
}
|
|
287
305
|
|
|
288
|
-
export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyString, isError, isFile, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };
|
|
306
|
+
export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "is-what",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.11.2",
|
|
5
5
|
"description": "JS type check (TypeScript supported) functions like `isPlainObject() isArray()` etc. A simple & small integration.",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
7
7
|
"module": "dist/index.esm.js",
|
|
8
8
|
"typings": "types/index.d.ts",
|
|
9
9
|
"scripts": {
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
10
|
+
"test": "ava",
|
|
11
|
+
"jest": "jest",
|
|
12
|
+
"jest-w": "jest --watchAll",
|
|
13
13
|
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
|
|
14
|
-
"rollup": "rollup -c ./build
|
|
15
|
-
"build": "npm run lint && npm run rollup && npm run test"
|
|
14
|
+
"rollup": "rollup -c ./build.js",
|
|
15
|
+
"build": "rm -rf types && rm -rf dist && npm run lint && npm run rollup && npm run test && npm run jest"
|
|
16
16
|
},
|
|
17
17
|
"repository": {
|
|
18
18
|
"type": "git",
|
|
@@ -47,28 +47,33 @@
|
|
|
47
47
|
"homepage": "https://github.com/mesqueeb/is-what#readme",
|
|
48
48
|
"dependencies": {},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@babel/core": "^7.
|
|
50
|
+
"@babel/core": "^7.11.5",
|
|
51
51
|
"@types/babel-core": "^6.25.6",
|
|
52
|
-
"@types/jest": "^
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
54
|
-
"@typescript-eslint/parser": "^
|
|
55
|
-
"ava": "^3.
|
|
52
|
+
"@types/jest": "^26.0.12",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^4.0.1",
|
|
54
|
+
"@typescript-eslint/parser": "^4.0.1",
|
|
55
|
+
"ava": "^3.12.1",
|
|
56
56
|
"babel-core": "^7.0.0-bridge.0",
|
|
57
|
-
"babel-jest": "^
|
|
57
|
+
"babel-jest": "^26.3.0",
|
|
58
58
|
"babel-preset-env": "^1.7.0",
|
|
59
|
-
"eslint": "^
|
|
60
|
-
"eslint-config-prettier": "^6.
|
|
59
|
+
"eslint": "^7.8.1",
|
|
60
|
+
"eslint-config-prettier": "^6.11.0",
|
|
61
61
|
"eslint-plugin-tree-shaking": "^1.8.0",
|
|
62
|
-
"jest": "^
|
|
63
|
-
"regenerator-runtime": "^0.13.
|
|
64
|
-
"rollup": "^
|
|
65
|
-
"rollup-plugin-typescript2": "^0.
|
|
62
|
+
"jest": "^26.4.2",
|
|
63
|
+
"regenerator-runtime": "^0.13.7",
|
|
64
|
+
"rollup": "^2.26.9",
|
|
65
|
+
"rollup-plugin-typescript2": "^0.27.2",
|
|
66
66
|
"tsconfig-paths": "^3.9.0",
|
|
67
|
-
"ts-node": "^
|
|
68
|
-
"typescript": "^
|
|
67
|
+
"ts-node": "^9.0.0",
|
|
68
|
+
"typescript": "^4.0.2"
|
|
69
69
|
},
|
|
70
70
|
"ava": {
|
|
71
|
-
"extensions": [
|
|
72
|
-
|
|
71
|
+
"extensions": [
|
|
72
|
+
"ts"
|
|
73
|
+
],
|
|
74
|
+
"require": [
|
|
75
|
+
"tsconfig-paths/register",
|
|
76
|
+
"ts-node/register"
|
|
77
|
+
]
|
|
73
78
|
}
|
|
74
79
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export type AnyFunction = (...args: any[]) => any
|
|
2
|
+
export type AnyClass = new (...args: any[]) => any
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Returns the object type of the given payload
|
|
3
6
|
*
|
|
@@ -32,9 +35,9 @@ export function isNull (payload: any): payload is null {
|
|
|
32
35
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
33
36
|
*
|
|
34
37
|
* @param {*} payload
|
|
35
|
-
* @returns {payload is
|
|
38
|
+
* @returns {payload is Record<string, any>}
|
|
36
39
|
*/
|
|
37
|
-
export function isPlainObject (payload: any): payload is
|
|
40
|
+
export function isPlainObject (payload: any): payload is Record<string, any> {
|
|
38
41
|
if (getType(payload) !== 'Object') return false
|
|
39
42
|
return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype
|
|
40
43
|
}
|
|
@@ -43,19 +46,29 @@ export function isPlainObject (payload: any): payload is { [key: string]: any }
|
|
|
43
46
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
44
47
|
*
|
|
45
48
|
* @param {*} payload
|
|
46
|
-
* @returns {payload is
|
|
49
|
+
* @returns {payload is Record<string, any>}
|
|
47
50
|
*/
|
|
48
|
-
export function isObject (payload: any): payload is
|
|
51
|
+
export function isObject (payload: any): payload is Record<string, any> {
|
|
49
52
|
return isPlainObject(payload)
|
|
50
53
|
}
|
|
51
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)
|
|
57
|
+
*
|
|
58
|
+
* @param {*} payload
|
|
59
|
+
* @returns {payload is { [K in any]: never }}
|
|
60
|
+
*/
|
|
61
|
+
export function isEmptyObject (payload: any): payload is { [K in any]: never } {
|
|
62
|
+
return isPlainObject(payload) && Object.keys(payload).length === 0
|
|
63
|
+
}
|
|
64
|
+
|
|
52
65
|
/**
|
|
53
66
|
* Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)
|
|
54
67
|
*
|
|
55
68
|
* @param {*} payload
|
|
56
|
-
* @returns {payload is
|
|
69
|
+
* @returns {payload is Record<string, any>}
|
|
57
70
|
*/
|
|
58
|
-
export function isAnyObject (payload: any): payload is
|
|
71
|
+
export function isAnyObject (payload: any): payload is Record<string, any> {
|
|
59
72
|
return getType(payload) === 'Object'
|
|
60
73
|
}
|
|
61
74
|
|
|
@@ -68,7 +81,7 @@ export function isAnyObject (payload: any): payload is { [key: string]: any } {
|
|
|
68
81
|
* @param {*} payload
|
|
69
82
|
* @returns {payload is T}
|
|
70
83
|
*/
|
|
71
|
-
export function isObjectLike<T extends
|
|
84
|
+
export function isObjectLike<T extends Record<string, any>> (payload: any): payload is T {
|
|
72
85
|
return isAnyObject(payload)
|
|
73
86
|
}
|
|
74
87
|
|
|
@@ -76,22 +89,32 @@ export function isObjectLike<T extends object> (payload: any): payload is T {
|
|
|
76
89
|
* Returns whether the payload is a function
|
|
77
90
|
*
|
|
78
91
|
* @param {*} payload
|
|
79
|
-
* @returns {payload is
|
|
92
|
+
* @returns {payload is AnyFunction}
|
|
80
93
|
*/
|
|
81
|
-
export function isFunction (payload: any): payload is
|
|
94
|
+
export function isFunction (payload: any): payload is AnyFunction {
|
|
82
95
|
return getType(payload) === 'Function'
|
|
83
96
|
}
|
|
84
97
|
|
|
85
98
|
/**
|
|
86
99
|
* Returns whether the payload is an array
|
|
87
100
|
*
|
|
88
|
-
* @param {
|
|
89
|
-
* @returns {payload is
|
|
101
|
+
* @param {any} payload
|
|
102
|
+
* @returns {payload is any[]}
|
|
90
103
|
*/
|
|
91
104
|
export function isArray (payload: any): payload is any[] {
|
|
92
105
|
return getType(payload) === 'Array'
|
|
93
106
|
}
|
|
94
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Returns whether the payload is a an empty array
|
|
110
|
+
*
|
|
111
|
+
* @param {*} payload
|
|
112
|
+
* @returns {payload is []}
|
|
113
|
+
*/
|
|
114
|
+
export function isEmptyArray (payload: any): payload is [] {
|
|
115
|
+
return isArray(payload) && payload.length === 0
|
|
116
|
+
}
|
|
117
|
+
|
|
95
118
|
/**
|
|
96
119
|
* Returns whether the payload is a string
|
|
97
120
|
*
|
|
@@ -123,9 +146,9 @@ export function isEmptyString (payload: any): payload is string {
|
|
|
123
146
|
}
|
|
124
147
|
|
|
125
148
|
/**
|
|
126
|
-
* Returns whether the payload is a number
|
|
149
|
+
* Returns whether the payload is a number (but not NaN)
|
|
127
150
|
*
|
|
128
|
-
* This will return false for NaN
|
|
151
|
+
* This will return `false` for `NaN`!!
|
|
129
152
|
*
|
|
130
153
|
* @param {*} payload
|
|
131
154
|
* @returns {payload is number}
|
|
@@ -158,7 +181,7 @@ export function isRegExp (payload: any): payload is RegExp {
|
|
|
158
181
|
* Returns whether the payload is a Map
|
|
159
182
|
*
|
|
160
183
|
* @param {*} payload
|
|
161
|
-
* @returns {payload is Map}
|
|
184
|
+
* @returns {payload is Map<any, any>}
|
|
162
185
|
*/
|
|
163
186
|
export function isMap (payload: any): payload is Map<any, any> {
|
|
164
187
|
return getType(payload) === 'Map'
|
|
@@ -168,7 +191,7 @@ export function isMap (payload: any): payload is Map<any, any> {
|
|
|
168
191
|
* Returns whether the payload is a WeakMap
|
|
169
192
|
*
|
|
170
193
|
* @param {*} payload
|
|
171
|
-
* @returns {payload is WeakMap}
|
|
194
|
+
* @returns {payload is WeakMap<any, any>}
|
|
172
195
|
*/
|
|
173
196
|
export function isWeakMap (payload: any): payload is WeakMap<any, any> {
|
|
174
197
|
return getType(payload) === 'WeakMap'
|
|
@@ -178,7 +201,7 @@ export function isWeakMap (payload: any): payload is WeakMap<any, any> {
|
|
|
178
201
|
* Returns whether the payload is a Set
|
|
179
202
|
*
|
|
180
203
|
* @param {*} payload
|
|
181
|
-
* @returns {payload is Set}
|
|
204
|
+
* @returns {payload is Set<any>}
|
|
182
205
|
*/
|
|
183
206
|
export function isSet (payload: any): payload is Set<any> {
|
|
184
207
|
return getType(payload) === 'Set'
|
|
@@ -188,7 +211,7 @@ export function isSet (payload: any): payload is Set<any> {
|
|
|
188
211
|
* Returns whether the payload is a WeakSet
|
|
189
212
|
*
|
|
190
213
|
* @param {*} payload
|
|
191
|
-
* @returns {payload is WeakSet}
|
|
214
|
+
* @returns {payload is WeakSet<any>}
|
|
192
215
|
*/
|
|
193
216
|
export function isWeakSet (payload: any): payload is WeakSet<any> {
|
|
194
217
|
return getType(payload) === 'WeakSet'
|
|
@@ -238,7 +261,7 @@ export function isFile (payload: any): payload is File {
|
|
|
238
261
|
* Returns whether the payload is a Promise
|
|
239
262
|
*
|
|
240
263
|
* @param {*} payload
|
|
241
|
-
* @returns {payload is Promise}
|
|
264
|
+
* @returns {payload is Promise<any>}
|
|
242
265
|
*/
|
|
243
266
|
export function isPromise (payload: any): payload is Promise<any> {
|
|
244
267
|
return getType(payload) === 'Promise'
|
|
@@ -255,7 +278,7 @@ export function isError (payload: any): payload is Error {
|
|
|
255
278
|
}
|
|
256
279
|
|
|
257
280
|
/**
|
|
258
|
-
* Returns whether the payload is
|
|
281
|
+
* Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)
|
|
259
282
|
*
|
|
260
283
|
* @param {*} payload
|
|
261
284
|
* @returns {payload is typeof NaN}
|
|
@@ -304,7 +327,7 @@ export function isNullOrUndefined (payload: any): payload is null | undefined {
|
|
|
304
327
|
* @throws {TypeError} Will throw type error if type is an invalid type
|
|
305
328
|
* @returns {payload is T}
|
|
306
329
|
*/
|
|
307
|
-
export function isType<T extends
|
|
330
|
+
export function isType<T extends AnyFunction | AnyClass> (payload: any, type: T): payload is T {
|
|
308
331
|
if (!(type instanceof Function)) {
|
|
309
332
|
throw new TypeError('Type must be a function')
|
|
310
333
|
}
|
package/test/ava.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import test from 'ava'
|
|
2
2
|
import {
|
|
3
3
|
isError,
|
|
4
|
+
isEmptyArray,
|
|
4
5
|
isObject,
|
|
5
6
|
isPlainObject,
|
|
6
7
|
isAnyObject,
|
|
@@ -27,6 +28,7 @@ import {
|
|
|
27
28
|
// isFile,
|
|
28
29
|
isPromise,
|
|
29
30
|
isNaNValue,
|
|
31
|
+
isEmptyObject,
|
|
30
32
|
} from '../src/index'
|
|
31
33
|
|
|
32
34
|
// const blob = Buffer.from([])
|
|
@@ -89,6 +91,41 @@ test('Basic false tests', t => {
|
|
|
89
91
|
t.is(isNullOrUndefined(NaN), false)
|
|
90
92
|
})
|
|
91
93
|
|
|
94
|
+
test('isEmptyObject', t => {
|
|
95
|
+
t.is(isEmptyObject({}), true)
|
|
96
|
+
t.is(isEmptyObject(new Object()), true)
|
|
97
|
+
|
|
98
|
+
t.is(isEmptyObject('{}'), false)
|
|
99
|
+
t.is(isEmptyObject('{}'), false)
|
|
100
|
+
t.is(isEmptyObject(null), false)
|
|
101
|
+
t.is(isEmptyObject(new Date()), false)
|
|
102
|
+
t.is(isEmptyObject(new Error('')), false)
|
|
103
|
+
t.is(isEmptyObject(new Date()), false)
|
|
104
|
+
t.is(isEmptyObject(Symbol()), false)
|
|
105
|
+
t.is(isEmptyObject(new Map()), false)
|
|
106
|
+
t.is(isEmptyObject(new WeakMap()), false)
|
|
107
|
+
t.is(isEmptyObject(new Set()), false)
|
|
108
|
+
t.is(isEmptyObject(new WeakSet()), false)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
test('isEmptyArray', t => {
|
|
112
|
+
t.is(isEmptyArray([]), true)
|
|
113
|
+
t.is(isEmptyArray(new Array()), true)
|
|
114
|
+
t.is(isEmptyArray(new Array(0)), true)
|
|
115
|
+
|
|
116
|
+
t.is(isEmptyArray(new Array(1)), false)
|
|
117
|
+
t.is(isEmptyArray([undefined]), false)
|
|
118
|
+
t.is(isEmptyArray(null), false)
|
|
119
|
+
t.is(isEmptyArray(new Date()), false)
|
|
120
|
+
t.is(isEmptyArray(new Error('')), false)
|
|
121
|
+
t.is(isEmptyArray(new Date()), false)
|
|
122
|
+
t.is(isEmptyArray(Symbol()), false)
|
|
123
|
+
t.is(isEmptyArray(new Map()), false)
|
|
124
|
+
t.is(isEmptyArray(new WeakMap()), false)
|
|
125
|
+
t.is(isEmptyArray(new Set()), false)
|
|
126
|
+
t.is(isEmptyArray(new WeakSet()), false)
|
|
127
|
+
})
|
|
128
|
+
|
|
92
129
|
test('NaN tests', t => {
|
|
93
130
|
t.is(isNaNValue(NaN), true)
|
|
94
131
|
t.is(isNaNValue(new Error('')), false)
|
|
@@ -239,3 +276,34 @@ test('isObject vs isAnyObject', t => {
|
|
|
239
276
|
t.is(isAnyObject(new Date('_')), false)
|
|
240
277
|
t.is(isAnyObject(new Date()), false)
|
|
241
278
|
})
|
|
279
|
+
|
|
280
|
+
test('type related tests', t => {
|
|
281
|
+
t.pass()
|
|
282
|
+
// const fn: string | ((k: number) => string) = (p) => 'a'
|
|
283
|
+
// if (!isFunction(fn)) {
|
|
284
|
+
// fn
|
|
285
|
+
// }
|
|
286
|
+
|
|
287
|
+
// const a: Record<string, number> = {}
|
|
288
|
+
|
|
289
|
+
// a[fn(1)] = fn(2)
|
|
290
|
+
|
|
291
|
+
// const myArray: string | string[] = ['a', 'b']
|
|
292
|
+
// if (!isArray(myArray)) {
|
|
293
|
+
// myArray
|
|
294
|
+
// }
|
|
295
|
+
|
|
296
|
+
// const a: Record<string, number> = {}
|
|
297
|
+
|
|
298
|
+
// a[myArray[1]] = myArray[0]
|
|
299
|
+
|
|
300
|
+
// const myArray: string | any[] = [1, 2, 'a', 'b']
|
|
301
|
+
// if (!isArray(myArray)) {
|
|
302
|
+
// myArray
|
|
303
|
+
// }
|
|
304
|
+
|
|
305
|
+
// const a: Record<string, number> = {}
|
|
306
|
+
|
|
307
|
+
// a[myArray[1]] = myArray[0]
|
|
308
|
+
|
|
309
|
+
})
|
package/tsconfig.json
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export declare type AnyFunction = (...args: any[]) => any;
|
|
2
|
+
export declare type AnyClass = new (...args: any[]) => any;
|
|
1
3
|
/**
|
|
2
4
|
* Returns the object type of the given payload
|
|
3
5
|
*
|
|
@@ -23,29 +25,32 @@ export declare function isNull(payload: any): payload is null;
|
|
|
23
25
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
24
26
|
*
|
|
25
27
|
* @param {*} payload
|
|
26
|
-
* @returns {payload is
|
|
28
|
+
* @returns {payload is Record<string, any>}
|
|
27
29
|
*/
|
|
28
|
-
export declare function isPlainObject(payload: any): payload is
|
|
29
|
-
[key: string]: any;
|
|
30
|
-
};
|
|
30
|
+
export declare function isPlainObject(payload: any): payload is Record<string, any>;
|
|
31
31
|
/**
|
|
32
32
|
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
|
|
33
33
|
*
|
|
34
34
|
* @param {*} payload
|
|
35
|
-
* @returns {payload is
|
|
35
|
+
* @returns {payload is Record<string, any>}
|
|
36
36
|
*/
|
|
37
|
-
export declare function isObject(payload: any): payload is
|
|
38
|
-
|
|
37
|
+
export declare function isObject(payload: any): payload is Record<string, any>;
|
|
38
|
+
/**
|
|
39
|
+
* Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)
|
|
40
|
+
*
|
|
41
|
+
* @param {*} payload
|
|
42
|
+
* @returns {payload is { [K in any]: never }}
|
|
43
|
+
*/
|
|
44
|
+
export declare function isEmptyObject(payload: any): payload is {
|
|
45
|
+
[K in any]: never;
|
|
39
46
|
};
|
|
40
47
|
/**
|
|
41
48
|
* Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)
|
|
42
49
|
*
|
|
43
50
|
* @param {*} payload
|
|
44
|
-
* @returns {payload is
|
|
51
|
+
* @returns {payload is Record<string, any>}
|
|
45
52
|
*/
|
|
46
|
-
export declare function isAnyObject(payload: any): payload is
|
|
47
|
-
[key: string]: any;
|
|
48
|
-
};
|
|
53
|
+
export declare function isAnyObject(payload: any): payload is Record<string, any>;
|
|
49
54
|
/**
|
|
50
55
|
* Returns whether the payload is an object like a type passed in < >
|
|
51
56
|
*
|
|
@@ -55,21 +60,28 @@ export declare function isAnyObject(payload: any): payload is {
|
|
|
55
60
|
* @param {*} payload
|
|
56
61
|
* @returns {payload is T}
|
|
57
62
|
*/
|
|
58
|
-
export declare function isObjectLike<T extends
|
|
63
|
+
export declare function isObjectLike<T extends Record<string, any>>(payload: any): payload is T;
|
|
59
64
|
/**
|
|
60
65
|
* Returns whether the payload is a function
|
|
61
66
|
*
|
|
62
67
|
* @param {*} payload
|
|
63
|
-
* @returns {payload is
|
|
68
|
+
* @returns {payload is AnyFunction}
|
|
64
69
|
*/
|
|
65
|
-
export declare function isFunction(payload: any): payload is
|
|
70
|
+
export declare function isFunction(payload: any): payload is AnyFunction;
|
|
66
71
|
/**
|
|
67
72
|
* Returns whether the payload is an array
|
|
68
73
|
*
|
|
69
|
-
* @param {
|
|
70
|
-
* @returns {payload is
|
|
74
|
+
* @param {any} payload
|
|
75
|
+
* @returns {payload is any[]}
|
|
71
76
|
*/
|
|
72
77
|
export declare function isArray(payload: any): payload is any[];
|
|
78
|
+
/**
|
|
79
|
+
* Returns whether the payload is a an empty array
|
|
80
|
+
*
|
|
81
|
+
* @param {*} payload
|
|
82
|
+
* @returns {payload is []}
|
|
83
|
+
*/
|
|
84
|
+
export declare function isEmptyArray(payload: any): payload is [];
|
|
73
85
|
/**
|
|
74
86
|
* Returns whether the payload is a string
|
|
75
87
|
*
|
|
@@ -92,9 +104,9 @@ export declare function isFullString(payload: any): payload is string;
|
|
|
92
104
|
*/
|
|
93
105
|
export declare function isEmptyString(payload: any): payload is string;
|
|
94
106
|
/**
|
|
95
|
-
* Returns whether the payload is a number
|
|
107
|
+
* Returns whether the payload is a number (but not NaN)
|
|
96
108
|
*
|
|
97
|
-
* This will return false for NaN
|
|
109
|
+
* This will return `false` for `NaN`!!
|
|
98
110
|
*
|
|
99
111
|
* @param {*} payload
|
|
100
112
|
* @returns {payload is number}
|
|
@@ -118,28 +130,28 @@ export declare function isRegExp(payload: any): payload is RegExp;
|
|
|
118
130
|
* Returns whether the payload is a Map
|
|
119
131
|
*
|
|
120
132
|
* @param {*} payload
|
|
121
|
-
* @returns {payload is Map}
|
|
133
|
+
* @returns {payload is Map<any, any>}
|
|
122
134
|
*/
|
|
123
135
|
export declare function isMap(payload: any): payload is Map<any, any>;
|
|
124
136
|
/**
|
|
125
137
|
* Returns whether the payload is a WeakMap
|
|
126
138
|
*
|
|
127
139
|
* @param {*} payload
|
|
128
|
-
* @returns {payload is WeakMap}
|
|
140
|
+
* @returns {payload is WeakMap<any, any>}
|
|
129
141
|
*/
|
|
130
142
|
export declare function isWeakMap(payload: any): payload is WeakMap<any, any>;
|
|
131
143
|
/**
|
|
132
144
|
* Returns whether the payload is a Set
|
|
133
145
|
*
|
|
134
146
|
* @param {*} payload
|
|
135
|
-
* @returns {payload is Set}
|
|
147
|
+
* @returns {payload is Set<any>}
|
|
136
148
|
*/
|
|
137
149
|
export declare function isSet(payload: any): payload is Set<any>;
|
|
138
150
|
/**
|
|
139
151
|
* Returns whether the payload is a WeakSet
|
|
140
152
|
*
|
|
141
153
|
* @param {*} payload
|
|
142
|
-
* @returns {payload is WeakSet}
|
|
154
|
+
* @returns {payload is WeakSet<any>}
|
|
143
155
|
*/
|
|
144
156
|
export declare function isWeakSet(payload: any): payload is WeakSet<any>;
|
|
145
157
|
/**
|
|
@@ -174,7 +186,7 @@ export declare function isFile(payload: any): payload is File;
|
|
|
174
186
|
* Returns whether the payload is a Promise
|
|
175
187
|
*
|
|
176
188
|
* @param {*} payload
|
|
177
|
-
* @returns {payload is Promise}
|
|
189
|
+
* @returns {payload is Promise<any>}
|
|
178
190
|
*/
|
|
179
191
|
export declare function isPromise(payload: any): payload is Promise<any>;
|
|
180
192
|
/**
|
|
@@ -185,7 +197,7 @@ export declare function isPromise(payload: any): payload is Promise<any>;
|
|
|
185
197
|
*/
|
|
186
198
|
export declare function isError(payload: any): payload is Error;
|
|
187
199
|
/**
|
|
188
|
-
* Returns whether the payload is
|
|
200
|
+
* Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)
|
|
189
201
|
*
|
|
190
202
|
* @param {*} payload
|
|
191
203
|
* @returns {payload is typeof NaN}
|
|
@@ -216,4 +228,4 @@ export declare function isNullOrUndefined(payload: any): payload is null | undef
|
|
|
216
228
|
* @throws {TypeError} Will throw type error if type is an invalid type
|
|
217
229
|
* @returns {payload is T}
|
|
218
230
|
*/
|
|
219
|
-
export declare function isType<T extends
|
|
231
|
+
export declare function isType<T extends AnyFunction | AnyClass>(payload: any, type: T): payload is T;
|