bupkis 0.18.1 → 0.18.3

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 (379) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.json +3 -6
  3. package/src/assertion/assertion-sync.ts +1 -1
  4. package/src/assertion/assertion-types.ts +4 -4
  5. package/src/assertion/assertion.ts +11 -6
  6. package/src/assertion/impl/iteration-util.ts +2 -2
  7. package/src/assertion/impl/sync-parametric.ts +1 -1
  8. package/src/expect.ts +1 -5
  9. package/src/guards.ts +24 -24
  10. package/src/internal-schema.ts +16 -32
  11. package/src/value-to-schema.ts +1 -1
  12. package/dist/assertion/assertion-async.cjs +0 -268
  13. package/dist/assertion/assertion-async.cjs.map +0 -1
  14. package/dist/assertion/assertion-async.d.cts +0 -40
  15. package/dist/assertion/assertion-async.d.cts.map +0 -1
  16. package/dist/assertion/assertion-async.d.ts +0 -40
  17. package/dist/assertion/assertion-async.d.ts.map +0 -1
  18. package/dist/assertion/assertion-async.js +0 -259
  19. package/dist/assertion/assertion-async.js.map +0 -1
  20. package/dist/assertion/assertion-standard-schema-async.cjs +0 -132
  21. package/dist/assertion/assertion-standard-schema-async.cjs.map +0 -1
  22. package/dist/assertion/assertion-standard-schema-async.d.cts +0 -52
  23. package/dist/assertion/assertion-standard-schema-async.d.cts.map +0 -1
  24. package/dist/assertion/assertion-standard-schema-async.d.ts +0 -52
  25. package/dist/assertion/assertion-standard-schema-async.d.ts.map +0 -1
  26. package/dist/assertion/assertion-standard-schema-async.js +0 -128
  27. package/dist/assertion/assertion-standard-schema-async.js.map +0 -1
  28. package/dist/assertion/assertion-standard-schema-sync.cjs +0 -141
  29. package/dist/assertion/assertion-standard-schema-sync.cjs.map +0 -1
  30. package/dist/assertion/assertion-standard-schema-sync.d.cts +0 -52
  31. package/dist/assertion/assertion-standard-schema-sync.d.cts.map +0 -1
  32. package/dist/assertion/assertion-standard-schema-sync.d.ts +0 -52
  33. package/dist/assertion/assertion-standard-schema-sync.d.ts.map +0 -1
  34. package/dist/assertion/assertion-standard-schema-sync.js +0 -137
  35. package/dist/assertion/assertion-standard-schema-sync.js.map +0 -1
  36. package/dist/assertion/assertion-sync.cjs +0 -284
  37. package/dist/assertion/assertion-sync.cjs.map +0 -1
  38. package/dist/assertion/assertion-sync.d.cts +0 -60
  39. package/dist/assertion/assertion-sync.d.cts.map +0 -1
  40. package/dist/assertion/assertion-sync.d.ts +0 -60
  41. package/dist/assertion/assertion-sync.d.ts.map +0 -1
  42. package/dist/assertion/assertion-sync.js +0 -275
  43. package/dist/assertion/assertion-sync.js.map +0 -1
  44. package/dist/assertion/assertion-types.cjs +0 -20
  45. package/dist/assertion/assertion-types.cjs.map +0 -1
  46. package/dist/assertion/assertion-types.d.cts +0 -1086
  47. package/dist/assertion/assertion-types.d.cts.map +0 -1
  48. package/dist/assertion/assertion-types.d.ts +0 -1086
  49. package/dist/assertion/assertion-types.d.ts.map +0 -1
  50. package/dist/assertion/assertion-types.js +0 -19
  51. package/dist/assertion/assertion-types.js.map +0 -1
  52. package/dist/assertion/assertion.cjs +0 -382
  53. package/dist/assertion/assertion.cjs.map +0 -1
  54. package/dist/assertion/assertion.d.cts +0 -109
  55. package/dist/assertion/assertion.d.cts.map +0 -1
  56. package/dist/assertion/assertion.d.ts +0 -109
  57. package/dist/assertion/assertion.d.ts.map +0 -1
  58. package/dist/assertion/assertion.js +0 -375
  59. package/dist/assertion/assertion.js.map +0 -1
  60. package/dist/assertion/create.cjs +0 -148
  61. package/dist/assertion/create.cjs.map +0 -1
  62. package/dist/assertion/create.d.cts +0 -85
  63. package/dist/assertion/create.d.cts.map +0 -1
  64. package/dist/assertion/create.d.ts +0 -85
  65. package/dist/assertion/create.d.ts.map +0 -1
  66. package/dist/assertion/create.js +0 -143
  67. package/dist/assertion/create.js.map +0 -1
  68. package/dist/assertion/format-assertion-failure.cjs +0 -63
  69. package/dist/assertion/format-assertion-failure.cjs.map +0 -1
  70. package/dist/assertion/format-assertion-failure.d.cts +0 -21
  71. package/dist/assertion/format-assertion-failure.d.cts.map +0 -1
  72. package/dist/assertion/format-assertion-failure.d.ts +0 -21
  73. package/dist/assertion/format-assertion-failure.d.ts.map +0 -1
  74. package/dist/assertion/format-assertion-failure.js +0 -59
  75. package/dist/assertion/format-assertion-failure.js.map +0 -1
  76. package/dist/assertion/impl/assertion-util.cjs +0 -68
  77. package/dist/assertion/impl/assertion-util.cjs.map +0 -1
  78. package/dist/assertion/impl/assertion-util.d.cts +0 -36
  79. package/dist/assertion/impl/assertion-util.d.cts.map +0 -1
  80. package/dist/assertion/impl/assertion-util.d.ts +0 -36
  81. package/dist/assertion/impl/assertion-util.d.ts.map +0 -1
  82. package/dist/assertion/impl/assertion-util.js +0 -62
  83. package/dist/assertion/impl/assertion-util.js.map +0 -1
  84. package/dist/assertion/impl/async-iterable.cjs +0 -627
  85. package/dist/assertion/impl/async-iterable.cjs.map +0 -1
  86. package/dist/assertion/impl/async-iterable.d.cts +0 -406
  87. package/dist/assertion/impl/async-iterable.d.cts.map +0 -1
  88. package/dist/assertion/impl/async-iterable.d.ts +0 -406
  89. package/dist/assertion/impl/async-iterable.d.ts.map +0 -1
  90. package/dist/assertion/impl/async-iterable.js +0 -624
  91. package/dist/assertion/impl/async-iterable.js.map +0 -1
  92. package/dist/assertion/impl/async-parametric.cjs +0 -412
  93. package/dist/assertion/impl/async-parametric.cjs.map +0 -1
  94. package/dist/assertion/impl/async-parametric.d.cts +0 -278
  95. package/dist/assertion/impl/async-parametric.d.cts.map +0 -1
  96. package/dist/assertion/impl/async-parametric.d.ts +0 -278
  97. package/dist/assertion/impl/async-parametric.d.ts.map +0 -1
  98. package/dist/assertion/impl/async-parametric.js +0 -409
  99. package/dist/assertion/impl/async-parametric.js.map +0 -1
  100. package/dist/assertion/impl/async.cjs +0 -56
  101. package/dist/assertion/impl/async.cjs.map +0 -1
  102. package/dist/assertion/impl/async.d.cts +0 -179
  103. package/dist/assertion/impl/async.d.cts.map +0 -1
  104. package/dist/assertion/impl/async.d.ts +0 -179
  105. package/dist/assertion/impl/async.d.ts.map +0 -1
  106. package/dist/assertion/impl/async.js +0 -39
  107. package/dist/assertion/impl/async.js.map +0 -1
  108. package/dist/assertion/impl/index.cjs +0 -37
  109. package/dist/assertion/impl/index.cjs.map +0 -1
  110. package/dist/assertion/impl/index.d.cts +0 -21
  111. package/dist/assertion/impl/index.d.cts.map +0 -1
  112. package/dist/assertion/impl/index.d.ts +0 -21
  113. package/dist/assertion/impl/index.d.ts.map +0 -1
  114. package/dist/assertion/impl/index.js +0 -21
  115. package/dist/assertion/impl/index.js.map +0 -1
  116. package/dist/assertion/impl/iteration-util.cjs +0 -297
  117. package/dist/assertion/impl/iteration-util.cjs.map +0 -1
  118. package/dist/assertion/impl/iteration-util.d.cts +0 -12
  119. package/dist/assertion/impl/iteration-util.d.cts.map +0 -1
  120. package/dist/assertion/impl/iteration-util.d.ts +0 -12
  121. package/dist/assertion/impl/iteration-util.d.ts.map +0 -1
  122. package/dist/assertion/impl/iteration-util.js +0 -282
  123. package/dist/assertion/impl/iteration-util.js.map +0 -1
  124. package/dist/assertion/impl/snapshot.cjs +0 -276
  125. package/dist/assertion/impl/snapshot.cjs.map +0 -1
  126. package/dist/assertion/impl/snapshot.d.cts +0 -278
  127. package/dist/assertion/impl/snapshot.d.cts.map +0 -1
  128. package/dist/assertion/impl/snapshot.d.ts +0 -278
  129. package/dist/assertion/impl/snapshot.d.ts.map +0 -1
  130. package/dist/assertion/impl/snapshot.js +0 -273
  131. package/dist/assertion/impl/snapshot.js.map +0 -1
  132. package/dist/assertion/impl/sync-basic.cjs +0 -553
  133. package/dist/assertion/impl/sync-basic.cjs.map +0 -1
  134. package/dist/assertion/impl/sync-basic.d.cts +0 -528
  135. package/dist/assertion/impl/sync-basic.d.cts.map +0 -1
  136. package/dist/assertion/impl/sync-basic.d.ts +0 -528
  137. package/dist/assertion/impl/sync-basic.d.ts.map +0 -1
  138. package/dist/assertion/impl/sync-basic.js +0 -550
  139. package/dist/assertion/impl/sync-basic.js.map +0 -1
  140. package/dist/assertion/impl/sync-collection.cjs +0 -856
  141. package/dist/assertion/impl/sync-collection.cjs.map +0 -1
  142. package/dist/assertion/impl/sync-collection.d.cts +0 -607
  143. package/dist/assertion/impl/sync-collection.d.cts.map +0 -1
  144. package/dist/assertion/impl/sync-collection.d.ts +0 -607
  145. package/dist/assertion/impl/sync-collection.d.ts.map +0 -1
  146. package/dist/assertion/impl/sync-collection.js +0 -850
  147. package/dist/assertion/impl/sync-collection.js.map +0 -1
  148. package/dist/assertion/impl/sync-date.cjs +0 -341
  149. package/dist/assertion/impl/sync-date.cjs.map +0 -1
  150. package/dist/assertion/impl/sync-date.d.cts +0 -209
  151. package/dist/assertion/impl/sync-date.d.cts.map +0 -1
  152. package/dist/assertion/impl/sync-date.d.ts +0 -209
  153. package/dist/assertion/impl/sync-date.d.ts.map +0 -1
  154. package/dist/assertion/impl/sync-date.js +0 -338
  155. package/dist/assertion/impl/sync-date.js.map +0 -1
  156. package/dist/assertion/impl/sync-esoteric.cjs +0 -214
  157. package/dist/assertion/impl/sync-esoteric.cjs.map +0 -1
  158. package/dist/assertion/impl/sync-esoteric.d.cts +0 -191
  159. package/dist/assertion/impl/sync-esoteric.d.cts.map +0 -1
  160. package/dist/assertion/impl/sync-esoteric.d.ts +0 -191
  161. package/dist/assertion/impl/sync-esoteric.d.ts.map +0 -1
  162. package/dist/assertion/impl/sync-esoteric.js +0 -211
  163. package/dist/assertion/impl/sync-esoteric.js.map +0 -1
  164. package/dist/assertion/impl/sync-iterable.cjs +0 -512
  165. package/dist/assertion/impl/sync-iterable.cjs.map +0 -1
  166. package/dist/assertion/impl/sync-iterable.d.cts +0 -334
  167. package/dist/assertion/impl/sync-iterable.d.cts.map +0 -1
  168. package/dist/assertion/impl/sync-iterable.d.ts +0 -334
  169. package/dist/assertion/impl/sync-iterable.d.ts.map +0 -1
  170. package/dist/assertion/impl/sync-iterable.js +0 -509
  171. package/dist/assertion/impl/sync-iterable.js.map +0 -1
  172. package/dist/assertion/impl/sync-parametric.cjs +0 -805
  173. package/dist/assertion/impl/sync-parametric.cjs.map +0 -1
  174. package/dist/assertion/impl/sync-parametric.d.cts +0 -560
  175. package/dist/assertion/impl/sync-parametric.d.cts.map +0 -1
  176. package/dist/assertion/impl/sync-parametric.d.ts +0 -560
  177. package/dist/assertion/impl/sync-parametric.d.ts.map +0 -1
  178. package/dist/assertion/impl/sync-parametric.js +0 -802
  179. package/dist/assertion/impl/sync-parametric.js.map +0 -1
  180. package/dist/assertion/impl/sync.cjs +0 -214
  181. package/dist/assertion/impl/sync.cjs.map +0 -1
  182. package/dist/assertion/impl/sync.d.cts +0 -512
  183. package/dist/assertion/impl/sync.d.cts.map +0 -1
  184. package/dist/assertion/impl/sync.d.ts +0 -512
  185. package/dist/assertion/impl/sync.d.ts.map +0 -1
  186. package/dist/assertion/impl/sync.js +0 -197
  187. package/dist/assertion/impl/sync.js.map +0 -1
  188. package/dist/assertion/index.cjs +0 -38
  189. package/dist/assertion/index.cjs.map +0 -1
  190. package/dist/assertion/index.d.cts +0 -18
  191. package/dist/assertion/index.d.cts.map +0 -1
  192. package/dist/assertion/index.d.ts +0 -18
  193. package/dist/assertion/index.d.ts.map +0 -1
  194. package/dist/assertion/index.js +0 -17
  195. package/dist/assertion/index.js.map +0 -1
  196. package/dist/assertion/slotify.cjs +0 -165
  197. package/dist/assertion/slotify.cjs.map +0 -1
  198. package/dist/assertion/slotify.d.cts +0 -11
  199. package/dist/assertion/slotify.d.cts.map +0 -1
  200. package/dist/assertion/slotify.d.ts +0 -11
  201. package/dist/assertion/slotify.d.ts.map +0 -1
  202. package/dist/assertion/slotify.js +0 -161
  203. package/dist/assertion/slotify.js.map +0 -1
  204. package/dist/bootstrap.cjs +0 -43
  205. package/dist/bootstrap.cjs.map +0 -1
  206. package/dist/bootstrap.d.cts +0 -27
  207. package/dist/bootstrap.d.cts.map +0 -1
  208. package/dist/bootstrap.d.ts +0 -27
  209. package/dist/bootstrap.d.ts.map +0 -1
  210. package/dist/bootstrap.js +0 -40
  211. package/dist/bootstrap.js.map +0 -1
  212. package/dist/constant.cjs +0 -82
  213. package/dist/constant.cjs.map +0 -1
  214. package/dist/constant.d.cts +0 -69
  215. package/dist/constant.d.cts.map +0 -1
  216. package/dist/constant.d.ts +0 -69
  217. package/dist/constant.d.ts.map +0 -1
  218. package/dist/constant.js +0 -79
  219. package/dist/constant.js.map +0 -1
  220. package/dist/diff.cjs +0 -340
  221. package/dist/diff.cjs.map +0 -1
  222. package/dist/diff.d.cts +0 -51
  223. package/dist/diff.d.cts.map +0 -1
  224. package/dist/diff.d.ts +0 -51
  225. package/dist/diff.d.ts.map +0 -1
  226. package/dist/diff.js +0 -334
  227. package/dist/diff.js.map +0 -1
  228. package/dist/error.cjs +0 -204
  229. package/dist/error.cjs.map +0 -1
  230. package/dist/error.d.cts +0 -212
  231. package/dist/error.d.cts.map +0 -1
  232. package/dist/error.d.ts +0 -212
  233. package/dist/error.d.ts.map +0 -1
  234. package/dist/error.js +0 -191
  235. package/dist/error.js.map +0 -1
  236. package/dist/expect.cjs +0 -590
  237. package/dist/expect.cjs.map +0 -1
  238. package/dist/expect.d.cts +0 -138
  239. package/dist/expect.d.cts.map +0 -1
  240. package/dist/expect.d.ts +0 -138
  241. package/dist/expect.d.ts.map +0 -1
  242. package/dist/expect.js +0 -582
  243. package/dist/expect.js.map +0 -1
  244. package/dist/guards.cjs +0 -297
  245. package/dist/guards.cjs.map +0 -1
  246. package/dist/guards.d.cts +0 -231
  247. package/dist/guards.d.cts.map +0 -1
  248. package/dist/guards.d.ts +0 -231
  249. package/dist/guards.d.ts.map +0 -1
  250. package/dist/guards.js +0 -277
  251. package/dist/guards.js.map +0 -1
  252. package/dist/index.cjs +0 -111
  253. package/dist/index.cjs.map +0 -1
  254. package/dist/index.d.cts +0 -448
  255. package/dist/index.d.cts.map +0 -1
  256. package/dist/index.d.ts +0 -448
  257. package/dist/index.d.ts.map +0 -1
  258. package/dist/index.js +0 -71
  259. package/dist/index.js.map +0 -1
  260. package/dist/internal-schema.cjs +0 -253
  261. package/dist/internal-schema.cjs.map +0 -1
  262. package/dist/internal-schema.d.cts +0 -8
  263. package/dist/internal-schema.d.cts.map +0 -1
  264. package/dist/internal-schema.d.ts +0 -8
  265. package/dist/internal-schema.d.ts.map +0 -1
  266. package/dist/internal-schema.js +0 -248
  267. package/dist/internal-schema.js.map +0 -1
  268. package/dist/metadata.cjs +0 -57
  269. package/dist/metadata.cjs.map +0 -1
  270. package/dist/metadata.d.cts +0 -27
  271. package/dist/metadata.d.cts.map +0 -1
  272. package/dist/metadata.d.ts +0 -27
  273. package/dist/metadata.d.ts.map +0 -1
  274. package/dist/metadata.js +0 -54
  275. package/dist/metadata.js.map +0 -1
  276. package/dist/schema.cjs +0 -1522
  277. package/dist/schema.cjs.map +0 -1
  278. package/dist/schema.d.cts +0 -1196
  279. package/dist/schema.d.cts.map +0 -1
  280. package/dist/schema.d.ts +0 -1196
  281. package/dist/schema.d.ts.map +0 -1
  282. package/dist/schema.js +0 -1516
  283. package/dist/schema.js.map +0 -1
  284. package/dist/snapshot/adapter.cjs +0 -31
  285. package/dist/snapshot/adapter.cjs.map +0 -1
  286. package/dist/snapshot/adapter.d.cts +0 -258
  287. package/dist/snapshot/adapter.d.cts.map +0 -1
  288. package/dist/snapshot/adapter.d.ts +0 -258
  289. package/dist/snapshot/adapter.d.ts.map +0 -1
  290. package/dist/snapshot/adapter.js +0 -27
  291. package/dist/snapshot/adapter.js.map +0 -1
  292. package/dist/snapshot/adapters/fallback.cjs +0 -453
  293. package/dist/snapshot/adapters/fallback.cjs.map +0 -1
  294. package/dist/snapshot/adapters/fallback.d.cts +0 -185
  295. package/dist/snapshot/adapters/fallback.d.cts.map +0 -1
  296. package/dist/snapshot/adapters/fallback.d.ts +0 -185
  297. package/dist/snapshot/adapters/fallback.d.ts.map +0 -1
  298. package/dist/snapshot/adapters/fallback.js +0 -446
  299. package/dist/snapshot/adapters/fallback.js.map +0 -1
  300. package/dist/snapshot/adapters/node-test.cjs +0 -301
  301. package/dist/snapshot/adapters/node-test.cjs.map +0 -1
  302. package/dist/snapshot/adapters/node-test.d.cts +0 -131
  303. package/dist/snapshot/adapters/node-test.d.cts.map +0 -1
  304. package/dist/snapshot/adapters/node-test.d.ts +0 -131
  305. package/dist/snapshot/adapters/node-test.d.ts.map +0 -1
  306. package/dist/snapshot/adapters/node-test.js +0 -297
  307. package/dist/snapshot/adapters/node-test.js.map +0 -1
  308. package/dist/snapshot/index.cjs +0 -61
  309. package/dist/snapshot/index.cjs.map +0 -1
  310. package/dist/snapshot/index.d.cts +0 -40
  311. package/dist/snapshot/index.d.cts.map +0 -1
  312. package/dist/snapshot/index.d.ts +0 -40
  313. package/dist/snapshot/index.d.ts.map +0 -1
  314. package/dist/snapshot/index.js +0 -44
  315. package/dist/snapshot/index.js.map +0 -1
  316. package/dist/snapshot/node-version.cjs +0 -49
  317. package/dist/snapshot/node-version.cjs.map +0 -1
  318. package/dist/snapshot/node-version.d.cts +0 -34
  319. package/dist/snapshot/node-version.d.cts.map +0 -1
  320. package/dist/snapshot/node-version.d.ts +0 -34
  321. package/dist/snapshot/node-version.d.ts.map +0 -1
  322. package/dist/snapshot/node-version.js +0 -44
  323. package/dist/snapshot/node-version.js.map +0 -1
  324. package/dist/snapshot/select-adapter.cjs +0 -170
  325. package/dist/snapshot/select-adapter.cjs.map +0 -1
  326. package/dist/snapshot/select-adapter.d.cts +0 -128
  327. package/dist/snapshot/select-adapter.d.cts.map +0 -1
  328. package/dist/snapshot/select-adapter.d.ts +0 -128
  329. package/dist/snapshot/select-adapter.d.ts.map +0 -1
  330. package/dist/snapshot/select-adapter.js +0 -164
  331. package/dist/snapshot/select-adapter.js.map +0 -1
  332. package/dist/snapshot/serializer.cjs +0 -246
  333. package/dist/snapshot/serializer.cjs.map +0 -1
  334. package/dist/snapshot/serializer.d.cts +0 -126
  335. package/dist/snapshot/serializer.d.cts.map +0 -1
  336. package/dist/snapshot/serializer.d.ts +0 -126
  337. package/dist/snapshot/serializer.d.ts.map +0 -1
  338. package/dist/snapshot/serializer.js +0 -238
  339. package/dist/snapshot/serializer.js.map +0 -1
  340. package/dist/standard-schema.cjs +0 -13
  341. package/dist/standard-schema.cjs.map +0 -1
  342. package/dist/standard-schema.d.cts +0 -192
  343. package/dist/standard-schema.d.cts.map +0 -1
  344. package/dist/standard-schema.d.ts +0 -192
  345. package/dist/standard-schema.d.ts.map +0 -1
  346. package/dist/standard-schema.js +0 -12
  347. package/dist/standard-schema.js.map +0 -1
  348. package/dist/types.cjs +0 -22
  349. package/dist/types.cjs.map +0 -1
  350. package/dist/types.d.cts +0 -905
  351. package/dist/types.d.cts.map +0 -1
  352. package/dist/types.d.ts +0 -905
  353. package/dist/types.d.ts.map +0 -1
  354. package/dist/types.js +0 -21
  355. package/dist/types.js.map +0 -1
  356. package/dist/use.cjs +0 -240
  357. package/dist/use.cjs.map +0 -1
  358. package/dist/use.d.cts +0 -8
  359. package/dist/use.d.cts.map +0 -1
  360. package/dist/use.d.ts +0 -8
  361. package/dist/use.d.ts.map +0 -1
  362. package/dist/use.js +0 -236
  363. package/dist/use.js.map +0 -1
  364. package/dist/util.cjs +0 -255
  365. package/dist/util.cjs.map +0 -1
  366. package/dist/util.d.cts +0 -141
  367. package/dist/util.d.cts.map +0 -1
  368. package/dist/util.d.ts +0 -141
  369. package/dist/util.d.ts.map +0 -1
  370. package/dist/util.js +0 -234
  371. package/dist/util.js.map +0 -1
  372. package/dist/value-to-schema.cjs +0 -537
  373. package/dist/value-to-schema.cjs.map +0 -1
  374. package/dist/value-to-schema.d.cts +0 -144
  375. package/dist/value-to-schema.d.cts.map +0 -1
  376. package/dist/value-to-schema.d.ts +0 -144
  377. package/dist/value-to-schema.d.ts.map +0 -1
  378. package/dist/value-to-schema.js +0 -533
  379. package/dist/value-to-schema.js.map +0 -1
