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