is-what 4.1.11 → 4.1.13
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +1 -1
- package/README.md +13 -0
- package/dist/cjs/index.cjs +19 -1
- package/dist/cjs/index.d.cts +67 -1
- package/dist/index.d.ts +67 -1
- package/dist/index.js +19 -2
- package/package.json +13 -2
package/LICENSE
CHANGED
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
@@ -180,6 +180,18 @@ getType('') // returns 'String'
|
|
180
180
|
isType('', String) // returns true
|
181
181
|
```
|
182
182
|
|
183
|
+
If you just want to make sure your object _inherits_ from a particular class or
|
184
|
+
`toStringTag` value, you can use `isInstanceOf()` like this:
|
185
|
+
|
186
|
+
```js
|
187
|
+
import { isInstanceOf } from 'is-what'
|
188
|
+
|
189
|
+
isInstanceOf(new XMLHttpRequest(), 'EventTarget')
|
190
|
+
// returns true
|
191
|
+
isInstanceOf(globalThis, ReadableStream)
|
192
|
+
// returns false
|
193
|
+
```
|
194
|
+
|
183
195
|
## TypeScript
|
184
196
|
|
185
197
|
is-what makes TypeScript know the type during if statements. This means that a check returns the type of the payload for TypeScript users.
|
@@ -243,6 +255,7 @@ function isObjectLike<T extends object>(payload: any): payload is T {
|
|
243
255
|
return isAnyObject(payload)
|
244
256
|
}
|
245
257
|
```
|
258
|
+
|
246
259
|
## Meet the family (more tiny utils with TS support)
|
247
260
|
|
248
261
|
- [is-what 🙉](https://github.com/mesqueeb/is-what)
|
package/dist/cjs/index.cjs
CHANGED
@@ -13,7 +13,7 @@ function isPlainObject(payload) {
|
|
13
13
|
if (getType(payload) !== "Object")
|
14
14
|
return false;
|
15
15
|
const prototype = Object.getPrototypeOf(payload);
|
16
|
-
return prototype.constructor === Object && prototype === Object.prototype;
|
16
|
+
return !!prototype && prototype.constructor === Object && prototype === Object.prototype;
|
17
17
|
}
|
18
18
|
function isObject(payload) {
|
19
19
|
return isPlainObject(payload);
|
@@ -116,6 +116,23 @@ function isType(payload, type) {
|
|
116
116
|
const name = type.name;
|
117
117
|
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
118
118
|
}
|
119
|
+
function isInstanceOf(value, classOrClassName) {
|
120
|
+
if (typeof classOrClassName === "function") {
|
121
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
122
|
+
if (isType(p, classOrClassName)) {
|
123
|
+
return true;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
return false;
|
127
|
+
} else {
|
128
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
129
|
+
if (getType(p) === classOrClassName) {
|
130
|
+
return true;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
return false;
|
134
|
+
}
|
135
|
+
}
|
119
136
|
|
120
137
|
exports.getType = getType;
|
121
138
|
exports.isAnyObject = isAnyObject;
|
@@ -132,6 +149,7 @@ exports.isFullArray = isFullArray;
|
|
132
149
|
exports.isFullObject = isFullObject;
|
133
150
|
exports.isFullString = isFullString;
|
134
151
|
exports.isFunction = isFunction;
|
152
|
+
exports.isInstanceOf = isInstanceOf;
|
135
153
|
exports.isMap = isMap;
|
136
154
|
exports.isNaNValue = isNaNValue;
|
137
155
|
exports.isNegativeNumber = isNegativeNumber;
|
package/dist/cjs/index.d.cts
CHANGED
@@ -248,9 +248,53 @@ declare function isPrimitive(payload: any): payload is boolean | null | undefine
|
|
248
248
|
* @returns {(payload is null | undefined)}
|
249
249
|
*/
|
250
250
|
declare const isNullOrUndefined: TypeGuard<any, null | undefined>;
|
251
|
+
/**
|
252
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
253
|
+
* @example
|
254
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
255
|
+
*
|
256
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
257
|
+
*
|
258
|
+
* isNullOrUndefined(null) // true
|
259
|
+
* isNullOrUndefined(undefined) // true
|
260
|
+
* isNullOrUndefined(123) // false
|
261
|
+
*/
|
251
262
|
declare function isOneOf<A, B extends A, C extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>): TypeGuard<A, B | C>;
|
263
|
+
/**
|
264
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
265
|
+
* @example
|
266
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
267
|
+
*
|
268
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
269
|
+
*
|
270
|
+
* isNullOrUndefined(null) // true
|
271
|
+
* isNullOrUndefined(undefined) // true
|
272
|
+
* isNullOrUndefined(123) // false
|
273
|
+
*/
|
252
274
|
declare function isOneOf<A, B extends A, C extends A, D extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>, c: TypeGuard<A, D>): TypeGuard<A, B | C | D>;
|
275
|
+
/**
|
276
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
277
|
+
* @example
|
278
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
279
|
+
*
|
280
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
281
|
+
*
|
282
|
+
* isNullOrUndefined(null) // true
|
283
|
+
* isNullOrUndefined(undefined) // true
|
284
|
+
* isNullOrUndefined(123) // false
|
285
|
+
*/
|
253
286
|
declare function isOneOf<A, B extends A, C extends A, D extends A, E extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>, c: TypeGuard<A, D>, d: TypeGuard<A, E>): TypeGuard<A, B | C | D | E>;
|
287
|
+
/**
|
288
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
289
|
+
* @example
|
290
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
291
|
+
*
|
292
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
293
|
+
*
|
294
|
+
* isNullOrUndefined(null) // true
|
295
|
+
* isNullOrUndefined(undefined) // true
|
296
|
+
* isNullOrUndefined(123) // false
|
297
|
+
*/
|
254
298
|
declare function isOneOf<A, B extends A, C extends A, D extends A, E extends A, F extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>, c: TypeGuard<A, D>, d: TypeGuard<A, E>, e: TypeGuard<A, F>): TypeGuard<A, B | C | D | E | F>;
|
255
299
|
/**
|
256
300
|
* Does a generic check to check that the given payload is of a given type.
|
@@ -264,5 +308,27 @@ declare function isOneOf<A, B extends A, C extends A, D extends A, E extends A,
|
|
264
308
|
* @returns {payload is T}
|
265
309
|
*/
|
266
310
|
declare function isType<T extends AnyFunction | AnyClass>(payload: any, type: T): payload is T;
|
311
|
+
type GlobalClassName = {
|
312
|
+
[K in keyof typeof globalThis]: (typeof globalThis)[K] extends AnyClass ? K : never;
|
313
|
+
}[keyof typeof globalThis];
|
314
|
+
/**
|
315
|
+
* Checks if a value is an instance of a class or a class name. Useful when you
|
316
|
+
* want to check if a value is an instance of a class that may not be defined in
|
317
|
+
* the current scope. For example, if you want to check if a value is an
|
318
|
+
* `OffscreenCanvas` instance, you might not want to do the song and dance of
|
319
|
+
* using `typeof OffscreenCanvas !== 'undefined'` and then shimming
|
320
|
+
* `OffscreenCanvas` if the types aren't around.
|
321
|
+
*
|
322
|
+
* @example
|
323
|
+
* if (isInstanceOf(value, 'OffscreenCanvas')) {
|
324
|
+
* // value is an OffscreenCanvas
|
325
|
+
* }
|
326
|
+
*
|
327
|
+
* @param value The value to recursively check
|
328
|
+
* @param class_ A string or class that the value should be an instance of
|
329
|
+
*/
|
330
|
+
declare function isInstanceOf<T extends AnyClass>(value: unknown, class_: T): value is T;
|
331
|
+
declare function isInstanceOf<K extends GlobalClassName>(value: unknown, className: K): value is (typeof globalThis)[K];
|
332
|
+
declare function isInstanceOf(value: unknown, className: string): value is object;
|
267
333
|
|
268
|
-
export { AnyAsyncFunction, AnyClass, AnyFunction, PlainObject, 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 };
|
334
|
+
export { AnyAsyncFunction, AnyClass, AnyFunction, PlainObject, 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/dist/index.d.ts
CHANGED
@@ -248,9 +248,53 @@ declare function isPrimitive(payload: any): payload is boolean | null | undefine
|
|
248
248
|
* @returns {(payload is null | undefined)}
|
249
249
|
*/
|
250
250
|
declare const isNullOrUndefined: TypeGuard<any, null | undefined>;
|
251
|
+
/**
|
252
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
253
|
+
* @example
|
254
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
255
|
+
*
|
256
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
257
|
+
*
|
258
|
+
* isNullOrUndefined(null) // true
|
259
|
+
* isNullOrUndefined(undefined) // true
|
260
|
+
* isNullOrUndefined(123) // false
|
261
|
+
*/
|
251
262
|
declare function isOneOf<A, B extends A, C extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>): TypeGuard<A, B | C>;
|
263
|
+
/**
|
264
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
265
|
+
* @example
|
266
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
267
|
+
*
|
268
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
269
|
+
*
|
270
|
+
* isNullOrUndefined(null) // true
|
271
|
+
* isNullOrUndefined(undefined) // true
|
272
|
+
* isNullOrUndefined(123) // false
|
273
|
+
*/
|
252
274
|
declare function isOneOf<A, B extends A, C extends A, D extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>, c: TypeGuard<A, D>): TypeGuard<A, B | C | D>;
|
275
|
+
/**
|
276
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
277
|
+
* @example
|
278
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
279
|
+
*
|
280
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
281
|
+
*
|
282
|
+
* isNullOrUndefined(null) // true
|
283
|
+
* isNullOrUndefined(undefined) // true
|
284
|
+
* isNullOrUndefined(123) // false
|
285
|
+
*/
|
253
286
|
declare function isOneOf<A, B extends A, C extends A, D extends A, E extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>, c: TypeGuard<A, D>, d: TypeGuard<A, E>): TypeGuard<A, B | C | D | E>;
|
287
|
+
/**
|
288
|
+
* A factory function that creates a function to check if the payload is one of the given types.
|
289
|
+
* @example
|
290
|
+
* import { isOneOf, isNull, isUndefined } from 'is-what'
|
291
|
+
*
|
292
|
+
* const isNullOrUndefined = isOneOf(isNull, isUndefined)
|
293
|
+
*
|
294
|
+
* isNullOrUndefined(null) // true
|
295
|
+
* isNullOrUndefined(undefined) // true
|
296
|
+
* isNullOrUndefined(123) // false
|
297
|
+
*/
|
254
298
|
declare function isOneOf<A, B extends A, C extends A, D extends A, E extends A, F extends A>(a: TypeGuard<A, B>, b: TypeGuard<A, C>, c: TypeGuard<A, D>, d: TypeGuard<A, E>, e: TypeGuard<A, F>): TypeGuard<A, B | C | D | E | F>;
|
255
299
|
/**
|
256
300
|
* Does a generic check to check that the given payload is of a given type.
|
@@ -264,5 +308,27 @@ declare function isOneOf<A, B extends A, C extends A, D extends A, E extends A,
|
|
264
308
|
* @returns {payload is T}
|
265
309
|
*/
|
266
310
|
declare function isType<T extends AnyFunction | AnyClass>(payload: any, type: T): payload is T;
|
311
|
+
type GlobalClassName = {
|
312
|
+
[K in keyof typeof globalThis]: (typeof globalThis)[K] extends AnyClass ? K : never;
|
313
|
+
}[keyof typeof globalThis];
|
314
|
+
/**
|
315
|
+
* Checks if a value is an instance of a class or a class name. Useful when you
|
316
|
+
* want to check if a value is an instance of a class that may not be defined in
|
317
|
+
* the current scope. For example, if you want to check if a value is an
|
318
|
+
* `OffscreenCanvas` instance, you might not want to do the song and dance of
|
319
|
+
* using `typeof OffscreenCanvas !== 'undefined'` and then shimming
|
320
|
+
* `OffscreenCanvas` if the types aren't around.
|
321
|
+
*
|
322
|
+
* @example
|
323
|
+
* if (isInstanceOf(value, 'OffscreenCanvas')) {
|
324
|
+
* // value is an OffscreenCanvas
|
325
|
+
* }
|
326
|
+
*
|
327
|
+
* @param value The value to recursively check
|
328
|
+
* @param class_ A string or class that the value should be an instance of
|
329
|
+
*/
|
330
|
+
declare function isInstanceOf<T extends AnyClass>(value: unknown, class_: T): value is T;
|
331
|
+
declare function isInstanceOf<K extends GlobalClassName>(value: unknown, className: K): value is (typeof globalThis)[K];
|
332
|
+
declare function isInstanceOf(value: unknown, className: string): value is object;
|
267
333
|
|
268
|
-
export { AnyAsyncFunction, AnyClass, AnyFunction, PlainObject, 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 };
|
334
|
+
export { AnyAsyncFunction, AnyClass, AnyFunction, PlainObject, 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/dist/index.js
CHANGED
@@ -11,7 +11,7 @@ function isPlainObject(payload) {
|
|
11
11
|
if (getType(payload) !== "Object")
|
12
12
|
return false;
|
13
13
|
const prototype = Object.getPrototypeOf(payload);
|
14
|
-
return prototype.constructor === Object && prototype === Object.prototype;
|
14
|
+
return !!prototype && prototype.constructor === Object && prototype === Object.prototype;
|
15
15
|
}
|
16
16
|
function isObject(payload) {
|
17
17
|
return isPlainObject(payload);
|
@@ -114,5 +114,22 @@ function isType(payload, type) {
|
|
114
114
|
const name = type.name;
|
115
115
|
return getType(payload) === name || Boolean(payload && payload.constructor === type);
|
116
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
|
+
}
|
123
|
+
}
|
124
|
+
return false;
|
125
|
+
} else {
|
126
|
+
for (let p = value; p; p = Object.getPrototypeOf(p)) {
|
127
|
+
if (getType(p) === classOrClassName) {
|
128
|
+
return true;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
return false;
|
132
|
+
}
|
133
|
+
}
|
117
134
|
|
118
|
-
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,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "is-what",
|
3
|
-
"version": "4.1.
|
3
|
+
"version": "4.1.13",
|
4
4
|
"description": "JS type check (TypeScript supported) functions like `isPlainObject() isArray()` etc. A simple & small integration.",
|
5
5
|
"type": "module",
|
6
6
|
"sideEffects": false,
|
@@ -29,6 +29,7 @@
|
|
29
29
|
"test": "vitest run",
|
30
30
|
"lint": "tsc --noEmit && eslint ./src --ext .ts",
|
31
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": {
|
@@ -76,7 +77,8 @@
|
|
76
77
|
"rollup-plugin-dts": "^5.3.0",
|
77
78
|
"rollup-plugin-esbuild": "^5.0.0",
|
78
79
|
"typescript": "^5.0.4",
|
79
|
-
"vitest": "^0.31.1"
|
80
|
+
"vitest": "^0.31.1",
|
81
|
+
"typedoc": "^0.24.7"
|
80
82
|
},
|
81
83
|
"ava": {
|
82
84
|
"extensions": {
|
@@ -116,5 +118,14 @@
|
|
116
118
|
"tree-shaking/no-side-effects-in-initialization": "error",
|
117
119
|
"@typescript-eslint/ban-ts-comment": "off"
|
118
120
|
}
|
121
|
+
},
|
122
|
+
"prettier": {
|
123
|
+
"printWidth": 100,
|
124
|
+
"tabWidth": 2,
|
125
|
+
"singleQuote": true,
|
126
|
+
"trailingComma": "es5",
|
127
|
+
"semi": false,
|
128
|
+
"bracketSpacing": true,
|
129
|
+
"quoteProps": "consistent"
|
119
130
|
}
|
120
131
|
}
|