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
|
@@ -14,12 +14,16 @@ import { z } from 'zod/v4';
|
|
|
14
14
|
|
|
15
15
|
import { isA, isNonNullObject, isString } from '../../guards.js';
|
|
16
16
|
import {
|
|
17
|
-
|
|
17
|
+
ConstructibleSchema,
|
|
18
18
|
FunctionSchema,
|
|
19
19
|
WrappedPromiseLikeSchema,
|
|
20
20
|
} from '../../schema.js';
|
|
21
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
valueToSchema,
|
|
23
|
+
valueToSchemaOptionsForSatisfies,
|
|
24
|
+
} from '../../value-to-schema.js';
|
|
22
25
|
import { createAsyncAssertion } from '../create.js';
|
|
26
|
+
import { CallbackAsyncAssertions } from './callback.js';
|
|
23
27
|
|
|
24
28
|
const trapAsyncFnError = async (fn: () => unknown) => {
|
|
25
29
|
try {
|
|
@@ -37,15 +41,18 @@ const trapPromiseError = async (promise: PromiseLike<unknown>) => {
|
|
|
37
41
|
}
|
|
38
42
|
};
|
|
39
43
|
|
|
40
|
-
export const
|
|
44
|
+
export const PromiseAssertions = [
|
|
41
45
|
createAsyncAssertion(
|
|
42
46
|
[FunctionSchema, ['to resolve', 'to fulfill']],
|
|
43
47
|
async (subject) => {
|
|
44
48
|
try {
|
|
45
49
|
await subject();
|
|
46
|
-
return true;
|
|
47
50
|
} catch {
|
|
48
|
-
return
|
|
51
|
+
return {
|
|
52
|
+
actual: 'function rejected',
|
|
53
|
+
expected: 'function to fulfill',
|
|
54
|
+
message: 'Expected function to fulfill, but it rejected instead',
|
|
55
|
+
};
|
|
49
56
|
}
|
|
50
57
|
},
|
|
51
58
|
),
|
|
@@ -54,38 +61,47 @@ export const AsyncAssertions = [
|
|
|
54
61
|
async (subject) => {
|
|
55
62
|
try {
|
|
56
63
|
await subject;
|
|
57
|
-
return true;
|
|
58
64
|
} catch {
|
|
59
|
-
return
|
|
65
|
+
return {
|
|
66
|
+
actual: 'promise rejected',
|
|
67
|
+
expected: 'promise to not reject',
|
|
68
|
+
message: 'Expected promise to fulfill, but it rejected instead',
|
|
69
|
+
};
|
|
60
70
|
}
|
|
61
71
|
},
|
|
62
72
|
),
|
|
63
73
|
|
|
64
74
|
// Non-parameterized "to reject" assertions
|
|
65
75
|
createAsyncAssertion([FunctionSchema, 'to reject'], async (subject) => {
|
|
66
|
-
let rejected = false;
|
|
67
76
|
try {
|
|
68
77
|
await subject();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
return {
|
|
79
|
+
actual: 'function fulfilled',
|
|
80
|
+
expected: 'function to reject',
|
|
81
|
+
message: 'Expected function to reject, but it fulfilled instead',
|
|
82
|
+
};
|
|
83
|
+
} catch {}
|
|
73
84
|
}),
|
|
74
85
|
createAsyncAssertion(
|
|
75
86
|
[WrappedPromiseLikeSchema, 'to reject'],
|
|
76
87
|
async (subject) => {
|
|
77
|
-
let rejected = false;
|
|
78
88
|
try {
|
|
79
89
|
await subject;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
return {
|
|
91
|
+
actual: 'function fulfilled',
|
|
92
|
+
expected: 'function to reject',
|
|
93
|
+
message: 'Expected function to reject, but it fulfilled instead',
|
|
94
|
+
};
|
|
95
|
+
} catch {}
|
|
84
96
|
},
|
|
85
97
|
),
|
|
86
98
|
// Parameterized "to reject" with class constructor
|
|
87
99
|
createAsyncAssertion(
|
|
88
|
-
[
|
|
100
|
+
[
|
|
101
|
+
FunctionSchema,
|
|
102
|
+
['to reject with a', 'to reject with an'],
|
|
103
|
+
ConstructibleSchema,
|
|
104
|
+
],
|
|
89
105
|
async (subject, ctor) => {
|
|
90
106
|
const error = await trapAsyncFnError(subject);
|
|
91
107
|
if (!error) {
|
|
@@ -98,7 +114,7 @@ export const AsyncAssertions = [
|
|
|
98
114
|
[
|
|
99
115
|
WrappedPromiseLikeSchema,
|
|
100
116
|
['to reject with a', 'to reject with an'],
|
|
101
|
-
|
|
117
|
+
ConstructibleSchema,
|
|
102
118
|
],
|
|
103
119
|
async (subject, ctor) => {
|
|
104
120
|
const error = await trapPromiseError(subject);
|
|
@@ -113,66 +129,91 @@ export const AsyncAssertions = [
|
|
|
113
129
|
createAsyncAssertion(
|
|
114
130
|
[
|
|
115
131
|
FunctionSchema,
|
|
116
|
-
['to reject with'],
|
|
132
|
+
['to reject with error satisfying'],
|
|
117
133
|
z.union([z.string(), z.instanceof(RegExp), z.looseObject({})]),
|
|
118
134
|
],
|
|
119
135
|
async (subject, param) => {
|
|
120
136
|
const error = await trapAsyncFnError(subject);
|
|
121
137
|
if (!error) {
|
|
122
|
-
return
|
|
138
|
+
return {
|
|
139
|
+
actual: 'function fulfilled',
|
|
140
|
+
expect: 'function to reject',
|
|
141
|
+
message: 'Expected function to reject, but it fulfilled instead',
|
|
142
|
+
};
|
|
123
143
|
}
|
|
124
144
|
|
|
145
|
+
let schema: undefined | z.ZodType;
|
|
146
|
+
// TODO: can valueToSchema handle the first two conditional branches?
|
|
125
147
|
if (isString(param)) {
|
|
126
|
-
|
|
127
|
-
.
|
|
148
|
+
schema = z
|
|
149
|
+
.looseObject({
|
|
128
150
|
message: z.coerce.string().pipe(z.literal(param)),
|
|
129
151
|
})
|
|
130
|
-
.or(z.coerce.string().pipe(z.literal(param)))
|
|
131
|
-
.safeParse(error).success;
|
|
152
|
+
.or(z.coerce.string().pipe(z.literal(param)));
|
|
132
153
|
} else if (isA(param, RegExp)) {
|
|
133
|
-
|
|
134
|
-
.
|
|
154
|
+
schema = z
|
|
155
|
+
.looseObject({
|
|
135
156
|
message: z.coerce.string().regex(param),
|
|
136
157
|
})
|
|
137
|
-
.or(z.coerce.string().regex(param))
|
|
138
|
-
.safeParse(error).success;
|
|
158
|
+
.or(z.coerce.string().regex(param));
|
|
139
159
|
} else if (isNonNullObject(param)) {
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
|
|
160
|
+
schema = valueToSchema(param, valueToSchemaOptionsForSatisfies);
|
|
161
|
+
}
|
|
162
|
+
/* c8 ignore next 5 */
|
|
163
|
+
if (!schema) {
|
|
164
|
+
throw new TypeError(
|
|
165
|
+
`Invalid parameter schema: ${inspect(param, { depth: 2 })}`,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const result = schema.safeParse(error);
|
|
170
|
+
if (!result.success) {
|
|
171
|
+
return result.error;
|
|
143
172
|
}
|
|
144
173
|
},
|
|
145
174
|
),
|
|
146
175
|
createAsyncAssertion(
|
|
147
176
|
[
|
|
148
177
|
WrappedPromiseLikeSchema,
|
|
149
|
-
['to reject with'],
|
|
178
|
+
['to reject with error satisfying'],
|
|
150
179
|
z.union([z.string(), z.instanceof(RegExp), z.looseObject({})]),
|
|
151
180
|
],
|
|
152
181
|
async (subject, param) => {
|
|
153
182
|
const error = await trapPromiseError(subject);
|
|
154
183
|
if (!error) {
|
|
155
|
-
return
|
|
184
|
+
return {
|
|
185
|
+
actual: 'promise fulfilled',
|
|
186
|
+
expect: 'promise to reject',
|
|
187
|
+
message: 'Expected promise to reject, but it fulfilled instead',
|
|
188
|
+
};
|
|
156
189
|
}
|
|
157
|
-
|
|
190
|
+
let schema: undefined | z.ZodType;
|
|
191
|
+
// TODO: can valueToSchema handle the first two conditional branches?
|
|
158
192
|
if (isString(param)) {
|
|
159
|
-
|
|
160
|
-
.
|
|
193
|
+
schema = z
|
|
194
|
+
.looseObject({
|
|
161
195
|
message: z.coerce.string().pipe(z.literal(param)),
|
|
162
196
|
})
|
|
163
|
-
.or(z.coerce.string().pipe(z.literal(param)))
|
|
164
|
-
.safeParse(error).success;
|
|
197
|
+
.or(z.coerce.string().pipe(z.literal(param)));
|
|
165
198
|
} else if (isA(param, RegExp)) {
|
|
166
|
-
|
|
167
|
-
.
|
|
199
|
+
schema = z
|
|
200
|
+
.looseObject({
|
|
168
201
|
message: z.coerce.string().regex(param),
|
|
169
202
|
})
|
|
170
|
-
.or(z.coerce.string().regex(param))
|
|
171
|
-
.safeParse(error).success;
|
|
203
|
+
.or(z.coerce.string().regex(param));
|
|
172
204
|
} else if (isNonNullObject(param)) {
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
205
|
+
schema = valueToSchema(param, valueToSchemaOptionsForSatisfies);
|
|
206
|
+
}
|
|
207
|
+
/* c8 ignore next 5 */
|
|
208
|
+
if (!schema) {
|
|
209
|
+
throw new TypeError(
|
|
210
|
+
`Invalid parameter schema: ${inspect(param, { depth: 2 })}`,
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const result = schema.safeParse(error);
|
|
215
|
+
if (!result.success) {
|
|
216
|
+
return result.error;
|
|
176
217
|
}
|
|
177
218
|
},
|
|
178
219
|
),
|
|
@@ -196,35 +237,33 @@ export const AsyncAssertions = [
|
|
|
196
237
|
)}`,
|
|
197
238
|
};
|
|
198
239
|
}
|
|
240
|
+
let schema: undefined | z.ZodType;
|
|
241
|
+
// TODO: can valueToSchema handle the first two conditional branches?
|
|
199
242
|
if (isString(param)) {
|
|
200
|
-
|
|
201
|
-
.
|
|
243
|
+
schema = z
|
|
244
|
+
.looseObject({
|
|
202
245
|
message: z.coerce.string().pipe(z.literal(param)),
|
|
203
246
|
})
|
|
204
|
-
.or(z.coerce.string().pipe(z.literal(param)))
|
|
205
|
-
.safeParse(value).success;
|
|
247
|
+
.or(z.coerce.string().pipe(z.literal(param)));
|
|
206
248
|
} else if (isA(param, RegExp)) {
|
|
207
|
-
|
|
208
|
-
.
|
|
249
|
+
schema = z
|
|
250
|
+
.looseObject({
|
|
209
251
|
message: z.coerce.string().regex(param),
|
|
210
252
|
})
|
|
211
|
-
.or(z.coerce.string().regex(param))
|
|
212
|
-
.safeParse(value).success;
|
|
253
|
+
.or(z.coerce.string().regex(param));
|
|
213
254
|
} else if (isNonNullObject(param)) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
return
|
|
226
|
-
} else {
|
|
227
|
-
throw new TypeError(`Invalid parameter schema: ${inspect(param)}`);
|
|
255
|
+
schema = valueToSchema(param, valueToSchemaOptionsForSatisfies);
|
|
256
|
+
}
|
|
257
|
+
/* c8 ignore next 5 */
|
|
258
|
+
if (!schema) {
|
|
259
|
+
throw new TypeError(
|
|
260
|
+
`Invalid parameter schema: ${inspect(param, { depth: 2 })}`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const result = schema.safeParse(value);
|
|
265
|
+
if (!result.success) {
|
|
266
|
+
return result.error;
|
|
228
267
|
}
|
|
229
268
|
},
|
|
230
269
|
),
|
|
@@ -241,44 +280,49 @@ export const AsyncAssertions = [
|
|
|
241
280
|
value = await subject();
|
|
242
281
|
} catch (err) {
|
|
243
282
|
return {
|
|
244
|
-
actual:
|
|
245
|
-
expect: 'function to
|
|
246
|
-
message: `Expected function to
|
|
283
|
+
actual: 'function rejected',
|
|
284
|
+
expect: 'function to fulfill',
|
|
285
|
+
message: `Expected function to fulfill, but it rejected with ${inspect(
|
|
247
286
|
err,
|
|
248
287
|
)}`,
|
|
249
288
|
};
|
|
250
289
|
}
|
|
251
290
|
|
|
291
|
+
let schema: undefined | z.ZodType;
|
|
292
|
+
// TODO: can valueToSchema handle the first two conditional branches?
|
|
252
293
|
if (isString(param)) {
|
|
253
|
-
|
|
254
|
-
.
|
|
294
|
+
schema = z
|
|
295
|
+
.looseObject({
|
|
255
296
|
message: z.coerce.string().pipe(z.literal(param)),
|
|
256
297
|
})
|
|
257
|
-
.or(z.coerce.string().pipe(z.literal(param)))
|
|
258
|
-
.safeParse(value).success;
|
|
298
|
+
.or(z.coerce.string().pipe(z.literal(param)));
|
|
259
299
|
} else if (isA(param, RegExp)) {
|
|
260
|
-
|
|
261
|
-
.
|
|
300
|
+
schema = z
|
|
301
|
+
.looseObject({
|
|
262
302
|
message: z.coerce.string().regex(param),
|
|
263
303
|
})
|
|
264
|
-
.or(z.coerce.string().regex(param))
|
|
265
|
-
.safeParse(value).success;
|
|
304
|
+
.or(z.coerce.string().regex(param));
|
|
266
305
|
} else if (isNonNullObject(param)) {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
return
|
|
279
|
-
} else {
|
|
280
|
-
throw new TypeError(`Invalid parameter schema: ${inspect(param)}`);
|
|
306
|
+
schema = valueToSchema(param, valueToSchemaOptionsForSatisfies);
|
|
307
|
+
}
|
|
308
|
+
/* c8 ignore next 5 */
|
|
309
|
+
if (!schema) {
|
|
310
|
+
throw new TypeError(
|
|
311
|
+
`Invalid parameter schema: ${inspect(param, { depth: 2 })}`,
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const result = schema.safeParse(value);
|
|
316
|
+
if (!result.success) {
|
|
317
|
+
return result.error;
|
|
281
318
|
}
|
|
282
319
|
},
|
|
283
320
|
),
|
|
284
321
|
] as const;
|
|
322
|
+
|
|
323
|
+
export const AsyncAssertions = [
|
|
324
|
+
...PromiseAssertions,
|
|
325
|
+
...CallbackAsyncAssertions,
|
|
326
|
+
] as const;
|
|
327
|
+
|
|
328
|
+
export { CallbackAsyncAssertions };
|