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
package/dist/expect.js DELETED
@@ -1,582 +0,0 @@
1
- import createDebug from 'debug';
2
- import { inspect } from 'util';
3
- import { createAssertion, createAsyncAssertion } from "./assertion/create.js";
4
- import { AssertionError, AssertionImplementationError, FailAssertionError, NegatedAssertionError, UnknownAssertionError, } from "./error.js";
5
- import { isString } from "./guards.js";
6
- import { createUse } from "./use.js";
7
- const debug = createDebug('bupkis:expect');
8
- /**
9
- * Implementation function that creates an asynchronous expect function with
10
- * optional parent inheritance.
11
- *
12
- * This is the concrete implementation that handles both overload cases for
13
- * Promise-based assertions. It creates an expectAsync function that uses a
14
- * two-phase matching algorithm: first seeking exact phrase matches for optimal
15
- * performance, then falling back to partial matches if needed. The function
16
- * processes negation keywords, combines parent assertions with new ones, and
17
- * ensures all operations are properly awaited.
18
- *
19
- * The matching algorithm prioritizes exact matches to minimize performance
20
- * overhead, but provides flexibility through partial matching when exact
21
- * phrases don't align. This enables natural language flexibility while
22
- * maintaining execution speed for common async assertion patterns.
23
- *
24
- * @remarks
25
- * The function performs async assertion matching in the following order:
26
- *
27
- * 1. Awaits `Promise.resolve()` to ensure the function is always asynchronous
28
- * 2. Processes negation keywords ('not', 'to not') to determine assertion mode
29
- * 3. Combines parent assertions (if provided) with new assertions in execution
30
- * order
31
- * 4. Attempts to parse arguments against each assertion's expected phrase pattern
32
- * using `parseValuesAsync`
33
- * 5. Prioritizes exact phrase matches over partial matches for performance
34
- * 6. Executes the first successful match using {@link executeAsync} or throws an
35
- * error if none found
36
- *
37
- * Performance considerations: The function loops through all available
38
- * assertions for each call, but uses early termination when exact matches are
39
- * found. For performance-critical code, consider using assertion functions with
40
- * fewer total assertions or more specific phrase patterns to reduce matching
41
- * overhead.
42
- *
43
- * All assertion execution is properly awaited to handle Promise-based
44
- * validation logic, error handling, and negation scenarios in asynchronous
45
- * contexts.
46
- * @example
47
- *
48
- * ```typescript
49
- * // Used internally by both public overloads
50
- * const expectAsync1 = createExpectAsyncFunction(assertions); // No parent
51
- * const expectAsync2 = createExpectAsyncFunction(assertions, parent); // With parent
52
- * ```
53
- *
54
- * @param assertions - Array of asynchronous assertion objects to make available
55
- * @param expect - Optional parent expectAsync function to inherit assertions
56
- * from
57
- * @returns Asynchronous expect function that processes natural language
58
- * assertions with Promise support
59
- * @throws {@link AssertionError} When an assertion fails in normal
60
- * (non-negated) mode
61
- * @throws {@link NegatedAssertionError} When a negated assertion fails (e.g.,
62
- * `await expectAsync(promise, 'not to resolve')`)
63
- * @throws {Error} When no matching assertion can be found for the provided
64
- * arguments
65
- * @internal This is the concrete implementation used by the public overloads
66
- * @see {@link createExpectSyncFunction} for creating synchronous expect functions
67
- * @see {@link createAsyncAssertion} for creating individual async assertion objects
68
- * @see {@link ExpectAsync} for the main expectAsync interface
69
- */
70
- export function createExpectAsyncFunction(assertions, expect) {
71
- // Combine all assertions once at creation time
72
- const allAssertions = [
73
- ...(expect?.assertions ?? []),
74
- ...assertions,
75
- ];
76
- // Build phrase index for fast dispatch
77
- const phraseIndex = buildPhraseIndex(allAssertions);
78
- debug('ℹ Creating expectAsync function with %d new assertions and %d existing assertions (%d total, %d indexed phrases)', assertions.length, expect?.assertions.length ?? 0, allAssertions.length, phraseIndex.size);
79
- /**
80
- * @function
81
- */
82
- const expectAsyncFunction = async (...args) => {
83
- await Promise.resolve();
84
- const argsMatrix = conjunctify(args);
85
- // First, try all conjunctified argument sets
86
- let foundCount = 0;
87
- for (const args of argsMatrix) {
88
- const { isNegated, processedArgs } = maybeProcessNegation(args);
89
- const candidates = [];
90
- // Use phrase index for O(1) candidate lookup, fall back to full scan
91
- const assertionsToCheck = getCandidateAssertions(processedArgs, phraseIndex, allAssertions);
92
- for (const assertion of assertionsToCheck) {
93
- const parseResult = await assertion.parseValuesAsync(processedArgs);
94
- const { exactMatch, parsedValues, success } = parseResult;
95
- if (success) {
96
- if (exactMatch) {
97
- foundCount++;
98
- await executeAsync(assertion, parsedValues, [...args], expectAsyncFunction, isNegated, parseResult);
99
- break;
100
- }
101
- candidates.push({ assertion, parseResult });
102
- }
103
- }
104
- if (candidates.length) {
105
- const { assertion, parseResult } = candidates[0];
106
- foundCount++;
107
- await executeAsync(assertion,
108
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
109
- parseResult.parsedValues, [...args], expectAsyncFunction, isNegated, parseResult);
110
- }
111
- }
112
- if (foundCount >= argsMatrix.length) {
113
- return;
114
- }
115
- // Fallback: if all conjunctified attempts failed and we actually split on "and",
116
- // try different permutations of rejoining the split parts
117
- if (argsMatrix.length > 1) {
118
- const rejoinPermutations = generateRejoinPermutations(argsMatrix, args);
119
- for (const permutation of rejoinPermutations) {
120
- const { isNegated, processedArgs } = maybeProcessNegation(permutation);
121
- const candidates = [];
122
- // Use phrase index for O(1) candidate lookup, fall back to full scan
123
- const assertionsToCheck = getCandidateAssertions(processedArgs, phraseIndex, allAssertions);
124
- for (const assertion of assertionsToCheck) {
125
- const parseResult = await assertion.parseValuesAsync(processedArgs);
126
- const { exactMatch, parsedValues, success } = parseResult;
127
- if (success) {
128
- if (exactMatch) {
129
- await executeAsync(assertion, parsedValues, [...permutation], expectAsyncFunction, isNegated, parseResult);
130
- return;
131
- }
132
- candidates.push({ assertion, parseResult });
133
- }
134
- }
135
- if (candidates.length) {
136
- const { assertion, parseResult } = candidates[0];
137
- await executeAsync(assertion,
138
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
139
- parseResult.parsedValues, [...permutation], expectAsyncFunction, isNegated, parseResult);
140
- return;
141
- }
142
- }
143
- }
144
- throwInvalidParametersError(args);
145
- };
146
- return expectAsyncFunction;
147
- }
148
- /**
149
- * Implementation function that creates a synchronous expect function with
150
- * optional parent inheritance.
151
- *
152
- * This is the concrete implementation that handles both overload cases. It
153
- * creates an expect function that uses a two-phase matching algorithm: first
154
- * seeking exact phrase matches for optimal performance, then falling back to
155
- * partial matches if needed. The function processes negation keywords and
156
- * combines parent assertions with new ones.
157
- *
158
- * The matching algorithm prioritizes exact matches to minimize performance
159
- * overhead, but provides flexibility through partial matching when exact
160
- * phrases don't align. This enables natural language flexibility while
161
- * maintaining execution speed for common assertion patterns.
162
- *
163
- * @remarks
164
- * The function performs assertion matching in the following order:
165
- *
166
- * 1. Processes negation keywords ('not', 'to not') to determine assertion mode
167
- * 2. Combines parent assertions (if provided) with new assertions in execution
168
- * order
169
- * 3. Attempts to parse arguments against each assertion's expected phrase pattern
170
- * 4. Prioritizes exact phrase matches over partial matches for performance
171
- * 5. Executes the first successful match or throws an error if none found
172
- *
173
- * Performance considerations: The function loops through all available
174
- * assertions for each call, but uses early termination when exact matches are
175
- * found. For performance-critical code, consider using assertion functions with
176
- * fewer total assertions or more specific phrase patterns to reduce matching
177
- * overhead.
178
- * @example
179
- *
180
- * ```typescript
181
- * // Used internally by both public overloads
182
- * const expect1 = createExpectSyncFunction(assertions); // No parent
183
- * const expect2 = createExpectSyncFunction(assertions, parent); // With parent
184
- * ```
185
- *
186
- * @param assertions - Array of synchronous assertion objects to make available
187
- * @param expect - Optional parent expect function to inherit assertions from
188
- * @returns Synchronous expect function that processes natural language
189
- * assertions
190
- * @throws {@link AssertionError} When an assertion fails in normal
191
- * (non-negated) mode
192
- * @throws {@link NegatedAssertionError} When a negated assertion fails (e.g.,
193
- * `expect(42, 'not to be a number')`)
194
- * @throws {Error} When no matching assertion can be found for the provided
195
- * arguments
196
- * @internal This is the concrete implementation used by the public overloads
197
- * @see {@link createExpectAsyncFunction} for creating asynchronous expect functions
198
- * @see {@link createAssertion} for creating individual assertion objects
199
- * @see {@link Expect} for the main expect interface
200
- */
201
- export function createExpectSyncFunction(assertions, expect) {
202
- // Combine all assertions once at creation time
203
- const allAssertions = [
204
- ...(expect?.assertions ?? []),
205
- ...assertions,
206
- ];
207
- // Build phrase index for fast dispatch
208
- const phraseIndex = buildPhraseIndex(allAssertions);
209
- debug('ℹ Creating expect function with %d new assertions and %d existing assertions (%d total, %d indexed phrases)', assertions.length, expect?.assertions.length ?? 0, allAssertions.length, phraseIndex.size);
210
- /**
211
- * @function
212
- */
213
- const expectFunction = (...args) => {
214
- const argsMatrix = conjunctify(args);
215
- // First, try all conjunctified argument sets
216
- let foundCount = 0;
217
- for (const args of argsMatrix) {
218
- const { isNegated, processedArgs } = maybeProcessNegation(args);
219
- const candidates = [];
220
- // Use phrase index for O(1) candidate lookup, fall back to full scan
221
- const assertionsToCheck = getCandidateAssertions(processedArgs, phraseIndex, allAssertions);
222
- for (const assertion of assertionsToCheck) {
223
- const parseResult = assertion.parseValues(processedArgs);
224
- const { exactMatch, parsedValues, success } = parseResult;
225
- if (success) {
226
- if (exactMatch) {
227
- foundCount++;
228
- execute(assertion, parsedValues, [...args], expectFunction, isNegated, parseResult);
229
- break;
230
- }
231
- candidates.push({ assertion, parseResult });
232
- }
233
- }
234
- if (candidates.length) {
235
- const { assertion, parseResult } = candidates[0];
236
- foundCount++;
237
- execute(assertion,
238
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
239
- parseResult.parsedValues, [...args], expectFunction, isNegated, parseResult);
240
- }
241
- }
242
- if (foundCount >= argsMatrix.length) {
243
- return;
244
- }
245
- // Fallback: if all conjunctified attempts failed and we actually split on "and",
246
- // try different permutations of rejoining the split parts
247
- if (argsMatrix.length > 1) {
248
- const rejoinPermutations = generateRejoinPermutations(argsMatrix, args);
249
- for (const permutation of rejoinPermutations) {
250
- const { isNegated, processedArgs } = maybeProcessNegation(permutation);
251
- const candidates = [];
252
- // Use phrase index for O(1) candidate lookup, fall back to full scan
253
- const assertionsToCheck = getCandidateAssertions(processedArgs, phraseIndex, allAssertions);
254
- for (const assertion of assertionsToCheck) {
255
- const parseResult = assertion.parseValues(processedArgs);
256
- const { exactMatch, parsedValues, success } = parseResult;
257
- if (success) {
258
- if (exactMatch) {
259
- execute(assertion, parsedValues, [...permutation], expectFunction, isNegated, parseResult);
260
- return;
261
- }
262
- candidates.push({ assertion, parseResult });
263
- }
264
- }
265
- if (candidates.length) {
266
- const { assertion, parseResult } = candidates[0];
267
- execute(assertion,
268
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
269
- parseResult.parsedValues, [...permutation], expectFunction, isNegated, parseResult);
270
- return;
271
- }
272
- }
273
- }
274
- throwInvalidParametersError(args);
275
- };
276
- return expectFunction;
277
- }
278
- /**
279
- * Executes an assertion with optional negation logic.
280
- *
281
- * @privateRemarks
282
- * This is here because `Assertion` doesn't know anything about negation and
283
- * probably shouldn't.
284
- * @function
285
- * @param assertion - The assertion to execute
286
- * @param parsedValues - Parsed values for the assertion
287
- * @param args - Original arguments passed to expect
288
- * @param stackStartFn - Function for stack trace management
289
- * @param isNegated - Whether the assertion should be negated
290
- */
291
- const execute = (assertion, parsedValues, args, stackStartFn, isNegated, parseResult) => {
292
- try {
293
- assertion.execute(parsedValues, args, stackStartFn, parseResult);
294
- }
295
- catch (error) {
296
- handleAssertionError(error, assertion, isNegated);
297
- return;
298
- }
299
- if (isNegated) {
300
- throwNegatedAssertionPassedError(assertion, stackStartFn);
301
- }
302
- };
303
- /**
304
- * Executes an assertion with optional negation logic (async version).
305
- *
306
- * @privateRemarks
307
- * This is here because `Assertion` doesn't know anything about negation and
308
- * probably shouldn't.
309
- * @function
310
- * @param assertion - The assertion to execute
311
- * @param parsedValues - Parsed values for the assertion
312
- * @param args - Original arguments passed to expectAsync
313
- * @param stackStartFn - Function for stack trace management
314
- * @param isNegated - Whether the assertion should be negated
315
- */
316
- const executeAsync = async (assertion, parsedValues, args, stackStartFn, isNegated, parseResult) => {
317
- try {
318
- await assertion.executeAsync(parsedValues, args, stackStartFn, parseResult);
319
- }
320
- catch (error) {
321
- handleAssertionError(error, assertion, isNegated);
322
- return;
323
- }
324
- if (isNegated) {
325
- throwNegatedAssertionPassedError(assertion, stackStartFn);
326
- }
327
- };
328
- /**
329
- * Handles errors thrown during assertion execution.
330
- *
331
- * @function
332
- * @param error - The error that was thrown
333
- * @param assertion - The assertion that threw the error
334
- * @param isNegated - Whether the assertion was negated
335
- * @returns Void if error should be swallowed (negated assertion success)
336
- * @throws The original error if it's an AssertionError (non-negated case)
337
- * @throws AssertionImplementationError if error is unexpected
338
- */
339
- const handleAssertionError = (error, assertion, isNegated) => {
340
- if (AssertionError.isAssertionError(error)) {
341
- if (isNegated) {
342
- return;
343
- }
344
- throw error;
345
- }
346
- if (AssertionImplementationError.isAssertionImplementationError(error)) {
347
- throw error;
348
- }
349
- throw new AssertionImplementationError(`Assertion ${assertion} threw a non-AssertionError`, { cause: error });
350
- };
351
- /**
352
- * Throws a NegatedAssertionError when a negated assertion unexpectedly passes.
353
- *
354
- * @function
355
- * @param assertion - The assertion that passed
356
- * @param stackStartFn - Function for stack trace management
357
- */
358
- const throwNegatedAssertionPassedError = (assertion, stackStartFn) => {
359
- throw new NegatedAssertionError({
360
- id: assertion.id,
361
- message: `Expected assertion ${assertion} to fail (due to negation), but it passed`,
362
- stackStartFn,
363
- });
364
- };
365
- /**
366
- * Processes negation keywords in the arguments and returns whether negation is
367
- * requested along with arguments stripped of the leading negation (to enable
368
- * assertion matching).
369
- *
370
- * @function
371
- * @internal
372
- */
373
- const maybeProcessNegation = (args) => {
374
- let isNegated = false;
375
- let processedArgs = args;
376
- // note: args[1] should always be a string
377
- if (args.length >= 2 && isString(args[1])) {
378
- const { cleanedPhrase, isNegated: detected } = detectNegation(args[1]);
379
- if (detected) {
380
- isNegated = true;
381
- processedArgs = [args[0], cleanedPhrase, ...args.slice(2)];
382
- }
383
- }
384
- return { isNegated, processedArgs };
385
- };
386
- /**
387
- * Given some args, create a matrix of args based on the presence of the
388
- * conjunction operator ("and").
389
- *
390
- * If no "and" is present, returns the original args wrapped in an array.
391
- *
392
- * @function
393
- */
394
- const conjunctify = (args) => {
395
- let argsMatrix = [args];
396
- if (args.length >= 2) {
397
- // partition args by the string "and"; there may be multiple "and"s
398
- const andIndices = args
399
- .map((arg, index) => (arg === 'and' ? index : -1))
400
- .filter((index) => index !== -1);
401
- if (andIndices.length > 0) {
402
- const parts = [];
403
- let lastIndex = 0;
404
- for (const andIndex of andIndices) {
405
- const partsArgs = lastIndex > 0
406
- ? [args[0], ...args.slice(lastIndex, andIndex)]
407
- : [...args.slice(lastIndex, andIndex)];
408
- parts.push(partsArgs);
409
- lastIndex = andIndex + 1;
410
- }
411
- const finalPartsArgs = [args[0], ...args.slice(lastIndex)];
412
- parts.push(finalPartsArgs);
413
- argsMatrix = parts;
414
- }
415
- }
416
- return argsMatrix;
417
- };
418
- /**
419
- * Generates all possible ways to rejoin args that were split on "and".
420
- *
421
- * This is used as a fallback when conjunctified attempts fail - we try
422
- * different permutations of rejoining the split parts to handle assertions that
423
- * use "and" as part of their phrase (e.g., "to be greater than X and less than
424
- * Y").
425
- *
426
- * @function
427
- * @param argsMatrix The matrix of split arguments
428
- * @param originalArgs The original unsplit arguments
429
- * @returns Array of permutations to try
430
- * @internal
431
- */
432
- const generateRejoinPermutations = (argsMatrix, originalArgs) => {
433
- const permutations = [];
434
- for (let i = 0; i < argsMatrix.length - 1; i++) {
435
- const rejoinedParts = [];
436
- // Add parts before the join point
437
- for (let j = 0; j < i; j++) {
438
- rejoinedParts.push([...argsMatrix[j]]);
439
- }
440
- // Join the two parts at the split point
441
- const leftPart = argsMatrix[i];
442
- const rightPart = argsMatrix[i + 1];
443
- const joinedPart = [...leftPart, 'and', ...rightPart.slice(1)];
444
- rejoinedParts.push(joinedPart);
445
- // Add parts after the join point
446
- for (let j = i + 2; j < argsMatrix.length; j++) {
447
- rejoinedParts.push([...argsMatrix[j]]);
448
- }
449
- if (rejoinedParts.length === 1) {
450
- permutations.push(rejoinedParts[0]);
451
- }
452
- else {
453
- for (const part of rejoinedParts) {
454
- permutations.push(part);
455
- }
456
- }
457
- }
458
- // Also try the original unsplit arguments as the final permutation
459
- permutations.push(originalArgs);
460
- return permutations;
461
- };
462
- /**
463
- * Builds a phrase-keyed index for fast assertion dispatch.
464
- *
465
- * Maps phrase literals to the assertions that use them, enabling O(1) lookup
466
- * instead of O(n) iteration over all assertions during dispatch.
467
- *
468
- * @function
469
- * @param assertions - Array of assertions to index
470
- * @returns Map from phrase string to array of assertions using that phrase
471
- */
472
- const buildPhraseIndex = (assertions) => {
473
- const index = new Map();
474
- for (const assertion of assertions) {
475
- const phrases = assertion.getIndexPhrases();
476
- for (const phrase of phrases) {
477
- const existing = index.get(phrase);
478
- if (existing) {
479
- existing.push(assertion);
480
- }
481
- else {
482
- index.set(phrase, [assertion]);
483
- }
484
- }
485
- }
486
- return index;
487
- };
488
- /**
489
- * Extracts the phrase from processed arguments for index lookup.
490
- *
491
- * Looks at position 1 (subject-first assertions) and position 0 (phrase-first).
492
- * Returns the first string found, or undefined if no phrase is present.
493
- *
494
- * @function
495
- * @param args - Processed arguments (after negation handling)
496
- * @returns The phrase string if found, undefined otherwise
497
- */
498
- const extractPhraseFromArgs = (args) => {
499
- // Most common: subject at 0, phrase at 1
500
- if (args.length > 1 && isString(args[1])) {
501
- return args[1];
502
- }
503
- // Less common: phrase at 0
504
- if (args.length > 0 && isString(args[0])) {
505
- return args[0];
506
- }
507
- return undefined;
508
- };
509
- /**
510
- * Gets candidate assertions for dispatch using phrase index lookup.
511
- *
512
- * Extracts the phrase from processed arguments and looks it up in the phrase
513
- * index for O(1) candidate retrieval. Falls back to the full assertion list if
514
- * no phrase is found or the phrase isn't indexed.
515
- *
516
- * @function
517
- * @param processedArgs - Arguments after negation processing
518
- * @param phraseIndex - Map from phrase strings to assertion arrays
519
- * @param allAssertions - Complete assertion list for fallback
520
- * @returns Array of candidate assertions to check
521
- */
522
- const getCandidateAssertions = (processedArgs, phraseIndex, allAssertions) => {
523
- const phrase = extractPhraseFromArgs(processedArgs);
524
- return ((phrase !== undefined ? phraseIndex.get(phrase) : undefined) ??
525
- allAssertions);
526
- };
527
- /**
528
- * Throws an error indicating that no valid assertion could be found for the
529
- * provided arguments.
530
- *
531
- * @function
532
- * @param args The arguments that were passed to the expect function
533
- * @internal
534
- */
535
- const throwInvalidParametersError = (args) => {
536
- const inspectedArgs = inspect(args, { depth: 1 });
537
- debug('Invalid arguments. No assertion matched: %s', inspectedArgs);
538
- throw new UnknownAssertionError(`Invalid arguments. No assertion matched: ${inspectedArgs}`, { args });
539
- };
540
- /**
541
- * Detects if an assertion phrase starts with "not " and returns the cleaned
542
- * phrase.
543
- *
544
- * @function
545
- * @param phrase - The assertion phrase to check
546
- * @returns Object with `isNegated` flag and `cleanedPhrase`
547
- */
548
- const detectNegation = (phrase) => {
549
- if (phrase.startsWith('not ')) {
550
- return {
551
- cleanedPhrase: phrase.substring(4), // Remove "not "
552
- isNegated: true,
553
- };
554
- }
555
- return {
556
- cleanedPhrase: phrase,
557
- isNegated: false,
558
- };
559
- };
560
- /**
561
- * {@inheritDoc FailFn}
562
- *
563
- * @function
564
- */
565
- const fail = (reason) => {
566
- throw new FailAssertionError({ message: reason });
567
- };
568
- /**
569
- * Used by a {@link UseFn} to create base properties of {@link Expect} or
570
- * {@link ExpectAsync}.
571
- */
572
- export function createBaseExpect(syncAssertions, asyncAssertions, type) {
573
- const assertions = type === 'sync' ? syncAssertions : asyncAssertions;
574
- return {
575
- assertions,
576
- createAssertion,
577
- createAsyncAssertion,
578
- fail,
579
- use: createUse(syncAssertions, asyncAssertions),
580
- };
581
- }
582
- //# sourceMappingURL=expect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"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"}