bupkis 0.18.0 → 0.18.2

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 (377) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +1 -4
  3. package/src/assertion/assertion-types.ts +4 -4
  4. package/src/assertion/impl/async-parametric.ts +4 -21
  5. package/src/assertion/impl/sync-parametric.ts +5 -17
  6. package/src/expect.ts +0 -4
  7. package/src/guards.ts +24 -24
  8. package/src/internal-schema.ts +16 -32
  9. package/src/value-to-schema.ts +1 -1
  10. package/dist/assertion/assertion-async.cjs +0 -268
  11. package/dist/assertion/assertion-async.cjs.map +0 -1
  12. package/dist/assertion/assertion-async.d.cts +0 -40
  13. package/dist/assertion/assertion-async.d.cts.map +0 -1
  14. package/dist/assertion/assertion-async.d.ts +0 -40
  15. package/dist/assertion/assertion-async.d.ts.map +0 -1
  16. package/dist/assertion/assertion-async.js +0 -259
  17. package/dist/assertion/assertion-async.js.map +0 -1
  18. package/dist/assertion/assertion-standard-schema-async.cjs +0 -132
  19. package/dist/assertion/assertion-standard-schema-async.cjs.map +0 -1
  20. package/dist/assertion/assertion-standard-schema-async.d.cts +0 -52
  21. package/dist/assertion/assertion-standard-schema-async.d.cts.map +0 -1
  22. package/dist/assertion/assertion-standard-schema-async.d.ts +0 -52
  23. package/dist/assertion/assertion-standard-schema-async.d.ts.map +0 -1
  24. package/dist/assertion/assertion-standard-schema-async.js +0 -128
  25. package/dist/assertion/assertion-standard-schema-async.js.map +0 -1
  26. package/dist/assertion/assertion-standard-schema-sync.cjs +0 -141
  27. package/dist/assertion/assertion-standard-schema-sync.cjs.map +0 -1
  28. package/dist/assertion/assertion-standard-schema-sync.d.cts +0 -52
  29. package/dist/assertion/assertion-standard-schema-sync.d.cts.map +0 -1
  30. package/dist/assertion/assertion-standard-schema-sync.d.ts +0 -52
  31. package/dist/assertion/assertion-standard-schema-sync.d.ts.map +0 -1
  32. package/dist/assertion/assertion-standard-schema-sync.js +0 -137
  33. package/dist/assertion/assertion-standard-schema-sync.js.map +0 -1
  34. package/dist/assertion/assertion-sync.cjs +0 -284
  35. package/dist/assertion/assertion-sync.cjs.map +0 -1
  36. package/dist/assertion/assertion-sync.d.cts +0 -60
  37. package/dist/assertion/assertion-sync.d.cts.map +0 -1
  38. package/dist/assertion/assertion-sync.d.ts +0 -60
  39. package/dist/assertion/assertion-sync.d.ts.map +0 -1
  40. package/dist/assertion/assertion-sync.js +0 -275
  41. package/dist/assertion/assertion-sync.js.map +0 -1
  42. package/dist/assertion/assertion-types.cjs +0 -20
  43. package/dist/assertion/assertion-types.cjs.map +0 -1
  44. package/dist/assertion/assertion-types.d.cts +0 -1086
  45. package/dist/assertion/assertion-types.d.cts.map +0 -1
  46. package/dist/assertion/assertion-types.d.ts +0 -1086
  47. package/dist/assertion/assertion-types.d.ts.map +0 -1
  48. package/dist/assertion/assertion-types.js +0 -19
  49. package/dist/assertion/assertion-types.js.map +0 -1
  50. package/dist/assertion/assertion.cjs +0 -382
  51. package/dist/assertion/assertion.cjs.map +0 -1
  52. package/dist/assertion/assertion.d.cts +0 -109
  53. package/dist/assertion/assertion.d.cts.map +0 -1
  54. package/dist/assertion/assertion.d.ts +0 -109
  55. package/dist/assertion/assertion.d.ts.map +0 -1
  56. package/dist/assertion/assertion.js +0 -375
  57. package/dist/assertion/assertion.js.map +0 -1
  58. package/dist/assertion/create.cjs +0 -148
  59. package/dist/assertion/create.cjs.map +0 -1
  60. package/dist/assertion/create.d.cts +0 -85
  61. package/dist/assertion/create.d.cts.map +0 -1
  62. package/dist/assertion/create.d.ts +0 -85
  63. package/dist/assertion/create.d.ts.map +0 -1
  64. package/dist/assertion/create.js +0 -143
  65. package/dist/assertion/create.js.map +0 -1
  66. package/dist/assertion/format-assertion-failure.cjs +0 -63
  67. package/dist/assertion/format-assertion-failure.cjs.map +0 -1
  68. package/dist/assertion/format-assertion-failure.d.cts +0 -21
  69. package/dist/assertion/format-assertion-failure.d.cts.map +0 -1
  70. package/dist/assertion/format-assertion-failure.d.ts +0 -21
  71. package/dist/assertion/format-assertion-failure.d.ts.map +0 -1
  72. package/dist/assertion/format-assertion-failure.js +0 -59
  73. package/dist/assertion/format-assertion-failure.js.map +0 -1
  74. package/dist/assertion/impl/assertion-util.cjs +0 -68
  75. package/dist/assertion/impl/assertion-util.cjs.map +0 -1
  76. package/dist/assertion/impl/assertion-util.d.cts +0 -36
  77. package/dist/assertion/impl/assertion-util.d.cts.map +0 -1
  78. package/dist/assertion/impl/assertion-util.d.ts +0 -36
  79. package/dist/assertion/impl/assertion-util.d.ts.map +0 -1
  80. package/dist/assertion/impl/assertion-util.js +0 -62
  81. package/dist/assertion/impl/assertion-util.js.map +0 -1
  82. package/dist/assertion/impl/async-iterable.cjs +0 -627
  83. package/dist/assertion/impl/async-iterable.cjs.map +0 -1
  84. package/dist/assertion/impl/async-iterable.d.cts +0 -406
  85. package/dist/assertion/impl/async-iterable.d.cts.map +0 -1
  86. package/dist/assertion/impl/async-iterable.d.ts +0 -406
  87. package/dist/assertion/impl/async-iterable.d.ts.map +0 -1
  88. package/dist/assertion/impl/async-iterable.js +0 -624
  89. package/dist/assertion/impl/async-iterable.js.map +0 -1
  90. package/dist/assertion/impl/async-parametric.cjs +0 -423
  91. package/dist/assertion/impl/async-parametric.cjs.map +0 -1
  92. package/dist/assertion/impl/async-parametric.d.cts +0 -278
  93. package/dist/assertion/impl/async-parametric.d.cts.map +0 -1
  94. package/dist/assertion/impl/async-parametric.d.ts +0 -278
  95. package/dist/assertion/impl/async-parametric.d.ts.map +0 -1
  96. package/dist/assertion/impl/async-parametric.js +0 -420
  97. package/dist/assertion/impl/async-parametric.js.map +0 -1
  98. package/dist/assertion/impl/async.cjs +0 -56
  99. package/dist/assertion/impl/async.cjs.map +0 -1
  100. package/dist/assertion/impl/async.d.cts +0 -179
  101. package/dist/assertion/impl/async.d.cts.map +0 -1
  102. package/dist/assertion/impl/async.d.ts +0 -179
  103. package/dist/assertion/impl/async.d.ts.map +0 -1
  104. package/dist/assertion/impl/async.js +0 -39
  105. package/dist/assertion/impl/async.js.map +0 -1
  106. package/dist/assertion/impl/index.cjs +0 -37
  107. package/dist/assertion/impl/index.cjs.map +0 -1
  108. package/dist/assertion/impl/index.d.cts +0 -21
  109. package/dist/assertion/impl/index.d.cts.map +0 -1
  110. package/dist/assertion/impl/index.d.ts +0 -21
  111. package/dist/assertion/impl/index.d.ts.map +0 -1
  112. package/dist/assertion/impl/index.js +0 -21
  113. package/dist/assertion/impl/index.js.map +0 -1
  114. package/dist/assertion/impl/iteration-util.cjs +0 -297
  115. package/dist/assertion/impl/iteration-util.cjs.map +0 -1
  116. package/dist/assertion/impl/iteration-util.d.cts +0 -12
  117. package/dist/assertion/impl/iteration-util.d.cts.map +0 -1
  118. package/dist/assertion/impl/iteration-util.d.ts +0 -12
  119. package/dist/assertion/impl/iteration-util.d.ts.map +0 -1
  120. package/dist/assertion/impl/iteration-util.js +0 -282
  121. package/dist/assertion/impl/iteration-util.js.map +0 -1
  122. package/dist/assertion/impl/snapshot.cjs +0 -276
  123. package/dist/assertion/impl/snapshot.cjs.map +0 -1
  124. package/dist/assertion/impl/snapshot.d.cts +0 -278
  125. package/dist/assertion/impl/snapshot.d.cts.map +0 -1
  126. package/dist/assertion/impl/snapshot.d.ts +0 -278
  127. package/dist/assertion/impl/snapshot.d.ts.map +0 -1
  128. package/dist/assertion/impl/snapshot.js +0 -273
  129. package/dist/assertion/impl/snapshot.js.map +0 -1
  130. package/dist/assertion/impl/sync-basic.cjs +0 -553
  131. package/dist/assertion/impl/sync-basic.cjs.map +0 -1
  132. package/dist/assertion/impl/sync-basic.d.cts +0 -528
  133. package/dist/assertion/impl/sync-basic.d.cts.map +0 -1
  134. package/dist/assertion/impl/sync-basic.d.ts +0 -528
  135. package/dist/assertion/impl/sync-basic.d.ts.map +0 -1
  136. package/dist/assertion/impl/sync-basic.js +0 -550
  137. package/dist/assertion/impl/sync-basic.js.map +0 -1
  138. package/dist/assertion/impl/sync-collection.cjs +0 -856
  139. package/dist/assertion/impl/sync-collection.cjs.map +0 -1
  140. package/dist/assertion/impl/sync-collection.d.cts +0 -607
  141. package/dist/assertion/impl/sync-collection.d.cts.map +0 -1
  142. package/dist/assertion/impl/sync-collection.d.ts +0 -607
  143. package/dist/assertion/impl/sync-collection.d.ts.map +0 -1
  144. package/dist/assertion/impl/sync-collection.js +0 -850
  145. package/dist/assertion/impl/sync-collection.js.map +0 -1
  146. package/dist/assertion/impl/sync-date.cjs +0 -341
  147. package/dist/assertion/impl/sync-date.cjs.map +0 -1
  148. package/dist/assertion/impl/sync-date.d.cts +0 -209
  149. package/dist/assertion/impl/sync-date.d.cts.map +0 -1
  150. package/dist/assertion/impl/sync-date.d.ts +0 -209
  151. package/dist/assertion/impl/sync-date.d.ts.map +0 -1
  152. package/dist/assertion/impl/sync-date.js +0 -338
  153. package/dist/assertion/impl/sync-date.js.map +0 -1
  154. package/dist/assertion/impl/sync-esoteric.cjs +0 -214
  155. package/dist/assertion/impl/sync-esoteric.cjs.map +0 -1
  156. package/dist/assertion/impl/sync-esoteric.d.cts +0 -191
  157. package/dist/assertion/impl/sync-esoteric.d.cts.map +0 -1
  158. package/dist/assertion/impl/sync-esoteric.d.ts +0 -191
  159. package/dist/assertion/impl/sync-esoteric.d.ts.map +0 -1
  160. package/dist/assertion/impl/sync-esoteric.js +0 -211
  161. package/dist/assertion/impl/sync-esoteric.js.map +0 -1
  162. package/dist/assertion/impl/sync-iterable.cjs +0 -512
  163. package/dist/assertion/impl/sync-iterable.cjs.map +0 -1
  164. package/dist/assertion/impl/sync-iterable.d.cts +0 -334
  165. package/dist/assertion/impl/sync-iterable.d.cts.map +0 -1
  166. package/dist/assertion/impl/sync-iterable.d.ts +0 -334
  167. package/dist/assertion/impl/sync-iterable.d.ts.map +0 -1
  168. package/dist/assertion/impl/sync-iterable.js +0 -509
  169. package/dist/assertion/impl/sync-iterable.js.map +0 -1
  170. package/dist/assertion/impl/sync-parametric.cjs +0 -812
  171. package/dist/assertion/impl/sync-parametric.cjs.map +0 -1
  172. package/dist/assertion/impl/sync-parametric.d.cts +0 -560
  173. package/dist/assertion/impl/sync-parametric.d.cts.map +0 -1
  174. package/dist/assertion/impl/sync-parametric.d.ts +0 -560
  175. package/dist/assertion/impl/sync-parametric.d.ts.map +0 -1
  176. package/dist/assertion/impl/sync-parametric.js +0 -809
  177. package/dist/assertion/impl/sync-parametric.js.map +0 -1
  178. package/dist/assertion/impl/sync.cjs +0 -214
  179. package/dist/assertion/impl/sync.cjs.map +0 -1
  180. package/dist/assertion/impl/sync.d.cts +0 -512
  181. package/dist/assertion/impl/sync.d.cts.map +0 -1
  182. package/dist/assertion/impl/sync.d.ts +0 -512
  183. package/dist/assertion/impl/sync.d.ts.map +0 -1
  184. package/dist/assertion/impl/sync.js +0 -197
  185. package/dist/assertion/impl/sync.js.map +0 -1
  186. package/dist/assertion/index.cjs +0 -38
  187. package/dist/assertion/index.cjs.map +0 -1
  188. package/dist/assertion/index.d.cts +0 -18
  189. package/dist/assertion/index.d.cts.map +0 -1
  190. package/dist/assertion/index.d.ts +0 -18
  191. package/dist/assertion/index.d.ts.map +0 -1
  192. package/dist/assertion/index.js +0 -17
  193. package/dist/assertion/index.js.map +0 -1
  194. package/dist/assertion/slotify.cjs +0 -165
  195. package/dist/assertion/slotify.cjs.map +0 -1
  196. package/dist/assertion/slotify.d.cts +0 -11
  197. package/dist/assertion/slotify.d.cts.map +0 -1
  198. package/dist/assertion/slotify.d.ts +0 -11
  199. package/dist/assertion/slotify.d.ts.map +0 -1
  200. package/dist/assertion/slotify.js +0 -161
  201. package/dist/assertion/slotify.js.map +0 -1
  202. package/dist/bootstrap.cjs +0 -43
  203. package/dist/bootstrap.cjs.map +0 -1
  204. package/dist/bootstrap.d.cts +0 -27
  205. package/dist/bootstrap.d.cts.map +0 -1
  206. package/dist/bootstrap.d.ts +0 -27
  207. package/dist/bootstrap.d.ts.map +0 -1
  208. package/dist/bootstrap.js +0 -40
  209. package/dist/bootstrap.js.map +0 -1
  210. package/dist/constant.cjs +0 -82
  211. package/dist/constant.cjs.map +0 -1
  212. package/dist/constant.d.cts +0 -69
  213. package/dist/constant.d.cts.map +0 -1
  214. package/dist/constant.d.ts +0 -69
  215. package/dist/constant.d.ts.map +0 -1
  216. package/dist/constant.js +0 -79
  217. package/dist/constant.js.map +0 -1
  218. package/dist/diff.cjs +0 -340
  219. package/dist/diff.cjs.map +0 -1
  220. package/dist/diff.d.cts +0 -51
  221. package/dist/diff.d.cts.map +0 -1
  222. package/dist/diff.d.ts +0 -51
  223. package/dist/diff.d.ts.map +0 -1
  224. package/dist/diff.js +0 -334
  225. package/dist/diff.js.map +0 -1
  226. package/dist/error.cjs +0 -204
  227. package/dist/error.cjs.map +0 -1
  228. package/dist/error.d.cts +0 -212
  229. package/dist/error.d.cts.map +0 -1
  230. package/dist/error.d.ts +0 -212
  231. package/dist/error.d.ts.map +0 -1
  232. package/dist/error.js +0 -191
  233. package/dist/error.js.map +0 -1
  234. package/dist/expect.cjs +0 -590
  235. package/dist/expect.cjs.map +0 -1
  236. package/dist/expect.d.cts +0 -138
  237. package/dist/expect.d.cts.map +0 -1
  238. package/dist/expect.d.ts +0 -138
  239. package/dist/expect.d.ts.map +0 -1
  240. package/dist/expect.js +0 -582
  241. package/dist/expect.js.map +0 -1
  242. package/dist/guards.cjs +0 -297
  243. package/dist/guards.cjs.map +0 -1
  244. package/dist/guards.d.cts +0 -231
  245. package/dist/guards.d.cts.map +0 -1
  246. package/dist/guards.d.ts +0 -231
  247. package/dist/guards.d.ts.map +0 -1
  248. package/dist/guards.js +0 -277
  249. package/dist/guards.js.map +0 -1
  250. package/dist/index.cjs +0 -111
  251. package/dist/index.cjs.map +0 -1
  252. package/dist/index.d.cts +0 -448
  253. package/dist/index.d.cts.map +0 -1
  254. package/dist/index.d.ts +0 -448
  255. package/dist/index.d.ts.map +0 -1
  256. package/dist/index.js +0 -71
  257. package/dist/index.js.map +0 -1
  258. package/dist/internal-schema.cjs +0 -253
  259. package/dist/internal-schema.cjs.map +0 -1
  260. package/dist/internal-schema.d.cts +0 -8
  261. package/dist/internal-schema.d.cts.map +0 -1
  262. package/dist/internal-schema.d.ts +0 -8
  263. package/dist/internal-schema.d.ts.map +0 -1
  264. package/dist/internal-schema.js +0 -248
  265. package/dist/internal-schema.js.map +0 -1
  266. package/dist/metadata.cjs +0 -57
  267. package/dist/metadata.cjs.map +0 -1
  268. package/dist/metadata.d.cts +0 -27
  269. package/dist/metadata.d.cts.map +0 -1
  270. package/dist/metadata.d.ts +0 -27
  271. package/dist/metadata.d.ts.map +0 -1
  272. package/dist/metadata.js +0 -54
  273. package/dist/metadata.js.map +0 -1
  274. package/dist/schema.cjs +0 -1522
  275. package/dist/schema.cjs.map +0 -1
  276. package/dist/schema.d.cts +0 -1196
  277. package/dist/schema.d.cts.map +0 -1
  278. package/dist/schema.d.ts +0 -1196
  279. package/dist/schema.d.ts.map +0 -1
  280. package/dist/schema.js +0 -1516
  281. package/dist/schema.js.map +0 -1
  282. package/dist/snapshot/adapter.cjs +0 -31
  283. package/dist/snapshot/adapter.cjs.map +0 -1
  284. package/dist/snapshot/adapter.d.cts +0 -258
  285. package/dist/snapshot/adapter.d.cts.map +0 -1
  286. package/dist/snapshot/adapter.d.ts +0 -258
  287. package/dist/snapshot/adapter.d.ts.map +0 -1
  288. package/dist/snapshot/adapter.js +0 -27
  289. package/dist/snapshot/adapter.js.map +0 -1
  290. package/dist/snapshot/adapters/fallback.cjs +0 -453
  291. package/dist/snapshot/adapters/fallback.cjs.map +0 -1
  292. package/dist/snapshot/adapters/fallback.d.cts +0 -185
  293. package/dist/snapshot/adapters/fallback.d.cts.map +0 -1
  294. package/dist/snapshot/adapters/fallback.d.ts +0 -185
  295. package/dist/snapshot/adapters/fallback.d.ts.map +0 -1
  296. package/dist/snapshot/adapters/fallback.js +0 -446
  297. package/dist/snapshot/adapters/fallback.js.map +0 -1
  298. package/dist/snapshot/adapters/node-test.cjs +0 -301
  299. package/dist/snapshot/adapters/node-test.cjs.map +0 -1
  300. package/dist/snapshot/adapters/node-test.d.cts +0 -131
  301. package/dist/snapshot/adapters/node-test.d.cts.map +0 -1
  302. package/dist/snapshot/adapters/node-test.d.ts +0 -131
  303. package/dist/snapshot/adapters/node-test.d.ts.map +0 -1
  304. package/dist/snapshot/adapters/node-test.js +0 -297
  305. package/dist/snapshot/adapters/node-test.js.map +0 -1
  306. package/dist/snapshot/index.cjs +0 -61
  307. package/dist/snapshot/index.cjs.map +0 -1
  308. package/dist/snapshot/index.d.cts +0 -40
  309. package/dist/snapshot/index.d.cts.map +0 -1
  310. package/dist/snapshot/index.d.ts +0 -40
  311. package/dist/snapshot/index.d.ts.map +0 -1
  312. package/dist/snapshot/index.js +0 -44
  313. package/dist/snapshot/index.js.map +0 -1
  314. package/dist/snapshot/node-version.cjs +0 -49
  315. package/dist/snapshot/node-version.cjs.map +0 -1
  316. package/dist/snapshot/node-version.d.cts +0 -34
  317. package/dist/snapshot/node-version.d.cts.map +0 -1
  318. package/dist/snapshot/node-version.d.ts +0 -34
  319. package/dist/snapshot/node-version.d.ts.map +0 -1
  320. package/dist/snapshot/node-version.js +0 -44
  321. package/dist/snapshot/node-version.js.map +0 -1
  322. package/dist/snapshot/select-adapter.cjs +0 -170
  323. package/dist/snapshot/select-adapter.cjs.map +0 -1
  324. package/dist/snapshot/select-adapter.d.cts +0 -128
  325. package/dist/snapshot/select-adapter.d.cts.map +0 -1
  326. package/dist/snapshot/select-adapter.d.ts +0 -128
  327. package/dist/snapshot/select-adapter.d.ts.map +0 -1
  328. package/dist/snapshot/select-adapter.js +0 -164
  329. package/dist/snapshot/select-adapter.js.map +0 -1
  330. package/dist/snapshot/serializer.cjs +0 -246
  331. package/dist/snapshot/serializer.cjs.map +0 -1
  332. package/dist/snapshot/serializer.d.cts +0 -126
  333. package/dist/snapshot/serializer.d.cts.map +0 -1
  334. package/dist/snapshot/serializer.d.ts +0 -126
  335. package/dist/snapshot/serializer.d.ts.map +0 -1
  336. package/dist/snapshot/serializer.js +0 -238
  337. package/dist/snapshot/serializer.js.map +0 -1
  338. package/dist/standard-schema.cjs +0 -13
  339. package/dist/standard-schema.cjs.map +0 -1
  340. package/dist/standard-schema.d.cts +0 -192
  341. package/dist/standard-schema.d.cts.map +0 -1
  342. package/dist/standard-schema.d.ts +0 -192
  343. package/dist/standard-schema.d.ts.map +0 -1
  344. package/dist/standard-schema.js +0 -12
  345. package/dist/standard-schema.js.map +0 -1
  346. package/dist/types.cjs +0 -22
  347. package/dist/types.cjs.map +0 -1
  348. package/dist/types.d.cts +0 -905
  349. package/dist/types.d.cts.map +0 -1
  350. package/dist/types.d.ts +0 -905
  351. package/dist/types.d.ts.map +0 -1
  352. package/dist/types.js +0 -21
  353. package/dist/types.js.map +0 -1
  354. package/dist/use.cjs +0 -240
  355. package/dist/use.cjs.map +0 -1
  356. package/dist/use.d.cts +0 -8
  357. package/dist/use.d.cts.map +0 -1
  358. package/dist/use.d.ts +0 -8
  359. package/dist/use.d.ts.map +0 -1
  360. package/dist/use.js +0 -236
  361. package/dist/use.js.map +0 -1
  362. package/dist/util.cjs +0 -255
  363. package/dist/util.cjs.map +0 -1
  364. package/dist/util.d.cts +0 -141
  365. package/dist/util.d.cts.map +0 -1
  366. package/dist/util.d.ts +0 -141
  367. package/dist/util.d.ts.map +0 -1
  368. package/dist/util.js +0 -234
  369. package/dist/util.js.map +0 -1
  370. package/dist/value-to-schema.cjs +0 -537
  371. package/dist/value-to-schema.cjs.map +0 -1
  372. package/dist/value-to-schema.d.cts +0 -144
  373. package/dist/value-to-schema.d.cts.map +0 -1
  374. package/dist/value-to-schema.d.ts +0 -144
  375. package/dist/value-to-schema.d.ts.map +0 -1
  376. package/dist/value-to-schema.js +0 -533
  377. package/dist/value-to-schema.js.map +0 -1
