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.
@@ -175,6 +175,12 @@ function createCursor() {
175
175
  };
176
176
  }
177
177
 
178
+ var Modes;
179
+ (function (Modes) {
180
+ Modes[Modes["ALL"] = 0] = "ALL";
181
+ Modes[Modes["EAGER"] = 1] = "EAGER";
182
+ })(Modes || (Modes = {}));
183
+
178
184
  var context = createContext(function (ctxRef, parentContext) {
179
185
  return parentContext
180
186
  ? null
@@ -191,6 +197,7 @@ var context = createContext(function (ctxRef, parentContext) {
191
197
  prev: {}
192
198
  }
193
199
  },
200
+ mode: [Modes.ALL],
194
201
  testCursor: createCursor()
195
202
  }, ctxRef);
196
203
  });
@@ -217,9 +224,9 @@ function isNull(value) {
217
224
  }
218
225
  var isNotNull = bindNot(isNull);
219
226
 
220
- // This is sort of a map/filter in one function.
221
- // Normally, behaves like a nested-array map
222
- // Returning `null` will drop the element from the array
227
+ // This is kind of a map/filter in one function.
228
+ // Normally, behaves like a nested-array map,
229
+ // but returning `null` will drop the element from the array
223
230
  function transform(array, cb) {
224
231
  var res = [];
225
232
  for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
@@ -306,23 +313,22 @@ function createCache(maxSize) {
306
313
  };
307
314
  // invalidate an item in the cache by its dependencies
308
315
  cache.invalidate = function (deps) {
309
- var index = cacheStorage.findIndex(function (_a) {
310
- var cachedDeps = _a[0];
311
- return lengthEquals(deps, cachedDeps.length) &&
312
- deps.every(function (dep, i) { return dep === cachedDeps[i]; });
313
- });
316
+ var index = findIndex(deps);
314
317
  if (index > -1)
315
318
  cacheStorage.splice(index, 1);
316
319
  };
317
320
  // Retrieves an item from the cache.
318
321
  cache.get = function (deps) {
319
- return cacheStorage[cacheStorage.findIndex(function (_a) {
322
+ return cacheStorage[findIndex(deps)] || null;
323
+ };
324
+ return cache;
325
+ function findIndex(deps) {
326
+ return cacheStorage.findIndex(function (_a) {
320
327
  var cachedDeps = _a[0];
321
328
  return lengthEquals(deps, cachedDeps.length) &&
322
329
  deps.every(function (dep, i) { return dep === cachedDeps[i]; });
323
- })] || null;
324
- };
325
- return cache;
330
+ });
331
+ }
326
332
  }
327
333
 
328
334
  // STATE REF
@@ -664,18 +670,21 @@ function hasRemainingTests(fieldName) {
664
670
  return isNotEmpty(allIncomplete);
665
671
  }
666
672
 
673
+ var Severity;
674
+ (function (Severity) {
675
+ Severity["WARNINGS"] = "warnings";
676
+ Severity["ERRORS"] = "errors";
677
+ })(Severity || (Severity = {}));
678
+
667
679
  /**
668
680
  * Reads the testObjects list and gets full validation result from it.
669
681
  */
