vest 4.1.0 → 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.
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "main": "../dist/cjs/classnames.js",
3
3
  "module": "../dist/es/classnames.production.js",
4
+ "unpkg": "../dist/umd/classnames.production.js",
5
+ "jsdelivr": "../dist/umd/classnames.production.js",
4
6
  "name": "classnames",
5
7
  "types": "../types/classnames.d.ts",
6
8
  "private": true
@@ -11,7 +11,7 @@ var assign = Object.assign;
11
11
  * @returns a unique numeric id.
12
12
  */
13
13
  var genId = (function (n) { return function () {
14
- return "" + n++;
14
+ return "".concat(n++);
15
15
  }; })(0);
16
16
 
17
17
  function isFunction(value) {
@@ -179,6 +179,12 @@ function createCursor() {
179
179
  };
180
180
  }
181
181
 
182
+ var Modes;
183
+ (function (Modes) {
184
+ Modes[Modes["ALL"] = 0] = "ALL";
185
+ Modes[Modes["EAGER"] = 1] = "EAGER";
186
+ })(Modes || (Modes = {}));
187
+
182
188
  var context = context$1.createContext(function (ctxRef, parentContext) {
183
189
  return parentContext
184
190
  ? null
@@ -195,6 +201,7 @@ var context = context$1.createContext(function (ctxRef, parentContext) {
195
201
  prev: {}
196
202
  }
197
203
  },
204
+ mode: [Modes.ALL],
198
205
  testCursor: createCursor()
199
206
  }, ctxRef);
200
207
  });
@@ -221,9 +228,9 @@ function isNull(value) {
221
228
  }
222
229
  var isNotNull = bindNot(isNull);
223
230
 
224
- // This is sort of a map/filter in one function.
225
- // Normally, behaves like a nested-array map
226
- // Returning `null` will drop the element from the array
231
+ // This is kind of a map/filter in one function.
232
+ // Normally, behaves like a nested-array map,
233
+ // but returning `null` will drop the element from the array
227
234
  function transform(array, cb) {
228
235
  var res = [];
229
236
  for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
@@ -310,23 +317,22 @@ function createCache(maxSize) {
310
317
  };
311
318
  // invalidate an item in the cache by its dependencies
312
319
  cache.invalidate = function (deps) {
313
- var index = cacheStorage.findIndex(function (_a) {
314
- var cachedDeps = _a[0];
315
- return lengthEquals(deps, cachedDeps.length) &&
316
- deps.every(function (dep, i) { return dep === cachedDeps[i]; });
317
- });
320
+ var index = findIndex(deps);
318
321
  if (index > -1)
319
322
  cacheStorage.splice(index, 1);
320
323
  };
321
324
  // Retrieves an item from the cache.
322
325
  cache.get = function (deps) {
323
- return cacheStorage[cacheStorage.findIndex(function (_a) {
326
+ return cacheStorage[findIndex(deps)] || null;
327
+ };
328
+ return cache;
329
+ function findIndex(deps) {
330
+ return cacheStorage.findIndex(function (_a) {
324
331
  var cachedDeps = _a[0];
325
332
  return lengthEquals(deps, cachedDeps.length) &&
326
333
  deps.every(function (dep, i) { return dep === cachedDeps[i]; });
327
- })] || null;
328
- };
329
- return cache;
334
+ });
335
+ }
330
336
  }
331
337
 
332
338
  // STATE REF
@@ -504,31 +510,34 @@ var VestTest = /** @class */ (function () {
504
510
  return this.isSkipped() || this.isOmitted() || this.isCanceled();
505
511
  };
506
512
  VestTest.prototype.isPending = function () {
507
- return this.status === STATUS_PENDING;
513
+ return this.statusEquals(STATUS_PENDING);
508
514
  };
509
515
  VestTest.prototype.isTested = function () {
510
516
  return this.hasFailures() || this.isPassing();
511
517
  };
512
518
  VestTest.prototype.isOmitted = function () {
513
- return this.status === STATUS_OMITTED;
519
+ return this.statusEquals(STATUS_OMITTED);
514
520
  };
515
521
  VestTest.prototype.isUntested = function () {
516
- return this.status === STATUS_UNTESTED;
522
+ return this.statusEquals(STATUS_UNTESTED);
517
523
  };
518
524
  VestTest.prototype.isFailing = function () {
519
- return this.status === STATUS_FAILED;
525
+ return this.statusEquals(STATUS_FAILED);
520
526
  };
521
527
  VestTest.prototype.isCanceled = function () {
522
- return this.status === STATUS_CANCELED;
528
+ return this.statusEquals(STATUS_CANCELED);
523
529
  };
524
530
  VestTest.prototype.isSkipped = function () {
525
- return this.status === STATUS_SKIPPED;
531
+ return this.statusEquals(STATUS_SKIPPED);
526
532
  };
527
533
  VestTest.prototype.isPassing = function () {
528
- return this.status === STATUS_PASSING;
534
+ return this.statusEquals(STATUS_PASSING);
529
535
  };
530
536
  VestTest.prototype.isWarning = function () {
531
- return this.status === STATUS_WARNING;
537
+ return this.statusEquals(STATUS_WARNING);
538
+ };
539
+ VestTest.prototype.statusEquals = function (status) {
540
+ return this.status === status;
532
541
  };
533
542
  return VestTest;
534
543
  }());
@@ -586,7 +595,7 @@ function useRetainTestKey(key, testObject) {
586
595
  current[key] = testObject;
587
596
  }
588
597
  else {
589
- throwErrorDeferred("Encountered the same test key \"" + key + "\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.");
598
+ throwErrorDeferred("Encountered the same test key \"".concat(key, "\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted."));
590
599
  }
591
600
  }
592
601
 
@@ -665,18 +674,21 @@ function hasRemainingTests(fieldName) {
665
674
  return isNotEmpty(allIncomplete);
666
675
  }
667
676
 
677
+ var Severity;
678
+ (function (Severity) {
679
+ Severity["WARNINGS"] = "warnings";
680
+ Severity["ERRORS"] = "errors";
681
+ })(Severity || (Severity = {}));
682
+
668
683
  /**
669
684
  * Reads the testObjects list and gets full validation result from it.
670
685
  */