@@ -1,278 +0,0 @@
1
- /**
2
- * Snapshot testing assertions for BUPKIS.
3
- *
4
- * Provides unified snapshot testing across multiple test frameworks including
5
- * node:test, Jest, Vitest, Mocha, and others.
6
- *
7
- * @packageDocumentation
8
- * @group Snapshot Assertions
9
- */
10
- import { z } from 'zod';
11
- /**
12
- * Asserts that a value matches a stored snapshot.
13
- *
14
- * This assertion provides unified snapshot testing across multiple test
15
- * frameworks. It automatically detects the test framework from the context
16
- * parameter and uses the appropriate snapshot mechanism.
17
- *
18
- * **Supported Frameworks:**
19
- *
20
- * - **node:test**: Native `assert.snapshot()` support
21
- * - **Jest/Vitest**: Coming in Phase 2
22
- * - **Mocha**: Custom snapshot storage
23
- * - **Any framework**: Use explicit string names
24
- *
25
- * **Basic Usage:**
26
- *
27
- * ```typescript
28
- * import test from 'node:test';
29
- * import { expect } from 'bupkis';
30
- *
31
- * test('component renders correctly', (t) => {
32
- * const output = renderComponent();
33
- * expect(output, 'to match snapshot', t);
34
- * });
35
- * ```
36
- *
37
- * **With Custom Serializer:**
38
- *
39
- * ```typescript
40
- * test('redacts sensitive data', (t) => {
41
- * const data = { public: 'visible', secret: 'password123' };
42
- * expect(data, 'to match snapshot', t, {
43
- * serializer: (value: any) =>
44
- * JSON.stringify({ ...value, secret: '[REDACTED]' }, null, 2),
45
- * });
46
- * });
47
- * ```
48
- *
49
- * **Multiple Snapshots Per Test:**
50
- *
51
- * ```typescript
52
- * test('multi-step process', (t) => {
53
- * const step1 = processStep1();
54
- * expect(step1, 'to match snapshot', t, { hint: 'step-1' });
55
- *
56
- * const step2 = processStep2();
57
- * expect(step2, 'to match snapshot', t, { hint: 'step-2' });
58
- *
59
- * const step3 = processStep3();
60
- * expect(step3, 'to match snapshot', t, { hint: 'step-3' });
61
- * });
62
- * ```
63
- *
64
- * **Mocha Usage:**
65
- *
66
- * ```typescript
67
- * describe('MyComponent', function () {
68
- * it('renders correctly', function () {
69
- * const output = renderComponent();
70
- * expect(output, 'to match snapshot', this);
71
- * });
72
- * });
73
- * ```
74
- *
75
- * **Explicit Snapshot Names:**
76
- *
77
- * ```typescript
78
- * test('any framework', () => {
79
- * const output = renderComponent();
80
- * expect(output, 'to match snapshot', 'component-default-state');
81
- * });
82
- * ```
83
- *
84
- * **Chaining with Other Assertions:**
85
- *
86
- * ```typescript
87
- * test('validates and snapshots', (t) => {
88
- * const user = getUserData();
89
- * expect(
90
- * user,
91
- * 'to satisfy',
92
- * { name: 'Alice' },
93
- * 'and',
94
- * 'to have property',
95
- * 'email',
96
- * 'and',
97
- * 'to match snapshot',
98
- * t,
99
- * );
100
- * });
101
- * ```
102
- *
103
- * **Updating Snapshots:**
104
- *
105
- * ```sh
106
- * # node:test
107
- * node --test --test-update-snapshots
108
- *
109
- * # Jest/Vitest (Phase 2)
110
- * vitest -u
111
- *
112
- * # Other frameworks
113
- * BUPKIS_UPDATE_SNAPSHOTS=1 npm test
114
- * ```
115
- *
116
- * @example Basic snapshot assertion
117
- *
118
- * ```typescript
119
- * import test from 'node:test';
120
- * import { expect } from 'bupkis';
121
- *
122
- * test('renders user profile', (t) => {
123
- * const profile = { name: 'Alice', age: 30, role: 'admin' };
124
- * expect(profile, 'to match snapshot', t);
125
- * });
126
- * ```
127
- *
128
- * @example Snapshot with custom serialization
129
- *
130
- * ```typescript
131
- * test('redacts passwords', (t) => {
132
- * const user = {
133
- * username: 'alice',
134
- * password: 'secret123',
135
- * email: 'alice@example.com',
136
- * };
137
- *
138
- * expect(user, 'to match snapshot', t, {
139
- * serializer: (value: any) => {
140
- * return JSON.stringify(
141
- * {
142
- * ...value,
143
- * password: '[REDACTED]',
144
- * },
145
- * null,
146
- * 2,
147
- * );
148
- * },
149
- * });
150
- * });
151
- * ```
152
- *
153
- * @example Multiple snapshots with hints
154
- *
155
- * ```typescript
156
- * test('captures workflow steps', (t) => {
157
- * const initial = { status: 'pending' };
158
- * expect(initial, 'to match snapshot', t, { hint: 'initial-state' });
159
- *
160
- * const processing = { status: 'processing', progress: 50 };
161
- * expect(processing, 'to match snapshot', t, {
162
- * hint: 'processing-state',
163
- * });
164
- *
165
- * const complete = { status: 'complete', result: 'success' };
166
- * expect(complete, 'to match snapshot', t, { hint: 'complete-state' });
167
- * });
168
- * ```
169
- *
170
- * @param subject - The value to snapshot (any type)
171
- * @param context - Test context object or explicit snapshot name
172
- * @param options - Optional serialization and naming options
173
- * @group Snapshot Assertions
174
- * @bupkisAnchor unknown-to-match-snapshot
175
- * @bupkisAssertionCategory snapshot
176
- */
177
- export declare const snapshotAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [z.ZodUnknown, readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"], z.ZodNonOptional<z.ZodUnknown>], (actual: unknown, context: unknown) => void | import("../assertion-types.js").AssertionFailure, readonly [z.ZodUnknown, import("../assertion-types.js").PhraseLiteralChoiceSlot<readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"]>, z.ZodNonOptional<z.ZodUnknown>]>;
178
- /**
179
- * Asserts that a value matches a stored snapshot with custom options.
180
- *
181
- * This is an extended version of {@link snapshotAssertion} that accepts explicit
182
- * options for serialization and snapshot naming via the `with options` syntax.
183
- *
184
- * @example Snapshot with custom serializer using 'with options'
185
- *
186
- * ```typescript
187
- * import test from 'node:test';
188
- * import { expect } from 'bupkis';
189
- *
190
- * test('redacts sensitive fields', (t) => {
191
- * const data = { username: 'alice', password: 'secret123' };
192
- *
193
- * expect(data, 'to match snapshot', t, 'with options', {
194
- * serializer: (value: any) =>
195
- * JSON.stringify({ ...value, password: '[REDACTED]' }, null, 2),
196
- * });
197
- * });
198
- * ```
199
- *
200
- * @example Multiple snapshots with hints using 'with options'
201
- *
202
- * ```typescript
203
- * test('workflow stages', (t) => {
204
- * const stage1 = { phase: 'init' };
205
- * expect(stage1, 'to match snapshot', t, 'with options', {
206
- * hint: 'stage-1',
207
- * });
208
- *
209
- * const stage2 = { phase: 'processing' };
210
- * expect(stage2, 'to match snapshot', t, 'with options', {
211
- * hint: 'stage-2',
212
- * });
213
- * });
214
- * ```
215
- *
216
- * @param subject - The value to snapshot (any type)
217
- * @param context - Test context object or explicit snapshot name
218
- * @param options - Serialization and naming options
219
- * @group Snapshot Assertions
220
- * @bupkisAnchor unknown-to-match-snapshot-with-options
221
- * @bupkisAssertionCategory snapshot
222
- */
223
- export declare const snapshotAssertionWithOptions: import("../assertion-types.js").AssertionFunctionSync<readonly [z.ZodUnknown, readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"], z.ZodNonOptional<z.ZodUnknown>, "with options", z.ZodObject<{
224
- hint: z.ZodOptional<z.ZodString>;
225
- serializer: z.ZodOptional<z.ZodAny>;
226
- }, z.core.$strip>], (actual: unknown, context: unknown, options: {
227
- hint?: string | undefined;
228
- serializer?: any;
229
- }) => void | import("../assertion-types.js").AssertionFailure, readonly [z.ZodUnknown, import("../assertion-types.js").PhraseLiteralChoiceSlot<readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"]>, z.ZodNonOptional<z.ZodUnknown>, import("../assertion-types.js").PhraseLiteralSlot<"with options">, z.ZodObject<{
230
- hint: z.ZodOptional<z.ZodString>;
231
- serializer: z.ZodOptional<z.ZodAny>;
232
- }, z.core.$strip>]>;
233
- /**
234
- * Collection of all snapshot assertions.
235
- *
236
- * Currently contains only the main snapshot assertion, but structured as a
237
- * collection for consistency with other assertion modules and to allow for
238
- * future expansion (e.g., inline snapshots, property matchers).
239
- *
240
- * @example
241
- *
242
- * ```typescript
243
- * import { SnapshotAssertions } from 'bupkis/assertions';
244
- *
245
- * // All snapshot assertions are available
246
- * const { snapshotAssertion } = SnapshotAssertions;
247
- * ```
248
- */
249
- export declare const SnapshotAssertions: {
250
- readonly snapshotAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [z.ZodUnknown, readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"], z.ZodNonOptional<z.ZodUnknown>], (actual: unknown, context: unknown) => void | import("../assertion-types.js").AssertionFailure, readonly [z.ZodUnknown, import("../assertion-types.js").PhraseLiteralChoiceSlot<readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"]>, z.ZodNonOptional<z.ZodUnknown>]>;
251
- readonly snapshotAssertionWithOptions: import("../assertion-types.js").AssertionFunctionSync<readonly [z.ZodUnknown, readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"], z.ZodNonOptional<z.ZodUnknown>, "with options", z.ZodObject<{
252
- hint: z.ZodOptional<z.ZodString>;
253
- serializer: z.ZodOptional<z.ZodAny>;
254
- }, z.core.$strip>], (actual: unknown, context: unknown, options: {
255
- hint?: string | undefined;
256
- serializer?: any;
257
- }) => void | import("../assertion-types.js").AssertionFailure, readonly [z.ZodUnknown, import("../assertion-types.js").PhraseLiteralChoiceSlot<readonly ["to match snapshot", "to match the snapshot", "to equal snapshot", "to equal the snapshot"]>, z.ZodNonOptional<z.ZodUnknown>, import("../assertion-types.js").PhraseLiteralSlot<"with options">, z.ZodObject<{
258
- hint: z.ZodOptional<z.ZodString>;
259
- serializer: z.ZodOptional<z.ZodAny>;
260
- }, z.core.$strip>]>;
261
- };
262
- /**
263
- * Type for the snapshot assertions collection.
264
- *
265
- * This type can be used for type checking or documentation purposes.
266
- *
267
- * @example
268
- *
269
- * ```typescript
270
- * import type { SnapshotAssertions } from 'bupkis/assertions';
271
- *
272
- * function useSnapshotAssertions(assertions: SnapshotAssertions) {
273
- * // assertions has the correct type
274
- * }
275
- * ```
276
- */
277
- export type SnapshotAssertions = typeof SnapshotAssertions;
278
- //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/assertion/impl/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqKG;AACH,eAAO,MAAM,iBAAiB,ghBAe7B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;mBAiBxC,CAAC;AACF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;CAGrB,CAAC;AAEX;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC"}
@@ -1,273 +0,0 @@
1
- /**
2
- * Snapshot testing assertions for BUPKIS.
3
- *
4
- * Provides unified snapshot testing across multiple test frameworks including
5
- * node:test, Jest, Vitest, Mocha, and others.
6
- *
7
- * @packageDocumentation
8
- * @group Snapshot Assertions
9
- */
10
- import { z } from 'zod';
11
- import { SnapshotOptionsSchema } from "../../schema.js";
12
- import { selectAdapter } from "../../snapshot/select-adapter.js";
13
- import { createAssertion } from "../create.js";
14
- /**
15
- * Asserts that a value matches a stored snapshot.
16
- *
17
- * This assertion provides unified snapshot testing across multiple test
18
- * frameworks. It automatically detects the test framework from the context
19
- * parameter and uses the appropriate snapshot mechanism.
20
- *
21
- * **Supported Frameworks:**
22
- *
23
- * - **node:test**: Native `assert.snapshot()` support
24
- * - **Jest/Vitest**: Coming in Phase 2
25
- * - **Mocha**: Custom snapshot storage
26
- * - **Any framework**: Use explicit string names
27
- *
28
- * **Basic Usage:**
29
- *
30
- * ```typescript
31
- * import test from 'node:test';
32
- * import { expect } from 'bupkis';
33
- *
34
- * test('component renders correctly', (t) => {
35
- * const output = renderComponent();
36
- * expect(output, 'to match snapshot', t);
37
- * });
38
- * ```
39
- *
40
- * **With Custom Serializer:**
41
- *
42
- * ```typescript
43
- * test('redacts sensitive data', (t) => {
44
- * const data = { public: 'visible', secret: 'password123' };
45
- * expect(data, 'to match snapshot', t, {
46
- * serializer: (value: any) =>
47
- * JSON.stringify({ ...value, secret: '[REDACTED]' }, null, 2),
48
- * });
49
- * });
50
- * ```
51
- *
52
- * **Multiple Snapshots Per Test:**
53
- *
54
- * ```typescript
55
- * test('multi-step process', (t) => {
56
- * const step1 = processStep1();
57
- * expect(step1, 'to match snapshot', t, { hint: 'step-1' });
58
- *
59
- * const step2 = processStep2();
60
- * expect(step2, 'to match snapshot', t, { hint: 'step-2' });
61
- *
62
- * const step3 = processStep3();
63
- * expect(step3, 'to match snapshot', t, { hint: 'step-3' });
64
- * });
65
- * ```
66
- *
67
- * **Mocha Usage:**
68
- *
69
- * ```typescript
70
- * describe('MyComponent', function () {
71
- * it('renders correctly', function () {
72
- * const output = renderComponent();
73
- * expect(output, 'to match snapshot', this);
74
- * });
75
- * });
76
- * ```
77
- *
78
- * **Explicit Snapshot Names:**
79
- *
80
- * ```typescript
81
- * test('any framework', () => {
82
- * const output = renderComponent();
83
- * expect(output, 'to match snapshot', 'component-default-state');
84
- * });
85
- * ```
86
- *
87
- * **Chaining with Other Assertions:**
88
- *
89
- * ```typescript
90
- * test('validates and snapshots', (t) => {
91
- * const user = getUserData();
92
- * expect(
93
- * user,
94
- * 'to satisfy',
95
- * { name: 'Alice' },
96
- * 'and',
97
- * 'to have property',
98
- * 'email',
99
- * 'and',
100
- * 'to match snapshot',
101
- * t,
102
- * );
103
- * });
104
- * ```
105
- *
106
- * **Updating Snapshots:**
107
- *
108
- * ```sh
109
- * # node:test
110
- * node --test --test-update-snapshots
111
- *
112
- * # Jest/Vitest (Phase 2)
113
- * vitest -u
114
- *
115
- * # Other frameworks
116
- * BUPKIS_UPDATE_SNAPSHOTS=1 npm test
117
- * ```
118
- *
119
- * @example Basic snapshot assertion
120
- *
121
- * ```typescript
122
- * import test from 'node:test';
123
- * import { expect } from 'bupkis';
124
- *
125
- * test('renders user profile', (t) => {
126
- * const profile = { name: 'Alice', age: 30, role: 'admin' };
127
- * expect(profile, 'to match snapshot', t);
128
- * });
129
- * ```
130
- *
131
- * @example Snapshot with custom serialization
132
- *
133
- * ```typescript
134
- * test('redacts passwords', (t) => {
135
- * const user = {
136
- * username: 'alice',
137
- * password: 'secret123',
138
- * email: 'alice@example.com',
139
- * };
140
- *
141
- * expect(user, 'to match snapshot', t, {
142
- * serializer: (value: any) => {
143
- * return JSON.stringify(
144
- * {
145
- * ...value,
146
- * password: '[REDACTED]',
147
- * },
148
- * null,
149
- * 2,
150
- * );
151
- * },
152
- * });
153
- * });
154
- * ```
155
- *
156
- * @example Multiple snapshots with hints
157
- *
158
- * ```typescript
159
- * test('captures workflow steps', (t) => {
160
- * const initial = { status: 'pending' };
161
- * expect(initial, 'to match snapshot', t, { hint: 'initial-state' });
162
- *
163
- * const processing = { status: 'processing', progress: 50 };
164
- * expect(processing, 'to match snapshot', t, {
165
- * hint: 'processing-state',
166
- * });
167
- *
168
- * const complete = { status: 'complete', result: 'success' };
169
- * expect(complete, 'to match snapshot', t, { hint: 'complete-state' });
170
- * });
171
- * ```
172
- *
173
- * @param subject - The value to snapshot (any type)
174
- * @param context - Test context object or explicit snapshot name
175
- * @param options - Optional serialization and naming options
176
- * @group Snapshot Assertions
177
- * @bupkisAnchor unknown-to-match-snapshot
178
- * @bupkisAssertionCategory snapshot
179
- */
180
- export const snapshotAssertion = createAssertion([
181
- z.unknown(),
182
- [
183
- 'to match snapshot',
184
- 'to match the snapshot',
185
- 'to equal snapshot',
186
- 'to equal the snapshot',
187
- ],
188
- z.unknown().nonoptional(),
189
- ], (actual, context) => {
190
- const adapter = selectAdapter(context);
191
- return adapter.validateSnapshot(actual, context);
192
- });
193
- /**
194
- * Asserts that a value matches a stored snapshot with custom options.
195
- *
196
- * This is an extended version of {@link snapshotAssertion} that accepts explicit
197
- * options for serialization and snapshot naming via the `with options` syntax.
198
- *
199
- * @example Snapshot with custom serializer using 'with options'
200
- *
201
- * ```typescript
202
- * import test from 'node:test';
203
- * import { expect } from 'bupkis';
204
- *
205
- * test('redacts sensitive fields', (t) => {
206
- * const data = { username: 'alice', password: 'secret123' };
207
- *
208
- * expect(data, 'to match snapshot', t, 'with options', {
209
- * serializer: (value: any) =>
210
- * JSON.stringify({ ...value, password: '[REDACTED]' }, null, 2),
211
- * });
212
- * });
213
- * ```
214
- *
215
- * @example Multiple snapshots with hints using 'with options'
216
- *
217
- * ```typescript
218
- * test('workflow stages', (t) => {
219
- * const stage1 = { phase: 'init' };
220
- * expect(stage1, 'to match snapshot', t, 'with options', {
221
- * hint: 'stage-1',
222
- * });
223
- *
224
- * const stage2 = { phase: 'processing' };
225
- * expect(stage2, 'to match snapshot', t, 'with options', {
226
- * hint: 'stage-2',
227
- * });
228
- * });
229
- * ```
230
- *
231
- * @param subject - The value to snapshot (any type)
232
- * @param context - Test context object or explicit snapshot name
233
- * @param options - Serialization and naming options
234
- * @group Snapshot Assertions
235
- * @bupkisAnchor unknown-to-match-snapshot-with-options
236
- * @bupkisAssertionCategory snapshot
237
- */
238
- export const snapshotAssertionWithOptions = createAssertion([
239
- z.unknown(),
240
- [
241
- 'to match snapshot',
242
- 'to match the snapshot',
243
- 'to equal snapshot',
244
- 'to equal the snapshot',
245
- ],
246
- z.unknown().nonoptional(),
247
- 'with options',
248
- SnapshotOptionsSchema,
249
- ], (actual, context, options) => {
250
- const adapter = selectAdapter(context);
251
- return adapter.validateSnapshot(actual, context, options);
252
- });
253
- /**
254
- * Collection of all snapshot assertions.
255
- *
256
- * Currently contains only the main snapshot assertion, but structured as a
257
- * collection for consistency with other assertion modules and to allow for
258
- * future expansion (e.g., inline snapshots, property matchers).
259
- *
260
- * @example
261
- *
262
- * ```typescript
263
- * import { SnapshotAssertions } from 'bupkis/assertions';
264
- *
265
- * // All snapshot assertions are available
266
- * const { snapshotAssertion } = SnapshotAssertions;
267
- * ```
268
- */
269
- export const SnapshotAssertions = {
270
- snapshotAssertion,
271
- snapshotAssertionWithOptions,
272
- };
273
- //# sourceMappingURL=snapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/assertion/impl/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB;AACxD,OAAO,EAAE,aAAa,EAAE,yCAAyC;AACjE,OAAO,EAAE,eAAe,EAAE,qBAAqB;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAC9C;IACE,CAAC,CAAC,OAAO,EAAE;IACX;QACE,mBAAmB;QACnB,uBAAuB;QACvB,mBAAmB;QACnB,uBAAuB;KACxB;IACD,CAAC,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE;CAC1B,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IAClB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,eAAe,CACzD;IACE,CAAC,CAAC,OAAO,EAAE;IACX;QACE,mBAAmB;QACnB,uBAAuB;QACvB,mBAAmB;QACnB,uBAAuB;KACxB;IACD,CAAC,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE;IACzB,cAAc;IACd,qBAAqB;CACtB,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC,CACF,CAAC;AACF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB;IACjB,4BAA4B;CACpB,CAAC"}