670
682
  function genTestsSummary() {
671
683
  var testObjects = useTestsFlat();
672
- var summary = {
673
- errorCount: 0,
684
+ var summary = assign(baseStats(), {
674
685
  groups: {},
675
- testCount: 0,
676
- tests: {},
677
- warnCount: 0
678
- };
686
+ tests: {}
687
+ });
679
688
  appendSummary(testObjects);
680
689
  return countFailures(summary);
681
690
  function appendSummary(testObjects) {
@@ -703,30 +712,34 @@ function countFailures(summary) {
703
712
  // eslint-disable-next-line max-statements
704
713
  function genTestObject(summaryKey, testObject) {
705
714
  var fieldName = testObject.fieldName, message = testObject.message;
706
- summaryKey[fieldName] = summaryKey[fieldName] || {
707
- errorCount: 0,
708
- warnCount: 0,
709
- testCount: 0
710
- };
715
+ summaryKey[fieldName] = summaryKey[fieldName] || baseStats();
711
716
  var testKey = summaryKey[fieldName];
712
717
  if (testObject.isNonActionable())
713
718
  return testKey;
714
719
  summaryKey[fieldName].testCount++;
715
720
  // Adds to severity group
716
- function addTo(countKey, group) {
721
+ function addTo(severity) {
722
+ var countKey = severity === Severity.ERRORS ? 'errorCount' : 'warnCount';
717
723
  testKey[countKey]++;
718
724
  if (message) {
719
- testKey[group] = (testKey[group] || []).concat(message);
725
+ testKey[severity] = (testKey[severity] || []).concat(message);
720
726
  }
721
727
  }
722
728
  if (testObject.isFailing()) {
723
- addTo('errorCount', 'errors');
729
+ addTo(Severity.ERRORS);
724
730
  }
725
731
  else if (testObject.isWarning()) {
726
- addTo('warnCount', 'warnings');
732
+ addTo(Severity.WARNINGS);
727
733
  }
728
734
  return testKey;
729
735
  }
736
+ function baseStats() {
737
+ return {
738
+ errorCount: 0,
739
+ warnCount: 0,
740
+ testCount: 0
741
+ };
742
+ }
730
743
 
731
744
  /*! *****************************************************************************
732
745
  Copyright (c) Microsoft Corporation.
@@ -772,7 +785,7 @@ function either(a, b) {
772
785
  * Checks that a given test object matches the currently specified severity level
773
786
  */
774
787
  function nonMatchingSeverityProfile(severity, testObject) {
775
- return either(severity === 'warnings', testObject.warns());
788
+ return either(severity === Severity.WARNINGS, testObject.warns());
776
789
  }
777
790
 
778
791
  function collectFailureMessages(severity, testObjects, options) {
@@ -814,10 +827,10 @@ function getFailuresArrayOrObject(group, fieldName) {
814
827
  }
815
828
 
816
829
  function getErrors(fieldName) {
817
- return getFailures('errors', fieldName);
830
+ return getFailures(Severity.ERRORS, fieldName);
818
831
  }
819
832
  function getWarnings(fieldName) {
820
- return getFailures('warnings', fieldName);
833
+ return getFailures(Severity.WARNINGS, fieldName);
821
834
  }
822
835
  /**
823
836
  * @returns suite or field's errors or warnings.
@@ -831,11 +844,11 @@ function getFailures(severityKey, fieldName) {
831
844
  }
832
845
 
833
846
  function getErrorsByGroup(groupName, fieldName) {
834
- var errors = getByGroup('errors', groupName, fieldName);
847
+ var errors = getByGroup(Severity.ERRORS, groupName, fieldName);
835
848
  return getFailuresArrayOrObject(errors, fieldName);
836
849
  }
837
850
  function getWarningsByGroup(groupName, fieldName) {
838
- var warnings = getByGroup('warnings', groupName, fieldName);
851
+ var warnings = getByGroup(Severity.WARNINGS, groupName, fieldName);
839
852
  return getFailuresArrayOrObject(warnings, fieldName);
840
853
  }
841
854
  /**
@@ -869,10 +882,10 @@ function hasFailuresLogic(testObject, severityKey, fieldName) {
869
882
  }
870
883
 
871
884
  function hasErrors(fieldName) {
872
- return has('errors', fieldName);
885
+ return has(Severity.ERRORS, fieldName);
873
886
  }
874
887
  function hasWarnings(fieldName) {
875
- return has('warnings', fieldName);
888
+ return has(Severity.WARNINGS, fieldName);
876
889
  }
877
890
  function has(severityKey, fieldName) {
878
891
  var testObjects = useTestsFlat();
@@ -882,10 +895,10 @@ function has(severityKey, fieldName) {
882
895
  }
883
896
 
884
897
  function hasErrorsByGroup(groupName, fieldName) {
885
- return hasByGroup('errors', groupName, fieldName);
898
+ return hasByGroup(Severity.ERRORS, groupName, fieldName);
886
899
  }
887
900
  function hasWarningsByGroup(groupName, fieldName) {
888
- return hasByGroup('warnings', groupName, fieldName);
901
+ return hasByGroup(Severity.WARNINGS, groupName, fieldName);
889
902
  }
890
903
  /**
891
904
  * Checks whether there are failures in a given group.
@@ -1038,18 +1051,12 @@ function createBus() {
1038
1051
  var listeners = {};
1039
1052
  return {
1040
1053
  emit: function (event, data) {
1041
- if (!listeners[event]) {
1042
- return;
1043
- }
1044
- listeners[event].forEach(function (listener) {
1045
- listener(data);
1054
+ (listeners[event] || []).forEach(function (handler) {
1055
+ handler(data);
1046
1056
  });
1047
1057
  },
1048
1058
  on: function (event, handler) {
1049
- if (!listeners[event]) {
1050
- listeners[event] = [];
1051
- }
1052
- listeners[event].push(handler);
1059
+ listeners[event] = (listeners[event] || []).concat(handler);
1053
1060
  return {
1054
1061
  off: function () {
1055
1062
  listeners[event] = listeners[event].filter(function (h) { return h !== handler; });
@@ -1117,9 +1124,7 @@ function runFieldCallbacks(fieldName) {
1117
1124
  */
1118
1125
  function runDoneCallbacks() {
1119
1126
  var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
1120
- if (!hasRemainingTests()) {
1121
- callEach(doneCallbacks);
1122
- }
1127
+ callEach(doneCallbacks);
1123
1128
  }
1124
1129
 
1125
1130
  // eslint-disable-next-line max-lines-per-function
@@ -1133,14 +1138,21 @@ function initBus() {
1133
1138
  }
1134
1139
  testObject.done();
1135
1140
  runFieldCallbacks(testObject.fieldName);
1136
- runDoneCallbacks();
1141
+ if (!hasRemainingTests()) {
1142
+ // When no more tests are running, emit the done event
1143
+ bus.emit(Events.ALL_RUNNING_TESTS_FINISHED);
1144
+ }
1137
1145
  });
1138
1146
  // Report that the suite completed its synchronous test run.
1139
1147
  // Async operations may still be running.
1140
- bus.on(Events.SUITE_COMPLETED, function () {
1148
+ bus.on(Events.SUITE_CALLBACK_DONE_RUNNING, function () {
1141
1149
  // Remove tests that are optional and need to be omitted
1142
1150
  omitOptionalTests();
1143
1151
  });
1152
+ // Called when all the tests, including async, are done running
1153
+ bus.on(Events.ALL_RUNNING_TESTS_FINISHED, function () {
1154
+ runDoneCallbacks();
1155
+ });
1144
1156
  // Removes a certain field from the state.
1145
1157
  bus.on(Events.REMOVE_FIELD, function (fieldName) {
1146
1158
  useEachTestObject(function (testObject) {
@@ -1170,9 +1182,10 @@ function useBus() {
1170
1182
  var Events;
1171
1183
  (function (Events) {
1172
1184
  Events["TEST_COMPLETED"] = "test_completed";
1185
+ Events["ALL_RUNNING_TESTS_FINISHED"] = "all_running_tests_finished";
1173
1186
  Events["REMOVE_FIELD"] = "remove_field";
1174
1187
  Events["RESET_FIELD"] = "reset_field";
1175
- Events["SUITE_COMPLETED"] = "suite_completed";
1188
+ Events["SUITE_CALLBACK_DONE_RUNNING"] = "suite_callback_done_running";
1176
1189
  })(Events || (Events = {}));
1177
1190
 
1178
1191
  // eslint-disable-next-line max-lines-per-function
@@ -1209,7 +1222,7 @@ function create() {
1209
1222
  });
1210
1223
  // Report the suite is done registering tests
1211
1224
  // Async tests may still be running
1212
- bus.emit(Events.SUITE_COMPLETED);
1225
+ bus.emit(Events.SUITE_CALLBACK_DONE_RUNNING);
1213
1226
  // Return the result
1214
1227
  return produceFullResult();
1215
1228
  }), {
@@ -1240,7 +1253,7 @@ function create() {
1240
1253
  */
1241
1254
  function each(list, callback) {
1242
1255
  if (!isFunction(callback)) {
1243
- throwError('callback must be a function');
1256
+ throwError('each callback must be a function');
1244
1257
  }
1245
1258
  isolate({ type: IsolateTypes.EACH }, function () {
1246
1259
  list.forEach(function (arg, index) {
@@ -1476,6 +1489,45 @@ function include(fieldName) {
1476
1489
  }
1477
1490
  }
1478
1491
 
1492
+ /**
1493
+ * Sets the suite to "eager" (fail fast) mode.
1494
+ * Eager mode will skip running subsequent tests of a failing fields.
1495
+ *
1496
+ * @example
1497
+ * // in the following example, the second test of username will not run
1498
+ * // if the first test of username failed.
1499
+ * const suite = create((data) => {
1500
+ * eager();
1501
+ *
1502
+ * test('username', 'username is required', () => {
1503
+ * enforce(data.username).isNotBlank();
1504
+ * });
1505
+ *
1506
+ * test('username', 'username is too short', () => {
1507
+ * enforce(data.username).longerThan(2);
1508
+ * });
1509
+ * });
1510
+ */
1511
+ function eager() {
1512
+ setMode(Modes.EAGER);
1513
+ }
1514
+ function shouldSkipBasedOnMode(testObject) {
1515
+ if (isEager() && hasErrors(testObject.fieldName))
1516
+ return true;
1517
+ return false;
1518
+ }
1519
+ function isEager() {
1520
+ return isMode(Modes.EAGER);
1521
+ }
1522
+ function isMode(mode) {
1523
+ var currentMode = context.useX().mode;
1524
+ return currentMode[0] === mode;
1525
+ }
1526
+ function setMode(nextMode) {
1527
+ var mode = context.useX().mode;
1528
+ mode[0] = nextMode;
1529
+ }
1530
+
1479
1531
  /**
1480
1532
  * Conditionally omits tests from the suite.
1481
1533
  *
@@ -1708,6 +1760,11 @@ function handleKeyTest(key, newTestObject) {
1708
1760
  // eslint-disable-next-line max-statements
1709
1761
  function registerPrevRunTest(testObject) {
1710
1762
  var prevRunTest = useTestAtCursor(testObject);
1763
+ if (shouldSkipBasedOnMode(testObject)) {
1764
+ moveForward();
1765
+ testObject.skip();
1766
+ return testObject;
1767
+ }
1711
1768
  if (isOmitted()) {
1712
1769
  prevRunTest.omit();
1713
1770
  moveForward();
@@ -1816,6 +1873,6 @@ function warn() {
1816
1873
  ctx.currentTest.warn();
1817
1874
  }
1818
1875
 
1819
- var VERSION = "4.1.3";
1876
+ var VERSION = "4.2.0";
1820
1877
 
1821
- export { VERSION, context, create, each, group, include, omitWhen, only, optional, skip, skipWhen, test, warn };
1878
+ export { VERSION, context, create, each, eager, group, include, omitWhen, only, optional, skip, skipWhen, test, warn };
@@ -1 +1 @@
1
- import{createContext as t}from"context";export{enforce}from"n4s";var n,e=Object.assign,r=(n=0,function(){return"".concat(n++)});function u(t){return"function"==typeof t}function i(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return u(t)?t.apply(void 0,n):t}function o(t,n){var e;return null!==(e=i(t))&&void 0!==e?e:n}function s(t,n){throw Error(o(n,t))}function a(t,n){setTimeout((function(){s(t,n)}),0)}function c(t){function n(t,n,u){return r.references.push(),e(t,i(n,u)),function(){return[r.references[t],function(n){return e(t,i(n,r.references[t]))}]}}function e(n,e){var i=r.references[n];r.references[n]=e,u(n=o[n][1])&&n(e,i),u(t)&&t()}var r={references:[]},o=[];return{registerStateKey:function(t,e){var r=o.length;return o.push([t,e]),n(r,t)},reset:function(){var t=r.references;r.references=[],o.forEach((function(e,r){return n(r,e[0],t[r])}))}}}var f,l=f||(f={});function p(t,n){var e=n.suiteId;return n=n.suiteName,{optionalFields:t.registerStateKey((function(){return{}})),suiteId:t.registerStateKey(e),suiteName:t.registerStateKey(n),testCallbacks:t.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:t.registerStateKey((function(t){return{prev:t?t.current:[],current:[]}}))}}function d(t){return(t=[].concat(t))[t.length-1]}function v(){function t(){n=[0]}var n=[];return t(),{addLevel:function(){n.push(0)},cursorAt:function(){return d(n)},getCursor:function(){return[].concat(n)},next:function(){return n[n.length-1]++,d(n)},removeLevel:function(){n.pop()},reset:t}}l[l.DEFAULT=0]="DEFAULT",l[l.SUITE=1]="SUITE",l[l.EACH=2]="EACH",l[l.SKIP_WHEN=3]="SKIP_WHEN",l[l.OMIT_WHEN=4]="OMIT_WHEN",l[l.GROUP=5]="GROUP";var g=t((function(t,n){return n?null:e({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:f.DEFAULT,keys:{current:{},prev:{}}},testCursor:v()},t)}));function h(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(void 0,n)}}var m=h((function(t){return null===t}));function y(t,n){for(var e=[],r=0;r<t.length;r++){var u=t[r];Array.isArray(u)?e.push(y(u,n)):(u=n(u),m(u)&&e.push(u))}return e}function E(t){return[].concat(t).reduce((function(t,n){return Array.isArray(n)?t.concat(E(n)):[].concat(t).concat(n)}),[])}function b(t,n){var e=0;for(n=n.slice(0,-1);e<n.length;e++){var r=n[e];t[r]=o(t[r],[]),t=t[r]}return t}function N(t){return null==t}function C(t){return String(t)===t}function T(t){function n(r,u){var i=n.get(r);return i?i[1]:(u=u(),e.unshift([r.concat(),u]),e.length>Number(t)&&(e.length=t),u)}void 0===t&&(t=1);var e=[];return n.invalidate=function(t){var n=e.findIndex((function(n){var e=n[0];return t.length===Number(e.length)&&t.every((function(t,n){return t===e[n]}))}));-1<n&&e.splice(n,1)},n.get=function(t){return e[e.findIndex((function(n){var e=n[0];return t.length===Number(e.length)&&t.every((function(t,n){return t===e[n]}))}))]||null},n}function k(){return g.useX().stateRef}function S(){return k().testObjects()}function O(){(0,S()[1])((function(t){return{prev:t.prev,current:[].concat(t.current)}}))}function w(t){(0,S()[1])((function(n){return{prev:n.prev,current:[].concat(t(n.current))}}))}function F(){return E(y(S()[0].current,(function(t){return t.isPending()?t:null})))}var I=T();function P(){var t=S()[0].current;return I([t],(function(){return E(t)}))}var A,X=A||(A={});X.Error="error",X.Warning="warning";var D=function(){function t(t,n,e){var u=void 0===e?{}:e;e=u.message;var i=u.groupName;u=u.key,this.key=null,this.id=r(),this.severity=A.Error,this.status=L,this.fieldName=t,this.testFn=n,i&&(this.groupName=i),e&&(this.message=e),u&&(this.key=u)}return t.prototype.run=function(){try{var t=this.testFn()}catch(n){t=n,void 0===this.message&&C(t)&&(this.message=n),t=!1}return!1===t&&this.fail(),t},t.prototype.setStatus=function(t){this.isFinalStatus()&&t!==G||(this.status=t)},t.prototype.warns=function(){return this.severity===A.Warning},t.prototype.setPending=function(){this.setStatus(R)},t.prototype.fail=function(){this.setStatus(this.warns()?U:x)},t.prototype.done=function(){this.isFinalStatus()||this.setStatus(W)},t.prototype.warn=function(){this.severity=A.Warning},t.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},t.prototype.skip=function(t){this.isPending()&&!t||this.setStatus(_)},t.prototype.cancel=function(){this.setStatus(M),O()},t.prototype.reset=function(){this.status=L,O()},t.prototype.omit=function(){this.setStatus(G)},t.prototype.valueOf=function(){return!this.isFailing()},t.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},t.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},t.prototype.isPending=function(){return this.statusEquals(R)},t.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},t.prototype.isOmitted=function(){return this.statusEquals(G)},t.prototype.isUntested=function(){return this.statusEquals(L)},t.prototype.isFailing=function(){return this.statusEquals(x)},t.prototype.isCanceled=function(){return this.statusEquals(M)},t.prototype.isSkipped=function(){return this.statusEquals(_)},t.prototype.isPassing=function(){return this.statusEquals(W)},t.prototype.isWarning=function(){return this.statusEquals(U)},t.prototype.statusEquals=function(t){return this.status===t},t}(),L="UNTESTED",_="SKIPPED",x="FAILED",U="WARNING",W="PASSING",R="PENDING",M="CANCELED",G="OMITTED";function j(){return g.useX().testCursor.getCursor()}function q(){return g.useX().testCursor.next()}function H(t,n){if(t=void 0===(t=t.type)?f.DEFAULT:t,u(n)){var e={current:{},prev:{}},r=j();return g.run({isolate:{type:t,keys:e}},(function(){g.useX().testCursor.addLevel(),e.prev=function(){var t=S()[0].prev;return[].concat(b(t,j())).reduce((function(t,n){return n instanceof D&&!N(n.key)?(t[n.key]=n,t):t}),{})}(),w((function(t){return b(t,r)[d(r)]=[],t}));var t=n();return g.useX().testCursor.removeLevel(),q(),t}))}}function K(t){if(t){if("number"==typeof t)return 0===t;if(Object.prototype.hasOwnProperty.call(t,"length"))return t.length===Number(0);if("object"==typeof t)return Object.keys(t).length===Number(0)}return!0}var V=h(K);function B(t,n){return!(!n||t.fieldName!==n)}function Y(t){var n=F();return!K(n)&&(t?n.some((function(n){return B(n,t)})):V(n))}function z(t,n){function e(t,n){i[t]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=n.fieldName,u=n.message;t[r]=t[r]||{errorCount:0,warnCount:0,testCount:0};var i=t[r];return n.isNonActionable()||(t[r].testCount++,n.isFailing()?e("errorCount","errors"):n.isWarning()&&e("warnCount","warnings")),i}function J(){return(J=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var u in n=arguments[e])Object.prototype.hasOwnProperty.call(n,u)&&(t[u]=n[u]);return t}).apply(this,arguments)}function Q(t,n,e){if(e||2===arguments.length)for(var r,u=0,i=n.length;u<i;u++)!r&&u in n||(r||(r=Array.prototype.slice.call(n,0,u)),r[u]=n[u]);return t.concat(r||Array.prototype.slice.call(n))}function Z(t,n,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return n.reduce((function(n,e){if(u&&e.groupName!==u)var r=!0;else i&&!B(e,i)?r=!0:(r=e.warns(),r="warnings"===t!=!!r);return r||!e.hasFailures()||(n[e.fieldName]=(n[e.fieldName]||[]).concat(e.message||[])),n}),J({},i&&((r={})[i]=[],r)))}function $(t){return nt("errors",t)}function tt(t){return nt("warnings",t)}function nt(t,n){return t=Z(t,P(),{fieldName:n}),n?t[n]:t}function et(t,n){return t=ut("errors",t,n),n?t[n]:t}function rt(t,n){return t=ut("warnings",t,n),n?t[n]:t}function ut(t,n,e){return n||s("get".concat(t[0].toUpperCase()).concat(t.slice(1),"ByGroup requires a group name. Received `").concat(n,"` instead.")),Z(t,P(),{group:n,fieldName:e})}function it(t,n,e){return(e=!t.hasFailures()||e&&!B(t,e))||(e="warnings"===n!=!!(t=t.warns())),!e}function ot(t){return at("errors",t)}function st(t){return at("warnings",t)}function at(t,n){return P().some((function(e){return it(e,t,n)}))}function ct(t,n){return lt("errors",t,n)}function ft(t,n){return lt("warnings",t,n)}function lt(t,n,e){return P().some((function(r){return n===r.groupName&&it(r,t,e)}))}var pt=T(20);function dt(){var t=P(),n={stateRef:k()};return pt([t],g.bind(n,(function(){var t=k().suiteName()[0];return e(function(){var t={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return P().forEach((function(n){var e=n.fieldName,r=n.groupName;t.tests[e]=z(t.tests,n),r&&(t.groups[r]=t.groups[r]||{},t.groups[r][e]=z(t.groups[r],n))})),function(t){for(var n in t.tests)t.errorCount+=t.tests[n].errorCount,t.warnCount+=t.tests[n].warnCount,t.testCount+=t.tests[n].testCount;return t}(t)}(),{getErrors:g.bind(n,$),getErrorsByGroup:g.bind(n,et),getWarnings:g.bind(n,tt),getWarningsByGroup:g.bind(n,rt),hasErrors:g.bind(n,ot),hasErrorsByGroup:g.bind(n,ct),hasWarnings:g.bind(n,st),hasWarningsByGroup:g.bind(n,ft),isValid:g.bind(n,(function(t){var n=dt(),e=P().reduce((function(t,n){return t[n.fieldName]||n.isOmitted()&&(t[n.fieldName]=!0),t}),{});return(e=!!t&&!!e[t])?t=!0:n.hasErrors(t)?t=!1:t=!(K(e=P())||t&&K(n.tests[t])||function(t){var n=k().optionalFields()[0];return V(F().filter((function(e){return!(t&&!B(e,t))&&!0!==n[e.fieldName]})))}(t))&&function(t){var n=P(),e=k().optionalFields()[0];return n.every((function(n){return!(!t||B(n,t))||!0===e[n.fieldName]||n.isTested()||n.isOmitted()}))}(t),t})),suiteName:t})})))}var vt=T(20);function gt(){var t=P(),n={stateRef:k()};return vt([t],g.bind(n,(function(){return e({},dt(),{done:g.bind(n,yt)})})))}function ht(t,n,e){return!(u(t)&&(!n||e.tests[n]&&!K(e.tests[n].testCount)))}function mt(t){return!(Y()&&(!t||Y(t)))}function yt(){function t(){return r(dt())}for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];return n=n[1],e=gt(),ht(r,n,e)?e:mt(n)?(t(),e):(Et(t,n),e)}function Et(t,n){var e=g.bind({},t);(0,k().testCallbacks()[1])((function(t){return n?t.fieldCallbacks[n]=(t.fieldCallbacks[n]||[]).concat(e):t.doneCallbacks.push(e),t}))}function bt(t){return t.forEach((function(t){return t()}))}function Nt(){var t=function(){var t={};return{emit:function(n,e){t[n]&&t[n].forEach((function(t){t(e)}))},on:function(n,e){return t[n]||(t[n]=[]),t[n].push(e),{off:function(){t[n]=t[n].filter((function(t){return t!==e}))}}}}}();return t.on(Tt.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var n=k().testCallbacks()[0].fieldCallbacks;t&&!Y(t)&&Array.isArray(n[t])&&bt(n[t]),t=k().testCallbacks()[0].doneCallbacks,Y()||bt(t)}})),t.on(Tt.SUITE_COMPLETED,(function(){!function(){var t=k().optionalFields()[0];if(!K(t)){var n={};w((function(e){return y(e,(function(e){var r=e.fieldName;if(n.hasOwnProperty(r))n[e.fieldName]&&e.omit();else{var i=t[r];u(i)&&(n[r]=i(),n[e.fieldName]&&e.omit())}return e}))}))}}()})),t.on(Tt.REMOVE_FIELD,(function(t){P().forEach((function(n){B(n,t)&&(n.cancel(),function(t){w((function(n){return y(n,(function(n){return t!==n?n:null}))}))}(n))}))})),t.on(Tt.RESET_FIELD,(function(t){P().forEach((function(n){B(n,t)&&n.reset()}))})),t}function Ct(){var t=g.useX();return t.bus||s(),t.bus}var Tt,kt=Tt||(Tt={});function St(t){return wt(0,"tests",t)}function Ot(t){return wt(1,"tests",t)}function wt(t,n,e){var r=g.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){C(e)&&(r.exclusion[n][e]=0===t)}))}function Ft(t){for(var n in t)if(!0===t[n])return!0;return!1}function It(t){s("Wrong arguments passed to group. Group ".concat(t,"."))}kt.TEST_COMPLETED="test_completed",kt.REMOVE_FIELD="remove_field",kt.RESET_FIELD="reset_field",kt.SUITE_COMPLETED="suite_completed",St.group=function(t){return wt(0,"groups",t)},Ot.group=function(t){return wt(1,"groups",t)};var Pt=h(C);function At(t){var n=t.asyncTest,e=t.message;if(n&&u(n.then)){var r=Ct().emit,i=k(),o=g.bind({stateRef:i},(function(){O(),r(Tt.TEST_COMPLETED,t)}));i=g.bind({stateRef:i},(function(n){t.isCanceled()||(t.message=C(n)?n:e,t.fail(),o())}));try{n.then(o,i)}catch(t){i()}}}function Xt(t){var n=j();w((function(e){return b(e,n)[d(n)]=t,e}))}function Dt(t){var n=S()[0].prev;if(K(n))Xt(t),n=t;else{var e=j();if(n=b(n,e)[d(e)],N(t.key))!V(e=n)||e.fieldName===t.fieldName&&e.groupName===t.groupName||(g.useX().isolate.type!==f.EACH&&a("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(t.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 t=S(),n=t[1],e=t[0].prev;t=b(e,j());var r=g.useX().testCursor.cursorAt();t.splice(r),n((function(t){return{prev:e,current:t.current}}))}(),n=null),Xt(n=o(n,t));else{n=t.key;var r=g.useX().isolate.keys.prev[n];e=t,r&&(e=r),r=e;var c=g.useX().isolate.keys.current;N(c[n])?c[n]=r:a('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Xt(n=e)}}if(g.useX().omitted)return n.omit(),q(),n;if(function(t){var n=t.fieldName;if(t=t.groupName,g.useX().skipped)return!0;var e=g.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,o=u[n];if(!1===o)return!0;if(o=!0===o,t){t:{var s=g.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(s,t))var a=!1===s[t];else{for(a in s)if(!0===s[a]){a=!0;break t}a=!1}}if(a)return!0;if(!0===r.groups[t])return!(o||!Ft(u)&&!1!==u[n])}r=g.useX().exclusion;t:{for(c in(a=g.useX().exclusion).groups)if(a.groups[c]){var c=!0;break t}c=!1}return!(!c||t&&t in r.groups&&r.groups[t])||!o&&!!Ft(u)&&!i(e[n])}(t))return n.skip(!!g.useX().skipped),q(),n;if(t!==n&&n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&n.cancel(),Xt(t),q(),t.isUntested()){n=Ct(),e=function(t){return g.run({currentTest:t},(function(){try{var n=t.testFn()}catch(e){n=e,void 0===t.message&&C(n)&&(t.message=e),n=!1}return!1===n&&t.fail(),n}))}(t);try{e&&u(e.then)?(t.asyncTest=e,t.setPending(),At(t)):n.emit(Tt.TEST_COMPLETED,t)}catch(n){s("Unexpected error encountered during test registration.\n Test Object: ".concat(t,".\n Error: ").concat(n,"."))}}else(n=t.asyncTest)&&u(n.then)&&(t.setPending(),At(t));return t}function Lt(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var r=u(n[1])?n:Q([void 0],n,!0);n=r[0],e=r[1],r=r[2],Pt(t)&&xt("fieldName","string"),u(e)||xt("Test callback","function");var i=g.useX();return Dt(n=new D(t,e,{message:n,groupName:i.groupName,key:r}))}var _t=e(Lt,{memo:function(t){var n=T(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=g.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[k().suiteId()[0],e,u].concat(i),null===(r=n.get(u))?n(u,(function(){return t(e,s,o)})):r[1].isCanceled()?(n.invalidate(u),n(u,(function(){return t(e,s,o)}))):Dt(r[1])}}(Lt)});function xt(t,n){s("Incompatible params passed to test function. ".concat(t," must be a ").concat(n))}var Ut="4.1.3";function Wt(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var i=(t=t.reverse())[0];t=t[1],u(i)||s("vest.create: Expected callback to be a function.");var o=Nt(),a=c();return t={stateRef:p(a,{suiteId:r(),suiteName:t}),bus:o},e(g.bind(t,(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return a.reset(),H({type:f.SUITE},(function(){i.apply(void 0,t)})),o.emit(Tt.SUITE_COMPLETED),gt()})),{get:g.bind(t,dt),remove:g.bind(t,(function(t){o.emit(Tt.REMOVE_FIELD,t)})),reset:a.reset,resetField:g.bind(t,(function(t){o.emit(Tt.RESET_FIELD,t)}))})}function Rt(t,n){u(n)||s("callback must be a function"),H({type:f.EACH},(function(){t.forEach((function(t,e){n(t,e)}))}))}function Mt(t,n){C(t)||It("name must be a string"),u(n)||It("callback must be a function"),H({type:f.GROUP},(function(){g.run({groupName:t},n)}))}function Gt(t){function n(n){var e=g.useX(),r=e.exclusion;e.inclusion[t]=function(){return Object.prototype.hasOwnProperty.call(r.tests,t)?o(r.tests[t],!0):C(n)?!!r.tests[n]:i(n,i(dt))}}var e=g.useX();return t?(e.inclusion[t]=o(e.exclusion.tests[t],!0),{when:n}):{when:n}}function jt(t,n){H({type:f.OMIT_WHEN},(function(){g.run({omitted:!!g.useX().omitted||i(t,i(dt))},(function(){return n()}))}))}function qt(t){(0,k().optionalFields()[1])((function(n){if(Array.isArray(t)||C(t))[].concat(t).forEach((function(t){n[t]=!0}));else for(var e in t)n[e]=t[e];return n}))}function Ht(t,n){H({type:f.SKIP_WHEN},(function(){g.run({skipped:!!g.useX().skipped||i(t,i(dt))},(function(){return n()}))}))}function Kt(){var t=g.useX("warn hook called outside of a running suite.");t.currentTest||s("warn called outside of a test."),t.currentTest.warn()}export{Ut as VERSION,g as context,Wt as create,Rt as each,Mt as group,Gt as include,jt as omitWhen,St as only,qt as optional,Ot as skip,Ht as skipWhen,_t as test,Kt as warn};
1
+ import{createContext as t}from"context";export{enforce}from"n4s";var n,e=Object.assign,r=(n=0,function(){return"".concat(n++)});function u(t){return"function"==typeof t}function i(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return u(t)?t.apply(void 0,n):t}function o(t,n){var e;return null!==(e=i(t))&&void 0!==e?e:n}function s(t,n){throw Error(o(n,t))}function a(t,n){setTimeout((function(){s(t,n)}),0)}function c(t){function n(t,n,u){return r.references.push(),e(t,i(n,u)),function(){return[r.references[t],function(n){return e(t,i(n,r.references[t]))}]}}function e(n,e){var i=r.references[n];r.references[n]=e,u(n=o[n][1])&&n(e,i),u(t)&&t()}var r={references:[]},o=[];return{registerStateKey:function(t,e){var r=o.length;return o.push([t,e]),n(r,t)},reset:function(){var t=r.references;r.references=[],o.forEach((function(e,r){return n(r,e[0],t[r])}))}}}var f,l=f||(f={});function p(t,n){var e=n.suiteId;return n=n.suiteName,{optionalFields:t.registerStateKey((function(){return{}})),suiteId:t.registerStateKey(e),suiteName:t.registerStateKey(n),testCallbacks:t.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:t.registerStateKey((function(t){return{prev:t?t.current:[],current:[]}}))}}function d(t){return(t=[].concat(t))[t.length-1]}function v(){function t(){n=[0]}var n=[];return t(),{addLevel:function(){n.push(0)},cursorAt:function(){return d(n)},getCursor:function(){return[].concat(n)},next:function(){return n[n.length-1]++,d(n)},removeLevel:function(){n.pop()},reset:t}}l[l.DEFAULT=0]="DEFAULT",l[l.SUITE=1]="SUITE",l[l.EACH=2]="EACH",l[l.SKIP_WHEN=3]="SKIP_WHEN",l[l.OMIT_WHEN=4]="OMIT_WHEN",l[l.GROUP=5]="GROUP";var h,g=h||(h={});g[g.ALL=0]="ALL",g[g.EAGER=1]="EAGER";var E=t((function(t,n){return n?null:e({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:f.DEFAULT,keys:{current:{},prev:{}}},mode:[h.ALL],testCursor:v()},t)}));function m(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(void 0,n)}}var y=m((function(t){return null===t}));function N(t,n){for(var e=[],r=0;r<t.length;r++){var u=t[r];Array.isArray(u)?e.push(N(u,n)):(u=n(u),y(u)&&e.push(u))}return e}function b(t){return[].concat(t).reduce((function(t,n){return Array.isArray(n)?t.concat(b(n)):[].concat(t).concat(n)}),[])}function S(t,n){var e=0;for(n=n.slice(0,-1);e<n.length;e++){var r=n[e];t[r]=o(t[r],[]),t=t[r]}return t}function C(t){return null==t}function R(t){return String(t)===t}function T(t){function n(e,u){var i=n.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),r.length>Number(t)&&(r.length=t),u)}function e(t){return r.findIndex((function(n){var e=n[0];return t.length===Number(e.length)&&t.every((function(t,n){return t===e[n]}))}))}void 0===t&&(t=1);var r=[];return n.invalidate=function(t){-1<(t=e(t))&&r.splice(t,1)},n.get=function(t){return r[e(t)]||null},n}function A(){return E.useX().stateRef}function I(){return A().testObjects()}function k(){(0,I()[1])((function(t){return{prev:t.prev,current:[].concat(t.current)}}))}function O(t){(0,I()[1])((function(n){return{prev:n.prev,current:[].concat(t(n.current))}}))}function _(){return b(N(I()[0].current,(function(t){return t.isPending()?t:null})))}var L=T();function F(){var t=I()[0].current;return L([t],(function(){return b(t)}))}var G,P=G||(G={});P.Error="error",P.Warning="warning";var W=function(){function t(t,n,e){var u=void 0===e?{}:e;e=u.message;var i=u.groupName;u=u.key,this.key=null,this.id=r(),this.severity=G.Error,this.status=X,this.fieldName=t,this.testFn=n,i&&(this.groupName=i),e&&(this.message=e),u&&(this.key=u)}return t.prototype.run=function(){try{var t=this.testFn()}catch(n){t=n,void 0===this.message&&R(t)&&(this.message=n),t=!1}return!1===t&&this.fail(),t},t.prototype.setStatus=function(t){this.isFinalStatus()&&t!==j||(this.status=t)},t.prototype.warns=function(){return this.severity===G.Warning},t.prototype.setPending=function(){this.setStatus(H)},t.prototype.fail=function(){this.setStatus(this.warns()?U:D)},t.prototype.done=function(){this.isFinalStatus()||this.setStatus(x)},t.prototype.warn=function(){this.severity=G.Warning},t.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},t.prototype.skip=function(t){this.isPending()&&!t||this.setStatus(w)},t.prototype.cancel=function(){this.setStatus(K),k()},t.prototype.reset=function(){this.status=X,k()},t.prototype.omit=function(){this.setStatus(j)},t.prototype.valueOf=function(){return!this.isFailing()},t.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},t.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},t.prototype.isPending=function(){return this.statusEquals(H)},t.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},t.prototype.isOmitted=function(){return this.statusEquals(j)},t.prototype.isUntested=function(){return this.statusEquals(X)},t.prototype.isFailing=function(){return this.statusEquals(D)},t.prototype.isCanceled=function(){return this.statusEquals(K)},t.prototype.isSkipped=function(){return this.statusEquals(w)},t.prototype.isPassing=function(){return this.statusEquals(x)},t.prototype.isWarning=function(){return this.statusEquals(U)},t.prototype.statusEquals=function(t){return this.status===t},t}(),X="UNTESTED",w="SKIPPED",D="FAILED",U="WARNING",x="PASSING",H="PENDING",K="CANCELED",j="OMITTED";function M(){return E.useX().testCursor.getCursor()}function q(){return E.useX().testCursor.next()}function B(t,n){if(t=void 0===(t=t.type)?f.DEFAULT:t,u(n)){var e={current:{},prev:{}},r=M();return E.run({isolate:{type:t,keys:e}},(function(){E.useX().testCursor.addLevel(),e.prev=function(){var t=I()[0].prev;return[].concat(S(t,M())).reduce((function(t,n){return n instanceof W&&!C(n.key)?(t[n.key]=n,t):t}),{})}(),O((function(t){return S(t,r)[d(r)]=[],t}));var t=n();return E.useX().testCursor.removeLevel(),q(),t}))}}function V(t){if(t){if("number"==typeof t)return 0===t;if(Object.prototype.hasOwnProperty.call(t,"length"))return t.length===Number(0);if("object"==typeof t)return Object.keys(t).length===Number(0)}return!0}var Y=m(V);function z(t,n){return!(!n||t.fieldName!==n)}function J(t){var n=_();return!V(n)&&(t?n.some((function(n){return z(n,t)})):Y(n))}var Q,Z=Q||(Q={});function $(t,n){function e(t){i[t===Q.ERRORS?"errorCount":"warnCount"]++,u&&(i[t]=(i[t]||[]).concat(u))}var r=n.fieldName,u=n.message;t[r]=t[r]||{errorCount:0,warnCount:0,testCount:0};var i=t[r];return n.isNonActionable()||(t[r].testCount++,n.isFailing()?e(Q.ERRORS):n.isWarning()&&e(Q.WARNINGS)),i}function tt(){return(tt=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var u in n=arguments[e])Object.prototype.hasOwnProperty.call(n,u)&&(t[u]=n[u]);return t}).apply(this,arguments)}function nt(t,n,e){if(e||2===arguments.length)for(var r,u=0,i=n.length;u<i;u++)!r&&u in n||(r||(r=Array.prototype.slice.call(n,0,u)),r[u]=n[u]);return t.concat(r||Array.prototype.slice.call(n))}function et(t,n,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return n.reduce((function(n,e){if(u&&e.groupName!==u)var r=!0;else i&&!z(e,i)?r=!0:(r=e.warns(),r=t===Q.WARNINGS!=!!r);return r||!e.hasFailures()||(n[e.fieldName]=(n[e.fieldName]||[]).concat(e.message||[])),n}),tt({},i&&((r={})[i]=[],r)))}function rt(t){return it(Q.ERRORS,t)}function ut(t){return it(Q.WARNINGS,t)}function it(t,n){return t=et(t,F(),{fieldName:n}),n?t[n]:t}function ot(t,n){return t=at(Q.ERRORS,t,n),n?t[n]:t}function st(t,n){return t=at(Q.WARNINGS,t,n),n?t[n]:t}function at(t,n,e){return n||s("get".concat(t[0].toUpperCase()).concat(t.slice(1),"ByGroup requires a group name. Received `").concat(n,"` instead.")),et(t,F(),{group:n,fieldName:e})}function ct(t,n,e){return(e=!t.hasFailures()||e&&!z(t,e))||(t=t.warns(),e=n===Q.WARNINGS!=!!t),!e}function ft(t){return pt(Q.ERRORS,t)}function lt(t){return pt(Q.WARNINGS,t)}function pt(t,n){return F().some((function(e){return ct(e,t,n)}))}function dt(t,n){return ht(Q.ERRORS,t,n)}function vt(t,n){return ht(Q.WARNINGS,t,n)}function ht(t,n,e){return F().some((function(r){return n===r.groupName&&ct(r,t,e)}))}Z.WARNINGS="warnings",Z.ERRORS="errors";var gt=T(20);function Et(){var t=F(),n={stateRef:A()};return gt([t],E.bind(n,(function(){var t=A().suiteName()[0];return e(function(){var t=F(),n=e({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{}});return t.forEach((function(t){var e=t.fieldName,r=t.groupName;n.tests[e]=$(n.tests,t),r&&(n.groups[r]=n.groups[r]||{},n.groups[r][e]=$(n.groups[r],t))})),function(t){for(var n in t.tests)t.errorCount+=t.tests[n].errorCount,t.warnCount+=t.tests[n].warnCount,t.testCount+=t.tests[n].testCount;return t}(n)}(),{getErrors:E.bind(n,rt),getErrorsByGroup:E.bind(n,ot),getWarnings:E.bind(n,ut),getWarningsByGroup:E.bind(n,st),hasErrors:E.bind(n,ft),hasErrorsByGroup:E.bind(n,dt),hasWarnings:E.bind(n,lt),hasWarningsByGroup:E.bind(n,vt),isValid:E.bind(n,(function(t){var n=Et(),e=F().reduce((function(t,n){return t[n.fieldName]||n.isOmitted()&&(t[n.fieldName]=!0),t}),{});return(e=!!t&&!!e[t])?t=!0:n.hasErrors(t)?t=!1:t=!(V(e=F())||t&&V(n.tests[t])||function(t){var n=A().optionalFields()[0];return Y(_().filter((function(e){return!(t&&!z(e,t))&&!0!==n[e.fieldName]})))}(t))&&function(t){var n=F(),e=A().optionalFields()[0];return n.every((function(n){return!(!t||z(n,t))||!0===e[n.fieldName]||n.isTested()||n.isOmitted()}))}(t),t})),suiteName:t})})))}var mt=T(20);function yt(){var t=F(),n={stateRef:A()};return mt([t],E.bind(n,(function(){return e({},Et(),{done:E.bind(n,St)})})))}function Nt(t,n,e){return!(u(t)&&(!n||e.tests[n]&&!V(e.tests[n].testCount)))}function bt(t){return!(J()&&(!t||J(t)))}function St(){function t(){return r(Et())}for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];return n=n[1],e=yt(),Nt(r,n,e)?e:bt(n)?(t(),e):(Ct(t,n),e)}function Ct(t,n){var e=E.bind({},t);(0,A().testCallbacks()[1])((function(t){return n?t.fieldCallbacks[n]=(t.fieldCallbacks[n]||[]).concat(e):t.doneCallbacks.push(e),t}))}function Rt(t){return t.forEach((function(t){return t()}))}function Tt(){var t=function(){var t={};return{emit:function(n,e){(t[n]||[]).forEach((function(t){t(e)}))},on:function(n,e){return t[n]=(t[n]||[]).concat(e),{off:function(){t[n]=t[n].filter((function(t){return t!==e}))}}}}}();return t.on(It.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var e=A().testCallbacks()[0].fieldCallbacks;n&&!J(n)&&Array.isArray(e[n])&&Rt(e[n]),J()||t.emit(It.ALL_RUNNING_TESTS_FINISHED)}})),t.on(It.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var t=A().optionalFields()[0];if(!V(t)){var n={};O((function(e){return N(e,(function(e){var r=e.fieldName;if(n.hasOwnProperty(r))n[e.fieldName]&&e.omit();else{var i=t[r];u(i)&&(n[r]=i(),n[e.fieldName]&&e.omit())}return e}))}))}}()})),t.on(It.ALL_RUNNING_TESTS_FINISHED,(function(){Rt(A().testCallbacks()[0].doneCallbacks)})),t.on(It.REMOVE_FIELD,(function(t){F().forEach((function(n){z(n,t)&&(n.cancel(),function(t){O((function(n){return N(n,(function(n){return t!==n?n:null}))}))}(n))}))})),t.on(It.RESET_FIELD,(function(t){F().forEach((function(n){z(n,t)&&n.reset()}))})),t}function At(){var t=E.useX();return t.bus||s(),t.bus}var It,kt=It||(It={});function Ot(t){return Lt(0,"tests",t)}function _t(t){return Lt(1,"tests",t)}function Lt(t,n,e){var r=E.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){R(e)&&(r.exclusion[n][e]=0===t)}))}function Ft(t){for(var n in t)if(!0===t[n])return!0;return!1}function Gt(t){s("Wrong arguments passed to group. Group ".concat(t,"."))}kt.TEST_COMPLETED="test_completed",kt.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",kt.REMOVE_FIELD="remove_field",kt.RESET_FIELD="reset_field",kt.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running",Ot.group=function(t){return Lt(0,"groups",t)},_t.group=function(t){return Lt(1,"groups",t)};var Pt=m(R);function Wt(t){var n=t.asyncTest,e=t.message;if(n&&u(n.then)){var r=At().emit,i=A(),o=E.bind({stateRef:i},(function(){k(),r(It.TEST_COMPLETED,t)}));i=E.bind({stateRef:i},(function(n){t.isCanceled()||(t.message=R(n)?n:e,t.fail(),o())}));try{n.then(o,i)}catch(t){i()}}}function Xt(t){var n=M();O((function(e){return S(e,n)[d(n)]=t,e}))}function wt(t){var n=I()[0].prev;if(V(n))Xt(t),n=t;else{var e=M();if(n=S(n,e)[d(e)],C(t.key))!Y(e=n)||e.fieldName===t.fieldName&&e.groupName===t.groupName||(E.useX().isolate.type!==f.EACH&&a("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(t.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 t=I(),n=t[1],e=t[0].prev;t=S(e,M());var r=E.useX().testCursor.cursorAt();t.splice(r),n((function(t){return{prev:e,current:t.current}}))}(),n=null),Xt(n=o(n,t));else{n=t.key;var r=E.useX().isolate.keys.prev[n];e=t,r&&(e=r),r=e;var c=E.useX().isolate.keys.current;C(c[n])?c[n]=r:a('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Xt(n=e)}}if(e=h.EAGER,e=!(E.useX().mode[0]!==e||!ft(t.fieldName)))return q(),t.skip(),t;if(E.useX().omitted)return n.omit(),q(),n;if(function(t){var n=t.fieldName;if(t=t.groupName,E.useX().skipped)return!0;var e=E.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,o=u[n];if(!1===o)return!0;if(o=!0===o,t){t:{var s=E.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(s,t))var a=!1===s[t];else{for(a in s)if(!0===s[a]){a=!0;break t}a=!1}}if(a)return!0;if(!0===r.groups[t])return!(o||!Ft(u)&&!1!==u[n])}r=E.useX().exclusion;t:{for(c in(a=E.useX().exclusion).groups)if(a.groups[c]){var c=!0;break t}c=!1}return!(!c||t&&t in r.groups&&r.groups[t])||!o&&!!Ft(u)&&!i(e[n])}(t))return n.skip(!!E.useX().skipped),q(),n;if(t!==n&&n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&n.cancel(),Xt(t),q(),t.isUntested()){n=At(),e=function(t){return E.run({currentTest:t},(function(){try{var n=t.testFn()}catch(e){n=e,void 0===t.message&&R(n)&&(t.message=e),n=!1}return!1===n&&t.fail(),n}))}(t);try{e&&u(e.then)?(t.asyncTest=e,t.setPending(),Wt(t)):n.emit(It.TEST_COMPLETED,t)}catch(n){s("Unexpected error encountered during test registration.\n Test Object: ".concat(t,".\n Error: ").concat(n,"."))}}else(n=t.asyncTest)&&u(n.then)&&(t.setPending(),Wt(t));return t}function Dt(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var r=u(n[1])?n:nt([void 0],n,!0);n=r[0],e=r[1],r=r[2],Pt(t)&&xt("fieldName","string"),u(e)||xt("Test callback","function");var i=E.useX();return wt(n=new W(t,e,{message:n,groupName:i.groupName,key:r}))}var Ut=e(Dt,{memo:function(t){var n=T(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=E.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[A().suiteId()[0],e,u].concat(i),null===(r=n.get(u))?n(u,(function(){return t(e,s,o)})):r[1].isCanceled()?(n.invalidate(u),n(u,(function(){return t(e,s,o)}))):wt(r[1])}}(Dt)});function xt(t,n){s("Incompatible params passed to test function. ".concat(t," must be a ").concat(n))}var Ht="4.2.0";function Kt(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var i=(t=t.reverse())[0];t=t[1],u(i)||s("vest.create: Expected callback to be a function.");var o=Tt(),a=c();return t={stateRef:p(a,{suiteId:r(),suiteName:t}),bus:o},e(E.bind(t,(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return a.reset(),B({type:f.SUITE},(function(){i.apply(void 0,t)})),o.emit(It.SUITE_CALLBACK_DONE_RUNNING),yt()})),{get:E.bind(t,Et),remove:E.bind(t,(function(t){o.emit(It.REMOVE_FIELD,t)})),reset:a.reset,resetField:E.bind(t,(function(t){o.emit(It.RESET_FIELD,t)}))})}function jt(t,n){u(n)||s("each callback must be a function"),B({type:f.EACH},(function(){t.forEach((function(t,e){n(t,e)}))}))}function Mt(){var t=h.EAGER;E.useX().mode[0]=t}function qt(t,n){R(t)||Gt("name must be a string"),u(n)||Gt("callback must be a function"),B({type:f.GROUP},(function(){E.run({groupName:t},n)}))}function Bt(t){function n(n){var e=E.useX(),r=e.exclusion;e.inclusion[t]=function(){return Object.prototype.hasOwnProperty.call(r.tests,t)?o(r.tests[t],!0):R(n)?!!r.tests[n]:i(n,i(Et))}}var e=E.useX();return t?(e.inclusion[t]=o(e.exclusion.tests[t],!0),{when:n}):{when:n}}function Vt(t,n){B({type:f.OMIT_WHEN},(function(){E.run({omitted:!!E.useX().omitted||i(t,i(Et))},(function(){return n()}))}))}function Yt(t){(0,A().optionalFields()[1])((function(n){if(Array.isArray(t)||R(t))[].concat(t).forEach((function(t){n[t]=!0}));else for(var e in t)n[e]=t[e];return n}))}function zt(t,n){B({type:f.SKIP_WHEN},(function(){E.run({skipped:!!E.useX().skipped||i(t,i(Et))},(function(){return n()}))}))}function Jt(){var t=E.useX("warn hook called outside of a running suite.");t.currentTest||s("warn called outside of a test."),t.currentTest.warn()}export{Ht as VERSION,E as context,Kt as create,jt as each,Mt as eager,qt as group,Bt as include,Vt as omitWhen,Ot as only,Yt as optional,_t as skip,zt as skipWhen,Ut as test,Jt as warn};