bupkis 0.1.2 → 0.3.0
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/CHANGELOG.md +28 -0
- package/README.md +16 -16
- package/dist/commonjs/assertion/assertion-async.d.ts +2 -1
- package/dist/commonjs/assertion/assertion-async.d.ts.map +1 -1
- package/dist/commonjs/assertion/assertion-async.js +84 -2
- package/dist/commonjs/assertion/assertion-async.js.map +1 -1
- package/dist/commonjs/assertion/assertion-sync.d.ts +1 -1
- package/dist/commonjs/assertion/assertion-sync.d.ts.map +1 -1
- package/dist/commonjs/assertion/assertion-sync.js +5 -1
- package/dist/commonjs/assertion/assertion-sync.js.map +1 -1
- package/dist/commonjs/assertion/assertion-types.d.ts +39 -84
- package/dist/commonjs/assertion/assertion-types.d.ts.map +1 -1
- package/dist/commonjs/assertion/assertion.d.ts +1 -1
- package/dist/commonjs/assertion/assertion.d.ts.map +1 -1
- package/dist/commonjs/assertion/assertion.js +1 -14
- package/dist/commonjs/assertion/assertion.js.map +1 -1
- package/dist/commonjs/assertion/create.d.ts +5 -33
- package/dist/commonjs/assertion/create.d.ts.map +1 -1
- package/dist/commonjs/assertion/create.js +17 -6
- package/dist/commonjs/assertion/create.js.map +1 -1
- package/dist/commonjs/assertion/impl/async.d.ts +122 -21
- package/dist/commonjs/assertion/impl/async.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/async.js +114 -90
- package/dist/commonjs/assertion/impl/async.js.map +1 -1
- package/dist/commonjs/assertion/impl/callback.d.ts +104 -0
- package/dist/commonjs/assertion/impl/callback.d.ts.map +1 -0
- package/dist/commonjs/assertion/impl/callback.js +694 -0
- package/dist/commonjs/assertion/impl/callback.js.map +1 -0
- package/dist/commonjs/assertion/impl/index.d.ts +1 -1
- package/dist/commonjs/assertion/impl/index.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/index.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-esoteric.js +1 -1
- package/dist/commonjs/assertion/impl/sync-esoteric.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-parametric.d.ts +37 -34
- package/dist/commonjs/assertion/impl/sync-parametric.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-parametric.js +32 -47
- package/dist/commonjs/assertion/impl/sync-parametric.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync.d.ts +105 -58
- package/dist/commonjs/assertion/impl/sync.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync.js +4 -1
- package/dist/commonjs/assertion/impl/sync.js.map +1 -1
- package/dist/commonjs/bootstrap.d.ts +199 -85
- package/dist/commonjs/bootstrap.d.ts.map +1 -1
- package/dist/commonjs/bootstrap.js +19 -10
- package/dist/commonjs/bootstrap.js.map +1 -1
- package/dist/commonjs/constant.js +7 -1
- package/dist/commonjs/constant.js.map +1 -1
- package/dist/commonjs/error.d.ts +32 -5
- package/dist/commonjs/error.d.ts.map +1 -1
- package/dist/commonjs/error.js +60 -5
- package/dist/commonjs/error.js.map +1 -1
- package/dist/commonjs/expect.d.ts +130 -3
- package/dist/commonjs/expect.d.ts.map +1 -1
- package/dist/commonjs/expect.js +116 -1
- package/dist/commonjs/expect.js.map +1 -1
- package/dist/commonjs/guards.d.ts +45 -20
- package/dist/commonjs/guards.d.ts.map +1 -1
- package/dist/commonjs/guards.js +56 -40
- package/dist/commonjs/guards.js.map +1 -1
- package/dist/commonjs/index.d.ts +241 -86
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +44 -42
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/metadata.d.ts +1 -27
- package/dist/commonjs/metadata.d.ts.map +1 -1
- package/dist/commonjs/metadata.js +16 -15
- package/dist/commonjs/metadata.js.map +1 -1
- package/dist/commonjs/schema.d.ts +76 -33
- package/dist/commonjs/schema.d.ts.map +1 -1
- package/dist/commonjs/schema.js +77 -34
- package/dist/commonjs/schema.js.map +1 -1
- package/dist/commonjs/types.d.ts +480 -39
- package/dist/commonjs/types.d.ts.map +1 -1
- package/dist/commonjs/types.js +12 -2
- package/dist/commonjs/types.js.map +1 -1
- package/dist/commonjs/util.d.ts +72 -49
- package/dist/commonjs/util.d.ts.map +1 -1
- package/dist/commonjs/util.js +175 -155
- package/dist/commonjs/util.js.map +1 -1
- package/dist/commonjs/value-to-schema.d.ts +122 -0
- package/dist/commonjs/value-to-schema.d.ts.map +1 -0
- package/dist/commonjs/value-to-schema.js +309 -0
- package/dist/commonjs/value-to-schema.js.map +1 -0
- package/dist/esm/assertion/assertion-async.d.ts +2 -1
- package/dist/esm/assertion/assertion-async.d.ts.map +1 -1
- package/dist/esm/assertion/assertion-async.js +85 -3
- package/dist/esm/assertion/assertion-async.js.map +1 -1
- package/dist/esm/assertion/assertion-sync.d.ts +1 -1
- package/dist/esm/assertion/assertion-sync.d.ts.map +1 -1
- package/dist/esm/assertion/assertion-sync.js +6 -2
- package/dist/esm/assertion/assertion-sync.js.map +1 -1
- package/dist/esm/assertion/assertion-types.d.ts +39 -84
- package/dist/esm/assertion/assertion-types.d.ts.map +1 -1
- package/dist/esm/assertion/assertion.d.ts +1 -1
- package/dist/esm/assertion/assertion.d.ts.map +1 -1
- package/dist/esm/assertion/assertion.js +1 -14
- package/dist/esm/assertion/assertion.js.map +1 -1
- package/dist/esm/assertion/create.d.ts +5 -33
- package/dist/esm/assertion/create.d.ts.map +1 -1
- package/dist/esm/assertion/create.js +14 -4
- package/dist/esm/assertion/create.js.map +1 -1
- package/dist/esm/assertion/impl/async.d.ts +122 -21
- package/dist/esm/assertion/impl/async.d.ts.map +1 -1
- package/dist/esm/assertion/impl/async.js +113 -89
- package/dist/esm/assertion/impl/async.js.map +1 -1
- package/dist/esm/assertion/impl/callback.d.ts +104 -0
- package/dist/esm/assertion/impl/callback.d.ts.map +1 -0
- package/dist/esm/assertion/impl/callback.js +691 -0
- package/dist/esm/assertion/impl/callback.js.map +1 -0
- package/dist/esm/assertion/impl/index.d.ts +1 -1
- package/dist/esm/assertion/impl/index.d.ts.map +1 -1
- package/dist/esm/assertion/impl/index.js +1 -1
- package/dist/esm/assertion/impl/index.js.map +1 -1
- package/dist/esm/assertion/impl/sync-esoteric.js +2 -2
- package/dist/esm/assertion/impl/sync-esoteric.js.map +1 -1
- package/dist/esm/assertion/impl/sync-parametric.d.ts +37 -34
- package/dist/esm/assertion/impl/sync-parametric.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-parametric.js +32 -47
- package/dist/esm/assertion/impl/sync-parametric.js.map +1 -1
- package/dist/esm/assertion/impl/sync.d.ts +105 -58
- package/dist/esm/assertion/impl/sync.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync.js +3 -1
- package/dist/esm/assertion/impl/sync.js.map +1 -1
- package/dist/esm/bootstrap.d.ts +199 -85
- package/dist/esm/bootstrap.d.ts.map +1 -1
- package/dist/esm/bootstrap.js +19 -10
- package/dist/esm/bootstrap.js.map +1 -1
- package/dist/esm/constant.js +6 -0
- package/dist/esm/constant.js.map +1 -1
- package/dist/esm/error.d.ts +32 -5
- package/dist/esm/error.d.ts.map +1 -1
- package/dist/esm/error.js +59 -5
- package/dist/esm/error.js.map +1 -1
- package/dist/esm/expect.d.ts +130 -3
- package/dist/esm/expect.d.ts.map +1 -1
- package/dist/esm/expect.js +117 -2
- package/dist/esm/expect.js.map +1 -1
- package/dist/esm/guards.d.ts +45 -20
- package/dist/esm/guards.d.ts.map +1 -1
- package/dist/esm/guards.js +48 -31
- package/dist/esm/guards.js.map +1 -1
- package/dist/esm/index.d.ts +241 -86
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +46 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/metadata.d.ts +1 -27
- package/dist/esm/metadata.d.ts.map +1 -1
- package/dist/esm/metadata.js +2 -1
- package/dist/esm/metadata.js.map +1 -1
- package/dist/esm/schema.d.ts +76 -33
- package/dist/esm/schema.d.ts.map +1 -1
- package/dist/esm/schema.js +77 -34
- package/dist/esm/schema.js.map +1 -1
- package/dist/esm/types.d.ts +480 -39
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +12 -2
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/util.d.ts +72 -49
- package/dist/esm/util.d.ts.map +1 -1
- package/dist/esm/util.js +159 -153
- package/dist/esm/util.js.map +1 -1
- package/dist/esm/value-to-schema.d.ts +122 -0
- package/dist/esm/value-to-schema.d.ts.map +1 -0
- package/dist/esm/value-to-schema.js +305 -0
- package/dist/esm/value-to-schema.js.map +1 -0
- package/package.json +94 -17
- package/src/assertion/assertion-async.ts +113 -3
- package/src/assertion/assertion-sync.ts +5 -2
- package/src/assertion/assertion-types.ts +52 -45
- package/src/assertion/assertion.ts +2 -17
- package/src/assertion/create.ts +16 -65
- package/src/assertion/impl/async.ts +132 -92
- package/src/assertion/impl/callback.ts +882 -0
- package/src/assertion/impl/index.ts +1 -1
- package/src/assertion/impl/sync-esoteric.ts +2 -2
- package/src/assertion/impl/sync-parametric.ts +41 -49
- package/src/assertion/impl/sync.ts +3 -0
- package/src/bootstrap.ts +21 -11
- package/src/constant.ts +8 -0
- package/src/error.ts +75 -4
- package/src/expect.ts +275 -20
- package/src/guards.ts +74 -69
- package/src/index.ts +72 -11
- package/src/metadata.ts +3 -4
- package/src/schema.ts +80 -36
- package/src/types.ts +625 -72
- package/src/util.ts +174 -222
- package/src/value-to-schema.ts +464 -0
- package/dist/commonjs/api.d.ts +0 -93
- package/dist/commonjs/api.d.ts.map +0 -1
- package/dist/commonjs/api.js +0 -8
- package/dist/commonjs/api.js.map +0 -1
- package/dist/esm/api.d.ts +0 -93
- package/dist/esm/api.d.ts.map +0 -1
- package/dist/esm/api.js +0 -7
- package/dist/esm/api.js.map +0 -1
- package/src/api.ts +0 -149
- package/src/schema.md +0 -15
package/dist/esm/guards.d.ts
CHANGED
|
@@ -2,30 +2,54 @@
|
|
|
2
2
|
* Type guard functions and runtime type checking utilities.
|
|
3
3
|
*
|
|
4
4
|
* This module provides various type guard functions for runtime type checking,
|
|
5
|
-
* including guards for Zod schemas, constructors,
|
|
6
|
-
* assertion parts. These are used throughout the library for safe type
|
|
5
|
+
* including guards for Zod schemas, constructors, {@link PromiseLike} objects,
|
|
6
|
+
* and assertion parts. These are used throughout the library for safe type
|
|
7
7
|
* narrowing and validation.
|
|
8
8
|
*
|
|
9
|
+
* @category API
|
|
10
|
+
* @example
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import * as guards from 'bupkis/guards';
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
9
16
|
* @packageDocumentation
|
|
10
17
|
*/
|
|
11
18
|
import { type Primitive } from 'type-fest';
|
|
12
|
-
import { z } from 'zod';
|
|
13
|
-
import type {
|
|
14
|
-
|
|
19
|
+
import { z } from 'zod/v4';
|
|
20
|
+
import type { Constructor, ZodTypeMap } from './types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Returns `true` if the given value looks like a Zod v4 schema, determined by
|
|
23
|
+
* the presence of an internal {@link z.core.$ZodTypeDef} field.
|
|
24
|
+
*
|
|
25
|
+
* Note: This relies on Zod's internal shape and is intended for runtime
|
|
26
|
+
* discrimination within this library.
|
|
27
|
+
*
|
|
28
|
+
* @template T - The specific ZodType to check for (based on def.type)
|
|
29
|
+
* @param value - Value to test
|
|
30
|
+
* @returns Whether the value is `ZodType`-like
|
|
31
|
+
*/
|
|
32
|
+
export declare function isZodType<T extends keyof ZodTypeMap>(value: unknown, type: T): value is ZodTypeMap[T];
|
|
15
33
|
/**
|
|
16
|
-
* Returns true if the given value looks like a Zod schema
|
|
17
|
-
* the presence of an internal
|
|
34
|
+
* Returns `true` if the given value looks like a Zod v4 schema, determined by
|
|
35
|
+
* the presence of an internal {@link z.core.$ZodTypeDef} field.
|
|
18
36
|
*
|
|
19
37
|
* Note: This relies on Zod's internal shape and is intended for runtime
|
|
20
38
|
* discrimination within this library.
|
|
21
39
|
*
|
|
22
|
-
* @template T
|
|
23
40
|
* @param value - Value to test
|
|
24
|
-
* @returns Whether the value is
|
|
41
|
+
* @returns Whether the value is `ZodType`-like
|
|
25
42
|
*/
|
|
26
|
-
export declare
|
|
43
|
+
export declare function isZodType(value: unknown): value is z.ZodType;
|
|
27
44
|
/**
|
|
28
|
-
*
|
|
45
|
+
* Type guard for a plain object.
|
|
46
|
+
*
|
|
47
|
+
* @param value Value to test
|
|
48
|
+
* @returns `true` if the value is a plain object, `false` otherwise
|
|
49
|
+
*/
|
|
50
|
+
export declare const isObject: (value: unknown) => value is NonNullable<object>;
|
|
51
|
+
/**
|
|
52
|
+
* Returns `true` if the given value is a {@link z.ZodPromise} schema.
|
|
29
53
|
*
|
|
30
54
|
* @param value - Value to test
|
|
31
55
|
* @returns `true` if the value is a `ZodPromise` schema; `false` otherwise
|
|
@@ -39,15 +63,21 @@ export declare const isZodPromise: (value: unknown) => value is z.ZodPromise;
|
|
|
39
63
|
*/
|
|
40
64
|
export declare const isPromiseLike: (value: unknown) => value is PromiseLike<unknown>;
|
|
41
65
|
/**
|
|
42
|
-
* Returns true if the given value is a constructable function (i.e., a
|
|
66
|
+
* Returns `true` if the given value is a constructable function (i.e., a
|
|
67
|
+
* class).
|
|
43
68
|
*
|
|
44
|
-
* This
|
|
45
|
-
*
|
|
69
|
+
* This works by wrapping `fn` in a {@link Proxy}, attaching a no-op
|
|
70
|
+
* {@link ProxyHandler.construct} trap to it, then attempting to construct the
|
|
71
|
+
* proxy via `new`.
|
|
46
72
|
*
|
|
73
|
+
* @privateRemarks
|
|
74
|
+
* This may be the only way we can determine, at runtime, if a function is a
|
|
75
|
+
* constructor without actually calling it. I am unsure if this only works for
|
|
76
|
+
* classes.
|
|
47
77
|
* @param fn - Function to test
|
|
48
78
|
* @returns Whether the function is constructable
|
|
49
79
|
*/
|
|
50
|
-
export declare const
|
|
80
|
+
export declare const isConstructible: (fn: unknown) => fn is Constructor;
|
|
51
81
|
/**
|
|
52
82
|
* Type guard for a boolean value
|
|
53
83
|
*
|
|
@@ -62,8 +92,6 @@ export declare const isBoolean: (value: unknown) => value is boolean;
|
|
|
62
92
|
* @returns `true` if the value is a function, `false` otherwise
|
|
63
93
|
*/
|
|
64
94
|
export declare const isFunction: (value: unknown) => value is (...args: any[]) => any;
|
|
65
|
-
export declare const isAssertionFailure: (value: unknown) => value is AssertionFailure;
|
|
66
|
-
export declare const isAsyncFunction: (value: unknown) => value is (...args: any[]) => Promise<any>;
|
|
67
95
|
/**
|
|
68
96
|
* Type guard for a string value
|
|
69
97
|
*
|
|
@@ -85,9 +113,6 @@ export declare const isNonNullObject: (value: unknown) => value is object;
|
|
|
85
113
|
* @returns `true` if the value is null or not an object, `false` otherwise
|
|
86
114
|
*/
|
|
87
115
|
export declare const isNullOrNonObject: (value: unknown) => value is null | Primitive;
|
|
88
|
-
export type PrimitiveTypeName = 'bigint' | 'boolean' | 'function' | 'null' | 'number' | 'object' | 'string' | 'symbol' | 'undefined';
|
|
89
|
-
export type PrimitiveTypeNameToType<T extends PrimitiveTypeName> = T extends 'undefined' ? undefined : T extends 'object' ? null | object : T extends 'function' ? (...args: any[]) => any : T extends 'string' ? string : T extends 'number' ? number : T extends 'boolean' ? boolean : T extends 'bigint' ? bigint : T extends 'symbol' ? symbol : never;
|
|
90
|
-
export declare const isType: <T extends PrimitiveTypeName>(a: unknown, b: T) => a is PrimitiveTypeNameToType<T>;
|
|
91
116
|
export declare const isA: <T extends Constructor>(value: unknown, ctor: T) => value is InstanceType<T>;
|
|
92
117
|
export declare const isError: (value: unknown) => value is Error;
|
|
93
118
|
//# sourceMappingURL=guards.d.ts.map
|
package/dist/esm/guards.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAO3B,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,UAAU,EAClD,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,CAAC,GACN,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC;AAkB9D;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,WAAW,CAAC,MAAM,CAEpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,CAAC,CAAC,UAC5B,CAAC;AAE9B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,WAAW,CAAC,OAAO,CACb,CAAC;AAE/D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,GAAI,IAAI,OAAO,KAAG,EAAE,IAAI,WAYnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,OACxB,CAAC;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAC5C,CAAC;AA6B9B;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACxB,CAAC;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACb,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAAI,GAAG,SACtB,CAAC;AAyB9C,eAAO,MAAM,GAAG,GAAI,CAAC,SAAS,WAAW,EACvC,OAAO,OAAO,EACd,MAAM,CAAC,KACN,KAAK,IAAI,YAAY,CAAC,CAAC,CAEzB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,KAA0B,CAAC"}
|
package/dist/esm/guards.js
CHANGED
|
@@ -2,57 +2,71 @@
|
|
|
2
2
|
* Type guard functions and runtime type checking utilities.
|
|
3
3
|
*
|
|
4
4
|
* This module provides various type guard functions for runtime type checking,
|
|
5
|
-
* including guards for Zod schemas, constructors,
|
|
6
|
-
* assertion parts. These are used throughout the library for safe type
|
|
5
|
+
* including guards for Zod schemas, constructors, {@link PromiseLike} objects,
|
|
6
|
+
* and assertion parts. These are used throughout the library for safe type
|
|
7
7
|
* narrowing and validation.
|
|
8
8
|
*
|
|
9
|
+
* @category API
|
|
10
|
+
* @example
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import * as guards from 'bupkis/guards';
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
9
16
|
* @packageDocumentation
|
|
10
17
|
*/
|
|
11
|
-
import { z } from 'zod';
|
|
18
|
+
import { z } from 'zod/v4';
|
|
19
|
+
export function isZodType(value, type) {
|
|
20
|
+
const isValid = isObject(value) &&
|
|
21
|
+
'def' in value &&
|
|
22
|
+
!!value.def &&
|
|
23
|
+
typeof value.def === 'object' &&
|
|
24
|
+
'type' in value.def;
|
|
25
|
+
if (!isValid)
|
|
26
|
+
return false;
|
|
27
|
+
if (type === undefined)
|
|
28
|
+
return true;
|
|
29
|
+
return value.def.type === type;
|
|
30
|
+
}
|
|
12
31
|
/**
|
|
13
|
-
*
|
|
14
|
-
* the presence of an internal `def.type` field.
|
|
32
|
+
* Type guard for a plain object.
|
|
15
33
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* @template T
|
|
20
|
-
* @param value - Value to test
|
|
21
|
-
* @returns Whether the value is Zod-like
|
|
34
|
+
* @param value Value to test
|
|
35
|
+
* @returns `true` if the value is a plain object, `false` otherwise
|
|
22
36
|
*/
|
|
23
|
-
export const
|
|
24
|
-
typeof value === 'object' &&
|
|
25
|
-
|
|
26
|
-
value.def &&
|
|
27
|
-
typeof value.def === 'object' &&
|
|
28
|
-
'type' in value.def);
|
|
37
|
+
export const isObject = (value) => {
|
|
38
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
39
|
+
};
|
|
29
40
|
/**
|
|
30
|
-
* Returns true if the given value is a {@link z.ZodPromise} schema.
|
|
41
|
+
* Returns `true` if the given value is a {@link z.ZodPromise} schema.
|
|
31
42
|
*
|
|
32
43
|
* @param value - Value to test
|
|
33
44
|
* @returns `true` if the value is a `ZodPromise` schema; `false` otherwise
|
|
34
45
|
*/
|
|
35
|
-
export const isZodPromise = (value) => isZodType(value
|
|
46
|
+
export const isZodPromise = (value) => isZodType(value, 'promise');
|
|
36
47
|
/**
|
|
37
48
|
* Checks if a value is "promise-like", meaning it is a "thenable" object.
|
|
38
49
|
*
|
|
39
50
|
* @param value - Value to test
|
|
40
51
|
* @returns `true` if the value is promise-like, `false` otherwise
|
|
41
52
|
*/
|
|
42
|
-
export const isPromiseLike = (value) =>
|
|
43
|
-
typeof value === 'object' &&
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
45
|
-
typeof value.then === 'function');
|
|
53
|
+
export const isPromiseLike = (value) => isObject(value) && 'then' in value && isFunction(value.then);
|
|
46
54
|
/**
|
|
47
|
-
* Returns true if the given value is a constructable function (i.e., a
|
|
55
|
+
* Returns `true` if the given value is a constructable function (i.e., a
|
|
56
|
+
* class).
|
|
48
57
|
*
|
|
49
|
-
* This
|
|
50
|
-
*
|
|
58
|
+
* This works by wrapping `fn` in a {@link Proxy}, attaching a no-op
|
|
59
|
+
* {@link ProxyHandler.construct} trap to it, then attempting to construct the
|
|
60
|
+
* proxy via `new`.
|
|
51
61
|
*
|
|
62
|
+
* @privateRemarks
|
|
63
|
+
* This may be the only way we can determine, at runtime, if a function is a
|
|
64
|
+
* constructor without actually calling it. I am unsure if this only works for
|
|
65
|
+
* classes.
|
|
52
66
|
* @param fn - Function to test
|
|
53
67
|
* @returns Whether the function is constructable
|
|
54
68
|
*/
|
|
55
|
-
export const
|
|
69
|
+
export const isConstructible = (fn) => {
|
|
56
70
|
if (fn === Symbol || fn === BigInt) {
|
|
57
71
|
return false;
|
|
58
72
|
}
|
|
@@ -94,8 +108,14 @@ const AssertionFailureSchema = z.object({
|
|
|
94
108
|
.optional()
|
|
95
109
|
.describe('A human-readable message describing the failure'),
|
|
96
110
|
});
|
|
111
|
+
/**
|
|
112
|
+
* Type guard for a {@link AssertionFailure} object
|
|
113
|
+
*
|
|
114
|
+
* @param value Value to check
|
|
115
|
+
* @returns `true` if the value is an `AssertionFailure`, `false` otherwise
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
97
118
|
export const isAssertionFailure = (value) => AssertionFailureSchema.safeParse(value).success;
|
|
98
|
-
export const isAsyncFunction = (value) => isFunction(value) && value.constructor.name === 'AsyncFunction';
|
|
99
119
|
/**
|
|
100
120
|
* Type guard for a string value
|
|
101
121
|
*
|
|
@@ -134,9 +154,6 @@ export const isPhraseLiteralChoice = (value) => Array.isArray(value) && value.ev
|
|
|
134
154
|
* @internal
|
|
135
155
|
*/
|
|
136
156
|
export const isPhraseLiteral = (value) => isString(value) && !value.startsWith('not ');
|
|
137
|
-
export const isType = (a, b) => {
|
|
138
|
-
return typeof a === b;
|
|
139
|
-
};
|
|
140
157
|
export const isA = (value, ctor) => {
|
|
141
158
|
return isNonNullObject(value) && value instanceof ctor;
|
|
142
159
|
};
|
package/dist/esm/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"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"}
|