bupkis 0.18.3 → 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 (388) hide show
  1. package/CHANGELOG.md +21 -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 +22 -19
  372. package/src/assertion/assertion-types.ts +4 -8
  373. package/src/assertion/assertion.ts +1 -1
  374. package/src/assertion/format-assertion-failure.ts +2 -0
  375. package/src/assertion/impl/assertion-util.ts +1 -2
  376. package/src/assertion/impl/iteration-util.ts +1 -3
  377. package/src/assertion/impl/sync-collection.ts +633 -7
  378. package/src/assertion/impl/sync.ts +27 -0
  379. package/src/error.ts +13 -22
  380. package/src/guards.ts +8 -14
  381. package/src/internal-schema.ts +4 -8
  382. package/src/metadata.ts +1 -2
  383. package/src/snapshot/adapter.ts +2 -3
  384. package/src/snapshot/adapters/fallback.ts +2 -3
  385. package/src/snapshot/adapters/node-test.ts +14 -20
  386. package/src/snapshot/select-adapter.ts +3 -3
  387. package/src/snapshot/serializer.ts +2 -3
  388. package/src/types.ts +2 -162
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Adapter for node:test's built-in snapshot support.
3
+ *
4
+ * Node.js native test runner includes snapshot testing capabilities as of
5
+ * Node.js v22. This adapter delegates to node:test's native `assert.snapshot()`
6
+ * function while providing the unified BUPKIS snapshot interface.
7
+ *
8
+ * @packageDocumentation
9
+ * @see https://nodejs.org/api/test.html#snapshots
10
+ */
11
+ import { AssertionError as NodeTestAssertionError } from 'node:assert';
12
+ import { inspect } from 'node:util';
13
+ import { isA, isError } from "../../guards.js";
14
+ import { isTestContext } from "../adapter.js";
15
+ import { assertNodeVersion } from "../node-version.js";
16
+ import { defaultSerializer } from "../serializer.js";
17
+ /**
18
+ * Adapter for node:test snapshot support.
19
+ *
20
+ * This adapter leverages node:test's native snapshot functionality while
21
+ * providing the unified BUPKIS snapshot interface. It's the preferred adapter
22
+ * when running tests with node:test.
23
+ *
24
+ * **Features:**
25
+ *
26
+ * - Delegates to native `assert.snapshot()`
27
+ * - Supports custom serializers
28
+ * - Automatically detects update mode from CLI flags
29
+ * - Zero configuration required
30
+ *
31
+ * **Detection:** The adapter detects node:test by checking for
32
+ * `context.assert.snapshot`.
33
+ *
34
+ * **Update Mode:** Respects the `--test-update-snapshots` flag.
35
+ *
36
+ * @example
37
+ *
38
+ * ```typescript
39
+ * import test from 'node:test';
40
+ * import { expect } from 'bupkis';
41
+ *
42
+ * test('renders component', (t) => {
43
+ * const output = render(<MyComponent />);
44
+ * expect(output, 'to match snapshot', t);
45
+ * });
46
+ * ```
47
+ *
48
+ * @example
49
+ *
50
+ * ```typescript
51
+ * // With custom serializer
52
+ * test('redacts secrets', (t) => {
53
+ * const data = { public: 'visible', secret: 'password123' };
54
+ * expect(data, 'to match snapshot', t, {
55
+ * serializer: (value: any) =>
56
+ * JSON.stringify({ ...value, secret: '[REDACTED]' }, null, 2),
57
+ * });
58
+ * });
59
+ * ```
60
+ */
61
+ export class NodeTestAdapter {
62
+ /**
63
+ * Adapter name for identification and debugging.
64
+ */
65
+ name = 'node:test';
66
+ /**
67
+ * Check if this adapter can handle the given context.
68
+ *
69
+ * Returns `true` if the context has the structure of a node:test context,
70
+ * specifically checking for `context.assert.snapshot`.
71
+ *
72
+ * @param context - Test context to check
73
+ * @returns `true` if this is a node:test context
74
+ * @throws {Error} If running on Node.js < 22 with a node:test context
75
+ */
76
+ canHandle(context) {
77
+ if (looksLikeNodeTestContext(context) && !isNodeTestContext(context)) {
78
+ assertNodeVersion();
79
+ }
80
+ return isNodeTestContext(context);
81
+ }
82
+ /**
83
+ * Extract snapshot context from node:test context.
84
+ *
85
+ * Extracts:
86
+ *
87
+ * - **testPath**: The test name from `context.name`
88
+ * - **filePath**: Extracted from stack trace
89
+ * - **isUpdateMode**: Detected from `--test-update-snapshots` flag
90
+ *
91
+ * @param context - Node:test context object
92
+ * @returns Normalized snapshot context
93
+ * @throws {TypeError} If context is not a valid node:test context
94
+ */
95
+ getContext(context) {
96
+ if (!isNodeTestContext(context)) {
97
+ throw new TypeError('Invalid node:test context');
98
+ }
99
+ return {
100
+ filePath: getTestFilePathFromStack(),
101
+ isUpdateMode: isNodeTestUpdateMode(),
102
+ testPath: context.name,
103
+ };
104
+ }
105
+ /**
106
+ * Perform snapshot assertion using node:test's native functionality.
107
+ *
108
+ * This method delegates to `context.assert.snapshot()`, which handles:
109
+ *
110
+ * - Snapshot file creation and management
111
+ * - Snapshot comparison
112
+ * - Update mode behavior
113
+ * - Error messages and diffs
114
+ *
115
+ * If a custom serializer is provided in options, it will be passed to
116
+ * node:test as a serializer function.
117
+ *
118
+ * @example
119
+ *
120
+ * ```typescript
121
+ * const adapter = new NodeTestAdapter();
122
+ * adapter.assertSnapshot({ foo: 'bar' }, testContext);
123
+ * ```
124
+ *
125
+ * @param value - Value to snapshot
126
+ * @param context - Node:test context object
127
+ * @param options - Optional serialization options
128
+ * @throws {TypeError} If context is not a valid node:test context
129
+ * @throws {AssertionError} If snapshot doesn't match (via node:test)
130
+ */
131
+ validateSnapshot(value, context, options) {
132
+ if (!isNodeTestContext(context)) {
133
+ throw new TypeError('Invalid node:test context');
134
+ }
135
+ // Use custom serializer if provided, otherwise use default serializer
136
+ // to handle circular references and special types
137
+ const serializers = options?.serializer
138
+ ? [options.serializer]
139
+ : [defaultSerializer];
140
+ try {
141
+ // Build snapshot options - include hint as name if provided
142
+ const snapshotOptions = { serializers };
143
+ if (options?.hint) {
144
+ snapshotOptions.name = options.hint;
145
+ }
146
+ context.assert.snapshot(value, snapshotOptions);
147
+ }
148
+ catch (err) {
149
+ if (isNodeAssertionError(err)) {
150
+ return {
151
+ actual: err.actual,
152
+ expected: err.expected,
153
+ message: err.message,
154
+ };
155
+ }
156
+ if (isError(err)) {
157
+ return {
158
+ message: err.message,
159
+ };
160
+ }
161
+ return {
162
+ message: inspect(err),
163
+ };
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Extract the test file path from the stack trace.
169
+ *
170
+ * This is a fallback method used when the test context doesn't provide the file
171
+ * path directly. It searches the stack trace for lines that look like test file
172
+ * paths (containing `.test.` or `.spec.`).
173
+ *
174
+ * @example
175
+ *
176
+ * ```typescript
177
+ * // If called from /path/to/my.test.ts, returns '/path/to/my.test.ts'
178
+ * const filePath = getTestFilePathFromStack();
179
+ * ```
180
+ *
181
+ * @function
182
+ * @returns Absolute file path, or 'unknown' if not found
183
+ */
184
+ const getTestFilePathFromStack = () => {
185
+ const stack = new Error().stack || '';
186
+ const lines = stack.split('\n');
187
+ // Look for first line that looks like a test file
188
+ for (const line of lines) {
189
+ const match = line.match(/\((.+\.(?:test|spec)\.[jt]s):\d+:\d+\)/);
190
+ if (match && match[1]) {
191
+ return match[1];
192
+ }
193
+ }
194
+ return 'unknown';
195
+ };
196
+ /**
197
+ * Check if a value looks like a node:test context (has `name` and `assert`
198
+ * properties).
199
+ *
200
+ * This is used to detect when someone is passing a node:test context on an
201
+ * older Node.js version that doesn't support `assert.snapshot`.
202
+ *
203
+ * @function
204
+ * @param value - Value to check
205
+ * @returns `true` if value looks like a node:test context
206
+ */
207
+ const looksLikeNodeTestContext = (value) => isTestContext(value) &&
208
+ 'name' in value &&
209
+ typeof value.name === 'string' &&
210
+ 'assert' in value &&
211
+ typeof value.assert === 'object' &&
212
+ value.assert !== null;
213
+ /**
214
+ * Type guard for node:test context.
215
+ *
216
+ * Checks if the given value is a valid node:test test context by verifying the
217
+ * presence of required properties.
218
+ *
219
+ * @example
220
+ *
221
+ * ```typescript
222
+ * if (isNodeTestContext(context)) {
223
+ * context.assert.snapshot(value);
224
+ * }
225
+ * ```
226
+ *
227
+ * @function
228
+ * @param value - Value to check
229
+ * @returns `true` if value is a node:test context
230
+ */
231
+ const isNodeTestContext = (value) => isTestContext(value) &&
232
+ 'assert' in value &&
233
+ typeof value.assert === 'object' &&
234
+ value.assert !== null &&
235
+ 'snapshot' in value.assert &&
236
+ typeof value.assert.snapshot === 'function';
237
+ /**
238
+ * Check if we're running in node:test update mode.
239
+ *
240
+ * Node:test uses the `--test-update-snapshots` flag to indicate that snapshots
241
+ * should be updated rather than compared. This function also respects the
242
+ * `BUPKIS_UPDATE_SNAPSHOTS` environment variable for consistency with other
243
+ * adapters.
244
+ *
245
+ * This function checks:
246
+ *
247
+ * 1. `process.execArgv` (flags passed to Node.js)
248
+ * 2. `process.argv` (arguments passed to the script)
249
+ * 3. `BUPKIS_UPDATE_SNAPSHOTS` environment variable
250
+ *
251
+ * @example
252
+ *
253
+ * ```sh
254
+ * # These commands will trigger update mode:
255
+ * node --test --test-update-snapshots
256
+ * node --test-update-snapshots=true --test test.js
257
+ * BUPKIS_UPDATE_SNAPSHOTS=1 node --test
258
+ * ```
259
+ *
260
+ * @function
261
+ * @returns `true` if in update mode
262
+ */
263
+ const isNodeTestUpdateMode = () => {
264
+ // Check for BUPKIS_UPDATE_SNAPSHOTS environment variable
265
+ if (process.env.BUPKIS_UPDATE_SNAPSHOTS === '1') {
266
+ return true;
267
+ }
268
+ // Check for --test-update-snapshots flag in exec args or argv
269
+ return (process.execArgv.some((arg) => arg === '--test-update-snapshots' ||
270
+ arg.startsWith('--test-update-snapshots=')) ||
271
+ process.argv.some((arg) => arg === '--test-update-snapshots' ||
272
+ arg.startsWith('--test-update-snapshots=')));
273
+ };
274
+ /**
275
+ * Singleton instance of the node:test adapter.
276
+ *
277
+ * This is the primary export and should be used for adapter registration.
278
+ *
279
+ * @example
280
+ *
281
+ * ```typescript
282
+ * import { nodeTestAdapter } from 'bupkis/snapshot';
283
+ * import { registerAdapter } from 'bupkis/snapshot';
284
+ *
285
+ * registerAdapter(nodeTestAdapter);
286
+ * ```
287
+ */
288
+ export const nodeTestAdapter = new NodeTestAdapter();
289
+ /**
290
+ * @function
291
+ */
292
+ const isNodeAssertionError = (value) => isA(value, NodeTestAssertionError);
293
+ //# sourceMappingURL=node-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-test.js","sourceRoot":"","sources":["../../../src/snapshot/adapters/node-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Snapshot testing utilities for BUPKIS.
4
+ *
5
+ * This module provides unified snapshot testing across multiple test frameworks
6
+ * including node:test, Jest, Vitest, Mocha, and custom test runners.
7
+ *
8
+ * **Quick Start:**
9
+ *
10
+ * ```typescript
11
+ * import test from 'node:test';
12
+ * import { expect } from 'bupkis';
13
+ *
14
+ * test('component renders correctly', (t) => {
15
+ * const output = renderComponent();
16
+ * expect(output, 'to match snapshot', t);
17
+ * });
18
+ * ```
19
+ *
20
+ * **Key Features:**
21
+ *
22
+ * - Unified API across all frameworks
23
+ * - Automatic framework detection
24
+ * - Custom serialization support
25
+ * - Multiple snapshots per test
26
+ * - Chainable with other assertions
27
+ *
28
+ * @packageDocumentation
29
+ * @see {@link snapshotAssertion} for the main snapshot assertion
30
+ * @see {@link SnapshotAdapter} for custom adapter implementation
31
+ * @see {@link defaultSerializer} for serialization utilities
32
+ */
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.nodeTestCompatibleSerializer = exports.defaultSerializer = exports.selectAdapter = exports.registerAdapter = exports.getRegisteredAdapters = exports.supportsNodeTestSnapshots = exports.MIN_NODE_MAJOR_VERSION = exports.getNodeMajorVersion = exports.assertNodeVersion = exports.nodeTestAdapter = exports.fallbackAdapter = exports.isTestContext = exports.SnapshotAssertions = exports.snapshotAssertion = void 0;
35
+ // Snapshot assertion (re-export from assertion module for convenience)
36
+ var snapshot_js_1 = require("../assertion/impl/snapshot.cjs");
37
+ Object.defineProperty(exports, "snapshotAssertion", { enumerable: true, get: function () { return snapshot_js_1.snapshotAssertion; } });
38
+ Object.defineProperty(exports, "SnapshotAssertions", { enumerable: true, get: function () { return snapshot_js_1.SnapshotAssertions; } });
39
+ var adapter_js_1 = require("./adapter.cjs");
40
+ Object.defineProperty(exports, "isTestContext", { enumerable: true, get: function () { return adapter_js_1.isTestContext; } });
41
+ // Built-in adapters
42
+ var fallback_js_1 = require("./adapters/fallback.cjs");
43
+ Object.defineProperty(exports, "fallbackAdapter", { enumerable: true, get: function () { return fallback_js_1.fallbackAdapter; } });
44
+ var node_test_js_1 = require("./adapters/node-test.cjs");
45
+ Object.defineProperty(exports, "nodeTestAdapter", { enumerable: true, get: function () { return node_test_js_1.nodeTestAdapter; } });
46
+ // Node.js version utilities
47
+ var node_version_js_1 = require("./node-version.cjs");
48
+ Object.defineProperty(exports, "assertNodeVersion", { enumerable: true, get: function () { return node_version_js_1.assertNodeVersion; } });
49
+ Object.defineProperty(exports, "getNodeMajorVersion", { enumerable: true, get: function () { return node_version_js_1.getNodeMajorVersion; } });
50
+ Object.defineProperty(exports, "MIN_NODE_MAJOR_VERSION", { enumerable: true, get: function () { return node_version_js_1.MIN_NODE_MAJOR_VERSION; } });
51
+ Object.defineProperty(exports, "supportsNodeTestSnapshots", { enumerable: true, get: function () { return node_version_js_1.supportsNodeTestSnapshots; } });
52
+ // Adapter selection
53
+ var select_adapter_js_1 = require("./select-adapter.cjs");
54
+ Object.defineProperty(exports, "getRegisteredAdapters", { enumerable: true, get: function () { return select_adapter_js_1.getRegisteredAdapters; } });
55
+ Object.defineProperty(exports, "registerAdapter", { enumerable: true, get: function () { return select_adapter_js_1.registerAdapter; } });
56
+ Object.defineProperty(exports, "selectAdapter", { enumerable: true, get: function () { return select_adapter_js_1.selectAdapter; } });
57
+ // Serialization
58
+ var serializer_js_1 = require("./serializer.cjs");
59
+ Object.defineProperty(exports, "defaultSerializer", { enumerable: true, get: function () { return serializer_js_1.defaultSerializer; } });
60
+ Object.defineProperty(exports, "nodeTestCompatibleSerializer", { enumerable: true, get: function () { return serializer_js_1.nodeTestCompatibleSerializer; } });
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAEH,uEAAuE;AACvE,8DAIuC;AAHrC,gHAAA,iBAAiB,OAAA;AACjB,iHAAA,kBAAkB,OAAA;AAYpB,4CAA6C;AAApC,2GAAA,aAAa,OAAA;AAEtB,oBAAoB;AACpB,uDAA+E;AAAtE,8GAAA,eAAe,OAAA;AAExB,yDAAgF;AAAvE,+GAAA,eAAe,OAAA;AAExB,4BAA4B;AAC5B,sDAK2B;AAJzB,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,yHAAA,sBAAsB,OAAA;AACtB,4HAAA,yBAAyB,OAAA;AAG3B,oBAAoB;AACpB,0DAI6B;AAH3B,0HAAA,qBAAqB,OAAA;AACrB,oHAAA,eAAe,OAAA;AACf,kHAAA,aAAa,OAAA;AAGf,gBAAgB;AAChB,kDAIyB;AAHvB,kHAAA,iBAAiB,OAAA;AACjB,6HAAA,4BAA4B,OAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Snapshot testing utilities for BUPKIS.
3
+ *
4
+ * This module provides unified snapshot testing across multiple test frameworks
5
+ * including node:test, Jest, Vitest, Mocha, and custom test runners.
6
+ *
7
+ * **Quick Start:**
8
+ *
9
+ * ```typescript
10
+ * import test from 'node:test';
11
+ * import { expect } from 'bupkis';
12
+ *
13
+ * test('component renders correctly', (t) => {
14
+ * const output = renderComponent();
15
+ * expect(output, 'to match snapshot', t);
16
+ * });
17
+ * ```
18
+ *
19
+ * **Key Features:**
20
+ *
21
+ * - Unified API across all frameworks
22
+ * - Automatic framework detection
23
+ * - Custom serialization support
24
+ * - Multiple snapshots per test
25
+ * - Chainable with other assertions
26
+ *
27
+ * @packageDocumentation
28
+ * @see {@link snapshotAssertion} for the main snapshot assertion
29
+ * @see {@link SnapshotAdapter} for custom adapter implementation
30
+ * @see {@link defaultSerializer} for serialization utilities
31
+ */
32
+ export { snapshotAssertion, SnapshotAssertions, type SnapshotAssertions as SnapshotAssertionsType, } from "../assertion/impl/snapshot.cjs";
33
+ export type { SnapshotAdapter, SnapshotContext, SnapshotOptions, SnapshotSerializer, } from "./adapter.cjs";
34
+ export { isTestContext } from "./adapter.cjs";
35
+ export { fallbackAdapter, type FallbackAdapter } from "./adapters/fallback.cjs";
36
+ export { nodeTestAdapter, type NodeTestAdapter } from "./adapters/node-test.cjs";
37
+ export { assertNodeVersion, getNodeMajorVersion, MIN_NODE_MAJOR_VERSION, supportsNodeTestSnapshots, } from "./node-version.cjs";
38
+ export { getRegisteredAdapters, registerAdapter, selectAdapter, } from "./select-adapter.cjs";
39
+ export { defaultSerializer, nodeTestCompatibleSerializer, type SerializerOptions, } from "./serializer.cjs";
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,kBAAkB,IAAI,sBAAsB,GAClD,uCAAsC;AAGvC,YAAY,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,GACnB,sBAAqB;AAEtB,OAAO,EAAE,aAAa,EAAE,sBAAqB;AAG7C,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,gCAA+B;AAE/E,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,iCAAgC;AAGhF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,2BAA0B;AAG3B,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,6BAA4B;AAG7B,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,iBAAiB,GACvB,yBAAwB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Snapshot testing utilities for BUPKIS.
3
+ *
4
+ * This module provides unified snapshot testing across multiple test frameworks
5
+ * including node:test, Jest, Vitest, Mocha, and custom test runners.
6
+ *
7
+ * **Quick Start:**
8
+ *
9
+ * ```typescript
10
+ * import test from 'node:test';
11
+ * import { expect } from 'bupkis';
12
+ *
13
+ * test('component renders correctly', (t) => {
14
+ * const output = renderComponent();
15
+ * expect(output, 'to match snapshot', t);
16
+ * });
17
+ * ```
18
+ *
19
+ * **Key Features:**
20
+ *
21
+ * - Unified API across all frameworks
22
+ * - Automatic framework detection
23
+ * - Custom serialization support
24
+ * - Multiple snapshots per test
25
+ * - Chainable with other assertions
26
+ *
27
+ * @packageDocumentation
28
+ * @see {@link snapshotAssertion} for the main snapshot assertion
29
+ * @see {@link SnapshotAdapter} for custom adapter implementation
30
+ * @see {@link defaultSerializer} for serialization utilities
31
+ */
32
+ export { snapshotAssertion, SnapshotAssertions, type SnapshotAssertions as SnapshotAssertionsType, } from "../assertion/impl/snapshot.js";
33
+ export type { SnapshotAdapter, SnapshotContext, SnapshotOptions, SnapshotSerializer, } from "./adapter.js";
34
+ export { isTestContext } from "./adapter.js";
35
+ export { fallbackAdapter, type FallbackAdapter } from "./adapters/fallback.js";
36
+ export { nodeTestAdapter, type NodeTestAdapter } from "./adapters/node-test.js";
37
+ export { assertNodeVersion, getNodeMajorVersion, MIN_NODE_MAJOR_VERSION, supportsNodeTestSnapshots, } from "./node-version.js";
38
+ export { getRegisteredAdapters, registerAdapter, selectAdapter, } from "./select-adapter.js";
39
+ export { defaultSerializer, nodeTestCompatibleSerializer, type SerializerOptions, } from "./serializer.js";
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,kBAAkB,IAAI,sBAAsB,GAClD,sCAAsC;AAGvC,YAAY,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,GACnB,qBAAqB;AAEtB,OAAO,EAAE,aAAa,EAAE,qBAAqB;AAG7C,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,+BAA+B;AAE/E,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,gCAAgC;AAGhF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,0BAA0B;AAG3B,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,4BAA4B;AAG7B,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,iBAAiB,GACvB,wBAAwB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Snapshot testing utilities for BUPKIS.
3
+ *
4
+ * This module provides unified snapshot testing across multiple test frameworks
5
+ * including node:test, Jest, Vitest, Mocha, and custom test runners.
6
+ *
7
+ * **Quick Start:**
8
+ *
9
+ * ```typescript
10
+ * import test from 'node:test';
11
+ * import { expect } from 'bupkis';
12
+ *
13
+ * test('component renders correctly', (t) => {
14
+ * const output = renderComponent();
15
+ * expect(output, 'to match snapshot', t);
16
+ * });
17
+ * ```
18
+ *
19
+ * **Key Features:**
20
+ *
21
+ * - Unified API across all frameworks
22
+ * - Automatic framework detection
23
+ * - Custom serialization support
24
+ * - Multiple snapshots per test
25
+ * - Chainable with other assertions
26
+ *
27
+ * @packageDocumentation
28
+ * @see {@link snapshotAssertion} for the main snapshot assertion
29
+ * @see {@link SnapshotAdapter} for custom adapter implementation
30
+ * @see {@link defaultSerializer} for serialization utilities
31
+ */
32
+ // Snapshot assertion (re-export from assertion module for convenience)
33
+ export { snapshotAssertion, SnapshotAssertions, } from "../assertion/impl/snapshot.js";
34
+ export { isTestContext } from "./adapter.js";
35
+ // Built-in adapters
36
+ export { fallbackAdapter } from "./adapters/fallback.js";
37
+ export { nodeTestAdapter } from "./adapters/node-test.js";
38
+ // Node.js version utilities
39
+ export { assertNodeVersion, getNodeMajorVersion, MIN_NODE_MAJOR_VERSION, supportsNodeTestSnapshots, } from "./node-version.js";
40
+ // Adapter selection
41
+ export { getRegisteredAdapters, registerAdapter, selectAdapter, } from "./select-adapter.js";
42
+ // Serialization
43
+ export { defaultSerializer, nodeTestCompatibleSerializer, } from "./serializer.js";
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,uEAAuE;AACvE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAEnB,sCAAsC;AAUvC,OAAO,EAAE,aAAa,EAAE,qBAAqB;AAE7C,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAwB,+BAA+B;AAE/E,OAAO,EAAE,eAAe,EAAwB,gCAAgC;AAEhF,4BAA4B;AAC5B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,0BAA0B;AAE3B,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,4BAA4B;AAE7B,gBAAgB;AAChB,OAAO,EACL,iBAAiB,EACjB,4BAA4B,GAE7B,wBAAwB"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * Node.js version utilities for snapshot testing.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.assertNodeVersion = exports.supportsNodeTestSnapshots = exports.getNodeMajorVersion = exports.MIN_NODE_MAJOR_VERSION = void 0;
9
+ /**
10
+ * Minimum Node.js major version required for snapshot testing with node:test.
11
+ *
12
+ * Node.js v22 is the first version with stable `assert.snapshot()` support in
13
+ * the native test runner.
14
+ */
15
+ exports.MIN_NODE_MAJOR_VERSION = 22;
16
+ /**
17
+ * Get the current Node.js major version.
18
+ *
19
+ * @function
20
+ * @returns Major version number (e.g., 20, 22, 24)
21
+ */
22
+ const getNodeMajorVersion = () => {
23
+ const parts = process.versions.node.split('.');
24
+ return Number(parts[0]) || 0;
25
+ };
26
+ exports.getNodeMajorVersion = getNodeMajorVersion;
27
+ /**
28
+ * Check if the current Node.js version supports snapshot testing with
29
+ * node:test.
30
+ *
31
+ * @returns `true` if Node.js version >= {@link MIN_NODE_MAJOR_VERSION}
32
+ */
33
+ exports.supportsNodeTestSnapshots = (0, exports.getNodeMajorVersion)() >= exports.MIN_NODE_MAJOR_VERSION;
34
+ /**
35
+ * Assert that the Node.js version supports snapshot testing.
36
+ *
37
+ * @function
38
+ * @throws {Error} If Node.js version is less than {@link MIN_NODE_MAJOR_VERSION}
39
+ */
40
+ const assertNodeVersion = () => {
41
+ const major = (0, exports.getNodeMajorVersion)();
42
+ if (major < exports.MIN_NODE_MAJOR_VERSION) {
43
+ throw new Error(`Snapshot testing with node:test requires Node.js v${exports.MIN_NODE_MAJOR_VERSION} or later. ` +
44
+ `Current version: v${process.versions.node}. ` +
45
+ `Please upgrade Node.js or use a different snapshot adapter (e.g., pass an explicit snapshot name string instead of a test context).`);
46
+ }
47
+ };
48
+ exports.assertNodeVersion = assertNodeVersion;
49
+ //# sourceMappingURL=node-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.js","sourceRoot":"","sources":["../../src/snapshot/node-version.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;;;;GAKG;AACU,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,GAAW,EAAE;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAHW,QAAA,mBAAmB,uBAG9B;AAEF;;;;;GAKG;AACU,QAAA,yBAAyB,GACpC,IAAA,2BAAmB,GAAE,IAAI,8BAAsB,CAAC;AAElD;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,GAAS,EAAE;IAC1C,MAAM,KAAK,GAAG,IAAA,2BAAmB,GAAE,CAAC;IACpC,IAAI,KAAK,GAAG,8BAAsB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,qDAAqD,8BAAsB,aAAa;YACtF,qBAAqB,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI;YAC9C,qIAAqI,CACxI,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Node.js version utilities for snapshot testing.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ /**
7
+ * Minimum Node.js major version required for snapshot testing with node:test.
8
+ *
9
+ * Node.js v22 is the first version with stable `assert.snapshot()` support in
10
+ * the native test runner.
11
+ */
12
+ export declare const MIN_NODE_MAJOR_VERSION = 22;
13
+ /**
14
+ * Get the current Node.js major version.
15
+ *
16
+ * @function
17
+ * @returns Major version number (e.g., 20, 22, 24)
18
+ */
19
+ export declare const getNodeMajorVersion: () => number;
20
+ /**
21
+ * Check if the current Node.js version supports snapshot testing with
22
+ * node:test.
23
+ *
24
+ * @returns `true` if Node.js version >= {@link MIN_NODE_MAJOR_VERSION}
25
+ */
26
+ export declare const supportsNodeTestSnapshots: boolean;
27
+ /**
28
+ * Assert that the Node.js version supports snapshot testing.
29
+ *
30
+ * @function
31
+ * @throws {Error} If Node.js version is less than {@link MIN_NODE_MAJOR_VERSION}
32
+ */
33
+ export declare const assertNodeVersion: () => void;
34
+ //# sourceMappingURL=node-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../../src/snapshot/node-version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAAO,MAGtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,SACW,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,IASpC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Node.js version utilities for snapshot testing.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ /**
7
+ * Minimum Node.js major version required for snapshot testing with node:test.
8
+ *
9
+ * Node.js v22 is the first version with stable `assert.snapshot()` support in
10
+ * the native test runner.
11
+ */
12
+ export declare const MIN_NODE_MAJOR_VERSION = 22;
13
+ /**
14
+ * Get the current Node.js major version.
15
+ *
16
+ * @function
17
+ * @returns Major version number (e.g., 20, 22, 24)
18
+ */
19
+ export declare const getNodeMajorVersion: () => number;
20
+ /**
21
+ * Check if the current Node.js version supports snapshot testing with
22
+ * node:test.
23
+ *
24
+ * @returns `true` if Node.js version >= {@link MIN_NODE_MAJOR_VERSION}
25
+ */
26
+ export declare const supportsNodeTestSnapshots: boolean;
27
+ /**
28
+ * Assert that the Node.js version supports snapshot testing.
29
+ *
30
+ * @function
31
+ * @throws {Error} If Node.js version is less than {@link MIN_NODE_MAJOR_VERSION}
32
+ */
33
+ export declare const assertNodeVersion: () => void;
34
+ //# sourceMappingURL=node-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../../src/snapshot/node-version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAAO,MAGtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,SACW,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,IASpC,CAAC"}