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.
- package/CHANGELOG.md +21 -0
- package/README.md +1 -1
- package/dist/assertion/assertion-async.cjs +268 -0
- package/dist/assertion/assertion-async.cjs.map +1 -0
- package/dist/assertion/assertion-async.d.cts +40 -0
- package/dist/assertion/assertion-async.d.cts.map +1 -0
- package/dist/assertion/assertion-async.d.ts +40 -0
- package/dist/assertion/assertion-async.d.ts.map +1 -0
- package/dist/assertion/assertion-async.js +259 -0
- package/dist/assertion/assertion-async.js.map +1 -0
- package/dist/assertion/assertion-standard-schema-async.cjs +132 -0
- package/dist/assertion/assertion-standard-schema-async.cjs.map +1 -0
- package/dist/assertion/assertion-standard-schema-async.d.cts +52 -0
- package/dist/assertion/assertion-standard-schema-async.d.cts.map +1 -0
- package/dist/assertion/assertion-standard-schema-async.d.ts +52 -0
- package/dist/assertion/assertion-standard-schema-async.d.ts.map +1 -0
- package/dist/assertion/assertion-standard-schema-async.js +128 -0
- package/dist/assertion/assertion-standard-schema-async.js.map +1 -0
- package/dist/assertion/assertion-standard-schema-sync.cjs +141 -0
- package/dist/assertion/assertion-standard-schema-sync.cjs.map +1 -0
- package/dist/assertion/assertion-standard-schema-sync.d.cts +52 -0
- package/dist/assertion/assertion-standard-schema-sync.d.cts.map +1 -0
- package/dist/assertion/assertion-standard-schema-sync.d.ts +52 -0
- package/dist/assertion/assertion-standard-schema-sync.d.ts.map +1 -0
- package/dist/assertion/assertion-standard-schema-sync.js +137 -0
- package/dist/assertion/assertion-standard-schema-sync.js.map +1 -0
- package/dist/assertion/assertion-sync.cjs +281 -0
- package/dist/assertion/assertion-sync.cjs.map +1 -0
- package/dist/assertion/assertion-sync.d.cts +60 -0
- package/dist/assertion/assertion-sync.d.cts.map +1 -0
- package/dist/assertion/assertion-sync.d.ts +60 -0
- package/dist/assertion/assertion-sync.d.ts.map +1 -0
- package/dist/assertion/assertion-sync.js +275 -0
- package/dist/assertion/assertion-sync.js.map +1 -0
- package/dist/assertion/assertion-types.cjs +20 -0
- package/dist/assertion/assertion-types.cjs.map +1 -0
- package/dist/assertion/assertion-types.d.cts +1086 -0
- package/dist/assertion/assertion-types.d.cts.map +1 -0
- package/dist/assertion/assertion-types.d.ts +1086 -0
- package/dist/assertion/assertion-types.d.ts.map +1 -0
- package/dist/assertion/assertion-types.js +19 -0
- package/dist/assertion/assertion-types.js.map +1 -0
- package/dist/assertion/assertion.cjs +382 -0
- package/dist/assertion/assertion.cjs.map +1 -0
- package/dist/assertion/assertion.d.cts +109 -0
- package/dist/assertion/assertion.d.cts.map +1 -0
- package/dist/assertion/assertion.d.ts +109 -0
- package/dist/assertion/assertion.d.ts.map +1 -0
- package/dist/assertion/assertion.js +375 -0
- package/dist/assertion/assertion.js.map +1 -0
- package/dist/assertion/create.cjs +148 -0
- package/dist/assertion/create.cjs.map +1 -0
- package/dist/assertion/create.d.cts +85 -0
- package/dist/assertion/create.d.cts.map +1 -0
- package/dist/assertion/create.d.ts +85 -0
- package/dist/assertion/create.d.ts.map +1 -0
- package/dist/assertion/create.js +143 -0
- package/dist/assertion/create.js.map +1 -0
- package/dist/assertion/format-assertion-failure.cjs +63 -0
- package/dist/assertion/format-assertion-failure.cjs.map +1 -0
- package/dist/assertion/format-assertion-failure.d.cts +21 -0
- package/dist/assertion/format-assertion-failure.d.cts.map +1 -0
- package/dist/assertion/format-assertion-failure.d.ts +21 -0
- package/dist/assertion/format-assertion-failure.d.ts.map +1 -0
- package/dist/assertion/format-assertion-failure.js +59 -0
- package/dist/assertion/format-assertion-failure.js.map +1 -0
- package/dist/assertion/impl/assertion-util.cjs +68 -0
- package/dist/assertion/impl/assertion-util.cjs.map +1 -0
- package/dist/assertion/impl/assertion-util.d.cts +36 -0
- package/dist/assertion/impl/assertion-util.d.cts.map +1 -0
- package/dist/assertion/impl/assertion-util.d.ts +36 -0
- package/dist/assertion/impl/assertion-util.d.ts.map +1 -0
- package/dist/assertion/impl/assertion-util.js +62 -0
- package/dist/assertion/impl/assertion-util.js.map +1 -0
- package/dist/assertion/impl/async-iterable.cjs +627 -0
- package/dist/assertion/impl/async-iterable.cjs.map +1 -0
- package/dist/assertion/impl/async-iterable.d.cts +406 -0
- package/dist/assertion/impl/async-iterable.d.cts.map +1 -0
- package/dist/assertion/impl/async-iterable.d.ts +406 -0
- package/dist/assertion/impl/async-iterable.d.ts.map +1 -0
- package/dist/assertion/impl/async-iterable.js +624 -0
- package/dist/assertion/impl/async-iterable.js.map +1 -0
- package/dist/assertion/impl/async-parametric.cjs +412 -0
- package/dist/assertion/impl/async-parametric.cjs.map +1 -0
- package/dist/assertion/impl/async-parametric.d.cts +278 -0
- package/dist/assertion/impl/async-parametric.d.cts.map +1 -0
- package/dist/assertion/impl/async-parametric.d.ts +278 -0
- package/dist/assertion/impl/async-parametric.d.ts.map +1 -0
- package/dist/assertion/impl/async-parametric.js +409 -0
- package/dist/assertion/impl/async-parametric.js.map +1 -0
- package/dist/assertion/impl/async.cjs +56 -0
- package/dist/assertion/impl/async.cjs.map +1 -0
- package/dist/assertion/impl/async.d.cts +179 -0
- package/dist/assertion/impl/async.d.cts.map +1 -0
- package/dist/assertion/impl/async.d.ts +179 -0
- package/dist/assertion/impl/async.d.ts.map +1 -0
- package/dist/assertion/impl/async.js +39 -0
- package/dist/assertion/impl/async.js.map +1 -0
- package/dist/assertion/impl/index.cjs +37 -0
- package/dist/assertion/impl/index.cjs.map +1 -0
- package/dist/assertion/impl/index.d.cts +21 -0
- package/dist/assertion/impl/index.d.cts.map +1 -0
- package/dist/assertion/impl/index.d.ts +21 -0
- package/dist/assertion/impl/index.d.ts.map +1 -0
- package/dist/assertion/impl/index.js +21 -0
- package/dist/assertion/impl/index.js.map +1 -0
- package/dist/assertion/impl/iteration-util.cjs +297 -0
- package/dist/assertion/impl/iteration-util.cjs.map +1 -0
- package/dist/assertion/impl/iteration-util.d.cts +12 -0
- package/dist/assertion/impl/iteration-util.d.cts.map +1 -0
- package/dist/assertion/impl/iteration-util.d.ts +12 -0
- package/dist/assertion/impl/iteration-util.d.ts.map +1 -0
- package/dist/assertion/impl/iteration-util.js +282 -0
- package/dist/assertion/impl/iteration-util.js.map +1 -0
- package/dist/assertion/impl/snapshot.cjs +276 -0
- package/dist/assertion/impl/snapshot.cjs.map +1 -0
- package/dist/assertion/impl/snapshot.d.cts +278 -0
- package/dist/assertion/impl/snapshot.d.cts.map +1 -0
- package/dist/assertion/impl/snapshot.d.ts +278 -0
- package/dist/assertion/impl/snapshot.d.ts.map +1 -0
- package/dist/assertion/impl/snapshot.js +273 -0
- package/dist/assertion/impl/snapshot.js.map +1 -0
- package/dist/assertion/impl/sync-basic.cjs +553 -0
- package/dist/assertion/impl/sync-basic.cjs.map +1 -0
- package/dist/assertion/impl/sync-basic.d.cts +528 -0
- package/dist/assertion/impl/sync-basic.d.cts.map +1 -0
- package/dist/assertion/impl/sync-basic.d.ts +528 -0
- package/dist/assertion/impl/sync-basic.d.ts.map +1 -0
- package/dist/assertion/impl/sync-basic.js +550 -0
- package/dist/assertion/impl/sync-basic.js.map +1 -0
- package/dist/assertion/impl/sync-collection.cjs +1424 -0
- package/dist/assertion/impl/sync-collection.cjs.map +1 -0
- package/dist/assertion/impl/sync-collection.d.cts +922 -0
- package/dist/assertion/impl/sync-collection.d.cts.map +1 -0
- package/dist/assertion/impl/sync-collection.d.ts +922 -0
- package/dist/assertion/impl/sync-collection.d.ts.map +1 -0
- package/dist/assertion/impl/sync-collection.js +1418 -0
- package/dist/assertion/impl/sync-collection.js.map +1 -0
- package/dist/assertion/impl/sync-date.cjs +341 -0
- package/dist/assertion/impl/sync-date.cjs.map +1 -0
- package/dist/assertion/impl/sync-date.d.cts +209 -0
- package/dist/assertion/impl/sync-date.d.cts.map +1 -0
- package/dist/assertion/impl/sync-date.d.ts +209 -0
- package/dist/assertion/impl/sync-date.d.ts.map +1 -0
- package/dist/assertion/impl/sync-date.js +338 -0
- package/dist/assertion/impl/sync-date.js.map +1 -0
- package/dist/assertion/impl/sync-esoteric.cjs +214 -0
- package/dist/assertion/impl/sync-esoteric.cjs.map +1 -0
- package/dist/assertion/impl/sync-esoteric.d.cts +191 -0
- package/dist/assertion/impl/sync-esoteric.d.cts.map +1 -0
- package/dist/assertion/impl/sync-esoteric.d.ts +191 -0
- package/dist/assertion/impl/sync-esoteric.d.ts.map +1 -0
- package/dist/assertion/impl/sync-esoteric.js +211 -0
- package/dist/assertion/impl/sync-esoteric.js.map +1 -0
- package/dist/assertion/impl/sync-iterable.cjs +512 -0
- package/dist/assertion/impl/sync-iterable.cjs.map +1 -0
- package/dist/assertion/impl/sync-iterable.d.cts +334 -0
- package/dist/assertion/impl/sync-iterable.d.cts.map +1 -0
- package/dist/assertion/impl/sync-iterable.d.ts +334 -0
- package/dist/assertion/impl/sync-iterable.d.ts.map +1 -0
- package/dist/assertion/impl/sync-iterable.js +509 -0
- package/dist/assertion/impl/sync-iterable.js.map +1 -0
- package/dist/assertion/impl/sync-parametric.cjs +805 -0
- package/dist/assertion/impl/sync-parametric.cjs.map +1 -0
- package/dist/assertion/impl/sync-parametric.d.cts +560 -0
- package/dist/assertion/impl/sync-parametric.d.cts.map +1 -0
- package/dist/assertion/impl/sync-parametric.d.ts +560 -0
- package/dist/assertion/impl/sync-parametric.d.ts.map +1 -0
- package/dist/assertion/impl/sync-parametric.js +802 -0
- package/dist/assertion/impl/sync-parametric.js.map +1 -0
- package/dist/assertion/impl/sync.cjs +229 -0
- package/dist/assertion/impl/sync.cjs.map +1 -0
- package/dist/assertion/impl/sync.d.cts +536 -0
- package/dist/assertion/impl/sync.d.cts.map +1 -0
- package/dist/assertion/impl/sync.d.ts +536 -0
- package/dist/assertion/impl/sync.d.ts.map +1 -0
- package/dist/assertion/impl/sync.js +212 -0
- package/dist/assertion/impl/sync.js.map +1 -0
- package/dist/assertion/index.cjs +38 -0
- package/dist/assertion/index.cjs.map +1 -0
- package/dist/assertion/index.d.cts +18 -0
- package/dist/assertion/index.d.cts.map +1 -0
- package/dist/assertion/index.d.ts +18 -0
- package/dist/assertion/index.d.ts.map +1 -0
- package/dist/assertion/index.js +17 -0
- package/dist/assertion/index.js.map +1 -0
- package/dist/assertion/slotify.cjs +165 -0
- package/dist/assertion/slotify.cjs.map +1 -0
- package/dist/assertion/slotify.d.cts +11 -0
- package/dist/assertion/slotify.d.cts.map +1 -0
- package/dist/assertion/slotify.d.ts +11 -0
- package/dist/assertion/slotify.d.ts.map +1 -0
- package/dist/assertion/slotify.js +161 -0
- package/dist/assertion/slotify.js.map +1 -0
- package/dist/bootstrap.cjs +43 -0
- package/dist/bootstrap.cjs.map +1 -0
- package/dist/bootstrap.d.cts +27 -0
- package/dist/bootstrap.d.cts.map +1 -0
- package/dist/bootstrap.d.ts +27 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +40 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/constant.cjs +82 -0
- package/dist/constant.cjs.map +1 -0
- package/dist/constant.d.cts +69 -0
- package/dist/constant.d.cts.map +1 -0
- package/dist/constant.d.ts +69 -0
- package/dist/constant.d.ts.map +1 -0
- package/dist/constant.js +79 -0
- package/dist/constant.js.map +1 -0
- package/dist/diff.cjs +340 -0
- package/dist/diff.cjs.map +1 -0
- package/dist/diff.d.cts +51 -0
- package/dist/diff.d.cts.map +1 -0
- package/dist/diff.d.ts +51 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +334 -0
- package/dist/diff.js.map +1 -0
- package/dist/error.cjs +194 -0
- package/dist/error.cjs.map +1 -0
- package/dist/error.d.cts +212 -0
- package/dist/error.d.cts.map +1 -0
- package/dist/error.d.ts +212 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +181 -0
- package/dist/error.js.map +1 -0
- package/dist/expect.cjs +587 -0
- package/dist/expect.cjs.map +1 -0
- package/dist/expect.d.cts +138 -0
- package/dist/expect.d.cts.map +1 -0
- package/dist/expect.d.ts +138 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +582 -0
- package/dist/expect.js.map +1 -0
- package/dist/guards.cjs +291 -0
- package/dist/guards.cjs.map +1 -0
- package/dist/guards.d.cts +225 -0
- package/dist/guards.d.cts.map +1 -0
- package/dist/guards.d.ts +225 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +273 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.cjs +111 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +460 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +460 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-schema.cjs +234 -0
- package/dist/internal-schema.cjs.map +1 -0
- package/dist/internal-schema.d.cts +8 -0
- package/dist/internal-schema.d.cts.map +1 -0
- package/dist/internal-schema.d.ts +8 -0
- package/dist/internal-schema.d.ts.map +1 -0
- package/dist/internal-schema.js +229 -0
- package/dist/internal-schema.js.map +1 -0
- package/dist/metadata.cjs +57 -0
- package/dist/metadata.cjs.map +1 -0
- package/dist/metadata.d.cts +27 -0
- package/dist/metadata.d.cts.map +1 -0
- package/dist/metadata.d.ts +27 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +54 -0
- package/dist/metadata.js.map +1 -0
- package/dist/schema.cjs +1522 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +1196 -0
- package/dist/schema.d.cts.map +1 -0
- package/dist/schema.d.ts +1196 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +1516 -0
- package/dist/schema.js.map +1 -0
- package/dist/snapshot/adapter.cjs +29 -0
- package/dist/snapshot/adapter.cjs.map +1 -0
- package/dist/snapshot/adapter.d.cts +258 -0
- package/dist/snapshot/adapter.d.cts.map +1 -0
- package/dist/snapshot/adapter.d.ts +258 -0
- package/dist/snapshot/adapter.d.ts.map +1 -0
- package/dist/snapshot/adapter.js +25 -0
- package/dist/snapshot/adapter.js.map +1 -0
- package/dist/snapshot/adapters/fallback.cjs +452 -0
- package/dist/snapshot/adapters/fallback.cjs.map +1 -0
- package/dist/snapshot/adapters/fallback.d.cts +185 -0
- package/dist/snapshot/adapters/fallback.d.cts.map +1 -0
- package/dist/snapshot/adapters/fallback.d.ts +185 -0
- package/dist/snapshot/adapters/fallback.d.ts.map +1 -0
- package/dist/snapshot/adapters/fallback.js +445 -0
- package/dist/snapshot/adapters/fallback.js.map +1 -0
- package/dist/snapshot/adapters/node-test.cjs +297 -0
- package/dist/snapshot/adapters/node-test.cjs.map +1 -0
- package/dist/snapshot/adapters/node-test.d.cts +131 -0
- package/dist/snapshot/adapters/node-test.d.cts.map +1 -0
- package/dist/snapshot/adapters/node-test.d.ts +131 -0
- package/dist/snapshot/adapters/node-test.d.ts.map +1 -0
- package/dist/snapshot/adapters/node-test.js +293 -0
- package/dist/snapshot/adapters/node-test.js.map +1 -0
- package/dist/snapshot/index.cjs +61 -0
- package/dist/snapshot/index.cjs.map +1 -0
- package/dist/snapshot/index.d.cts +40 -0
- package/dist/snapshot/index.d.cts.map +1 -0
- package/dist/snapshot/index.d.ts +40 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +44 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/snapshot/node-version.cjs +49 -0
- package/dist/snapshot/node-version.cjs.map +1 -0
- package/dist/snapshot/node-version.d.cts +34 -0
- package/dist/snapshot/node-version.d.cts.map +1 -0
- package/dist/snapshot/node-version.d.ts +34 -0
- package/dist/snapshot/node-version.d.ts.map +1 -0
- package/dist/snapshot/node-version.js +44 -0
- package/dist/snapshot/node-version.js.map +1 -0
- package/dist/snapshot/select-adapter.cjs +170 -0
- package/dist/snapshot/select-adapter.cjs.map +1 -0
- package/dist/snapshot/select-adapter.d.cts +128 -0
- package/dist/snapshot/select-adapter.d.cts.map +1 -0
- package/dist/snapshot/select-adapter.d.ts +128 -0
- package/dist/snapshot/select-adapter.d.ts.map +1 -0
- package/dist/snapshot/select-adapter.js +164 -0
- package/dist/snapshot/select-adapter.js.map +1 -0
- package/dist/snapshot/serializer.cjs +245 -0
- package/dist/snapshot/serializer.cjs.map +1 -0
- package/dist/snapshot/serializer.d.cts +126 -0
- package/dist/snapshot/serializer.d.cts.map +1 -0
- package/dist/snapshot/serializer.d.ts +126 -0
- package/dist/snapshot/serializer.d.ts.map +1 -0
- package/dist/snapshot/serializer.js +237 -0
- package/dist/snapshot/serializer.js.map +1 -0
- package/dist/standard-schema.cjs +13 -0
- package/dist/standard-schema.cjs.map +1 -0
- package/dist/standard-schema.d.cts +192 -0
- package/dist/standard-schema.d.cts.map +1 -0
- package/dist/standard-schema.d.ts +192 -0
- package/dist/standard-schema.d.ts.map +1 -0
- package/dist/standard-schema.js +12 -0
- package/dist/standard-schema.js.map +1 -0
- package/dist/types.cjs +22 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +756 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +756 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/dist/use.cjs +240 -0
- package/dist/use.cjs.map +1 -0
- package/dist/use.d.cts +8 -0
- package/dist/use.d.cts.map +1 -0
- package/dist/use.d.ts +8 -0
- package/dist/use.d.ts.map +1 -0
- package/dist/use.js +236 -0
- package/dist/use.js.map +1 -0
- package/dist/util.cjs +255 -0
- package/dist/util.cjs.map +1 -0
- package/dist/util.d.cts +141 -0
- package/dist/util.d.cts.map +1 -0
- package/dist/util.d.ts +141 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +234 -0
- package/dist/util.js.map +1 -0
- package/dist/value-to-schema.cjs +537 -0
- package/dist/value-to-schema.cjs.map +1 -0
- package/dist/value-to-schema.d.cts +144 -0
- package/dist/value-to-schema.d.cts.map +1 -0
- package/dist/value-to-schema.d.ts +144 -0
- package/dist/value-to-schema.d.ts.map +1 -0
- package/dist/value-to-schema.js +533 -0
- package/dist/value-to-schema.js.map +1 -0
- package/package.json +22 -19
- package/src/assertion/assertion-types.ts +4 -8
- package/src/assertion/assertion.ts +1 -1
- package/src/assertion/format-assertion-failure.ts +2 -0
- package/src/assertion/impl/assertion-util.ts +1 -2
- package/src/assertion/impl/iteration-util.ts +1 -3
- package/src/assertion/impl/sync-collection.ts +633 -7
- package/src/assertion/impl/sync.ts +27 -0
- package/src/error.ts +13 -22
- package/src/guards.ts +8 -14
- package/src/internal-schema.ts +4 -8
- package/src/metadata.ts +1 -2
- package/src/snapshot/adapter.ts +2 -3
- package/src/snapshot/adapters/fallback.ts +2 -3
- package/src/snapshot/adapters/node-test.ts +14 -20
- package/src/snapshot/select-adapter.ts +3 -3
- package/src/snapshot/serializer.ts +2 -3
- package/src/types.ts +2 -162
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.0](https://github.com/boneskull/bupkis/compare/bupkis-v0.18.3...bupkis-v1.0.0) (2026-07-10)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* drop support for Node.js v20.x ([#366](https://github.com/boneskull/bupkis/issues/366))
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **bupkis:** add new collection assertions ([#466](https://github.com/boneskull/bupkis/issues/466)) ([ea3b7ba](https://github.com/boneskull/bupkis/commit/ea3b7ba5fa663610049145036fc2a98ac59b7d53))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **bupkis:** remove bad actual/expect props from Set/Map "contains" assertion ([94eac33](https://github.com/boneskull/bupkis/commit/94eac3373f4597fc7f6c479b8f65be5507cd51f1))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Miscellaneous Chores
|
|
21
|
+
|
|
22
|
+
* drop support for Node.js v20.x ([#366](https://github.com/boneskull/bupkis/issues/366)) ([2b28744](https://github.com/boneskull/bupkis/commit/2b287444149b69607a2a87ee2a2b9700c12181be))
|
|
23
|
+
|
|
3
24
|
## [0.18.3](https://github.com/boneskull/bupkis/compare/bupkis-v0.18.2...bupkis-v0.18.3) (2026-06-30)
|
|
4
25
|
|
|
5
26
|
|
package/README.md
CHANGED
|
@@ -221,7 +221,7 @@ We have tried to make <strong><span class="bupkis">BUPKIS</span></strong> is as
|
|
|
221
221
|
|
|
222
222
|
## Prerequisites
|
|
223
223
|
|
|
224
|
-
**Node.js**: ^
|
|
224
|
+
**Node.js**: ^22.13.0, >=24.0.0
|
|
225
225
|
|
|
226
226
|
<strong><span class="bupkis">BUPKIS</span></strong> supports any [Standard Schema V1][standard schema]-compliant validation library. It has a peer dependency on [Zod][] v4+ (which implements Standard Schema V1), but will install it as an optional dependency if you are not already using it. You can also use [Valibot][], [ArkType][], [Effect Schema][], or any other Standard Schema V1 library.
|
|
227
227
|
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BupkisAssertionSchemaAsync = exports.BupkisAssertionFunctionAsync = exports.BupkisAssertionAsync = void 0;
|
|
7
|
+
const util_1 = require("util");
|
|
8
|
+
const zod_1 = __importDefault(require("zod"));
|
|
9
|
+
const error_js_1 = require("../error.cjs");
|
|
10
|
+
const guards_js_1 = require("../guards.cjs");
|
|
11
|
+
const internal_schema_js_1 = require("../internal-schema.cjs");
|
|
12
|
+
const assertion_js_1 = require("./assertion.cjs");
|
|
13
|
+
const format_assertion_failure_js_1 = require("./format-assertion-failure.cjs");
|
|
14
|
+
class BupkisAssertionAsync extends assertion_js_1.BupkisAssertion {
|
|
15
|
+
async parseValuesAsync(args) {
|
|
16
|
+
const { slots } = this;
|
|
17
|
+
const parsedValues = [];
|
|
18
|
+
if (slots.length !== args.length) {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
let exactMatch = true;
|
|
24
|
+
for (let i = 0; i < slots.length; i++) {
|
|
25
|
+
const slot = slots[i];
|
|
26
|
+
const arg = args[i];
|
|
27
|
+
const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
|
|
28
|
+
if (parsedLiteralResult === true) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
else if (parsedLiteralResult !== false) {
|
|
32
|
+
return parsedLiteralResult;
|
|
33
|
+
}
|
|
34
|
+
// unknown/any accept anything
|
|
35
|
+
// IMPORTANT: do not use a type guard here; it will break inference
|
|
36
|
+
if (slot.def.type === 'unknown' || slot.def.type === 'any') {
|
|
37
|
+
parsedValues.push(arg);
|
|
38
|
+
exactMatch = false;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const result = await slot.safeParseAsync(arg);
|
|
42
|
+
if (!result.success) {
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
parsedValues.push(result.data);
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
exactMatch,
|
|
51
|
+
parsedValues: parsedValues,
|
|
52
|
+
success: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.BupkisAssertionAsync = BupkisAssertionAsync;
|
|
57
|
+
/**
|
|
58
|
+
* An assertion implemented as a Zod schema.
|
|
59
|
+
*
|
|
60
|
+
* Async schemas are supported via {@link expectAsync}.
|
|
61
|
+
*/
|
|
62
|
+
/**
|
|
63
|
+
* Optimized schema assertion that performs subject validation during
|
|
64
|
+
* parseValues() to eliminate double parsing for simple schema-based
|
|
65
|
+
* assertions.
|
|
66
|
+
*
|
|
67
|
+
* This class implements Option 2 from the z.function() analysis - it caches the
|
|
68
|
+
* subject validation result during argument parsing and reuses it during
|
|
69
|
+
* execution, eliminating the double parsing overhead.
|
|
70
|
+
*/
|
|
71
|
+
class BupkisAssertionFunctionAsync extends BupkisAssertionAsync {
|
|
72
|
+
async executeAsync(parsedValues, args, stackStartFn, _parseResult) {
|
|
73
|
+
let result;
|
|
74
|
+
try {
|
|
75
|
+
result = await this.impl.call(null,
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
77
|
+
...parsedValues);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (error_js_1.AssertionError.isAssertionError(err)) {
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
if ((0, guards_js_1.isError)(err) && err instanceof zod_1.default.ZodError) {
|
|
84
|
+
throw this.fromZodError(err, stackStartFn, parsedValues);
|
|
85
|
+
}
|
|
86
|
+
throw new error_js_1.AssertionImplementationError(`Unexpected error thrown from assertion ${this}: ${err}`, { cause: err });
|
|
87
|
+
}
|
|
88
|
+
if ((0, guards_js_1.isZodType)(result)) {
|
|
89
|
+
try {
|
|
90
|
+
await result.parseAsync(parsedValues[0]);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if ((0, guards_js_1.isA)(error, zod_1.default.ZodError)) {
|
|
94
|
+
throw this.fromZodError(error, stackStartFn, parsedValues);
|
|
95
|
+
}
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if ((0, guards_js_1.isStandardSchema)(result)) {
|
|
100
|
+
const validationResult = result['~standard'].validate(parsedValues[0]);
|
|
101
|
+
const finalResult = validationResult instanceof Promise
|
|
102
|
+
? await validationResult
|
|
103
|
+
: validationResult;
|
|
104
|
+
if (finalResult.issues) {
|
|
105
|
+
throw this.fromStandardSchemaIssues(finalResult.issues, stackStartFn, parsedValues);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if ((0, guards_js_1.isBoolean)(result)) {
|
|
109
|
+
if (!result) {
|
|
110
|
+
throw new error_js_1.AssertionError({
|
|
111
|
+
id: this.id,
|
|
112
|
+
message: `Assertion ${this} failed for arguments: ${(0, util_1.inspect)(args)}`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if ((0, guards_js_1.isError)(result) && result instanceof zod_1.default.ZodError) {
|
|
117
|
+
throw this.fromZodError(result, stackStartFn, parsedValues);
|
|
118
|
+
}
|
|
119
|
+
else if ((0, internal_schema_js_1.isAssertionParseRequest)(result)) {
|
|
120
|
+
const { asyncSchema, schema, subject } = result;
|
|
121
|
+
const schemaToUse = schema ?? asyncSchema;
|
|
122
|
+
if ((0, guards_js_1.isZodType)(schemaToUse)) {
|
|
123
|
+
let zodResult;
|
|
124
|
+
if (schema) {
|
|
125
|
+
zodResult = schemaToUse.safeParse(subject);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
zodResult = await schemaToUse.safeParseAsync(subject);
|
|
129
|
+
}
|
|
130
|
+
if (!zodResult.success) {
|
|
131
|
+
throw this.fromZodError(zodResult.error, stackStartFn, subject);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if ((0, guards_js_1.isStandardSchema)(schemaToUse)) {
|
|
135
|
+
const validationResult = schemaToUse['~standard'].validate(subject);
|
|
136
|
+
const finalResult = validationResult instanceof Promise
|
|
137
|
+
? await validationResult
|
|
138
|
+
: validationResult;
|
|
139
|
+
if (finalResult.issues) {
|
|
140
|
+
throw this.fromStandardSchemaIssues(finalResult.issues, stackStartFn, subject);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if ((0, internal_schema_js_1.isAssertionFailure)(result)) {
|
|
145
|
+
const diffOutput = (0, format_assertion_failure_js_1.formatAssertionFailure)(result);
|
|
146
|
+
const baseMessage = result.message ??
|
|
147
|
+
`Assertion ${this} failed for arguments: ${(0, util_1.inspect)(args)}`;
|
|
148
|
+
const message = diffOutput
|
|
149
|
+
? `${baseMessage}\n${diffOutput}`
|
|
150
|
+
: baseMessage;
|
|
151
|
+
throw new error_js_1.AssertionError({
|
|
152
|
+
actual: result.actual,
|
|
153
|
+
expected: result.expected,
|
|
154
|
+
id: this.id,
|
|
155
|
+
message,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else if (result) {
|
|
159
|
+
throw new error_js_1.AssertionImplementationError(`Invalid return type from assertion ${this}; expected boolean, ZodType, or AssertionFailure`, { result });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.BupkisAssertionFunctionAsync = BupkisAssertionFunctionAsync;
|
|
164
|
+
/**
|
|
165
|
+
* A class representing an assertion implemented as a function.
|
|
166
|
+
*
|
|
167
|
+
* This function may:
|
|
168
|
+
*
|
|
169
|
+
* 1. Return a `boolean` indicating pass/fail.
|
|
170
|
+
* 2. Return a `ZodType` which will be used to validate the subject.
|
|
171
|
+
* 3. Return a `Promise` resolving to either of the above (when called via
|
|
172
|
+
* {@link expectAsync})
|
|
173
|
+
* 4. Throw a {@link AssertionError}; when called via {@link expectAsync}, reject
|
|
174
|
+
* with an {@link AssertionError}
|
|
175
|
+
*/
|
|
176
|
+
class BupkisAssertionSchemaAsync extends BupkisAssertionAsync {
|
|
177
|
+
async executeAsync(parsedValues, _args, stackStartFn, parseResult) {
|
|
178
|
+
// Check if we have cached validation result from parseValuesAsync
|
|
179
|
+
const cachedValidation = parseResult?.success
|
|
180
|
+
? parseResult.subjectValidationResult
|
|
181
|
+
: undefined;
|
|
182
|
+
if (cachedValidation && !cachedValidation.success) {
|
|
183
|
+
// Subject validation failed during parseValuesAsync, throw the cached error
|
|
184
|
+
if ('error' in cachedValidation) {
|
|
185
|
+
throw this.fromZodError(cachedValidation.error, stackStartFn, parsedValues);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Fall back to standard validation if no cached result
|
|
189
|
+
const [subject] = parsedValues;
|
|
190
|
+
try {
|
|
191
|
+
await this.impl.parseAsync(subject);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if ((0, guards_js_1.isA)(error, zod_1.default.ZodError)) {
|
|
195
|
+
throw this.fromZodError(error, stackStartFn, parsedValues);
|
|
196
|
+
}
|
|
197
|
+
/* c8 ignore next */
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async parseValuesAsync(args) {
|
|
202
|
+
const { slots } = this;
|
|
203
|
+
const parsedValues = [];
|
|
204
|
+
const mismatch = this.maybeParseValuesArgMismatch(args);
|
|
205
|
+
if (mismatch) {
|
|
206
|
+
return mismatch;
|
|
207
|
+
}
|
|
208
|
+
let exactMatch = true;
|
|
209
|
+
let subjectValidationResult;
|
|
210
|
+
for (let i = 0; i < slots.length; i++) {
|
|
211
|
+
const slot = slots[i];
|
|
212
|
+
const arg = args[i];
|
|
213
|
+
const parsedLiteralResult = this.parseSlotForLiteral(slot, i, arg);
|
|
214
|
+
if (parsedLiteralResult === true) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
else if (parsedLiteralResult !== false) {
|
|
218
|
+
return parsedLiteralResult;
|
|
219
|
+
}
|
|
220
|
+
// For the subject slot (first slot if it's unknown/any), try optimized validation
|
|
221
|
+
if (i === 0 &&
|
|
222
|
+
(slot.def.type === 'unknown' || slot.def.type === 'any') &&
|
|
223
|
+
this.isSimpleSchemaAssertion()) {
|
|
224
|
+
try {
|
|
225
|
+
const result = await this.impl.parseAsync(arg);
|
|
226
|
+
subjectValidationResult = { data: result, success: true };
|
|
227
|
+
parsedValues.push(result); // Use validated data
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
if ((0, guards_js_1.isA)(error, zod_1.default.ZodError)) {
|
|
231
|
+
subjectValidationResult = { error, success: false };
|
|
232
|
+
parsedValues.push(arg); // Keep original for error reporting
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
throw error; // Re-throw non-Zod errors
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exactMatch = false; // Subject was validated, so we know the exact type
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
// Standard slot processing for non-optimized cases
|
|
242
|
+
if (slot.def.type === 'unknown' || slot.def.type === 'any') {
|
|
243
|
+
parsedValues.push(arg);
|
|
244
|
+
exactMatch = false;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const result = await slot.safeParseAsync(arg);
|
|
248
|
+
if (!result.success) {
|
|
249
|
+
return {
|
|
250
|
+
success: false,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
parsedValues.push(result.data);
|
|
254
|
+
}
|
|
255
|
+
const result = {
|
|
256
|
+
exactMatch,
|
|
257
|
+
parsedValues: parsedValues,
|
|
258
|
+
success: true,
|
|
259
|
+
};
|
|
260
|
+
// Add cached validation result if we performed optimization
|
|
261
|
+
if (subjectValidationResult) {
|
|
262
|
+
result.subjectValidationResult = subjectValidationResult;
|
|
263
|
+
}
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
exports.BupkisAssertionSchemaAsync = BupkisAssertionSchemaAsync;
|
|
268
|
+
//# sourceMappingURL=assertion-async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-async.js","sourceRoot":"","sources":["../../src/assertion/assertion-async.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type AssertionAsync, type AssertionFunctionAsync, type AssertionImplAsync, type AssertionImplFnAsync, type AssertionImplSchemaAsync, type AssertionParts, type AssertionSchemaAsync, type AssertionSlots, type ParsedResult, type ParsedValues } from "./assertion-types.cjs";
|
|
2
|
+
import { BupkisAssertion } from "./assertion.cjs";
|
|
3
|
+
export declare abstract class BupkisAssertionAsync<Parts extends AssertionParts, Impl extends AssertionImplAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertion<Parts, Impl, Slots> implements AssertionAsync<Parts, Impl, Slots> {
|
|
4
|
+
abstract executeAsync(parsedValues: ParsedValues<Parts>, args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
5
|
+
parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* An assertion implemented as a Zod schema.
|
|
9
|
+
*
|
|
10
|
+
* Async schemas are supported via {@link expectAsync}.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Optimized schema assertion that performs subject validation during
|
|
14
|
+
* parseValues() to eliminate double parsing for simple schema-based
|
|
15
|
+
* assertions.
|
|
16
|
+
*
|
|
17
|
+
* This class implements Option 2 from the z.function() analysis - it caches the
|
|
18
|
+
* subject validation result during argument parsing and reuses it during
|
|
19
|
+
* execution, eliminating the double parsing overhead.
|
|
20
|
+
*/
|
|
21
|
+
export declare class BupkisAssertionFunctionAsync<Parts extends AssertionParts, Impl extends AssertionImplFnAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertionAsync<Parts, Impl, Slots> implements AssertionFunctionAsync<Parts, Impl, Slots> {
|
|
22
|
+
executeAsync(parsedValues: ParsedValues<Parts>, args: unknown[], stackStartFn: (...args: any[]) => any, _parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A class representing an assertion implemented as a function.
|
|
26
|
+
*
|
|
27
|
+
* This function may:
|
|
28
|
+
*
|
|
29
|
+
* 1. Return a `boolean` indicating pass/fail.
|
|
30
|
+
* 2. Return a `ZodType` which will be used to validate the subject.
|
|
31
|
+
* 3. Return a `Promise` resolving to either of the above (when called via
|
|
32
|
+
* {@link expectAsync})
|
|
33
|
+
* 4. Throw a {@link AssertionError}; when called via {@link expectAsync}, reject
|
|
34
|
+
* with an {@link AssertionError}
|
|
35
|
+
*/
|
|
36
|
+
export declare class BupkisAssertionSchemaAsync<Parts extends AssertionParts, Impl extends AssertionImplSchemaAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertionAsync<Parts, Impl, Slots> implements AssertionSchemaAsync<Parts, Impl, Slots> {
|
|
37
|
+
executeAsync(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
38
|
+
parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=assertion-async.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-async.d.ts","sourceRoot":"","sources":["../../src/assertion/assertion-async.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,YAAY,EAClB,8BAA6B;AAC9B,OAAO,EAAE,eAAe,EAAE,wBAAuB;AAGjD,8BAAsB,oBAAoB,CACxC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,kBAAkB,CAAC,KAAK,CAAC,EACtC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC1C,YAAW,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE7C,QAAQ,CAAC,YAAY,CACnB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAEV,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EACpD,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CAyChC;AACD;;;;GAIG;AACH;;;;;;;;GAQG;AAEH,qBAAa,4BAA4B,CACvC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,oBAAoB,CAAC,KAAK,CAAC,EACxC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC/C,YAAW,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEtC,YAAY,CACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAuGjB;AAED;;;;;;;;;;;GAWG;AAEH,qBAAa,0BAA0B,CACrC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,wBAAwB,CAAC,KAAK,CAAC,EAC5C,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC/C,YAAW,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEpC,YAAY,CACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,KAAK,EAAE,OAAO,EAAE,EAChB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IA8BD,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EAC7D,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CAwEhC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type AssertionAsync, type AssertionFunctionAsync, type AssertionImplAsync, type AssertionImplFnAsync, type AssertionImplSchemaAsync, type AssertionParts, type AssertionSchemaAsync, type AssertionSlots, type ParsedResult, type ParsedValues } from "./assertion-types.js";
|
|
2
|
+
import { BupkisAssertion } from "./assertion.js";
|
|
3
|
+
export declare abstract class BupkisAssertionAsync<Parts extends AssertionParts, Impl extends AssertionImplAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertion<Parts, Impl, Slots> implements AssertionAsync<Parts, Impl, Slots> {
|
|
4
|
+
abstract executeAsync(parsedValues: ParsedValues<Parts>, args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
5
|
+
parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* An assertion implemented as a Zod schema.
|
|
9
|
+
*
|
|
10
|
+
* Async schemas are supported via {@link expectAsync}.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Optimized schema assertion that performs subject validation during
|
|
14
|
+
* parseValues() to eliminate double parsing for simple schema-based
|
|
15
|
+
* assertions.
|
|
16
|
+
*
|
|
17
|
+
* This class implements Option 2 from the z.function() analysis - it caches the
|
|
18
|
+
* subject validation result during argument parsing and reuses it during
|
|
19
|
+
* execution, eliminating the double parsing overhead.
|
|
20
|
+
*/
|
|
21
|
+
export declare class BupkisAssertionFunctionAsync<Parts extends AssertionParts, Impl extends AssertionImplFnAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertionAsync<Parts, Impl, Slots> implements AssertionFunctionAsync<Parts, Impl, Slots> {
|
|
22
|
+
executeAsync(parsedValues: ParsedValues<Parts>, args: unknown[], stackStartFn: (...args: any[]) => any, _parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A class representing an assertion implemented as a function.
|
|
26
|
+
*
|
|
27
|
+
* This function may:
|
|
28
|
+
*
|
|
29
|
+
* 1. Return a `boolean` indicating pass/fail.
|
|
30
|
+
* 2. Return a `ZodType` which will be used to validate the subject.
|
|
31
|
+
* 3. Return a `Promise` resolving to either of the above (when called via
|
|
32
|
+
* {@link expectAsync})
|
|
33
|
+
* 4. Throw a {@link AssertionError}; when called via {@link expectAsync}, reject
|
|
34
|
+
* with an {@link AssertionError}
|
|
35
|
+
*/
|
|
36
|
+
export declare class BupkisAssertionSchemaAsync<Parts extends AssertionParts, Impl extends AssertionImplSchemaAsync<Parts>, Slots extends AssertionSlots<Parts>> extends BupkisAssertionAsync<Parts, Impl, Slots> implements AssertionSchemaAsync<Parts, Impl, Slots> {
|
|
37
|
+
executeAsync(parsedValues: ParsedValues<Parts>, _args: unknown[], stackStartFn: (...args: any[]) => any, parseResult?: ParsedResult<Parts>): Promise<void>;
|
|
38
|
+
parseValuesAsync<Args extends readonly unknown[]>(args: Args): Promise<ParsedResult<Parts>>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=assertion-async.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-async.d.ts","sourceRoot":"","sources":["../../src/assertion/assertion-async.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,YAAY,EAClB,6BAA6B;AAC9B,OAAO,EAAE,eAAe,EAAE,uBAAuB;AAGjD,8BAAsB,oBAAoB,CACxC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,kBAAkB,CAAC,KAAK,CAAC,EACtC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC1C,YAAW,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAE7C,QAAQ,CAAC,YAAY,CACnB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAEV,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EACpD,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CAyChC;AACD;;;;GAIG;AACH;;;;;;;;GAQG;AAEH,qBAAa,4BAA4B,CACvC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,oBAAoB,CAAC,KAAK,CAAC,EACxC,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC/C,YAAW,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEtC,YAAY,CACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAuGjB;AAED;;;;;;;;;;;GAWG;AAEH,qBAAa,0BAA0B,CACrC,KAAK,SAAS,cAAc,EAC5B,IAAI,SAAS,wBAAwB,CAAC,KAAK,CAAC,EAC5C,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAEnC,SAAQ,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAC/C,YAAW,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAEpC,YAAY,CACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EACjC,KAAK,EAAE,OAAO,EAAE,EAChB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IA8BD,gBAAgB,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EAC7D,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CAwEhC"}
|