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
package/dist/diff.js ADDED
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Diff utilities for generating rich assertion failure output.
3
+ *
4
+ * This module provides utilities for extracting meaningful actual/expected
5
+ * values from Zod validation errors and generating high-quality diff output
6
+ * using `jest-diff` for assertion failures.
7
+ *
8
+ * @packageDocumentation
9
+ * @see {@link https://npm.im/jest-diff | jest-diff}
10
+ */
11
+ import { diff } from 'jest-diff';
12
+ const { isArray } = Array;
13
+ const { max } = Math;
14
+ const { stringify } = JSON;
15
+ const { entries, getOwnPropertyNames } = Object;
16
+ /**
17
+ * Extracts actual and expected values from a `ZodError` for meaningful diffs.
18
+ *
19
+ * @function
20
+ * @param zodError The `ZodError` to extract values from
21
+ * @param subject The original subject that failed validation
22
+ * @returns Object with actual and expected values for diff
23
+ */
24
+ export const extractDiffValues = (zodError, subject) => {
25
+ try {
26
+ const actual = subject;
27
+ let expected = subject != null ? deepClone(subject) : subject;
28
+ for (const issue of zodError.issues) {
29
+ try {
30
+ const filteredPath = issue.path.filter((key) => typeof key === 'string' || typeof key === 'number');
31
+ switch (issue.code) {
32
+ case 'custom': {
33
+ const params = issue.params;
34
+ if (params?.bupkisType === 'missing_key' &&
35
+ filteredPath.length > 0) {
36
+ const missingKey = filteredPath[0];
37
+ if (typeof expected === 'object' && expected !== null) {
38
+ expected = {
39
+ ...expected,
40
+ [missingKey]: undefined,
41
+ };
42
+ }
43
+ }
44
+ else if (filteredPath.length > 0) {
45
+ const actualValue = getValueAtPath(actual, filteredPath);
46
+ if (actualValue === undefined) {
47
+ expected = setValueAtPath(expected, filteredPath, undefined);
48
+ }
49
+ }
50
+ break;
51
+ }
52
+ case 'invalid_format': {
53
+ const actualValue = getValueAtPath(actual, filteredPath);
54
+ let correctedValue = actualValue;
55
+ const regexMatch = issue.message.match(/pattern (.+)/);
56
+ if (regexMatch) {
57
+ correctedValue = `<string matching ${regexMatch[1]}>`;
58
+ }
59
+ else {
60
+ correctedValue = '<string in valid format>';
61
+ }
62
+ expected = setValueAtPath(expected, filteredPath, correctedValue);
63
+ break;
64
+ }
65
+ case 'invalid_type': {
66
+ const correctedValue = createCorrectValueForType(issue.expected, getValueAtPath(actual, filteredPath));
67
+ expected = setValueAtPath(expected, filteredPath, correctedValue);
68
+ break;
69
+ }
70
+ case 'invalid_union': {
71
+ // Union errors contain multiple sub-errors for each branch.
72
+ // We can't determine a single "expected" value, so bail out
73
+ // and let Zod's error message show all the union branch errors.
74
+ return { actual: undefined, expected: undefined };
75
+ }
76
+ case 'invalid_value': {
77
+ // Only use the corrected value if we have a concrete value from the schema
78
+ if (issue.values && issue.values.length > 0) {
79
+ const correctedValue = issue.values[0];
80
+ expected = setValueAtPath(expected, filteredPath, correctedValue);
81
+ }
82
+ else {
83
+ // No concrete value available, bail out to Zod's error message
84
+ return { actual: undefined, expected: undefined };
85
+ }
86
+ break;
87
+ }
88
+ case 'too_big': {
89
+ const actualValue = getValueAtPath(actual, filteredPath);
90
+ let correctedValue;
91
+ if (issue.origin === 'string' && typeof actualValue === 'string') {
92
+ correctedValue = actualValue.slice(0, Number(issue.maximum));
93
+ }
94
+ else if (issue.origin === 'array' && isArray(actualValue)) {
95
+ correctedValue = actualValue.slice(0, Number(issue.maximum));
96
+ }
97
+ else {
98
+ correctedValue = issue.maximum;
99
+ }
100
+ expected = setValueAtPath(expected, filteredPath, correctedValue);
101
+ break;
102
+ }
103
+ case 'too_small': {
104
+ const actualValue = getValueAtPath(actual, filteredPath);
105
+ let correctedValue;
106
+ if (issue.origin === 'string' && typeof actualValue === 'string') {
107
+ const needed = Number(issue.minimum) - actualValue.length;
108
+ correctedValue = actualValue + 'x'.repeat(max(0, needed));
109
+ }
110
+ else if (issue.origin === 'array' && isArray(actualValue)) {
111
+ const needed = Number(issue.minimum) - actualValue.length;
112
+ correctedValue = actualValue.concat(new Array(max(0, needed)).fill(null));
113
+ }
114
+ else {
115
+ correctedValue = issue.minimum;
116
+ }
117
+ expected = setValueAtPath(expected, filteredPath, correctedValue);
118
+ break;
119
+ }
120
+ case 'unrecognized_keys': {
121
+ if (filteredPath.length === 0 &&
122
+ typeof expected === 'object' &&
123
+ expected !== null) {
124
+ const expectedCopy = {
125
+ ...expected,
126
+ };
127
+ for (const key of issue.keys) {
128
+ delete expectedCopy[key];
129
+ }
130
+ expected = expectedCopy;
131
+ }
132
+ break;
133
+ }
134
+ default: {
135
+ break;
136
+ }
137
+ }
138
+ }
139
+ catch {
140
+ continue;
141
+ }
142
+ }
143
+ return { actual, expected };
144
+ }
145
+ catch {
146
+ return { actual: undefined, expected: undefined };
147
+ }
148
+ };
149
+ /**
150
+ * Generates a rich diff string using jest-diff for assertion failures.
151
+ *
152
+ * @function
153
+ * @param expected The expected value
154
+ * @param actual The actual value
155
+ * @param options Configuration options for diff generation
156
+ * @returns A formatted diff string, or null if values are identical
157
+ */
158
+ export const generateDiff = (expected, actual, options = {}) => {
159
+ if (!shouldGenerateDiff(actual, expected)) {
160
+ return null;
161
+ }
162
+ return diff(expected, actual, {
163
+ aAnnotation: 'expected',
164
+ bAnnotation: 'actual',
165
+ expand: false,
166
+ includeChangeCounts: true,
167
+ ...options,
168
+ });
169
+ };
170
+ /**
171
+ * Checks if two values should generate a meaningful diff.
172
+ *
173
+ * @function
174
+ * @param actual The actual value
175
+ * @param expected The expected value
176
+ * @returns True if a diff should be generated, false otherwise
177
+ */
178
+ export const shouldGenerateDiff = (actual, expected) => actual !== undefined && expected !== undefined && actual !== expected;
179
+ /**
180
+ * Creates a corrected value for a given type
181
+ *
182
+ * @function
183
+ */
184
+ const createCorrectValueForType = (expectedType, actualValue) => {
185
+ switch (expectedType) {
186
+ case 'array':
187
+ return isArray(actualValue) ? actualValue : [];
188
+ case 'boolean':
189
+ return typeof actualValue === 'boolean'
190
+ ? actualValue
191
+ : Boolean(actualValue);
192
+ case 'null':
193
+ return null;
194
+ case 'number':
195
+ return typeof actualValue === 'number'
196
+ ? actualValue
197
+ : Number(actualValue) || 0;
198
+ case 'object':
199
+ return typeof actualValue === 'object' && actualValue !== null
200
+ ? actualValue
201
+ : {};
202
+ case 'string':
203
+ if (typeof actualValue === 'string') {
204
+ return actualValue;
205
+ }
206
+ if (actualValue == null) {
207
+ return '';
208
+ }
209
+ if (typeof actualValue === 'object') {
210
+ return stringify(actualValue);
211
+ }
212
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
213
+ return `${actualValue}`;
214
+ case 'undefined':
215
+ return undefined;
216
+ default:
217
+ return `<${expectedType}>`;
218
+ }
219
+ };
220
+ /**
221
+ * Custom deep clone implementation for values that structuredClone can't
222
+ * handle. Used as fallback when structuredClone fails.
223
+ *
224
+ * @function
225
+ */
226
+ const customDeepClone = (value) => {
227
+ if (value === null || typeof value !== 'object') {
228
+ return value;
229
+ }
230
+ if (isArray(value)) {
231
+ return value.map(customDeepClone);
232
+ }
233
+ if (value instanceof Error) {
234
+ const cloned = {};
235
+ for (const [key, val] of entries(value)) {
236
+ cloned[key] = customDeepClone(val);
237
+ }
238
+ for (const prop of getOwnPropertyNames(value)) {
239
+ if (!(prop in cloned)) {
240
+ try {
241
+ cloned[prop] = value[prop];
242
+ }
243
+ catch {
244
+ // Skip properties that can't be accessed
245
+ }
246
+ }
247
+ }
248
+ return cloned;
249
+ }
250
+ const cloned = {};
251
+ for (const [key, val] of entries(value)) {
252
+ cloned[key] = customDeepClone(val);
253
+ }
254
+ return cloned;
255
+ };
256
+ /**
257
+ * Deep clone a value to avoid mutating the original. Uses the native
258
+ * structuredClone API which handles more types and circular references better
259
+ * than a custom implementation. Falls back to custom implementation for values
260
+ * containing functions.
261
+ *
262
+ * @function
263
+ */
264
+ const deepClone = (value) => {
265
+ try {
266
+ return structuredClone(value);
267
+ }
268
+ catch (error) {
269
+ if (error instanceof Error && error.name === 'DataCloneError') {
270
+ return customDeepClone(value);
271
+ }
272
+ throw error;
273
+ }
274
+ };
275
+ /**
276
+ * Gets a value at a specific path in an object
277
+ *
278
+ * @function
279
+ */
280
+ const getValueAtPath = (obj, path) => {
281
+ if (path.length === 0) {
282
+ return obj;
283
+ }
284
+ let current = obj;
285
+ for (const key of path) {
286
+ if (current == null) {
287
+ return undefined;
288
+ }
289
+ current = current[key];
290
+ }
291
+ return current;
292
+ };
293
+ /**
294
+ * Returns a new object with the value at the specified path set to the given
295
+ * value.
296
+ *
297
+ * @function
298
+ */
299
+ const setValueAtPath = (obj, path, value) => {
300
+ if (path.length === 0) {
301
+ return value;
302
+ }
303
+ if (obj == null) {
304
+ obj = typeof path[0] === 'number' ? [] : {};
305
+ }
306
+ const [head, ...tail] = path;
307
+ if (head === undefined) {
308
+ return obj;
309
+ }
310
+ const newValue = tail.length === 0
311
+ ? value
312
+ : setValueAtPath(obj[head], tail, value);
313
+ if (isArray(obj)) {
314
+ const result = [...obj];
315
+ result[head] = newValue;
316
+ return result;
317
+ }
318
+ let result;
319
+ if (obj instanceof Error) {
320
+ result = {};
321
+ for (const prop of getOwnPropertyNames(obj)) {
322
+ if (prop !== 'stack') {
323
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
324
+ result[prop] = obj[prop];
325
+ }
326
+ }
327
+ }
328
+ else {
329
+ result = { ...obj };
330
+ }
331
+ result[head] = newValue;
332
+ return result;
333
+ };
334
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
package/dist/error.cjs ADDED
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ /**
3
+ * Error types thrown by _BUPKIS_, including {@link AssertionError}.
4
+ *
5
+ * @privateRemarks
6
+ * Other custom errors should go here.
7
+ * @packageDocumentation
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.UnknownAssertionError = exports.UnexpectedAsyncError = exports.SatisfactionError = exports.NegatedAssertionError = exports.InvalidObjectSchemaError = exports.InvalidMetadataError = exports.FailAssertionError = exports.AssertionImplementationError = exports.BupkisError = exports.AssertionError = void 0;
11
+ const node_assert_1 = require("node:assert");
12
+ const constant_js_1 = require("./constant.cjs");
13
+ const guards_js_1 = require("./guards.cjs");
14
+ const { hasOwn } = Object;
15
+ /**
16
+ * _BUPKIS_' s custom `AssertionError` class, which is just a thin wrapper
17
+ * around Node.js' {@link NodeAssertionError AssertionError}.
18
+ *
19
+ * @group Core API
20
+ * @group Errors
21
+ */
22
+ class AssertionError extends node_assert_1.AssertionError {
23
+ /**
24
+ * Assertion ID of the assertion that caused this error.
25
+ */
26
+ assertionId;
27
+ /**
28
+ * @internal
29
+ */
30
+ [constant_js_1.kBupkisAssertionError] = true;
31
+ name = 'AssertionError';
32
+ constructor(options) {
33
+ super(options);
34
+ this.assertionId = options.id;
35
+ }
36
+ /**
37
+ * Type guard for an instance of this error.
38
+ *
39
+ * @param value Some value
40
+ * @returns `true` if `value` is an instance of `AssertionError`
41
+ */
42
+ static isAssertionError = (value) => (0, guards_js_1.isA)(value, node_assert_1.AssertionError) && hasOwn(value, constant_js_1.kBupkisAssertionError);
43
+ toJSON() {
44
+ return {
45
+ actual: this.actual,
46
+ expected: this.expected,
47
+ message: this.message,
48
+ name: this.name,
49
+ stack: this.stack,
50
+ };
51
+ }
52
+ }
53
+ exports.AssertionError = AssertionError;
54
+ /**
55
+ * Base class for all custom errors thrown by <span
56
+ * class="bupkis">BUPKIS</span>.
57
+ *
58
+ * Typically only thrown when it should be impossible to throw.
59
+ *
60
+ * @group Errors
61
+ */
62
+ class BupkisError extends Error {
63
+ [constant_js_1.kBupkisError] = true;
64
+ name = 'BupkisError';
65
+ static isBupkisError = (err) => (0, guards_js_1.isA)(err, Error) && hasOwn(err, constant_js_1.kBupkisError);
66
+ }
67
+ exports.BupkisError = BupkisError;
68
+ /**
69
+ * Error type used when an assertion implementation throws an error (this likely
70
+ * means there's a bug in the assertion implementation).
71
+ *
72
+ * @group Errors
73
+ */
74
+ class AssertionImplementationError extends BupkisError {
75
+ code = 'ERR_BUPKIS_ASSERTION_IMPL';
76
+ name = 'AssertionImplementationError';
77
+ result;
78
+ constructor(message, options = {}) {
79
+ const { result, ...rest } = options;
80
+ super(message, rest);
81
+ this.result = result;
82
+ }
83
+ static isAssertionImplementationError = (err) => (0, guards_js_1.isA)(err, AssertionImplementationError);
84
+ }
85
+ exports.AssertionImplementationError = AssertionImplementationError;
86
+ /**
87
+ * Variant of an {@link AssertionError} that is thrown when
88
+ * {@link bupkis!expect.fail} is called.
89
+ *
90
+ * @group Errors
91
+ */
92
+ class FailAssertionError extends AssertionError {
93
+ /**
94
+ * @internal
95
+ */
96
+ [constant_js_1.kBupkisFailAssertionError] = true;
97
+ name = 'FailAssertionError';
98
+ constructor(options) {
99
+ super({ ...options, id: constant_js_1.FAIL });
100
+ }
101
+ static isFailAssertionError = (err) => (0, guards_js_1.isA)(err, FailAssertionError) && hasOwn(err, constant_js_1.kBupkisFailAssertionError);
102
+ }
103
+ exports.FailAssertionError = FailAssertionError;
104
+ /**
105
+ * Error type used when assertion metadata is invalid.
106
+ *
107
+ * @remarks
108
+ * This should never be thrown unless someone monkeyed with the metadata
109
+ * registry.
110
+ * @group Errors
111
+ */
112
+ class InvalidMetadataError extends BupkisError {
113
+ code = 'ERR_BUPKIS_INVALID_METADATA';
114
+ metadata;
115
+ name = 'InvalidMetadataError';
116
+ constructor(message, options = {}) {
117
+ const { metadata, ...rest } = options;
118
+ super(message, rest);
119
+ this.metadata = metadata;
120
+ }
121
+ }
122
+ exports.InvalidMetadataError = InvalidMetadataError;
123
+ /**
124
+ * Thrown from certain assertions when a parameter cannot be used as an "object
125
+ * schema"
126
+ *
127
+ * @group Errors
128
+ */
129
+ class InvalidObjectSchemaError extends BupkisError {
130
+ code = 'ERR_BUPKIS_INVALID_OBJECT_SCHEMA';
131
+ name = 'InvalidObjectSchemaError';
132
+ schema;
133
+ constructor(message, options = {}) {
134
+ const { schema, ...rest } = options;
135
+ super(message, rest);
136
+ this.schema = schema;
137
+ }
138
+ }
139
+ exports.InvalidObjectSchemaError = InvalidObjectSchemaError;
140
+ /**
141
+ * Error type used internally to catch failed negated assertions.
142
+ *
143
+ * @group Errors
144
+ */
145
+ class NegatedAssertionError extends AssertionError {
146
+ [constant_js_1.kBupkisNegatedAssertionError] = true;
147
+ name = 'NegatedAssertionError';
148
+ static isNegatedAssertionError = (err) => (0, guards_js_1.isA)(err, AssertionError) && hasOwn(err, constant_js_1.kBupkisNegatedAssertionError);
149
+ }
150
+ exports.NegatedAssertionError = NegatedAssertionError;
151
+ /**
152
+ * Thrown when a value cannot be converted to a schema using `valueToSchema()`.
153
+ *
154
+ * @remarks
155
+ * Currently, this is thrown when encountering an empty object as a value
156
+ * (because this will match anything; though maybe we should change that).
157
+ * @group Errors
158
+ */
159
+ class SatisfactionError extends BupkisError {
160
+ code = 'ERR_BUPKIS_SATISFACTION';
161
+ name = 'SatisfactionError';
162
+ constructor(message, options = {}) {
163
+ super(message, options);
164
+ }
165
+ }
166
+ exports.SatisfactionError = SatisfactionError;
167
+ /**
168
+ * Thrown when `expect()` is called with something async.
169
+ *
170
+ * @group Errors
171
+ */
172
+ class UnexpectedAsyncError extends BupkisError {
173
+ code = 'ERR_BUPKIS_UNEXPECTED_ASYNC';
174
+ name = 'UnexpectedAsyncError';
175
+ }
176
+ exports.UnexpectedAsyncError = UnexpectedAsyncError;
177
+ /**
178
+ * Thrown when we cannot match the parameters to {@link bupkis!expect | expect}
179
+ * or {@link bupkis!expectAsync | expectAsync} to any known assertion.
180
+ *
181
+ * @group Errors
182
+ */
183
+ class UnknownAssertionError extends BupkisError {
184
+ args;
185
+ code = 'ERR_BUPKIS_UNKNOWN_ASSERTION';
186
+ name = 'UnknownAssertionError';
187
+ constructor(message, options) {
188
+ const { args, ...rest } = options;
189
+ super(message, rest);
190
+ this.args = args;
191
+ }
192
+ }
193
+ exports.UnknownAssertionError = UnknownAssertionError;
194
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"}