vest 3.3.0-dev-549cb1 → 4.0.0-dev-deabb8

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.
@@ -194,7 +194,7 @@ function compounds() {
194
194
  return { allOf: allOf, anyOf: anyOf, noneOf: noneOf, oneOf: oneOf, optional: optional$1 };
195
195
  }
196
196
 
197
- function isStringValue (v) {
197
+ function isStringValue(v) {
198
198
  return String(v) === v;
199
199
  }
200
200
 
@@ -605,7 +605,7 @@ function transformResult(result, ruleName, value) {
605
605
  return ruleReturn(result);
606
606
  }
607
607
  else {
608
- return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args)));
608
+ return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args, false)));
609
609
  }
610
610
  }
611
611
  function validateResult(result) {
@@ -639,9 +639,9 @@ function enforceEager(value) {
639
639
  for (var _i = 0; _i < arguments.length; _i++) {
640
640
  args[_i] = arguments[_i];
641
641
  }
642
- var transformedResult = transformResult.apply(void 0, __spreadArray([ctx$1.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args)); }),
642
+ var transformedResult = transformResult.apply(void 0, __spreadArray([ctx$1.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args, false)); }),
643
643
  ruleName,
644
- value], args));
644
+ value], args, false));
645
645
  if (!transformedResult.pass) {
646
646
  if (isEmpty(transformedResult.message)) {
647
647
  throwError("enforce/" + ruleName + " failed with " + JSON.stringify(value));
@@ -671,7 +671,7 @@ function genEnforceLazy(key) {
671
671
  }
672
672
  var rule = getRule(ruleName);
673
673
  registeredRules.push(function (value) {
674
- return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args)), ruleName, value], args));
674
+ return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args, false)), ruleName, value], args, false));
675
675
  });
