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