bupkis 0.18.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +1 -1
  3. package/dist/assertion/assertion-async.cjs +268 -0
  4. package/dist/assertion/assertion-async.cjs.map +1 -0
  5. package/dist/assertion/assertion-async.d.cts +40 -0
  6. package/dist/assertion/assertion-async.d.cts.map +1 -0
  7. package/dist/assertion/assertion-async.d.ts +40 -0
  8. package/dist/assertion/assertion-async.d.ts.map +1 -0
  9. package/dist/assertion/assertion-async.js +259 -0
  10. package/dist/assertion/assertion-async.js.map +1 -0
  11. package/dist/assertion/assertion-standard-schema-async.cjs +132 -0
  12. package/dist/assertion/assertion-standard-schema-async.cjs.map +1 -0
  13. package/dist/assertion/assertion-standard-schema-async.d.cts +52 -0
  14. package/dist/assertion/assertion-standard-schema-async.d.cts.map +1 -0
  15. package/dist/assertion/assertion-standard-schema-async.d.ts +52 -0
  16. package/dist/assertion/assertion-standard-schema-async.d.ts.map +1 -0
  17. package/dist/assertion/assertion-standard-schema-async.js +128 -0
  18. package/dist/assertion/assertion-standard-schema-async.js.map +1 -0
  19. package/dist/assertion/assertion-standard-schema-sync.cjs +141 -0
  20. package/dist/assertion/assertion-standard-schema-sync.cjs.map +1 -0
  21. package/dist/assertion/assertion-standard-schema-sync.d.cts +52 -0
  22. package/dist/assertion/assertion-standard-schema-sync.d.cts.map +1 -0
  23. package/dist/assertion/assertion-standard-schema-sync.d.ts +52 -0
  24. package/dist/assertion/assertion-standard-schema-sync.d.ts.map +1 -0
  25. package/dist/assertion/assertion-standard-schema-sync.js +137 -0
  26. package/dist/assertion/assertion-standard-schema-sync.js.map +1 -0
  27. package/dist/assertion/assertion-sync.cjs +281 -0
  28. package/dist/assertion/assertion-sync.cjs.map +1 -0
  29. package/dist/assertion/assertion-sync.d.cts +60 -0
  30. package/dist/assertion/assertion-sync.d.cts.map +1 -0
  31. package/dist/assertion/assertion-sync.d.ts +60 -0
  32. package/dist/assertion/assertion-sync.d.ts.map +1 -0
  33. package/dist/assertion/assertion-sync.js +275 -0
  34. package/dist/assertion/assertion-sync.js.map +1 -0
  35. package/dist/assertion/assertion-types.cjs +20 -0
  36. package/dist/assertion/assertion-types.cjs.map +1 -0
  37. package/dist/assertion/assertion-types.d.cts +1086 -0
  38. package/dist/assertion/assertion-types.d.cts.map +1 -0
  39. package/dist/assertion/assertion-types.d.ts +1086 -0
  40. package/dist/assertion/assertion-types.d.ts.map +1 -0
  41. package/dist/assertion/assertion-types.js +19 -0
  42. package/dist/assertion/assertion-types.js.map +1 -0
  43. package/dist/assertion/assertion.cjs +382 -0
  44. package/dist/assertion/assertion.cjs.map +1 -0
  45. package/dist/assertion/assertion.d.cts +109 -0
  46. package/dist/assertion/assertion.d.cts.map +1 -0
  47. package/dist/assertion/assertion.d.ts +109 -0
  48. package/dist/assertion/assertion.d.ts.map +1 -0
  49. package/dist/assertion/assertion.js +375 -0
  50. package/dist/assertion/assertion.js.map +1 -0
  51. package/dist/assertion/create.cjs +148 -0
  52. package/dist/assertion/create.cjs.map +1 -0
  53. package/dist/assertion/create.d.cts +85 -0
  54. package/dist/assertion/create.d.cts.map +1 -0
  55. package/dist/assertion/create.d.ts +85 -0
  56. package/dist/assertion/create.d.ts.map +1 -0
  57. package/dist/assertion/create.js +143 -0
  58. package/dist/assertion/create.js.map +1 -0
  59. package/dist/assertion/format-assertion-failure.cjs +63 -0
  60. package/dist/assertion/format-assertion-failure.cjs.map +1 -0
  61. package/dist/assertion/format-assertion-failure.d.cts +21 -0
  62. package/dist/assertion/format-assertion-failure.d.cts.map +1 -0
  63. package/dist/assertion/format-assertion-failure.d.ts +21 -0
  64. package/dist/assertion/format-assertion-failure.d.ts.map +1 -0
  65. package/dist/assertion/format-assertion-failure.js +59 -0
  66. package/dist/assertion/format-assertion-failure.js.map +1 -0
  67. package/dist/assertion/impl/assertion-util.cjs +68 -0
  68. package/dist/assertion/impl/assertion-util.cjs.map +1 -0
  69. package/dist/assertion/impl/assertion-util.d.cts +36 -0
  70. package/dist/assertion/impl/assertion-util.d.cts.map +1 -0
  71. package/dist/assertion/impl/assertion-util.d.ts +36 -0
  72. package/dist/assertion/impl/assertion-util.d.ts.map +1 -0
  73. package/dist/assertion/impl/assertion-util.js +62 -0
  74. package/dist/assertion/impl/assertion-util.js.map +1 -0
  75. package/dist/assertion/impl/async-iterable.cjs +627 -0
  76. package/dist/assertion/impl/async-iterable.cjs.map +1 -0
  77. package/dist/assertion/impl/async-iterable.d.cts +406 -0
  78. package/dist/assertion/impl/async-iterable.d.cts.map +1 -0
  79. package/dist/assertion/impl/async-iterable.d.ts +406 -0
  80. package/dist/assertion/impl/async-iterable.d.ts.map +1 -0
  81. package/dist/assertion/impl/async-iterable.js +624 -0
  82. package/dist/assertion/impl/async-iterable.js.map +1 -0
  83. package/dist/assertion/impl/async-parametric.cjs +412 -0
  84. package/dist/assertion/impl/async-parametric.cjs.map +1 -0
  85. package/dist/assertion/impl/async-parametric.d.cts +278 -0
  86. package/dist/assertion/impl/async-parametric.d.cts.map +1 -0
  87. package/dist/assertion/impl/async-parametric.d.ts +278 -0
  88. package/dist/assertion/impl/async-parametric.d.ts.map +1 -0
  89. package/dist/assertion/impl/async-parametric.js +409 -0
  90. package/dist/assertion/impl/async-parametric.js.map +1 -0
  91. package/dist/assertion/impl/async.cjs +56 -0
  92. package/dist/assertion/impl/async.cjs.map +1 -0
  93. package/dist/assertion/impl/async.d.cts +179 -0
  94. package/dist/assertion/impl/async.d.cts.map +1 -0
  95. package/dist/assertion/impl/async.d.ts +179 -0
  96. package/dist/assertion/impl/async.d.ts.map +1 -0
  97. package/dist/assertion/impl/async.js +39 -0
  98. package/dist/assertion/impl/async.js.map +1 -0
  99. package/dist/assertion/impl/index.cjs +37 -0
  100. package/dist/assertion/impl/index.cjs.map +1 -0
  101. package/dist/assertion/impl/index.d.cts +21 -0
  102. package/dist/assertion/impl/index.d.cts.map +1 -0
  103. package/dist/assertion/impl/index.d.ts +21 -0
  104. package/dist/assertion/impl/index.d.ts.map +1 -0
  105. package/dist/assertion/impl/index.js +21 -0
  106. package/dist/assertion/impl/index.js.map +1 -0
  107. package/dist/assertion/impl/iteration-util.cjs +297 -0
  108. package/dist/assertion/impl/iteration-util.cjs.map +1 -0
  109. package/dist/assertion/impl/iteration-util.d.cts +12 -0
  110. package/dist/assertion/impl/iteration-util.d.cts.map +1 -0
  111. package/dist/assertion/impl/iteration-util.d.ts +12 -0
  112. package/dist/assertion/impl/iteration-util.d.ts.map +1 -0
  113. package/dist/assertion/impl/iteration-util.js +282 -0
  114. package/dist/assertion/impl/iteration-util.js.map +1 -0
  115. package/dist/assertion/impl/snapshot.cjs +276 -0
  116. package/dist/assertion/impl/snapshot.cjs.map +1 -0
  117. package/dist/assertion/impl/snapshot.d.cts +278 -0
  118. package/dist/assertion/impl/snapshot.d.cts.map +1 -0
  119. package/dist/assertion/impl/snapshot.d.ts +278 -0
  120. package/dist/assertion/impl/snapshot.d.ts.map +1 -0
  121. package/dist/assertion/impl/snapshot.js +273 -0
  122. package/dist/assertion/impl/snapshot.js.map +1 -0
  123. package/dist/assertion/impl/sync-basic.cjs +553 -0
  124. package/dist/assertion/impl/sync-basic.cjs.map +1 -0
  125. package/dist/assertion/impl/sync-basic.d.cts +528 -0
  126. package/dist/assertion/impl/sync-basic.d.cts.map +1 -0
  127. package/dist/assertion/impl/sync-basic.d.ts +528 -0
  128. package/dist/assertion/impl/sync-basic.d.ts.map +1 -0
  129. package/dist/assertion/impl/sync-basic.js +550 -0
  130. package/dist/assertion/impl/sync-basic.js.map +1 -0
  131. package/dist/assertion/impl/sync-collection.cjs +1424 -0
  132. package/dist/assertion/impl/sync-collection.cjs.map +1 -0
  133. package/dist/assertion/impl/sync-collection.d.cts +922 -0
  134. package/dist/assertion/impl/sync-collection.d.cts.map +1 -0
  135. package/dist/assertion/impl/sync-collection.d.ts +922 -0
  136. package/dist/assertion/impl/sync-collection.d.ts.map +1 -0
  137. package/dist/assertion/impl/sync-collection.js +1418 -0
  138. package/dist/assertion/impl/sync-collection.js.map +1 -0
  139. package/dist/assertion/impl/sync-date.cjs +341 -0
  140. package/dist/assertion/impl/sync-date.cjs.map +1 -0
  141. package/dist/assertion/impl/sync-date.d.cts +209 -0
  142. package/dist/assertion/impl/sync-date.d.cts.map +1 -0
  143. package/dist/assertion/impl/sync-date.d.ts +209 -0
  144. package/dist/assertion/impl/sync-date.d.ts.map +1 -0
  145. package/dist/assertion/impl/sync-date.js +338 -0
  146. package/dist/assertion/impl/sync-date.js.map +1 -0
  147. package/dist/assertion/impl/sync-esoteric.cjs +214 -0
  148. package/dist/assertion/impl/sync-esoteric.cjs.map +1 -0
  149. package/dist/assertion/impl/sync-esoteric.d.cts +191 -0
  150. package/dist/assertion/impl/sync-esoteric.d.cts.map +1 -0
  151. package/dist/assertion/impl/sync-esoteric.d.ts +191 -0
  152. package/dist/assertion/impl/sync-esoteric.d.ts.map +1 -0
  153. package/dist/assertion/impl/sync-esoteric.js +211 -0
  154. package/dist/assertion/impl/sync-esoteric.js.map +1 -0
  155. package/dist/assertion/impl/sync-iterable.cjs +512 -0
  156. package/dist/assertion/impl/sync-iterable.cjs.map +1 -0
  157. package/dist/assertion/impl/sync-iterable.d.cts +334 -0
  158. package/dist/assertion/impl/sync-iterable.d.cts.map +1 -0
  159. package/dist/assertion/impl/sync-iterable.d.ts +334 -0
  160. package/dist/assertion/impl/sync-iterable.d.ts.map +1 -0
  161. package/dist/assertion/impl/sync-iterable.js +509 -0
  162. package/dist/assertion/impl/sync-iterable.js.map +1 -0
  163. package/dist/assertion/impl/sync-parametric.cjs +805 -0
  164. package/dist/assertion/impl/sync-parametric.cjs.map +1 -0
  165. package/dist/assertion/impl/sync-parametric.d.cts +560 -0
  166. package/dist/assertion/impl/sync-parametric.d.cts.map +1 -0
  167. package/dist/assertion/impl/sync-parametric.d.ts +560 -0
  168. package/dist/assertion/impl/sync-parametric.d.ts.map +1 -0
  169. package/dist/assertion/impl/sync-parametric.js +802 -0
  170. package/dist/assertion/impl/sync-parametric.js.map +1 -0
  171. package/dist/assertion/impl/sync.cjs +229 -0
  172. package/dist/assertion/impl/sync.cjs.map +1 -0
  173. package/dist/assertion/impl/sync.d.cts +536 -0
  174. package/dist/assertion/impl/sync.d.cts.map +1 -0
  175. package/dist/assertion/impl/sync.d.ts +536 -0
  176. package/dist/assertion/impl/sync.d.ts.map +1 -0
  177. package/dist/assertion/impl/sync.js +212 -0
  178. package/dist/assertion/impl/sync.js.map +1 -0
  179. package/dist/assertion/index.cjs +38 -0
  180. package/dist/assertion/index.cjs.map +1 -0
  181. package/dist/assertion/index.d.cts +18 -0
  182. package/dist/assertion/index.d.cts.map +1 -0
  183. package/dist/assertion/index.d.ts +18 -0
  184. package/dist/assertion/index.d.ts.map +1 -0
  185. package/dist/assertion/index.js +17 -0
  186. package/dist/assertion/index.js.map +1 -0
  187. package/dist/assertion/slotify.cjs +165 -0
  188. package/dist/assertion/slotify.cjs.map +1 -0
  189. package/dist/assertion/slotify.d.cts +11 -0
  190. package/dist/assertion/slotify.d.cts.map +1 -0
  191. package/dist/assertion/slotify.d.ts +11 -0
  192. package/dist/assertion/slotify.d.ts.map +1 -0
  193. package/dist/assertion/slotify.js +161 -0
  194. package/dist/assertion/slotify.js.map +1 -0
  195. package/dist/bootstrap.cjs +43 -0
  196. package/dist/bootstrap.cjs.map +1 -0
  197. package/dist/bootstrap.d.cts +27 -0
  198. package/dist/bootstrap.d.cts.map +1 -0
  199. package/dist/bootstrap.d.ts +27 -0
  200. package/dist/bootstrap.d.ts.map +1 -0
  201. package/dist/bootstrap.js +40 -0
  202. package/dist/bootstrap.js.map +1 -0
  203. package/dist/constant.cjs +82 -0
  204. package/dist/constant.cjs.map +1 -0
  205. package/dist/constant.d.cts +69 -0
  206. package/dist/constant.d.cts.map +1 -0
  207. package/dist/constant.d.ts +69 -0
  208. package/dist/constant.d.ts.map +1 -0
  209. package/dist/constant.js +79 -0
  210. package/dist/constant.js.map +1 -0
  211. package/dist/diff.cjs +340 -0
  212. package/dist/diff.cjs.map +1 -0
  213. package/dist/diff.d.cts +51 -0
  214. package/dist/diff.d.cts.map +1 -0
  215. package/dist/diff.d.ts +51 -0
  216. package/dist/diff.d.ts.map +1 -0
  217. package/dist/diff.js +334 -0
  218. package/dist/diff.js.map +1 -0
  219. package/dist/error.cjs +194 -0
  220. package/dist/error.cjs.map +1 -0
  221. package/dist/error.d.cts +212 -0
  222. package/dist/error.d.cts.map +1 -0
  223. package/dist/error.d.ts +212 -0
  224. package/dist/error.d.ts.map +1 -0
  225. package/dist/error.js +181 -0
  226. package/dist/error.js.map +1 -0
  227. package/dist/expect.cjs +587 -0
  228. package/dist/expect.cjs.map +1 -0
  229. package/dist/expect.d.cts +138 -0
  230. package/dist/expect.d.cts.map +1 -0
  231. package/dist/expect.d.ts +138 -0
  232. package/dist/expect.d.ts.map +1 -0
  233. package/dist/expect.js +582 -0
  234. package/dist/expect.js.map +1 -0
  235. package/dist/guards.cjs +291 -0
  236. package/dist/guards.cjs.map +1 -0
  237. package/dist/guards.d.cts +225 -0
  238. package/dist/guards.d.cts.map +1 -0
  239. package/dist/guards.d.ts +225 -0
  240. package/dist/guards.d.ts.map +1 -0
  241. package/dist/guards.js +273 -0
  242. package/dist/guards.js.map +1 -0
  243. package/dist/index.cjs +111 -0
  244. package/dist/index.cjs.map +1 -0
  245. package/dist/index.d.cts +460 -0
  246. package/dist/index.d.cts.map +1 -0
  247. package/dist/index.d.ts +460 -0
  248. package/dist/index.d.ts.map +1 -0
  249. package/dist/index.js +71 -0
  250. package/dist/index.js.map +1 -0
  251. package/dist/internal-schema.cjs +234 -0
  252. package/dist/internal-schema.cjs.map +1 -0
  253. package/dist/internal-schema.d.cts +8 -0
  254. package/dist/internal-schema.d.cts.map +1 -0
  255. package/dist/internal-schema.d.ts +8 -0
  256. package/dist/internal-schema.d.ts.map +1 -0
  257. package/dist/internal-schema.js +229 -0
  258. package/dist/internal-schema.js.map +1 -0
  259. package/dist/metadata.cjs +57 -0
  260. package/dist/metadata.cjs.map +1 -0
  261. package/dist/metadata.d.cts +27 -0
  262. package/dist/metadata.d.cts.map +1 -0
  263. package/dist/metadata.d.ts +27 -0
  264. package/dist/metadata.d.ts.map +1 -0
  265. package/dist/metadata.js +54 -0
  266. package/dist/metadata.js.map +1 -0
  267. package/dist/schema.cjs +1522 -0
  268. package/dist/schema.cjs.map +1 -0
  269. package/dist/schema.d.cts +1196 -0
  270. package/dist/schema.d.cts.map +1 -0
  271. package/dist/schema.d.ts +1196 -0
  272. package/dist/schema.d.ts.map +1 -0
  273. package/dist/schema.js +1516 -0
  274. package/dist/schema.js.map +1 -0
  275. package/dist/snapshot/adapter.cjs +29 -0
  276. package/dist/snapshot/adapter.cjs.map +1 -0
  277. package/dist/snapshot/adapter.d.cts +258 -0
  278. package/dist/snapshot/adapter.d.cts.map +1 -0
  279. package/dist/snapshot/adapter.d.ts +258 -0
  280. package/dist/snapshot/adapter.d.ts.map +1 -0
  281. package/dist/snapshot/adapter.js +25 -0
  282. package/dist/snapshot/adapter.js.map +1 -0
  283. package/dist/snapshot/adapters/fallback.cjs +452 -0
  284. package/dist/snapshot/adapters/fallback.cjs.map +1 -0
  285. package/dist/snapshot/adapters/fallback.d.cts +185 -0
  286. package/dist/snapshot/adapters/fallback.d.cts.map +1 -0
  287. package/dist/snapshot/adapters/fallback.d.ts +185 -0
  288. package/dist/snapshot/adapters/fallback.d.ts.map +1 -0
  289. package/dist/snapshot/adapters/fallback.js +445 -0
  290. package/dist/snapshot/adapters/fallback.js.map +1 -0
  291. package/dist/snapshot/adapters/node-test.cjs +297 -0
  292. package/dist/snapshot/adapters/node-test.cjs.map +1 -0
  293. package/dist/snapshot/adapters/node-test.d.cts +131 -0
  294. package/dist/snapshot/adapters/node-test.d.cts.map +1 -0
  295. package/dist/snapshot/adapters/node-test.d.ts +131 -0
  296. package/dist/snapshot/adapters/node-test.d.ts.map +1 -0
  297. package/dist/snapshot/adapters/node-test.js +293 -0
  298. package/dist/snapshot/adapters/node-test.js.map +1 -0
  299. package/dist/snapshot/index.cjs +61 -0
  300. package/dist/snapshot/index.cjs.map +1 -0
  301. package/dist/snapshot/index.d.cts +40 -0
  302. package/dist/snapshot/index.d.cts.map +1 -0
  303. package/dist/snapshot/index.d.ts +40 -0
  304. package/dist/snapshot/index.d.ts.map +1 -0
  305. package/dist/snapshot/index.js +44 -0
  306. package/dist/snapshot/index.js.map +1 -0
  307. package/dist/snapshot/node-version.cjs +49 -0
  308. package/dist/snapshot/node-version.cjs.map +1 -0
  309. package/dist/snapshot/node-version.d.cts +34 -0
  310. package/dist/snapshot/node-version.d.cts.map +1 -0
  311. package/dist/snapshot/node-version.d.ts +34 -0
  312. package/dist/snapshot/node-version.d.ts.map +1 -0
  313. package/dist/snapshot/node-version.js +44 -0
  314. package/dist/snapshot/node-version.js.map +1 -0
  315. package/dist/snapshot/select-adapter.cjs +170 -0
  316. package/dist/snapshot/select-adapter.cjs.map +1 -0
  317. package/dist/snapshot/select-adapter.d.cts +128 -0
  318. package/dist/snapshot/select-adapter.d.cts.map +1 -0
  319. package/dist/snapshot/select-adapter.d.ts +128 -0
  320. package/dist/snapshot/select-adapter.d.ts.map +1 -0
  321. package/dist/snapshot/select-adapter.js +164 -0
  322. package/dist/snapshot/select-adapter.js.map +1 -0
  323. package/dist/snapshot/serializer.cjs +245 -0
  324. package/dist/snapshot/serializer.cjs.map +1 -0
  325. package/dist/snapshot/serializer.d.cts +126 -0
  326. package/dist/snapshot/serializer.d.cts.map +1 -0
  327. package/dist/snapshot/serializer.d.ts +126 -0
  328. package/dist/snapshot/serializer.d.ts.map +1 -0
  329. package/dist/snapshot/serializer.js +237 -0
  330. package/dist/snapshot/serializer.js.map +1 -0
  331. package/dist/standard-schema.cjs +13 -0
  332. package/dist/standard-schema.cjs.map +1 -0
  333. package/dist/standard-schema.d.cts +192 -0
  334. package/dist/standard-schema.d.cts.map +1 -0
  335. package/dist/standard-schema.d.ts +192 -0
  336. package/dist/standard-schema.d.ts.map +1 -0
  337. package/dist/standard-schema.js +12 -0
  338. package/dist/standard-schema.js.map +1 -0
  339. package/dist/types.cjs +22 -0
  340. package/dist/types.cjs.map +1 -0
  341. package/dist/types.d.cts +756 -0
  342. package/dist/types.d.cts.map +1 -0
  343. package/dist/types.d.ts +756 -0
  344. package/dist/types.d.ts.map +1 -0
  345. package/dist/types.js +21 -0
  346. package/dist/types.js.map +1 -0
  347. package/dist/use.cjs +240 -0
  348. package/dist/use.cjs.map +1 -0
  349. package/dist/use.d.cts +8 -0
  350. package/dist/use.d.cts.map +1 -0
  351. package/dist/use.d.ts +8 -0
  352. package/dist/use.d.ts.map +1 -0
  353. package/dist/use.js +236 -0
  354. package/dist/use.js.map +1 -0
  355. package/dist/util.cjs +255 -0
  356. package/dist/util.cjs.map +1 -0
  357. package/dist/util.d.cts +141 -0
  358. package/dist/util.d.cts.map +1 -0
  359. package/dist/util.d.ts +141 -0
  360. package/dist/util.d.ts.map +1 -0
  361. package/dist/util.js +234 -0
  362. package/dist/util.js.map +1 -0
  363. package/dist/value-to-schema.cjs +537 -0
  364. package/dist/value-to-schema.cjs.map +1 -0
  365. package/dist/value-to-schema.d.cts +144 -0
  366. package/dist/value-to-schema.d.cts.map +1 -0
  367. package/dist/value-to-schema.d.ts +144 -0
  368. package/dist/value-to-schema.d.ts.map +1 -0
  369. package/dist/value-to-schema.js +533 -0
  370. package/dist/value-to-schema.js.map +1 -0
  371. package/package.json +22 -19
  372. package/src/assertion/assertion-types.ts +4 -8
  373. package/src/assertion/assertion.ts +1 -1
  374. package/src/assertion/format-assertion-failure.ts +2 -0
  375. package/src/assertion/impl/assertion-util.ts +1 -2
  376. package/src/assertion/impl/iteration-util.ts +1 -3
  377. package/src/assertion/impl/sync-collection.ts +633 -7
  378. package/src/assertion/impl/sync.ts +27 -0
  379. package/src/error.ts +13 -22
  380. package/src/guards.ts +8 -14
  381. package/src/internal-schema.ts +4 -8
  382. package/src/metadata.ts +1 -2
  383. package/src/snapshot/adapter.ts +2 -3
  384. package/src/snapshot/adapters/fallback.ts +2 -3
  385. package/src/snapshot/adapters/node-test.ts +14 -20
  386. package/src/snapshot/select-adapter.ts +3 -3
  387. package/src/snapshot/serializer.ts +2 -3
  388. package/src/types.ts +2 -162
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Date and time-related assertions for temporal testing scenarios.
3
+ *
4
+ * This module provides comprehensive Date and Time assertions with natural
5
+ * language syntax for testing applications that deal with temporal data,
6
+ * scheduling, timestamps, and time-based operations.
7
+ *
8
+ * @packageDocumentation
9
+ * @groupDescription Date/Time Assertions
10
+ * Temporal assertions for dates, times, durations, and time-based comparisons.
11
+ *
12
+ * @showGroups
13
+ */
14
+ /**
15
+ * Asserts that the subject is a valid date (Date object, ISO string, or
16
+ * timestamp).
17
+ *
18
+ * @example
19
+ *
20
+ * ```ts
21
+ * expect(new Date(), 'to be a valid date'); // passes
22
+ * expect('2023-01-01T00:00:00Z', 'to be a valid date'); // passes
23
+ * expect(1640995200000, 'to be a valid date'); // passes
24
+ * expect('invalid', 'to be a valid date'); // fails
25
+ * ```
26
+ *
27
+ * @group Date/Time Assertions
28
+ * @bupkisAnchor unknown-to-be-a-valid-date
29
+ * @bupkisAssertionCategory date
30
+ */
31
+ export declare const validDateAssertion: import("../assertion-types.js").AssertionStandardSchemaSync<readonly [readonly ["to be a valid date", "to be date-like"]], import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, never>;
32
+ /**
33
+ * Asserts that the subject is before another date.
34
+ *
35
+ * @example
36
+ *
37
+ * ```ts
38
+ * expect(new Date('2022-01-01'), 'to be before', new Date('2023-01-01')); // passes
39
+ * expect(new Date('2023-01-01'), 'to be before', new Date('2022-01-01')); // fails
40
+ * expect('2022-01-01', 'to be before', '2023-01-01'); // passes
41
+ * ```
42
+ *
43
+ * @group Date/Time Assertions
44
+ * @bupkisAnchor date-like-to-be-before-date-like
45
+ * @bupkisAssertionCategory date
46
+ */
47
+ export declare const beforeAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "to be before", import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>], (subject: string | number | Date, other: string | number | Date) => {
48
+ message: string;
49
+ schema?: undefined;
50
+ subject?: undefined;
51
+ } | {
52
+ schema: import("zod").ZodDate;
53
+ subject: Date;
54
+ message?: undefined;
55
+ }, readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"to be before">, import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>]>;
56
+ /**
57
+ * Asserts that the subject is after another date.
58
+ *
59
+ * @example
60
+ *
61
+ * ```ts
62
+ * expect(new Date('2023-01-01'), 'to be after', new Date('2022-01-01')); // passes
63
+ * expect(new Date('2022-01-01'), 'to be after', new Date('2023-01-01')); // fails
64
+ * expect('2023-01-01', 'to be after', '2022-01-01'); // passes
65
+ * ```
66
+ *
67
+ * @group Date/Time Assertions
68
+ * @bupkisAnchor date-like-to-be-after-date-like
69
+ * @bupkisAssertionCategory date
70
+ */
71
+ export declare const afterAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "to be after", import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>], (subject: string | number | Date, other: string | number | Date) => {
72
+ message: string;
73
+ schema?: undefined;
74
+ subject?: undefined;
75
+ } | {
76
+ schema: import("zod").ZodDate;
77
+ subject: Date;
78
+ message?: undefined;
79
+ }, readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"to be after">, import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>]>;
80
+ /**
81
+ * Asserts that the subject is between two dates (inclusive).
82
+ *
83
+ * @example
84
+ *
85
+ * ```ts
86
+ * expect(
87
+ * new Date('2022-06-01'),
88
+ * 'to be between',
89
+ * new Date('2022-01-01'),
90
+ * new Date('2022-12-31'),
91
+ * ); // passes
92
+ * expect(
93
+ * new Date('2023-01-01'),
94
+ * 'to be between',
95
+ * new Date('2022-01-01'),
96
+ * new Date('2022-12-31'),
97
+ * ); // fails
98
+ * ```
99
+ *
100
+ * @group Date/Time Assertions
101
+ * @bupkisAnchor date-like-to-be-between-date-like-and-date-like
102
+ * @bupkisAssertionCategory date
103
+ */
104
+ export declare const betweenAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "to be between", import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "and", import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>], (subject: string | number | Date, start: string | number | Date, end: string | number | Date) => {
105
+ message: string;
106
+ schema?: undefined;
107
+ subject?: undefined;
108
+ } | {
109
+ schema: import("zod").ZodDate;
110
+ subject: Date;
111
+ message?: undefined;
112
+ }, readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"to be between">, import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"and">, import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>]>;
113
+ /**
114
+ * Asserts that the subject is the same date as another (ignoring time).
115
+ *
116
+ * @example
117
+ *
118
+ * ```ts
119
+ * expect(
120
+ * new Date('2023-01-01T10:00:00'),
121
+ * 'to be the same date as',
122
+ * new Date('2023-01-01T15:30:00'),
123
+ * ); // passes
124
+ * expect(
125
+ * new Date('2023-01-01'),
126
+ * 'to be the same date as',
127
+ * new Date('2023-01-02'),
128
+ * ); // fails
129
+ * ```
130
+ *
131
+ * @group Date/Time Assertions
132
+ * @bupkisAnchor date-like-to-be-the-same-date-as-date-like
133
+ * @bupkisAssertionCategory date
134
+ */
135
+ export declare const sameDateAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "to be the same date as", import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>], (subject: string | number | Date, other: string | number | Date) => {
136
+ message: string;
137
+ actual?: undefined;
138
+ expected?: undefined;
139
+ } | {
140
+ actual: string;
141
+ expected: string;
142
+ message: string;
143
+ } | undefined, readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"to be the same date as">, import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>]>;
144
+ /**
145
+ * Asserts that the subject is equal to another date within a tolerance.
146
+ *
147
+ * @example
148
+ *
149
+ * ```ts
150
+ * const date1 = new Date('2023-01-01T10:00:00.000Z');
151
+ * const date2 = new Date('2023-01-01T10:00:00.500Z');
152
+ * expect(date1, 'to equal', date2, 'within', '1 second'); // passes
153
+ * expect(date1, 'to equal', date2, 'within', '100 milliseconds'); // fails
154
+ * ```
155
+ *
156
+ * @group Date/Time Assertions
157
+ * @bupkisAnchor date-like-to-equal-date-like-within-duration
158
+ * @bupkisAssertionCategory date
159
+ */
160
+ export declare const equalWithinAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "to equal", import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, "within", import("zod").ZodCustomStringFormat<"duration">], (subject: string | number | Date, other: string | number | Date, toleranceStr: string) => {
161
+ message: string;
162
+ actual?: undefined;
163
+ expected?: undefined;
164
+ } | {
165
+ actual: {
166
+ difference: number;
167
+ };
168
+ expected: {
169
+ maxDifference: number;
170
+ };
171
+ message: string;
172
+ } | undefined, readonly [import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"to equal">, import("zod").ZodUnion<readonly [import("zod").ZodDate, import("zod").ZodUnion<readonly [import("zod").ZodISODateTime, import("zod").ZodISODate]>, import("zod").ZodInt]>, import("../assertion-types.js").PhraseLiteralSlot<"within">, import("zod").ZodCustomStringFormat<"duration">]>;
173
+ /**
174
+ * Asserts that the subject is a weekend (Saturday or Sunday) in UTC.
175
+ *
176
+ * @example
177
+ *
178
+ * ```ts
179
+ * expect(new Date('2023-01-07'), 'to be a weekend'); // passes (Saturday in UTC)
180
+ * expect(new Date('2023-01-08'), 'to be a weekend'); // passes (Sunday in UTC)
181
+ * expect(new Date('2023-01-09'), 'to be a weekend'); // fails (Monday in UTC)
182
+ * ```
183
+ *
184
+ * @group Date/Time Assertions
185
+ * @bupkisAnchor unknown-to-be-a-weekend
186
+ * @bupkisAssertionCategory date
187
+ */
188
+ export declare const weekendAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly ["to be a weekend"], (subject: unknown) => {
189
+ message: string;
190
+ } | undefined, never>;
191
+ /**
192
+ * Asserts that the subject is a weekday (Monday through Friday) in UTC.
193
+ *
194
+ * @example
195
+ *
196
+ * ```ts
197
+ * expect(new Date('2023-01-09'), 'to be a weekday'); // passes (Monday in UTC)
198
+ * expect(new Date('2023-01-13'), 'to be a weekday'); // passes (Friday in UTC)
199
+ * expect(new Date('2023-01-07'), 'to be a weekday'); // fails (Saturday in UTC)
200
+ * ```
201
+ *
202
+ * @group Date/Time Assertions
203
+ * @bupkisAnchor unknown-to-be-a-weekday
204
+ * @bupkisAssertionCategory date
205
+ */
206
+ export declare const weekdayAssertion: import("../assertion-types.js").AssertionFunctionSync<readonly ["to be a weekday"], (subject: unknown) => {
207
+ message: string;
208
+ } | undefined, never>;
209
+ //# sourceMappingURL=sync-date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-date.d.ts","sourceRoot":"","sources":["../../../src/assertion/impl/sync-date.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmCH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,8SAG9B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe;;;;;;;;saAsB3B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc;;;;;;;;qaAsB1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;4oBAkC5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;4bA6B7B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;4hBAwChC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;;qBAmB5B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;;qBAmB5B,CAAC"}
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Date and time-related assertions for temporal testing scenarios.
3
+ *
4
+ * This module provides comprehensive Date and Time assertions with natural
5
+ * language syntax for testing applications that deal with temporal data,
6
+ * scheduling, timestamps, and time-based operations.
7
+ *
8
+ * @packageDocumentation
9
+ * @groupDescription Date/Time Assertions
10
+ * Temporal assertions for dates, times, durations, and time-based comparisons.
11
+ *
12
+ * @showGroups
13
+ */
14
+ import { DAY_NAMES } from "../../constant.js";
15
+ import { DateLikeFormatSchema, DateSchema, DurationFormatSchema, DurationSchema, } from "../../schema.js";
16
+ import { createAssertion } from "../create.js";
17
+ const { isNaN } = Number;
18
+ const { abs } = Math;
19
+ /**
20
+ * Converts various date-like inputs to Date objects for comparison. Supports
21
+ * Date objects, ISO strings, and timestamps.
22
+ *
23
+ * @function
24
+ */
25
+ const toDate = (value) => {
26
+ if (value instanceof Date) {
27
+ return value;
28
+ }
29
+ if (typeof value === 'string') {
30
+ const parsed = new Date(value);
31
+ return isNaN(parsed.getTime()) ? null : parsed;
32
+ }
33
+ if (typeof value === 'number') {
34
+ const parsed = new Date(value);
35
+ return isNaN(parsed.getTime()) ? null : parsed;
36
+ }
37
+ return null;
38
+ };
39
+ /**
40
+ * Asserts that the subject is a valid date (Date object, ISO string, or
41
+ * timestamp).
42
+ *
43
+ * @example
44
+ *
45
+ * ```ts
46
+ * expect(new Date(), 'to be a valid date'); // passes
47
+ * expect('2023-01-01T00:00:00Z', 'to be a valid date'); // passes
48
+ * expect(1640995200000, 'to be a valid date'); // passes
49
+ * expect('invalid', 'to be a valid date'); // fails
50
+ * ```
51
+ *
52
+ * @group Date/Time Assertions
53
+ * @bupkisAnchor unknown-to-be-a-valid-date
54
+ * @bupkisAssertionCategory date
55
+ */
56
+ export const validDateAssertion = createAssertion([['to be a valid date', 'to be date-like']], DateLikeFormatSchema);
57
+ /**
58
+ * Asserts that the subject is before another date.
59
+ *
60
+ * @example
61
+ *
62
+ * ```ts
63
+ * expect(new Date('2022-01-01'), 'to be before', new Date('2023-01-01')); // passes
64
+ * expect(new Date('2023-01-01'), 'to be before', new Date('2022-01-01')); // fails
65
+ * expect('2022-01-01', 'to be before', '2023-01-01'); // passes
66
+ * ```
67
+ *
68
+ * @group Date/Time Assertions
69
+ * @bupkisAnchor date-like-to-be-before-date-like
70
+ * @bupkisAssertionCategory date
71
+ */
72
+ export const beforeAssertion = createAssertion([DateLikeFormatSchema, 'to be before', DateLikeFormatSchema], (subject, other) => {
73
+ const subjectDate = toDate(subject);
74
+ const otherDate = toDate(other);
75
+ if (!subjectDate) {
76
+ return {
77
+ message: `Expected subject to be a valid date, but received: ${subject}`,
78
+ };
79
+ }
80
+ if (!otherDate) {
81
+ return {
82
+ message: `Expected comparison date to be a valid date, but received: ${other}`,
83
+ };
84
+ }
85
+ // Use Zod's date validation with max constraint for better error messages
86
+ return {
87
+ schema: DateSchema.max(new Date(otherDate.getTime() - 1)),
88
+ subject: subjectDate,
89
+ };
90
+ });
91
+ /**
92
+ * Asserts that the subject is after another date.
93
+ *
94
+ * @example
95
+ *
96
+ * ```ts
97
+ * expect(new Date('2023-01-01'), 'to be after', new Date('2022-01-01')); // passes
98
+ * expect(new Date('2022-01-01'), 'to be after', new Date('2023-01-01')); // fails
99
+ * expect('2023-01-01', 'to be after', '2022-01-01'); // passes
100
+ * ```
101
+ *
102
+ * @group Date/Time Assertions
103
+ * @bupkisAnchor date-like-to-be-after-date-like
104
+ * @bupkisAssertionCategory date
105
+ */
106
+ export const afterAssertion = createAssertion([DateLikeFormatSchema, 'to be after', DateLikeFormatSchema], (subject, other) => {
107
+ const subjectDate = toDate(subject);
108
+ const otherDate = toDate(other);
109
+ if (subjectDate === null) {
110
+ return {
111
+ message: `Expected subject to be a valid date, but received: ${subject}`,
112
+ };
113
+ }
114
+ if (otherDate === null) {
115
+ return {
116
+ message: `Expected comparison date to be a valid date, but received: ${other}`,
117
+ };
118
+ }
119
+ // Use Zod's date validation with min constraint for better error messages
120
+ return {
121
+ schema: DateSchema.min(new Date(otherDate.getTime() + 1)),
122
+ subject: subjectDate,
123
+ };
124
+ });
125
+ /**
126
+ * Asserts that the subject is between two dates (inclusive).
127
+ *
128
+ * @example
129
+ *
130
+ * ```ts
131
+ * expect(
132
+ * new Date('2022-06-01'),
133
+ * 'to be between',
134
+ * new Date('2022-01-01'),
135
+ * new Date('2022-12-31'),
136
+ * ); // passes
137
+ * expect(
138
+ * new Date('2023-01-01'),
139
+ * 'to be between',
140
+ * new Date('2022-01-01'),
141
+ * new Date('2022-12-31'),
142
+ * ); // fails
143
+ * ```
144
+ *
145
+ * @group Date/Time Assertions
146
+ * @bupkisAnchor date-like-to-be-between-date-like-and-date-like
147
+ * @bupkisAssertionCategory date
148
+ */
149
+ export const betweenAssertion = createAssertion([
150
+ DateLikeFormatSchema,
151
+ 'to be between',
152
+ DateLikeFormatSchema,
153
+ 'and',
154
+ DateLikeFormatSchema,
155
+ ], (subject, start, end) => {
156
+ const subjectDate = toDate(subject);
157
+ const startDate = toDate(start);
158
+ const endDate = toDate(end);
159
+ if (!subjectDate) {
160
+ return {
161
+ message: `Expected subject to be a valid date, but received: ${subject}`,
162
+ };
163
+ }
164
+ if (!startDate) {
165
+ return {
166
+ message: `Expected start date to be a valid date, but received: ${start}`,
167
+ };
168
+ }
169
+ if (!endDate) {
170
+ return {
171
+ message: `Expected end date to be a valid date, but received: ${end}`,
172
+ };
173
+ }
174
+ // Use Zod's date validation with min/max constraints for better error messages
175
+ return {
176
+ schema: DateSchema.min(startDate).max(endDate),
177
+ subject: subjectDate,
178
+ };
179
+ });
180
+ /**
181
+ * Asserts that the subject is the same date as another (ignoring time).
182
+ *
183
+ * @example
184
+ *
185
+ * ```ts
186
+ * expect(
187
+ * new Date('2023-01-01T10:00:00'),
188
+ * 'to be the same date as',
189
+ * new Date('2023-01-01T15:30:00'),
190
+ * ); // passes
191
+ * expect(
192
+ * new Date('2023-01-01'),
193
+ * 'to be the same date as',
194
+ * new Date('2023-01-02'),
195
+ * ); // fails
196
+ * ```
197
+ *
198
+ * @group Date/Time Assertions
199
+ * @bupkisAnchor date-like-to-be-the-same-date-as-date-like
200
+ * @bupkisAssertionCategory date
201
+ */
202
+ export const sameDateAssertion = createAssertion([DateLikeFormatSchema, 'to be the same date as', DateLikeFormatSchema], (subject, other) => {
203
+ const subjectDate = toDate(subject);
204
+ const otherDate = toDate(other);
205
+ if (!subjectDate) {
206
+ return {
207
+ message: `Expected subject to be a valid date, but received: ${subject}`,
208
+ };
209
+ }
210
+ if (!otherDate) {
211
+ return {
212
+ message: `Expected comparison date to be a valid date, but received: ${other}`,
213
+ };
214
+ }
215
+ const isSameDate = subjectDate.getFullYear() === otherDate.getFullYear() &&
216
+ subjectDate.getMonth() === otherDate.getMonth() &&
217
+ subjectDate.getDate() === otherDate.getDate();
218
+ if (!isSameDate) {
219
+ return {
220
+ actual: subjectDate.toDateString(),
221
+ expected: otherDate.toDateString(),
222
+ message: `Expected dates to be the same day, but ${subjectDate.toDateString()} !== ${otherDate.toDateString()}`,
223
+ };
224
+ }
225
+ });
226
+ /**
227
+ * Asserts that the subject is equal to another date within a tolerance.
228
+ *
229
+ * @example
230
+ *
231
+ * ```ts
232
+ * const date1 = new Date('2023-01-01T10:00:00.000Z');
233
+ * const date2 = new Date('2023-01-01T10:00:00.500Z');
234
+ * expect(date1, 'to equal', date2, 'within', '1 second'); // passes
235
+ * expect(date1, 'to equal', date2, 'within', '100 milliseconds'); // fails
236
+ * ```
237
+ *
238
+ * @group Date/Time Assertions
239
+ * @bupkisAnchor date-like-to-equal-date-like-within-duration
240
+ * @bupkisAssertionCategory date
241
+ */
242
+ export const equalWithinAssertion = createAssertion([
243
+ DateLikeFormatSchema,
244
+ 'to equal',
245
+ DateLikeFormatSchema,
246
+ 'within',
247
+ DurationFormatSchema,
248
+ ], (subject, other, toleranceStr) => {
249
+ const subjectDate = toDate(subject);
250
+ const otherDate = toDate(other);
251
+ if (!subjectDate) {
252
+ return {
253
+ message: `Expected subject to be a valid date, but received: ${subject}`,
254
+ };
255
+ }
256
+ if (!otherDate) {
257
+ return {
258
+ message: `Expected comparison date to be a valid date, but received: ${other}`,
259
+ };
260
+ }
261
+ // Transform the duration string to milliseconds
262
+ const durationResult = DurationSchema.safeParse(toleranceStr);
263
+ if (!durationResult.success) {
264
+ return {
265
+ message: `Expected a valid duration string, but received: ${toleranceStr}`,
266
+ };
267
+ }
268
+ const toleranceMs = durationResult.data;
269
+ const diff = abs(subjectDate.getTime() - otherDate.getTime());
270
+ if (diff > toleranceMs) {
271
+ return {
272
+ actual: { difference: diff },
273
+ expected: { maxDifference: toleranceMs },
274
+ message: `Expected dates to be equal within ${toleranceStr} (${toleranceMs}ms), but difference was ${diff}ms`,
275
+ };
276
+ }
277
+ });
278
+ /**
279
+ * Asserts that the subject is a weekend (Saturday or Sunday) in UTC.
280
+ *
281
+ * @example
282
+ *
283
+ * ```ts
284
+ * expect(new Date('2023-01-07'), 'to be a weekend'); // passes (Saturday in UTC)
285
+ * expect(new Date('2023-01-08'), 'to be a weekend'); // passes (Sunday in UTC)
286
+ * expect(new Date('2023-01-09'), 'to be a weekend'); // fails (Monday in UTC)
287
+ * ```
288
+ *
289
+ * @group Date/Time Assertions
290
+ * @bupkisAnchor unknown-to-be-a-weekend
291
+ * @bupkisAssertionCategory date
292
+ */
293
+ export const weekendAssertion = createAssertion(['to be a weekend'], (subject) => {
294
+ const date = toDate(subject);
295
+ if (!date) {
296
+ return {
297
+ message: `Expected subject to be a valid date, but received: ${subject}`,
298
+ };
299
+ }
300
+ const day = date.getUTCDay();
301
+ const isWeekend = day === 0 || day === 6; // Sunday or Saturday
302
+ if (!isWeekend) {
303
+ return {
304
+ message: `Expected date to be a weekend (Saturday or Sunday in UTC), but it was ${DAY_NAMES[day]} in UTC`,
305
+ };
306
+ }
307
+ });
308
+ /**
309
+ * Asserts that the subject is a weekday (Monday through Friday) in UTC.
310
+ *
311
+ * @example
312
+ *
313
+ * ```ts
314
+ * expect(new Date('2023-01-09'), 'to be a weekday'); // passes (Monday in UTC)
315
+ * expect(new Date('2023-01-13'), 'to be a weekday'); // passes (Friday in UTC)
316
+ * expect(new Date('2023-01-07'), 'to be a weekday'); // fails (Saturday in UTC)
317
+ * ```
318
+ *
319
+ * @group Date/Time Assertions
320
+ * @bupkisAnchor unknown-to-be-a-weekday
321
+ * @bupkisAssertionCategory date
322
+ */
323
+ export const weekdayAssertion = createAssertion(['to be a weekday'], (subject) => {
324
+ const date = toDate(subject);
325
+ if (!date) {
326
+ return {
327
+ message: `Expected subject to be a valid date, but received: ${subject}`,
328
+ };
329
+ }
330
+ const day = date.getUTCDay();
331
+ const isWeekday = day >= 1 && day <= 5; // Monday through Friday
332
+ if (!isWeekday) {
333
+ return {
334
+ message: `Expected date to be a weekday (Monday through Friday in UTC), but it was ${DAY_NAMES[day]} in UTC`,
335
+ };
336
+ }
337
+ });
338
+ //# sourceMappingURL=sync-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-date.js","sourceRoot":"","sources":["../../../src/assertion/impl/sync-date.ts"],"names":[],"mappings":"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"}