bupkis 0.2.0 → 0.4.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 +27 -0
- package/README.md +35 -11
- 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 +6 -2
- 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/impl/async.d.ts +122 -21
- package/dist/commonjs/assertion/impl/async.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/async.js +118 -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-basic.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-basic.js +1 -1
- package/dist/commonjs/assertion/impl/sync-basic.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync-collection.d.ts +1 -1
- package/dist/commonjs/assertion/impl/sync-collection.js +3 -3
- package/dist/commonjs/assertion/impl/sync-collection.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 +22 -28
- package/dist/commonjs/assertion/impl/sync-parametric.d.ts.map +1 -1
- package/dist/commonjs/assertion/impl/sync-parametric.js +35 -50
- package/dist/commonjs/assertion/impl/sync-parametric.js.map +1 -1
- package/dist/commonjs/assertion/impl/sync.d.ts +68 -30
- 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 +147 -52
- package/dist/commonjs/bootstrap.d.ts.map +1 -1
- package/dist/commonjs/bootstrap.js +2 -3
- package/dist/commonjs/bootstrap.js.map +1 -1
- package/dist/commonjs/constant.d.ts +1 -1
- package/dist/commonjs/constant.d.ts.map +1 -1
- package/dist/commonjs/constant.js +8 -1
- package/dist/commonjs/constant.js.map +1 -1
- package/dist/commonjs/error.d.ts +22 -2
- package/dist/commonjs/error.d.ts.map +1 -1
- package/dist/commonjs/error.js +44 -4
- package/dist/commonjs/error.js.map +1 -1
- package/dist/commonjs/expect.d.ts.map +1 -1
- package/dist/commonjs/expect.js +1 -1
- package/dist/commonjs/expect.js.map +1 -1
- package/dist/commonjs/guards.d.ts +96 -5
- package/dist/commonjs/guards.d.ts.map +1 -1
- package/dist/commonjs/guards.js +104 -25
- package/dist/commonjs/guards.js.map +1 -1
- package/dist/commonjs/index.d.ts +146 -51
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/schema.d.ts +84 -18
- package/dist/commonjs/schema.d.ts.map +1 -1
- package/dist/commonjs/schema.js +107 -22
- package/dist/commonjs/schema.js.map +1 -1
- package/dist/commonjs/types.d.ts +171 -9
- package/dist/commonjs/types.d.ts.map +1 -1
- package/dist/commonjs/use.d.ts.map +1 -1
- package/dist/commonjs/use.js +15 -1
- package/dist/commonjs/use.js.map +1 -1
- package/dist/commonjs/util.d.ts +66 -50
- package/dist/commonjs/util.d.ts.map +1 -1
- package/dist/commonjs/util.js +169 -156
- 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 +329 -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 +6 -2
- 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/impl/async.d.ts +122 -21
- package/dist/esm/assertion/impl/async.d.ts.map +1 -1
- package/dist/esm/assertion/impl/async.js +118 -90
- 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-basic.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-basic.js +2 -2
- package/dist/esm/assertion/impl/sync-basic.js.map +1 -1
- package/dist/esm/assertion/impl/sync-collection.d.ts +1 -1
- package/dist/esm/assertion/impl/sync-collection.js +3 -3
- package/dist/esm/assertion/impl/sync-collection.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 +22 -28
- package/dist/esm/assertion/impl/sync-parametric.d.ts.map +1 -1
- package/dist/esm/assertion/impl/sync-parametric.js +36 -51
- package/dist/esm/assertion/impl/sync-parametric.js.map +1 -1
- package/dist/esm/assertion/impl/sync.d.ts +68 -30
- 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 +147 -52
- package/dist/esm/bootstrap.d.ts.map +1 -1
- package/dist/esm/bootstrap.js +1 -2
- package/dist/esm/bootstrap.js.map +1 -1
- package/dist/esm/constant.d.ts +1 -1
- package/dist/esm/constant.d.ts.map +1 -1
- package/dist/esm/constant.js +7 -0
- package/dist/esm/constant.js.map +1 -1
- package/dist/esm/error.d.ts +22 -2
- package/dist/esm/error.d.ts.map +1 -1
- package/dist/esm/error.js +43 -4
- package/dist/esm/error.js.map +1 -1
- package/dist/esm/expect.d.ts.map +1 -1
- package/dist/esm/expect.js +2 -2
- package/dist/esm/expect.js.map +1 -1
- package/dist/esm/guards.d.ts +96 -5
- package/dist/esm/guards.d.ts.map +1 -1
- package/dist/esm/guards.js +98 -21
- package/dist/esm/guards.js.map +1 -1
- package/dist/esm/index.d.ts +146 -51
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/schema.d.ts +84 -18
- package/dist/esm/schema.d.ts.map +1 -1
- package/dist/esm/schema.js +107 -22
- package/dist/esm/schema.js.map +1 -1
- package/dist/esm/types.d.ts +171 -9
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/use.d.ts.map +1 -1
- package/dist/esm/use.js +15 -1
- package/dist/esm/use.js.map +1 -1
- package/dist/esm/util.d.ts +66 -50
- package/dist/esm/util.d.ts.map +1 -1
- package/dist/esm/util.js +153 -154
- 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 +325 -0
- package/dist/esm/value-to-schema.js.map +1 -0
- package/package.json +16 -13
- package/src/assertion/assertion-async.ts +113 -3
- package/src/assertion/assertion-sync.ts +5 -2
- package/src/assertion/assertion-types.ts +14 -4
- package/src/assertion/assertion.ts +2 -17
- package/src/assertion/impl/async.ts +137 -93
- package/src/assertion/impl/callback.ts +882 -0
- package/src/assertion/impl/index.ts +1 -1
- package/src/assertion/impl/sync-basic.ts +5 -2
- package/src/assertion/impl/sync-collection.ts +3 -3
- package/src/assertion/impl/sync-esoteric.ts +2 -2
- package/src/assertion/impl/sync-parametric.ts +47 -54
- package/src/assertion/impl/sync.ts +3 -0
- package/src/bootstrap.ts +1 -2
- package/src/constant.ts +10 -0
- package/src/error.ts +57 -3
- package/src/expect.ts +6 -2
- package/src/guards.ts +125 -18
- package/src/index.ts +3 -0
- package/src/schema.ts +121 -23
- package/src/types.ts +205 -10
- package/src/use.ts +22 -0
- package/src/util.ts +168 -223
- package/src/value-to-schema.ts +489 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
/**
|
|
3
|
+
* Recursively converts an arbitrary value to a Zod v4 schema that would
|
|
4
|
+
* validate values with the same structure.
|
|
5
|
+
*
|
|
6
|
+
* This function analyzes the runtime value and generates a corresponding Zod
|
|
7
|
+
* schema that captures the value's structure and type information. It handles
|
|
8
|
+
* primitives, objects, arrays, functions, and various built-in types, with
|
|
9
|
+
* support for circular reference detection.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Primitive types
|
|
15
|
+
* valueToSchema('hello'); // z.string()
|
|
16
|
+
* valueToSchema(42); // z.number()
|
|
17
|
+
* valueToSchema(true); // z.boolean()
|
|
18
|
+
*
|
|
19
|
+
* // Objects
|
|
20
|
+
* valueToSchema({ name: 'John', age: 30 });
|
|
21
|
+
* // z.object({ name: z.string(), age: z.number() })
|
|
22
|
+
*
|
|
23
|
+
* // Arrays
|
|
24
|
+
* valueToSchema(['a', 'b', 'c']); // z.array(z.string())
|
|
25
|
+
* valueToSchema([1, 'mixed']); // z.array(z.union([z.number(), z.string()]))
|
|
26
|
+
*
|
|
27
|
+
* // Nested structures
|
|
28
|
+
* valueToSchema({ users: [{ name: 'John' }] });
|
|
29
|
+
* // z.object({ users: z.array(z.object({ name: z.string() })) })
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @param value - The value to convert to a schema
|
|
33
|
+
* @param options - Configuration options for schema generation
|
|
34
|
+
* @param visited - Internal WeakSet for circular reference detection
|
|
35
|
+
* @returns A Zod schema that validates values matching the input's structure.
|
|
36
|
+
* This value is unfortunately untyped due to the complexity involved. But the
|
|
37
|
+
* schema works!
|
|
38
|
+
*/
|
|
39
|
+
export declare const valueToSchema: (value: unknown, options?: ValueToSchemaOptions, visited?: WeakSet<object>) => z.ZodType<any>;
|
|
40
|
+
/**
|
|
41
|
+
* Options for {@link valueToSchema}
|
|
42
|
+
*/
|
|
43
|
+
export interface ValueToSchemaOptions {
|
|
44
|
+
/**
|
|
45
|
+
* If `true`, treat empty objects `{}` as literal empty objects that only
|
|
46
|
+
* match objects with zero own properties
|
|
47
|
+
*
|
|
48
|
+
* @defaultValue false
|
|
49
|
+
*/
|
|
50
|
+
literalEmptyObjects?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* If `true`, use literal schema for primitive values instead of type schema
|
|
53
|
+
*
|
|
54
|
+
* @defaultValue false
|
|
55
|
+
*/
|
|
56
|
+
literalPrimitives?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* If `true`, treat `RegExp` literals as `RegExp` literals; otherwise treat as
|
|
59
|
+
* strings and attempt match
|
|
60
|
+
*
|
|
61
|
+
* @defaultValue false
|
|
62
|
+
*/
|
|
63
|
+
literalRegExp?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* If `true`, treat arrays as tuples wherever possible.
|
|
66
|
+
*
|
|
67
|
+
* Implies `false` for {@link noMixedArrays}.
|
|
68
|
+
*
|
|
69
|
+
* @defaultValue false
|
|
70
|
+
*/
|
|
71
|
+
literalTuples?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Maximum nesting depth to prevent stack overflow
|
|
74
|
+
*
|
|
75
|
+
* @defaultValue 10
|
|
76
|
+
*/
|
|
77
|
+
maxDepth?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Whether to allow mixed types in arrays
|
|
80
|
+
*
|
|
81
|
+
* If {@link literalTuples} is `true`, this option is ignored and treated as
|
|
82
|
+
* `false`.
|
|
83
|
+
*
|
|
84
|
+
* @defaultValue false
|
|
85
|
+
*/
|
|
86
|
+
noMixedArrays?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* If `true`, will disallow unknown properties in parsed objects
|
|
89
|
+
*
|
|
90
|
+
* @defaultValue false
|
|
91
|
+
*/
|
|
92
|
+
strict?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Predefined options for {@link valueToSchema} optimized for object satisfaction
|
|
96
|
+
* checks.
|
|
97
|
+
*
|
|
98
|
+
* Uses literal primitives and tuples for exact matching while allowing extra
|
|
99
|
+
* properties.
|
|
100
|
+
*/
|
|
101
|
+
export declare const valueToSchemaOptionsForSatisfies: Readonly<{
|
|
102
|
+
readonly literalEmptyObjects: true;
|
|
103
|
+
readonly literalPrimitives: true;
|
|
104
|
+
readonly literalRegExp: false;
|
|
105
|
+
readonly literalTuples: true;
|
|
106
|
+
readonly strict: false;
|
|
107
|
+
}>;
|
|
108
|
+
/**
|
|
109
|
+
* Predefined options for {@link valueToSchema} optimized for deep equality
|
|
110
|
+
* checks.
|
|
111
|
+
*
|
|
112
|
+
* Uses literal primitives, regexp, and tuples with strict validation for exact
|
|
113
|
+
* matching.
|
|
114
|
+
*/
|
|
115
|
+
export declare const valueToSchemaOptionsForDeepEqual: Readonly<{
|
|
116
|
+
readonly literalEmptyObjects: true;
|
|
117
|
+
readonly literalPrimitives: true;
|
|
118
|
+
readonly literalRegExp: true;
|
|
119
|
+
readonly literalTuples: true;
|
|
120
|
+
readonly strict: true;
|
|
121
|
+
}>;
|
|
122
|
+
//# sourceMappingURL=value-to-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-to-schema.d.ts","sourceRoot":"","sources":["../../src/value-to-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAiB3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,eAAO,MAAM,aAAa,GACxB,OAAO,OAAO,EACd,UAAS,oBAAyB,EAClC,yBAA+B,KAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CA2Uf,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAQnC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC;;;;;;EAMH,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC;;;;;;EAMH,CAAC"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.valueToSchemaOptionsForDeepEqual = exports.valueToSchemaOptionsForSatisfies = exports.valueToSchema = void 0;
|
|
4
|
+
const v4_1 = require("zod/v4");
|
|
5
|
+
const guards_js_1 = require("./guards.js");
|
|
6
|
+
const schema_js_1 = require("./schema.js");
|
|
7
|
+
/**
|
|
8
|
+
* Recursively converts an arbitrary value to a Zod v4 schema that would
|
|
9
|
+
* validate values with the same structure.
|
|
10
|
+
*
|
|
11
|
+
* This function analyzes the runtime value and generates a corresponding Zod
|
|
12
|
+
* schema that captures the value's structure and type information. It handles
|
|
13
|
+
* primitives, objects, arrays, functions, and various built-in types, with
|
|
14
|
+
* support for circular reference detection.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
*
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Primitive types
|
|
20
|
+
* valueToSchema('hello'); // z.string()
|
|
21
|
+
* valueToSchema(42); // z.number()
|
|
22
|
+
* valueToSchema(true); // z.boolean()
|
|
23
|
+
*
|
|
24
|
+
* // Objects
|
|
25
|
+
* valueToSchema({ name: 'John', age: 30 });
|
|
26
|
+
* // z.object({ name: z.string(), age: z.number() })
|
|
27
|
+
*
|
|
28
|
+
* // Arrays
|
|
29
|
+
* valueToSchema(['a', 'b', 'c']); // z.array(z.string())
|
|
30
|
+
* valueToSchema([1, 'mixed']); // z.array(z.union([z.number(), z.string()]))
|
|
31
|
+
*
|
|
32
|
+
* // Nested structures
|
|
33
|
+
* valueToSchema({ users: [{ name: 'John' }] });
|
|
34
|
+
* // z.object({ users: z.array(z.object({ name: z.string() })) })
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @param value - The value to convert to a schema
|
|
38
|
+
* @param options - Configuration options for schema generation
|
|
39
|
+
* @param visited - Internal WeakSet for circular reference detection
|
|
40
|
+
* @returns A Zod schema that validates values matching the input's structure.
|
|
41
|
+
* This value is unfortunately untyped due to the complexity involved. But the
|
|
42
|
+
* schema works!
|
|
43
|
+
*/
|
|
44
|
+
const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
|
|
45
|
+
const { _currentDepth = 0, literalEmptyObjects = false, literalPrimitives = false, literalRegExp = false, literalTuples = false, maxDepth = 10, noMixedArrays = false, strict = false, } = options;
|
|
46
|
+
// Prevent infinite recursion
|
|
47
|
+
if (_currentDepth >= maxDepth) {
|
|
48
|
+
return v4_1.z.unknown();
|
|
49
|
+
}
|
|
50
|
+
// Handle primitives
|
|
51
|
+
if (value === null) {
|
|
52
|
+
return v4_1.z.null();
|
|
53
|
+
}
|
|
54
|
+
if (value === undefined) {
|
|
55
|
+
return literalPrimitives
|
|
56
|
+
? v4_1.z.custom((val) => val === undefined, {
|
|
57
|
+
message: 'Expected undefined',
|
|
58
|
+
})
|
|
59
|
+
: v4_1.z.undefined();
|
|
60
|
+
}
|
|
61
|
+
if (Number.isNaN(value)) {
|
|
62
|
+
return v4_1.z.nan();
|
|
63
|
+
}
|
|
64
|
+
if (value === Infinity || value === -Infinity) {
|
|
65
|
+
return v4_1.z.literal(value);
|
|
66
|
+
}
|
|
67
|
+
const valueType = typeof value;
|
|
68
|
+
switch (valueType) {
|
|
69
|
+
case 'bigint':
|
|
70
|
+
return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.bigint();
|
|
71
|
+
case 'boolean':
|
|
72
|
+
return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.boolean();
|
|
73
|
+
case 'function':
|
|
74
|
+
// Check if this is an ExpectItExecutor
|
|
75
|
+
if ((0, guards_js_1.isExpectItExecutor)(value)) {
|
|
76
|
+
// Only allow nested assertions when strict is false (e.g., "to satisfy" semantics)
|
|
77
|
+
if (strict) {
|
|
78
|
+
throw new TypeError('ExpectItExecutor (expect.it) functions are not allowed in strict mode. ' +
|
|
79
|
+
'Use "to satisfy" assertions for nested expectations.');
|
|
80
|
+
}
|
|
81
|
+
// Return a schema that executes the ExpectItExecutor when validated
|
|
82
|
+
return v4_1.z.custom((subject) => {
|
|
83
|
+
try {
|
|
84
|
+
value(subject);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
message: 'Failed expect.it assertion',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return v4_1.z.function();
|
|
95
|
+
case 'number':
|
|
96
|
+
return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.number();
|
|
97
|
+
case 'string':
|
|
98
|
+
return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.string();
|
|
99
|
+
case 'symbol':
|
|
100
|
+
return v4_1.z.symbol();
|
|
101
|
+
}
|
|
102
|
+
// Handle objects
|
|
103
|
+
if (typeof value === 'object' && value !== null) {
|
|
104
|
+
// Check for circular references
|
|
105
|
+
if (visited.has(value)) {
|
|
106
|
+
// Return a recursive schema reference or unknown for circular refs
|
|
107
|
+
return v4_1.z.unknown();
|
|
108
|
+
}
|
|
109
|
+
visited.add(value);
|
|
110
|
+
try {
|
|
111
|
+
// Check for objects with own __proto__ property - these can cause unexpected behavior
|
|
112
|
+
if (Object.hasOwn(value, '__proto__')) {
|
|
113
|
+
throw new TypeError('Objects with an own "__proto__" property are not supported by valueToSchema');
|
|
114
|
+
}
|
|
115
|
+
// Handle built-in object types
|
|
116
|
+
if (value instanceof Date) {
|
|
117
|
+
// Check if it's a valid date
|
|
118
|
+
if (isNaN(value.getTime())) {
|
|
119
|
+
// For invalid dates, use a literal or custom validator
|
|
120
|
+
return v4_1.z.custom((val) => val instanceof Date && isNaN(val.getTime()), {
|
|
121
|
+
message: 'Expected an invalid Date',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return v4_1.z.date();
|
|
125
|
+
}
|
|
126
|
+
if (value instanceof RegExp) {
|
|
127
|
+
if (literalRegExp) {
|
|
128
|
+
return schema_js_1.RegExpSchema;
|
|
129
|
+
}
|
|
130
|
+
return v4_1.z.coerce.string().regex(value);
|
|
131
|
+
}
|
|
132
|
+
if (value instanceof Map) {
|
|
133
|
+
return schema_js_1.StrongMapSchema;
|
|
134
|
+
}
|
|
135
|
+
if (value instanceof Set) {
|
|
136
|
+
return schema_js_1.StrongSetSchema;
|
|
137
|
+
}
|
|
138
|
+
if (value instanceof WeakMap) {
|
|
139
|
+
return v4_1.z.instanceof(WeakMap);
|
|
140
|
+
}
|
|
141
|
+
if (value instanceof WeakSet) {
|
|
142
|
+
return v4_1.z.instanceof(WeakSet);
|
|
143
|
+
}
|
|
144
|
+
if (value instanceof Error) {
|
|
145
|
+
return v4_1.z.instanceof(Error);
|
|
146
|
+
}
|
|
147
|
+
if ((0, guards_js_1.isPromiseLike)(value)) {
|
|
148
|
+
return schema_js_1.WrappedPromiseLikeSchema;
|
|
149
|
+
}
|
|
150
|
+
// Handle arrays
|
|
151
|
+
if (Array.isArray(value)) {
|
|
152
|
+
// For arrays, we need to preserve undefined values while allowing
|
|
153
|
+
// other elements to use the original literalPrimitives setting
|
|
154
|
+
const filteredValue = value; // Always process all elements
|
|
155
|
+
if (filteredValue.length === 0) {
|
|
156
|
+
// For empty arrays, use z.tuple() if literalTuples is enabled
|
|
157
|
+
if (literalTuples) {
|
|
158
|
+
return v4_1.z.tuple([]);
|
|
159
|
+
}
|
|
160
|
+
return v4_1.z.array(v4_1.z.never());
|
|
161
|
+
}
|
|
162
|
+
const elementSchemas = filteredValue.map((item) => {
|
|
163
|
+
// Use literal mode for undefined values to preserve them exactly,
|
|
164
|
+
// but use the original setting for other values
|
|
165
|
+
const itemLiteralPrimitives = item === undefined ? true : literalPrimitives;
|
|
166
|
+
return (0, exports.valueToSchema)(item, {
|
|
167
|
+
...options,
|
|
168
|
+
_currentDepth: _currentDepth + 1,
|
|
169
|
+
literalPrimitives: itemLiteralPrimitives,
|
|
170
|
+
}, visited);
|
|
171
|
+
});
|
|
172
|
+
// Use z.tuple() if literalTuples is enabled
|
|
173
|
+
if (literalTuples) {
|
|
174
|
+
return v4_1.z.tuple(elementSchemas);
|
|
175
|
+
}
|
|
176
|
+
if (!noMixedArrays) {
|
|
177
|
+
// Helper function to generate structural keys for schemas
|
|
178
|
+
const getSchemaKey = (zodType) => {
|
|
179
|
+
const schema = zodType;
|
|
180
|
+
if ((0, guards_js_1.isZodType)(schema, 'literal')) {
|
|
181
|
+
return `${schema.constructor.name}:${String(schema.def.values)}`;
|
|
182
|
+
}
|
|
183
|
+
if ((0, guards_js_1.isZodType)(schema, 'array')) {
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
185
|
+
const elementKey = getSchemaKey(schema.def.element);
|
|
186
|
+
return `ZodArray<${elementKey}>`;
|
|
187
|
+
}
|
|
188
|
+
if ((0, guards_js_1.isZodType)(schema, 'object')) {
|
|
189
|
+
// For objects, create a key based on the property keys and their types
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
191
|
+
const shape = schema.def.shape;
|
|
192
|
+
const shapeKeys = Object.keys(shape)
|
|
193
|
+
.sort()
|
|
194
|
+
.map((key) => {
|
|
195
|
+
const propSchema = shape[key];
|
|
196
|
+
return `${key}:${getSchemaKey(propSchema)}`;
|
|
197
|
+
});
|
|
198
|
+
return `ZodObject<{${shapeKeys.join(',')}}>`;
|
|
199
|
+
}
|
|
200
|
+
if ((0, guards_js_1.isZodType)(schema, 'union')) {
|
|
201
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
202
|
+
const optionKeys = schema.def.options
|
|
203
|
+
.map((option) => getSchemaKey(option))
|
|
204
|
+
.sort();
|
|
205
|
+
return `ZodUnion<[${optionKeys.join(',')}]>`;
|
|
206
|
+
}
|
|
207
|
+
// For other types, use the constructor name
|
|
208
|
+
return schema.constructor.name;
|
|
209
|
+
};
|
|
210
|
+
const seenSchemaKeys = new Set();
|
|
211
|
+
const uniqueSchemas = [];
|
|
212
|
+
for (const schema of elementSchemas) {
|
|
213
|
+
const schemaKey = getSchemaKey(schema);
|
|
214
|
+
if (!seenSchemaKeys.has(schemaKey)) {
|
|
215
|
+
seenSchemaKeys.add(schemaKey);
|
|
216
|
+
uniqueSchemas.push(schema);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (uniqueSchemas.length === 1) {
|
|
220
|
+
return v4_1.z.array(uniqueSchemas[0]);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
return v4_1.z.array(v4_1.z.union(uniqueSchemas));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// Use the first element's schema for all elements
|
|
228
|
+
return v4_1.z.array(elementSchemas[0]);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Handle plain objects
|
|
232
|
+
if ((0, guards_js_1.isNonNullObject)(value)) {
|
|
233
|
+
const schemaShape = {};
|
|
234
|
+
const undefinedKeys = [];
|
|
235
|
+
for (const [key, val] of Object.entries(value)) {
|
|
236
|
+
if ((0, guards_js_1.isString)(key)) {
|
|
237
|
+
// Skip undefined values unless we're in literalPrimitives mode
|
|
238
|
+
// This prevents objects with only undefined values from matching any object
|
|
239
|
+
if (val === undefined && !literalPrimitives) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (val === undefined && literalPrimitives) {
|
|
243
|
+
// Track keys that should have undefined values
|
|
244
|
+
undefinedKeys.push(key);
|
|
245
|
+
schemaShape[key] = v4_1.z.undefined();
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
schemaShape[key] = (0, exports.valueToSchema)(val, {
|
|
249
|
+
...options,
|
|
250
|
+
_currentDepth: _currentDepth + 1,
|
|
251
|
+
}, visited);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Create the base object schema
|
|
256
|
+
const baseSchema = strict
|
|
257
|
+
? v4_1.z.strictObject(schemaShape)
|
|
258
|
+
: v4_1.z.looseObject(schemaShape);
|
|
259
|
+
// If we have undefined keys in literalPrimitives mode, add validation to ensure they exist
|
|
260
|
+
if (undefinedKeys.length > 0 && literalPrimitives) {
|
|
261
|
+
return baseSchema.superRefine((data, ctx) => {
|
|
262
|
+
if (typeof data !== 'object' || data === null) {
|
|
263
|
+
ctx.addIssue({
|
|
264
|
+
code: v4_1.z.ZodIssueCode.custom,
|
|
265
|
+
message: 'Expected an object',
|
|
266
|
+
});
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const obj = data;
|
|
270
|
+
for (const key of undefinedKeys) {
|
|
271
|
+
if (!Object.hasOwn(obj, key)) {
|
|
272
|
+
ctx.addIssue({
|
|
273
|
+
code: v4_1.z.ZodIssueCode.custom,
|
|
274
|
+
message: `Expected property "${key}" to exist with value undefined`,
|
|
275
|
+
path: [key],
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
// Check if this is an empty object and literalEmptyObjects is enabled
|
|
282
|
+
if (Object.keys(schemaShape).length === 0 && literalEmptyObjects) {
|
|
283
|
+
// Create a schema that only matches empty objects
|
|
284
|
+
return v4_1.z.custom((val) => (0, guards_js_1.isObject)(val) && Object.keys(val).length === 0, {
|
|
285
|
+
message: 'Expected an empty object with no own properties',
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
return baseSchema;
|
|
289
|
+
}
|
|
290
|
+
// Handle other object types (ArrayBuffer, etc.)
|
|
291
|
+
return v4_1.z.custom((val) => typeof val === 'object' && val !== null, { message: 'Expected an object' });
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
visited.delete(value);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Fallback for unknown types
|
|
298
|
+
return v4_1.z.unknown();
|
|
299
|
+
};
|
|
300
|
+
exports.valueToSchema = valueToSchema;
|
|
301
|
+
/**
|
|
302
|
+
* Predefined options for {@link valueToSchema} optimized for object satisfaction
|
|
303
|
+
* checks.
|
|
304
|
+
*
|
|
305
|
+
* Uses literal primitives and tuples for exact matching while allowing extra
|
|
306
|
+
* properties.
|
|
307
|
+
*/
|
|
308
|
+
exports.valueToSchemaOptionsForSatisfies = Object.freeze({
|
|
309
|
+
literalEmptyObjects: true,
|
|
310
|
+
literalPrimitives: true,
|
|
311
|
+
literalRegExp: false,
|
|
312
|
+
literalTuples: true,
|
|
313
|
+
strict: false,
|
|
314
|
+
});
|
|
315
|
+
/**
|
|
316
|
+
* Predefined options for {@link valueToSchema} optimized for deep equality
|
|
317
|
+
* checks.
|
|
318
|
+
*
|
|
319
|
+
* Uses literal primitives, regexp, and tuples with strict validation for exact
|
|
320
|
+
* matching.
|
|
321
|
+
*/
|
|
322
|
+
exports.valueToSchemaOptionsForDeepEqual = Object.freeze({
|
|
323
|
+
literalEmptyObjects: true,
|
|
324
|
+
literalPrimitives: true,
|
|
325
|
+
literalRegExp: true,
|
|
326
|
+
literalTuples: true,
|
|
327
|
+
strict: true,
|
|
328
|
+
});
|
|
329
|
+
//# sourceMappingURL=value-to-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-to-schema.js","sourceRoot":"","sources":["../../src/value-to-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,8 @@ export declare class BupkisAssertionFunctionAsync<Parts extends AssertionParts,
|
|
|
34
34
|
* with an {@link AssertionError}
|
|
35
35
|
*/
|
|
36
36
|
export declare class BupkisAssertionSchemaAsync<Parts extends AssertionParts, Impl extends AssertionImplSchemaAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertionAsync<Parts, Impl, Slots> implements AssertionSchemaAsync<Parts, Impl, Slots> {
|
|
37
|
-
executeAsync(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any,
|
|
37
|
+
executeAsync(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
38
|
+
parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
|
|
38
39
|
/**
|
|
39
40
|
* Determines if this assertion can be optimized (simple single-subject
|
|
40
41
|
* schema). Only simple assertions like ['to be a string'] with z.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertion-async.d.ts","sourceRoot":"","sources":["../../../src/assertion/assertion-async.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assertion-async.d.ts","sourceRoot":"","sources":["../../../src/assertion/assertion-async.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,8BAAsB,oBAAoB,CACtC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,kBAAkB,CAAC,KAAK,CAAC,EACtC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAErC,SAAQ,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC1C,YAAW,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE7C,QAAQ,CAAC,YAAY,CACnB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAEV,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EACpD,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CA0ChC;AACD;;;;GAIG;AACH;;;;;;;;GAQG;AAEH,qBAAa,4BAA4B,CACrC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,oBAAoB,CAAC,KAAK,CAAC,EACxC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAErC,SAAQ,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC/C,YAAW,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEtC,YAAY,CACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAgCjB;AAED;;;;;;;;;;;GAWG;AAEH,qBAAa,0BAA0B,CACnC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,wBAAwB,CAAC,KAAK,CAAC,EAC5C,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAErC,SAAQ,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC/C,YAAW,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEpC,YAAY,CACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,KAAK,EAAE,OAAO,EAAE,EAChB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAmCD,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EAC7D,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IA6E/B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;CAehC"}
|
|
@@ -3,7 +3,7 @@ import { inspect } from 'util';
|
|
|
3
3
|
import z from 'zod/v4';
|
|
4
4
|
import { kStringLiteral } from '../constant.js';
|
|
5
5
|
import { AssertionError } from '../error.js';
|
|
6
|
-
import { isA, isAssertionFailure, isBoolean, isZodType } from '../guards.js';
|
|
6
|
+
import { isA, isAssertionFailure, isBoolean, isError, isZodType, } from '../guards.js';
|
|
7
7
|
import { BupkisRegistry } from '../metadata.js';
|
|
8
8
|
import { BupkisAssertion } from './assertion.js';
|
|
9
9
|
const debug = Debug('bupkis:assertion:async');
|
|
@@ -93,6 +93,9 @@ export class BupkisAssertionFunctionAsync extends BupkisAssertionAsync {
|
|
|
93
93
|
message: result.message ?? `Assertion ${this} failed`,
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
|
+
else if (isError(result) && result instanceof z.ZodError) {
|
|
97
|
+
throw this.translateZodError(stackStartFn, result, ...parsedValues);
|
|
98
|
+
}
|
|
96
99
|
else if (result) {
|
|
97
100
|
throw new TypeError(`Invalid return type from assertion ${this}; expected boolean, ZodType, or AssertionFailure`);
|
|
98
101
|
}
|
|
@@ -111,8 +114,21 @@ export class BupkisAssertionFunctionAsync extends BupkisAssertionAsync {
|
|
|
111
114
|
* with an {@link AssertionError}
|
|
112
115
|
*/
|
|
113
116
|
export class BupkisAssertionSchemaAsync extends BupkisAssertionAsync {
|
|
114
|
-
async executeAsync(parsedValues, _args, stackStartFn,
|
|
115
|
-
//
|
|
117
|
+
async executeAsync(parsedValues, _args, stackStartFn, parseResult) {
|
|
118
|
+
// Check if we have cached validation result from parseValuesAsync
|
|
119
|
+
const cachedValidation = parseResult?.success
|
|
120
|
+
? parseResult.subjectValidationResult
|
|
121
|
+
: undefined;
|
|
122
|
+
if (cachedValidation) {
|
|
123
|
+
debug('Using cached subject validation result from parseValuesAsync for %s', this);
|
|
124
|
+
if (!cachedValidation.success) {
|
|
125
|
+
// Subject validation failed during parseValuesAsync, throw the cached error
|
|
126
|
+
throw this.translateZodError(stackStartFn, cachedValidation.error, ...parsedValues);
|
|
127
|
+
}
|
|
128
|
+
// Subject validation passed, nothing more to do
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Fall back to standard validation if no cached result
|
|
116
132
|
const [subject] = parsedValues;
|
|
117
133
|
try {
|
|
118
134
|
await this.impl.parseAsync(subject);
|
|
@@ -124,6 +140,72 @@ export class BupkisAssertionSchemaAsync extends BupkisAssertionAsync {
|
|
|
124
140
|
throw error;
|
|
125
141
|
}
|
|
126
142
|
}
|
|
143
|
+
async parseValuesAsync(args) {
|
|
144
|
+
const { slots } = this;
|
|
145
|
+
const parsedValues = [];
|
|
146
|
+
const mismatch = this.maybeParseValuesArgMismatch(args);
|
|
147
|
+
if (mismatch) {
|
|
148
|
+
return mismatch;
|
|
149
|
+
}
|
|
150
|
+
let exactMatch = true;
|
|
151
|
+
let subjectValidationResult;
|
|
152
|
+
for (let i = 0; i < slots.length; i++) {
|
|
153
|
+
const slot = slots[i];
|
|
154
|
+
const arg = args[i];
|
|
155
|
+
const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
|
|
156
|
+
if (parsedLiteralResult === true) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
else if (parsedLiteralResult !== false) {
|
|
160
|
+
return parsedLiteralResult;
|
|
161
|
+
}
|
|
162
|
+
// For the subject slot (first slot if it's unknown/any), try optimized validation
|
|
163
|
+
if (i === 0 &&
|
|
164
|
+
(slot.def.type === 'unknown' || slot.def.type === 'any') &&
|
|
165
|
+
this.isSimpleSchemaAssertion()) {
|
|
166
|
+
try {
|
|
167
|
+
const result = await this.impl.parseAsync(arg);
|
|
168
|
+
subjectValidationResult = { data: result, success: true };
|
|
169
|
+
parsedValues.push(result); // Use validated data
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
if (isA(error, z.ZodError)) {
|
|
173
|
+
subjectValidationResult = { error, success: false };
|
|
174
|
+
parsedValues.push(arg); // Keep original for error reporting
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
throw error; // Re-throw non-Zod errors
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exactMatch = false; // Subject was validated, so we know the exact type
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
// Standard slot processing for non-optimized cases
|
|
184
|
+
if (slot.def.type === 'unknown' || slot.def.type === 'any') {
|
|
185
|
+
debug('Skipping unknown/any slot validation for arg', arg);
|
|
186
|
+
parsedValues.push(arg);
|
|
187
|
+
exactMatch = false;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const result = await slot.safeParseAsync(arg);
|
|
191
|
+
if (!result.success) {
|
|
192
|
+
return {
|
|
193
|
+
success: false,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
parsedValues.push(result.data);
|
|
197
|
+
}
|
|
198
|
+
const result = {
|
|
199
|
+
exactMatch,
|
|
200
|
+
parsedValues: parsedValues,
|
|
201
|
+
success: true,
|
|
202
|
+
};
|
|
203
|
+
// Add cached validation result if we performed optimization
|
|
204
|
+
if (subjectValidationResult) {
|
|
205
|
+
result.subjectValidationResult = subjectValidationResult;
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
127
209
|
/**
|
|
128
210
|
* Determines if this assertion can be optimized (simple single-subject
|
|
129
211
|
* schema). Only simple assertions like ['to be a string'] with z.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertion-async.js","sourceRoot":"","sources":["../../../src/assertion/assertion-async.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"assertion-async.js","sourceRoot":"","sources":["../../../src/assertion/assertion-async.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,7 +54,7 @@ export declare class BupkisAssertionFunctionSync<Parts extends AssertionParts, I
|
|
|
54
54
|
* with an {@link AssertionError}
|
|
55
55
|
*/
|
|
56
56
|
export declare class BupkisAssertionSchemaSync<Parts extends AssertionParts, Impl extends AssertionImplSchemaSync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertionSync<Parts, Impl, Slots> implements AssertionSchemaSync<Parts, Impl, Slots> {
|
|
57
|
-
execute(parsedValues: ParsedValues<Parts>,
|
|
57
|
+
execute(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): void;
|
|
58
58
|
parseValues<Args extends readonly unknown[]>(args: Args): ParsedResult<Parts>;
|
|
59
59
|
/**
|
|
60
60
|
* Determines if this assertion can be optimized (simple single-subject
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertion-sync.d.ts","sourceRoot":"","sources":["../../../src/assertion/assertion-sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"assertion-sync.d.ts","sourceRoot":"","sources":["../../../src/assertion/assertion-sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EAEjB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIjD;;;;GAIG;AACH,8BAAsB,mBAAmB,CACrC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,iBAAiB,CAAC,KAAK,CAAC,EACrC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAErC,SAAQ,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC1C,YAAW,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE5C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CACd,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,IAAI;IAEP;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EACzC,IAAI,EAAE,IAAI,GACT,YAAY,CAAC,KAAK,CAAC;CAkDvB;AAED,qBAAa,2BAA2B,CACpC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,mBAAmB,CAAC,KAAK,CAAC,EACvC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAErC,SAAQ,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC9C,YAAW,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE3C,OAAO,CACd,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GACjC,IAAI;CA6CR;AAED;;;;;;;;;;;GAWG;AAEH,qBAAa,yBAAyB,CAClC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,uBAAuB,CAAC,KAAK,CAAC,EAC3C,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAErC,SAAQ,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC9C,YAAW,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEzC,OAAO,CACd,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,KAAK,EAAE,OAAO,EAAE,EAChB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,IAAI;IA+BE,WAAW,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EAClD,IAAI,EAAE,IAAI,GACT,YAAY,CAAC,KAAK,CAAC;IA8EtB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;CAehC"}
|