671
686
  function genTestsSummary() {
672
687
  var testObjects = useTestsFlat();
673
- var summary = {
674
- errorCount: 0,
688
+ var summary = assign(baseStats(), {
675
689
  groups: {},
676
- testCount: 0,
677
- tests: {},
678
- warnCount: 0
679
- };
690
+ tests: {}
691
+ });
680
692
  appendSummary(testObjects);
681
693
  return countFailures(summary);
682
694
  function appendSummary(testObjects) {
@@ -704,30 +716,34 @@ function countFailures(summary) {
704
716
  // eslint-disable-next-line max-statements
705
717
  function genTestObject(summaryKey, testObject) {
706
718
  var fieldName = testObject.fieldName, message = testObject.message;
707
- summaryKey[fieldName] = summaryKey[fieldName] || {
708
- errorCount: 0,
709
- warnCount: 0,
710
- testCount: 0
711
- };
719
+ summaryKey[fieldName] = summaryKey[fieldName] || baseStats();
712
720
  var testKey = summaryKey[fieldName];
713
721
  if (testObject.isNonActionable())
714
722
  return testKey;
715
723
  summaryKey[fieldName].testCount++;
716
724
  // Adds to severity group
717
- function addTo(countKey, group) {
725
+ function addTo(severity) {
726
+ var countKey = severity === Severity.ERRORS ? 'errorCount' : 'warnCount';
718
727
  testKey[countKey]++;
719
728
  if (message) {
720
- testKey[group] = (testKey[group] || []).concat(message);
729
+ testKey[severity] = (testKey[severity] || []).concat(message);
721
730
  }
722
731
  }
723
732
  if (testObject.isFailing()) {
724
- addTo('errorCount', 'errors');
733
+ addTo(Severity.ERRORS);
725
734
  }
726
735
  else if (testObject.isWarning()) {
727
- addTo('warnCount', 'warnings');
736
+ addTo(Severity.WARNINGS);
728
737
  }
729
738
  return testKey;
730
739
  }
740
+ function baseStats() {
741
+ return {
742
+ errorCount: 0,
743
+ warnCount: 0,
744
+ testCount: 0
745
+ };
746
+ }
731
747
 
732
748
  /*! *****************************************************************************
733
749
  Copyright (c) Microsoft Corporation.
@@ -773,7 +789,7 @@ function either(a, b) {
773
789
  * Checks that a given test object matches the currently specified severity level
774
790
  */
775
791
  function nonMatchingSeverityProfile(severity, testObject) {
776
- return either(severity === 'warnings', testObject.warns());
792
+ return either(severity === Severity.WARNINGS, testObject.warns());
777
793
  }
778
794
 
779
795
  function collectFailureMessages(severity, testObjects, options) {
@@ -815,10 +831,10 @@ function getFailuresArrayOrObject(group, fieldName) {
815
831
  }
816
832
 
817
833
  function getErrors(fieldName) {
818
- return getFailures('errors', fieldName);
834
+ return getFailures(Severity.ERRORS, fieldName);
819
835
  }
820
836
  function getWarnings(fieldName) {
821
- return getFailures('warnings', fieldName);
837
+ return getFailures(Severity.WARNINGS, fieldName);
822
838
  }
823
839
  /**
824
840
  * @returns suite or field's errors or warnings.
@@ -832,11 +848,11 @@ function getFailures(severityKey, fieldName) {
832
848
  }
833
849
 
834
850
  function getErrorsByGroup(groupName, fieldName) {
835
- var errors = getByGroup('errors', groupName, fieldName);
851
+ var errors = getByGroup(Severity.ERRORS, groupName, fieldName);
836
852
  return getFailuresArrayOrObject(errors, fieldName);
837
853
  }
838
854
  function getWarningsByGroup(groupName, fieldName) {
839
- var warnings = getByGroup('warnings', groupName, fieldName);
855
+ var warnings = getByGroup(Severity.WARNINGS, groupName, fieldName);
840
856
  return getFailuresArrayOrObject(warnings, fieldName);
841
857
  }
842
858
  /**
@@ -844,7 +860,7 @@ function getWarningsByGroup(groupName, fieldName) {
844
860
  */
845
861
  function getByGroup(severityKey, group, fieldName) {
846
862
  if (!group) {
847
- throwError("get" + severityKey[0].toUpperCase() + severityKey.slice(1) + "ByGroup requires a group name. Received `" + group + "` instead.");
863
+ throwError("get".concat(severityKey[0].toUpperCase()).concat(severityKey.slice(1), "ByGroup requires a group name. Received `").concat(group, "` instead."));
848
864
  }
849
865
  var testObjects = useTestsFlat();
850
866
  return collectFailureMessages(severityKey, testObjects, {
@@ -870,10 +886,10 @@ function hasFailuresLogic(testObject, severityKey, fieldName) {
870
886
  }
871
887
 
872
888
  function hasErrors(fieldName) {
873
- return has('errors', fieldName);
889
+ return has(Severity.ERRORS, fieldName);
874
890
  }
875
891
  function hasWarnings(fieldName) {
876
- return has('warnings', fieldName);
892
+ return has(Severity.WARNINGS, fieldName);
877
893
  }
878
894
  function has(severityKey, fieldName) {
879
895
  var testObjects = useTestsFlat();
@@ -883,10 +899,10 @@ function has(severityKey, fieldName) {
883
899
  }
884
900
 
885
901
  function hasErrorsByGroup(groupName, fieldName) {
886
- return hasByGroup('errors', groupName, fieldName);
902
+ return hasByGroup(Severity.ERRORS, groupName, fieldName);
887
903
  }
888
904
  function hasWarningsByGroup(groupName, fieldName) {
889
- return hasByGroup('warnings', groupName, fieldName);
905
+ return hasByGroup(Severity.WARNINGS, groupName, fieldName);
890
906
  }
891
907
  /**
892
908
  * Checks whether there are failures in a given group.
@@ -1039,18 +1055,12 @@ function createBus() {
1039
1055
  var listeners = {};
1040
1056
  return {
1041
1057
  emit: function (event, data) {
1042
- if (!listeners[event]) {
1043
- return;
1044
- }
1045
- listeners[event].forEach(function (listener) {
1046
- listener(data);
1058
+ (listeners[event] || []).forEach(function (handler) {
1059
+ handler(data);
1047
1060
  });
1048
1061
  },
1049
1062
  on: function (event, handler) {
1050
- if (!listeners[event]) {
1051
- listeners[event] = [];
1052
- }
1053
- listeners[event].push(handler);
1063
+ listeners[event] = (listeners[event] || []).concat(handler);
1054
1064
  return {
1055
1065
  off: function () {
1056
1066
  listeners[event] = listeners[event].filter(function (h) { return h !== handler; });
@@ -1118,9 +1128,7 @@ function runFieldCallbacks(fieldName) {
1118
1128
  */
1119
1129
  function runDoneCallbacks() {
1120
1130
  var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
1121
- if (!hasRemainingTests()) {
1122
- callEach(doneCallbacks);
1123
- }
1131
+ callEach(doneCallbacks);
1124
1132
  }
1125
1133
 
1126
1134
  // eslint-disable-next-line max-lines-per-function
@@ -1134,14 +1142,21 @@ function initBus() {
1134
1142
  }
1135
1143
  testObject.done();
1136
1144
  runFieldCallbacks(testObject.fieldName);
1137
- runDoneCallbacks();
1145
+ if (!hasRemainingTests()) {
1146
+ // When no more tests are running, emit the done event
1147
+ bus.emit(Events.ALL_RUNNING_TESTS_FINISHED);
1148
+ }
1138
1149
  });
1139
1150
  // Report that the suite completed its synchronous test run.
1140
1151
  // Async operations may still be running.
1141
- bus.on(Events.SUITE_COMPLETED, function () {
1152
+ bus.on(Events.SUITE_CALLBACK_DONE_RUNNING, function () {
1142
1153
  // Remove tests that are optional and need to be omitted
1143
1154
  omitOptionalTests();
1144
1155
  });
1156
+ // Called when all the tests, including async, are done running
1157
+ bus.on(Events.ALL_RUNNING_TESTS_FINISHED, function () {
1158
+ runDoneCallbacks();
1159
+ });
1145
1160
  // Removes a certain field from the state.
1146
1161
  bus.on(Events.REMOVE_FIELD, function (fieldName) {
1147
1162
  useEachTestObject(function (testObject) {
@@ -1171,9 +1186,10 @@ function useBus() {
1171
1186
  var Events;
1172
1187
  (function (Events) {
1173
1188
  Events["TEST_COMPLETED"] = "test_completed";
1189
+ Events["ALL_RUNNING_TESTS_FINISHED"] = "all_running_tests_finished";
1174
1190
  Events["REMOVE_FIELD"] = "remove_field";
1175
1191
  Events["RESET_FIELD"] = "reset_field";
1176
- Events["SUITE_COMPLETED"] = "suite_completed";
1192
+ Events["SUITE_CALLBACK_DONE_RUNNING"] = "suite_callback_done_running";
1177
1193
  })(Events || (Events = {}));
1178
1194
 
1179
1195
  // eslint-disable-next-line max-lines-per-function
@@ -1210,7 +1226,7 @@ function create() {
1210
1226
  });
1211
1227
  // Report the suite is done registering tests
1212
1228
  // Async tests may still be running
1213
- bus.emit(Events.SUITE_COMPLETED);
1229
+ bus.emit(Events.SUITE_CALLBACK_DONE_RUNNING);
1214
1230
  // Return the result
1215
1231
  return produceFullResult();
1216
1232
  }), {
@@ -1241,7 +1257,7 @@ function create() {
1241
1257
  */
1242
1258
  function each(list, callback) {
1243
1259
  if (!isFunction(callback)) {
1244
- throwError('callback must be a function');
1260
+ throwError('each callback must be a function');
1245
1261
  }
1246
1262
  isolate({ type: IsolateTypes.EACH }, function () {
1247
1263
  list.forEach(function (arg, index) {
@@ -1255,6 +1271,31 @@ function each(list, callback) {
1255
1271
  */
1256
1272
  var ERROR_HOOK_CALLED_OUTSIDE = 'hook called outside of a running suite.';
1257
1273
 
1274
+ /**
1275
+ * Conditionally skips running tests within the callback.
1276
+ *
1277
+ * @example
1278
+ *
1279
+ * skipWhen(res => res.hasErrors('username'), () => {
1280
+ * test('username', 'User already taken', async () => await doesUserExist(username)
1281
+ * });
1282
+ */
1283
+ function skipWhen(conditional, callback) {
1284
+ isolate({ type: IsolateTypes.SKIP_WHEN }, function () {
1285
+ context.run({
1286
+ skipped:
1287
+ // Checking for nested conditional. If we're in a nested skipWhen,
1288
+ // we should skip the test if the parent conditional is true.
1289
+ isExcludedIndividually() ||
1290
+ // Otherwise, we should skip the test if the conditional is true.
1291
+ optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
1292
+ }, function () { return callback(); });
1293
+ });
1294
+ }
1295
+ function isExcludedIndividually() {
1296
+ return !!context.useX().skipped;
1297
+ }
1298
+
1258
1299
  /**
1259
1300
  * Adds a field or a list of fields into the inclusion list
1260
1301
  *
@@ -1281,9 +1322,6 @@ function skip(item) {
1281
1322
  skip.group = function (item) {
1282
1323
  return addTo(1 /* SKIP */, 'groups', item);
1283
1324
  };
1284
- function isExcludedIndividually() {
1285
- return !!context.useX().skipped;
1286
- }
1287
1325
  //Checks whether a certain test profile excluded by any of the exclusion groups.
1288
1326
  // eslint-disable-next-line complexity, max-statements, max-lines-per-function
1289
1327
  function isExcluded(testObject) {
@@ -1429,7 +1467,7 @@ function group(groupName, tests) {
1429
1467
  });
1430
1468
  }
1431
1469
  function throwGroupError(error) {
1432
- throwError("Wrong arguments passed to group. Group " + error + ".");
1470
+ throwError("Wrong arguments passed to group. Group ".concat(error, "."));
1433
1471
  }
1434
1472
 
1435
1473
  function include(fieldName) {
@@ -1455,6 +1493,45 @@ function include(fieldName) {
1455
1493
  }
1456
1494
  }
1457
1495
 
1496
+ /**
1497
+ * Sets the suite to "eager" (fail fast) mode.
1498
+ * Eager mode will skip running subsequent tests of a failing fields.
1499
+ *
1500
+ * @example
1501
+ * // in the following example, the second test of username will not run
1502
+ * // if the first test of username failed.
1503
+ * const suite = create((data) => {
1504
+ * eager();
1505
+ *
1506
+ * test('username', 'username is required', () => {
1507
+ * enforce(data.username).isNotBlank();
1508
+ * });
1509
+ *
1510
+ * test('username', 'username is too short', () => {
1511
+ * enforce(data.username).longerThan(2);
1512
+ * });
1513
+ * });
1514
+ */
1515
+ function eager() {
1516
+ setMode(Modes.EAGER);
1517
+ }
1518
+ function shouldSkipBasedOnMode(testObject) {
1519
+ if (isEager() && hasErrors(testObject.fieldName))
1520
+ return true;
1521
+ return false;
1522
+ }
1523
+ function isEager() {
1524
+ return isMode(Modes.EAGER);
1525
+ }
1526
+ function isMode(mode) {
1527
+ var currentMode = context.useX().mode;
1528
+ return currentMode[0] === mode;
1529
+ }
1530
+ function setMode(nextMode) {
1531
+ var mode = context.useX().mode;
1532
+ mode[0] = nextMode;
1533
+ }
1534
+
1458
1535
  /**
1459
1536
  * Conditionally omits tests from the suite.
1460
1537
  *
@@ -1467,7 +1544,8 @@ function include(fieldName) {
1467
1544
  function omitWhen(conditional, callback) {
1468
1545
  isolate({ type: IsolateTypes.OMIT_WHEN }, function () {
1469
1546
  context.run({
1470
- omitted: optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
1547
+ omitted: isOmitted() ||
1548
+ optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
1471
1549
  }, function () { return callback(); });
1472
1550
  });
1473
1551
  }
@@ -1505,23 +1583,6 @@ function optional(optionals) {
1505
1583
  });
1506
1584
  }
1507
1585
 
1508
- /**
1509
- * Conditionally skips running tests within the callback.
1510
- *
1511
- * @example
1512
- *
1513
- * skipWhen(res => res.hasErrors('username'), () => {
1514
- * test('username', 'User already taken', async () => await doesUserExist(username)
1515
- * });
1516
- */
1517
- function skipWhen(conditional, callback) {
1518
- isolate({ type: IsolateTypes.SKIP_WHEN }, function () {
1519
- context.run({
1520
- skipped: optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
1521
- }, function () { return callback(); });
1522
- });
1523
- }
1524
-
1525
1586
  var isNotString = bindNot(isStringValue);
1526
1587
 
1527
1588
  function isPromise(value) {
@@ -1617,7 +1678,7 @@ function registerTest(testObject) {
1617
1678
  }
1618
1679
  }
1619
1680
  catch (e) {
1620
- throwError("Your test function " + testObject.fieldName + " returned a value. Only \"false\" or Promise returns are supported.");
1681
+ throwError("Unexpected error encountered during test registration.\n Test Object: ".concat(testObject, ".\n Error: ").concat(e, "."));
1621
1682
  }
1622
1683
  }
1623
1684
 
@@ -1688,7 +1749,7 @@ function throwTestOrderError(prevTest, newTestObject) {
1688
1749
  if (shouldAllowReorder()) {
1689
1750
  return;
1690
1751
  }
1691
- throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.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.");
1752
+ throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(prevTest.fieldName, "\n received: ").concat(newTestObject.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."));
1692
1753
  }
1693
1754
  function handleKeyTest(key, newTestObject) {
1694
1755
  var prevTestByKey = usePrevTestByKey(key);
@@ -1703,6 +1764,11 @@ function handleKeyTest(key, newTestObject) {
1703
1764
  // eslint-disable-next-line max-statements
1704
1765
  function registerPrevRunTest(testObject) {
1705
1766
  var prevRunTest = useTestAtCursor(testObject);
1767
+ if (shouldSkipBasedOnMode(testObject)) {
1768
+ moveForward();
1769
+ testObject.skip();
1770
+ return testObject;
1771
+ }
1706
1772
  if (isOmitted()) {
1707
1773
  prevRunTest.omit();
1708
1774
  moveForward();
@@ -1767,7 +1833,7 @@ function testBase(fieldName) {
1767
1833
  for (var _i = 1; _i < arguments.length; _i++) {
1768
1834
  args[_i - 1] = arguments[_i];
1769
1835
  }
1770
- var _a = (isFunction(args[1]) ? args : __spreadArray([undefined], args)), message = _a[0], testFn = _a[1], key = _a[2];
1836
+ var _a = (isFunction(args[1]) ? args : __spreadArray([undefined], args, true)), message = _a[0], testFn = _a[1], key = _a[2];
1771
1837
  if (isNotString(fieldName)) {
1772
1838
  throwIncompatibleParamsError('fieldName', 'string');
1773
1839
  }
@@ -1795,7 +1861,7 @@ var test = assign(testBase, {
1795
1861
  memo: bindTestMemo(testBase)
1796
1862
  });
1797
1863
  function throwIncompatibleParamsError(name, expected) {
1798
- throwError("Incompatible params passed to test function. " + name + " must be a " + expected);
1864
+ throwError("Incompatible params passed to test function. ".concat(name, " must be a ").concat(expected));
1799
1865
  }
1800
1866
 
1801
1867
  var ERROR_OUTSIDE_OF_TEST = "warn hook called outside of a test callback. It won't have an effect."
@@ -1811,7 +1877,7 @@ function warn() {
1811
1877
  ctx.currentTest.warn();
1812
1878
  }
1813
1879
 
1814
- var VERSION = "4.0.3";
1880
+ var VERSION = "4.2.0";
1815
1881
 
1816
1882
  Object.defineProperty(exports, 'enforce', {
1817
1883
  enumerable: true,
@@ -1823,6 +1889,7 @@ exports.VERSION = VERSION;
1823
1889
  exports.context = context;
1824
1890
  exports.create = create;
1825
1891
  exports.each = each;
1892
+ exports.eager = eager;
1826
1893
  exports.group = group;
1827
1894
  exports.include = include;
1828
1895
  exports.omitWhen = omitWhen;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n,t,e=require("n4s"),r=require("context"),u=Object.assign,i=(n=0,function(){return""+n++});function o(n){return"function"==typeof n}function s(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return o(n)?n.apply(void 0,t):n}function c(n,t){var e;return null!==(e=s(n))&&void 0!==e?e:t}function a(n,t){throw Error(c(t,n))}function f(n,t){setTimeout((function(){a(n,t)}),0)}function l(n){function t(n,t,u){return r.references.push(),e(n,s(t,u)),function(){return[r.references[n],function(t){return e(n,s(t,r.references[n]))}]}}function e(t,e){var i=r.references[t];r.references[t]=e,o(t=u[t][1])&&t(e,i),o(n)&&n()}var r={references:[]},u=[];return{registerStateKey:function(n,e){var r=u.length;return u.push([n,e]),t(r,n)},reset:function(){var n=r.references;r.references=[],u.forEach((function(e,r){return t(r,e[0],n[r])}))}}}function p(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[].concat(n)}function d(n){return(n=v(n))[n.length-1]}function g(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return d(t)},getCursor:function(){return v(t)},next:function(){return t[t.length-1]++,d(t)},removeLevel:function(){t.pop()},reset:n}}!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"}(t||(t={}));var h=r.createContext((function(n,e){return e?null:u({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:t.DEFAULT,keys:{current:{},prev:{}}},testCursor:g()},n)}));function m(n){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function y(n){return!!Array.isArray(n)}function E(n){return null===n}var b=m(E);function N(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];y(u)?e.push(N(u,t)):(u=t(u),b(u)&&e.push(u))}return e}function C(n,t,e){return S(n,t)[d(t)]=e,n}function T(n){return v(n).reduce((function(n,t){return y(t)?n.concat(T(t)):v(n).concat(t)}),[])}function S(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=c(n[r],[]),n=n[r]}return n}function k(n){return void 0===n}function O(n){return E(n)||k(n)}function x(n){return String(n)===n}function I(n,t){return k(n)&&x(t)}function P(n,t){return n.length===Number(t)}function w(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]),function(n,t){return n.length>Number(t)}(t,n)&&(t.length=n),u)};return e.invalidate=function(n){var e=t.findIndex((function(t){var e=t[0];return P(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 P(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))]||null},e}function F(){return h.useX().stateRef}function _(){return F().suiteId()[0]}function D(){return F().testCallbacks()}function L(){return F().optionalFields()}function W(){return F().testObjects()}function X(){(0,W()[1])((function(n){return{prev:n.prev,current:v(n.current)}}))}function A(n){(0,W()[1])((function(t){return{prev:t.prev,current:v(n(t.current))}}))}function R(){return T(N(W()[0].current,(function(n){return n.isPending()?n:null})))}var U,M=w();function G(){var n=W()[0].current;return M([n],(function(){return T(n)}))}function j(n){G().forEach(n)}!function(n){n.Error="error",n.Warning="warning"}(U||(U={}));var H=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=i(),this.severity=U.Error,this.status=K,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){I(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Q||(this.status=n)},n.prototype.warns=function(){return this.severity===U.Warning},n.prototype.setPending=function(){this.setStatus(z)},n.prototype.fail=function(){this.setStatus(this.warns()?q:B)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Y)},n.prototype.warn=function(){this.severity=U.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(V)},n.prototype.cancel=function(){this.setStatus(J),X()},n.prototype.reset=function(){this.status=K,X()},n.prototype.omit=function(){this.setStatus(Q)},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.status===z},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===Q},n.prototype.isUntested=function(){return this.status===K},n.prototype.isFailing=function(){return this.status===B},n.prototype.isCanceled=function(){return this.status===J},n.prototype.isSkipped=function(){return this.status===V},n.prototype.isPassing=function(){return this.status===Y},n.prototype.isWarning=function(){return this.status===q},n}(),K="UNTESTED",V="SKIPPED",B="FAILED",q="WARNING",Y="PASSING",z="PENDING",J="CANCELED",Q="OMITTED";function Z(){return h.useX().testCursor.getCursor()}function $(){return h.useX().testCursor.cursorAt()}function nn(){return h.useX().testCursor.next()}function tn(n,e){if(n=void 0===(n=n.type)?t.DEFAULT:n,o(e)){var r={current:{},prev:{}},u=Z();return h.run({isolate:{type:n,keys:r}},(function(){h.useX().testCursor.addLevel(),r.prev=v(S(W()[0].prev,Z())).reduce((function(n,t){return t instanceof H&&!O(t.key)?(n[t.key]=t,n):n}),{}),A((function(n){return C(n,u,[])}));var n=e();return h.useX().testCursor.removeLevel(),nn(),n}))}}function en(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function rn(n){if(n){if(function(n){return"number"==typeof n}(n))return 0===n;if(en(n,"length"))return P(n,0);if("object"==typeof n)return P(Object.keys(n),0)}return!0}var un=m(rn);function on(n,t){return!!t&&!sn(n,t)}function sn(n,t){return!(!t||n.fieldName!==t)}function cn(n){var t=R();return!rn(t)&&(n?t.some((function(t){return sn(t,n)})):un(t))}function an(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}var fn=function(){return(fn=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)};function ln(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 pn(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns())}function vn(n,t,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return t.reduce((function(t,e){return function(n,t,e,r){return!!(function(n,t){return!(!t||n.groupName===t)}(n,e)||on(n,r)||pn(t,n))}(e,n,u,i)||!e.hasFailures()||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.message||[])),t}),fn({},i&&((r={})[i]=[],r)))}function dn(n,t){return t?n[t]:n}function gn(n){return mn("errors",n)}function hn(n){return mn("warnings",n)}function mn(n,t){return dn(n=vn(n,G(),{fieldName:t}),t)}function yn(n,t){return dn(n=bn("errors",n,t),t)}function En(n,t){return dn(n=bn("warnings",n,t),t)}function bn(n,t,e){return t||a("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),vn(n,G(),{group:t,fieldName:e})}function Nn(n,t,e){return!(!n.hasFailures()||on(n,e)||pn(t,n))}function Cn(n){return Sn("errors",n)}function Tn(n){return Sn("warnings",n)}function Sn(n,t){return G().some((function(e){return Nn(e,n,t)}))}function kn(n,t){return xn("errors",n,t)}function On(n,t){return xn("warnings",n,t)}function xn(n,t,e){return G().some((function(r){return t===r.groupName&&Nn(r,n,e)}))}function In(n,t){return!!function(n){var t=G().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return!!n&&!!t[n]}(t)||!n.hasErrors(t)&&(!(rn(G())||function(n,t){return!!t&&rn(n.tests[t])}(n,t)||function(n){var t=L()[0];return un(R().filter((function(e){return!on(e,n)&&!0!==t[e.fieldName]})))}(t))&&function(n){var t=G(),e=L()[0];return t.every((function(t){return!!on(t,n)||(!0===e[t.fieldName]||t.isTested()||t.isOmitted())}))}(t))}var Pn=w(20);function wn(){var n=G(),t={stateRef:F()};return Pn([n],h.bind(t,(function(){var n=F().suiteName()[0];return u(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return G().forEach((function(t){var e=t.fieldName,r=t.groupName;n.tests[e]=an(n.tests,t),r&&(n.groups[r]=n.groups[r]||{},n.groups[r][e]=an(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:h.bind(t,gn),getErrorsByGroup:h.bind(t,yn),getWarnings:h.bind(t,hn),getWarningsByGroup:h.bind(t,En),hasErrors:h.bind(t,Cn),hasErrorsByGroup:h.bind(t,kn),hasWarnings:h.bind(t,Tn),hasWarningsByGroup:h.bind(t,On),isValid:h.bind(t,(function(n){return In(wn(),n)})),suiteName:n})})))}var Fn=w(20);function _n(){var n=G(),t={stateRef:F()};return Fn([n],h.bind(t,(function(){return u({},wn(),{done:h.bind(t,Xn)})})))}function Dn(n,t,e){return!(o(n)&&(!t||e.tests[t]&&!rn(e.tests[t].testCount)))}function Ln(n){return!(cn()&&(!n||cn(n)))}var Wn,Xn=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=_n(),Dn(e,n,t))return t;var r=function(){return e(wn())};return Ln(n)?(r(),t):(An(r,n),t)};function An(n,t){var e=h.bind({},n);(0,D()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(e):n.doneCallbacks.push(e),n}))}function Rn(n){return n.forEach((function(n){return n()}))}function Un(){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(Wn.TEST_COMPLETED,(function(n){n.isCanceled()||(n.done(),function(n){var t=D()[0].fieldCallbacks;n&&!cn(n)&&y(t[n])&&Rn(t[n])}(n.fieldName),function(){var n=D()[0].doneCallbacks;cn()||Rn(n)}())})),n.on(Wn.SUITE_COMPLETED,(function(){!function(){var n=L()[0];if(!rn(n)){var t={};A((function(e){return N(e,(function(e){var r=e.fieldName;if(t.hasOwnProperty(r))t[e.fieldName]&&e.omit();else{var u=n[r];o(u)&&(t[r]=u(),t[e.fieldName]&&e.omit())}return e}))}))}}()})),n.on(Wn.REMOVE_FIELD,(function(n){j((function(t){sn(t,n)&&(t.cancel(),function(n){A((function(t){return N(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Wn.RESET_FIELD,(function(n){j((function(t){sn(t,n)&&t.reset()}))})),n}function Mn(){var n=h.useX();return n.bus||a(),n.bus}!function(n){n.TEST_COMPLETED="test_completed",n.REMOVE_FIELD="remove_field",n.RESET_FIELD="reset_field",n.SUITE_COMPLETED="suite_completed"}(Wn||(Wn={}));function Gn(n){return Vn(0,"tests",n)}function jn(n){return Vn(1,"tests",n)}function Hn(){return!!h.useX().skipped}function Kn(n){var t=n.fieldName;if(n=n.groupName,Hn())return!0;var e=h.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){if(function(n){var t=h.useX().exclusion.groups;if(en(t,n))return!1===t[n];for(var e in t)if(!0===t[e])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!i&&(!!Bn(u)||!1===u[t])}return!!function(n){var t=h.useX().exclusion;return!!function(){var n,t=h.useX().exclusion;for(n in t.groups)if(t.groups[n])return!0;return!1}()&&(!n||(!(n in t.groups)||!t.groups[n]))}(n)||!i&&(!!Bn(u)&&!s(e[t]))}function Vn(n,t,e){var r=h.useX("hook called outside of a running suite.");e&&v(e).forEach((function(e){x(e)&&(r.exclusion[t][e]=0===n)}))}function Bn(n){for(var t in n)if(!0===n[t])return!0;return!1}function qn(n){a("Wrong arguments passed to group. Group "+n+".")}Gn.group=function(n){return Vn(0,"groups",n)},jn.group=function(n){return Vn(1,"groups",n)};var Yn=m(x);function zn(n){return n&&o(n.then)}function Jn(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}function Qn(n){var t=n.asyncTest,e=n.message;if(zn(t)){var r=Mn().emit,u=F(),i=h.bind({stateRef:u},(function(){X(),r(Wn.TEST_COMPLETED,n)}));u=h.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=x(t)?t:e,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function Zn(n){var t=Mn(),e=function(n){return h.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){I(n.message,e)&&(n.message=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{zn(e)?(n.asyncTest=e,n.setPending(),Qn(n)):t.emit(Wn.TEST_COMPLETED,n)}catch(t){a("Your test function "+n.fieldName+' returned a value. Only "false" or Promise returns are supported.')}}function $n(n){var e=W()[0].prev;return rn(e)?(nt(n),n):(e=function(n){var t=Z();return function(n,t){return S(n,t)[d(t)]}(n,t)}(e),O(n.key)?(function(n,t){return un(n)&&!Jn(n,t)}(e,n)&&(function(n,e){h.useX().isolate.type===t.EACH||f("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+e.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.')}(e,n),function(){var n=W(),t=n[1],e=n[0].prev;n=S(e,Z());var r=$();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),e=null),nt(n=c(e,n)),n):(nt(n=function(n,t){var e=function(n){return h.useX().isolate.keys.prev[n]}(n);return e&&(t=e),function(n,t){var e=h.useX().isolate.keys.current;O(e[n])?e[n]=t:f('Encountered the same test key "'+n+"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")}(n,t),t}(n.key,n)),n))}function nt(n){var t=Z();A((function(e){return C(e,t,n)}))}function tt(n){var t=$n(n);return h.useX().omitted?(t.omit(),nn(),t):Kn(n)?(t.skip(Hn()),nn(),t):(function(n,t){t!==n&&Jn(n,t)&&n.isPending()&&n.cancel()}(t,n),nt(n),nn(),function(n){n.isUntested()?Zn(n):zn(n.asyncTest)&&(n.setPending(),Qn(n))}(n),n)}function et(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];var r=o(t[1])?t:ln([void 0],t);t=r[0],e=r[1],r=r[2],Yn(n)&&ut("fieldName","string"),o(e)||ut("Test callback","function");var u=h.useX();return tt(t=new H(n,e,{message:t,groupName:u.groupName,key:r}))}var rt=u(et,{memo:function(n){var t=w(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=$();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[_(),e,u].concat(i),E(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)}))):tt(r[1])}}(et)});function ut(n,t){a("Incompatible params passed to test function. "+n+" must be a "+t)}Object.defineProperty(exports,"enforce",{enumerable:!0,get:function(){return e.enforce}}),exports.VERSION="4.0.3",exports.context=h,exports.create=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];n=n[1],o(r)||a("vest.create: Expected callback to be a function.");var s=Un(),c=l();return n={stateRef:p(c,{suiteId:i(),suiteName:n}),bus:s},u(h.bind(n,(function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return c.reset(),tn({type:t.SUITE},(function(){r.apply(void 0,n)})),s.emit(Wn.SUITE_COMPLETED),_n()})),{get:h.bind(n,wn),remove:h.bind(n,(function(n){s.emit(Wn.REMOVE_FIELD,n)})),reset:c.reset,resetField:h.bind(n,(function(n){s.emit(Wn.RESET_FIELD,n)}))})},exports.each=function(n,e){o(e)||a("callback must be a function"),tn({type:t.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},exports.group=function(n,e){x(n)||qn("name must be a string"),o(e)||qn("callback must be a function"),tn({type:t.GROUP},(function(){h.run({groupName:n},e)}))},exports.include=function(n){function t(t){var e=h.useX(),r=e.exclusion;e.inclusion[n]=function(){return en(r.tests,n)?c(r.tests[n],!0):x(t)?!!r.tests[t]:s(t,s(wn))}}var e=h.useX();return n?(e.inclusion[n]=c(e.exclusion.tests[n],!0),{when:t}):{when:t}},exports.omitWhen=function(n,e){tn({type:t.OMIT_WHEN},(function(){h.run({omitted:s(n,s(wn))},(function(){return e()}))}))},exports.only=Gn,exports.optional=function(n){(0,L()[1])((function(t){if(y(n)||x(n))v(n).forEach((function(n){t[n]=!0}));else for(var e in n)t[e]=n[e];return t}))},exports.skip=jn,exports.skipWhen=function(n,e){tn({type:t.SKIP_WHEN},(function(){h.run({skipped:s(n,s(wn))},(function(){return e()}))}))},exports.test=rt,exports.warn=function(){var n=h.useX("warn hook called outside of a running suite.");n.currentTest||a("warn called outside of a test."),n.currentTest.warn()};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n,t,e,r=require("n4s"),u=require("context"),i=Object.assign,o=(n=0,function(){return"".concat(n++)});function s(n){return"function"==typeof n}function c(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return s(n)?n.apply(void 0,t):n}function a(n,t){var e;return null!==(e=c(n))&&void 0!==e?e:t}function f(n,t){throw Error(a(t,n))}function l(n,t){setTimeout((function(){f(n,t)}),0)}function p(n){function t(n,t,u){return r.references.push(),e(n,c(t,u)),function(){return[r.references[n],function(t){return e(n,c(t,r.references[n]))}]}}function e(t,e){var i=r.references[t];r.references[t]=e,s(t=u[t][1])&&t(e,i),s(n)&&n()}var r={references:[]},u=[];return{registerStateKey:function(n,e){var r=u.length;return u.push([n,e]),t(r,n)},reset:function(){var n=r.references;r.references=[],u.forEach((function(e,r){return t(r,e[0],n[r])}))}}}function d(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[].concat(n)}function g(n){return(n=v(n))[n.length-1]}function h(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return g(t)},getCursor:function(){return v(t)},next:function(){return t[t.length-1]++,g(t)},removeLevel:function(){t.pop()},reset:n}}!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"}(t||(t={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(e||(e={}));var E=u.createContext((function(n,r){return r?null:i({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:t.DEFAULT,keys:{current:{},prev:{}}},mode:[e.ALL],testCursor:h()},n)}));function m(n){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function y(n){return!!Array.isArray(n)}function N(n){return null===n}var S=m(N);function b(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];y(u)?e.push(b(u,t)):(u=t(u),S(u)&&e.push(u))}return e}function C(n,t,e){return T(n,t)[g(t)]=e,n}function R(n){return v(n).reduce((function(n,t){return y(t)?n.concat(R(t)):v(n).concat(t)}),[])}function T(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=a(n[r],[]),n=n[r]}return n}function I(n){return void 0===n}function _(n){return N(n)||I(n)}function A(n){return String(n)===n}function O(n,t){return I(n)&&A(t)}function k(n,t){return n.length===Number(t)}function L(n){function t(n){return e.findIndex((function(t){var e=t[0];return k(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]),function(n,t){return n.length>Number(t)}(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 x(){return E.useX().stateRef}function F(){return x().suiteId()[0]}function G(){return x().testCallbacks()}function P(){return x().optionalFields()}function W(){return x().testObjects()}function D(){(0,W()[1])((function(n){return{prev:n.prev,current:v(n.current)}}))}function U(n){(0,W()[1])((function(t){return{prev:t.prev,current:v(n(t.current))}}))}function w(){return R(b(W()[0].current,(function(n){return n.isPending()?n:null})))}var X,H=L();function K(){var n=W()[0].current;return H([n],(function(){return R(n)}))}function q(n){K().forEach(n)}!function(n){n.Error="error",n.Warning="warning"}(X||(X={}));var M=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=o(),this.severity=X.Error,this.status=j,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){O(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Z||(this.status=n)},n.prototype.warns=function(){return this.severity===X.Warning},n.prototype.setPending=function(){this.setStatus(J)},n.prototype.fail=function(){this.setStatus(this.warns()?Y:V)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(z)},n.prototype.warn=function(){this.severity=X.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(B)},n.prototype.cancel=function(){this.setStatus(Q),D()},n.prototype.reset=function(){this.status=j,D()},n.prototype.omit=function(){this.setStatus(Z)},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(J)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(Z)},n.prototype.isUntested=function(){return this.statusEquals(j)},n.prototype.isFailing=function(){return this.statusEquals(V)},n.prototype.isCanceled=function(){return this.statusEquals(Q)},n.prototype.isSkipped=function(){return this.statusEquals(B)},n.prototype.isPassing=function(){return this.statusEquals(z)},n.prototype.isWarning=function(){return this.statusEquals(Y)},n.prototype.statusEquals=function(n){return this.status===n},n}(),j="UNTESTED",B="SKIPPED",V="FAILED",Y="WARNING",z="PASSING",J="PENDING",Q="CANCELED",Z="OMITTED";function $(){return E.useX().testCursor.getCursor()}function nn(){return E.useX().testCursor.cursorAt()}function tn(){return E.useX().testCursor.next()}function en(n,e){if(n=void 0===(n=n.type)?t.DEFAULT:n,s(e)){var r={current:{},prev:{}},u=$();return E.run({isolate:{type:n,keys:r}},(function(){E.useX().testCursor.addLevel(),r.prev=v(T(W()[0].prev,$())).reduce((function(n,t){return t instanceof M&&!_(t.key)?(n[t.key]=t,n):n}),{}),U((function(n){return C(n,u,[])}));var n=e();return E.useX().testCursor.removeLevel(),tn(),n}))}}function rn(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function un(n){if(n){if(function(n){return"number"==typeof n}(n))return 0===n;if(rn(n,"length"))return k(n,0);if("object"==typeof n)return k(Object.keys(n),0)}return!0}var on,sn=m(un);function cn(n,t){return!!t&&!an(n,t)}function an(n,t){return!(!t||n.fieldName!==t)}function fn(n){var t=w();return!un(t)&&(n?t.some((function(t){return an(t,n)})):sn(t))}function ln(n,t){function e(n){i[n===on.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(on.ERRORS):t.isWarning()&&e(on.WARNINGS)),i}!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(on||(on={}));var pn=function(){return(pn=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)};function dn(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 vn(n,t){return function(n,t){return!!n!=!!t}(n===on.WARNINGS,t.warns())}function gn(n,t,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return t.reduce((function(t,e){return function(n,t,e,r){return!!(function(n,t){return!(!t||n.groupName===t)}(n,e)||cn(n,r)||vn(t,n))}(e,n,u,i)||!e.hasFailures()||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.message||[])),t}),pn({},i&&((r={})[i]=[],r)))}function hn(n,t){return t?n[t]:n}function En(n){return yn(on.ERRORS,n)}function mn(n){return yn(on.WARNINGS,n)}function yn(n,t){return hn(n=gn(n,K(),{fieldName:t}),t)}function Nn(n,t){return hn(n=bn(on.ERRORS,n,t),t)}function Sn(n,t){return hn(n=bn(on.WARNINGS,n,t),t)}function bn(n,t,e){return t||f("get".concat(n[0].toUpperCase()).concat(n.slice(1),"ByGroup requires a group name. Received `").concat(t,"` instead.")),gn(n,K(),{group:t,fieldName:e})}function Cn(n,t,e){return!(!n.hasFailures()||cn(n,e)||vn(t,n))}function Rn(n){return In(on.ERRORS,n)}function Tn(n){return In(on.WARNINGS,n)}function In(n,t){return K().some((function(e){return Cn(e,n,t)}))}function _n(n,t){return On(on.ERRORS,n,t)}function An(n,t){return On(on.WARNINGS,n,t)}function On(n,t,e){return K().some((function(r){return t===r.groupName&&Cn(r,n,e)}))}function kn(n,t){return!!function(n){var t=K().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return!!n&&!!t[n]}(t)||!n.hasErrors(t)&&(!(un(K())||function(n,t){return!!t&&un(n.tests[t])}(n,t)||function(n){var t=P()[0];return sn(w().filter((function(e){return!cn(e,n)&&!0!==t[e.fieldName]})))}(t))&&function(n){var t=K(),e=P()[0];return t.every((function(t){return!!cn(t,n)||(!0===e[t.fieldName]||t.isTested()||t.isOmitted())}))}(t))}var Ln=L(20);function xn(){var n=K(),t={stateRef:x()};return Ln([n],E.bind(t,(function(){var n=x().suiteName()[0];return i(function(){var n=K(),t=i({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:E.bind(t,En),getErrorsByGroup:E.bind(t,Nn),getWarnings:E.bind(t,mn),getWarningsByGroup:E.bind(t,Sn),hasErrors:E.bind(t,Rn),hasErrorsByGroup:E.bind(t,_n),hasWarnings:E.bind(t,Tn),hasWarningsByGroup:E.bind(t,An),isValid:E.bind(t,(function(n){return kn(xn(),n)})),suiteName:n})})))}var Fn=L(20);function Gn(){var n=K(),t={stateRef:x()};return Fn([n],E.bind(t,(function(){return i({},xn(),{done:E.bind(t,Un)})})))}function Pn(n,t,e){return!(s(n)&&(!t||e.tests[t]&&!un(e.tests[t].testCount)))}function Wn(n){return!(fn()&&(!n||fn(n)))}var Dn,Un=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=Gn(),Pn(e,n,t))return t;var r=function(){return e(xn())};return Wn(n)?(r(),t):(wn(r,n),t)};function wn(n,t){var e=E.bind({},n);(0,G()[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 Hn(){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(Dn.TEST_COMPLETED,(function(t){t.isCanceled()||(t.done(),function(n){var t=G()[0].fieldCallbacks;n&&!fn(n)&&y(t[n])&&Xn(t[n])}(t.fieldName),fn()||n.emit(Dn.ALL_RUNNING_TESTS_FINISHED))})),n.on(Dn.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var n=P()[0];if(!un(n)){var t={};U((function(e){return b(e,(function(e){var r=e.fieldName;if(t.hasOwnProperty(r))t[e.fieldName]&&e.omit();else{var u=n[r];s(u)&&(t[r]=u(),t[e.fieldName]&&e.omit())}return e}))}))}}()})),n.on(Dn.ALL_RUNNING_TESTS_FINISHED,(function(){Xn(G()[0].doneCallbacks)})),n.on(Dn.REMOVE_FIELD,(function(n){q((function(t){an(t,n)&&(t.cancel(),function(n){U((function(t){return b(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Dn.RESET_FIELD,(function(n){q((function(t){an(t,n)&&t.reset()}))})),n}function Kn(){var n=E.useX();return n.bus||f(),n.bus}!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"}(Dn||(Dn={}));function qn(){return!!E.useX().skipped}function Mn(n){return Vn(0,"tests",n)}function jn(n){return Vn(1,"tests",n)}function Bn(n){var t=n.fieldName;if(n=n.groupName,qn())return!0;var e=E.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){if(function(n){var t=E.useX().exclusion.groups;if(rn(t,n))return!1===t[n];for(var e in t)if(!0===t[e])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!i&&(!!Yn(u)||!1===u[t])}return!!function(n){var t=E.useX().exclusion;return!!function(){var n,t=E.useX().exclusion;for(n in t.groups)if(t.groups[n])return!0;return!1}()&&(!n||(!(n in t.groups)||!t.groups[n]))}(n)||!i&&(!!Yn(u)&&!c(e[t]))}function Vn(n,t,e){var r=E.useX("hook called outside of a running suite.");e&&v(e).forEach((function(e){A(e)&&(r.exclusion[t][e]=0===n)}))}function Yn(n){for(var t in n)if(!0===n[t])return!0;return!1}function zn(n){f("Wrong arguments passed to group. Group ".concat(n,"."))}function Jn(n){return!(!function(n){return E.useX().mode[0]===n}(e.EAGER)||!Rn(n.fieldName))}function Qn(){return!!E.useX().omitted}Mn.group=function(n){return Vn(0,"groups",n)},jn.group=function(n){return Vn(1,"groups",n)};var Zn=m(A);function $n(n){return n&&s(n.then)}function nt(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}function tt(n){var t=n.asyncTest,e=n.message;if($n(t)){var r=Kn().emit,u=x(),i=E.bind({stateRef:u},(function(){D(),r(Dn.TEST_COMPLETED,n)}));u=E.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=A(t)?t:e,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function et(n){var t=Kn(),e=function(n){return E.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){O(n.message,e)&&(n.message=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{$n(e)?(n.asyncTest=e,n.setPending(),tt(n)):t.emit(Dn.TEST_COMPLETED,n)}catch(t){f("Unexpected error encountered during test registration.\n Test Object: ".concat(n,".\n Error: ").concat(t,"."))}}function rt(n){var e=W()[0].prev;return un(e)?(ut(n),n):(e=function(n){var t=$();return function(n,t){return T(n,t)[g(t)]}(n,t)}(e),_(n.key)?(function(n,t){return sn(n)&&!nt(n,t)}(e,n)&&(function(n,e){E.useX().isolate.type===t.EACH||l("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(e.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.'))}(e,n),function(){var n=W(),t=n[1],e=n[0].prev;n=T(e,$());var r=nn();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),e=null),ut(n=a(e,n)),n):(ut(n=function(n,t){var e=function(n){return E.useX().isolate.keys.prev[n]}(n);return e&&(t=e),function(n,t){var e=E.useX().isolate.keys.current;_(e[n])?e[n]=t:l('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted."))}(n,t),t}(n.key,n)),n))}function ut(n){var t=$();U((function(e){return C(e,t,n)}))}function it(n){var t=rt(n);return Jn(n)?(tn(),n.skip(),n):Qn()?(t.omit(),tn(),t):Bn(n)?(t.skip(qn()),tn(),t):(function(n,t){t!==n&&nt(n,t)&&n.isPending()&&n.cancel()}(t,n),ut(n),tn(),function(n){n.isUntested()?et(n):$n(n.asyncTest)&&(n.setPending(),tt(n))}(n),n)}function ot(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];var r=s(t[1])?t:dn([void 0],t,!0);t=r[0],e=r[1],r=r[2],Zn(n)&&ct("fieldName","string"),s(e)||ct("Test callback","function");var u=E.useX();return it(t=new M(n,e,{message:t,groupName:u.groupName,key:r}))}var st=i(ot,{memo:function(n){var t=L(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=nn();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[F(),e,u].concat(i),N(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)}))):it(r[1])}}(ot)});function ct(n,t){f("Incompatible params passed to test function. ".concat(n," must be a ").concat(t))}Object.defineProperty(exports,"enforce",{enumerable:!0,get:function(){return r.enforce}}),exports.VERSION="4.2.0",exports.context=E,exports.create=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];n=n[1],s(r)||f("vest.create: Expected callback to be a function.");var u=Hn(),c=p();return n={stateRef:d(c,{suiteId:o(),suiteName:n}),bus:u},i(E.bind(n,(function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return c.reset(),en({type:t.SUITE},(function(){r.apply(void 0,n)})),u.emit(Dn.SUITE_CALLBACK_DONE_RUNNING),Gn()})),{get:E.bind(n,xn),remove:E.bind(n,(function(n){u.emit(Dn.REMOVE_FIELD,n)})),reset:c.reset,resetField:E.bind(n,(function(n){u.emit(Dn.RESET_FIELD,n)}))})},exports.each=function(n,e){s(e)||f("each callback must be a function"),en({type:t.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},exports.eager=function(){!function(n){E.useX().mode[0]=n}(e.EAGER)},exports.group=function(n,e){A(n)||zn("name must be a string"),s(e)||zn("callback must be a function"),en({type:t.GROUP},(function(){E.run({groupName:n},e)}))},exports.include=function(n){function t(t){var e=E.useX(),r=e.exclusion;e.inclusion[n]=function(){return rn(r.tests,n)?a(r.tests[n],!0):A(t)?!!r.tests[t]:c(t,c(xn))}}var e=E.useX();return n?(e.inclusion[n]=a(e.exclusion.tests[n],!0),{when:t}):{when:t}},exports.omitWhen=function(n,e){en({type:t.OMIT_WHEN},(function(){E.run({omitted:Qn()||c(n,c(xn))},(function(){return e()}))}))},exports.only=Mn,exports.optional=function(n){(0,P()[1])((function(t){if(y(n)||A(n))v(n).forEach((function(n){t[n]=!0}));else for(var e in n)t[e]=n[e];return t}))},exports.skip=jn,exports.skipWhen=function(n,e){en({type:t.SKIP_WHEN},(function(){E.run({skipped:qn()||c(n,c(xn))},(function(){return e()}))}))},exports.test=st,exports.warn=function(){var n=E.useX("warn hook called outside of a running suite.");n.currentTest||f("warn called outside of a test."),n.currentTest.warn()};