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.
Files changed (187) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +35 -11
  3. package/dist/commonjs/assertion/assertion-async.d.ts +2 -1
  4. package/dist/commonjs/assertion/assertion-async.d.ts.map +1 -1
  5. package/dist/commonjs/assertion/assertion-async.js +84 -2
  6. package/dist/commonjs/assertion/assertion-async.js.map +1 -1
  7. package/dist/commonjs/assertion/assertion-sync.d.ts +1 -1
  8. package/dist/commonjs/assertion/assertion-sync.d.ts.map +1 -1
  9. package/dist/commonjs/assertion/assertion-sync.js +5 -1
  10. package/dist/commonjs/assertion/assertion-sync.js.map +1 -1
  11. package/dist/commonjs/assertion/assertion-types.d.ts +6 -2
  12. package/dist/commonjs/assertion/assertion-types.d.ts.map +1 -1
  13. package/dist/commonjs/assertion/assertion.d.ts +1 -1
  14. package/dist/commonjs/assertion/assertion.d.ts.map +1 -1
  15. package/dist/commonjs/assertion/assertion.js +1 -14
  16. package/dist/commonjs/assertion/assertion.js.map +1 -1
  17. package/dist/commonjs/assertion/impl/async.d.ts +122 -21
  18. package/dist/commonjs/assertion/impl/async.d.ts.map +1 -1
  19. package/dist/commonjs/assertion/impl/async.js +118 -90
  20. package/dist/commonjs/assertion/impl/async.js.map +1 -1
  21. package/dist/commonjs/assertion/impl/callback.d.ts +104 -0
  22. package/dist/commonjs/assertion/impl/callback.d.ts.map +1 -0
  23. package/dist/commonjs/assertion/impl/callback.js +694 -0
  24. package/dist/commonjs/assertion/impl/callback.js.map +1 -0
  25. package/dist/commonjs/assertion/impl/index.d.ts +1 -1
  26. package/dist/commonjs/assertion/impl/index.d.ts.map +1 -1
  27. package/dist/commonjs/assertion/impl/index.js.map +1 -1
  28. package/dist/commonjs/assertion/impl/sync-basic.d.ts.map +1 -1
  29. package/dist/commonjs/assertion/impl/sync-basic.js +1 -1
  30. package/dist/commonjs/assertion/impl/sync-basic.js.map +1 -1
  31. package/dist/commonjs/assertion/impl/sync-collection.d.ts +1 -1
  32. package/dist/commonjs/assertion/impl/sync-collection.js +3 -3
  33. package/dist/commonjs/assertion/impl/sync-collection.js.map +1 -1
  34. package/dist/commonjs/assertion/impl/sync-esoteric.js +1 -1
  35. package/dist/commonjs/assertion/impl/sync-esoteric.js.map +1 -1
  36. package/dist/commonjs/assertion/impl/sync-parametric.d.ts +22 -28
  37. package/dist/commonjs/assertion/impl/sync-parametric.d.ts.map +1 -1
  38. package/dist/commonjs/assertion/impl/sync-parametric.js +35 -50
  39. package/dist/commonjs/assertion/impl/sync-parametric.js.map +1 -1
  40. package/dist/commonjs/assertion/impl/sync.d.ts +68 -30
  41. package/dist/commonjs/assertion/impl/sync.d.ts.map +1 -1
  42. package/dist/commonjs/assertion/impl/sync.js +4 -1
  43. package/dist/commonjs/assertion/impl/sync.js.map +1 -1
  44. package/dist/commonjs/bootstrap.d.ts +147 -52
  45. package/dist/commonjs/bootstrap.d.ts.map +1 -1
  46. package/dist/commonjs/bootstrap.js +2 -3
  47. package/dist/commonjs/bootstrap.js.map +1 -1
  48. package/dist/commonjs/constant.d.ts +1 -1
  49. package/dist/commonjs/constant.d.ts.map +1 -1
  50. package/dist/commonjs/constant.js +8 -1
  51. package/dist/commonjs/constant.js.map +1 -1
  52. package/dist/commonjs/error.d.ts +22 -2
  53. package/dist/commonjs/error.d.ts.map +1 -1
  54. package/dist/commonjs/error.js +44 -4
  55. package/dist/commonjs/error.js.map +1 -1
  56. package/dist/commonjs/expect.d.ts.map +1 -1
  57. package/dist/commonjs/expect.js +1 -1
  58. package/dist/commonjs/expect.js.map +1 -1
  59. package/dist/commonjs/guards.d.ts +96 -5
  60. package/dist/commonjs/guards.d.ts.map +1 -1
  61. package/dist/commonjs/guards.js +104 -25
  62. package/dist/commonjs/guards.js.map +1 -1
  63. package/dist/commonjs/index.d.ts +146 -51
  64. package/dist/commonjs/index.d.ts.map +1 -1
  65. package/dist/commonjs/index.js.map +1 -1
  66. package/dist/commonjs/schema.d.ts +84 -18
  67. package/dist/commonjs/schema.d.ts.map +1 -1
  68. package/dist/commonjs/schema.js +107 -22
  69. package/dist/commonjs/schema.js.map +1 -1
  70. package/dist/commonjs/types.d.ts +171 -9
  71. package/dist/commonjs/types.d.ts.map +1 -1
  72. package/dist/commonjs/use.d.ts.map +1 -1
  73. package/dist/commonjs/use.js +15 -1
  74. package/dist/commonjs/use.js.map +1 -1
  75. package/dist/commonjs/util.d.ts +66 -50
  76. package/dist/commonjs/util.d.ts.map +1 -1
  77. package/dist/commonjs/util.js +169 -156
  78. package/dist/commonjs/util.js.map +1 -1
  79. package/dist/commonjs/value-to-schema.d.ts +122 -0
  80. package/dist/commonjs/value-to-schema.d.ts.map +1 -0
  81. package/dist/commonjs/value-to-schema.js +329 -0
  82. package/dist/commonjs/value-to-schema.js.map +1 -0
  83. package/dist/esm/assertion/assertion-async.d.ts +2 -1
  84. package/dist/esm/assertion/assertion-async.d.ts.map +1 -1
  85. package/dist/esm/assertion/assertion-async.js +85 -3
  86. package/dist/esm/assertion/assertion-async.js.map +1 -1
  87. package/dist/esm/assertion/assertion-sync.d.ts +1 -1
  88. package/dist/esm/assertion/assertion-sync.d.ts.map +1 -1
  89. package/dist/esm/assertion/assertion-sync.js +6 -2
  90. package/dist/esm/assertion/assertion-sync.js.map +1 -1
  91. package/dist/esm/assertion/assertion-types.d.ts +6 -2
  92. package/dist/esm/assertion/assertion-types.d.ts.map +1 -1
  93. package/dist/esm/assertion/assertion.d.ts +1 -1
  94. package/dist/esm/assertion/assertion.d.ts.map +1 -1
  95. package/dist/esm/assertion/assertion.js +1 -14
  96. package/dist/esm/assertion/assertion.js.map +1 -1
  97. package/dist/esm/assertion/impl/async.d.ts +122 -21
  98. package/dist/esm/assertion/impl/async.d.ts.map +1 -1
  99. package/dist/esm/assertion/impl/async.js +118 -90
  100. package/dist/esm/assertion/impl/async.js.map +1 -1
  101. package/dist/esm/assertion/impl/callback.d.ts +104 -0
  102. package/dist/esm/assertion/impl/callback.d.ts.map +1 -0
  103. package/dist/esm/assertion/impl/callback.js +691 -0
  104. package/dist/esm/assertion/impl/callback.js.map +1 -0
  105. package/dist/esm/assertion/impl/index.d.ts +1 -1
  106. package/dist/esm/assertion/impl/index.d.ts.map +1 -1
  107. package/dist/esm/assertion/impl/index.js +1 -1
  108. package/dist/esm/assertion/impl/index.js.map +1 -1
  109. package/dist/esm/assertion/impl/sync-basic.d.ts.map +1 -1
  110. package/dist/esm/assertion/impl/sync-basic.js +2 -2
  111. package/dist/esm/assertion/impl/sync-basic.js.map +1 -1
  112. package/dist/esm/assertion/impl/sync-collection.d.ts +1 -1
  113. package/dist/esm/assertion/impl/sync-collection.js +3 -3
  114. package/dist/esm/assertion/impl/sync-collection.js.map +1 -1
  115. package/dist/esm/assertion/impl/sync-esoteric.js +2 -2
  116. package/dist/esm/assertion/impl/sync-esoteric.js.map +1 -1
  117. package/dist/esm/assertion/impl/sync-parametric.d.ts +22 -28
  118. package/dist/esm/assertion/impl/sync-parametric.d.ts.map +1 -1
  119. package/dist/esm/assertion/impl/sync-parametric.js +36 -51
  120. package/dist/esm/assertion/impl/sync-parametric.js.map +1 -1
  121. package/dist/esm/assertion/impl/sync.d.ts +68 -30
  122. package/dist/esm/assertion/impl/sync.d.ts.map +1 -1
  123. package/dist/esm/assertion/impl/sync.js +3 -1
  124. package/dist/esm/assertion/impl/sync.js.map +1 -1
  125. package/dist/esm/bootstrap.d.ts +147 -52
  126. package/dist/esm/bootstrap.d.ts.map +1 -1
  127. package/dist/esm/bootstrap.js +1 -2
  128. package/dist/esm/bootstrap.js.map +1 -1
  129. package/dist/esm/constant.d.ts +1 -1
  130. package/dist/esm/constant.d.ts.map +1 -1
  131. package/dist/esm/constant.js +7 -0
  132. package/dist/esm/constant.js.map +1 -1
  133. package/dist/esm/error.d.ts +22 -2
  134. package/dist/esm/error.d.ts.map +1 -1
  135. package/dist/esm/error.js +43 -4
  136. package/dist/esm/error.js.map +1 -1
  137. package/dist/esm/expect.d.ts.map +1 -1
  138. package/dist/esm/expect.js +2 -2
  139. package/dist/esm/expect.js.map +1 -1
  140. package/dist/esm/guards.d.ts +96 -5
  141. package/dist/esm/guards.d.ts.map +1 -1
  142. package/dist/esm/guards.js +98 -21
  143. package/dist/esm/guards.js.map +1 -1
  144. package/dist/esm/index.d.ts +146 -51
  145. package/dist/esm/index.d.ts.map +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/schema.d.ts +84 -18
  148. package/dist/esm/schema.d.ts.map +1 -1
  149. package/dist/esm/schema.js +107 -22
  150. package/dist/esm/schema.js.map +1 -1
  151. package/dist/esm/types.d.ts +171 -9
  152. package/dist/esm/types.d.ts.map +1 -1
  153. package/dist/esm/use.d.ts.map +1 -1
  154. package/dist/esm/use.js +15 -1
  155. package/dist/esm/use.js.map +1 -1
  156. package/dist/esm/util.d.ts +66 -50
  157. package/dist/esm/util.d.ts.map +1 -1
  158. package/dist/esm/util.js +153 -154
  159. package/dist/esm/util.js.map +1 -1
  160. package/dist/esm/value-to-schema.d.ts +122 -0
  161. package/dist/esm/value-to-schema.d.ts.map +1 -0
  162. package/dist/esm/value-to-schema.js +325 -0
  163. package/dist/esm/value-to-schema.js.map +1 -0
  164. package/package.json +16 -13
  165. package/src/assertion/assertion-async.ts +113 -3
  166. package/src/assertion/assertion-sync.ts +5 -2
  167. package/src/assertion/assertion-types.ts +14 -4
  168. package/src/assertion/assertion.ts +2 -17
  169. package/src/assertion/impl/async.ts +137 -93
  170. package/src/assertion/impl/callback.ts +882 -0
  171. package/src/assertion/impl/index.ts +1 -1
  172. package/src/assertion/impl/sync-basic.ts +5 -2
  173. package/src/assertion/impl/sync-collection.ts +3 -3
  174. package/src/assertion/impl/sync-esoteric.ts +2 -2
  175. package/src/assertion/impl/sync-parametric.ts +47 -54
  176. package/src/assertion/impl/sync.ts +3 -0
  177. package/src/bootstrap.ts +1 -2
  178. package/src/constant.ts +10 -0
  179. package/src/error.ts +57 -3
  180. package/src/expect.ts +6 -2
  181. package/src/guards.ts +125 -18
  182. package/src/index.ts +3 -0
  183. package/src/schema.ts +121 -23
  184. package/src/types.ts +205 -10
  185. package/src/use.ts +22 -0
  186. package/src/util.ts +168 -223
  187. 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
