bupkis 0.18.2 → 1.0.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 (390) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/assertion/assertion-async.cjs +268 -0
  4. package/dist/assertion/assertion-async.cjs.map +1 -0
  5. package/dist/assertion/assertion-async.d.cts +40 -0
  6. package/dist/assertion/assertion-async.d.cts.map +1 -0
  7. package/dist/assertion/assertion-async.d.ts +40 -0
  8. package/dist/assertion/assertion-async.d.ts.map +1 -0
  9. package/dist/assertion/assertion-async.js +259 -0
  10. package/dist/assertion/assertion-async.js.map +1 -0
  11. package/dist/assertion/assertion-standard-schema-async.cjs +132 -0
  12. package/dist/assertion/assertion-standard-schema-async.cjs.map +1 -0
  13. package/dist/assertion/assertion-standard-schema-async.d.cts +52 -0
  14. package/dist/assertion/assertion-standard-schema-async.d.cts.map +1 -0
  15. package/dist/assertion/assertion-standard-schema-async.d.ts +52 -0
  16. package/dist/assertion/assertion-standard-schema-async.d.ts.map +1 -0
  17. package/dist/assertion/assertion-standard-schema-async.js +128 -0
  18. package/dist/assertion/assertion-standard-schema-async.js.map +1 -0
  19. package/dist/assertion/assertion-standard-schema-sync.cjs +141 -0
  20. package/dist/assertion/assertion-standard-schema-sync.cjs.map +1 -0
  21. package/dist/assertion/assertion-standard-schema-sync.d.cts +52 -0
  22. package/dist/assertion/assertion-standard-schema-sync.d.cts.map +1 -0
  23. package/dist/assertion/assertion-standard-schema-sync.d.ts +52 -0
  24. package/dist/assertion/assertion-standard-schema-sync.d.ts.map +1 -0
  25. package/dist/assertion/assertion-standard-schema-sync.js +137 -0
  26. package/dist/assertion/assertion-standard-schema-sync.js.map +1 -0
  27. package/dist/assertion/assertion-sync.cjs +281 -0
  28. package/dist/assertion/assertion-sync.cjs.map +1 -0
  29. package/dist/assertion/assertion-sync.d.cts +60 -0
  30. package/dist/assertion/assertion-sync.d.cts.map +1 -0
  31. package/dist/assertion/assertion-sync.d.ts +60 -0
  32. package/dist/assertion/assertion-sync.d.ts.map +1 -0
  33. package/dist/assertion/assertion-sync.js +275 -0
  34. package/dist/assertion/assertion-sync.js.map +1 -0
  35. package/dist/assertion/assertion-types.cjs +20 -0
  36. package/dist/assertion/assertion-types.cjs.map +1 -0
  37. package/dist/assertion/assertion-types.d.cts +1086 -0
  38. package/dist/assertion/assertion-types.d.cts.map +1 -0
  39. package/dist/assertion/assertion-types.d.ts +1086 -0
  40. package/dist/assertion/assertion-types.d.ts.map +1 -0
  41. package/dist/assertion/assertion-types.js +19 -0
  42. package/dist/assertion/assertion-types.js.map +1 -0
  43. package/dist/assertion/assertion.cjs +382 -0
  44. package/dist/assertion/assertion.cjs.map +1 -0
  45. package/dist/assertion/assertion.d.cts +109 -0
  46. package/dist/assertion/assertion.d.cts.map +1 -0
  47. package/dist/assertion/assertion.d.ts +109 -0
  48. package/dist/assertion/assertion.d.ts.map +1 -0
  49. package/dist/assertion/assertion.js +375 -0
  50. package/dist/assertion/assertion.js.map +1 -0
  51. package/dist/assertion/create.cjs +148 -0
  52. package/dist/assertion/create.cjs.map +1 -0
  53. package/dist/assertion/create.d.cts +85 -0
  54. package/dist/assertion/create.d.cts.map +1 -0
  55. package/dist/assertion/create.d.ts +85 -0
  56. package/dist/assertion/create.d.ts.map +1 -0
  57. package/dist/assertion/create.js +143 -0
  58. package/dist/assertion/create.js.map +1 -0
  59. package/dist/assertion/format-assertion-failure.cjs +63 -0
  60. package/dist/assertion/format-assertion-failure.cjs.map +1 -0
  61. package/dist/assertion/format-assertion-failure.d.cts +21 -0
  62. package/dist/assertion/format-assertion-failure.d.cts.map +1 -0
  63. package/dist/assertion/format-assertion-failure.d.ts +21 -0
  64. package/dist/assertion/format-assertion-failure.d.ts.map +1 -0
  65. package/dist/assertion/format-assertion-failure.js +59 -0
  66. package/dist/assertion/format-assertion-failure.js.map +1 -0
  67. package/dist/assertion/impl/assertion-util.cjs +68 -0
  68. package/dist/assertion/impl/assertion-util.cjs.map +1 -0
  69. package/dist/assertion/impl/assertion-util.d.cts +36 -0
  70. package/dist/assertion/impl/assertion-util.d.cts.map +1 -0
  71. package/dist/assertion/impl/assertion-util.d.ts +36 -0
  72. package/dist/assertion/impl/assertion-util.d.ts.map +1 -0
  73. package/dist/assertion/impl/assertion-util.js +62 -0
  74. package/dist/assertion/impl/assertion-util.js.map +1 -0
  75. package/dist/assertion/impl/async-iterable.cjs +627 -0
  76. package/dist/assertion/impl/async-iterable.cjs.map +1 -0
  77. package/dist/assertion/impl/async-iterable.d.cts +406 -0
  78. package/dist/assertion/impl/async-iterable.d.cts.map +1 -0
  79. package/dist/assertion/impl/async-iterable.d.ts +406 -0
  80. package/dist/assertion/impl/async-iterable.d.ts.map +1 -0
  81. package/dist/assertion/impl/async-iterable.js +624 -0
  82. package/dist/assertion/impl/async-iterable.js.map +1 -0
  83. package/dist/assertion/impl/async-parametric.cjs +412 -0
  84. package/dist/assertion/impl/async-parametric.cjs.map +1 -0
  85. package/dist/assertion/impl/async-parametric.d.cts +278 -0
  86. package/dist/assertion/impl/async-parametric.d.cts.map +1 -0
  87. package/dist/assertion/impl/async-parametric.d.ts +278 -0
  88. package/dist/assertion/impl/async-parametric.d.ts.map +1 -0
  89. package/dist/assertion/impl/async-parametric.js +409 -0
  90. package/dist/assertion/impl/async-parametric.js.map +1 -0
  91. package/dist/assertion/impl/async.cjs +56 -0
  92. package/dist/assertion/impl/async.cjs.map +1 -0
  93. package/dist/assertion/impl/async.d.cts +179 -0
  94. package/dist/assertion/impl/async.d.cts.map +1 -0
  95. package/dist/assertion/impl/async.d.ts +179 -0
  96. package/dist/assertion/impl/async.d.ts.map +1 -0
  97. package/dist/assertion/impl/async.js +39 -0
  98. package/dist/assertion/impl/async.js.map +1 -0
  99. package/dist/assertion/impl/index.cjs +37 -0
  100. package/dist/assertion/impl/index.cjs.map +1 -0
  101. package/dist/assertion/impl/index.d.cts +21 -0
  102. package/dist/assertion/impl/index.d.cts.map +1 -0
  103. package/dist/assertion/impl/index.d.ts +21 -0
  104. package/dist/assertion/impl/index.d.ts.map +1 -0
  105. package/dist/assertion/impl/index.js +21 -0
  106. package/dist/assertion/impl/index.js.map +1 -0
  107. package/dist/assertion/impl/iteration-util.cjs +297 -0
  108. package/dist/assertion/impl/iteration-util.cjs.map +1 -0
  109. package/dist/assertion/impl/iteration-util.d.cts +12 -0
  110. package/dist/assertion/impl/iteration-util.d.cts.map +1 -0
  111. package/dist/assertion/impl/iteration-util.d.ts +12 -0
  112. package/dist/assertion/impl/iteration-util.d.ts.map +1 -0
  113. package/dist/assertion/impl/iteration-util.js +282 -0
  114. package/dist/assertion/impl/iteration-util.js.map +1 -0
  115. package/dist/assertion/impl/snapshot.cjs +276 -0
  116. package/dist/assertion/impl/snapshot.cjs.map +1 -0
  117. package/dist/assertion/impl/snapshot.d.cts +278 -0
  118. package/dist/assertion/impl/snapshot.d.cts.map +1 -0
  119. package/dist/assertion/impl/snapshot.d.ts +278 -0
  120. package/dist/assertion/impl/snapshot.d.ts.map +1 -0
  121. package/dist/assertion/impl/snapshot.js +273 -0
  122. package/dist/assertion/impl/snapshot.js.map +1 -0
  123. package/dist/assertion/impl/sync-basic.cjs +553 -0
  124. package/dist/assertion/impl/sync-basic.cjs.map +1 -0
  125. package/dist/assertion/impl/sync-basic.d.cts +528 -0
  126. package/dist/assertion/impl/sync-basic.d.cts.map +1 -0
  127. package/dist/assertion/impl/sync-basic.d.ts +528 -0
  128. package/dist/assertion/impl/sync-basic.d.ts.map +1 -0
  129. package/dist/assertion/impl/sync-basic.js +550 -0
  130. package/dist/assertion/impl/sync-basic.js.map +1 -0
  131. package/dist/assertion/impl/sync-collection.cjs +1424 -0
  132. package/dist/assertion/impl/sync-collection.cjs.map +1 -0
  133. package/dist/assertion/impl/sync-collection.d.cts +922 -0
  134. package/dist/assertion/impl/sync-collection.d.cts.map +1 -0
  135. package/dist/assertion/impl/sync-collection.d.ts +922 -0
  136. package/dist/assertion/impl/sync-collection.d.ts.map +1 -0
  137. package/dist/assertion/impl/sync-collection.js +1418 -0
  138. package/dist/assertion/impl/sync-collection.js.map +1 -0
  139. package/dist/assertion/impl/sync-date.cjs +341 -0
  140. package/dist/assertion/impl/sync-date.cjs.map +1 -0
  141. package/dist/assertion/impl/sync-date.d.cts +209 -0
  142. package/dist/assertion/impl/sync-date.d.cts.map +1 -0
  143. package/dist/assertion/impl/sync-date.d.ts +209 -0
  144. package/dist/assertion/impl/sync-date.d.ts.map +1 -0
  145. package/dist/assertion/impl/sync-date.js +338 -0
  146. package/dist/assertion/impl/sync-date.js.map +1 -0
  147. package/dist/assertion/impl/sync-esoteric.cjs +214 -0
  148. package/dist/assertion/impl/sync-esoteric.cjs.map +1 -0
  149. package/dist/assertion/impl/sync-esoteric.d.cts +191 -0
  150. package/dist/assertion/impl/sync-esoteric.d.cts.map +1 -0
  151. package/dist/assertion/impl/sync-esoteric.d.ts +191 -0
  152. package/dist/assertion/impl/sync-esoteric.d.ts.map +1 -0
  153. package/dist/assertion/impl/sync-esoteric.js +211 -0
  154. package/dist/assertion/impl/sync-esoteric.js.map +1 -0
  155. package/dist/assertion/impl/sync-iterable.cjs +512 -0
  156. package/dist/assertion/impl/sync-iterable.cjs.map +1 -0
  157. package/dist/assertion/impl/sync-iterable.d.cts +334 -0
  158. package/dist/assertion/impl/sync-iterable.d.cts.map +1 -0
  159. package/dist/assertion/impl/sync-iterable.d.ts +334 -0
  160. package/dist/assertion/impl/sync-iterable.d.ts.map +1 -0
  161. package/dist/assertion/impl/sync-iterable.js +509 -0
  162. package/dist/assertion/impl/sync-iterable.js.map +1 -0
  163. package/dist/assertion/impl/sync-parametric.cjs +805 -0
  164. package/dist/assertion/impl/sync-parametric.cjs.map +1 -0
  165. package/dist/assertion/impl/sync-parametric.d.cts +560 -0
  166. package/dist/assertion/impl/sync-parametric.d.cts.map +1 -0
  167. package/dist/assertion/impl/sync-parametric.d.ts +560 -0
  168. package/dist/assertion/impl/sync-parametric.d.ts.map +1 -0
  169. package/dist/assertion/impl/sync-parametric.js +802 -0
  170. package/dist/assertion/impl/sync-parametric.js.map +1 -0
  171. package/dist/assertion/impl/sync.cjs +229 -0
  172. package/dist/assertion/impl/sync.cjs.map +1 -0
  173. package/dist/assertion/impl/sync.d.cts +536 -0
  174. package/dist/assertion/impl/sync.d.cts.map +1 -0
  175. package/dist/assertion/impl/sync.d.ts +536 -0
  176. package/dist/assertion/impl/sync.d.ts.map +1 -0
  177. package/dist/assertion/impl/sync.js +212 -0
  178. package/dist/assertion/impl/sync.js.map +1 -0
  179. package/dist/assertion/index.cjs +38 -0
  180. package/dist/assertion/index.cjs.map +1 -0
  181. package/dist/assertion/index.d.cts +18 -0
  182. package/dist/assertion/index.d.cts.map +1 -0
  183. package/dist/assertion/index.d.ts +18 -0
  184. package/dist/assertion/index.d.ts.map +1 -0
  185. package/dist/assertion/index.js +17 -0
  186. package/dist/assertion/index.js.map +1 -0
  187. package/dist/assertion/slotify.cjs +165 -0
  188. package/dist/assertion/slotify.cjs.map +1 -0
  189. package/dist/assertion/slotify.d.cts +11 -0
  190. package/dist/assertion/slotify.d.cts.map +1 -0
  191. package/dist/assertion/slotify.d.ts +11 -0
  192. package/dist/assertion/slotify.d.ts.map +1 -0
  193. package/dist/assertion/slotify.js +161 -0
  194. package/dist/assertion/slotify.js.map +1 -0
  195. package/dist/bootstrap.cjs +43 -0
  196. package/dist/bootstrap.cjs.map +1 -0
  197. package/dist/bootstrap.d.cts +27 -0
  198. package/dist/bootstrap.d.cts.map +1 -0
  199. package/dist/bootstrap.d.ts +27 -0
  200. package/dist/bootstrap.d.ts.map +1 -0
  201. package/dist/bootstrap.js +40 -0
  202. package/dist/bootstrap.js.map +1 -0
  203. package/dist/constant.cjs +82 -0
  204. package/dist/constant.cjs.map +1 -0
  205. package/dist/constant.d.cts +69 -0
  206. package/dist/constant.d.cts.map +1 -0
  207. package/dist/constant.d.ts +69 -0
  208. package/dist/constant.d.ts.map +1 -0
  209. package/dist/constant.js +79 -0
  210. package/dist/constant.js.map +1 -0
  211. package/dist/diff.cjs +340 -0
  212. package/dist/diff.cjs.map +1 -0
  213. package/dist/diff.d.cts +51 -0
  214. package/dist/diff.d.cts.map +1 -0
  215. package/dist/diff.d.ts +51 -0
  216. package/dist/diff.d.ts.map +1 -0
  217. package/dist/diff.js +334 -0
  218. package/dist/diff.js.map +1 -0
  219. package/dist/error.cjs +194 -0
  220. package/dist/error.cjs.map +1 -0
  221. package/dist/error.d.cts +212 -0
  222. package/dist/error.d.cts.map +1 -0
  223. package/dist/error.d.ts +212 -0
  224. package/dist/error.d.ts.map +1 -0
  225. package/dist/error.js +181 -0
  226. package/dist/error.js.map +1 -0
  227. package/dist/expect.cjs +587 -0
  228. package/dist/expect.cjs.map +1 -0
  229. package/dist/expect.d.cts +138 -0
  230. package/dist/expect.d.cts.map +1 -0
  231. package/dist/expect.d.ts +138 -0
  232. package/dist/expect.d.ts.map +1 -0
  233. package/dist/expect.js +582 -0
  234. package/dist/expect.js.map +1 -0
  235. package/dist/guards.cjs +291 -0
  236. package/dist/guards.cjs.map +1 -0
  237. package/dist/guards.d.cts +225 -0
  238. package/dist/guards.d.cts.map +1 -0
  239. package/dist/guards.d.ts +225 -0
  240. package/dist/guards.d.ts.map +1 -0
  241. package/dist/guards.js +273 -0
  242. package/dist/guards.js.map +1 -0
  243. package/dist/index.cjs +111 -0
  244. package/dist/index.cjs.map +1 -0
  245. package/dist/index.d.cts +460 -0
  246. package/dist/index.d.cts.map +1 -0
  247. package/dist/index.d.ts +460 -0
  248. package/dist/index.d.ts.map +1 -0
  249. package/dist/index.js +71 -0
  250. package/dist/index.js.map +1 -0
  251. package/dist/internal-schema.cjs +234 -0
  252. package/dist/internal-schema.cjs.map +1 -0
  253. package/dist/internal-schema.d.cts +8 -0
  254. package/dist/internal-schema.d.cts.map +1 -0
  255. package/dist/internal-schema.d.ts +8 -0
  256. package/dist/internal-schema.d.ts.map +1 -0
  257. package/dist/internal-schema.js +229 -0
  258. package/dist/internal-schema.js.map +1 -0
  259. package/dist/metadata.cjs +57 -0
  260. package/dist/metadata.cjs.map +1 -0
  261. package/dist/metadata.d.cts +27 -0
  262. package/dist/metadata.d.cts.map +1 -0
  263. package/dist/metadata.d.ts +27 -0
  264. package/dist/metadata.d.ts.map +1 -0
  265. package/dist/metadata.js +54 -0
  266. package/dist/metadata.js.map +1 -0
  267. package/dist/schema.cjs +1522 -0
  268. package/dist/schema.cjs.map +1 -0
  269. package/dist/schema.d.cts +1196 -0
  270. package/dist/schema.d.cts.map +1 -0
  271. package/dist/schema.d.ts +1196 -0
  272. package/dist/schema.d.ts.map +1 -0
  273. package/dist/schema.js +1516 -0
  274. package/dist/schema.js.map +1 -0
  275. package/dist/snapshot/adapter.cjs +29 -0
  276. package/dist/snapshot/adapter.cjs.map +1 -0
  277. package/dist/snapshot/adapter.d.cts +258 -0
  278. package/dist/snapshot/adapter.d.cts.map +1 -0
  279. package/dist/snapshot/adapter.d.ts +258 -0
  280. package/dist/snapshot/adapter.d.ts.map +1 -0
  281. package/dist/snapshot/adapter.js +25 -0
  282. package/dist/snapshot/adapter.js.map +1 -0
  283. package/dist/snapshot/adapters/fallback.cjs +452 -0
  284. package/dist/snapshot/adapters/fallback.cjs.map +1 -0
  285. package/dist/snapshot/adapters/fallback.d.cts +185 -0
  286. package/dist/snapshot/adapters/fallback.d.cts.map +1 -0
  287. package/dist/snapshot/adapters/fallback.d.ts +185 -0
  288. package/dist/snapshot/adapters/fallback.d.ts.map +1 -0
  289. package/dist/snapshot/adapters/fallback.js +445 -0
  290. package/dist/snapshot/adapters/fallback.js.map +1 -0
  291. package/dist/snapshot/adapters/node-test.cjs +297 -0
  292. package/dist/snapshot/adapters/node-test.cjs.map +1 -0
  293. package/dist/snapshot/adapters/node-test.d.cts +131 -0
  294. package/dist/snapshot/adapters/node-test.d.cts.map +1 -0
  295. package/dist/snapshot/adapters/node-test.d.ts +131 -0
  296. package/dist/snapshot/adapters/node-test.d.ts.map +1 -0
  297. package/dist/snapshot/adapters/node-test.js +293 -0
  298. package/dist/snapshot/adapters/node-test.js.map +1 -0
  299. package/dist/snapshot/index.cjs +61 -0
  300. package/dist/snapshot/index.cjs.map +1 -0
  301. package/dist/snapshot/index.d.cts +40 -0
  302. package/dist/snapshot/index.d.cts.map +1 -0
  303. package/dist/snapshot/index.d.ts +40 -0
  304. package/dist/snapshot/index.d.ts.map +1 -0
  305. package/dist/snapshot/index.js +44 -0
  306. package/dist/snapshot/index.js.map +1 -0
  307. package/dist/snapshot/node-version.cjs +49 -0
  308. package/dist/snapshot/node-version.cjs.map +1 -0
  309. package/dist/snapshot/node-version.d.cts +34 -0
  310. package/dist/snapshot/node-version.d.cts.map +1 -0
  311. package/dist/snapshot/node-version.d.ts +34 -0
  312. package/dist/snapshot/node-version.d.ts.map +1 -0
  313. package/dist/snapshot/node-version.js +44 -0
  314. package/dist/snapshot/node-version.js.map +1 -0
  315. package/dist/snapshot/select-adapter.cjs +170 -0
  316. package/dist/snapshot/select-adapter.cjs.map +1 -0
  317. package/dist/snapshot/select-adapter.d.cts +128 -0
  318. package/dist/snapshot/select-adapter.d.cts.map +1 -0
  319. package/dist/snapshot/select-adapter.d.ts +128 -0
  320. package/dist/snapshot/select-adapter.d.ts.map +1 -0
  321. package/dist/snapshot/select-adapter.js +164 -0
  322. package/dist/snapshot/select-adapter.js.map +1 -0
  323. package/dist/snapshot/serializer.cjs +245 -0
  324. package/dist/snapshot/serializer.cjs.map +1 -0
  325. package/dist/snapshot/serializer.d.cts +126 -0
  326. package/dist/snapshot/serializer.d.cts.map +1 -0
  327. package/dist/snapshot/serializer.d.ts +126 -0
  328. package/dist/snapshot/serializer.d.ts.map +1 -0
  329. package/dist/snapshot/serializer.js +237 -0
  330. package/dist/snapshot/serializer.js.map +1 -0
  331. package/dist/standard-schema.cjs +13 -0
  332. package/dist/standard-schema.cjs.map +1 -0
  333. package/dist/standard-schema.d.cts +192 -0
  334. package/dist/standard-schema.d.cts.map +1 -0
  335. package/dist/standard-schema.d.ts +192 -0
  336. package/dist/standard-schema.d.ts.map +1 -0
  337. package/dist/standard-schema.js +12 -0
  338. package/dist/standard-schema.js.map +1 -0
  339. package/dist/types.cjs +22 -0
  340. package/dist/types.cjs.map +1 -0
  341. package/dist/types.d.cts +756 -0
  342. package/dist/types.d.cts.map +1 -0
  343. package/dist/types.d.ts +756 -0
  344. package/dist/types.d.ts.map +1 -0
  345. package/dist/types.js +21 -0
  346. package/dist/types.js.map +1 -0
  347. package/dist/use.cjs +240 -0
  348. package/dist/use.cjs.map +1 -0
  349. package/dist/use.d.cts +8 -0
  350. package/dist/use.d.cts.map +1 -0
  351. package/dist/use.d.ts +8 -0
  352. package/dist/use.d.ts.map +1 -0
  353. package/dist/use.js +236 -0
  354. package/dist/use.js.map +1 -0
  355. package/dist/util.cjs +255 -0
  356. package/dist/util.cjs.map +1 -0
  357. package/dist/util.d.cts +141 -0
  358. package/dist/util.d.cts.map +1 -0
  359. package/dist/util.d.ts +141 -0
  360. package/dist/util.d.ts.map +1 -0
  361. package/dist/util.js +234 -0
  362. package/dist/util.js.map +1 -0
  363. package/dist/value-to-schema.cjs +537 -0
  364. package/dist/value-to-schema.cjs.map +1 -0
  365. package/dist/value-to-schema.d.cts +144 -0
  366. package/dist/value-to-schema.d.cts.map +1 -0
  367. package/dist/value-to-schema.d.ts +144 -0
  368. package/dist/value-to-schema.d.ts.map +1 -0
  369. package/dist/value-to-schema.js +533 -0
  370. package/dist/value-to-schema.js.map +1 -0
  371. package/package.json +24 -21
  372. package/src/assertion/assertion-sync.ts +1 -1
  373. package/src/assertion/assertion-types.ts +4 -8
  374. package/src/assertion/assertion.ts +12 -7
  375. package/src/assertion/format-assertion-failure.ts +2 -0
  376. package/src/assertion/impl/assertion-util.ts +1 -2
  377. package/src/assertion/impl/iteration-util.ts +3 -5
  378. package/src/assertion/impl/sync-collection.ts +633 -7
  379. package/src/assertion/impl/sync.ts +27 -0
  380. package/src/error.ts +13 -22
  381. package/src/expect.ts +1 -1
  382. package/src/guards.ts +8 -14
  383. package/src/internal-schema.ts +4 -8
  384. package/src/metadata.ts +1 -2
  385. package/src/snapshot/adapter.ts +2 -3
  386. package/src/snapshot/adapters/fallback.ts +2 -3
  387. package/src/snapshot/adapters/node-test.ts +14 -20
  388. package/src/snapshot/select-adapter.ts +3 -3
  389. package/src/snapshot/serializer.ts +2 -3
  390. package/src/types.ts +2 -162