@@ -1,812 +0,0 @@
1
- "use strict";
2
- /**
3
- * Parameterized assertions for comparisons, function behavior, and complex
4
- * validation.
5
- *
6
- * These assertions accept additional parameters to customize their behavior,
7
- * including numeric comparisons, string matching, object satisfaction, function
8
- * throwing behavior, and deep equality checks.
9
- *
10
- * @packageDocumentation
11
- * @groupDescription Parametric Assertions (Sync)
12
- * Complex assertions that accept parameters for customized validation behavior.
13
- *
14
- * @showGroups
15
- */
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.satisfiesAssertion = exports.stringLengthAssertion = exports.stringMatchesAssertion = exports.stringIncludesAssertion = exports.functionThrowsTypeSatisfyingAssertion = exports.functionThrowsSatisfyingAssertion = exports.functionThrowsTypeAssertion = exports.functionThrowsAssertion = exports.deepEqualAssertion = exports.strictEqualityAssertion = exports.errorMessageMatchingAssertion = exports.errorMessageAssertion = exports.functionArityAssertion = exports.oneOfAssertion = exports.stringEndsWithAssertion = exports.stringBeginsWithAssertion = exports.stringLessThanOrEqualAssertion = exports.stringGreaterThanOrEqualAssertion = exports.stringLessThanAssertion = exports.stringGreaterThanAssertion = exports.numberCloseToAssertion = exports.numberWithinRangeAssertion = exports.numberLessThanOrEqualAssertion = exports.numberGreaterThanOrEqualAssertion = exports.numberLessThanAssertion = exports.numberGreaterThanAssertion = exports.typeOfAssertion = exports.instanceOfAssertion = void 0;
18
- const node_util_1 = require("node:util");
19
- const zod_1 = require("zod");
20
- const error_js_1 = require("../../error.cjs");
21
- const guards_js_1 = require("../../guards.cjs");
22
- const schema_js_1 = require("../../schema.cjs");
23
- const value_to_schema_js_1 = require("../../value-to-schema.cjs");
24
- const create_js_1 = require("../create.cjs");
25
- const assertion_util_js_1 = require("./assertion-util.cjs");
26
- const { freeze } = Object;
27
- const { abs } = Math;
28
- /**
29
- * For {@link typeOfAssertion}
30
- */
31
- const knownTypes = freeze(new Set([
32
- 'string',
33
- 'number',
34
- 'boolean',
35
- 'undefined',
36
- 'null',
37
- 'BigInt',
38
- 'Symbol',
39
- 'Object',
40
- 'Function',
41
- 'Array',
42
- 'Date',
43
- 'Map',
44
- 'Set',
45
- 'WeakMap',
46
- 'WeakSet',
47
- 'RegExp',
48
- 'Promise',
49
- 'Error',
50
- 'WeakRef',
51
- ]));
52
- /**
53
- * Assertion for testing if a value is an instance of a specific constructor.
54
- *
55
- * @example
56
- *
57
- * ```typescript
58
- * expect(new Date(), 'to be an instance of', Date); // passes
59
- * expect('hello', 'to be a', String); // fails
60
- * ```
61
- *
62
- * @group Parametric Assertions (Sync)
63
- */
64
- exports.instanceOfAssertion = (0, create_js_1.createAssertion)([['to be an instance of', 'to be a', 'to be an'], schema_js_1.ConstructibleSchema], (_, ctor) => createInstanceOfSchema(ctor));
65
- /**
66
- * Assertion for testing if a value is of a specific built-in type.
67
- *
68
- * @example
69
- *
70
- * ```typescript
71
- * expect('hello', 'to be a', 'string'); // passes
72
- * expect(42, 'to be an', 'Array'); // fails
73
- * expect([], 'to be a', 'array'); // passes
74
- * ```
75
- *
76
- * @group Parametric Assertions (Sync)
77
- */
78
- exports.typeOfAssertion = (0, create_js_1.createAssertion)([
79
- schema_js_1.UnknownSchema,
80
- ['to be a', 'to be an', 'to have type'],
81
- zod_1.z.enum([...knownTypes].flatMap((t) => [t, t.toLowerCase()])),
82
- ], (_, type) => {
83
- type = type.toLowerCase();
84
- // these first three are names that are _not_ results of the `typeof` operator; i.e. `typeof x` will never return these strings
85
- switch (type) {
86
- case 'array':
87
- return schema_js_1.UnknownArraySchema;
88
- case 'bigint':
89
- return schema_js_1.BigintSchema;
90
- case 'boolean':
91
- return schema_js_1.BooleanSchema;
92
- case 'date':
93
- return schema_js_1.DateSchema;
94
- case 'error':
95
- return schema_js_1.ErrorSchema;
96
- case 'function':
97
- return schema_js_1.FunctionSchema;
98
- case 'map':
99
- return schema_js_1.MapSchema;
100
- case 'null':
101
- return schema_js_1.NullSchema;
102
- case 'number':
103
- return schema_js_1.NumberSchema;
104
- case 'object':
105
- return schema_js_1.AnyObjectSchema;
106
- case 'promise':
107
- return schema_js_1.WrappedPromiseLikeSchema;
108
- case 'regex': // fallthrough
109
- case 'regexp':
110
- return schema_js_1.RegExpSchema;
111
- case 'set':
112
- return schema_js_1.SetSchema;
113
- case 'string':
114
- return schema_js_1.StringSchema;
115
- case 'symbol':
116
- return schema_js_1.SymbolSchema;
117
- case 'undefined':
118
- return schema_js_1.UndefinedSchema;
119
- case 'weakmap':
120
- return schema_js_1.WeakMapSchema;
121
- case 'weakref':
122
- return schema_js_1.WeakRefSchema;
123
- case 'weakset':
124
- return schema_js_1.WeakSetSchema;
125
- // c8 ignore next 2
126
- default:
127
- throw new error_js_1.BupkisError(`Unknown "type": "${type}"`);
128
- }
129
- });
130
- /**
131
- * Assertion for testing if a number is greater than another number.
132
- *
133
- * @example
134
- *
135
- * ```typescript
136
- * expect(5, 'to be greater than', 3); // passes
137
- * expect(2, 'to be greater than', 5); // fails
138
- * ```
139
- *
140
- * @group Parametric Assertions (Sync)
141
- */
142
- exports.numberGreaterThanAssertion = (0, create_js_1.createAssertion)([schema_js_1.NumberSchema, 'to be greater than', schema_js_1.NumberSchema], (_, other) => schema_js_1.NumberSchema.gt(other));
143
- /**
144
- * Assertion for testing if a number is less than another number.
145
- *
146
- * @example
147
- *
148
- * ```typescript
149
- * expect(3, 'to be less than', 5); // passes
150
- * expect(5, 'to be less than', 2); // fails
151
- * ```
152
- *
153
- * @group Parametric Assertions (Sync)
154
- */
155
- exports.numberLessThanAssertion = (0, create_js_1.createAssertion)([schema_js_1.NumberSchema, ['to be less than', 'to be lt'], schema_js_1.NumberSchema], (_, other) => schema_js_1.NumberSchema.lt(other));
156
- /**
157
- * Assertion for testing if a number is greater than or equal to another number.
158
- *
159
- * @example
160
- *
161
- * ```typescript
162
- * expect(5, 'to be greater than or equal to', 5); // passes
163
- * expect(5, 'to be at least', 3); // passes
164
- * expect(2, 'to be at least', 5); // fails
165
- * ```
166
- *
167
- * @group Parametric Assertions (Sync)
168
- */
169
- exports.numberGreaterThanOrEqualAssertion = (0, create_js_1.createAssertion)([
170
- schema_js_1.NumberSchema,
171
- ['to be greater than or equal to', 'to be at least', 'to be gte'],
172
- schema_js_1.NumberSchema,
173
- ], (_, other) => schema_js_1.NumberSchema.gte(other));
174
- /**
175
- * Assertion for testing if a number is less than or equal to another number.
176
- *
177
- * @example
178
- *
179
- * ```typescript
180
- * expect(3, 'to be less than or equal to', 5); // passes
181
- * expect(5, 'to be at most', 5); // passes
182
- * expect(7, 'to be at most', 5); // fails
183
- * ```
184
- *
185
- * @group Parametric Assertions (Sync)
186
- */
187
- exports.numberLessThanOrEqualAssertion = (0, create_js_1.createAssertion)([
188
- schema_js_1.NumberSchema,
189
- ['to be less than or equal to', 'to be at most', 'to be lte'],
190
- schema_js_1.NumberSchema,
191
- ], (_, other) => schema_js_1.NumberSchema.lte(other));
192
- /**
193
- * Assertion for testing if a number is within a specific range (inclusive).
194
- *
195
- * @example
196
- *
197
- * ```typescript
198
- * expect(5, 'to be within', 1, 10); // passes
199
- * expect(15, 'to be between', 1, 10); // fails
200
- * ```
201
- *
202
- * @group Parametric Assertions (Sync)
203
- */
204
- exports.numberWithinRangeAssertion = (0, create_js_1.createAssertion)([schema_js_1.NumberSchema, ['to be within', 'to be between'], schema_js_1.NumberSchema, schema_js_1.NumberSchema], (subject, min, max) => {
205
- if (subject < min || subject > max) {
206
- return {
207
- message: `Expected ${subject} to be within range [${min}, ${max}]`,
208
- };
209
- }
210
- });
211
- /**
212
- * Assertion for testing if a number is close to another number within a
213
- * tolerance.
214
- *
215
- * @example
216
- *
217
- * ```typescript
218
- * expect(1.0001, 'to be close to', 1.0, 0.001); // passes
219
- * expect(1.1, 'to be close to', 1.0, 0.01); // fails
220
- * ```
221
- *
222
- * @group Parametric Assertions (Sync)
223
- */
224
- exports.numberCloseToAssertion = (0, create_js_1.createAssertion)([schema_js_1.NumberSchema, 'to be close to', schema_js_1.NumberSchema, schema_js_1.NumberSchema.optional()], (subject, expected, tolerance = 1e-9) => {
225
- const diff = abs(subject - expected);
226
- if (diff > tolerance) {
227
- return {
228
- actual: subject,
229
- expected,
230
- message: `Expected ${subject} to be close to ${expected} (within ${tolerance}), but difference was ${diff}`,
231
- };
232
- }
233
- });
234
- /**
235
- * Assertion for testing if a string is lexicographically greater than another
236
- * string.
237
- *
238
- * @example
239
- *
240
- * ```typescript
241
- * expect('b', 'to be greater than', 'a'); // passes
242
- * expect('apple', 'to be greater than', 'banana'); // fails
243
- * ```
244
- *
245
- * @group Parametric Assertions (Sync)
246
- */
247
- exports.stringGreaterThanAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to be greater than', schema_js_1.StringSchema], (subject, other) => {
248
- if (!(subject > other)) {
249
- return {
250
- message: `Expected "${subject}" to be greater than "${other}"`,
251
- };
252
- }
253
- });
254
- /**
255
- * Assertion for testing if a string is lexicographically less than another
256
- * string.
257
- *
258
- * @example
259
- *
260
- * ```typescript
261
- * expect('a', 'to be less than', 'b'); // passes
262
- * expect('banana', 'to be less than', 'apple'); // fails
263
- * ```
264
- *
265
- * @group Parametric Assertions (Sync)
266
- */
267
- exports.stringLessThanAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to be less than', schema_js_1.StringSchema], (subject, other) => {
268
- if (!(subject < other)) {
269
- return {
270
- message: `Expected "${subject}" to be less than "${other}"`,
271
- };
272
- }
273
- });
274
- /**
275
- * Assertion for testing if a string is lexicographically greater than or equal
276
- * to another string.
277
- *
278
- * @example
279
- *
280
- * ```typescript
281
- * expect('b', 'to be greater than or equal to', 'a'); // passes
282
- * expect('a', 'to be greater than or equal to', 'a'); // passes
283
- * expect('a', 'to be greater than or equal to', 'b'); // fails
284
- * ```
285
- *
286
- * @group Parametric Assertions (Sync)
287
- */
288
- exports.stringGreaterThanOrEqualAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to be greater than or equal to', schema_js_1.StringSchema], (subject, other) => {
289
- if (!(subject >= other)) {
290
- return {
291
- message: `Expected "${subject}" to be greater than or equal to "${other}"`,
292
- };
293
- }
294
- });
295
- /**
296
- * Assertion for testing if a string is lexicographically less than or equal to
297
- * another string.
298
- *
299
- * @example
300
- *
301
- * ```typescript
302
- * expect('a', 'to be less than or equal to', 'b'); // passes
303
- * expect('a', 'to be less than or equal to', 'a'); // passes
304
- * expect('b', 'to be less than or equal to', 'a'); // fails
305
- * ```
306
- *
307
- * @group Parametric Assertions (Sync)
308
- */
309
- exports.stringLessThanOrEqualAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to be less than or equal to', schema_js_1.StringSchema], (subject, other) => {
310
- if (!(subject <= other)) {
311
- return {
312
- message: `Expected "${subject}" to be less than or equal to "${other}"`,
313
- };
314
- }
315
- });
316
- /**
317
- * Assertion for testing if a string begins with a specific prefix.
318
- *
319
- * @example
320
- *
321
- * ```typescript
322
- * expect('hello world', 'to begin with', 'hello'); // passes
323
- * expect('hello world', 'to start with', 'world'); // fails
324
- * ```
325
- *
326
- * @group Parametric Assertions (Sync)
327
- */
328
- exports.stringBeginsWithAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, ['to begin with', 'to start with'], schema_js_1.StringSchema], (subject, prefix) => {
329
- if (!subject.startsWith(prefix)) {
330
- return {
331
- message: `Expected "${subject}" to begin with "${prefix}"`,
332
- };
333
- }
334
- });
335
- /**
336
- * Assertion for testing if a string ends with a specific suffix.
337
- *
338
- * @example
339
- *
340
- * ```typescript
341
- * expect('hello world', 'to end with', 'world'); // passes
342
- * expect('hello world', 'to end with', 'hello'); // fails
343
- * ```
344
- *
345
- * @group Parametric Assertions (Sync)
346
- */
347
- exports.stringEndsWithAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to end with', schema_js_1.StringSchema], (subject, suffix) => {
348
- if (!subject.endsWith(suffix)) {
349
- return {
350
- message: `Expected "${subject}" to end with "${suffix}"`,
351
- };
352
- }
353
- });
354
- /**
355
- * Assertion for testing if a value is one of a specific set of values.
356
- *
357
- * @example
358
- *
359
- * ```typescript
360
- * expect('red', 'to be one of', ['red', 'green', 'blue']); // passes
361
- * expect('yellow', 'to be one of', ['red', 'green', 'blue']); // fails
362
- * ```
363
- *
364
- * @group Parametric Assertions (Sync)
365
- */
366
- exports.oneOfAssertion = (0, create_js_1.createAssertion)(['to be one of', schema_js_1.UnknownArraySchema], (subject, values) => {
367
- if (!values.includes(subject)) {
368
- return {
369
- actual: subject,
370
- expected: values,
371
- message: `Expected ${(0, node_util_1.inspect)(subject)} to be one of [${values.map((v) => (0, node_util_1.inspect)(v)).join(', ')}]`,
372
- };
373
- }
374
- });
375
- /**
376
- * Assertion for testing if a function has a specific arity (number of
377
- * parameters).
378
- *
379
- * @example
380
- *
381
- * ```typescript
382
- * expect((a, b) => a + b, 'to have arity', 2); // passes
383
- * expect((a, b, c) => a + b + c, 'to have arity', 2); // fails
384
- * ```
385
- *
386
- * @group Parametric Assertions (Sync)
387
- */
388
- exports.functionArityAssertion = (0, create_js_1.createAssertion)([schema_js_1.FunctionSchema, 'to have arity', schema_js_1.NonNegativeIntegerSchema], (subject, expectedArity) => {
389
- if (subject.length !== expectedArity) {
390
- return {
391
- actual: subject.length,
392
- expected: expectedArity,
393
- message: `Expected function to have arity ${expectedArity}, but it has arity ${subject.length}`,
394
- };
395
- }
396
- });
397
- /**
398
- * Assertion for testing if an Error has a specific message.
399
- *
400
- * @example
401
- *
402
- * ```typescript
403
- * expect(new Error('oops'), 'to have message', 'oops'); // passes
404
- * expect(new Error('oops'), 'to have message', 'wrong'); // fails
405
- * ```
406
- *
407
- * @group Parametric Assertions (Sync)
408
- */
409
- exports.errorMessageAssertion = (0, create_js_1.createAssertion)([schema_js_1.ErrorSchema, 'to have message', schema_js_1.StringSchema], (subject, expectedMessage) => {
410
- if (subject.message !== expectedMessage) {
411
- return {
412
- actual: subject.message,
413
- expected: expectedMessage,
414
- message: `Expected error message "${subject.message}" to equal "${expectedMessage}"`,
415
- };
416
- }
417
- });
418
- /**
419
- * Assertion for testing if an Error has a message matching a regular
420
- * expression.
421
- *
422
- * @example
423
- *
424
- * ```typescript
425
- * expect(
426
- * new Error('Error: something went wrong'),
427
- * 'to have message matching',
428
- * /something/,
429
- * ); // passes
430
- * expect(new Error('All good'), 'to have message matching', /error/i); // fails
431
- * ```
432
- *
433
- * @group Parametric Assertions (Sync)
434
- */
435
- exports.errorMessageMatchingAssertion = (0, create_js_1.createAssertion)([schema_js_1.ErrorSchema, 'to have message matching', schema_js_1.RegExpSchema], (subject, pattern) => {
436
- if (!pattern.test(subject.message)) {
437
- return {
438
- message: `Expected error message "${subject.message}" to match ${pattern}`,
439
- };
440
- }
441
- });
442
- /**
443
- * Assertion for testing strict equality between two values.
444
- *
445
- * @example
446
- *
447
- * ```typescript
448
- * expect(42, 'to be', 42); // passes
449
- * expect('hello', 'to equal', 'hello'); // passes
450
- * expect({}, 'to be', {}); // fails (different object references)
451
- * ```
452
- *
453
- * @group Parametric Assertions (Sync)
454
- */
455
- exports.strictEqualityAssertion = (0, create_js_1.createAssertion)([
456
- [
457
- 'to be',
458
- 'to equal',
459
- 'equals',
460
- 'is',
461
- 'is equal to',
462
- 'to strictly equal',
463
- 'is strictly equal to',
464
- ],
465
- schema_js_1.UnknownSchema,
466
- ], (subject, value) => {
467
- if (subject !== value) {
468
- return {
469
- actual: subject,
470
- expected: value,
471
- message: `Expected ${(0, node_util_1.inspect)(subject)} to equal ${(0, node_util_1.inspect)(value)}`,
472
- };
473
- }
474
- });
475
- /**
476
- * Assertion for testing deep equality between any values.
477
- *
478
- * Works with primitives, objects, arrays, Maps, Sets, and other types.
479
- *
480
- * @example
481
- *
482
- * ```typescript
483
- * // Primitives
484
- * expect(42, 'to deep equal', 42); // passes
485
- * expect('hello', 'to deeply equal', 'world'); // fails
486
- *
487
- * // Objects
488
- * expect({ a: 1, b: 2 }, 'to deep equal', { a: 1, b: 2 }); // passes
489
- * expect({ a: 1 }, 'to deeply equal', { a: 1, b: 2 }); // fails
490
- *
491
- * // Arrays
492
- * expect([1, 2, 3], 'to deep equal', [1, 2, 3]); // passes
493
- *
494
- * // Maps and Sets
495
- * expect(new Map([['a', 1]]), 'to deep equal', new Map([['a', 1]])); // passes
496
- * expect(new Set([1, 2]), 'to deeply equal', new Set([1, 2])); // passes
497
- * ```
498
- *
499
- * @group Parametric Assertions (Sync)
500
- * @bupkisAnchor unknown-to-deep-equal-any
501
- * @bupkisAssertionCategory equality
502
- */
503
- exports.deepEqualAssertion = (0, create_js_1.createAssertion)([['to deep equal', 'to deeply equal'], schema_js_1.UnknownSchema], (_, expected) => (0, value_to_schema_js_1.valueToSchema)(expected, value_to_schema_js_1.valueToSchemaOptionsForDeepEqual));
504
- /**
505
- * Assertion for testing if a function throws an error when called.
506
- *
507
- * @example
508
- *
509
- * ```typescript
510
- * expect(() => {
511
- * throw new Error('oops');
512
- * }, 'to throw'); // passes
513
- * expect(() => 'hello', 'to throw'); // fails
514
- * ```
515
- *
516
- * @group Parametric Assertions (Sync)
517
- * @bupkisAnchor function-to-throw-any
518
- * @bupkisAssertionCategory function
519
- * @bupkisRedirect to-throw
520
- */
521
- exports.functionThrowsAssertion = (0, create_js_1.createAssertion)([schema_js_1.FunctionSchema, 'to throw'], (subject) => {
522
- const { error, result } = (0, assertion_util_js_1.trapError)(subject);
523
- if (error === undefined) {
524
- return {
525
- message: `Expected function to throw, but it fulfilled with ${(0, node_util_1.inspect)(result)}`,
526
- };
527
- }
528
- });
529
- /**
530
- * Assertion for testing if a function throws an error of a specific type.
531
- *
532
- * @example
533
- *
534
- * ```typescript
535
- * expect(
536
- * () => {
537
- * throw new TypeError('wrong type');
538
- * },
539
- * 'to throw a',
540
- * TypeError,
541
- * ); // passes
542
- * expect(
543
- * () => {
544
- * throw new Error('oops');
545
- * },
546
- * 'to throw an',
547
- * TypeError,
548
- * ); // fails
549
- * ```
550
- *
551
- * @group Parametric Assertions (Sync)
552
- */
553
- exports.functionThrowsTypeAssertion = (0, create_js_1.createAssertion)([schema_js_1.FunctionSchema, ['to throw a', 'to throw an'], schema_js_1.ConstructibleSchema], (subject, ctor) => {
554
- const { error, result } = (0, assertion_util_js_1.trapError)(subject);
555
- if (error === undefined) {
556
- return {
557
- message: `Expected function to throw, but fulfilled with ${(0, node_util_1.inspect)(result)}`,
558
- };
559
- }
560
- if (!(0, guards_js_1.isA)(error, ctor)) {
561
- if ((0, guards_js_1.isNonNullObject)(error)) {
562
- const err = error;
563
- return {
564
- actual: err.constructor.name,
565
- expected: ctor.name,
566
- message: `Expected function to throw with an instance of ${ctor.name}, but it threw with a ${err.constructor.name}`,
567
- };
568
- }
569
- return {
570
- actual: typeof error,
571
- expected: ctor.name,
572
- message: `Expected function to throw with an instance of ${ctor.name}, but it threw a value of type ${typeof error}: ${(0, node_util_1.inspect)(error)}`,
573
- };
574
- }
575
- });
576
- /**
577
- * Assertion for testing if a function throws an error matching specific
578
- * criteria.
579
- *
580
- * @example
581
- *
582
- * ```typescript
583
- * expect(
584
- * () => {
585
- * throw new Error('oops');
586
- * },
587
- * 'to throw',
588
- * 'oops',
589
- * ); // passes
590
- * expect(
591
- * () => {
592
- * throw new Error('fail');
593
- * },
594
- * 'to throw',
595
- * /error/i,
596
- * ); // passes
597
- * expect(
598
- * () => {
599
- * throw new Error('oops');
600
- * },
601
- * 'to throw',
602
- * { message: 'oops' },
603
- * ); // passes
604
- * ```
605
- *
606
- * @group Parametric Assertions (Sync)
607
- */
608
- exports.functionThrowsSatisfyingAssertion = (0, create_js_1.createAssertion)([schema_js_1.FunctionSchema, ['to throw', 'to throw error satisfying'], schema_js_1.UnknownSchema], (subject, param) => {
609
- const { error } = (0, assertion_util_js_1.trapError)(subject);
610
- if (error === undefined) {
611
- return {
612
- message: 'Expected function to throw, but it did not',
613
- };
614
- }
615
- if ((0, guards_js_1.isString)(param)) {
616
- return {
617
- schema: (0, schema_js_1.createErrorMessageSchema)(param),
618
- subject: error,
619
- };
620
- }
621
- else if ((0, guards_js_1.isA)(param, RegExp)) {
622
- return {
623
- schema: (0, schema_js_1.createErrorMessageRegexSchema)(param),
624
- subject: error,
625
- };
626
- }
627
- else if ((0, guards_js_1.isNonNullObject)(param)) {
628
- const schema = (0, value_to_schema_js_1.valueToSchema)(param, value_to_schema_js_1.valueToSchemaOptionsForSatisfies);
629
- return { schema, subject: error };
630
- }
631
- else {
632
- throw new error_js_1.InvalidObjectSchemaError(`Invalid parameter schema: ${(0, node_util_1.inspect)(param, { depth: 2 })}`, { schema: param });
633
- }
634
- });
635
- /**
636
- * Assertion for testing if a function throws an error of a specific type that
637
- * also matches criteria.
638
- *
639
- * @example
640
- *
641
- * ```typescript
642
- * expect(
643
- * () => {
644
- * throw new TypeError('wrong type');
645
- * },
646
- * 'to throw a',
647
- * TypeError,
648
- * 'satisfying',
649
- * { message: 'wrong type' },
650
- * ); // passes
651
- * expect(
652
- * () => {
653
- * throw new Error('oops');
654
- * },
655
- * 'to throw an',
656
- * TypeError,
657
- * 'satisfying',
658
- * /type/,
659
- * ); // fails
660
- * ```
661
- *
662
- * @group Parametric Assertions (Sync)
663
- */
664
- exports.functionThrowsTypeSatisfyingAssertion = (0, create_js_1.createAssertion)([
665
- schema_js_1.FunctionSchema,
666
- ['to throw a', 'to throw an'],
667
- schema_js_1.ConstructibleSchema,
668
- 'satisfying',
669
- schema_js_1.UnknownSchema,
670
- ], (subject, ctor, param) => {
671
- const { error, result } = (0, assertion_util_js_1.trapError)(subject);
672
- if (error === undefined) {
673
- return {
674
- message: `Expected function to throw, but it fulfilled with ${(0, node_util_1.inspect)(result)}`,
675
- };
676
- }
677
- if (!(0, guards_js_1.isA)(error, ctor)) {
678
- return {
679
- message: (0, guards_js_1.isError)(error)
680
- ? `Expected function to throw an instance of ${ctor.name}, but it threw ${error.constructor.name}`
681
- : `Expected function to throw an instance of ${ctor.name}, but it threw a non-object value: ${(0, node_util_1.inspect)(error)}`,
682
- };
683
- }
684
- let schema;
685
- // TODO: can valueToSchema handle the first two conditional branches?
686
- if ((0, guards_js_1.isString)(param)) {
687
- schema = (0, schema_js_1.createErrorMessageSchema)(param);
688
- }
689
- else if ((0, guards_js_1.isA)(param, RegExp)) {
690
- schema = (0, schema_js_1.createErrorMessageRegexSchema)(param);
691
- }
692
- else if ((0, guards_js_1.isNonNullObject)(param)) {
693
- schema = (0, value_to_schema_js_1.valueToSchema)(param, value_to_schema_js_1.valueToSchemaOptionsForSatisfies);
694
- }
695
- if (!schema) {
696
- throw new error_js_1.InvalidObjectSchemaError(`Invalid parameter schema: ${(0, node_util_1.inspect)(param)}`, { schema: param });
697
- }
698
- return {
699
- schema,
700
- subject: error,
701
- };
702
- });
703
- /**
704
- * Assertion for testing if a string includes/contains another string.
705
- *
706
- * @example
707
- *
708
- * ```typescript
709
- * expect('hello world', 'includes', 'world'); // passes
710
- * expect('hello world', 'contains', 'foo'); // fails
711
- * expect('hello world', 'to include', 'hello'); // passes
712
- * expect('hello world', 'to contain', 'bar'); // fails
713
- * ```
714
- *
715
- * @group Parametric Assertions (Sync)
716
- */
717
- exports.stringIncludesAssertion = (0, create_js_1.createAssertion)([
718
- schema_js_1.StringSchema,
719
- ['includes', 'contains', 'to include', 'to contain'],
720
- schema_js_1.StringSchema,
721
- ], (subject, expected) => {
722
- if (!subject.includes(expected)) {
723
- return {
724
- message: `Expected "${subject}" to include "${expected}"`,
725
- };
726
- }
727
- });
728
- /**
729
- * Assertion for testing if a string matches a regular expression.
730
- *
731
- * @example
732
- *
733
- * ```typescript
734
- * expect('hello123', 'to match', /\d+/); // passes
735
- * expect('hello', 'to match', /\d+/); // fails
736
- * ```
737
- *
738
- * @group Parametric Assertions (Sync)
739
- */
740
- exports.stringMatchesAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to match', schema_js_1.RegExpSchema], (subject, regex) => regex.test(subject));
741
- /**
742
- * Assertion for testing if a string has a specific length.
743
- *
744
- * @example
745
- *
746
- * ```typescript
747
- * expect('hello', 'to have length', 5); // passes
748
- * expect('hi', 'to have length', 5); // fails
749
- * ```
750
- *
751
- * @group Parametric Assertions (Sync)
752
- * @bupkisAnchor string-to-have-length
753
- * @bupkisAssertionCategory strings
754
- */
755
- exports.stringLengthAssertion = (0, create_js_1.createAssertion)([schema_js_1.StringSchema, 'to have length', schema_js_1.NonNegativeIntegerSchema],
756
- // StringSchema.length() produces a ZodError with a string diff (e.g., "hel"
757
- // vs "hello") rather than comparing numeric lengths, which is confusing
758
- (subject, expectedLength) => {
759
- if (subject.length !== expectedLength) {
760
- return {
761
- actual: subject.length,
762
- expected: expectedLength,
763
- message: `Expected string to have length ${expectedLength}, but it has length ${subject.length}`,
764
- };
765
- }
766
- });
767
- /**
768
- * Assertion for testing if a value satisfies a pattern or shape.
769
- *
770
- * Works with any value type: primitives, objects, arrays, or cross-type checks.
771
- * Uses partial matching semantics - extra properties are allowed in objects.
772
- *
773
- * @example
774
- *
775
- * ```typescript
776
- * // Primitives
777
- * expect(42, 'to satisfy', 42); // passes
778
- * expect('hello', 'satisfies', 'hello'); // passes
779
- *
780
- * // Objects (partial matching)
781
- * expect({ name: 'John', age: 30 }, 'to satisfy', { name: 'John' }); // passes
782
- * expect({ name: 'John' }, 'to be like', { name: 'John', age: 30 }); // fails
783
- *
784
- * // Arrays
785
- * expect([1, 2, 3], 'to satisfy', [1, 2, 3]); // passes
786
- *
787
- * // Cross-type satisfaction
788
- * expect([1, 2, 3], 'to satisfy', { length: 3 }); // passes
789
- * ```
790
- *
791
- * @group Parametric Assertions (Sync)
792
- * @bupkisAnchor unknown-to-satisfy-any
793
- * @bupkisAssertionCategory equality
794
- */
795
- exports.satisfiesAssertion = (0, create_js_1.createAssertion)([['to satisfy', 'to be like', 'satisfies'], schema_js_1.UnknownSchema], (_subject, shape) => (0, value_to_schema_js_1.valueToSchema)(shape, value_to_schema_js_1.valueToSchemaOptionsForSatisfies));
796
- /**
797
- * Memoizes {@link createInstanceOfSchema}
798
- */
799
- const createInstanceOfSchemaCache = new WeakMap();
800
- /**
801
- * @function
802
- */
803
- const createInstanceOfSchema = (ctor) => {
804
- const cached = createInstanceOfSchemaCache.get(ctor);
805
- if (cached) {
806
- return cached;
807
- }
808
- const schema = zod_1.z.instanceof(ctor);
809
- createInstanceOfSchemaCache.set(ctor, schema);
810
- return schema;
811
- };
812
- //# sourceMappingURL=sync-parametric.js.map