vest 4.1.3 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/vest.development.js +112 -54
- package/dist/cjs/vest.production.js +1 -1
- package/dist/es/vest.development.js +112 -55
- package/dist/es/vest.production.js +1 -1
- package/dist/umd/vest.development.js +112 -54
- package/dist/umd/vest.production.js +1 -1
- package/package.json +1 -1
- package/types/vest.d.ts +29 -2
|
@@ -829,6 +829,12 @@
|
|
|
829
829
|
};
|
|
830
830
|
}
|
|
831
831
|
|
|
832
|
+
var Modes;
|
|
833
|
+
(function (Modes) {
|
|
834
|
+
Modes[Modes["ALL"] = 0] = "ALL";
|
|
835
|
+
Modes[Modes["EAGER"] = 1] = "EAGER";
|
|
836
|
+
})(Modes || (Modes = {}));
|
|
837
|
+
|
|
832
838
|
var context = createContext(function (ctxRef, parentContext) {
|
|
833
839
|
return parentContext
|
|
834
840
|
? null
|
|
@@ -845,13 +851,14 @@
|
|
|
845
851
|
prev: {}
|
|
846
852
|
}
|
|
847
853
|
},
|
|
854
|
+
mode: [Modes.ALL],
|
|
848
855
|
testCursor: createCursor()
|
|
849
856
|
}, ctxRef);
|
|
850
857
|
});
|
|
851
858
|
|
|
852
|
-
// This is
|
|
853
|
-
// Normally, behaves like a nested-array map
|
|
854
|
-
//
|
|
859
|
+
// This is kind of a map/filter in one function.
|
|
860
|
+
// Normally, behaves like a nested-array map,
|
|
861
|
+
// but returning `null` will drop the element from the array
|
|
855
862
|
function transform(array, cb) {
|
|
856
863
|
var res = [];
|
|
857
864
|
for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
|
|
@@ -918,23 +925,22 @@
|
|
|
918
925
|
};
|
|
919
926
|
// invalidate an item in the cache by its dependencies
|
|
920
927
|
cache.invalidate = function (deps) {
|
|
921
|
-
var index =
|
|
922
|
-
var cachedDeps = _a[0];
|
|
923
|
-
return lengthEquals(deps, cachedDeps.length) &&
|
|
924
|
-
deps.every(function (dep, i) { return dep === cachedDeps[i]; });
|
|
925
|
-
});
|
|
928
|
+
var index = findIndex(deps);
|
|
926
929
|
if (index > -1)
|
|
927
930
|
cacheStorage.splice(index, 1);
|
|
928
931
|
};
|
|
929
932
|
// Retrieves an item from the cache.
|
|
930
933
|
cache.get = function (deps) {
|
|
931
|
-
return cacheStorage[
|
|
934
|
+
return cacheStorage[findIndex(deps)] || null;
|
|
935
|
+
};
|
|
936
|
+
return cache;
|
|
937
|
+
function findIndex(deps) {
|
|
938
|
+
return cacheStorage.findIndex(function (_a) {
|
|
932
939
|
var cachedDeps = _a[0];
|
|
933
940
|
return lengthEquals(deps, cachedDeps.length) &&
|
|
934
941
|
deps.every(function (dep, i) { return dep === cachedDeps[i]; });
|
|
935
|
-
})
|
|
936
|
-
}
|
|
937
|
-
return cache;
|
|
942
|
+
});
|
|
943
|
+
}
|
|
938
944
|
}
|
|
939
945
|
|
|
940
946
|
// STATE REF
|
|
@@ -1248,18 +1254,21 @@
|
|
|
1248
1254
|
return isNotEmpty(allIncomplete);
|
|
1249
1255
|
}
|
|
1250
1256
|
|
|
1257
|
+
var Severity;
|
|
1258
|
+
(function (Severity) {
|
|
1259
|
+
Severity["WARNINGS"] = "warnings";
|
|
1260
|
+
Severity["ERRORS"] = "errors";
|
|
1261
|
+
})(Severity || (Severity = {}));
|
|
1262
|
+
|
|
1251
1263
|
/**
|
|
1252
1264
|
* Reads the testObjects list and gets full validation result from it.
|
|
1253
1265
|
*/
|
|
1254
1266
|
function genTestsSummary() {
|
|
1255
1267
|
var testObjects = useTestsFlat();
|
|
1256
|
-
var summary = {
|
|
1257
|
-
errorCount: 0,
|
|
1268
|
+
var summary = assign(baseStats(), {
|
|
1258
1269
|
groups: {},
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
warnCount: 0
|
|
1262
|
-
};
|
|
1270
|
+
tests: {}
|
|
1271
|
+
});
|
|
1263
1272
|
appendSummary(testObjects);
|
|
1264
1273
|
return countFailures(summary);
|
|
1265
1274
|
function appendSummary(testObjects) {
|
|
@@ -1287,30 +1296,34 @@
|
|
|
1287
1296
|
// eslint-disable-next-line max-statements
|
|
1288
1297
|
function genTestObject(summaryKey, testObject) {
|
|
1289
1298
|
var fieldName = testObject.fieldName, message = testObject.message;
|
|
1290
|
-
summaryKey[fieldName] = summaryKey[fieldName] ||
|
|
1291
|
-
errorCount: 0,
|
|
1292
|
-
warnCount: 0,
|
|
1293
|
-
testCount: 0
|
|
1294
|
-
};
|
|
1299
|
+
summaryKey[fieldName] = summaryKey[fieldName] || baseStats();
|
|
1295
1300
|
var testKey = summaryKey[fieldName];
|
|
1296
1301
|
if (testObject.isNonActionable())
|
|
1297
1302
|
return testKey;
|
|
1298
1303
|
summaryKey[fieldName].testCount++;
|
|
1299
1304
|
// Adds to severity group
|
|
1300
|
-
function addTo(
|
|
1305
|
+
function addTo(severity) {
|
|
1306
|
+
var countKey = severity === Severity.ERRORS ? 'errorCount' : 'warnCount';
|
|
1301
1307
|
testKey[countKey]++;
|
|
1302
1308
|
if (message) {
|
|
1303
|
-
testKey[
|
|
1309
|
+
testKey[severity] = (testKey[severity] || []).concat(message);
|
|
1304
1310
|
}
|
|
1305
1311
|
}
|
|
1306
1312
|
if (testObject.isFailing()) {
|
|
1307
|
-
addTo(
|
|
1313
|
+
addTo(Severity.ERRORS);
|
|
1308
1314
|
}
|
|
1309
1315
|
else if (testObject.isWarning()) {
|
|
1310
|
-
addTo(
|
|
1316
|
+
addTo(Severity.WARNINGS);
|
|
1311
1317
|
}
|
|
1312
1318
|
return testKey;
|
|
1313
1319
|
}
|
|
1320
|
+
function baseStats() {
|
|
1321
|
+
return {
|
|
1322
|
+
errorCount: 0,
|
|
1323
|
+
warnCount: 0,
|
|
1324
|
+
testCount: 0
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1314
1327
|
|
|
1315
1328
|
function either(a, b) {
|
|
1316
1329
|
return !!a !== !!b;
|
|
@@ -1320,7 +1333,7 @@
|
|
|
1320
1333
|
* Checks that a given test object matches the currently specified severity level
|
|
1321
1334
|
*/
|
|
1322
1335
|
function nonMatchingSeverityProfile(severity, testObject) {
|
|
1323
|
-
return either(severity ===
|
|
1336
|
+
return either(severity === Severity.WARNINGS, testObject.warns());
|
|
1324
1337
|
}
|
|
1325
1338
|
|
|
1326
1339
|
function collectFailureMessages(severity, testObjects, options) {
|
|
@@ -1362,10 +1375,10 @@
|
|
|
1362
1375
|
}
|
|
1363
1376
|
|
|
1364
1377
|
function getErrors(fieldName) {
|
|
1365
|
-
return getFailures(
|
|
1378
|
+
return getFailures(Severity.ERRORS, fieldName);
|
|
1366
1379
|
}
|
|
1367
1380
|
function getWarnings(fieldName) {
|
|
1368
|
-
return getFailures(
|
|
1381
|
+
return getFailures(Severity.WARNINGS, fieldName);
|
|
1369
1382
|
}
|
|
1370
1383
|
/**
|
|
1371
1384
|
* @returns suite or field's errors or warnings.
|
|
@@ -1379,11 +1392,11 @@
|
|
|
1379
1392
|
}
|
|
1380
1393
|
|
|
1381
1394
|
function getErrorsByGroup(groupName, fieldName) {
|
|
1382
|
-
var errors = getByGroup(
|
|
1395
|
+
var errors = getByGroup(Severity.ERRORS, groupName, fieldName);
|
|
1383
1396
|
return getFailuresArrayOrObject(errors, fieldName);
|
|
1384
1397
|
}
|
|
1385
1398
|
function getWarningsByGroup(groupName, fieldName) {
|
|
1386
|
-
var warnings = getByGroup(
|
|
1399
|
+
var warnings = getByGroup(Severity.WARNINGS, groupName, fieldName);
|
|
1387
1400
|
return getFailuresArrayOrObject(warnings, fieldName);
|
|
1388
1401
|
}
|
|
1389
1402
|
/**
|
|
@@ -1417,10 +1430,10 @@
|
|
|
1417
1430
|
}
|
|
1418
1431
|
|
|
1419
1432
|
function hasErrors(fieldName) {
|
|
1420
|
-
return has(
|
|
1433
|
+
return has(Severity.ERRORS, fieldName);
|
|
1421
1434
|
}
|
|
1422
1435
|
function hasWarnings(fieldName) {
|
|
1423
|
-
return has(
|
|
1436
|
+
return has(Severity.WARNINGS, fieldName);
|
|
1424
1437
|
}
|
|
1425
1438
|
function has(severityKey, fieldName) {
|
|
1426
1439
|
var testObjects = useTestsFlat();
|
|
@@ -1430,10 +1443,10 @@
|
|
|
1430
1443
|
}
|
|
1431
1444
|
|
|
1432
1445
|
function hasErrorsByGroup(groupName, fieldName) {
|
|
1433
|
-
return hasByGroup(
|
|
1446
|
+
return hasByGroup(Severity.ERRORS, groupName, fieldName);
|
|
1434
1447
|
}
|
|
1435
1448
|
function hasWarningsByGroup(groupName, fieldName) {
|
|
1436
|
-
return hasByGroup(
|
|
1449
|
+
return hasByGroup(Severity.WARNINGS, groupName, fieldName);
|
|
1437
1450
|
}
|
|
1438
1451
|
/**
|
|
1439
1452
|
* Checks whether there are failures in a given group.
|
|
@@ -1586,18 +1599,12 @@
|
|
|
1586
1599
|
var listeners = {};
|
|
1587
1600
|
return {
|
|
1588
1601
|
emit: function (event, data) {
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
}
|
|
1592
|
-
listeners[event].forEach(function (listener) {
|
|
1593
|
-
listener(data);
|
|
1602
|
+
(listeners[event] || []).forEach(function (handler) {
|
|
1603
|
+
handler(data);
|
|
1594
1604
|
});
|
|
1595
1605
|
},
|
|
1596
1606
|
on: function (event, handler) {
|
|
1597
|
-
|
|
1598
|
-
listeners[event] = [];
|
|
1599
|
-
}
|
|
1600
|
-
listeners[event].push(handler);
|
|
1607
|
+
listeners[event] = (listeners[event] || []).concat(handler);
|
|
1601
1608
|
return {
|
|
1602
1609
|
off: function () {
|
|
1603
1610
|
listeners[event] = listeners[event].filter(function (h) { return h !== handler; });
|
|
@@ -1665,9 +1672,7 @@
|
|
|
1665
1672
|
*/
|
|
1666
1673
|
function runDoneCallbacks() {
|
|
1667
1674
|
var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
|
|
1668
|
-
|
|
1669
|
-
callEach(doneCallbacks);
|
|
1670
|
-
}
|
|
1675
|
+
callEach(doneCallbacks);
|
|
1671
1676
|
}
|
|
1672
1677
|
|
|
1673
1678
|
// eslint-disable-next-line max-lines-per-function
|
|
@@ -1681,14 +1686,21 @@
|
|
|
1681
1686
|
}
|
|
1682
1687
|
testObject.done();
|
|
1683
1688
|
runFieldCallbacks(testObject.fieldName);
|
|
1684
|
-
|
|
1689
|
+
if (!hasRemainingTests()) {
|
|
1690
|
+
// When no more tests are running, emit the done event
|
|
1691
|
+
bus.emit(Events.ALL_RUNNING_TESTS_FINISHED);
|
|
1692
|
+
}
|
|
1685
1693
|
});
|
|
1686
1694
|
// Report that the suite completed its synchronous test run.
|
|
1687
1695
|
// Async operations may still be running.
|
|
1688
|
-
bus.on(Events.
|
|
1696
|
+
bus.on(Events.SUITE_CALLBACK_DONE_RUNNING, function () {
|
|
1689
1697
|
// Remove tests that are optional and need to be omitted
|
|
1690
1698
|
omitOptionalTests();
|
|
1691
1699
|
});
|
|
1700
|
+
// Called when all the tests, including async, are done running
|
|
1701
|
+
bus.on(Events.ALL_RUNNING_TESTS_FINISHED, function () {
|
|
1702
|
+
runDoneCallbacks();
|
|
1703
|
+
});
|
|
1692
1704
|
// Removes a certain field from the state.
|
|
1693
1705
|
bus.on(Events.REMOVE_FIELD, function (fieldName) {
|
|
1694
1706
|
useEachTestObject(function (testObject) {
|
|
@@ -1718,9 +1730,10 @@
|
|
|
1718
1730
|
var Events;
|
|
1719
1731
|
(function (Events) {
|
|
1720
1732
|
Events["TEST_COMPLETED"] = "test_completed";
|
|
1733
|
+
Events["ALL_RUNNING_TESTS_FINISHED"] = "all_running_tests_finished";
|
|
1721
1734
|
Events["REMOVE_FIELD"] = "remove_field";
|
|
1722
1735
|
Events["RESET_FIELD"] = "reset_field";
|
|
1723
|
-
Events["
|
|
1736
|
+
Events["SUITE_CALLBACK_DONE_RUNNING"] = "suite_callback_done_running";
|
|
1724
1737
|
})(Events || (Events = {}));
|
|
1725
1738
|
|
|
1726
1739
|
// eslint-disable-next-line max-lines-per-function
|
|
@@ -1757,7 +1770,7 @@
|
|
|
1757
1770
|
});
|
|
1758
1771
|
// Report the suite is done registering tests
|
|
1759
1772
|
// Async tests may still be running
|
|
1760
|
-
bus.emit(Events.
|
|
1773
|
+
bus.emit(Events.SUITE_CALLBACK_DONE_RUNNING);
|
|
1761
1774
|
// Return the result
|
|
1762
1775
|
return produceFullResult();
|
|
1763
1776
|
}), {
|
|
@@ -1788,7 +1801,7 @@
|
|
|
1788
1801
|
*/
|
|
1789
1802
|
function each(list, callback) {
|
|
1790
1803
|
if (!isFunction(callback)) {
|
|
1791
|
-
throwError('callback must be a function');
|
|
1804
|
+
throwError('each callback must be a function');
|
|
1792
1805
|
}
|
|
1793
1806
|
isolate({ type: IsolateTypes.EACH }, function () {
|
|
1794
1807
|
list.forEach(function (arg, index) {
|
|
@@ -2024,6 +2037,45 @@
|
|
|
2024
2037
|
}
|
|
2025
2038
|
}
|
|
2026
2039
|
|
|
2040
|
+
/**
|
|
2041
|
+
* Sets the suite to "eager" (fail fast) mode.
|
|
2042
|
+
* Eager mode will skip running subsequent tests of a failing fields.
|
|
2043
|
+
*
|
|
2044
|
+
* @example
|
|
2045
|
+
* // in the following example, the second test of username will not run
|
|
2046
|
+
* // if the first test of username failed.
|
|
2047
|
+
* const suite = create((data) => {
|
|
2048
|
+
* eager();
|
|
2049
|
+
*
|
|
2050
|
+
* test('username', 'username is required', () => {
|
|
2051
|
+
* enforce(data.username).isNotBlank();
|
|
2052
|
+
* });
|
|
2053
|
+
*
|
|
2054
|
+
* test('username', 'username is too short', () => {
|
|
2055
|
+
* enforce(data.username).longerThan(2);
|
|
2056
|
+
* });
|
|
2057
|
+
* });
|
|
2058
|
+
*/
|
|
2059
|
+
function eager() {
|
|
2060
|
+
setMode(Modes.EAGER);
|
|
2061
|
+
}
|
|
2062
|
+
function shouldSkipBasedOnMode(testObject) {
|
|
2063
|
+
if (isEager() && hasErrors(testObject.fieldName))
|
|
2064
|
+
return true;
|
|
2065
|
+
return false;
|
|
2066
|
+
}
|
|
2067
|
+
function isEager() {
|
|
2068
|
+
return isMode(Modes.EAGER);
|
|
2069
|
+
}
|
|
2070
|
+
function isMode(mode) {
|
|
2071
|
+
var currentMode = context.useX().mode;
|
|
2072
|
+
return currentMode[0] === mode;
|
|
2073
|
+
}
|
|
2074
|
+
function setMode(nextMode) {
|
|
2075
|
+
var mode = context.useX().mode;
|
|
2076
|
+
mode[0] = nextMode;
|
|
2077
|
+
}
|
|
2078
|
+
|
|
2027
2079
|
/**
|
|
2028
2080
|
* Conditionally omits tests from the suite.
|
|
2029
2081
|
*
|
|
@@ -2254,6 +2306,11 @@
|
|
|
2254
2306
|
// eslint-disable-next-line max-statements
|
|
2255
2307
|
function registerPrevRunTest(testObject) {
|
|
2256
2308
|
var prevRunTest = useTestAtCursor(testObject);
|
|
2309
|
+
if (shouldSkipBasedOnMode(testObject)) {
|
|
2310
|
+
moveForward();
|
|
2311
|
+
testObject.skip();
|
|
2312
|
+
return testObject;
|
|
2313
|
+
}
|
|
2257
2314
|
if (isOmitted()) {
|
|
2258
2315
|
prevRunTest.omit();
|
|
2259
2316
|
moveForward();
|
|
@@ -2362,12 +2419,13 @@
|
|
|
2362
2419
|
ctx.currentTest.warn();
|
|
2363
2420
|
}
|
|
2364
2421
|
|
|
2365
|
-
var VERSION = "4.
|
|
2422
|
+
var VERSION = "4.2.0";
|
|
2366
2423
|
|
|
2367
2424
|
exports.VERSION = VERSION;
|
|
2368
2425
|
exports.context = context;
|
|
2369
2426
|
exports.create = create;
|
|
2370
2427
|
exports.each = each;
|
|
2428
|
+
exports.eager = eager;
|
|
2371
2429
|
exports.enforce = enforce;
|
|
2372
2430
|
exports.group = group;
|
|
2373
2431
|
exports.include = include;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n){return"function"==typeof n}function e(n){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function r(n){return null===n}function u(n){return void 0===n}function i(n){return null===n||u(n)}function o(n){return String(n)===n}function s(n,t){return o(n)&&o(t)&&n.endsWith(t)}function a(n,t){return n===t}function c(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function f(n,t){return c(n)&&c(t)&&Number(n)>Number(t)}function l(n,t){return c(n)&&c(t)&&Number(n)>=Number(t)}function p(n){return!!Array.isArray(n)}function d(n,t){return!!(p(t)||o(t)&&o(n))&&-1!==t.indexOf(n)}function v(n,t){return c(n)&&c(t)&&Number(n)<=Number(t)}function h(n,t,e){return l(n,t)&&v(n,e)}function g(n){return i(n)||o(n)&&!n.trim()}function m(n){return!!n===n}function y(n){return"number"==typeof n}function N(n,t){return n.length===Number(t)}function E(n){if(n){if(y(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return N(n,0);if("object"==typeof n)return N(Object.keys(n),0)}return!0}function b(n,t){return n in t}function T(n){return Number.isNaN(n)}function C(n){return!!c(n)&&0>Number(n)}function O(n){return!!n}function k(n,t){if(i(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function S(n,t){return c(n)&&c(t)&&Number(n)<Number(t)}function w(n,t){return n.length>Number(t)}function P(n,t){return t instanceof RegExp?t.test(n):!!o(t)&&new RegExp(t).test(n)}function F(n,t){return c(n)&&c(t)&&Number(n)===Number(t)}function I(n,t){return o(n)&&o(t)&&n.startsWith(t)}function x(n){for(var e in ht){var r=ht[e];t(r)&&n(e,r)}}function W(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return t(n)?n.apply(void 0,e):n}function X(n,t){var e;return null!==(e=W(n))&&void 0!==e?e:t}function _(n,t){throw Error(X(t,n))}function A(n,t){setTimeout((function(){_(n,t)}),0)}function D(n){function t(t,u){var i,o,s=e();return t=Hn({},s||{},null!==(i=W(n,t,s))&&void 0!==i?i:t),i=r.ctx=Object.freeze(t),r.ancestry.unshift(i),u=u(i),r.ancestry.shift(),r.ctx=null!==(o=r.ancestry[0])&&void 0!==o?o:null,u}function e(){return r.ctx}var r={ancestry:[]};return{bind:function(n,e){return function(){for(var r=[],u=0;u<arguments.length;u++)r[u]=arguments[u];return t(n,(function(){return e.apply(void 0,r)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=r.ctx)&&void 0!==t?t:_(X(n,"Context was used after it was closed"))}}}function L(){return null}function U(n,t,e){if(e||2===arguments.length)for(var r,u=0,i=t.length;u<i;u++)!r&&u in t||(r||(r=Array.prototype.slice.call(t,0,u)),r[u]=t[u]);return n.concat(r||Array.prototype.slice.call(t))}function q(){try{return t(Proxy)}catch(n){return!1}}function R(n,t){return n={pass:n},t&&(n.message=t),n}function M(n,t,e){for(var r=[],u=3;u<arguments.length;u++)r[u-3]=arguments[u];return m(n)||n&&m(n.pass)||_("Incorrect return value for rule: "+JSON.stringify(n)),m(n)?R(n):R(n.pass,W.apply(void 0,U([n.message,t,e],r,!1)))}function j(n){function t(t,e,r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];if(!(i=M.apply(void 0,U([gt.run({value:n},(function(){return e.apply(void 0,U([n],u,!1))})),r,n],u,!1))).pass){if(!E(i.message))throw i.message;_("enforce/".concat(r," failed with ").concat(JSON.stringify(n)))}return t}}var e={};if(!q())return x((function(n,r){e[n]=t(e,r,n)})),e;var r=new Proxy(e,{get:function(n,e){if(n=ht[e])return t(r,n,e)}});return r}function G(n,t){function e(n){r=!0,u=n}for(var r=!1,u=null,i=0;i<n.length;i++)if(t(n[i],e,i),r)return u}function K(n){var t,e=[];return function n(r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];var o=ht[r];e.push((function(n){return M.apply(void 0,U([o.apply(void 0,U([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return X(G(e,(function(e,r){var u,i=gt.run({value:n},(function(){return e(n)}));i.pass||r(R(!!i.pass,null!==(u=W(t,n,i.message))&&void 0!==u?u:i.message))})),R(!0))},test:function(n){return s.run(n).pass},message:function(n){return n&&(t=n),s}};return q()?s=new Proxy(s,{get:function(t,e){return ht[e]?n(e):t[e]}}):(x((function(t){s[t]=n(t)})),s)}}(n)}function B(n){function e(n,t,e){return u.references.push(),r(n,W(t,e)),function(){return[u.references[n],function(t){return r(n,W(t,u.references[n]))}]}}function r(e,r){var o=u.references[e];u.references[e]=r,t(e=i[e][1])&&e(r,o),t(n)&&n()}var u={references:[]},i=[];return{registerStateKey:function(n,t){var r=i.length;return i.push([n,t]),e(r,n)},reset:function(){var n=u.references;u.references=[],i.forEach((function(t,r){return e(r,t[0],n[r])}))}}}function H(n,t){var e=t.suiteId;return t=t.suiteName,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(e),suiteName:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}function V(n){return(n=[].concat(n))[n.length-1]}function J(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return V(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,V(t)},removeLevel:function(){t.pop()},reset:n}}function Y(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];p(u)?e.push(Y(u,t)):(u=t(u),Vn(u)&&e.push(u))}return e}function z(n){return[].concat(n).reduce((function(n,t){return p(t)?n.concat(z(t)):[].concat(n).concat(t)}),[])}function Q(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=X(n[r],[]),n=n[r]}return n}function Z(n){void 0===n&&(n=1);var t=[],e=function(r,u){var i=e.get(r);return i?i[1]:(u=u(),t.unshift([r.concat(),u]),w(t,n)&&(t.length=n),u)};return e.invalidate=function(n){var e=t.findIndex((function(t){var e=t[0];return N(n,e.length)&&n.every((function(n,t){return n===e[t]}))}));-1<e&&t.splice(e,1)},e.get=function(n){return t[t.findIndex((function(t){var e=t[0];return N(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))]||null},e}function $(){return bt.useX().stateRef}function nn(){return $().testObjects()}function tn(){(0,nn()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function en(n){(0,nn()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function rn(){return z(Y(nn()[0].current,(function(n){return n.isPending()?n:null})))}function un(){var n=nn()[0].current;return Tt([n],(function(){return z(n)}))}function on(){return bt.useX().testCursor.getCursor()}function sn(){return bt.useX().testCursor.next()}function an(n,e){if(n=void 0===(n=n.type)?Kn.DEFAULT:n,t(e)){var r={current:{},prev:{}},u=on();return bt.run({isolate:{type:n,keys:r}},(function(){bt.useX().testCursor.addLevel(),r.prev=function(){var n=nn()[0].prev;return[].concat(Q(n,on())).reduce((function(n,t){return t instanceof Ot&&!i(t.key)?(n[t.key]=t,n):n}),{})}(),en((function(n){return Q(n,u)[V(u)]=[],n}));var n=e();return bt.useX().testCursor.removeLevel(),sn(),n}))}}function cn(n,t){return!(!t||n.fieldName!==t)}function fn(n){var t=rn();return!E(t)&&(n?t.some((function(t){return cn(t,n)})):ot(t))}function ln(n,t){function e(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||{errorCount:0,warnCount:0,testCount:0};var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e("errorCount","errors"):t.isWarning()&&e("warnCount","warnings")),i}function pn(n,t,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return t.reduce((function(t,e){if(u&&e.groupName!==u)var r=!0;else i&&!cn(e,i)?r=!0:(r=e.warns(),r="warnings"===n!=!!r);return r||!e.hasFailures()||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.message||[])),t}),mt({},i&&((r={})[i]=[],r)))}function dn(n){return hn("errors",n)}function vn(n){return hn("warnings",n)}function hn(n,t){return n=pn(n,un(),{fieldName:t}),t?n[t]:n}function gn(n,t){return n=yn("errors",n,t),t?n[t]:n}function mn(n,t){return n=yn("warnings",n,t),t?n[t]:n}function yn(n,t,e){return t||_("get".concat(n[0].toUpperCase()).concat(n.slice(1),"ByGroup requires a group name. Received `").concat(t,"` instead.")),pn(n,un(),{group:t,fieldName:e})}function Nn(n,t,e){return(e=!n.hasFailures()||e&&!cn(n,e))||(e="warnings"===t!=!!(n=n.warns())),!e}function En(n){return Tn("errors",n)}function bn(n){return Tn("warnings",n)}function Tn(n,t){return un().some((function(e){return Nn(e,n,t)}))}function Cn(n,t){return kn("errors",n,t)}function On(n,t){return kn("warnings",n,t)}function kn(n,t,e){return un().some((function(r){return t===r.groupName&&Nn(r,n,e)}))}function Sn(){var n=un(),t={stateRef:$()};return Xt([n],bt.bind(t,(function(){var n=$().suiteName()[0];return Hn(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return un().forEach((function(t){var e=t.fieldName,r=t.groupName;n.tests[e]=ln(n.tests,t),r&&(n.groups[r]=n.groups[r]||{},n.groups[r][e]=ln(n.groups[r],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:bt.bind(t,dn),getErrorsByGroup:bt.bind(t,gn),getWarnings:bt.bind(t,vn),getWarningsByGroup:bt.bind(t,mn),hasErrors:bt.bind(t,En),hasErrorsByGroup:bt.bind(t,Cn),hasWarnings:bt.bind(t,bn),hasWarningsByGroup:bt.bind(t,On),isValid:bt.bind(t,(function(n){var t=Sn(),e=un().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(e=!!n&&!!e[n])?n=!0:t.hasErrors(n)?n=!1:n=!(E(e=un())||n&&E(t.tests[n])||function(n){var t=$().optionalFields()[0];return ot(rn().filter((function(e){return!(n&&!cn(e,n))&&!0!==t[e.fieldName]})))}(n))&&function(n){var t=un(),e=$().optionalFields()[0];return t.every((function(t){return!(!n||cn(t,n))||!0===e[t.fieldName]||t.isTested()||t.isOmitted()}))}(n),n})),suiteName:n})})))}function wn(){var n=un(),t={stateRef:$()};return _t([n],bt.bind(t,(function(){return Hn({},Sn(),{done:bt.bind(t,At)})})))}function Pn(n,e,r){return!(t(n)&&(!e||r.tests[e]&&!E(r.tests[e].testCount)))}function Fn(n){return!(fn()&&(!n||fn(n)))}function In(n,t){var e=bt.bind({},n);(0,$().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(e):n.doneCallbacks.push(e),n}))}function xn(n){return n.forEach((function(n){return n()}))}function Wn(){var n=function(){var n={};return{emit:function(t,e){n[t]&&n[t].forEach((function(n){n(e)}))},on:function(t,e){return n[t]||(n[t]=[]),n[t].push(e),{off:function(){n[t]=n[t].filter((function(n){return n!==e}))}}}}}();return n.on(Ct.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=$().testCallbacks()[0].fieldCallbacks;n&&!fn(n)&&p(t[n])&&xn(t[n]),n=$().testCallbacks()[0].doneCallbacks,fn()||xn(n)}})),n.on(Ct.SUITE_COMPLETED,(function(){!function(){var n=$().optionalFields()[0];if(!E(n)){var e={};en((function(r){return Y(r,(function(r){var u=r.fieldName;if(e.hasOwnProperty(u))e[r.fieldName]&&r.omit();else{var i=n[u];t(i)&&(e[u]=i(),e[r.fieldName]&&r.omit())}return r}))}))}}()})),n.on(Ct.REMOVE_FIELD,(function(n){un().forEach((function(t){cn(t,n)&&(t.cancel(),function(n){en((function(t){return Y(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Ct.RESET_FIELD,(function(n){un().forEach((function(t){cn(t,n)&&t.reset()}))})),n}function Xn(){var n=bt.useX();return n.bus||_(),n.bus}function _n(n){return Dn(0,"tests",n)}function An(n){return Dn(1,"tests",n)}function Dn(n,t,e){var r=bt.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){o(e)&&(r.exclusion[t][e]=0===n)}))}function Ln(n){for(var t in n)if(!0===n[t])return!0;return!1}function Un(n){_("Wrong arguments passed to group. Group ".concat(n,"."))}function qn(n){var e=n.asyncTest,r=n.message;if(e&&t(e.then)){var u=Xn().emit,i=$(),s=bt.bind({stateRef:i},(function(){tn(),u(Ct.TEST_COMPLETED,n)}));i=bt.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=o(t)?t:r,n.fail(),s())}));try{e.then(s,i)}catch(n){i()}}}function Rn(n){var t=on();en((function(e){return Q(e,t)[V(t)]=n,e}))}function Mn(n){var e=nn()[0].prev;if(E(e))Rn(n),e=n;else{var r=on();if(e=Q(e,r)[V(r)],i(n.key))!ot(r=e)||r.fieldName===n.fieldName&&r.groupName===n.groupName||(bt.useX().isolate.type!==Kn.EACH&&A("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(e.fieldName,"\n received: ").concat(n.fieldName,'\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.')),function(){var n=nn(),t=n[1],e=n[0].prev;n=Q(e,on());var r=bt.useX().testCursor.cursorAt();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),e=null),Rn(e=X(e,n));else{e=n.key;var s=bt.useX().isolate.keys.prev[e];r=n,s&&(r=s),s=r;var a=bt.useX().isolate.keys.current;i(a[e])?a[e]=s:A('Encountered the same test key "'.concat(e,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Rn(e=r)}}if(bt.useX().omitted)return e.omit(),sn(),e;if(function(n){var t=n.fieldName;if(n=n.groupName,bt.useX().skipped)return!0;var e=bt.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){n:{var o=bt.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(o,n))var s=!1===o[n];else{for(s in o)if(!0===o[s]){s=!0;break n}s=!1}}if(s)return!0;if(!0===r.groups[n])return!(i||!Ln(u)&&!1!==u[t])}r=bt.useX().exclusion;n:{for(a in(s=bt.useX().exclusion).groups)if(s.groups[a]){var a=!0;break n}a=!1}return!(!a||n&&n in r.groups&&r.groups[n])||!i&&!!Ln(u)&&!W(e[t])}(n))return e.skip(!!bt.useX().skipped),sn(),e;if(n!==e&&e.fieldName===n.fieldName&&e.groupName===n.groupName&&e.isPending()&&e.cancel(),Rn(n),sn(),n.isUntested()){e=Xn(),r=function(n){return bt.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){t=e,u(n.message)&&o(t)&&(n.message=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{r&&t(r.then)?(n.asyncTest=r,n.setPending(),qn(n)):e.emit(Ct.TEST_COMPLETED,n)}catch(t){_("Unexpected error encountered during test registration.\n Test Object: ".concat(n,".\n Error: ").concat(t,"."))}}else(e=n.asyncTest)&&t(e.then)&&(n.setPending(),qn(n));return n}function jn(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var u=t(e[1])?e:U([void 0],e,!0);e=u[0],r=u[1],u=u[2],ft(n)&&Gn("fieldName","string"),t(r)||Gn("Test callback","function");var i=bt.useX();return Mn(e=new Ot(n,r,{message:e,groupName:i.groupName,key:u}))}function Gn(n,t){_("Incompatible params passed to test function. ".concat(n," must be a ").concat(t))}var Kn,Bn,Hn=Object.assign,Vn=e(r),Jn=e(u),Yn=e(i),zn=e(s),Qn=e(a),Zn=e(c),$n=e(p),nt=e(d),tt=e(h),et=e(g),rt=e(m),ut=e(y),it=e(N),ot=e(E),st=e(b),at=e(T),ct=e(C),ft=e(o),lt=e(O),pt=e(k),dt=e(P),vt=e(F),ht={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:zn,doesNotStartWith:e(I),endsWith:s,equals:a,greaterThan:f,greaterThanOrEquals:l,gt:f,gte:l,inside:d,isArray:p,isBetween:h,isBlank:g,isBoolean:m,isEmpty:E,isEven:function(n){return!!c(n)&&0==n%2},isFalsy:lt,isKeyOf:b,isNaN:T,isNegative:C,isNotArray:$n,isNotBetween:tt,isNotBlank:et,isNotBoolean:rt,isNotEmpty:ot,isNotKeyOf:st,isNotNaN:at,isNotNull:Vn,isNotNullish:Yn,isNotNumber:ut,isNotNumeric:Zn,isNotString:ft,isNotUndefined:Jn,isNotValueOf:pt,isNull:r,isNullish:i,isNumber:y,isNumeric:c,isOdd:function(n){return!!c(n)&&0!=n%2},isPositive:ct,isString:o,isTruthy:O,isUndefined:u,isValueOf:k,lengthEquals:N,lengthNotEquals:it,lessThan:S,lessThanOrEquals:v,longerThan:w,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:S,lte:v,matches:P,notEquals:Qn,notInside:nt,notMatches:dt,numberEquals:F,numberNotEquals:vt,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:I},gt=D((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?Hn(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:Hn(e,{parent:L})})),mt=function(){return(mt=Object.assign||function(n){for(var t,e=1,r=arguments.length;e<r;e++)for(var u in t=arguments[e])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)},yt=(Bn={context:function(){return gt.useX()},extend:function(n){Hn(ht,n)}},q()?new Proxy(Hn(j,Bn),{get:function(n,t){return t in n?n[t]:ht[t]?K(t):void 0}}):(x((function(n){Bn[n]=K(n)})),Hn(j,Bn))),Nt=function(n){return function(){return"".concat(n++)}}(0);!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.OMIT_WHEN=4]="OMIT_WHEN",n[n.GROUP=5]="GROUP"}(Kn||(Kn={}));var Et,bt=D((function(n,t){return t?null:Hn({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:Kn.DEFAULT,keys:{current:{},prev:{}}},testCursor:J()},n)})),Tt=Z();!function(n){n.Error="error",n.Warning="warning"}(Et||(Et={}));var Ct,Ot=function(){function n(n,t,e){var r=void 0===e?{}:e;e=r.message;var u=r.groupName;r=r.key,this.key=null,this.id=Nt(),this.severity=Et.Error,this.status=kt,this.fieldName=n,this.testFn=t,u&&(this.groupName=u),e&&(this.message=e),r&&(this.key=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,u(this.message)&&o(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Wt||(this.status=n)},n.prototype.warns=function(){return this.severity===Et.Warning},n.prototype.setPending=function(){this.setStatus(It)},n.prototype.fail=function(){this.setStatus(this.warns()?Pt:wt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Ft)},n.prototype.warn=function(){this.severity=Et.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(St)},n.prototype.cancel=function(){this.setStatus(xt),tn()},n.prototype.reset=function(){this.status=kt,tn()},n.prototype.omit=function(){this.setStatus(Wt)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},n.prototype.isPending=function(){return this.statusEquals(It)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(Wt)},n.prototype.isUntested=function(){return this.statusEquals(kt)},n.prototype.isFailing=function(){return this.statusEquals(wt)},n.prototype.isCanceled=function(){return this.statusEquals(xt)},n.prototype.isSkipped=function(){return this.statusEquals(St)},n.prototype.isPassing=function(){return this.statusEquals(Ft)},n.prototype.isWarning=function(){return this.statusEquals(Pt)},n.prototype.statusEquals=function(n){return this.status===n},n}(),kt="UNTESTED",St="SKIPPED",wt="FAILED",Pt="WARNING",Ft="PASSING",It="PENDING",xt="CANCELED",Wt="OMITTED",Xt=Z(20),_t=Z(20),At=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=(n=n.reverse())[0];if(n=n[1],t=wn(),Pn(e,n,t))return t;var r=function(){return e(Sn())};return Fn(n)?(r(),t):(In(r,n),t)};!function(n){n.TEST_COMPLETED="test_completed",n.REMOVE_FIELD="remove_field",n.RESET_FIELD="reset_field",n.SUITE_COMPLETED="suite_completed"}(Ct||(Ct={})),_n.group=function(n){return Dn(0,"groups",n)},An.group=function(n){return Dn(1,"groups",n)};var Dt=Hn(jn,{memo:function(n){var t=Z(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=bt.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[$().suiteId()[0],e,u].concat(i),null===(r=t.get(u))?t(u,(function(){return n(e,s,o)})):r[1].isCanceled()?(t.invalidate(u),t(u,(function(){return n(e,s,o)}))):Mn(r[1])}}(jn)});n.VERSION="4.1.3",n.context=bt,n.create=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];n=n[1],t(r)||_("vest.create: Expected callback to be a function.");var u=Wn(),i=B();return n={stateRef:H(i,{suiteId:Nt(),suiteName:n}),bus:u},Hn(bt.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return i.reset(),an({type:Kn.SUITE},(function(){r.apply(void 0,n)})),u.emit(Ct.SUITE_COMPLETED),wn()})),{get:bt.bind(n,Sn),remove:bt.bind(n,(function(n){u.emit(Ct.REMOVE_FIELD,n)})),reset:i.reset,resetField:bt.bind(n,(function(n){u.emit(Ct.RESET_FIELD,n)}))})},n.each=function(n,e){t(e)||_("callback must be a function"),an({type:Kn.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.enforce=yt,n.group=function(n,e){o(n)||Un("name must be a string"),t(e)||Un("callback must be a function"),an({type:Kn.GROUP},(function(){bt.run({groupName:n},e)}))},n.include=function(n){function t(t){var e=bt.useX(),r=e.exclusion;e.inclusion[n]=function(){return Object.prototype.hasOwnProperty.call(r.tests,n)?X(r.tests[n],!0):o(t)?!!r.tests[t]:W(t,W(Sn))}}var e=bt.useX();return n?(e.inclusion[n]=X(e.exclusion.tests[n],!0),{when:t}):{when:t}},n.omitWhen=function(n,t){an({type:Kn.OMIT_WHEN},(function(){bt.run({omitted:!!bt.useX().omitted||W(n,W(Sn))},(function(){return t()}))}))},n.only=_n,n.optional=function(n){(0,$().optionalFields()[1])((function(t){if(p(n)||o(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var e in n)t[e]=n[e];return t}))},n.skip=An,n.skipWhen=function(n,t){an({type:Kn.SKIP_WHEN},(function(){bt.run({skipped:!!bt.useX().skipped||W(n,W(Sn))},(function(){return t()}))}))},n.test=Dt,n.warn=function(){var n=bt.useX("warn hook called outside of a running suite.");n.currentTest||_("warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
|
|
1
|
+
"use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n){return"function"==typeof n}function e(n){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function r(n){return null===n}function u(n){return void 0===n}function i(n){return null===n||u(n)}function o(n){return String(n)===n}function s(n,t){return o(n)&&o(t)&&n.endsWith(t)}function a(n,t){return n===t}function c(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function f(n,t){return c(n)&&c(t)&&Number(n)>Number(t)}function l(n,t){return c(n)&&c(t)&&Number(n)>=Number(t)}function p(n){return!!Array.isArray(n)}function d(n,t){return!!(p(t)||o(t)&&o(n))&&-1!==t.indexOf(n)}function v(n,t){return c(n)&&c(t)&&Number(n)<=Number(t)}function h(n,t,e){return l(n,t)&&v(n,e)}function g(n){return i(n)||o(n)&&!n.trim()}function N(n){return!!n===n}function m(n){return"number"==typeof n}function y(n,t){return n.length===Number(t)}function E(n){if(n){if(m(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return y(n,0);if("object"==typeof n)return y(Object.keys(n),0)}return!0}function b(n,t){return n in t}function S(n){return Number.isNaN(n)}function T(n){return!!c(n)&&0>Number(n)}function C(n){return!!n}function O(n,t){if(i(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function R(n,t){return c(n)&&c(t)&&Number(n)<Number(t)}function I(n,t){return n.length>Number(t)}function k(n,t){return t instanceof RegExp?t.test(n):!!o(t)&&new RegExp(t).test(n)}function A(n,t){return c(n)&&c(t)&&Number(n)===Number(t)}function _(n,t){return o(n)&&o(t)&&n.startsWith(t)}function F(n){for(var e in gt){var r=gt[e];t(r)&&n(e,r)}}function L(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return t(n)?n.apply(void 0,e):n}function w(n,t){var e;return null!==(e=L(n))&&void 0!==e?e:t}function P(n,t){throw Error(w(t,n))}function W(n,t){setTimeout((function(){P(n,t)}),0)}function x(n){function t(t,u){var i,o,s=e();return t=Vn({},s||{},null!==(i=L(n,t,s))&&void 0!==i?i:t),i=r.ctx=Object.freeze(t),r.ancestry.unshift(i),u=u(i),r.ancestry.shift(),r.ctx=null!==(o=r.ancestry[0])&&void 0!==o?o:null,u}function e(){return r.ctx}var r={ancestry:[]};return{bind:function(n,e){return function(){for(var r=[],u=0;u<arguments.length;u++)r[u]=arguments[u];return t(n,(function(){return e.apply(void 0,r)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=r.ctx)&&void 0!==t?t:P(w(n,"Context was used after it was closed"))}}}function G(){return null}function X(n,t,e){if(e||2===arguments.length)for(var r,u=0,i=t.length;u<i;u++)!r&&u in t||(r||(r=Array.prototype.slice.call(t,0,u)),r[u]=t[u]);return n.concat(r||Array.prototype.slice.call(t))}function U(){try{return t(Proxy)}catch(n){return!1}}function D(n,t){return n={pass:n},t&&(n.message=t),n}function q(n,t,e){for(var r=[],u=3;u<arguments.length;u++)r[u-3]=arguments[u];return N(n)||n&&N(n.pass)||P("Incorrect return value for rule: "+JSON.stringify(n)),N(n)?D(n):D(n.pass,L.apply(void 0,X([n.message,t,e],r,!1)))}function K(n){function t(t,e,r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];if(!(i=q.apply(void 0,X([Nt.run({value:n},(function(){return e.apply(void 0,X([n],u,!1))})),r,n],u,!1))).pass){if(!E(i.message))throw i.message;P("enforce/".concat(r," failed with ").concat(JSON.stringify(n)))}return t}}var e={};if(!U())return F((function(n,r){e[n]=t(e,r,n)})),e;var r=new Proxy(e,{get:function(n,e){if(n=gt[e])return t(r,n,e)}});return r}function j(n,t){function e(n){r=!0,u=n}for(var r=!1,u=null,i=0;i<n.length;i++)if(t(n[i],e,i),r)return u}function B(n){var t,e=[];return function n(r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];var o=gt[r];e.push((function(n){return q.apply(void 0,X([o.apply(void 0,X([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return w(j(e,(function(e,r){var u,i=Nt.run({value:n},(function(){return e(n)}));i.pass||r(D(!!i.pass,null!==(u=L(t,n,i.message))&&void 0!==u?u:i.message))})),D(!0))},test:function(n){return s.run(n).pass},message:function(n){return n&&(t=n),s}};return U()?s=new Proxy(s,{get:function(t,e){return gt[e]?n(e):t[e]}}):(F((function(t){s[t]=n(t)})),s)}}(n)}function H(n){function e(n,t,e){return u.references.push(),r(n,L(t,e)),function(){return[u.references[n],function(t){return r(n,L(t,u.references[n]))}]}}function r(e,r){var o=u.references[e];u.references[e]=r,t(e=i[e][1])&&e(r,o),t(n)&&n()}var u={references:[]},i=[];return{registerStateKey:function(n,t){var r=i.length;return i.push([n,t]),e(r,n)},reset:function(){var n=u.references;u.references=[],i.forEach((function(t,r){return e(r,t[0],n[r])}))}}}function M(n,t){var e=t.suiteId;return t=t.suiteName,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(e),suiteName:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}function V(n){return(n=[].concat(n))[n.length-1]}function J(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return V(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,V(t)},removeLevel:function(){t.pop()},reset:n}}function Y(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];p(u)?e.push(Y(u,t)):(u=t(u),Jn(u)&&e.push(u))}return e}function z(n){return[].concat(n).reduce((function(n,t){return p(t)?n.concat(z(t)):[].concat(n).concat(t)}),[])}function Q(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=w(n[r],[]),n=n[r]}return n}function Z(n){function t(n){return e.findIndex((function(t){var e=t[0];return y(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))}void 0===n&&(n=1);var e=[],r=function(t,u){var i=r.get(t);return i?i[1]:(u=u(),e.unshift([t.concat(),u]),I(e,n)&&(e.length=n),u)};return r.invalidate=function(n){-1<(n=t(n))&&e.splice(n,1)},r.get=function(n){return e[t(n)]||null},r}function $(){return St.useX().stateRef}function nn(){return $().testObjects()}function tn(){(0,nn()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function en(n){(0,nn()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function rn(){return z(Y(nn()[0].current,(function(n){return n.isPending()?n:null})))}function un(){var n=nn()[0].current;return Tt([n],(function(){return z(n)}))}function on(){return St.useX().testCursor.getCursor()}function sn(){return St.useX().testCursor.next()}function an(n,e){if(n=void 0===(n=n.type)?Bn.DEFAULT:n,t(e)){var r={current:{},prev:{}},u=on();return St.run({isolate:{type:n,keys:r}},(function(){St.useX().testCursor.addLevel(),r.prev=function(){var n=nn()[0].prev;return[].concat(Q(n,on())).reduce((function(n,t){return t instanceof Ot&&!i(t.key)?(n[t.key]=t,n):n}),{})}(),en((function(n){return Q(n,u)[V(u)]=[],n}));var n=e();return St.useX().testCursor.removeLevel(),sn(),n}))}}function cn(n,t){return!(!t||n.fieldName!==t)}function fn(n){var t=rn();return!E(t)&&(n?t.some((function(t){return cn(t,n)})):st(t))}function ln(n,t){function e(n){i[n===Ct.ERRORS?"errorCount":"warnCount"]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||{errorCount:0,warnCount:0,testCount:0};var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e(Ct.ERRORS):t.isWarning()&&e(Ct.WARNINGS)),i}function pn(n,t,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return t.reduce((function(t,e){if(u&&e.groupName!==u)var r=!0;else i&&!cn(e,i)?r=!0:(r=e.warns(),r=n===Ct.WARNINGS!=!!r);return r||!e.hasFailures()||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.message||[])),t}),mt({},i&&((r={})[i]=[],r)))}function dn(n){return hn(Ct.ERRORS,n)}function vn(n){return hn(Ct.WARNINGS,n)}function hn(n,t){return n=pn(n,un(),{fieldName:t}),t?n[t]:n}function gn(n,t){return n=mn(Ct.ERRORS,n,t),t?n[t]:n}function Nn(n,t){return n=mn(Ct.WARNINGS,n,t),t?n[t]:n}function mn(n,t,e){return t||P("get".concat(n[0].toUpperCase()).concat(n.slice(1),"ByGroup requires a group name. Received `").concat(t,"` instead.")),pn(n,un(),{group:t,fieldName:e})}function yn(n,t,e){return(e=!n.hasFailures()||e&&!cn(n,e))||(n=n.warns(),e=t===Ct.WARNINGS!=!!n),!e}function En(n){return Sn(Ct.ERRORS,n)}function bn(n){return Sn(Ct.WARNINGS,n)}function Sn(n,t){return un().some((function(e){return yn(e,n,t)}))}function Tn(n,t){return On(Ct.ERRORS,n,t)}function Cn(n,t){return On(Ct.WARNINGS,n,t)}function On(n,t,e){return un().some((function(r){return t===r.groupName&&yn(r,n,e)}))}function Rn(){var n=un(),t={stateRef:$()};return Wt([n],St.bind(t,(function(){var n=$().suiteName()[0];return Vn(function(){var n=un(),t=Vn({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{}});return n.forEach((function(n){var e=n.fieldName,r=n.groupName;t.tests[e]=ln(t.tests,n),r&&(t.groups[r]=t.groups[r]||{},t.groups[r][e]=ln(t.groups[r],n))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(t)}(),{getErrors:St.bind(t,dn),getErrorsByGroup:St.bind(t,gn),getWarnings:St.bind(t,vn),getWarningsByGroup:St.bind(t,Nn),hasErrors:St.bind(t,En),hasErrorsByGroup:St.bind(t,Tn),hasWarnings:St.bind(t,bn),hasWarningsByGroup:St.bind(t,Cn),isValid:St.bind(t,(function(n){var t=Rn(),e=un().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(e=!!n&&!!e[n])?n=!0:t.hasErrors(n)?n=!1:n=!(E(e=un())||n&&E(t.tests[n])||function(n){var t=$().optionalFields()[0];return st(rn().filter((function(e){return!(n&&!cn(e,n))&&!0!==t[e.fieldName]})))}(n))&&function(n){var t=un(),e=$().optionalFields()[0];return t.every((function(t){return!(!n||cn(t,n))||!0===e[t.fieldName]||t.isTested()||t.isOmitted()}))}(n),n})),suiteName:n})})))}function In(){var n=un(),t={stateRef:$()};return xt([n],St.bind(t,(function(){return Vn({},Rn(),{done:St.bind(t,Gt)})})))}function kn(n,e,r){return!(t(n)&&(!e||r.tests[e]&&!E(r.tests[e].testCount)))}function An(n){return!(fn()&&(!n||fn(n)))}function _n(n,t){var e=St.bind({},n);(0,$().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(e):n.doneCallbacks.push(e),n}))}function Fn(n){return n.forEach((function(n){return n()}))}function Ln(){var n=function(){var n={};return{emit:function(t,e){(n[t]||[]).forEach((function(n){n(e)}))},on:function(t,e){return n[t]=(n[t]||[]).concat(e),{off:function(){n[t]=n[t].filter((function(n){return n!==e}))}}}}}();return n.on(Pt.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var e=$().testCallbacks()[0].fieldCallbacks;t&&!fn(t)&&p(e[t])&&Fn(e[t]),fn()||n.emit(Pt.ALL_RUNNING_TESTS_FINISHED)}})),n.on(Pt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var n=$().optionalFields()[0];if(!E(n)){var e={};en((function(r){return Y(r,(function(r){var u=r.fieldName;if(e.hasOwnProperty(u))e[r.fieldName]&&r.omit();else{var i=n[u];t(i)&&(e[u]=i(),e[r.fieldName]&&r.omit())}return r}))}))}}()})),n.on(Pt.ALL_RUNNING_TESTS_FINISHED,(function(){Fn($().testCallbacks()[0].doneCallbacks)})),n.on(Pt.REMOVE_FIELD,(function(n){un().forEach((function(t){cn(t,n)&&(t.cancel(),function(n){en((function(t){return Y(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Pt.RESET_FIELD,(function(n){un().forEach((function(t){cn(t,n)&&t.reset()}))})),n}function wn(){var n=St.useX();return n.bus||P(),n.bus}function Pn(n){return xn(0,"tests",n)}function Wn(n){return xn(1,"tests",n)}function xn(n,t,e){var r=St.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){o(e)&&(r.exclusion[t][e]=0===n)}))}function Gn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Xn(n){P("Wrong arguments passed to group. Group ".concat(n,"."))}function Un(n){var e=n.asyncTest,r=n.message;if(e&&t(e.then)){var u=wn().emit,i=$(),s=St.bind({stateRef:i},(function(){tn(),u(Pt.TEST_COMPLETED,n)}));i=St.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=o(t)?t:r,n.fail(),s())}));try{e.then(s,i)}catch(n){i()}}}function Dn(n){var t=on();en((function(e){return Q(e,t)[V(t)]=n,e}))}function qn(n){var e=nn()[0].prev;if(E(e))Dn(n),e=n;else{var r=on();if(e=Q(e,r)[V(r)],i(n.key))!st(r=e)||r.fieldName===n.fieldName&&r.groupName===n.groupName||(St.useX().isolate.type!==Bn.EACH&&W("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(e.fieldName,"\n received: ").concat(n.fieldName,'\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.')),function(){var n=nn(),t=n[1],e=n[0].prev;n=Q(e,on());var r=St.useX().testCursor.cursorAt();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),e=null),Dn(e=w(e,n));else{e=n.key;var s=St.useX().isolate.keys.prev[e];r=n,s&&(r=s),s=r;var a=St.useX().isolate.keys.current;i(a[e])?a[e]=s:W('Encountered the same test key "'.concat(e,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Dn(e=r)}}if(r=Mn.EAGER,r=!(St.useX().mode[0]!==r||!En(n.fieldName)))return sn(),n.skip(),n;if(St.useX().omitted)return e.omit(),sn(),e;if(function(n){var t=n.fieldName;if(n=n.groupName,St.useX().skipped)return!0;var e=St.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){n:{var o=St.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(o,n))var s=!1===o[n];else{for(s in o)if(!0===o[s]){s=!0;break n}s=!1}}if(s)return!0;if(!0===r.groups[n])return!(i||!Gn(u)&&!1!==u[t])}r=St.useX().exclusion;n:{for(a in(s=St.useX().exclusion).groups)if(s.groups[a]){var a=!0;break n}a=!1}return!(!a||n&&n in r.groups&&r.groups[n])||!i&&!!Gn(u)&&!L(e[t])}(n))return e.skip(!!St.useX().skipped),sn(),e;if(n!==e&&e.fieldName===n.fieldName&&e.groupName===n.groupName&&e.isPending()&&e.cancel(),Dn(n),sn(),n.isUntested()){e=wn(),r=function(n){return St.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){t=e,u(n.message)&&o(t)&&(n.message=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{r&&t(r.then)?(n.asyncTest=r,n.setPending(),Un(n)):e.emit(Pt.TEST_COMPLETED,n)}catch(t){P("Unexpected error encountered during test registration.\n Test Object: ".concat(n,".\n Error: ").concat(t,"."))}}else(e=n.asyncTest)&&t(e.then)&&(n.setPending(),Un(n));return n}function Kn(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var u=t(e[1])?e:X([void 0],e,!0);e=u[0],r=u[1],u=u[2],lt(n)&&jn("fieldName","string"),t(r)||jn("Test callback","function");var i=St.useX();return qn(e=new Ot(n,r,{message:e,groupName:i.groupName,key:u}))}function jn(n,t){P("Incompatible params passed to test function. ".concat(n," must be a ").concat(t))}var Bn,Hn,Mn,Vn=Object.assign,Jn=e(r),Yn=e(u),zn=e(i),Qn=e(s),Zn=e(a),$n=e(c),nt=e(p),tt=e(d),et=e(h),rt=e(g),ut=e(N),it=e(m),ot=e(y),st=e(E),at=e(b),ct=e(S),ft=e(T),lt=e(o),pt=e(C),dt=e(O),vt=e(k),ht=e(A),gt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:Qn,doesNotStartWith:e(_),endsWith:s,equals:a,greaterThan:f,greaterThanOrEquals:l,gt:f,gte:l,inside:d,isArray:p,isBetween:h,isBlank:g,isBoolean:N,isEmpty:E,isEven:function(n){return!!c(n)&&0==n%2},isFalsy:pt,isKeyOf:b,isNaN:S,isNegative:T,isNotArray:nt,isNotBetween:et,isNotBlank:rt,isNotBoolean:ut,isNotEmpty:st,isNotKeyOf:at,isNotNaN:ct,isNotNull:Jn,isNotNullish:zn,isNotNumber:it,isNotNumeric:$n,isNotString:lt,isNotUndefined:Yn,isNotValueOf:dt,isNull:r,isNullish:i,isNumber:m,isNumeric:c,isOdd:function(n){return!!c(n)&&0!=n%2},isPositive:ft,isString:o,isTruthy:C,isUndefined:u,isValueOf:O,lengthEquals:y,lengthNotEquals:ot,lessThan:R,lessThanOrEquals:v,longerThan:I,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:R,lte:v,matches:k,notEquals:Zn,notInside:tt,notMatches:vt,numberEquals:A,numberNotEquals:ht,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:_},Nt=x((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?Vn(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:Vn(e,{parent:G})})),mt=function(){return(mt=Object.assign||function(n){for(var t,e=1,r=arguments.length;e<r;e++)for(var u in t=arguments[e])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)},yt=(Hn={context:function(){return Nt.useX()},extend:function(n){Vn(gt,n)}},U()?new Proxy(Vn(K,Hn),{get:function(n,t){return t in n?n[t]:gt[t]?B(t):void 0}}):(F((function(n){Hn[n]=B(n)})),Vn(K,Hn))),Et=function(n){return function(){return"".concat(n++)}}(0);!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.OMIT_WHEN=4]="OMIT_WHEN",n[n.GROUP=5]="GROUP"}(Bn||(Bn={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(Mn||(Mn={}));var bt,St=x((function(n,t){return t?null:Vn({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:Bn.DEFAULT,keys:{current:{},prev:{}}},mode:[Mn.ALL],testCursor:J()},n)})),Tt=Z();!function(n){n.Error="error",n.Warning="warning"}(bt||(bt={}));var Ct,Ot=function(){function n(n,t,e){var r=void 0===e?{}:e;e=r.message;var u=r.groupName;r=r.key,this.key=null,this.id=Et(),this.severity=bt.Error,this.status=Rt,this.fieldName=n,this.testFn=t,u&&(this.groupName=u),e&&(this.message=e),r&&(this.key=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,u(this.message)&&o(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==wt||(this.status=n)},n.prototype.warns=function(){return this.severity===bt.Warning},n.prototype.setPending=function(){this.setStatus(Ft)},n.prototype.fail=function(){this.setStatus(this.warns()?At:kt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(_t)},n.prototype.warn=function(){this.severity=bt.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(It)},n.prototype.cancel=function(){this.setStatus(Lt),tn()},n.prototype.reset=function(){this.status=Rt,tn()},n.prototype.omit=function(){this.setStatus(wt)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},n.prototype.isPending=function(){return this.statusEquals(Ft)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(wt)},n.prototype.isUntested=function(){return this.statusEquals(Rt)},n.prototype.isFailing=function(){return this.statusEquals(kt)},n.prototype.isCanceled=function(){return this.statusEquals(Lt)},n.prototype.isSkipped=function(){return this.statusEquals(It)},n.prototype.isPassing=function(){return this.statusEquals(_t)},n.prototype.isWarning=function(){return this.statusEquals(At)},n.prototype.statusEquals=function(n){return this.status===n},n}(),Rt="UNTESTED",It="SKIPPED",kt="FAILED",At="WARNING",_t="PASSING",Ft="PENDING",Lt="CANCELED",wt="OMITTED";!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(Ct||(Ct={}));var Pt,Wt=Z(20),xt=Z(20),Gt=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=(n=n.reverse())[0];if(n=n[1],t=In(),kn(e,n,t))return t;var r=function(){return e(Rn())};return An(n)?(r(),t):(_n(r,n),t)};!function(n){n.TEST_COMPLETED="test_completed",n.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",n.REMOVE_FIELD="remove_field",n.RESET_FIELD="reset_field",n.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running"}(Pt||(Pt={})),Pn.group=function(n){return xn(0,"groups",n)},Wn.group=function(n){return xn(1,"groups",n)};var Xt=Vn(Kn,{memo:function(n){var t=Z(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=St.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[$().suiteId()[0],e,u].concat(i),null===(r=t.get(u))?t(u,(function(){return n(e,s,o)})):r[1].isCanceled()?(t.invalidate(u),t(u,(function(){return n(e,s,o)}))):qn(r[1])}}(Kn)});n.VERSION="4.2.0",n.context=St,n.create=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];n=n[1],t(r)||P("vest.create: Expected callback to be a function.");var u=Ln(),i=H();return n={stateRef:M(i,{suiteId:Et(),suiteName:n}),bus:u},Vn(St.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return i.reset(),an({type:Bn.SUITE},(function(){r.apply(void 0,n)})),u.emit(Pt.SUITE_CALLBACK_DONE_RUNNING),In()})),{get:St.bind(n,Rn),remove:St.bind(n,(function(n){u.emit(Pt.REMOVE_FIELD,n)})),reset:i.reset,resetField:St.bind(n,(function(n){u.emit(Pt.RESET_FIELD,n)}))})},n.each=function(n,e){t(e)||P("each callback must be a function"),an({type:Bn.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.eager=function(){var n=Mn.EAGER;St.useX().mode[0]=n},n.enforce=yt,n.group=function(n,e){o(n)||Xn("name must be a string"),t(e)||Xn("callback must be a function"),an({type:Bn.GROUP},(function(){St.run({groupName:n},e)}))},n.include=function(n){function t(t){var e=St.useX(),r=e.exclusion;e.inclusion[n]=function(){return Object.prototype.hasOwnProperty.call(r.tests,n)?w(r.tests[n],!0):o(t)?!!r.tests[t]:L(t,L(Rn))}}var e=St.useX();return n?(e.inclusion[n]=w(e.exclusion.tests[n],!0),{when:t}):{when:t}},n.omitWhen=function(n,t){an({type:Bn.OMIT_WHEN},(function(){St.run({omitted:!!St.useX().omitted||L(n,L(Rn))},(function(){return t()}))}))},n.only=Pn,n.optional=function(n){(0,$().optionalFields()[1])((function(t){if(p(n)||o(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var e in n)t[e]=n[e];return t}))},n.skip=Wn,n.skipWhen=function(n,t){an({type:Bn.SKIP_WHEN},(function(){St.run({skipped:!!St.useX().skipped||L(n,L(Rn))},(function(){return t()}))}))},n.test=Xt,n.warn=function(){var n=St.useX("warn hook called outside of a running suite.");n.currentTest||P("warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
|
package/package.json
CHANGED
package/types/vest.d.ts
CHANGED
|
@@ -149,6 +149,10 @@ type IsolateKeys = {
|
|
|
149
149
|
current: Record<string, VestTest>;
|
|
150
150
|
prev: Record<string, VestTest>;
|
|
151
151
|
};
|
|
152
|
+
declare enum Modes {
|
|
153
|
+
ALL = 0,
|
|
154
|
+
EAGER = 1
|
|
155
|
+
}
|
|
152
156
|
type NestedArray<T> = Array<NestedArray<T> | T>;
|
|
153
157
|
// eslint-disable-next-line max-lines-per-function
|
|
154
158
|
declare function createState(onStateChange?: (...args: unknown[]) => unknown): TCreateStateReturn;
|
|
@@ -202,6 +206,9 @@ type CTXType = {
|
|
|
202
206
|
groupName?: string;
|
|
203
207
|
skipped?: boolean;
|
|
204
208
|
omitted?: boolean;
|
|
209
|
+
mode: [
|
|
210
|
+
Modes
|
|
211
|
+
];
|
|
205
212
|
bus?: {
|
|
206
213
|
on: (event: string, handler: (...args: any[]) => void) => {
|
|
207
214
|
off: () => void;
|
|
@@ -260,6 +267,26 @@ declare function group(groupName: string, tests: () => void): void;
|
|
|
260
267
|
declare function include(fieldName: string): {
|
|
261
268
|
when: (condition: string | boolean | ((draft: TDraftResult) => boolean)) => void;
|
|
262
269
|
};
|
|
270
|
+
/**
|
|
271
|
+
* Sets the suite to "eager" (fail fast) mode.
|
|
272
|
+
* Eager mode will skip running subsequent tests of a failing fields.
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* // in the following example, the second test of username will not run
|
|
276
|
+
* // if the first test of username failed.
|
|
277
|
+
* const suite = create((data) => {
|
|
278
|
+
* eager();
|
|
279
|
+
*
|
|
280
|
+
* test('username', 'username is required', () => {
|
|
281
|
+
* enforce(data.username).isNotBlank();
|
|
282
|
+
* });
|
|
283
|
+
*
|
|
284
|
+
* test('username', 'username is too short', () => {
|
|
285
|
+
* enforce(data.username).longerThan(2);
|
|
286
|
+
* });
|
|
287
|
+
* });
|
|
288
|
+
*/
|
|
289
|
+
declare function eager(): void;
|
|
263
290
|
/**
|
|
264
291
|
* Conditionally omits tests from the suite.
|
|
265
292
|
*
|
|
@@ -317,5 +344,5 @@ declare const test: typeof testBase & {
|
|
|
317
344
|
* Sets a running test to warn only mode.
|
|
318
345
|
*/
|
|
319
346
|
declare function warn(): void;
|
|
320
|
-
declare const VERSION = "4.
|
|
321
|
-
export { test, create, each, only, skip, warn, group, optional, skipWhen, omitWhen, enforce, VERSION, context, include };
|
|
347
|
+
declare const VERSION = "4.2.0";
|
|
348
|
+
export { test, create, each, only, skip, warn, group, optional, skipWhen, omitWhen, enforce, VERSION, context, include, eager };
|