676
676
  var proxy = {
677
677
  run: function (value) {
@@ -891,10 +891,6 @@ function matchingFieldName(testObject, fieldName) {
891
891
  function createCache(maxSize) {
892
892
  if (maxSize === void 0) { maxSize = 10; }
893
893
  var cacheStorage = [];
894
- /**
895
- * @param {any[]} deps dependency array.
896
- * @param {Function} cache action function.
897
- */
898
894
  var cache = function (deps, cacheAction) {
899
895
  var cacheHit = cache.get(deps);
900
896
  // cache hit is not null
@@ -907,10 +903,17 @@ function createCache(maxSize) {
907
903
  }
908
904
  return result;
909
905
  };
910
- /**
911
- * Retrieves an item from the cache.
912
- * @param {deps} deps Dependency array
913
- */
906
+ // invalidate an item in the cache by its dependencies
907
+ cache.invalidate = function (deps) {
908
+ var index = cacheStorage.findIndex(function (_a) {
909
+ var cachedDeps = _a[0];
910
+ return lengthEquals(deps, cachedDeps.length) &&
911
+ deps.every(function (dep, i) { return dep === cachedDeps[i]; });
912
+ });
913
+ if (index > -1)
914
+ cacheStorage.splice(index, 1);
915
+ };
916
+ // Retrieves an item from the cache.
914
917
  cache.get = function (deps) {
915
918
  return cacheStorage[cacheStorage.findIndex(function (_a) {
916
919
  var cachedDeps = _a[0];
@@ -1103,6 +1106,13 @@ function noMatch(testObject, severity, group, fieldName) {
1103
1106
  return false;
1104
1107
  }
1105
1108
 
1109
+ function getFailuresArrayOrObject(group, fieldName) {
1110
+ if (fieldName) {
1111
+ return group[fieldName];
1112
+ }
1113
+ return group;
1114
+ }
1115
+
1106
1116
  function getErrors(fieldName) {
1107
1117
  return getFailures('errors', fieldName);
1108
1118
  }
@@ -1117,25 +1127,16 @@ function getFailures(severityKey, fieldName) {
1117
1127
  var failureMessages = collectFailureMessages(severityKey, testObjects, {
1118
1128
  fieldName: fieldName
1119
1129
  });
1120
- if (fieldName) {
1121
- return failureMessages[fieldName];
1122
- }
1123
- return failureMessages;
1130
+ return getFailuresArrayOrObject(failureMessages, fieldName);
1124
1131
  }
1125
1132
 
1126
1133
  function getErrorsByGroup(groupName, fieldName) {
1127
1134
  var errors = getByGroup('errors', groupName, fieldName);
1128
- if (fieldName) {
1129
- return errors[fieldName];
1130
- }
1131
- return errors;
1135
+ return getFailuresArrayOrObject(errors, fieldName);
1132
1136
  }
1133
1137
  function getWarningsByGroup(groupName, fieldName) {
1134
- var errors = getByGroup('warnings', groupName, fieldName);
1135
- if (fieldName) {
1136
- return errors[fieldName];
1137
- }
1138
- return errors;
1138
+ var warnings = getByGroup('warnings', groupName, fieldName);
1139
+ return getFailuresArrayOrObject(warnings, fieldName);
1139
1140
  }
1140
1141
  /**
1141
1142
  * Gets failure messages by group.
@@ -1317,22 +1318,90 @@ function deferDoneCallback(doneCallback, fieldName) {
1317
1318
  });
1318
1319
  }
1319
1320
 
1321
+ function createBus() {
1322
+ var listeners = {};
1323
+ return {
1324
+ emit: function (event, data) {
1325
+ if (!listeners[event]) {
1326
+ return;
1327
+ }
1328
+ listeners[event].forEach(function (listener) {
1329
+ listener(data);
1330
+ });
1331
+ },
1332
+ on: function (event, handler) {
1333
+ if (!listeners[event]) {
1334
+ listeners[event] = [];
1335
+ }
1336
+ listeners[event].push(handler);
1337
+ return {
1338
+ off: function () {
1339
+ listeners[event] = listeners[event].filter(function (h) { return h !== handler; });
1340
+ }
1341
+ };
1342
+ }
1343
+ };
1344
+ }
1345
+
1346
+ function callEach(arr) {
1347
+ return arr.forEach(function (fn) { return fn(); });
1348
+ }
1349
+
1350
+ /**
1351
+ * Runs done callback per field when async tests are finished running.
1352
+ */
1353
+ function runFieldCallbacks(fieldName) {
1354
+ var fieldCallbacks = useTestCallbacks()[0].fieldCallbacks;
1355
+ if (fieldName) {
1356
+ if (!hasRemainingTests(fieldName) &&
1357
+ Array.isArray(fieldCallbacks[fieldName])) {
1358
+ callEach(fieldCallbacks[fieldName]);
1359
+ }
1360
+ }
1361
+ }
1362
+ /**
1363
+ * Runs unlabelled done callback when async tests are finished running.
1364
+ */
1365
+ function runDoneCallbacks() {
1366
+ var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
1367
+ if (!hasRemainingTests()) {
1368
+ callEach(doneCallbacks);
1369
+ }
1370
+ }
1371
+
1372
+ function initBus() {
1373
+ var bus = createBus();
1374
+ bus.on(Events.TEST_COMPLETED, function (testObject) {
1375
+ if (testObject.isCanceled()) {
1376
+ return;
1377
+ }
1378
+ testObject.done();
1379
+ runFieldCallbacks(testObject.fieldName);
1380
+ runDoneCallbacks();
1381
+ });
1382
+ return bus;
1383
+ }
1384
+ function useBus() {
1385
+ var context = ctx.useX();
1386
+ if (!context.bus) {
1387
+ throwError();
1388
+ }
1389
+ return context.bus;
1390
+ }
1391
+ var Events;
1392
+ (function (Events) {
1393
+ Events["TEST_COMPLETED"] = "test_completed";
1394
+ })(Events || (Events = {}));
1395
+
1320
1396
  // eslint-disable-next-line max-lines-per-function
1321
1397
  function create(suiteCallback) {
1322
1398
  if (!isFunction(suiteCallback)) {
1323
1399
  throwError('Suite initialization error. Expected `tests` to be a function.');
1324
1400
  }
1325
- var handlers = [];
1326
- var state = createState(function () {
1327
- handlers.forEach(function (fn) {
1328
- return fn({
1329
- suiteState: stateRef,
1330
- type: 'suiteStateUpdate'
1331
- });
1332
- });
1333
- });
1401
+ var bus = initBus();
1402
+ var state = createState();
1334
1403
  var stateRef = createStateRef(state, { suiteId: genId() });
1335
- var suite = assign(ctx.bind({ stateRef: stateRef }, function () {
1404
+ var suite = assign(ctx.bind({ stateRef: stateRef, bus: bus }, function () {
1336
1405
  var args = [];
1337
1406
  for (var _i = 0; _i < arguments.length; _i++) {
1338
1407
  args[_i] = arguments[_i];
@@ -1356,16 +1425,7 @@ function create(suiteCallback) {
1356
1425
  }
1357
1426
  });
1358
1427
  }),
1359
- reset: state.reset,
1360
- subscribe: function (handler) {
1361
- if (!isFunction(handler))
1362
- return;
1363
- handlers.push(handler);
1364
- handler({
1365
- type: 'suiteSubscribeInit',
1366
- suiteState: stateRef
1367
- });
1368
- }
1428
+ reset: state.reset
1369
1429
  });
1370
1430
  return suite;
1371
1431
  }
@@ -1497,16 +1557,16 @@ function skipWhen(conditional, callback) {
1497
1557
  */
1498
1558
  function group(groupName, tests) {
1499
1559
  if (!isStringValue(groupName)) {
1500
- throwGroupError(groupName);
1560
+ throwGroupError('name must be a string');
1501
1561
  }
1502
1562
  if (!isFunction(tests)) {
1503
- throwGroupError(tests);
1563
+ throwGroupError('callback must be a function');
1504
1564
  }
1505
1565
  // Running with the context applied
1506
- ctx.bind({ groupName: groupName }, tests)();
1566
+ ctx.run({ groupName: groupName }, tests);
1507
1567
  }
1508
- function throwGroupError(value) {
1509
- throwError("group initialization error. Expected \"" + value + "\" to be a string.");
1568
+ function throwGroupError(error) {
1569
+ throwError("Wrong arguments passed to group. Group " + error + ".");
1510
1570
  }
1511
1571
 
1512
1572
  function optional(optionals) {
@@ -1543,6 +1603,7 @@ function removeTestFromState (testObject) {
1543
1603
  }
1544
1604
 
1545
1605
  function shouldUseErrorAsMessage(message, error) {
1606
+ // kind of cheating with this safe guard, but it does the job
1546
1607
  return isUndefined(message) && isStringValue(error);
1547
1608
  }
1548
1609
 
@@ -1617,6 +1678,9 @@ var VestTest = /** @class */ (function () {
1617
1678
  VestTest.prototype.isTested = function () {
1618
1679
  return this.hasFailures() || this.isPassing();
1619
1680
  };
1681
+ VestTest.prototype.isUntested = function () {
1682
+ return this.status === STATUS_UNTESTED;
1683
+ };
1620
1684
  VestTest.prototype.isFailing = function () {
1621
1685
  return this.status === STATUS_FAILED;
1622
1686
  };
@@ -1642,27 +1706,23 @@ var STATUS_PASSING = 'PASSING';
1642
1706
  var STATUS_PENDING = 'PENDING';
1643
1707
  var STATUS_CANCELED = 'CANCELED';
1644
1708
 
1709
+ function isPromise(value) {
1710
+ return value && isFunction(value.then);
1711
+ }
1712
+
1645
1713
  function isSameProfileTest(testObject1, testObject2) {
1646
1714
  return (testObject1.fieldName === testObject2.fieldName &&
1647
1715
  testObject1.groupName === testObject2.groupName);
1648
1716
  }
1649
1717
 
1650
1718
  function cancelOverriddenPendingTest(prevRunTestObject, currentRunTestObject) {
1651
- if (isSameProfileTest(prevRunTestObject, currentRunTestObject) &&
1652
- prevRunTestObject.isPending() &&
1653
- currentRunTestObject !== prevRunTestObject) {
1719
+ if (currentRunTestObject !== prevRunTestObject &&
1720
+ isSameProfileTest(prevRunTestObject, currentRunTestObject) &&
1721
+ prevRunTestObject.isPending()) {
1654
1722
  prevRunTestObject.cancel();
1655
1723
  }
1656
1724
  }
1657
1725
 
1658
- function isPromise(value) {
1659
- return value && isFunction(value.then);
1660
- }
1661
-
1662
- function callEach(arr) {
1663
- return arr.forEach(function (fn) { return fn(); });
1664
- }
1665
-
1666
1726
  /**
1667
1727
  * Runs async test.
1668
1728
  */
@@ -1670,16 +1730,10 @@ function runAsyncTest(testObject) {
1670
1730
  var asyncTest = testObject.asyncTest, message = testObject.message;
1671
1731
  if (!isPromise(asyncTest))
1672
1732
  return;
1733
+ var emit = useBus().emit;
1673
1734
  var stateRef = useStateRef();
1674
1735
  var done = ctx.bind({ stateRef: stateRef }, function () {
1675
- testObject.done();
1676
- // This is for cases in which the suite state was already reset
1677
- if (testObject.isCanceled()) {
1678
- return;
1679
- }
1680
- // Perform required done callback calls and cleanups after the test is finished
1681
- runFieldCallbacks(testObject.fieldName);
1682
- runDoneCallbacks();
1736
+ emit(Events.TEST_COMPLETED, testObject);
1683
1737
  });
1684
1738
  var fail = ctx.bind({ stateRef: stateRef }, function (rejectionMessage) {
1685
1739
  if (testObject.isCanceled()) {
@@ -1700,27 +1754,6 @@ function runAsyncTest(testObject) {
1700
1754
  fail();
1701
1755
  }
1702
1756
  }
1703
- /**
1704
- * Runs done callback per field when async tests are finished running.
1705
- */
1706
- function runFieldCallbacks(fieldName) {
1707
- var fieldCallbacks = useTestCallbacks()[0].fieldCallbacks;
1708
- if (fieldName) {
1709
- if (!hasRemainingTests(fieldName) &&
1710
- Array.isArray(fieldCallbacks[fieldName])) {
1711
- callEach(fieldCallbacks[fieldName]);
1712
- }
1713
- }
1714
- }
1715
- /**
1716
- * Runs unlabelled done callback when async tests are finished running.
1717
- */
1718
- function runDoneCallbacks() {
1719
- var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
1720
- if (!hasRemainingTests()) {
1721
- callEach(doneCallbacks);
1722
- }
1723
- }
1724
1757
 
1725
1758
  /**
1726
1759
  * Runs sync tests - or extracts promise.
@@ -1748,6 +1781,7 @@ function runSyncTest(testObject) {
1748
1781
  * Registers test, if async - adds to pending array
1749
1782
  */
1750
1783
  function registerTest(testObject) {
1784
+ var emit = useBus().emit;
1751
1785
  // Run test callback.
1752
1786
  // If a promise is returned, set as async and
1753
1787
  // Move to pending list.
@@ -1761,7 +1795,7 @@ function registerTest(testObject) {
1761
1795
  runAsyncTest(testObject);
1762
1796
  }
1763
1797
  else {
1764
- testObject.done();
1798
+ emit(Events.TEST_COMPLETED, testObject);
1765
1799
  }
1766
1800
  }
1767
1801
  catch (_a) {
@@ -1769,6 +1803,29 @@ function registerTest(testObject) {
1769
1803
  }
1770
1804
  }
1771
1805
 
1806
+ function registerPrevRunTest(testObject) {
1807
+ var prevRunTest = useTestAtCursor(testObject);
1808
+ if (isExcluded(testObject)) {
1809
+ testObject.skip();
1810
+ useSetNextCursorAt();
1811
+ return prevRunTest;
1812
+ }
1813
+ cancelOverriddenPendingTest(prevRunTest, testObject);
1814
+ useSetTestAtCursor(testObject);
1815
+ useSetNextCursorAt();
1816
+ registerTestObjectByTier(testObject);
1817
+ return testObject;
1818
+ }
1819
+ function registerTestObjectByTier(testObject) {
1820
+ if (testObject.isUntested()) {
1821
+ registerTest(testObject);
1822
+ }
1823
+ else if (isPromise(testObject.asyncTest)) {
1824
+ testObject.setPending();
1825
+ runAsyncTest(testObject);
1826
+ }
1827
+ }
1828
+
1772
1829
  function bindTestEach(test) {
1773
1830
  /**
1774
1831
  * Run multiple tests using a parameter table
@@ -1785,7 +1842,7 @@ function bindTestEach(test) {
1785
1842
  var _a = args.reverse(), testFn = _a[0], message = _a[1];
1786
1843
  return table.map(function (item) {
1787
1844
  item = asArray(item);
1788
- return test(optionalFunctionValue.apply(void 0, __spreadArray([fieldName], item)), optionalFunctionValue.apply(void 0, __spreadArray([message], item)), function () { return testFn.apply(void 0, item); });
1845
+ return test(optionalFunctionValue.apply(void 0, __spreadArray([fieldName], item, false)), optionalFunctionValue.apply(void 0, __spreadArray([message], item, false)), function () { return testFn.apply(void 0, item); });
1789
1846
  });
1790
1847
  }
1791
1848
  return eachReturn;
@@ -1808,32 +1865,20 @@ function bindTestMemo(test) {
1808
1865
  // Implicit dependency for more specificity
1809
1866
  var dependencies = [suiteId, fieldName, cursorAt].concat(deps);
1810
1867
  var cached = cache.get(dependencies);
1811
- // Cache miss. Start fresh
1812
1868
  if (isNull(cached)) {
1869
+ // cache miss
1813
1870
  return cache(dependencies, function () { return test(fieldName, msg, testFn); });
1814
1871
  }
1815
- var testObject = cached[1];
1816
- var prevRunTest = useTestAtCursor(testObject);
1817
- if (isExcluded(testObject)) {
1818
- useSetNextCursorAt();
1819
- return prevRunTest;
1872
+ if (cached[1].isCanceled()) {
1873
+ // cache hit, but test is canceled
1874
+ cache.invalidate(dependencies);
1875
+ return cache(dependencies, function () { return test(fieldName, msg, testFn); });
1820
1876
  }
1821
- cancelOverriddenPendingTest(prevRunTest, testObject);
1822
- useSetTestAtCursor(testObject);
1823
- useSetNextCursorAt();
1824
- handleAsyncTest(testObject);
1825
- return testObject;
1877
+ return registerPrevRunTest(cached[1]);
1826
1878
  }
1827
1879
  return memo;
1828
1880
  }
1829
- function handleAsyncTest(testObject) {
1830
- if (testObject && isPromise(testObject.asyncTest)) {
1831
- testObject.setPending();
1832
- runAsyncTest(testObject);
1833
- }
1834
- }
1835
1881
 
1836
- // eslint-disable-next-line max-statements
1837
1882
  function testBase(fieldName) {
1838
1883
  var args = [];
1839
1884
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -1845,25 +1890,13 @@ function testBase(fieldName) {
1845
1890
  message: message,
1846
1891
  groupName: context === null || context === void 0 ? void 0 : context.groupName
1847
1892
  });
1848
- var prevRunTest = useTestAtCursor(testObject);
1849
- if (isExcluded(testObject)) {
1850
- testObject.skip();
1851
- useSetNextCursorAt();
1852
- return prevRunTest;
1853
- }
1854
- cancelOverriddenPendingTest(prevRunTest, testObject);
1855
- useSetTestAtCursor(testObject);
1856
- useSetNextCursorAt(); // maybe somehow do this only in one place?
1857
- if (!isFunction(testFn))
1858
- return testObject;
1859
- registerTest(testObject);
1860
- return testObject;
1893
+ return registerPrevRunTest(testObject);
1861
1894
  }
1862
1895
  var test = assign(testBase, {
1863
1896
  each: bindTestEach(testBase),
1864
1897
  memo: bindTestMemo(testBase)
1865
1898
  });
1866
1899
 
1867
- var VERSION = "3.3.0-dev-549cb1";
1900
+ var VERSION = "4.0.0-dev-deabb8";
1868
1901
 
1869
1902
  export { VERSION, create, enforce, group, only, optional, skip, skipWhen, test, warn };
@@ -1 +1 @@
1
- function n(){return(n=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)}function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}var r=Object.assign;function e(n){return"function"==typeof n}function u(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function i(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return e(n)?n.apply(void 0,t):n}function o(n,t){var r;return null!==(r=i(n))&&void 0!==r?r:t}function s(n,t){return n={pass:n},t&&(n.message=t),n}function a(n,t){try{return n.run(t)}catch(n){return s(!1)}}function c(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function f(n,t){return n.length===Number(t)}var l=c(f);function p(n,t){return n.length>Number(t)}function v(n){return null===n}var g=c(v);function d(n){return void 0===n}var h=c(d);function y(n){return String(n)===n}function m(n,t){return y(n)&&y(t)&&n.endsWith(t)}var b=c(m);function N(n,t){return n===t}var C=c(N);function O(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var E=c(O);function w(n,t){return O(n)&&O(t)&&Number(n)>Number(t)}function S(n,t){return O(n)&&O(t)&&Number(n)>=Number(t)}function x(n,t){return!!(Array.isArray(t)||y(t)&&y(n))&&-1!==t.indexOf(n)}var k=c(x);function P(n){return!!Array.isArray(n)}var T=c(P);function j(n,t){return O(n)&&O(t)&&Number(n)<=Number(t)}function F(n,t,r){return S(n,t)&&j(n,r)}var A=c(F);function W(n){return!!n===n}var I=c(W);function R(n){return"number"==typeof n}var q=c(R);function B(n){if(n){if(R(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return f(n,0);if("object"==typeof n)return f(Object.keys(n),0)}return!0}var G=c(B);function K(n){return Number.isNaN(n)}var X=c(K);function D(n){return!!O(n)&&0>Number(n)}var U=c(D),z=c(y);function J(n){return!!n}var L=c(J);function M(n,t){return O(n)&&O(t)&&Number(n)<Number(t)}function V(n,t){return t instanceof RegExp?t.test(n):!!y(t)&&new RegExp(t).test(n)}var Y=c(V);function H(n,t){return O(n)&&O(t)&&Number(n)===Number(t)}var Q=c(H);function Z(n,t){return y(n)&&y(t)&&n.startsWith(t)}var $=c(Z);function _(n,t){throw Error(o(t,n))}function nn(n){function t(t,i){var o,s,a=e();return t=r({},a||{},null!==(o=null==n?void 0:n(t,a))&&void 0!==o?o:t),o=u.ctx=Object.freeze(t),u.ancestry.unshift(o),i=i(o),u.ancestry.shift(),u.ctx=null!==(s=u.ancestry[0])&&void 0!==s?s:null,i}function e(){return u.ctx}var u={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=u.ctx)&&void 0!==t?t:_(o(n,"Context was used after it was closed"))}}}var tn=nn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:r(e,{parent:rn})}));function rn(){return null}function en(n,t){function r(r){var e=n[r],u=t[r];if(!(r=tn.run({value:e,set:!0,meta:{key:r}},(function(){return a(u,e)}))).pass)return{value:r}}for(var e in t){var u=r(e);if("object"==typeof u)return u.value}return s(!0)}var un=r({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:b,doesNotStartWith:$,endsWith:m,equals:N,greaterThan:w,greaterThanOrEquals:S,gt:w,gte:S,inside:x,isArray:P,isBetween:F,isBoolean:W,isEmpty:B,isEven:function(n){return!!O(n)&&0==n%2},isFalsy:L,isNaN:K,isNegative:D,isNotArray:T,isNotBetween:A,isNotBoolean:I,isNotEmpty:G,isNotNaN:X,isNotNull:g,isNotNumber:q,isNotNumeric:E,isNotString:z,isNotUndefined:h,isNull:v,isNumber:R,isNumeric:O,isOdd:function(n){return!!O(n)&&0!=n%2},isPositive:U,isString:y,isTruthy:J,isUndefined:d,lengthEquals:f,lengthNotEquals:l,lessThan:M,lessThanOrEquals:j,longerThan:p,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:M,lte:j,matches:V,notEquals:C,notInside:k,notMatches:Y,numberEquals:H,numberNotEquals:Q,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:Z},{allOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return o(u(t,(function(t,r){(t=a(t,n)).pass||r(t)})),s(!0))},anyOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return o(u(t,(function(t,r){(t=a(t,n)).pass&&r(t)})),s(!1))},noneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return o(u(t,(function(t,r){a(t,n).pass&&r(s(!1))})),s(!0))},oneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(p(e,1))return!1;(t=a(t,n)).pass&&e.push(t)})),s(f(e,1))},optional:function(n,t){return d(n)||null===n?s(!0):a(t,n)}},{shape:function(n,t){var r=en(n,t);if(!r.pass)return r;for(var e in n)if(!Object.prototype.hasOwnProperty.call(t,e))return s(!1);return s(!0)},loose:en,isArrayOf:function(n,t){return o(u(n,(function(n,r,e){(e=tn.run({value:n,set:!0,meta:{index:e}},(function(){return a(t,n)}))).pass||r(e)})),s(!0))}});function on(n){for(var t in un){var r=un[t];e(r)&&n(t,r)}}function sn(){return"function"==typeof Proxy}function an(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return W(n)||n&&W(n.pass)||_("Incorrect return value for rule: "+JSON.stringify(n)),W(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function cn(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=an.apply(void 0,t([tn.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!B(o.message))throw o.message;_("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!sn())return on((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=un[t])return r(u,n,t)}});return u}function fn(n){var r,e=[];return function n(a){return function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l=un[a];e.push((function(n){return an.apply(void 0,t([l.apply(void 0,t([n],c)),a,n],c))}));var p={run:function(n){return o(u(e,(function(t,e){var u,o=tn.run({value:n},(function(){return t(n)}));o.pass||e(s(!!o.pass,null!==(u=i(r,n,o.message))&&void 0!==u?u:o.message))})),s(!0))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return sn()?p=new Proxy(p,{get:function(t,r){return un[r]?n(r):t[r]}}):(on((function(t){p[t]=n(t)})),p)}}(n)}function ln(n){var t,r={};for(t in n)r[t]=vn.optional(n[t]);return r}var pn,vn=(pn=n({context:function(){return tn.useX()},extend:function(n){r(un,n)}},{partial:ln}),sn()?new Proxy(r(cn,pn),{get:function(n,t){return t in n?n[t]:un[t]?fn(t):void 0}}):(on((function(n){pn[n]=fn(n)})),pn)),gn=function(n){return function(){return""+n++}}(0);var dn=nn((function(n,t){return t?null:r({},{exclusion:{tests:{},groups:{}}},n)}));function hn(n,t){return!(!t||n.fieldName!==t)}function yn(n){function t(e,u){var i=t.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),r.length>n&&(r.length=n),u)}void 0===n&&(n=10);var r=[];return t.get=function(n){return r[r.findIndex((function(t){var r=t[0];return f(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},t}function mn(){return dn.useX().stateRef}function bn(){return mn().testObjects()}function Nn(n){var t=mn().testObjectsCursor()[0];return Cn(n=o(mn().prevTestObjects()[0][t],n)),n}function Cn(n){var t=mn().testObjectsCursor()[0],r=bn();n!==r[0][t]&&(0,r[1])((function(r){return(r=r.slice(0))[t]=n,r}))}function On(){(0,mn().testObjectsCursor()[1])((function(n){return n+1}))}function En(n){return!!mn().optionalFields()[0][n]}function wn(){return bn()[0].filter((function(n){return n.isPending()}))}function Sn(n){var t=wn();return!B(t)&&(n?t.some((function(t){return hn(t,n)})):G(t))}function xn(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function kn(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return i&&r.groupName!==i||o&&!hn(r,o)||"warnings"===t!=!!r.warns||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function Pn(n){return jn("errors",n)}function Tn(n){return jn("warnings",n)}function jn(n,t){return n=kn(n,bn()[0],{fieldName:t}),t?n[t]:n}function Fn(n,t){return n=Wn("errors",n,t),t?n[t]:n}function An(n,t){return n=Wn("warnings",n,t),t?n[t]:n}function Wn(n,t,r){return t||_("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),kn(n,bn()[0],{group:t,fieldName:r})}function In(n,t,r){return!(!n.hasFailures()||r&&!hn(n,r)||"warnings"===t!=!!n.warns)}function Rn(n){return Bn("errors",n)}function qn(n){return Bn("warnings",n)}function Bn(n,t){return bn()[0].some((function(r){return In(r,n,t)}))}function Gn(n,t){return Xn("errors",n,t)}function Kn(n,t){return Xn("warnings",n,t)}function Xn(n,t,r){return bn()[0].some((function(e){return t===e.groupName&&In(e,n,r)}))}function Dn(n,t){return!n.hasErrors(t)&&(!(B(bn()[0])||t&&B(n.tests[t])||G(wn().filter((function(n){return!(t&&!hn(n,t))&&!En(n.fieldName)}))))&&function(n){return bn()[0].every((function(t){return!!(n&&!hn(t,n)||En(t.fieldName))||t.isTested()}))}(t))}var Un=yn(20);function zn(){var n=bn()[0],t={stateRef:mn()};return Un([n],dn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return bn()[0].forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=xn(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=xn(n.groups[e],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:dn.bind(t,Pn),getErrorsByGroup:dn.bind(t,Fn),getWarnings:dn.bind(t,Tn),getWarningsByGroup:dn.bind(t,An),hasErrors:dn.bind(t,Rn),hasErrorsByGroup:dn.bind(t,Gn),hasWarnings:dn.bind(t,qn),hasWarningsByGroup:dn.bind(t,Kn),isValid:dn.bind(t,(function(n){return Dn(zn(),n)}))})})))}var Jn=yn(20);function Ln(){var n=bn()[0],t={stateRef:mn()};return Jn([n],dn.bind(t,(function(){return r({},zn(),{done:dn.bind(t,Yn)})})))}function Mn(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Vn(n){return!(Sn()&&(!n||Sn(n)))}function Yn(){function n(){return e(zn())}for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=(t=t.reverse())[0];return t=t[1],r=Ln(),Mn(e,t,r)?r:Vn(t)?(n(),r):(Hn(n,t),r)}function Hn(n,t){var r=dn.bind({},n);(0,mn().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Qn(n){return _n("only","tests",n)}function Zn(n){return _n("skip","tests",n)}function $n(n){var t=n.fieldName;n=n.groupName;var r=dn.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){n:{var i=dn.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(i,n))var o=!1===i[n];else{for(o in i)if(!0===i[o]){o=!0;break n}o=!1}}if(o)return!0;if(!0===r.groups[n])return!u&&(!!nt(e)||!1===e[t])}return!u&&nt(e)}function _n(n,t,r){var e=dn.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){y(r)&&(e.exclusion[t][r]="only"===n)}))}function nt(n){for(var t in n)if(!0===n[t])return!0;return!1}function tt(n){_('group initialization error. Expected "'+n+'" to be a string.',"group name must be a string")}Qn.group=function(n){return _n("only","groups",n)},Zn.group=function(n){return _n("skip","groups",n)};var rt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=gn(),this.warns=!1,this.status=et,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,d(this.message)&&y(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isCanceled()||(this.status=n)},n.prototype.setPending=function(){this.setStatus(at)},n.prototype.fail=function(){this.setStatus(this.warns?ot:it)},n.prototype.done=function(){this.isWarning()||this.isCanceled()||this.isFailing()||this.setStatus(st)},n.prototype.warn=function(){this.warns=!0},n.prototype.skip=function(){this.setStatus(ut)},n.prototype.cancel=function(){this.setStatus(ct),function(n){(0,bn()[1])((function(t){var r=t.indexOf(n);return-1!==r&&t.splice(r,1),[].concat(t)}))}(this)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===at},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isFailing=function(){return this.status===it},n.prototype.isCanceled=function(){return this.status===ct},n.prototype.isSkipped=function(){return this.status===ut},n.prototype.isPassing=function(){return this.status===st},n.prototype.isWarning=function(){return this.status===ot},n}(),et="UNTESTED",ut="SKIPPED",it="FAILED",ot="WARNING",st="PASSING",at="PENDING",ct="CANCELED";function ft(n,t){n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&t!==n&&n.cancel()}function lt(n){return n.forEach((function(n){return n()}))}function pt(n){var t=n.asyncTest,r=n.message;if(t&&e(t.then)){var u=mn(),i=dn.bind({stateRef:u},(function(){if(n.done(),!n.isCanceled()){var t=n.fieldName,r=mn().testCallbacks()[0].fieldCallbacks;t&&!Sn(t)&&Array.isArray(r[t])&&lt(r[t]),t=mn().testCallbacks()[0].doneCallbacks,Sn()||lt(t)}}));u=dn.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=y(t)?t:r,n.fail(),(0,bn()[1])((function(n){return n.slice(0)})),i())}));try{t.then(i,u)}catch(n){u()}}}function vt(n){return dn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,d(n.message)&&y(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}function gt(n){var t;(t=n)&&(t=(t=n.asyncTest)&&e(t.then)),t&&(n.setPending(),pt(n))}function dt(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var u=dn.useX();if(u=Nn(r=new rt(n,t,{message:r,groupName:null==u?void 0:u.groupName})),$n(r))return r.skip(),On(),u;if(ft(u,r),Cn(r),On(),!e(t))return r;t=vt(r);try{t&&e(t.then)?(r.asyncTest=t,r.setPending(),pt(r)):r.done()}catch(n){_("Your test function "+r.fieldName+" returned "+JSON.stringify(t)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}return r}var ht=r(dt,{each:function(n){return function(r){return Array.isArray(r)||_("test.each: Expected table to be an array."),function(e){for(var u=[],o=1;o<arguments.length;o++)u[o-1]=arguments[o];var s=(u=u.reverse())[0],a=u[1];return r.map((function(r){return r=[].concat(r),n(i.apply(void 0,t([e],r)),i.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}}}(dt),memo:function(n){var t=yn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=mn().suiteId()[0];var i=mn().testObjectsCursor()[0],o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),null===(u=t.get(e))?t(e,(function(){return n(r,s,o)})):(u=Nn(e=u[1]),$n(e)?(On(),u):(ft(u,e),Cn(e),On(),gt(e),e))}}(dt)}),yt="3.3.0-dev-549cb1";function mt(n){e(n)||_("Suite initialization error. Expected `tests` to be a function.");var t=[],u=function(n){function t(n,t){return u.references.push(),r(n,i(t)),function(){return[u.references[n],function(t){return r(n,i(t,u.references[n]))}]}}function r(t,r){var i=u.references[t];u.references[t]=r,e(t=o[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){u.references=[],o.forEach((function(n,r){return t(r,n[0])}))}}}((function(){t.forEach((function(n){return n({suiteState:o,type:"suiteStateUpdate"})}))})),o=function(n,t){var r=t.suiteId;return{optionalFields:n.registerStateKey((function(){return{}})),prevTestObjects:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return r})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]})),testObjectsCursor:n.registerStateKey((function(){return 0}))}}(u,{suiteId:gn()});return r(dn.bind({stateRef:o},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=bn()[0];return r=mn().prevTestObjects()[1],u.reset(),r((function(){return e})),n.apply(void 0,t),Ln()})),{get:dn.bind({stateRef:o},zn),remove:dn.bind({stateRef:o},(function(n){var t=bn()[0];[].concat(t).forEach((function(t){hn(t,n)&&t.cancel()}))})),reset:u.reset,subscribe:function(n){e(n)&&(t.push(n),n({type:"suiteSubscribeInit",suiteState:o}))}})}function bt(n,t){y(n)||tt(n),e(t)||tt(t),dn.bind({groupName:n},t)()}function Nt(n){(0,mn().optionalFields()[1])((function(t){return[].concat(n).forEach((function(n){t[n]=!0})),t}))}function Ct(n,t){dn.run({skipped:i(n)},(function(){return t()}))}function Ot(){var n=dn.useX("warn hook called outside of a running suite.");n.currentTest||_("warn called outside of a test."),n.currentTest.warn()}export{yt as VERSION,mt as create,vn as enforce,bt as group,Qn as only,Nt as optional,Zn as skip,Ct as skipWhen,ht as test,Ot as warn};
1
+ function n(){return n=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n},n.apply(this,arguments)}function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}var r=Object.assign;function e(n){return"function"==typeof n}function u(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function i(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return e(n)?n.apply(void 0,t):n}function o(n,t){var r;return null!==(r=i(n))&&void 0!==r?r:t}function s(n,t){return n={pass:n},t&&(n.message=t),n}function a(n,t){try{return n.run(t)}catch(n){return s(!1)}}function c(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function f(n,t){return n.length===Number(t)}var l=c(f);function p(n,t){return n.length>Number(t)}function v(n){return null===n}var g=c(v);function d(n){return void 0===n}var h=c(d);function y(n){return String(n)===n}function m(n,t){return y(n)&&y(t)&&n.endsWith(t)}var b=c(m);function N(n,t){return n===t}var E=c(N);function C(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var O=c(C);function w(n,t){return C(n)&&C(t)&&Number(n)>Number(t)}function T(n,t){return C(n)&&C(t)&&Number(n)>=Number(t)}function S(n,t){return!!(Array.isArray(t)||y(t)&&y(n))&&-1!==t.indexOf(n)}var k=c(S);function x(n){return!!Array.isArray(n)}var P=c(x);function j(n,t){return C(n)&&C(t)&&Number(n)<=Number(t)}function F(n,t,r){return T(n,t)&&j(n,r)}var A=c(F);function W(n){return!!n===n}var I=c(W);function R(n){return"number"==typeof n}var q=c(R);function B(n){if(n){if(R(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return f(n,0);if("object"==typeof n)return f(Object.keys(n),0)}return!0}var D=c(B);function G(n){return Number.isNaN(n)}var X=c(G);function K(n){return!!C(n)&&0>Number(n)}var L=c(K),U=c(y);function M(n){return!!n}var _=c(M);function J(n,t){return C(n)&&C(t)&&Number(n)<Number(t)}function z(n,t){return t instanceof RegExp?t.test(n):!!y(t)&&new RegExp(t).test(n)}var V=c(z);function Y(n,t){return C(n)&&C(t)&&Number(n)===Number(t)}var H=c(Y);function Q(n,t){return y(n)&&y(t)&&n.startsWith(t)}var Z=c(Q);function $(n,t){throw Error(o(t,n))}function nn(n){function t(t,i){var o,s,a=e();return t=r({},a||{},null!==(o=null==n?void 0:n(t,a))&&void 0!==o?o:t),o=u.ctx=Object.freeze(t),u.ancestry.unshift(o),i=i(o),u.ancestry.shift(),u.ctx=null!==(s=u.ancestry[0])&&void 0!==s?s:null,i}function e(){return u.ctx}var u={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=u.ctx)&&void 0!==t?t:$(o(n,"Context was used after it was closed"))}}}var tn=nn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:r(e,{parent:rn})}));function rn(){return null}function en(n,t){function r(r){var e=n[r],u=t[r];if(!(r=tn.run({value:e,set:!0,meta:{key:r}},(function(){return a(u,e)}))).pass)return{value:r}}for(var e in t){var u=r(e);if("object"==typeof u)return u.value}return s(!0)}var un=r({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:b,doesNotStartWith:Z,endsWith:m,equals:N,greaterThan:w,greaterThanOrEquals:T,gt:w,gte:T,inside:S,isArray:x,isBetween:F,isBoolean:W,isEmpty:B,isEven:function(n){return!!C(n)&&0==n%2},isFalsy:_,isNaN:G,isNegative:K,isNotArray:P,isNotBetween:A,isNotBoolean:I,isNotEmpty:D,isNotNaN:X,isNotNull:g,isNotNumber:q,isNotNumeric:O,isNotString:U,isNotUndefined:h,isNull:v,isNumber:R,isNumeric:C,isOdd:function(n){return!!C(n)&&0!=n%2},isPositive:L,isString:y,isTruthy:M,isUndefined:d,lengthEquals:f,lengthNotEquals:l,lessThan:J,lessThanOrEquals:j,longerThan:p,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:J,lte:j,matches:z,notEquals:E,notInside:k,notMatches:V,numberEquals:Y,numberNotEquals:H,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:Q},{allOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return o(u(t,(function(t,r){(t=a(t,n)).pass||r(t)})),s(!0))},anyOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return o(u(t,(function(t,r){(t=a(t,n)).pass&&r(t)})),s(!1))},noneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return o(u(t,(function(t,r){a(t,n).pass&&r(s(!1))})),s(!0))},oneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(p(e,1))return!1;(t=a(t,n)).pass&&e.push(t)})),s(f(e,1))},optional:function(n,t){return d(n)||null===n?s(!0):a(t,n)}},{shape:function(n,t){var r=en(n,t);if(!r.pass)return r;for(var e in n)if(!Object.prototype.hasOwnProperty.call(t,e))return s(!1);return s(!0)},loose:en,isArrayOf:function(n,t){return o(u(n,(function(n,r,e){(e=tn.run({value:n,set:!0,meta:{index:e}},(function(){return a(t,n)}))).pass||r(e)})),s(!0))}});function on(n){for(var t in un){var r=un[t];e(r)&&n(t,r)}}function sn(){return"function"==typeof Proxy}function an(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return W(n)||n&&W(n.pass)||$("Incorrect return value for rule: "+JSON.stringify(n)),W(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u,!1)))}function cn(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=an.apply(void 0,t([tn.run({value:n},(function(){return e.apply(void 0,t([n],i,!1))})),u,n],i,!1))).pass){if(!B(o.message))throw o.message;$("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!sn())return on((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=un[t])return r(u,n,t)}});return u}function fn(n){var r,e=[];return function n(a){return function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l=un[a];e.push((function(n){return an.apply(void 0,t([l.apply(void 0,t([n],c,!1)),a,n],c,!1))}));var p={run:function(n){return o(u(e,(function(t,e){var u,o=tn.run({value:n},(function(){return t(n)}));o.pass||e(s(!!o.pass,null!==(u=i(r,n,o.message))&&void 0!==u?u:o.message))})),s(!0))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return sn()?p=new Proxy(p,{get:function(t,r){return un[r]?n(r):t[r]}}):(on((function(t){p[t]=n(t)})),p)}}(n)}function ln(n){var t,r={};for(t in n)r[t]=vn.optional(n[t]);return r}var pn,vn=(pn=n({context:function(){return tn.useX()},extend:function(n){r(un,n)}},{partial:ln}),sn()?new Proxy(r(cn,pn),{get:function(n,t){return t in n?n[t]:un[t]?fn(t):void 0}}):(on((function(n){pn[n]=fn(n)})),pn)),gn=function(n){return function(){return""+n++}}(0);var dn=nn((function(n,t){return t?null:r({},{exclusion:{tests:{},groups:{}}},n)}));function hn(n,t){return!(!t||n.fieldName!==t)}function yn(n){function t(e,u){var i=t.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),r.length>n&&(r.length=n),u)}void 0===n&&(n=10);var r=[];return t.invalidate=function(n){var t=r.findIndex((function(t){var r=t[0];return f(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<t&&r.splice(t,1)},t.get=function(n){return r[r.findIndex((function(t){var r=t[0];return f(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},t}function mn(){return dn.useX().stateRef}function bn(){return mn().testObjects()}function Nn(n){var t=mn().testObjectsCursor()[0],r=bn();n!==r[0][t]&&(0,r[1])((function(r){return(r=r.slice(0))[t]=n,r}))}function En(){(0,mn().testObjectsCursor()[1])((function(n){return n+1}))}function Cn(n){return!!mn().optionalFields()[0][n]}function On(){return bn()[0].filter((function(n){return n.isPending()}))}function wn(n){var t=On();return!B(t)&&(n?t.some((function(t){return hn(t,n)})):D(t))}function Tn(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function Sn(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return i&&r.groupName!==i||o&&!hn(r,o)||"warnings"===t!=!!r.warns||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function kn(n){return Pn("errors",n)}function xn(n){return Pn("warnings",n)}function Pn(n,t){return n=Sn(n,bn()[0],{fieldName:t}),t?n[t]:n}function jn(n,t){return n=An("errors",n,t),t?n[t]:n}function Fn(n,t){return n=An("warnings",n,t),t?n[t]:n}function An(n,t,r){return t||$("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),Sn(n,bn()[0],{group:t,fieldName:r})}function Wn(n,t,r){return!(!n.hasFailures()||r&&!hn(n,r)||"warnings"===t!=!!n.warns)}function In(n){return qn("errors",n)}function Rn(n){return qn("warnings",n)}function qn(n,t){return bn()[0].some((function(r){return Wn(r,n,t)}))}function Bn(n,t){return Gn("errors",n,t)}function Dn(n,t){return Gn("warnings",n,t)}function Gn(n,t,r){return bn()[0].some((function(e){return t===e.groupName&&Wn(e,n,r)}))}function Xn(n,t){return!n.hasErrors(t)&&(!(B(bn()[0])||t&&B(n.tests[t])||D(On().filter((function(n){return!(t&&!hn(n,t))&&!Cn(n.fieldName)}))))&&function(n){return bn()[0].every((function(t){return!!(n&&!hn(t,n)||Cn(t.fieldName))||t.isTested()}))}(t))}var Kn=yn(20);function Ln(){var n=bn()[0],t={stateRef:mn()};return Kn([n],dn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return bn()[0].forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=Tn(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=Tn(n.groups[e],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:dn.bind(t,kn),getErrorsByGroup:dn.bind(t,jn),getWarnings:dn.bind(t,xn),getWarningsByGroup:dn.bind(t,Fn),hasErrors:dn.bind(t,In),hasErrorsByGroup:dn.bind(t,Bn),hasWarnings:dn.bind(t,Rn),hasWarningsByGroup:dn.bind(t,Dn),isValid:dn.bind(t,(function(n){return Xn(Ln(),n)}))})})))}var Un,Mn=yn(20);function _n(){var n=bn()[0],t={stateRef:mn()};return Mn([n],dn.bind(t,(function(){return r({},Ln(),{done:dn.bind(t,Vn)})})))}function Jn(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function zn(n){return!(wn()&&(!n||wn(n)))}function Vn(){function n(){return e(Ln())}for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=(t=t.reverse())[0];return t=t[1],r=_n(),Jn(e,t,r)?r:zn(t)?(n(),r):(Yn(n,t),r)}function Yn(n,t){var r=dn.bind({},n);(0,mn().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Hn(n){return n.forEach((function(n){return n()}))}function Qn(){var n=dn.useX();return n.bus||$(),n.bus}function Zn(n){return nt("only","tests",n)}function $n(n){return nt("skip","tests",n)}function nt(n,t,r){var e=dn.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){y(r)&&(e.exclusion[t][r]="only"===n)}))}function tt(n){for(var t in n)if(!0===n[t])return!0;return!1}function rt(n){$("Wrong arguments passed to group. Group "+n+".")}(Un||(Un={})).TEST_COMPLETED="test_completed",Zn.group=function(n){return nt("only","groups",n)},$n.group=function(n){return nt("skip","groups",n)};var et=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=gn(),this.warns=!1,this.status=ut,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,d(this.message)&&y(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isCanceled()||(this.status=n)},n.prototype.setPending=function(){this.setStatus(ct)},n.prototype.fail=function(){this.setStatus(this.warns?st:ot)},n.prototype.done=function(){this.isWarning()||this.isCanceled()||this.isFailing()||this.setStatus(at)},n.prototype.warn=function(){this.warns=!0},n.prototype.skip=function(){this.setStatus(it)},n.prototype.cancel=function(){this.setStatus(ft),function(n){(0,bn()[1])((function(t){var r=t.indexOf(n);return-1!==r&&t.splice(r,1),[].concat(t)}))}(this)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===ct},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isUntested=function(){return this.status===ut},n.prototype.isFailing=function(){return this.status===ot},n.prototype.isCanceled=function(){return this.status===ft},n.prototype.isSkipped=function(){return this.status===it},n.prototype.isPassing=function(){return this.status===at},n.prototype.isWarning=function(){return this.status===st},n}(),ut="UNTESTED",it="SKIPPED",ot="FAILED",st="WARNING",at="PASSING",ct="PENDING",ft="CANCELED";function lt(n){var t=n.asyncTest,r=n.message;if(t&&e(t.then)){var u=Qn().emit,i=mn(),o=dn.bind({stateRef:i},(function(){u(Un.TEST_COMPLETED,n)}));i=dn.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=y(t)?t:r,n.fail(),(0,bn()[1])((function(n){return n.slice(0)})),o())}));try{t.then(o,i)}catch(n){i()}}}function pt(n){var t=mn().testObjectsCursor()[0],r=mn().prevTestObjects()[0];if(Nn(t=o(r[t],n)),function(n){var t=n.fieldName;n=n.groupName;var r=dn.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){n:{var i=dn.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(i,n))var o=!1===i[n];else{for(o in i)if(!0===i[o]){o=!0;break n}o=!1}}if(o)return!0;if(!0===r.groups[n])return!(u||!tt(e)&&!1!==e[t])}return!u&&tt(e)}(n))return n.skip(),En(),t;if(n!==t&&t.fieldName===n.fieldName&&t.groupName===n.groupName&&t.isPending()&&t.cancel(),Nn(n),En(),n.isUntested()){t=Qn().emit,r=function(n){return dn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,d(n.message)&&y(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{r&&e(r.then)?(n.asyncTest=r,n.setPending(),lt(n)):t(Un.TEST_COMPLETED,n)}catch(t){$("Your test function "+n.fieldName+" returned "+JSON.stringify(r)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}else(t=n.asyncTest)&&e(t.then)&&(n.setPending(),lt(n));return n}function vt(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var e=dn.useX();return pt(t=new et(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var gt=r(vt,{each:function(n){return function(r){return Array.isArray(r)||$("test.each: Expected table to be an array."),function(e){for(var u=[],o=1;o<arguments.length;o++)u[o-1]=arguments[o];var s=(u=u.reverse())[0],a=u[1];return r.map((function(r){return r=[].concat(r),n(i.apply(void 0,t([e],r,!1)),i.apply(void 0,t([a],r,!1)),(function(){return s.apply(void 0,r)}))}))}}}(vt),memo:function(n){var t=yn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=mn().suiteId()[0];var i=mn().testObjectsCursor()[0],o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),null===(u=t.get(e))?t(e,(function(){return n(r,s,o)})):u[1].isCanceled()?(t.invalidate(e),t(e,(function(){return n(r,s,o)}))):pt(u[1])}}(vt)}),dt="4.0.0-dev-deabb8";function ht(n){e(n)||$("Suite initialization error. Expected `tests` to be a function.");var t=function(){var n=function(){var n={};return{emit:function(t,r){n[t]&&n[t].forEach((function(n){n(r)}))},on:function(t,r){return n[t]||(n[t]=[]),n[t].push(r),{off:function(){n[t]=n[t].filter((function(n){return n!==r}))}}}}}();return n.on(Un.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=mn().testCallbacks()[0].fieldCallbacks;n&&!wn(n)&&Array.isArray(t[n])&&Hn(t[n]),n=mn().testCallbacks()[0].doneCallbacks,wn()||Hn(n)}})),n}(),u=function(n){function t(n,t){return u.references.push(),r(n,i(t)),function(){return[u.references[n],function(t){return r(n,i(t,u.references[n]))}]}}function r(t,r){var i=u.references[t];u.references[t]=r,e(t=o[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){u.references=[],o.forEach((function(n,r){return t(r,n[0])}))}}}(),o=function(n,t){var r=t.suiteId;return{optionalFields:n.registerStateKey((function(){return{}})),prevTestObjects:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return r})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]})),testObjectsCursor:n.registerStateKey((function(){return 0}))}}(u,{suiteId:gn()});return r(dn.bind({stateRef:o,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=bn()[0];return r=mn().prevTestObjects()[1],u.reset(),r((function(){return e})),n.apply(void 0,t),_n()})),{get:dn.bind({stateRef:o},Ln),remove:dn.bind({stateRef:o},(function(n){var t=bn()[0];[].concat(t).forEach((function(t){hn(t,n)&&t.cancel()}))})),reset:u.reset})}function yt(n,t){y(n)||rt("name must be a string"),e(t)||rt("callback must be a function"),dn.run({groupName:n},t)}function mt(n){(0,mn().optionalFields()[1])((function(t){return[].concat(n).forEach((function(n){t[n]=!0})),t}))}function bt(n,t){dn.run({skipped:i(n)},(function(){return t()}))}function Nt(){var n=dn.useX("warn hook called outside of a running suite.");n.currentTest||$("warn called outside of a test."),n.currentTest.warn()}export{dt as VERSION,ht as create,vn as enforce,yt as group,Zn as only,mt as optional,$n as skip,bt as skipWhen,gt as test,Nt as warn};