@@ -0,0 +1,259 @@
1
+ import { inspect } from 'util';
2
+ import z from 'zod';
3
+ import { AssertionError, AssertionImplementationError } from "../error.js";
4
+ import { isA, isBoolean, isError, isStandardSchema, isZodType, } from "../guards.js";
5
+ import { isAssertionFailure, isAssertionParseRequest, } from "../internal-schema.js";
6
+ import { BupkisAssertion } from "./assertion.js";
7
+ import { formatAssertionFailure } from "./format-assertion-failure.js";
8
+ export class BupkisAssertionAsync extends BupkisAssertion {
9
+ async parseValuesAsync(args) {
10
+ const { slots } = this;
11
+ const parsedValues = [];
12
+ if (slots.length !== args.length) {
13
+ return {
14
+ success: false,
15
+ };
16
+ }
17
+ let exactMatch = true;
18
+ for (let i = 0; i < slots.length; i++) {
19
+ const slot = slots[i];
20
+ const arg = args[i];
21
+ const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
22
+ if (parsedLiteralResult === true) {
23
+ continue;
24
+ }
25
+ else if (parsedLiteralResult !== false) {
26
+ return parsedLiteralResult;
27
+ }
28
+ // unknown/any accept anything
29
+ // IMPORTANT: do not use a type guard here; it will break inference
30
+ if (slot.def.type === 'unknown' || slot.def.type === 'any') {
31
+ parsedValues.push(arg);
32
+ exactMatch = false;
33
+ continue;
34
+ }
35
+ const result = await slot.safeParseAsync(arg);
36
+ if (!result.success) {
37
+ return {
38
+ success: false,
39
+ };
40
+ }
41
+ parsedValues.push(result.data);
42
+ }
43
+ return {
44
+ exactMatch,
45
+ parsedValues: parsedValues,
46
+ success: true,
47
+ };
48
+ }
49
+ }
50
+ /**
51
+ * An assertion implemented as a Zod schema.
52
+ *
53
+ * Async schemas are supported via {@link expectAsync}.
54
+ */
55
+ /**
56
+ * Optimized schema assertion that performs subject validation during
57
+ * parseValues() to eliminate double parsing for simple schema-based
58
+ * assertions.
59
+ *
60
+ * This class implements Option 2 from the z.function() analysis - it caches the
61
+ * subject validation result during argument parsing and reuses it during
62
+ * execution, eliminating the double parsing overhead.
63
+ */
64
+ export class BupkisAssertionFunctionAsync extends BupkisAssertionAsync {
65
+ async executeAsync(parsedValues, args, stackStartFn, _parseResult) {
66
+ let result;
67
+ try {
68
+ result = await this.impl.call(null,
69
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
70
+ ...parsedValues);
71
+ }
72
+ catch (err) {
73
+ if (AssertionError.isAssertionError(err)) {
74
+ throw err;
75
+ }
76
+ if (isError(err) && err instanceof z.ZodError) {
77
+ throw this.fromZodError(err, stackStartFn, parsedValues);
78
+ }
79
+ throw new AssertionImplementationError(`Unexpected error thrown from assertion ${this}: ${err}`, { cause: err });
80
+ }
81
+ if (isZodType(result)) {
82
+ try {
83
+ await result.parseAsync(parsedValues[0]);
84
+ }
85
+ catch (error) {
86
+ if (isA(error, z.ZodError)) {
87
+ throw this.fromZodError(error, stackStartFn, parsedValues);
88
+ }
89
+ throw error;
90
+ }
91
+ }
92
+ else if (isStandardSchema(result)) {
93
+ const validationResult = result['~standard'].validate(parsedValues[0]);
94
+ const finalResult = validationResult instanceof Promise
95
+ ? await validationResult
96
+ : validationResult;
97
+ if (finalResult.issues) {
98
+ throw this.fromStandardSchemaIssues(finalResult.issues, stackStartFn, parsedValues);
99
+ }
100
+ }
101
+ else if (isBoolean(result)) {
102
+ if (!result) {
103
+ throw new AssertionError({
104
+ id: this.id,
105
+ message: `Assertion ${this} failed for arguments: ${inspect(args)}`,
106
+ });
107
+ }
108
+ }
109
+ else if (isError(result) && result instanceof z.ZodError) {
110
+ throw this.fromZodError(result, stackStartFn, parsedValues);
111
+ }
112
+ else if (isAssertionParseRequest(result)) {
113
+ const { asyncSchema, schema, subject } = result;
114
+ const schemaToUse = schema ?? asyncSchema;
115
+ if (isZodType(schemaToUse)) {
116
+ let zodResult;
117
+ if (schema) {
118
+ zodResult = schemaToUse.safeParse(subject);
119
+ }
120
+ else {
121
+ zodResult = await schemaToUse.safeParseAsync(subject);
122
+ }
123
+ if (!zodResult.success) {
124
+ throw this.fromZodError(zodResult.error, stackStartFn, subject);
125
+ }
126
+ }
127
+ else if (isStandardSchema(schemaToUse)) {
128
+ const validationResult = schemaToUse['~standard'].validate(subject);
129
+ const finalResult = validationResult instanceof Promise
130
+ ? await validationResult
131
+ : validationResult;
132
+ if (finalResult.issues) {
133
+ throw this.fromStandardSchemaIssues(finalResult.issues, stackStartFn, subject);
134
+ }
135
+ }
136
+ }
137
+ else if (isAssertionFailure(result)) {
138
+ const diffOutput = formatAssertionFailure(result);
139
+ const baseMessage = result.message ??
140
+ `Assertion ${this} failed for arguments: ${inspect(args)}`;
141
+ const message = diffOutput
142
+ ? `${baseMessage}\n${diffOutput}`
143
+ : baseMessage;
144
+ throw new AssertionError({
145
+ actual: result.actual,
146
+ expected: result.expected,
147
+ id: this.id,
148
+ message,
149
+ });
150
+ }
151
+ else if (result) {
152
+ throw new AssertionImplementationError(`Invalid return type from assertion ${this}; expected boolean, ZodType, or AssertionFailure`, { result });
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * A class representing an assertion implemented as a function.
158
+ *
159
+ * This function may:
160
+ *
161
+ * 1. Return a `boolean` indicating pass/fail.
162
+ * 2. Return a `ZodType` which will be used to validate the subject.
163
+ * 3. Return a `Promise` resolving to either of the above (when called via
164
+ * {@link expectAsync})
165
+ * 4. Throw a {@link AssertionError}; when called via {@link expectAsync}, reject
166
+ * with an {@link AssertionError}
167
+ */
168
+ export class BupkisAssertionSchemaAsync extends BupkisAssertionAsync {
169
+ async executeAsync(parsedValues, _args, stackStartFn, parseResult) {
170
+ // Check if we have cached validation result from parseValuesAsync
171
+ const cachedValidation = parseResult?.success
172
+ ? parseResult.subjectValidationResult
173
+ : undefined;
174
+ if (cachedValidation && !cachedValidation.success) {
175
+ // Subject validation failed during parseValuesAsync, throw the cached error
176
+ if ('error' in cachedValidation) {
177
+ throw this.fromZodError(cachedValidation.error, stackStartFn, parsedValues);
178
+ }
179
+ }
180
+ // Fall back to standard validation if no cached result
181
+ const [subject] = parsedValues;
182
+ try {
183
+ await this.impl.parseAsync(subject);
184
+ }
185
+ catch (error) {
186
+ if (isA(error, z.ZodError)) {
187
+ throw this.fromZodError(error, stackStartFn, parsedValues);
188
+ }
189
+ /* c8 ignore next */
190
+ throw error;
191
+ }
192
+ }
193
+ async parseValuesAsync(args) {
194
+ const { slots } = this;
195
+ const parsedValues = [];
196
+ const mismatch = this.maybeParseValuesArgMismatch(args);
197
+ if (mismatch) {
198
+ return mismatch;
199
+ }
200
+ let exactMatch = true;
201
+ let subjectValidationResult;
202
+ for (let i = 0; i < slots.length; i++) {
203
+ const slot = slots[i];
204
+ const arg = args[i];
205
+ const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
206
+ if (parsedLiteralResult === true) {
207
+ continue;
208
+ }
209
+ else if (parsedLiteralResult !== false) {
210
+ return parsedLiteralResult;
211
+ }
212
+ // For the subject slot (first slot if it's unknown/any), try optimized validation
213
+ if (i === 0 &&
214
+ (slot.def.type === 'unknown' || slot.def.type === 'any') &&
215
+ this.isSimpleSchemaAssertion()) {
216
+ try {
217
+ const result = await this.impl.parseAsync(arg);
218
+ subjectValidationResult = { data: result, success: true };
219
+ parsedValues.push(result); // Use validated data
220
+ }
221
+ catch (error) {
222
+ if (isA(error, z.ZodError)) {
223
+ subjectValidationResult = { error, success: false };
224
+ parsedValues.push(arg); // Keep original for error reporting
225
+ }
226
+ else {
227
+ throw error; // Re-throw non-Zod errors
228
+ }
229
+ }
230
+ exactMatch = false; // Subject was validated, so we know the exact type
231
+ continue;
232
+ }
233
+ // Standard slot processing for non-optimized cases
234
+ if (slot.def.type === 'unknown' || slot.def.type === 'any') {
235
+ parsedValues.push(arg);
236
+ exactMatch = false;
237
+ continue;
238
+ }
239
+ const result = await slot.safeParseAsync(arg);
240
+ if (!result.success) {
241
+ return {
242
+ success: false,
243
+ };
244
+ }
245
+ parsedValues.push(result.data);
246
+ }
247
+ const result = {
248
+ exactMatch,
249
+ parsedValues: parsedValues,
250
+ success: true,
251
+ };
252
+ // Add cached validation result if we performed optimization
253
+ if (subjectValidationResult) {
254
+ result.subjectValidationResult = subjectValidationResult;
255
+ }
256
+ return result;
257
+ }
258
+ }
259
+ //# sourceMappingURL=assertion-async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-async.js","sourceRoot":"","sources":["../../src/assertion/assertion-async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ /**
3
+ * Asynchronous Standard Schema assertion implementation.
4
+ *
5
+ * This module provides the `BupkisAssertionStandardSchemaAsync` class for
6
+ * assertions implemented using Standard Schema v1 compliant validators that may
7
+ * perform asynchronous validation.
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BupkisAssertionStandardSchemaAsync = void 0;
13
+ const assertion_js_1 = require("./assertion.cjs");
14
+ /**
15
+ * An asynchronous assertion implemented using a Standard Schema v1 validator.
16
+ *
17
+ * This class handles async schema-based assertions where the implementation is
18
+ * any Standard Schema compliant validator that may perform asynchronous
19
+ * validation. It optimizes validation by caching the subject validation result
20
+ * during `parseValuesAsync()` to avoid double parsing.
21
+ *
22
+ * @template Parts - The assertion parts tuple defining structure
23
+ * @template Impl - The Standard Schema implementation
24
+ * @template Slots - The derived validation slots
25
+ */
26
+ class BupkisAssertionStandardSchemaAsync extends assertion_js_1.BupkisAssertion {
27
+ /**
28
+ * Executes the assertion asynchronously against validated values.
29
+ *
30
+ * If validation was already performed during `parseValuesAsync()` and cached,
31
+ * reuses that result. Otherwise, performs validation using the Standard
32
+ * Schema's validate() method (which may return a Promise).
33
+ *
34
+ * @param parsedValues - The parsed and validated values
35
+ * @param _args - Original raw arguments (unused)
36
+ * @param stackStartFn - Function to use as stack trace start point
37
+ * @param parseResult - Optional cached parse result from `parseValuesAsync()`
38
+ * @throws {AssertionError} If validation fails
39
+ */
40
+ async executeAsync(parsedValues, _args, stackStartFn, parseResult) {
41
+ const cachedValidation = parseResult?.success
42
+ ? parseResult.subjectValidationResult
43
+ : undefined;
44
+ if (cachedValidation && !cachedValidation.success) {
45
+ if ('issues' in cachedValidation) {
46
+ throw this.fromStandardSchemaIssues(cachedValidation.issues, stackStartFn, parsedValues);
47
+ }
48
+ }
49
+ const [subject] = parsedValues;
50
+ const result = this.impl['~standard'].validate(subject);
51
+ const validationResult = result instanceof Promise ? await result : result;
52
+ if (validationResult.issues) {
53
+ throw this.fromStandardSchemaIssues(validationResult.issues, stackStartFn, parsedValues);
54
+ }
55
+ }
56
+ /**
57
+ * Parses raw arguments asynchronously against slots with optimized caching.
58
+ *
59
+ * For simple schema assertions (subject + phrase literals only), this method
60
+ * validates the subject during parsing and caches the result to avoid double
61
+ * validation in `executeAsync()`.
62
+ *
63
+ * @param args - Raw arguments provided to `expectAsync()`
64
+ * @returns Promise resolving to parse result with cached validation
65
+ */
66
+ async parseValuesAsync(args) {
67
+ const { slots } = this;
68
+ const parsedValues = [];
69
+ const mismatch = this.maybeParseValuesArgMismatch(args);
70
+ if (mismatch) {
71
+ return mismatch;
72
+ }
73
+ let exactMatch = true;
74
+ let subjectValidationResult;
75
+ for (let i = 0; i < slots.length; i++) {
76
+ const slot = slots[i];
77
+ const arg = args[i];
78
+ const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
79
+ if (parsedLiteralResult === true) {
80
+ continue;
81
+ }
82
+ else if (parsedLiteralResult !== false) {
83
+ return parsedLiteralResult;
84
+ }
85
+ if (i === 0 &&
86
+ (slot.def.type === 'unknown' || slot.def.type === 'any') &&
87
+ this.isSimpleSchemaAssertion()) {
88
+ const result = this.impl['~standard'].validate(arg);
89
+ const validationResult = result instanceof Promise ? await result : result;
90
+ if (validationResult.issues) {
91
+ subjectValidationResult = {
92
+ issues: validationResult.issues,
93
+ success: false,
94
+ };
95
+ parsedValues.push(arg);
96
+ }
97
+ else {
98
+ subjectValidationResult = {
99
+ data: validationResult.value,
100
+ success: true,
101
+ };
102
+ parsedValues.push(validationResult.value);
103
+ }
104
+ exactMatch = false;
105
+ continue;
106
+ }
107
+ if (slot.def.type === 'unknown' || slot.def.type === 'any') {
108
+ parsedValues.push(arg);
109
+ exactMatch = false;
110
+ continue;
111
+ }
112
+ const result = await slot.safeParseAsync(arg);
113
+ if (!result.success) {
114
+ return {
115
+ success: false,
116
+ };
117
+ }
118
+ parsedValues.push(result.data);
119
+ }
120
+ const result = {
121
+ exactMatch,
122
+ parsedValues: parsedValues,
123
+ success: true,
124
+ };
125
+ if (subjectValidationResult) {
126
+ result.subjectValidationResult = subjectValidationResult;
127
+ }
128
+ return result;
129
+ }
130
+ }
131
+ exports.BupkisAssertionStandardSchemaAsync = BupkisAssertionStandardSchemaAsync;
132
+ //# sourceMappingURL=assertion-standard-schema-async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-standard-schema-async.js","sourceRoot":"","sources":["../../src/assertion/assertion-standard-schema-async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Asynchronous Standard Schema assertion implementation.
3
+ *
4
+ * This module provides the `BupkisAssertionStandardSchemaAsync` class for
5
+ * assertions implemented using Standard Schema v1 compliant validators that may
6
+ * perform asynchronous validation.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { StandardSchemaV1 } from "../standard-schema.cjs";
11
+ import type { AssertionParts, AssertionSlots, AssertionStandardSchemaAsync, ParsedResult, ParsedValues } from "./assertion-types.cjs";
12
+ import { BupkisAssertion } from "./assertion.cjs";
13
+ /**
14
+ * An asynchronous assertion implemented using a Standard Schema v1 validator.
15
+ *
16
+ * This class handles async schema-based assertions where the implementation is
17
+ * any Standard Schema compliant validator that may perform asynchronous
18
+ * validation. It optimizes validation by caching the subject validation result
19
+ * during `parseValuesAsync()` to avoid double parsing.
20
+ *
21
+ * @template Parts - The assertion parts tuple defining structure
22
+ * @template Impl - The Standard Schema implementation
23
+ * @template Slots - The derived validation slots
24
+ */
25
+ export declare class BupkisAssertionStandardSchemaAsync<Parts extends AssertionParts, Impl extends StandardSchemaV1, Slots extends AssertionSlots<Parts>> extends BupkisAssertion<Parts, Impl, Slots> implements AssertionStandardSchemaAsync<Parts, Impl, Slots> {
26
+ /**
27
+ * Executes the assertion asynchronously against validated values.
28
+ *
29
+ * If validation was already performed during `parseValuesAsync()` and cached,
30
+ * reuses that result. Otherwise, performs validation using the Standard
31
+ * Schema's validate() method (which may return a Promise).
32
+ *
33
+ * @param parsedValues - The parsed and validated values
34
+ * @param _args - Original raw arguments (unused)
35
+ * @param stackStartFn - Function to use as stack trace start point
36
+ * @param parseResult - Optional cached parse result from `parseValuesAsync()`
37
+ * @throws {AssertionError} If validation fails
38
+ */
39
+ executeAsync(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
40
+ /**
41
+ * Parses raw arguments asynchronously against slots with optimized caching.
42
+ *
43
+ * For simple schema assertions (subject + phrase literals only), this method
44
+ * validates the subject during parsing and caches the result to avoid double
45
+ * validation in `executeAsync()`.
46
+ *
47
+ * @param args - Raw arguments provided to `expectAsync()`
48
+ * @returns Promise resolving to parse result with cached validation
49
+ */
50
+ parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
51
+ }
52
+ //# sourceMappingURL=assertion-standard-schema-async.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-standard-schema-async.d.ts","sourceRoot":"","sources":["../../src/assertion/assertion-standard-schema-async.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,+BAA8B;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,YAAY,EAEZ,YAAY,EACb,8BAA6B;AAE9B,OAAO,EAAE,eAAe,EAAE,wBAAuB;AAEjD;;;;;;;;;;;GAWG;AACH,qBAAa,kCAAkC,CAC7C,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,gBAAgB,EAC7B,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC1C,YAAW,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE3D;;;;;;;;;;;;OAYG;IACG,YAAY,CAChB,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;IA4BhB;;;;;;;;;OASG;IACG,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EACpD,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CA0EhC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Asynchronous Standard Schema assertion implementation.
3
+ *
4
+ * This module provides the `BupkisAssertionStandardSchemaAsync` class for
5
+ * assertions implemented using Standard Schema v1 compliant validators that may
6
+ * perform asynchronous validation.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { StandardSchemaV1 } from "../standard-schema.js";
11
+ import type { AssertionParts, AssertionSlots, AssertionStandardSchemaAsync, ParsedResult, ParsedValues } from "./assertion-types.js";
12
+ import { BupkisAssertion } from "./assertion.js";
13
+ /**
14
+ * An asynchronous assertion implemented using a Standard Schema v1 validator.
15
+ *
16
+ * This class handles async schema-based assertions where the implementation is
17
+ * any Standard Schema compliant validator that may perform asynchronous
18
+ * validation. It optimizes validation by caching the subject validation result
19
+ * during `parseValuesAsync()` to avoid double parsing.
20
+ *
21
+ * @template Parts - The assertion parts tuple defining structure
22
+ * @template Impl - The Standard Schema implementation
23
+ * @template Slots - The derived validation slots
24
+ */
25
+ export declare class BupkisAssertionStandardSchemaAsync<Parts extends AssertionParts, Impl extends StandardSchemaV1, Slots extends AssertionSlots<Parts>> extends BupkisAssertion<Parts, Impl, Slots> implements AssertionStandardSchemaAsync<Parts, Impl, Slots> {
26
+ /**
27
+ * Executes the assertion asynchronously against validated values.
28
+ *
29
+ * If validation was already performed during `parseValuesAsync()` and cached,
30
+ * reuses that result. Otherwise, performs validation using the Standard
31
+ * Schema's validate() method (which may return a Promise).
32
+ *
33
+ * @param parsedValues - The parsed and validated values
34
+ * @param _args - Original raw arguments (unused)
35
+ * @param stackStartFn - Function to use as stack trace start point
36
+ * @param parseResult - Optional cached parse result from `parseValuesAsync()`
37
+ * @throws {AssertionError} If validation fails
38
+ */
39
+ executeAsync(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
40
+ /**
41
+ * Parses raw arguments asynchronously against slots with optimized caching.
42
+ *
43
+ * For simple schema assertions (subject + phrase literals only), this method
44
+ * validates the subject during parsing and caches the result to avoid double
45
+ * validation in `executeAsync()`.
46
+ *
47
+ * @param args - Raw arguments provided to `expectAsync()`
48
+ * @returns Promise resolving to parse result with cached validation
49
+ */
50
+ parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
51
+ }
52
+ //# sourceMappingURL=assertion-standard-schema-async.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-standard-schema-async.d.ts","sourceRoot":"","sources":["../../src/assertion/assertion-standard-schema-async.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,8BAA8B;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,YAAY,EAEZ,YAAY,EACb,6BAA6B;AAE9B,OAAO,EAAE,eAAe,EAAE,uBAAuB;AAEjD;;;;;;;;;;;GAWG;AACH,qBAAa,kCAAkC,CAC7C,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,gBAAgB,EAC7B,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC1C,YAAW,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE3D;;;;;;;;;;;;OAYG;IACG,YAAY,CAChB,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;IA4BhB;;;;;;;;;OASG;IACG,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EACpD,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CA0EhC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Asynchronous Standard Schema assertion implementation.
3
+ *
4
+ * This module provides the `BupkisAssertionStandardSchemaAsync` class for
5
+ * assertions implemented using Standard Schema v1 compliant validators that may
6
+ * perform asynchronous validation.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import { BupkisAssertion } from "./assertion.js";
11
+ /**
12
+ * An asynchronous assertion implemented using a Standard Schema v1 validator.
13
+ *
14
+ * This class handles async schema-based assertions where the implementation is
15
+ * any Standard Schema compliant validator that may perform asynchronous
16
+ * validation. It optimizes validation by caching the subject validation result
17
+ * during `parseValuesAsync()` to avoid double parsing.
18
+ *
19
+ * @template Parts - The assertion parts tuple defining structure
20
+ * @template Impl - The Standard Schema implementation
21
+ * @template Slots - The derived validation slots
22
+ */
23
+ export class BupkisAssertionStandardSchemaAsync extends BupkisAssertion {
24
+ /**
25
+ * Executes the assertion asynchronously against validated values.
26
+ *
27
+ * If validation was already performed during `parseValuesAsync()` and cached,
28
+ * reuses that result. Otherwise, performs validation using the Standard
29
+ * Schema's validate() method (which may return a Promise).
30
+ *
31
+ * @param parsedValues - The parsed and validated values
32
+ * @param _args - Original raw arguments (unused)
33
+ * @param stackStartFn - Function to use as stack trace start point
34
+ * @param parseResult - Optional cached parse result from `parseValuesAsync()`
35
+ * @throws {AssertionError} If validation fails
36
+ */
37
+ async executeAsync(parsedValues, _args, stackStartFn, parseResult) {
38
+ const cachedValidation = parseResult?.success
39
+ ? parseResult.subjectValidationResult
40
+ : undefined;
41
+ if (cachedValidation && !cachedValidation.success) {
42
+ if ('issues' in cachedValidation) {
43
+ throw this.fromStandardSchemaIssues(cachedValidation.issues, stackStartFn, parsedValues);
44
+ }
45
+ }
46
+ const [subject] = parsedValues;
47
+ const result = this.impl['~standard'].validate(subject);
48
+ const validationResult = result instanceof Promise ? await result : result;
49
+ if (validationResult.issues) {
50
+ throw this.fromStandardSchemaIssues(validationResult.issues, stackStartFn, parsedValues);
51
+ }
52
+ }
53
+ /**
54
+ * Parses raw arguments asynchronously against slots with optimized caching.
55
+ *
56
+ * For simple schema assertions (subject + phrase literals only), this method
57
+ * validates the subject during parsing and caches the result to avoid double
58
+ * validation in `executeAsync()`.
59
+ *
60
+ * @param args - Raw arguments provided to `expectAsync()`
61
+ * @returns Promise resolving to parse result with cached validation
62
+ */
63
+ async parseValuesAsync(args) {
64
+ const { slots } = this;
65
+ const parsedValues = [];
66
+ const mismatch = this.maybeParseValuesArgMismatch(args);
67
+ if (mismatch) {
68
+ return mismatch;
69
+ }
70
+ let exactMatch = true;
71
+ let subjectValidationResult;
72
+ for (let i = 0; i < slots.length; i++) {
73
+ const slot = slots[i];
74
+ const arg = args[i];
75
+ const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
76
+ if (parsedLiteralResult === true) {
77
+ continue;
78
+ }
79
+ else if (parsedLiteralResult !== false) {
80
+ return parsedLiteralResult;
81
+ }
82
+ if (i === 0 &&
83
+ (slot.def.type === 'unknown' || slot.def.type === 'any') &&
84
+ this.isSimpleSchemaAssertion()) {
85
+ const result = this.impl['~standard'].validate(arg);
86
+ const validationResult = result instanceof Promise ? await result : result;
87
+ if (validationResult.issues) {
88
+ subjectValidationResult = {
89
+ issues: validationResult.issues,
90
+ success: false,
91
+ };
92
+ parsedValues.push(arg);
93
+ }
94
+ else {
95
+ subjectValidationResult = {
96
+ data: validationResult.value,
97
+ success: true,
98
+ };
99
+ parsedValues.push(validationResult.value);
100
+ }
101
+ exactMatch = false;
102
+ continue;
103
+ }
104
+ if (slot.def.type === 'unknown' || slot.def.type === 'any') {
105
+ parsedValues.push(arg);
106
+ exactMatch = false;
107
+ continue;
108
+ }
109
+ const result = await slot.safeParseAsync(arg);
110
+ if (!result.success) {
111
+ return {
112
+ success: false,
113
+ };
114
+ }
115
+ parsedValues.push(result.data);
116
+ }
117
+ const result = {
118
+ exactMatch,
119
+ parsedValues: parsedValues,
120
+ success: true,
121
+ };
122
+ if (subjectValidationResult) {
123
+ result.subjectValidationResult = subjectValidationResult;
124
+ }
125
+ return result;
126
+ }
127
+ }
128
+ //# sourceMappingURL=assertion-standard-schema-async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-standard-schema-async.js","sourceRoot":"","sources":["../../src/assertion/assertion-standard-schema-async.ts"],"names":[],"mappings":"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"}