- ClassSchema,
17
+ ConstructibleSchema,
18
18
  FunctionSchema,
19
19
  WrappedPromiseLikeSchema,
20
20
  } from '../../schema.js';
21
- import { valueToSchema } from '../../util.js';
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 AsyncAssertions = [
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 false;
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 false;
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
- } catch {
70
- rejected = true;
71
- }
72
- return rejected;
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
- } catch {
81
- rejected = true;
82
- }
83
- return rejected;
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
- [FunctionSchema, ['to reject with a', 'to reject with an'], ClassSchema],
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
- ClassSchema,
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 false;
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
- return z
127
- .object({
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
- return z
134
- .object({
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
- return valueToSchema(param, { strict: false }).safeParse(error).success;
141
- } else {
142
- throw new TypeError(`Invalid parameter schema: ${inspect(param)}`);
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 false;
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
- return z
160
- .object({
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
- return z
167
- .object({
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
- return valueToSchema(param, { strict: false }).safeParse(error).success;
174
- } else {
175
- throw new TypeError(`Invalid parameter schema: ${inspect(param)}`);
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
- return z
201
- .object({
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
- return z
208
- .object({
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
- const schema = valueToSchema(param);
215
- const result = schema.safeParse(value);
216
- if (!result.success) {
217
- return {
218
- actual: value,
219
- expected: param,
220
- message: `Expected resolved value to satisfy schema ${inspect(
221
- param,
222
- )}, but it does not`,
223
- };
224
- }
225
- return true;
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: err,
245
- expect: 'function to not throw',
246
- message: `Expected function to not throw, but it threw ${inspect(
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
- return z
254
- .object({
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
- return z
261
- .object({
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
- const schema = valueToSchema(param);
268
- const result = schema.safeParse(value);
269
- if (!result.success) {
270
- return {
271
- actual: value,
272
- expected: param,
273
- message: `Expected resolved value to satisfy schema ${inspect(
274
- param,
275
- )}, but it does not`,
276
- };
277
- }
278
- return true;
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 };