vest 4.0.0-dev-366a8b → 4.0.0-dev-8851ff

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## 4.0.0 - 2021-10-23
7
+ ## 4.0.0 - 2021-10-25
8
8
  ### Changed or removed
9
9
  - f5ba507 major(context): used named export in context (ealush)
10
10
  - eaed68f breaking(vest, enforce): prepare next major (ealush)
@@ -19,7 +19,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
19
19
  - 990c68f feat(n4s): context propagation within enforce (undefined)
20
20
 
21
21
  ### Fixed and improved
22
- - 366a8bc isolate (ealush)
22
+ - 8851ff5 patch(vest): Add isolate module for containing re-orders (ealush)
23
23
  - 0593c0f patch(vest): refresh tests after cancel (ealush)
24
24
  - e915b53 patch: add cursor util (ealush)
25
25
  - f54ae8b patch(vest): move cursor into context (ealush)
@@ -885,7 +885,7 @@ function createStateRef(state, _a) {
885
885
  }); }),
886
886
  testObjects: state.registerStateKey(function (prev) {
887
887
  return {
888
- prev: defaultTo(prev === null || prev === void 0 ? void 0 : prev.current, []),
888
+ prev: (prev ? prev.current : []),
889
889
  current: []
890
890
  };
891
891
  })
@@ -949,23 +949,21 @@ var ctx = createContext(function (ctxRef, parentContext) {
949
949
  }, ctxRef);
950
950
  });
951
951
 
952
- function map(array, callback) {
953
- return array.map(function (item) {
954
- if (isArray(item)) {
955
- return map(item, callback);
956
- }
957
- return callback(item);
958
- });
959
- }
960
- function filter(array, predicate) {
952
+ // This is sort of a map/filter in one function.
953
+ // Normally, behaves like a nested-array map
954
+ // Returning `null` will drop the element from the array
955
+ function transform(array, cb) {
961
956
  var res = [];
962
957
  for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
963
958
  var v = array_1[_i];
964
959
  if (isArray(v)) {
965
- res.push(filter(v, predicate));
960
+ res.push(transform(v, cb));
966
961
  }
967
- else if (predicate(v)) {
968
- res.push(v);
962
+ else {
963
+ var output = cb(v);
964
+ if (isNotNull(output)) {
965
+ res.push(output);
966
+ }
969
967
  }
970
968
  }
971
969
  return res;
@@ -986,11 +984,6 @@ function flatten(values) {
986
984
  return asArray(acc).concat(value);
987
985
  }, []);
988
986
  }
989
- function removeAtPath(array, path) {
990
- var current = getCurrent(array, path);
991
- current.splice(path[last(path)], 1);
992
- return array;
993
- }
994
987
  function getCurrent(array, path) {
995
988
  var current = array;
996
989
  for (var _i = 0, _a = path.slice(0, -1); _i < _a.length; _i++) {
@@ -1081,7 +1074,9 @@ function useSetTests(handler) {
1081
1074
  // Derived state
1082
1075
  function useAllIncomplete() {
1083
1076
  var current = useTestObjects()[0].current;
1084
- return flatten(filter(current, function (testObject) { return testObject.isPending(); }));
1077
+ return flatten(transform(current, function (testObject) {
1078
+ return testObject.isPending() ? testObject : null;
1079
+ }));
1085
1080
  }
1086
1081
  function useOmittedFields() {
1087
1082
  var testObjects = useTestsFlat();
@@ -1155,7 +1150,7 @@ function omitOptionalTests() {
1155
1150
  }
1156
1151
  var shouldOmit = {};
1157
1152
  useSetTests(function (tests) {
1158
- return map(tests, function (testObject) {
1153
+ return transform(tests, function (testObject) {
1159
1154
  var fieldName = testObject.fieldName;
1160
1155
  if (shouldOmit.hasOwnProperty(fieldName)) {
1161
1156
  omit(testObject);
@@ -1531,7 +1526,9 @@ function deferDoneCallback(doneCallback, fieldName) {
1531
1526
  * Removes test object from suite state
1532
1527
  */
1533
1528
  function removeTestFromState (testObject) {
1534
- useSetTests(function (tests) { return filter(tests, function (test) { return testObject !== test; }); });
1529
+ useSetTests(function (tests) {
1530
+ return transform(tests, function (test) { return (testObject !== test ? test : null); });
1531
+ });
1535
1532
  }
1536
1533
 
1537
1534
  function createBus() {
@@ -2019,7 +2016,16 @@ function registerTest(testObject) {
2019
2016
  }
2020
2017
  }
2021
2018
 
2022
- // eslint-disable-next-line max-statements
2019
+ /**
2020
+ * This module serves as the "collision detection" mechanism for Vest.
2021
+ * It is used to ensure that tests are not called in a different order than
2022
+ * they were called in the previous run.
2023
+ * If they are, it will throw a deferred error unless explicitly allowed.
2024
+ *
2025
+ * For now it seems pretty safe, and it covers most common use cases, but it can
2026
+ * be improved in the future both in terms of performance and scenarios it covers.
2027
+ */
2028
+ // eslint-disable-next-line max-statements, max-lines-per-function
2023
2029
  function useTestAtCursor(newTestObject) {
2024
2030
  var _a = useTestObjects(), testObjects = _a[0], setTestObjects = _a[1];
2025
2031
  var prevTests = testObjects.prev;
@@ -2031,16 +2037,14 @@ function useTestAtCursor(newTestObject) {
2031
2037
  if (shouldPurgePrevTest(prevTest, newTestObject)) {
2032
2038
  throwTestOrderError(prevTest, newTestObject);
2033
2039
  // Here we handle just the omission of tests in the middle of the test suite.
2034
- // We need to also handle a case in which tests are added in between other tests,
2035
- // at the moment all we can do is just remove tests until we find a matching test.
2040
+ // We need to also handle a case in which tests are added in between other tests.
2041
+ // At the moment all we can do is just splice the tests out of the array when this happens.
2036
2042
  // A viable solution would be to use something like React's key prop to identify tests regardless
2037
2043
  // of their position in the suite. https://reactjs.org/docs/lists-and-keys.html#keys
2038
- while (shouldPurgePrevTest(prevTest, newTestObject)) {
2039
- var testObjects_1 = useTestObjects()[0];
2040
- prevTests = removeAtPath(testObjects_1.prev, usePath());
2041
- prevTest = useGetTestAtCursor(prevTests);
2042
- }
2043
- // We actually don't mind mutating the state directly (as we do above). There is no harm in it
2044
+ var current = getCurrent(prevTests, usePath());
2045
+ var cursorAt = useCursorAt();
2046
+ current.splice(cursorAt);
2047
+ // We actually don't mind mutating the state directly (as can be seen above). There is no harm in it
2044
2048
  // since we're only touching the "prev" state. The reason we still use the setter function is
2045
2049
  // to prevent future headaches if we ever do need to rely on prev-state immutability.
2046
2050
  setTestObjects(function (_a) {
@@ -2050,6 +2054,8 @@ function useTestAtCursor(newTestObject) {
2050
2054
  current: current
2051
2055
  });
2052
2056
  });
2057
+ // Need to see if this has any effect at all.
2058
+ prevTest = null;
2053
2059
  }
2054
2060
  var nextTest = defaultTo(prevTest, newTestObject);
2055
2061
  useSetTestAtCursor(nextTest);
@@ -2072,7 +2078,7 @@ function throwTestOrderError(prevTest, newTestObject) {
2072
2078
  if (shouldAllowReorder()) {
2073
2079
  return;
2074
2080
  }
2075
- throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.fieldName + "\n This usually happens when you conditionally call your tests using if/else.\n This might lead to unexpected validation results.\n Replacing if/else with skipWhen solves these issues.");
2081
+ throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.fieldName + "\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.");
2076
2082
  }
2077
2083
 
2078
2084
  function registerPrevRunTest(testObject) {
@@ -2172,7 +2178,7 @@ var test = assign(testBase, {
2172
2178
  memo: bindTestMemo(testBase)
2173
2179
  });
2174
2180
 
2175
- var VERSION = "4.0.0-dev-366a8b";
2181
+ var VERSION = "4.0.0-dev-8851ff";
2176
2182
 
2177
2183
  exports.VERSION = VERSION;
2178
2184
  exports.create = create;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(){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(){return s(!1)}function f(){return s(!0)}function c(n){return o(n,a())}function l(n){return o(n,f())}function p(n,t){try{return n.run(t)}catch(n){return a()}}function v(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){(t=p(t,n)).pass||r(t)})))}function d(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return c(u(t,(function(t,r){(t=p(t,n)).pass&&r(t)})))}function g(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){p(t,n).pass&&r(a())})))}function h(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function m(n,t){return n.length===Number(t)}var y=h(m);function N(n,t){return n.length>Number(t)}function b(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(N(e,1))return!1;(t=p(t,n)).pass&&e.push(t)})),s(m(e,1))}function E(n){return null===n}var C=h(E);function T(n){return void 0===n}var S=h(T);function O(n,t){return T(n)||E(n)?f():p(t,n)}function x(n){return String(n)===n}function w(n,t){return x(n)&&x(t)&&n.endsWith(t)}var P=h(w);function k(n,t){return n===t}var F=h(k);function I(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var A=h(I);function W(n,t){return I(n)&&I(t)&&Number(n)>Number(t)}function R(n,t){return I(n)&&I(t)&&Number(n)>=Number(t)}function U(n){return!!Array.isArray(n)}var X=h(U);function D(n,t){return!!(U(t)||x(t)&&x(n))&&-1!==t.indexOf(n)}var L=h(D);function G(n,t){return I(n)&&I(t)&&Number(n)<=Number(t)}function j(n,t,r){return R(n,t)&&G(n,r)}var q=h(j);function B(n){return x(n)&&!n.trim()}var _=h(B);function K(n){return!!n===n}var H=h(K);function M(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function J(n){return"number"==typeof n}var V=h(J);function z(n){if(n){if(J(n))return 0===n;if(M(n,"length"))return m(n,0);if("object"==typeof n)return m(Object.keys(n),0)}return!0}var Y=h(z),Q=function(n){return!!I(n)&&0==n%2};function Z(n){return Number.isNaN(n)}var $=h(Z);function nn(n){return!!I(n)&&0>Number(n)}var tn=h(nn),rn=function(n){return!!I(n)&&0!=n%2},en=h(x);function un(n){return!!n}var on=h(un);function sn(n,t){return I(n)&&I(t)&&Number(n)<Number(t)}function an(n,t){return n.length>=Number(t)}function fn(n,t){return t instanceof RegExp?t.test(n):!!x(t)&&new RegExp(t).test(n)}var cn=h(fn);function ln(n,t){return I(n)&&I(t)&&Number(n)===Number(t)}var pn=h(ln);function vn(n,t){try{return t(n)}catch(n){return!1}}function dn(n,t){return n.length<Number(t)}function gn(n,t){return n.length<=Number(t)}function hn(n,t){return x(n)&&x(t)&&n.startsWith(t)}var mn=h(hn);function yn(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:yn(o(n,"Context was used after it was closed"))}}}var bn=Nn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:r(e,{parent:En})}));function En(){return null}function Cn(n,t){return l(u(n,(function(n,r,e){(e=bn.run({value:n,set:!0,meta:{index:e}},(function(){return p(t,n)}))).pass||r(e)})))}function Tn(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=bn.run({value:e,set:!0,meta:{key:r}},(function(){return p(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return f()}function Sn(n,t){var r=Tn(n,t);if(!r.pass)return r;for(var e in n)if(!M(t,e))return a();return f()}var On=r({condition:vn,doesNotEndWith:P,doesNotStartWith:mn,endsWith:w,equals:k,greaterThan:W,greaterThanOrEquals:R,gt:W,gte:R,inside:D,isArray:U,isBetween:j,isBlank:B,isBoolean:K,isEmpty:z,isEven:Q,isFalsy:on,isNaN:Z,isNegative:nn,isNotArray:X,isNotBetween:q,isNotBlank:_,isNotBoolean:H,isNotEmpty:Y,isNotNaN:$,isNotNull:C,isNotNumber:V,isNotNumeric:A,isNotString:en,isNotUndefined:S,isNull:E,isNumber:J,isNumeric:I,isOdd:rn,isPositive:tn,isString:x,isTruthy:un,isUndefined:T,lengthEquals:m,lengthNotEquals:y,lessThan:sn,lessThanOrEquals:G,longerThan:N,longerThanOrEquals:an,lt:sn,lte:G,matches:fn,notEquals:F,notInside:L,notMatches:cn,numberEquals:ln,numberNotEquals:pn,shorterThan:dn,shorterThanOrEquals:gn,startsWith:hn},{allOf:v,anyOf:d,noneOf:g,oneOf:b,optional:O},{shape:Sn,loose:Tn,isArrayOf:Cn});function xn(n){return On[n]}function wn(n){for(var t in On){var r=xn(t);e(r)&&n(t,r)}}function Pn(){return"function"==typeof Proxy}function kn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return Fn(n),K(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function Fn(n){K(n)||n&&K(n.pass)||yn("Incorrect return value for rule: "+JSON.stringify(n))}function In(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=kn.apply(void 0,t([bn.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!z(o.message))throw o.message;yn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!Pn())return wn((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=xn(t))return r(u,n,t)}});return u}function An(n){var r,e=[];return function n(o){return function(){for(var a=[],f=0;f<arguments.length;f++)a[f]=arguments[f];var c=xn(o);e.push((function(n){return kn.apply(void 0,t([c.apply(void 0,t([n],a)),o,n],a))}));var p={run:function(n){return l(u(e,(function(t,e){var u,o=bn.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))})))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return Pn()?p=new Proxy(p,{get:function(t,r){return xn(r)?n(r):t[r]}}):(wn((function(t){p[t]=n(t)})),p)}}(n)}function Wn(n){var t,r={};for(t in n)r[t]=Xn.optional(n[t]);return r}var Rn,Un,Xn=(Rn=n({context:function(){return bn.useX()},extend:function(n){r(On,n)}},{partial:Wn}),Pn()?new Proxy(r(In,Rn),{get:function(n,t){return t in n?n[t]:xn(t)?An(t):void 0}}):(wn((function(n){Rn[n]=An(n)})),Rn)),Dn=function(n){return function(){return""+n++}}(0);function Ln(n){return[].concat(n)}function Gn(n){return(n=Ln(n))[n.length-1]}function jn(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return Gn(t)},getCursor:function(){return Ln(t)},next:function(){return t[t.length-1]++,Gn(t)},removeLevel:function(){t.pop()},reset:n}}!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.GROUP=4]="GROUP"}(Un||(Un={}));var qn=Nn((function(n,t){return t?null:r({},{isolate:{type:Un.DEFAULT},testCursor:jn(),exclusion:{tests:{},groups:{}}},n)}));function Bn(n,t){return n.map((function(n){return U(n)?Bn(n,t):t(n)}))}function _n(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];U(u)?r.push(_n(u,t)):t(u)&&r.push(u)}return r}function Kn(n,t,r){return Jn(n,t)[Gn(t)]=r,n}function Hn(n){return Ln(n).reduce((function(n,t){return U(t)?n.concat(Hn(t)):Ln(n).concat(t)}),[])}function Mn(n,t){return Jn(n,t).splice(t[Gn(t)],1),n}function Jn(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=o(n[e],[]),n=n[e]}return n}function Vn(n){void 0===n&&(n=1);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),N(t,n)&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function zn(){return qn.useX().stateRef}function Yn(){return zn().suiteId()}function Qn(){return zn().testCallbacks()}function Zn(){return zn().optionalFields()}function $n(){return zn().testObjects()}function nt(){(0,$n()[1])((function(n){return{prev:n.prev,current:Ln(n.current)}}))}function tt(n){(0,$n()[1])((function(t){return{prev:t.prev,current:Ln(n(t.current))}}))}function rt(){return Hn(_n($n()[0].current,(function(n){return n.isPending()})))}var et=Vn();function ut(){var n=$n()[0].current;return et([n],(function(){return Hn(n)}))}function it(){return qn.useX().testCursor.getCursor()}function ot(){return qn.useX().testCursor.cursorAt()}function st(){return qn.useX().testCursor.next()}function at(n,t){if(n=void 0===(n=n.type)?Un.DEFAULT:n,e(t)){var r=it();return qn.run({isolate:{type:n}},(function(){qn.useX().testCursor.addLevel(),tt((function(n){return Kn(n,r,[])}));var n=t();return qn.useX().testCursor.removeLevel(),st(),n}))}}function ft(n,t){return!!t&&!ct(n,t)}function ct(n,t){return!(!t||n.fieldName!==t)}function lt(){var n=Zn()[0];if(!z(n)){var t={};tt((function(r){return Bn(r,(function(r){var u=r.fieldName;if(t.hasOwnProperty(u))t[r.fieldName]&&r.omit();else{var i=n[u];e(i)&&(t[u]=i(),t[r.fieldName]&&r.omit())}return r}))}))}}function pt(n){var t=rt();return!z(t)&&(n?t.some((function(t){return ct(t,n)})):Y(t))}function vt(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 dt(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns)}function gt(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return function(n,t,r,e){return!!(function(n,t){return!(!t||n.groupName===t)}(n,r)||ft(n,e)||dt(t,n))}(r,t,i,o)||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function ht(n,t){return t?n[t]:n}function mt(n){return Nt("errors",n)}function yt(n){return Nt("warnings",n)}function Nt(n,t){return ht(n=gt(n,ut(),{fieldName:t}),t)}function bt(n,t){return ht(n=Ct("errors",n,t),t)}function Et(n,t){return ht(n=Ct("warnings",n,t),t)}function Ct(n,t,r){return t||yn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),gt(n,ut(),{group:t,fieldName:r})}function Tt(n,t,r){return!(!n.hasFailures()||ft(n,r)||dt(t,n))}function St(n){return xt("errors",n)}function Ot(n){return xt("warnings",n)}function xt(n,t){return ut().some((function(r){return Tt(r,n,t)}))}function wt(n,t){return kt("errors",n,t)}function Pt(n,t){return kt("warnings",n,t)}function kt(n,t,r){return ut().some((function(e){return t===e.groupName&&Tt(e,n,r)}))}function Ft(n,t){return!!function(n){var t=ut().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return!!n&&!!t[n]}(t)||!n.hasErrors(t)&&(!(z(ut())||function(n,t){return!!t&&z(n.tests[t])}(n,t)||function(n){var t=Zn()[0];return Y(rt().filter((function(r){return!ft(r,n)&&!0!==t[r.fieldName]})))}(t))&&function(n){var t=ut(),r=Zn()[0];return t.every((function(t){return!!ft(t,n)||(!0===r[t.fieldName]||t.isTested()||t.isOmitted())}))}(t))}var It=Vn(20);function At(){var n=ut(),t={stateRef:zn()};return It([n],qn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return ut().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=vt(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=vt(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:qn.bind(t,mt),getErrorsByGroup:qn.bind(t,bt),getWarnings:qn.bind(t,yt),getWarningsByGroup:qn.bind(t,Et),hasErrors:qn.bind(t,St),hasErrorsByGroup:qn.bind(t,wt),hasWarnings:qn.bind(t,Ot),hasWarningsByGroup:qn.bind(t,Pt),isValid:qn.bind(t,(function(n){return Ft(At(),n)}))})})))}var Wt=Vn(20);function Rt(){var n=ut(),t={stateRef:zn()};return Wt([n],qn.bind(t,(function(){return r({},At(),{done:qn.bind(t,Lt)})})))}function Ut(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Xt(n){return!(pt()&&(!n||pt(n)))}var Dt,Lt=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=Rt(),Ut(r,n,t))return t;var e=function(){return r(At())};return Xt(n)?(e(),t):(Gt(e,n),t)};function Gt(n,t){var r=qn.bind({},n);(0,Qn()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function jt(n){return n.forEach((function(n){return n()}))}function qt(){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(Dt.TEST_COMPLETED,(function(n){n.isCanceled()||(n.done(),function(n){var t=Qn()[0].fieldCallbacks;n&&!pt(n)&&U(t[n])&&jt(t[n])}(n.fieldName),function(){var n=Qn()[0].doneCallbacks;pt()||jt(n)}())})),n}function Bt(){var n=qn.useX();return n.bus||yn(),n.bus}(Dt||(Dt={})).TEST_COMPLETED="test_completed";function _t(n){return Mt("only","tests",n)}function Kt(n){return Mt("skip","tests",n)}function Ht(n){var t=n.fieldName;n=n.groupName;var r=qn.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){if(function(n){var t=qn.useX().exclusion.groups;if(M(t,n))return!1===t[n];for(var r in t)if(!0===t[r])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!u&&(!!Jt(e)||!1===e[t])}return!u&&Jt(e)}function Mt(n,t,r){var e=qn.useX("hook called outside of a running suite.");r&&Ln(r).forEach((function(r){x(r)&&(e.exclusion[t][r]="only"===n)}))}function Jt(n){for(var t in n)if(!0===n[t])return!0;return!1}_t.group=function(n){return Mt("only","groups",n)},Kt.group=function(n){return Mt("skip","groups",n)};function Vt(n){yn("Wrong arguments passed to group. Group "+n+".")}function zt(n,t){return T(n)&&x(t)}var Yt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=Dn(),this.warns=!1,this.status=Qt,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){zt(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==ur||(this.status=n)},n.prototype.setPending=function(){this.setStatus(rr)},n.prototype.fail=function(){this.setStatus(this.warns?nr:$t)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(tr)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.setStatus(Zt)},n.prototype.cancel=function(){this.setStatus(er),nt()},n.prototype.omit=function(){this.setStatus(ur)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===rr},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===ur},n.prototype.isUntested=function(){return this.status===Qt},n.prototype.isFailing=function(){return this.status===$t},n.prototype.isCanceled=function(){return this.status===er},n.prototype.isSkipped=function(){return this.status===Zt},n.prototype.isPassing=function(){return this.status===tr},n.prototype.isWarning=function(){return this.status===nr},n}(),Qt="UNTESTED",Zt="SKIPPED",$t="FAILED",nr="WARNING",tr="PASSING",rr="PENDING",er="CANCELED",ur="OMITTED";function ir(n){return n&&e(n.then)}function or(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}function sr(n){var t=n.asyncTest,r=n.message;if(ir(t)){var e=Bt().emit,u=zn(),i=qn.bind({stateRef:u},(function(){nt(),e(Dt.TEST_COMPLETED,n)}));u=qn.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=x(t)?t:r,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function ar(n){var t=Bt().emit,r=function(n){return qn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){zt(n.message,r)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{ir(r)?(n.asyncTest=r,n.setPending(),sr(n)):t(Dt.TEST_COMPLETED,n)}catch(t){yn("Your test function "+n.fieldName+" returned "+JSON.stringify(r)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}function fr(n){var t=$n(),r=t[1],e=t[0].prev;if(z(e))return cr(n),n;if(pr(t=lr(e),n)){for(function(n,t){qn.useX().isolate.type===Un.EACH||function(n,t){setTimeout((function(){yn(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This usually happens when you conditionally call your tests using if/else.\n This might lead to unexpected validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n);pr(t,n);)t=$n()[0],t=lr(e=Mn(t.prev,it()));r((function(n){return{prev:e,current:n.current}}))}return cr(n=o(t,n)),n}function cr(n){var t=it();tt((function(r){return Kn(r,t,n)}))}function lr(n){return function(n,t){return Jn(n,t)[Gn(t)]}(n,it())}function pr(n,t){return Y(n)&&!or(n,t)}function vr(n){var t=fr(n);return Ht(n)?(n.skip(),st(),t):(function(n,t){t!==n&&or(n,t)&&n.isPending()&&n.cancel()}(t,n),cr(n),st(),function(n){n.isUntested()?ar(n):ir(n.asyncTest)&&(n.setPending(),sr(n))}(n),n)}function dr(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=qn.useX();return vr(t=new Yt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var gr=r(dr,{each:function(n){return function(r){return U(r)||yn("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 at({type:Un.EACH},(function(){return r.map((function(r){return r=Ln(r),n(i.apply(void 0,t([e],r)),i.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}))}}}(dr),memo:function(n){var t=Vn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Yn()[0];var i=ot(),o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),E(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)}))):vr(u[1])}}(dr)});exports.VERSION="4.0.0-dev-366a8b",exports.create=function(n){e(n)||yn("Suite initialization error. Expected `tests` to be a function.");var t=qt(),u=function(n){function t(n,t,e){return u.references.push(),r(n,i(t,e)),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(){var n=u.references;u.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),s=function(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:o(null==n?void 0:n.current,[]),current:[]}}))}}(u,{suiteId:Dn()});return r(qn.bind({stateRef:s,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return u.reset(),at({type:Un.SUITE},(function(){n.apply(void 0,t)})),lt(),Rt()})),{get:qn.bind({stateRef:s},At),remove:qn.bind({stateRef:s},(function(n){ut().forEach((function(t){ct(t,n)&&(t.cancel(),function(n){tt((function(t){return _n(t,(function(t){return n!==t}))}))}(t))}))})),reset:u.reset})},exports.enforce=Xn,exports.group=function(n,t){x(n)||Vt("name must be a string"),e(t)||Vt("callback must be a function"),at({type:Un.GROUP},(function(){qn.run({groupName:n},t)}))},exports.only=_t,exports.optional=function(n){(0,Zn()[1])((function(t){if(U(n)||x(n))Ln(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))},exports.skip=Kt,exports.skipWhen=function(n,t){at({type:Un.SKIP_WHEN},(function(){qn.run({skipped:i(n)},(function(){return t()}))}))},exports.test=gr,exports.warn=function(){var n=qn.useX("warn hook called outside of a running suite.");n.currentTest||yn("warn called outside of a test."),n.currentTest.warn()};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(){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(){return s(!1)}function f(){return s(!0)}function c(n){return o(n,a())}function l(n){return o(n,f())}function p(n,t){try{return n.run(t)}catch(n){return a()}}function v(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){(t=p(t,n)).pass||r(t)})))}function d(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return c(u(t,(function(t,r){(t=p(t,n)).pass&&r(t)})))}function g(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){p(t,n).pass&&r(a())})))}function h(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function m(n,t){return n.length===Number(t)}var y=h(m);function N(n,t){return n.length>Number(t)}function b(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(N(e,1))return!1;(t=p(t,n)).pass&&e.push(t)})),s(m(e,1))}function E(n){return null===n}var C=h(E);function T(n){return void 0===n}var S=h(T);function O(n,t){return T(n)||E(n)?f():p(t,n)}function x(n){return String(n)===n}function w(n,t){return x(n)&&x(t)&&n.endsWith(t)}var P=h(w);function k(n,t){return n===t}var F=h(k);function I(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var A=h(I);function W(n,t){return I(n)&&I(t)&&Number(n)>Number(t)}function R(n,t){return I(n)&&I(t)&&Number(n)>=Number(t)}function U(n){return!!Array.isArray(n)}var X=h(U);function D(n,t){return!!(U(t)||x(t)&&x(n))&&-1!==t.indexOf(n)}var L=h(D);function G(n,t){return I(n)&&I(t)&&Number(n)<=Number(t)}function j(n,t,r){return R(n,t)&&G(n,r)}var q=h(j);function B(n){return x(n)&&!n.trim()}var _=h(B);function K(n){return!!n===n}var H=h(K);function M(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function J(n){return"number"==typeof n}var V=h(J);function z(n){if(n){if(J(n))return 0===n;if(M(n,"length"))return m(n,0);if("object"==typeof n)return m(Object.keys(n),0)}return!0}var Y=h(z),Q=function(n){return!!I(n)&&0==n%2};function Z(n){return Number.isNaN(n)}var $=h(Z);function nn(n){return!!I(n)&&0>Number(n)}var tn=h(nn),rn=function(n){return!!I(n)&&0!=n%2},en=h(x);function un(n){return!!n}var on=h(un);function sn(n,t){return I(n)&&I(t)&&Number(n)<Number(t)}function an(n,t){return n.length>=Number(t)}function fn(n,t){return t instanceof RegExp?t.test(n):!!x(t)&&new RegExp(t).test(n)}var cn=h(fn);function ln(n,t){return I(n)&&I(t)&&Number(n)===Number(t)}var pn=h(ln);function vn(n,t){try{return t(n)}catch(n){return!1}}function dn(n,t){return n.length<Number(t)}function gn(n,t){return n.length<=Number(t)}function hn(n,t){return x(n)&&x(t)&&n.startsWith(t)}var mn=h(hn);function yn(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:yn(o(n,"Context was used after it was closed"))}}}var bn=Nn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:r(e,{parent:En})}));function En(){return null}function Cn(n,t){return l(u(n,(function(n,r,e){(e=bn.run({value:n,set:!0,meta:{index:e}},(function(){return p(t,n)}))).pass||r(e)})))}function Tn(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=bn.run({value:e,set:!0,meta:{key:r}},(function(){return p(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return f()}function Sn(n,t){var r=Tn(n,t);if(!r.pass)return r;for(var e in n)if(!M(t,e))return a();return f()}var On=r({condition:vn,doesNotEndWith:P,doesNotStartWith:mn,endsWith:w,equals:k,greaterThan:W,greaterThanOrEquals:R,gt:W,gte:R,inside:D,isArray:U,isBetween:j,isBlank:B,isBoolean:K,isEmpty:z,isEven:Q,isFalsy:on,isNaN:Z,isNegative:nn,isNotArray:X,isNotBetween:q,isNotBlank:_,isNotBoolean:H,isNotEmpty:Y,isNotNaN:$,isNotNull:C,isNotNumber:V,isNotNumeric:A,isNotString:en,isNotUndefined:S,isNull:E,isNumber:J,isNumeric:I,isOdd:rn,isPositive:tn,isString:x,isTruthy:un,isUndefined:T,lengthEquals:m,lengthNotEquals:y,lessThan:sn,lessThanOrEquals:G,longerThan:N,longerThanOrEquals:an,lt:sn,lte:G,matches:fn,notEquals:F,notInside:L,notMatches:cn,numberEquals:ln,numberNotEquals:pn,shorterThan:dn,shorterThanOrEquals:gn,startsWith:hn},{allOf:v,anyOf:d,noneOf:g,oneOf:b,optional:O},{shape:Sn,loose:Tn,isArrayOf:Cn});function xn(n){return On[n]}function wn(n){for(var t in On){var r=xn(t);e(r)&&n(t,r)}}function Pn(){return"function"==typeof Proxy}function kn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return Fn(n),K(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function Fn(n){K(n)||n&&K(n.pass)||yn("Incorrect return value for rule: "+JSON.stringify(n))}function In(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=kn.apply(void 0,t([bn.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!z(o.message))throw o.message;yn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!Pn())return wn((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=xn(t))return r(u,n,t)}});return u}function An(n){var r,e=[];return function n(o){return function(){for(var a=[],f=0;f<arguments.length;f++)a[f]=arguments[f];var c=xn(o);e.push((function(n){return kn.apply(void 0,t([c.apply(void 0,t([n],a)),o,n],a))}));var p={run:function(n){return l(u(e,(function(t,e){var u,o=bn.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))})))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return Pn()?p=new Proxy(p,{get:function(t,r){return xn(r)?n(r):t[r]}}):(wn((function(t){p[t]=n(t)})),p)}}(n)}function Wn(n){var t,r={};for(t in n)r[t]=Xn.optional(n[t]);return r}var Rn,Un,Xn=(Rn=n({context:function(){return bn.useX()},extend:function(n){r(On,n)}},{partial:Wn}),Pn()?new Proxy(r(In,Rn),{get:function(n,t){return t in n?n[t]:xn(t)?An(t):void 0}}):(wn((function(n){Rn[n]=An(n)})),Rn)),Dn=function(n){return function(){return""+n++}}(0);function Ln(n){return[].concat(n)}function Gn(n){return(n=Ln(n))[n.length-1]}function jn(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return Gn(t)},getCursor:function(){return Ln(t)},next:function(){return t[t.length-1]++,Gn(t)},removeLevel:function(){t.pop()},reset:n}}!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.GROUP=4]="GROUP"}(Un||(Un={}));var qn=Nn((function(n,t){return t?null:r({},{isolate:{type:Un.DEFAULT},testCursor:jn(),exclusion:{tests:{},groups:{}}},n)}));function Bn(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];U(u)?r.push(Bn(u,t)):(u=t(u),C(u)&&r.push(u))}return r}function _n(n,t,r){return Hn(n,t)[Gn(t)]=r,n}function Kn(n){return Ln(n).reduce((function(n,t){return U(t)?n.concat(Kn(t)):Ln(n).concat(t)}),[])}function Hn(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=o(n[e],[]),n=n[e]}return n}function Mn(n){void 0===n&&(n=1);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),N(t,n)&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function Jn(){return qn.useX().stateRef}function Vn(){return Jn().suiteId()}function zn(){return Jn().testCallbacks()}function Yn(){return Jn().optionalFields()}function Qn(){return Jn().testObjects()}function Zn(){(0,Qn()[1])((function(n){return{prev:n.prev,current:Ln(n.current)}}))}function $n(n){(0,Qn()[1])((function(t){return{prev:t.prev,current:Ln(n(t.current))}}))}function nt(){return Kn(Bn(Qn()[0].current,(function(n){return n.isPending()?n:null})))}var tt=Mn();function rt(){var n=Qn()[0].current;return tt([n],(function(){return Kn(n)}))}function et(){return qn.useX().testCursor.getCursor()}function ut(){return qn.useX().testCursor.cursorAt()}function it(){return qn.useX().testCursor.next()}function ot(n,t){if(n=void 0===(n=n.type)?Un.DEFAULT:n,e(t)){var r=et();return qn.run({isolate:{type:n}},(function(){qn.useX().testCursor.addLevel(),$n((function(n){return _n(n,r,[])}));var n=t();return qn.useX().testCursor.removeLevel(),it(),n}))}}function st(n,t){return!!t&&!at(n,t)}function at(n,t){return!(!t||n.fieldName!==t)}function ft(){var n=Yn()[0];if(!z(n)){var t={};$n((function(r){return Bn(r,(function(r){var u=r.fieldName;if(t.hasOwnProperty(u))t[r.fieldName]&&r.omit();else{var i=n[u];e(i)&&(t[u]=i(),t[r.fieldName]&&r.omit())}return r}))}))}}function ct(n){var t=nt();return!z(t)&&(n?t.some((function(t){return at(t,n)})):Y(t))}function lt(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 pt(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns)}function vt(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return function(n,t,r,e){return!!(function(n,t){return!(!t||n.groupName===t)}(n,r)||st(n,e)||pt(t,n))}(r,t,i,o)||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function dt(n,t){return t?n[t]:n}function gt(n){return mt("errors",n)}function ht(n){return mt("warnings",n)}function mt(n,t){return dt(n=vt(n,rt(),{fieldName:t}),t)}function yt(n,t){return dt(n=bt("errors",n,t),t)}function Nt(n,t){return dt(n=bt("warnings",n,t),t)}function bt(n,t,r){return t||yn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),vt(n,rt(),{group:t,fieldName:r})}function Et(n,t,r){return!(!n.hasFailures()||st(n,r)||pt(t,n))}function Ct(n){return St("errors",n)}function Tt(n){return St("warnings",n)}function St(n,t){return rt().some((function(r){return Et(r,n,t)}))}function Ot(n,t){return wt("errors",n,t)}function xt(n,t){return wt("warnings",n,t)}function wt(n,t,r){return rt().some((function(e){return t===e.groupName&&Et(e,n,r)}))}function Pt(n,t){return!!function(n){var t=rt().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return!!n&&!!t[n]}(t)||!n.hasErrors(t)&&(!(z(rt())||function(n,t){return!!t&&z(n.tests[t])}(n,t)||function(n){var t=Yn()[0];return Y(nt().filter((function(r){return!st(r,n)&&!0!==t[r.fieldName]})))}(t))&&function(n){var t=rt(),r=Yn()[0];return t.every((function(t){return!!st(t,n)||(!0===r[t.fieldName]||t.isTested()||t.isOmitted())}))}(t))}var kt=Mn(20);function Ft(){var n=rt(),t={stateRef:Jn()};return kt([n],qn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return rt().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=lt(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=lt(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:qn.bind(t,gt),getErrorsByGroup:qn.bind(t,yt),getWarnings:qn.bind(t,ht),getWarningsByGroup:qn.bind(t,Nt),hasErrors:qn.bind(t,Ct),hasErrorsByGroup:qn.bind(t,Ot),hasWarnings:qn.bind(t,Tt),hasWarningsByGroup:qn.bind(t,xt),isValid:qn.bind(t,(function(n){return Pt(Ft(),n)}))})})))}var It=Mn(20);function At(){var n=rt(),t={stateRef:Jn()};return It([n],qn.bind(t,(function(){return r({},Ft(),{done:qn.bind(t,Xt)})})))}function Wt(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Rt(n){return!(ct()&&(!n||ct(n)))}var Ut,Xt=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=At(),Wt(r,n,t))return t;var e=function(){return r(Ft())};return Rt(n)?(e(),t):(Dt(e,n),t)};function Dt(n,t){var r=qn.bind({},n);(0,zn()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Lt(n){return n.forEach((function(n){return n()}))}function Gt(){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(Ut.TEST_COMPLETED,(function(n){n.isCanceled()||(n.done(),function(n){var t=zn()[0].fieldCallbacks;n&&!ct(n)&&U(t[n])&&Lt(t[n])}(n.fieldName),function(){var n=zn()[0].doneCallbacks;ct()||Lt(n)}())})),n}function jt(){var n=qn.useX();return n.bus||yn(),n.bus}(Ut||(Ut={})).TEST_COMPLETED="test_completed";function qt(n){return Kt("only","tests",n)}function Bt(n){return Kt("skip","tests",n)}function _t(n){var t=n.fieldName;n=n.groupName;var r=qn.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){if(function(n){var t=qn.useX().exclusion.groups;if(M(t,n))return!1===t[n];for(var r in t)if(!0===t[r])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!u&&(!!Ht(e)||!1===e[t])}return!u&&Ht(e)}function Kt(n,t,r){var e=qn.useX("hook called outside of a running suite.");r&&Ln(r).forEach((function(r){x(r)&&(e.exclusion[t][r]="only"===n)}))}function Ht(n){for(var t in n)if(!0===n[t])return!0;return!1}qt.group=function(n){return Kt("only","groups",n)},Bt.group=function(n){return Kt("skip","groups",n)};function Mt(n){yn("Wrong arguments passed to group. Group "+n+".")}function Jt(n,t){return T(n)&&x(t)}var Vt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=Dn(),this.warns=!1,this.status=zt,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){Jt(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==rr||(this.status=n)},n.prototype.setPending=function(){this.setStatus(nr)},n.prototype.fail=function(){this.setStatus(this.warns?Zt:Qt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus($t)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.setStatus(Yt)},n.prototype.cancel=function(){this.setStatus(tr),Zn()},n.prototype.omit=function(){this.setStatus(rr)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===nr},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===rr},n.prototype.isUntested=function(){return this.status===zt},n.prototype.isFailing=function(){return this.status===Qt},n.prototype.isCanceled=function(){return this.status===tr},n.prototype.isSkipped=function(){return this.status===Yt},n.prototype.isPassing=function(){return this.status===$t},n.prototype.isWarning=function(){return this.status===Zt},n}(),zt="UNTESTED",Yt="SKIPPED",Qt="FAILED",Zt="WARNING",$t="PASSING",nr="PENDING",tr="CANCELED",rr="OMITTED";function er(n){return n&&e(n.then)}function ur(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}function ir(n){var t=n.asyncTest,r=n.message;if(er(t)){var e=jt().emit,u=Jn(),i=qn.bind({stateRef:u},(function(){Zn(),e(Ut.TEST_COMPLETED,n)}));u=qn.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=x(t)?t:r,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function or(n){var t=jt().emit,r=function(n){return qn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){Jt(n.message,r)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{er(r)?(n.asyncTest=r,n.setPending(),ir(n)):t(Ut.TEST_COMPLETED,n)}catch(t){yn("Your test function "+n.fieldName+" returned "+JSON.stringify(r)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}function sr(n){var t=Qn(),r=t[1],e=t[0].prev;if(z(e))return ar(n),n;if(function(n,t){return Y(n)&&!ur(n,t)}(t=function(n){var t=et();return function(n,t){return Hn(n,t)[Gn(t)]}(n,t)}(e),n)){!function(n,t){qn.useX().isolate.type===Un.EACH||function(n,t){setTimeout((function(){yn(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n),t=Hn(e,et());var u=ut();t.splice(u),r((function(n){return{prev:e,current:n.current}})),t=null}return ar(n=o(t,n)),n}function ar(n){var t=et();$n((function(r){return _n(r,t,n)}))}function fr(n){var t=sr(n);return _t(n)?(n.skip(),it(),t):(function(n,t){t!==n&&ur(n,t)&&n.isPending()&&n.cancel()}(t,n),ar(n),it(),function(n){n.isUntested()?or(n):er(n.asyncTest)&&(n.setPending(),ir(n))}(n),n)}function cr(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=qn.useX();return fr(t=new Vt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var lr=r(cr,{each:function(n){return function(r){return U(r)||yn("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 ot({type:Un.EACH},(function(){return r.map((function(r){return r=Ln(r),n(i.apply(void 0,t([e],r)),i.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}))}}}(cr),memo:function(n){var t=Mn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Vn()[0];var i=ut(),o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),E(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)}))):fr(u[1])}}(cr)});exports.VERSION="4.0.0-dev-8851ff",exports.create=function(n){e(n)||yn("Suite initialization error. Expected `tests` to be a function.");var t=Gt(),u=function(n){function t(n,t,e){return u.references.push(),r(n,i(t,e)),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(){var n=u.references;u.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),o=function(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}(u,{suiteId:Dn()});return r(qn.bind({stateRef:o,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return u.reset(),ot({type:Un.SUITE},(function(){n.apply(void 0,t)})),ft(),At()})),{get:qn.bind({stateRef:o},Ft),remove:qn.bind({stateRef:o},(function(n){rt().forEach((function(t){at(t,n)&&(t.cancel(),function(n){$n((function(t){return Bn(t,(function(t){return n!==t?t:null}))}))}(t))}))})),reset:u.reset})},exports.enforce=Xn,exports.group=function(n,t){x(n)||Mt("name must be a string"),e(t)||Mt("callback must be a function"),ot({type:Un.GROUP},(function(){qn.run({groupName:n},t)}))},exports.only=qt,exports.optional=function(n){(0,Yn()[1])((function(t){if(U(n)||x(n))Ln(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))},exports.skip=Bt,exports.skipWhen=function(n,t){ot({type:Un.SKIP_WHEN},(function(){qn.run({skipped:i(n)},(function(){return t()}))}))},exports.test=lr,exports.warn=function(){var n=qn.useX("warn hook called outside of a running suite.");n.currentTest||yn("warn called outside of a test."),n.currentTest.warn()};
@@ -881,7 +881,7 @@ function createStateRef(state, _a) {
881
881
  }); }),
882
882
  testObjects: state.registerStateKey(function (prev) {
883
883
  return {
884
- prev: defaultTo(prev === null || prev === void 0 ? void 0 : prev.current, []),
884
+ prev: (prev ? prev.current : []),
885
885
  current: []
886
886
  };
887
887
  })
@@ -945,23 +945,21 @@ var ctx = createContext(function (ctxRef, parentContext) {
945
945
  }, ctxRef);
946
946
  });
947
947
 
948
- function map(array, callback) {
949
- return array.map(function (item) {
950
- if (isArray(item)) {
951
- return map(item, callback);
952
- }
953
- return callback(item);
954
- });
955
- }
956
- function filter(array, predicate) {
948
+ // This is sort of a map/filter in one function.
949
+ // Normally, behaves like a nested-array map
950
+ // Returning `null` will drop the element from the array
951
+ function transform(array, cb) {
957
952
  var res = [];
958
953
  for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
959
954
  var v = array_1[_i];
960
955
  if (isArray(v)) {
961
- res.push(filter(v, predicate));
956
+ res.push(transform(v, cb));
962
957
  }
963
- else if (predicate(v)) {
964
- res.push(v);
958
+ else {
959
+ var output = cb(v);
960
+ if (isNotNull(output)) {
961
+ res.push(output);
962
+ }
965
963
  }
966
964
  }
967
965
  return res;
@@ -982,11 +980,6 @@ function flatten(values) {
982
980
  return asArray(acc).concat(value);
983
981
  }, []);
984
982
  }
985
- function removeAtPath(array, path) {
986
- var current = getCurrent(array, path);
987
- current.splice(path[last(path)], 1);
988
- return array;
989
- }
990
983
  function getCurrent(array, path) {
991
984
  var current = array;
992
985
  for (var _i = 0, _a = path.slice(0, -1); _i < _a.length; _i++) {
@@ -1077,7 +1070,9 @@ function useSetTests(handler) {
1077
1070
  // Derived state
1078
1071
  function useAllIncomplete() {
1079
1072
  var current = useTestObjects()[0].current;
1080
- return flatten(filter(current, function (testObject) { return testObject.isPending(); }));
1073
+ return flatten(transform(current, function (testObject) {
1074
+ return testObject.isPending() ? testObject : null;
1075
+ }));
1081
1076
  }
1082
1077
  function useOmittedFields() {
1083
1078
  var testObjects = useTestsFlat();
@@ -1151,7 +1146,7 @@ function omitOptionalTests() {
1151
1146
  }
1152
1147
  var shouldOmit = {};
1153
1148
  useSetTests(function (tests) {
1154
- return map(tests, function (testObject) {
1149
+ return transform(tests, function (testObject) {
1155
1150
  var fieldName = testObject.fieldName;
1156
1151
  if (shouldOmit.hasOwnProperty(fieldName)) {
1157
1152
  omit(testObject);
@@ -1527,7 +1522,9 @@ function deferDoneCallback(doneCallback, fieldName) {
1527
1522
  * Removes test object from suite state
1528
1523
  */
1529
1524
  function removeTestFromState (testObject) {
1530
- useSetTests(function (tests) { return filter(tests, function (test) { return testObject !== test; }); });
1525
+ useSetTests(function (tests) {
1526
+ return transform(tests, function (test) { return (testObject !== test ? test : null); });
1527
+ });
1531
1528
  }
1532
1529
 
1533
1530
  function createBus() {
@@ -2015,7 +2012,16 @@ function registerTest(testObject) {
2015
2012
  }
2016
2013
  }
2017
2014
 
2018
- // eslint-disable-next-line max-statements
2015
+ /**
2016
+ * This module serves as the "collision detection" mechanism for Vest.
2017
+ * It is used to ensure that tests are not called in a different order than
2018
+ * they were called in the previous run.
2019
+ * If they are, it will throw a deferred error unless explicitly allowed.
2020
+ *
2021
+ * For now it seems pretty safe, and it covers most common use cases, but it can
2022
+ * be improved in the future both in terms of performance and scenarios it covers.
2023
+ */
2024
+ // eslint-disable-next-line max-statements, max-lines-per-function
2019
2025
  function useTestAtCursor(newTestObject) {
2020
2026
  var _a = useTestObjects(), testObjects = _a[0], setTestObjects = _a[1];
2021
2027
  var prevTests = testObjects.prev;
@@ -2027,16 +2033,14 @@ function useTestAtCursor(newTestObject) {
2027
2033
  if (shouldPurgePrevTest(prevTest, newTestObject)) {
2028
2034
  throwTestOrderError(prevTest, newTestObject);
2029
2035
  // Here we handle just the omission of tests in the middle of the test suite.
2030
- // We need to also handle a case in which tests are added in between other tests,
2031
- // at the moment all we can do is just remove tests until we find a matching test.
2036
+ // We need to also handle a case in which tests are added in between other tests.
2037
+ // At the moment all we can do is just splice the tests out of the array when this happens.
2032
2038
  // A viable solution would be to use something like React's key prop to identify tests regardless
2033
2039
  // of their position in the suite. https://reactjs.org/docs/lists-and-keys.html#keys
2034
- while (shouldPurgePrevTest(prevTest, newTestObject)) {
2035
- var testObjects_1 = useTestObjects()[0];
2036
- prevTests = removeAtPath(testObjects_1.prev, usePath());
2037
- prevTest = useGetTestAtCursor(prevTests);
2038
- }
2039
- // We actually don't mind mutating the state directly (as we do above). There is no harm in it
2040
+ var current = getCurrent(prevTests, usePath());
2041
+ var cursorAt = useCursorAt();
2042
+ current.splice(cursorAt);
2043
+ // We actually don't mind mutating the state directly (as can be seen above). There is no harm in it
2040
2044
  // since we're only touching the "prev" state. The reason we still use the setter function is
2041
2045
  // to prevent future headaches if we ever do need to rely on prev-state immutability.
2042
2046
  setTestObjects(function (_a) {
@@ -2046,6 +2050,8 @@ function useTestAtCursor(newTestObject) {
2046
2050
  current: current
2047
2051
  });
2048
2052
  });
2053
+ // Need to see if this has any effect at all.
2054
+ prevTest = null;
2049
2055
  }
2050
2056
  var nextTest = defaultTo(prevTest, newTestObject);
2051
2057
  useSetTestAtCursor(nextTest);
@@ -2068,7 +2074,7 @@ function throwTestOrderError(prevTest, newTestObject) {
2068
2074
  if (shouldAllowReorder()) {
2069
2075
  return;
2070
2076
  }
2071
- throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.fieldName + "\n This usually happens when you conditionally call your tests using if/else.\n This might lead to unexpected validation results.\n Replacing if/else with skipWhen solves these issues.");
2077
+ throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.fieldName + "\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.");
2072
2078
  }
2073
2079
 
2074
2080
  function registerPrevRunTest(testObject) {
@@ -2168,6 +2174,6 @@ var test = assign(testBase, {
2168
2174
  memo: bindTestMemo(testBase)
2169
2175
  });
2170
2176
 
2171
- var VERSION = "4.0.0-dev-366a8b";
2177
+ var VERSION = "4.0.0-dev-8851ff";
2172
2178
 
2173
2179
  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 d=c(v);function h(n){return void 0===n}var g=c(h);function m(n){return String(n)===n}function y(n,t){return m(n)&&m(t)&&n.endsWith(t)}var N=c(y);function b(n,t){return n===t}var E=c(b);function C(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var O=c(C);function T(n,t){return C(n)&&C(t)&&Number(n)>Number(t)}function w(n,t){return C(n)&&C(t)&&Number(n)>=Number(t)}function S(n){return!!Array.isArray(n)}var P=c(S);function x(n,t){return!!(S(t)||m(t)&&m(n))&&-1!==t.indexOf(n)}var k=c(x);function F(n,t){return C(n)&&C(t)&&Number(n)<=Number(t)}function A(n,t,r){return w(n,t)&&F(n,r)}var I=c(A);function W(n){return m(n)&&!n.trim()}var j=c(W);function R(n){return!!n===n}var X=c(R);function U(n){return"number"==typeof n}var D=c(U);function L(n){if(n){if(U(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(L);function q(n){return Number.isNaN(n)}var B=c(q);function K(n){return!!C(n)&&0>Number(n)}var _=c(K),H=c(m);function M(n){return!!n}var J=c(M);function z(n,t){return C(n)&&C(t)&&Number(n)<Number(t)}function V(n,t){return t instanceof RegExp?t.test(n):!!m(t)&&new RegExp(t).test(n)}var Y=c(V);function Q(n,t){return C(n)&&C(t)&&Number(n)===Number(t)}var Z=c(Q);function $(n,t){return m(n)&&m(t)&&n.startsWith(t)}var nn=c($);function tn(n,t){throw Error(o(t,n))}function rn(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:tn(o(n,"Context was used after it was closed"))}}}var en=rn((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:un})}));function un(){return null}function on(n,t){function r(r){var e=n[r],u=t[r];if(!(r=en.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 sn=r({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:N,doesNotStartWith:nn,endsWith:y,equals:b,greaterThan:T,greaterThanOrEquals:w,gt:T,gte:w,inside:x,isArray:S,isBetween:A,isBlank:W,isBoolean:R,isEmpty:L,isEven:function(n){return!!C(n)&&0==n%2},isFalsy:J,isNaN:q,isNegative:K,isNotArray:P,isNotBetween:I,isNotBlank:j,isNotBoolean:X,isNotEmpty:G,isNotNaN:B,isNotNull:d,isNotNumber:D,isNotNumeric:O,isNotString:H,isNotUndefined:g,isNull:v,isNumber:U,isNumeric:C,isOdd:function(n){return!!C(n)&&0!=n%2},isPositive:_,isString:m,isTruthy:M,isUndefined:h,lengthEquals:f,lengthNotEquals:l,lessThan:z,lessThanOrEquals:F,longerThan:p,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:z,lte:F,matches:V,notEquals:E,notInside:k,notMatches:Y,numberEquals:Q,numberNotEquals:Z,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:$},{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 h(n)||null===n?s(!0):a(t,n)}},{shape:function(n,t){var r=on(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:on,isArrayOf:function(n,t){return o(u(n,(function(n,r,e){(e=en.run({value:n,set:!0,meta:{index:e}},(function(){return a(t,n)}))).pass||r(e)})),s(!0))}});function an(n){for(var t in sn){var r=sn[t];e(r)&&n(t,r)}}function cn(){return"function"==typeof Proxy}function fn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return R(n)||n&&R(n.pass)||tn("Incorrect return value for rule: "+JSON.stringify(n)),R(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function ln(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=fn.apply(void 0,t([en.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!L(o.message))throw o.message;tn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!cn())return an((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=sn[t])return r(u,n,t)}});return u}function pn(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=sn[a];e.push((function(n){return fn.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=en.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 cn()?p=new Proxy(p,{get:function(t,r){return sn[r]?n(r):t[r]}}):(an((function(t){p[t]=n(t)})),p)}}(n)}function vn(n){var t,r={};for(t in n)r[t]=hn.optional(n[t]);return r}var dn,hn=(dn=n({context:function(){return en.useX()},extend:function(n){r(sn,n)}},{partial:vn}),cn()?new Proxy(r(ln,dn),{get:function(n,t){return t in n?n[t]:sn[t]?pn(t):void 0}}):(an((function(n){dn[n]=pn(n)})),dn)),gn=function(n){return function(){return""+n++}}(0);var mn,yn=mn||(mn={});function Nn(n){return(n=[].concat(n))[n.length-1]}function bn(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return Nn(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,Nn(t)},removeLevel:function(){t.pop()},reset:n}}yn[yn.DEFAULT=0]="DEFAULT",yn[yn.SUITE=1]="SUITE",yn[yn.EACH=2]="EACH",yn[yn.SKIP_WHEN=3]="SKIP_WHEN",yn[yn.GROUP=4]="GROUP";var En=rn((function(n,t){return t?null:r({},{isolate:{type:mn.DEFAULT},testCursor:bn(),exclusion:{tests:{},groups:{}}},n)}));function Cn(n,t){return n.map((function(n){return S(n)?Cn(n,t):t(n)}))}function On(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];S(u)?r.push(On(u,t)):t(u)&&r.push(u)}return r}function Tn(n){return[].concat(n).reduce((function(n,t){return S(t)?n.concat(Tn(t)):[].concat(n).concat(t)}),[])}function wn(n,t){return Sn(n,t).splice(t[Nn(t)],1),n}function Sn(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=o(n[e],[]),n=n[e]}return n}function Pn(n){function t(e,u){var i=t.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),p(r,n)&&(r.length=n),u)}void 0===n&&(n=1);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 xn(){return En.useX().stateRef}function kn(){(0,xn().testObjects()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function Fn(n){(0,xn().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function An(){return Tn(On(xn().testObjects()[0].current,(function(n){return n.isPending()})))}var In=Pn();function Wn(){var n=xn().testObjects()[0].current;return In([n],(function(){return Tn(n)}))}function jn(){return En.useX().testCursor.getCursor()}function Rn(n,t){if(n=void 0===(n=n.type)?mn.DEFAULT:n,e(t)){var r=jn();return En.run({isolate:{type:n}},(function(){En.useX().testCursor.addLevel(),Fn((function(n){return Sn(n,r)[Nn(r)]=[],n}));var n=t();return En.useX().testCursor.removeLevel(),En.useX().testCursor.next(),n}))}}function Xn(n,t){return!(!t||n.fieldName!==t)}function Un(){var n=xn().optionalFields()[0];if(!L(n)){var t={};Fn((function(r){return Cn(r,(function(r){var u=r.fieldName;if(t.hasOwnProperty(u))t[r.fieldName]&&r.omit();else{var i=n[u];e(i)&&(t[u]=i(),t[r.fieldName]&&r.omit())}return r}))}))}}function Dn(n){var t=An();return!L(t)&&(n?t.some((function(t){return Xn(t,n)})):G(t))}function Ln(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 Gn(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&&!Xn(r,o)||"warnings"===t!=!!r.warns||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function qn(n){return Kn("errors",n)}function Bn(n){return Kn("warnings",n)}function Kn(n,t){return n=Gn(n,Wn(),{fieldName:t}),t?n[t]:n}function _n(n,t){return n=Mn("errors",n,t),t?n[t]:n}function Hn(n,t){return n=Mn("warnings",n,t),t?n[t]:n}function Mn(n,t,r){return t||tn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),Gn(n,Wn(),{group:t,fieldName:r})}function Jn(n,t,r){return!(!n.hasFailures()||r&&!Xn(n,r)||"warnings"===t!=!!n.warns)}function zn(n){return Yn("errors",n)}function Vn(n){return Yn("warnings",n)}function Yn(n,t){return Wn().some((function(r){return Jn(r,n,t)}))}function Qn(n,t){return $n("errors",n,t)}function Zn(n,t){return $n("warnings",n,t)}function $n(n,t,r){return Wn().some((function(e){return t===e.groupName&&Jn(e,n,r)}))}var nt=Pn(20);function tt(){var n=Wn(),t={stateRef:xn()};return nt([n],En.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return Wn().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=Ln(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=Ln(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:En.bind(t,qn),getErrorsByGroup:En.bind(t,_n),getWarnings:En.bind(t,Bn),getWarningsByGroup:En.bind(t,Hn),hasErrors:En.bind(t,zn),hasErrorsByGroup:En.bind(t,Qn),hasWarnings:En.bind(t,Vn),hasWarningsByGroup:En.bind(t,Zn),isValid:En.bind(t,(function(n){var t=tt(),r=Wn().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(r=!!n&&!!r[n])?n=!0:t.hasErrors(n)?n=!1:n=!(L(r=Wn())||n&&L(t.tests[n])||function(n){var t=xn().optionalFields()[0];return G(An().filter((function(r){return!(n&&!Xn(r,n))&&!0!==t[r.fieldName]})))}(n))&&function(n){var t=Wn(),r=xn().optionalFields()[0];return t.every((function(t){return!(!n||Xn(t,n))||!0===r[t.fieldName]||t.isTested()||t.isOmitted()}))}(n),n}))})})))}var rt,et=Pn(20);function ut(){var n=Wn(),t={stateRef:xn()};return et([n],En.bind(t,(function(){return r({},tt(),{done:En.bind(t,st)})})))}function it(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function ot(n){return!(Dn()&&(!n||Dn(n)))}function st(){function n(){return e(tt())}for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=(t=t.reverse())[0];return t=t[1],r=ut(),it(e,t,r)?r:ot(t)?(n(),r):(at(n,t),r)}function at(n,t){var r=En.bind({},n);(0,xn().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function ct(n){return n.forEach((function(n){return n()}))}function ft(){var n=En.useX();return n.bus||tn(),n.bus}function lt(n){return vt("only","tests",n)}function pt(n){return vt("skip","tests",n)}function vt(n,t,r){var e=En.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){m(r)&&(e.exclusion[t][r]="only"===n)}))}function dt(n){for(var t in n)if(!0===n[t])return!0;return!1}function ht(n){tn("Wrong arguments passed to group. Group "+n+".")}(rt||(rt={})).TEST_COMPLETED="test_completed",lt.group=function(n){return vt("only","groups",n)},pt.group=function(n){return vt("skip","groups",n)};var gt=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=mt,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,h(this.message)&&m(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Tt||(this.status=n)},n.prototype.setPending=function(){this.setStatus(Ct)},n.prototype.fail=function(){this.setStatus(this.warns?bt:Nt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Et)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.setStatus(yt)},n.prototype.cancel=function(){this.setStatus(Ot),kn()},n.prototype.omit=function(){this.setStatus(Tt)},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.isOmitted=function(){return this.status===Tt},n.prototype.isUntested=function(){return this.status===mt},n.prototype.isFailing=function(){return this.status===Nt},n.prototype.isCanceled=function(){return this.status===Ot},n.prototype.isSkipped=function(){return this.status===yt},n.prototype.isPassing=function(){return this.status===Et},n.prototype.isWarning=function(){return this.status===bt},n}(),mt="UNTESTED",yt="SKIPPED",Nt="FAILED",bt="WARNING",Et="PASSING",Ct="PENDING",Ot="CANCELED",Tt="OMITTED";function wt(n){var t=n.asyncTest,r=n.message;if(t&&e(t.then)){var u=ft().emit,i=xn(),o=En.bind({stateRef:i},(function(){kn(),u(rt.TEST_COMPLETED,n)}));i=En.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=m(t)?t:r,n.fail(),o())}));try{t.then(o,i)}catch(n){i()}}}function St(n){var t=xn().testObjects(),r=t[1],e=t[0].prev;if(L(e))return Pt(n),n;if(kt(t=xt(e),n)){for(function(n,t){En.useX().isolate.type!==mn.EACH&&function(n,t){setTimeout((function(){tn(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This usually happens when you conditionally call your tests using if/else.\n This might lead to unexpected validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n);kt(t,n);)t=xn().testObjects()[0],t=xt(e=wn(t.prev,jn()));r((function(n){return{prev:e,current:n.current}}))}return Pt(n=o(t,n)),n}function Pt(n){var t=jn();Fn((function(r){return Sn(r,t)[Nn(t)]=n,r}))}function xt(n){var t=jn();return Sn(n,t)[Nn(t)]}function kt(n,t){return G(n)&&!(n.fieldName===t.fieldName&&n.groupName===t.groupName)}function Ft(n){var t=St(n);if(function(n){var t=n.fieldName;n=n.groupName;var r=En.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=En.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||!dt(e)&&!1!==e[t])}return!u&&dt(e)}(n))return n.skip(),En.useX().testCursor.next(),t;if(n!==t&&t.fieldName===n.fieldName&&t.groupName===n.groupName&&t.isPending()&&t.cancel(),Pt(n),En.useX().testCursor.next(),n.isUntested()){t=ft().emit;var r=function(n){return En.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,h(n.message)&&m(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{r&&e(r.then)?(n.asyncTest=r,n.setPending(),wt(n)):t(rt.TEST_COMPLETED,n)}catch(t){tn("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(),wt(n));return n}function At(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=En.useX();return Ft(t=new gt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var It=r(At,{each:function(n){return function(r){return S(r)||tn("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 Rn({type:mn.EACH},(function(){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)}))}))}))}}}(At),memo:function(n){var t=Pn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=xn().suiteId()[0];var i=En.useX().testCursor.cursorAt(),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)}))):Ft(u[1])}}(At)}),Wt="4.0.0-dev-366a8b";function jt(n){e(n)||tn("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(rt.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=xn().testCallbacks()[0].fieldCallbacks;n&&!Dn(n)&&S(t[n])&&ct(t[n]),n=xn().testCallbacks()[0].doneCallbacks,Dn()||ct(n)}})),n}(),u=function(n){function t(n,t,e){return u.references.push(),r(n,i(t,e)),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(){var n=u.references;u.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),s=function(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:o(null==n?void 0:n.current,[]),current:[]}}))}}(u,{suiteId:gn()});return r(En.bind({stateRef:s,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return u.reset(),Rn({type:mn.SUITE},(function(){n.apply(void 0,t)})),Un(),ut()})),{get:En.bind({stateRef:s},tt),remove:En.bind({stateRef:s},(function(n){Wn().forEach((function(t){Xn(t,n)&&(t.cancel(),function(n){Fn((function(t){return On(t,(function(t){return n!==t}))}))}(t))}))})),reset:u.reset})}function Rt(n,t){m(n)||ht("name must be a string"),e(t)||ht("callback must be a function"),Rn({type:mn.GROUP},(function(){En.run({groupName:n},t)}))}function Xt(n){(0,xn().optionalFields()[1])((function(t){if(S(n)||m(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))}function Ut(n,t){Rn({type:mn.SKIP_WHEN},(function(){En.run({skipped:i(n)},(function(){return t()}))}))}function Dt(){var n=En.useX("warn hook called outside of a running suite.");n.currentTest||tn("warn called outside of a test."),n.currentTest.warn()}export{Wt as VERSION,jt as create,hn as enforce,Rt as group,lt as only,Xt as optional,pt as skip,Ut as skipWhen,It as test,Dt 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}).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 d=c(v);function h(n){return void 0===n}var g=c(h);function m(n){return String(n)===n}function y(n,t){return m(n)&&m(t)&&n.endsWith(t)}var N=c(y);function b(n,t){return n===t}var E=c(b);function C(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var O=c(C);function T(n,t){return C(n)&&C(t)&&Number(n)>Number(t)}function w(n,t){return C(n)&&C(t)&&Number(n)>=Number(t)}function S(n){return!!Array.isArray(n)}var P=c(S);function x(n,t){return!!(S(t)||m(t)&&m(n))&&-1!==t.indexOf(n)}var k=c(x);function F(n,t){return C(n)&&C(t)&&Number(n)<=Number(t)}function A(n,t,r){return w(n,t)&&F(n,r)}var I=c(A);function W(n){return m(n)&&!n.trim()}var X=c(W);function R(n){return!!n===n}var j=c(R);function U(n){return"number"==typeof n}var D=c(U);function L(n){if(n){if(U(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(L);function q(n){return Number.isNaN(n)}var B=c(q);function K(n){return!!C(n)&&0>Number(n)}var _=c(K),H=c(m);function M(n){return!!n}var J=c(M);function z(n,t){return C(n)&&C(t)&&Number(n)<Number(t)}function V(n,t){return t instanceof RegExp?t.test(n):!!m(t)&&new RegExp(t).test(n)}var Y=c(V);function Q(n,t){return C(n)&&C(t)&&Number(n)===Number(t)}var Z=c(Q);function $(n,t){return m(n)&&m(t)&&n.startsWith(t)}var nn=c($);function tn(n,t){throw Error(o(t,n))}function rn(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:tn(o(n,"Context was used after it was closed"))}}}var en=rn((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:un})}));function un(){return null}function on(n,t){function r(r){var e=n[r],u=t[r];if(!(r=en.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 sn=r({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:N,doesNotStartWith:nn,endsWith:y,equals:b,greaterThan:T,greaterThanOrEquals:w,gt:T,gte:w,inside:x,isArray:S,isBetween:A,isBlank:W,isBoolean:R,isEmpty:L,isEven:function(n){return!!C(n)&&0==n%2},isFalsy:J,isNaN:q,isNegative:K,isNotArray:P,isNotBetween:I,isNotBlank:X,isNotBoolean:j,isNotEmpty:G,isNotNaN:B,isNotNull:d,isNotNumber:D,isNotNumeric:O,isNotString:H,isNotUndefined:g,isNull:v,isNumber:U,isNumeric:C,isOdd:function(n){return!!C(n)&&0!=n%2},isPositive:_,isString:m,isTruthy:M,isUndefined:h,lengthEquals:f,lengthNotEquals:l,lessThan:z,lessThanOrEquals:F,longerThan:p,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:z,lte:F,matches:V,notEquals:E,notInside:k,notMatches:Y,numberEquals:Q,numberNotEquals:Z,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:$},{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 h(n)||null===n?s(!0):a(t,n)}},{shape:function(n,t){var r=on(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:on,isArrayOf:function(n,t){return o(u(n,(function(n,r,e){(e=en.run({value:n,set:!0,meta:{index:e}},(function(){return a(t,n)}))).pass||r(e)})),s(!0))}});function an(n){for(var t in sn){var r=sn[t];e(r)&&n(t,r)}}function cn(){return"function"==typeof Proxy}function fn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return R(n)||n&&R(n.pass)||tn("Incorrect return value for rule: "+JSON.stringify(n)),R(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function ln(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=fn.apply(void 0,t([en.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!L(o.message))throw o.message;tn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!cn())return an((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=sn[t])return r(u,n,t)}});return u}function pn(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=sn[a];e.push((function(n){return fn.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=en.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 cn()?p=new Proxy(p,{get:function(t,r){return sn[r]?n(r):t[r]}}):(an((function(t){p[t]=n(t)})),p)}}(n)}function vn(n){var t,r={};for(t in n)r[t]=hn.optional(n[t]);return r}var dn,hn=(dn=n({context:function(){return en.useX()},extend:function(n){r(sn,n)}},{partial:vn}),cn()?new Proxy(r(ln,dn),{get:function(n,t){return t in n?n[t]:sn[t]?pn(t):void 0}}):(an((function(n){dn[n]=pn(n)})),dn)),gn=function(n){return function(){return""+n++}}(0);var mn,yn=mn||(mn={});function Nn(n){return(n=[].concat(n))[n.length-1]}function bn(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return Nn(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,Nn(t)},removeLevel:function(){t.pop()},reset:n}}yn[yn.DEFAULT=0]="DEFAULT",yn[yn.SUITE=1]="SUITE",yn[yn.EACH=2]="EACH",yn[yn.SKIP_WHEN=3]="SKIP_WHEN",yn[yn.GROUP=4]="GROUP";var En=rn((function(n,t){return t?null:r({},{isolate:{type:mn.DEFAULT},testCursor:bn(),exclusion:{tests:{},groups:{}}},n)}));function Cn(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];S(u)?r.push(Cn(u,t)):(u=t(u),d(u)&&r.push(u))}return r}function On(n){return[].concat(n).reduce((function(n,t){return S(t)?n.concat(On(t)):[].concat(n).concat(t)}),[])}function Tn(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=o(n[e],[]),n=n[e]}return n}function wn(n){function t(e,u){var i=t.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),p(r,n)&&(r.length=n),u)}void 0===n&&(n=1);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 Sn(){return En.useX().stateRef}function Pn(){(0,Sn().testObjects()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function xn(n){(0,Sn().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function kn(){return On(Cn(Sn().testObjects()[0].current,(function(n){return n.isPending()?n:null})))}var Fn=wn();function An(){var n=Sn().testObjects()[0].current;return Fn([n],(function(){return On(n)}))}function In(){return En.useX().testCursor.getCursor()}function Wn(n,t){if(n=void 0===(n=n.type)?mn.DEFAULT:n,e(t)){var r=In();return En.run({isolate:{type:n}},(function(){En.useX().testCursor.addLevel(),xn((function(n){return Tn(n,r)[Nn(r)]=[],n}));var n=t();return En.useX().testCursor.removeLevel(),En.useX().testCursor.next(),n}))}}function Xn(n,t){return!(!t||n.fieldName!==t)}function Rn(){var n=Sn().optionalFields()[0];if(!L(n)){var t={};xn((function(r){return Cn(r,(function(r){var u=r.fieldName;if(t.hasOwnProperty(u))t[r.fieldName]&&r.omit();else{var i=n[u];e(i)&&(t[u]=i(),t[r.fieldName]&&r.omit())}return r}))}))}}function jn(n){var t=kn();return!L(t)&&(n?t.some((function(t){return Xn(t,n)})):G(t))}function Un(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 Dn(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&&!Xn(r,o)||"warnings"===t!=!!r.warns||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function Ln(n){return qn("errors",n)}function Gn(n){return qn("warnings",n)}function qn(n,t){return n=Dn(n,An(),{fieldName:t}),t?n[t]:n}function Bn(n,t){return n=_n("errors",n,t),t?n[t]:n}function Kn(n,t){return n=_n("warnings",n,t),t?n[t]:n}function _n(n,t,r){return t||tn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),Dn(n,An(),{group:t,fieldName:r})}function Hn(n,t,r){return!(!n.hasFailures()||r&&!Xn(n,r)||"warnings"===t!=!!n.warns)}function Mn(n){return zn("errors",n)}function Jn(n){return zn("warnings",n)}function zn(n,t){return An().some((function(r){return Hn(r,n,t)}))}function Vn(n,t){return Qn("errors",n,t)}function Yn(n,t){return Qn("warnings",n,t)}function Qn(n,t,r){return An().some((function(e){return t===e.groupName&&Hn(e,n,r)}))}var Zn=wn(20);function $n(){var n=An(),t={stateRef:Sn()};return Zn([n],En.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return An().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=Un(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=Un(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:En.bind(t,Ln),getErrorsByGroup:En.bind(t,Bn),getWarnings:En.bind(t,Gn),getWarningsByGroup:En.bind(t,Kn),hasErrors:En.bind(t,Mn),hasErrorsByGroup:En.bind(t,Vn),hasWarnings:En.bind(t,Jn),hasWarningsByGroup:En.bind(t,Yn),isValid:En.bind(t,(function(n){var t=$n(),r=An().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(r=!!n&&!!r[n])?n=!0:t.hasErrors(n)?n=!1:n=!(L(r=An())||n&&L(t.tests[n])||function(n){var t=Sn().optionalFields()[0];return G(kn().filter((function(r){return!(n&&!Xn(r,n))&&!0!==t[r.fieldName]})))}(n))&&function(n){var t=An(),r=Sn().optionalFields()[0];return t.every((function(t){return!(!n||Xn(t,n))||!0===r[t.fieldName]||t.isTested()||t.isOmitted()}))}(n),n}))})})))}var nt,tt=wn(20);function rt(){var n=An(),t={stateRef:Sn()};return tt([n],En.bind(t,(function(){return r({},$n(),{done:En.bind(t,it)})})))}function et(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function ut(n){return!(jn()&&(!n||jn(n)))}function it(){function n(){return e($n())}for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=(t=t.reverse())[0];return t=t[1],r=rt(),et(e,t,r)?r:ut(t)?(n(),r):(ot(n,t),r)}function ot(n,t){var r=En.bind({},n);(0,Sn().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function st(n){return n.forEach((function(n){return n()}))}function at(){var n=En.useX();return n.bus||tn(),n.bus}function ct(n){return lt("only","tests",n)}function ft(n){return lt("skip","tests",n)}function lt(n,t,r){var e=En.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){m(r)&&(e.exclusion[t][r]="only"===n)}))}function pt(n){for(var t in n)if(!0===n[t])return!0;return!1}function vt(n){tn("Wrong arguments passed to group. Group "+n+".")}(nt||(nt={})).TEST_COMPLETED="test_completed",ct.group=function(n){return lt("only","groups",n)},ft.group=function(n){return lt("skip","groups",n)};var dt=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=ht,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,h(this.message)&&m(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Ct||(this.status=n)},n.prototype.setPending=function(){this.setStatus(bt)},n.prototype.fail=function(){this.setStatus(this.warns?yt:mt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Nt)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.setStatus(gt)},n.prototype.cancel=function(){this.setStatus(Et),Pn()},n.prototype.omit=function(){this.setStatus(Ct)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===bt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===Ct},n.prototype.isUntested=function(){return this.status===ht},n.prototype.isFailing=function(){return this.status===mt},n.prototype.isCanceled=function(){return this.status===Et},n.prototype.isSkipped=function(){return this.status===gt},n.prototype.isPassing=function(){return this.status===Nt},n.prototype.isWarning=function(){return this.status===yt},n}(),ht="UNTESTED",gt="SKIPPED",mt="FAILED",yt="WARNING",Nt="PASSING",bt="PENDING",Et="CANCELED",Ct="OMITTED";function Ot(n){var t=n.asyncTest,r=n.message;if(t&&e(t.then)){var u=at().emit,i=Sn(),o=En.bind({stateRef:i},(function(){Pn(),u(nt.TEST_COMPLETED,n)}));i=En.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=m(t)?t:r,n.fail(),o())}));try{t.then(o,i)}catch(n){i()}}}function Tt(n){var t=Sn().testObjects(),r=t[1],e=t[0].prev;if(L(e))return wt(n),n;if(function(n,t){return G(n)&&!(n.fieldName===t.fieldName&&n.groupName===t.groupName)}(t=function(n){var t=In();return Tn(n,t)[Nn(t)]}(e),n)){!function(n,t){En.useX().isolate.type!==mn.EACH&&function(n,t){setTimeout((function(){tn(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n),t=Tn(e,In());var u=En.useX().testCursor.cursorAt();t.splice(u),r((function(n){return{prev:e,current:n.current}})),t=null}return wt(n=o(t,n)),n}function wt(n){var t=In();xn((function(r){return Tn(r,t)[Nn(t)]=n,r}))}function St(n){var t=Tt(n);if(function(n){var t=n.fieldName;n=n.groupName;var r=En.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=En.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||!pt(e)&&!1!==e[t])}return!u&&pt(e)}(n))return n.skip(),En.useX().testCursor.next(),t;if(n!==t&&t.fieldName===n.fieldName&&t.groupName===n.groupName&&t.isPending()&&t.cancel(),wt(n),En.useX().testCursor.next(),n.isUntested()){t=at().emit;var r=function(n){return En.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,h(n.message)&&m(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{r&&e(r.then)?(n.asyncTest=r,n.setPending(),Ot(n)):t(nt.TEST_COMPLETED,n)}catch(t){tn("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(),Ot(n));return n}function Pt(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=En.useX();return St(t=new dt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var xt=r(Pt,{each:function(n){return function(r){return S(r)||tn("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 Wn({type:mn.EACH},(function(){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)}))}))}))}}}(Pt),memo:function(n){var t=wn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Sn().suiteId()[0];var i=En.useX().testCursor.cursorAt(),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)}))):St(u[1])}}(Pt)}),kt="4.0.0-dev-8851ff";function Ft(n){e(n)||tn("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(nt.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=Sn().testCallbacks()[0].fieldCallbacks;n&&!jn(n)&&S(t[n])&&st(t[n]),n=Sn().testCallbacks()[0].doneCallbacks,jn()||st(n)}})),n}(),u=function(n){function t(n,t,e){return u.references.push(),r(n,i(t,e)),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(){var n=u.references;u.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),o=function(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}(u,{suiteId:gn()});return r(En.bind({stateRef:o,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return u.reset(),Wn({type:mn.SUITE},(function(){n.apply(void 0,t)})),Rn(),rt()})),{get:En.bind({stateRef:o},$n),remove:En.bind({stateRef:o},(function(n){An().forEach((function(t){Xn(t,n)&&(t.cancel(),function(n){xn((function(t){return Cn(t,(function(t){return n!==t?t:null}))}))}(t))}))})),reset:u.reset})}function At(n,t){m(n)||vt("name must be a string"),e(t)||vt("callback must be a function"),Wn({type:mn.GROUP},(function(){En.run({groupName:n},t)}))}function It(n){(0,Sn().optionalFields()[1])((function(t){if(S(n)||m(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))}function Wt(n,t){Wn({type:mn.SKIP_WHEN},(function(){En.run({skipped:i(n)},(function(){return t()}))}))}function Xt(){var n=En.useX("warn hook called outside of a running suite.");n.currentTest||tn("warn called outside of a test."),n.currentTest.warn()}export{kt as VERSION,Ft as create,hn as enforce,At as group,ct as only,It as optional,ft as skip,Wt as skipWhen,xt as test,Xt as warn};
@@ -887,7 +887,7 @@
887
887
  }); }),
888
888
  testObjects: state.registerStateKey(function (prev) {
889
889
  return {
890
- prev: defaultTo(prev === null || prev === void 0 ? void 0 : prev.current, []),
890
+ prev: (prev ? prev.current : []),
891
891
  current: []
892
892
  };
893
893
  })
@@ -951,23 +951,21 @@
951
951
  }, ctxRef);
952
952
  });
953
953
 
954
- function map(array, callback) {
955
- return array.map(function (item) {
956
- if (isArray(item)) {
957
- return map(item, callback);
958
- }
959
- return callback(item);
960
- });
961
- }
962
- function filter(array, predicate) {
954
+ // This is sort of a map/filter in one function.
955
+ // Normally, behaves like a nested-array map
956
+ // Returning `null` will drop the element from the array
957
+ function transform(array, cb) {
963
958
  var res = [];
964
959
  for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
965
960
  var v = array_1[_i];
966
961
  if (isArray(v)) {
967
- res.push(filter(v, predicate));
962
+ res.push(transform(v, cb));
968
963
  }
969
- else if (predicate(v)) {
970
- res.push(v);
964
+ else {
965
+ var output = cb(v);
966
+ if (isNotNull(output)) {
967
+ res.push(output);
968
+ }
971
969
  }
972
970
  }
973
971
  return res;
@@ -988,11 +986,6 @@
988
986
  return asArray(acc).concat(value);
989
987
  }, []);
990
988
  }
991
- function removeAtPath(array, path) {
992
- var current = getCurrent(array, path);
993
- current.splice(path[last(path)], 1);
994
- return array;
995
- }
996
989
  function getCurrent(array, path) {
997
990
  var current = array;
998
991
  for (var _i = 0, _a = path.slice(0, -1); _i < _a.length; _i++) {
@@ -1083,7 +1076,9 @@
1083
1076
  // Derived state
1084
1077
  function useAllIncomplete() {
1085
1078
  var current = useTestObjects()[0].current;
1086
- return flatten(filter(current, function (testObject) { return testObject.isPending(); }));
1079
+ return flatten(transform(current, function (testObject) {
1080
+ return testObject.isPending() ? testObject : null;
1081
+ }));
1087
1082
  }
1088
1083
  function useOmittedFields() {
1089
1084
  var testObjects = useTestsFlat();
@@ -1157,7 +1152,7 @@
1157
1152
  }
1158
1153
  var shouldOmit = {};
1159
1154
  useSetTests(function (tests) {
1160
- return map(tests, function (testObject) {
1155
+ return transform(tests, function (testObject) {
1161
1156
  var fieldName = testObject.fieldName;
1162
1157
  if (shouldOmit.hasOwnProperty(fieldName)) {
1163
1158
  omit(testObject);
@@ -1533,7 +1528,9 @@
1533
1528
  * Removes test object from suite state
1534
1529
  */
1535
1530
  function removeTestFromState (testObject) {
1536
- useSetTests(function (tests) { return filter(tests, function (test) { return testObject !== test; }); });
1531
+ useSetTests(function (tests) {
1532
+ return transform(tests, function (test) { return (testObject !== test ? test : null); });
1533
+ });
1537
1534
  }
1538
1535
 
1539
1536
  function createBus() {
@@ -2021,7 +2018,16 @@
2021
2018
  }
2022
2019
  }
2023
2020
 
2024
- // eslint-disable-next-line max-statements
2021
+ /**
2022
+ * This module serves as the "collision detection" mechanism for Vest.
2023
+ * It is used to ensure that tests are not called in a different order than
2024
+ * they were called in the previous run.
2025
+ * If they are, it will throw a deferred error unless explicitly allowed.
2026
+ *
2027
+ * For now it seems pretty safe, and it covers most common use cases, but it can
2028
+ * be improved in the future both in terms of performance and scenarios it covers.
2029
+ */
2030
+ // eslint-disable-next-line max-statements, max-lines-per-function
2025
2031
  function useTestAtCursor(newTestObject) {
2026
2032
  var _a = useTestObjects(), testObjects = _a[0], setTestObjects = _a[1];
2027
2033
  var prevTests = testObjects.prev;
@@ -2033,16 +2039,14 @@
2033
2039
  if (shouldPurgePrevTest(prevTest, newTestObject)) {
2034
2040
  throwTestOrderError(prevTest, newTestObject);
2035
2041
  // Here we handle just the omission of tests in the middle of the test suite.
2036
- // We need to also handle a case in which tests are added in between other tests,
2037
- // at the moment all we can do is just remove tests until we find a matching test.
2042
+ // We need to also handle a case in which tests are added in between other tests.
2043
+ // At the moment all we can do is just splice the tests out of the array when this happens.
2038
2044
  // A viable solution would be to use something like React's key prop to identify tests regardless
2039
2045
  // of their position in the suite. https://reactjs.org/docs/lists-and-keys.html#keys
2040
- while (shouldPurgePrevTest(prevTest, newTestObject)) {
2041
- var testObjects_1 = useTestObjects()[0];
2042
- prevTests = removeAtPath(testObjects_1.prev, usePath());
2043
- prevTest = useGetTestAtCursor(prevTests);
2044
- }
2045
- // We actually don't mind mutating the state directly (as we do above). There is no harm in it
2046
+ var current = getCurrent(prevTests, usePath());
2047
+ var cursorAt = useCursorAt();
2048
+ current.splice(cursorAt);
2049
+ // We actually don't mind mutating the state directly (as can be seen above). There is no harm in it
2046
2050
  // since we're only touching the "prev" state. The reason we still use the setter function is
2047
2051
  // to prevent future headaches if we ever do need to rely on prev-state immutability.
2048
2052
  setTestObjects(function (_a) {
@@ -2052,6 +2056,8 @@
2052
2056
  current: current
2053
2057
  });
2054
2058
  });
2059
+ // Need to see if this has any effect at all.
2060
+ prevTest = null;
2055
2061
  }
2056
2062
  var nextTest = defaultTo(prevTest, newTestObject);
2057
2063
  useSetTestAtCursor(nextTest);
@@ -2074,7 +2080,7 @@
2074
2080
  if (shouldAllowReorder()) {
2075
2081
  return;
2076
2082
  }
2077
- throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.fieldName + "\n This usually happens when you conditionally call your tests using if/else.\n This might lead to unexpected validation results.\n Replacing if/else with skipWhen solves these issues.");
2083
+ throwErrorDeferred("Vest Critical Error: Tests called in different order than previous run.\n expected: " + prevTest.fieldName + "\n received: " + newTestObject.fieldName + "\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.");
2078
2084
  }
2079
2085
 
2080
2086
  function registerPrevRunTest(testObject) {
@@ -2174,7 +2180,7 @@
2174
2180
  memo: bindTestMemo(testBase)
2175
2181
  });
2176
2182
 
2177
- var VERSION = "4.0.0-dev-366a8b";
2183
+ var VERSION = "4.0.0-dev-8851ff";
2178
2184
 
2179
2185
  exports.VERSION = VERSION;
2180
2186
  exports.create = create;
@@ -1 +1 @@
1
- "use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n,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)}function r(n){return"function"==typeof n}function e(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 u(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return r(n)?n.apply(void 0,t):n}function i(n,t){var r;return null!==(r=u(n))&&void 0!==r?r:t}function o(n,t){return n={pass:n},t&&(n.message=t),n}function s(n,t){try{return n.run(t)}catch(n){return o(!1)}}function a(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function c(n,t){return n.length===Number(t)}function f(n,t){return n.length>Number(t)}function l(n){return null===n}function p(n){return void 0===n}function v(n){return String(n)===n}function d(n,t){return v(n)&&v(t)&&n.endsWith(t)}function h(n,t){return n===t}function g(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function m(n,t){return g(n)&&g(t)&&Number(n)>Number(t)}function y(n,t){return g(n)&&g(t)&&Number(n)>=Number(t)}function N(n){return!!Array.isArray(n)}function b(n,t){return!!(N(t)||v(t)&&v(n))&&-1!==t.indexOf(n)}function E(n,t){return g(n)&&g(t)&&Number(n)<=Number(t)}function C(n,t,r){return y(n,t)&&E(n,r)}function O(n){return v(n)&&!n.trim()}function T(n){return!!n===n}function w(n){return"number"==typeof n}function S(n){if(n){if(w(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return c(n,0);if("object"==typeof n)return c(Object.keys(n),0)}return!0}function P(n){return Number.isNaN(n)}function x(n){return!!g(n)&&0>Number(n)}function k(n){return!!n}function F(n,t){return g(n)&&g(t)&&Number(n)<Number(t)}function I(n,t){return t instanceof RegExp?t.test(n):!!v(t)&&new RegExp(t).test(n)}function A(n,t){return g(n)&&g(t)&&Number(n)===Number(t)}function W(n,t){return v(n)&&v(t)&&n.startsWith(t)}function j(n,t){throw Error(i(t,n))}function R(n){function t(t,u){var i,o,s=r();return t=Mn({},s||{},null!==(i=null==n?void 0:n(t,s))&&void 0!==i?i:t),i=e.ctx=Object.freeze(t),e.ancestry.unshift(i),u=u(i),e.ancestry.shift(),e.ctx=null!==(o=e.ancestry[0])&&void 0!==o?o:null,u}function r(){return e.ctx}var e={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:r,useX:function(n){var t;return null!==(t=e.ctx)&&void 0!==t?t:j(i(n,"Context was used after it was closed"))}}}function X(){return null}function U(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=vt.run({value:e,set:!0,meta:{key:r}},(function(){return s(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return o(!0)}function D(n){for(var t in dt){var e=dt[t];r(e)&&n(t,e)}}function L(){return"function"==typeof Proxy}function G(n,r,e){for(var i=[],s=3;s<arguments.length;s++)i[s-3]=arguments[s];return T(n)||n&&T(n.pass)||j("Incorrect return value for rule: "+JSON.stringify(n)),T(n)?o(n):o(n.pass,u.apply(void 0,t([n.message,r,e],i)))}function q(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=G.apply(void 0,t([vt.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!S(o.message))throw o.message;j("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!L())return D((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=dt[t])return r(u,n,t)}});return u}function B(n){var r,s=[];return function n(a){return function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l=dt[a];s.push((function(n){return G.apply(void 0,t([l.apply(void 0,t([n],c)),a,n],c))}));var p={run:function(n){return i(e(s,(function(t,e){var i,s=vt.run({value:n},(function(){return t(n)}));s.pass||e(o(!!s.pass,null!==(i=u(r,n,s.message))&&void 0!==i?i:s.message))})),o(!0))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return L()?p=new Proxy(p,{get:function(t,r){return dt[r]?n(r):t[r]}}):(D((function(t){p[t]=n(t)})),p)}}(n)}function _(n){var t,r={};for(t in n)r[t]=ht.optional(n[t]);return r}function K(n){return(n=[].concat(n))[n.length-1]}function H(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return K(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,K(t)},removeLevel:function(){t.pop()},reset:n}}function M(n,t){return n.map((function(n){return N(n)?M(n,t):t(n)}))}function J(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];N(u)?r.push(J(u,t)):t(u)&&r.push(u)}return r}function V(n){return[].concat(n).reduce((function(n,t){return N(t)?n.concat(V(t)):[].concat(n).concat(t)}),[])}function z(n,t){return Y(n,t).splice(t[K(t)],1),n}function Y(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=i(n[e],[]),n=n[e]}return n}function Q(n){void 0===n&&(n=1);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),f(t,n)&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function Z(){return yt.useX().stateRef}function $(){(0,Z().testObjects()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function nn(n){(0,Z().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function tn(){return V(J(Z().testObjects()[0].current,(function(n){return n.isPending()})))}function rn(){var n=Z().testObjects()[0].current;return Nt([n],(function(){return V(n)}))}function en(){return yt.useX().testCursor.getCursor()}function un(n,t){if(n=void 0===(n=n.type)?_n.DEFAULT:n,r(t)){var e=en();return yt.run({isolate:{type:n}},(function(){yt.useX().testCursor.addLevel(),nn((function(n){return Y(n,e)[K(e)]=[],n}));var n=t();return yt.useX().testCursor.removeLevel(),yt.useX().testCursor.next(),n}))}}function on(n,t){return!(!t||n.fieldName!==t)}function sn(){var n=Z().optionalFields()[0];if(!S(n)){var t={};nn((function(e){return M(e,(function(e){var u=e.fieldName;if(t.hasOwnProperty(u))t[e.fieldName]&&e.omit();else{var i=n[u];r(i)&&(t[u]=i(),t[e.fieldName]&&e.omit())}return e}))}))}}function an(n){var t=tn();return!S(t)&&(n?t.some((function(t){return on(t,n)})):it(t))}function cn(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 fn(n,t,r){var e;void 0===r&&(r={});var u=(r=r||{}).group,i=r.fieldName;return t.reduce((function(t,r){return u&&r.groupName!==u||i&&!on(r,i)||"warnings"===n!=!!r.warns||!r.hasFailures()||(t[r.fieldName]=(t[r.fieldName]||[]).concat(r.message||[])),t}),Hn({},i&&((e={})[i]=[],e)))}function ln(n){return vn("errors",n)}function pn(n){return vn("warnings",n)}function vn(n,t){return n=fn(n,rn(),{fieldName:t}),t?n[t]:n}function dn(n,t){return n=gn("errors",n,t),t?n[t]:n}function hn(n,t){return n=gn("warnings",n,t),t?n[t]:n}function gn(n,t,r){return t||j("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),fn(n,rn(),{group:t,fieldName:r})}function mn(n,t,r){return!(!n.hasFailures()||r&&!on(n,r)||"warnings"===t!=!!n.warns)}function yn(n){return bn("errors",n)}function Nn(n){return bn("warnings",n)}function bn(n,t){return rn().some((function(r){return mn(r,n,t)}))}function En(n,t){return On("errors",n,t)}function Cn(n,t){return On("warnings",n,t)}function On(n,t,r){return rn().some((function(e){return t===e.groupName&&mn(e,n,r)}))}function Tn(){var n=rn(),t={stateRef:Z()};return bt([n],yt.bind(t,(function(){return Mn(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return rn().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=cn(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=cn(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:yt.bind(t,ln),getErrorsByGroup:yt.bind(t,dn),getWarnings:yt.bind(t,pn),getWarningsByGroup:yt.bind(t,hn),hasErrors:yt.bind(t,yn),hasErrorsByGroup:yt.bind(t,En),hasWarnings:yt.bind(t,Nn),hasWarningsByGroup:yt.bind(t,Cn),isValid:yt.bind(t,(function(n){var t=Tn(),r=rn().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(r=!!n&&!!r[n])?n=!0:t.hasErrors(n)?n=!1:n=!(S(r=rn())||n&&S(t.tests[n])||function(n){var t=Z().optionalFields()[0];return it(tn().filter((function(r){return!(n&&!on(r,n))&&!0!==t[r.fieldName]})))}(n))&&function(n){var t=rn(),r=Z().optionalFields()[0];return t.every((function(t){return!(!n||on(t,n))||!0===r[t.fieldName]||t.isTested()||t.isOmitted()}))}(n),n}))})})))}function wn(){var n=rn(),t={stateRef:Z()};return Et([n],yt.bind(t,(function(){return Mn({},Tn(),{done:yt.bind(t,Ct)})})))}function Sn(n,t,e){return!(r(n)&&(!t||e.tests[t]&&0!==e.tests[t].testCount))}function Pn(n){return!(an()&&(!n||an(n)))}function xn(n,t){var r=yt.bind({},n);(0,Z().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function kn(n){return n.forEach((function(n){return n()}))}function Fn(){var n=yt.useX();return n.bus||j(),n.bus}function In(n){return Wn("only","tests",n)}function An(n){return Wn("skip","tests",n)}function Wn(n,t,r){var e=yt.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){v(r)&&(e.exclusion[t][r]="only"===n)}))}function jn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Rn(n){j("Wrong arguments passed to group. Group "+n+".")}function Xn(n){var t=n.asyncTest,e=n.message;if(t&&r(t.then)){var u=Fn().emit,i=Z(),o=yt.bind({stateRef:i},(function(){$(),u(mt.TEST_COMPLETED,n)}));i=yt.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=v(t)?t:e,n.fail(),o())}));try{t.then(o,i)}catch(n){i()}}}function Un(n){var t=Z().testObjects(),r=t[1],e=t[0].prev;if(S(e))return Dn(n),n;if(Gn(t=Ln(e),n)){for(function(n,t){yt.useX().isolate.type!==_n.EACH&&function(n,t){setTimeout((function(){j(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This usually happens when you conditionally call your tests using if/else.\n This might lead to unexpected validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n);Gn(t,n);)t=Z().testObjects()[0],t=Ln(e=z(t.prev,en()));r((function(n){return{prev:e,current:n.current}}))}return Dn(n=i(t,n)),n}function Dn(n){var t=en();nn((function(r){return Y(r,t)[K(t)]=n,r}))}function Ln(n){var t=en();return Y(n,t)[K(t)]}function Gn(n,t){return it(n)&&!(n.fieldName===t.fieldName&&n.groupName===t.groupName)}function qn(n){var t=Un(n);if(function(n){var t=n.fieldName;n=n.groupName;var r=yt.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=yt.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||!jn(e)&&!1!==e[t])}return!u&&jn(e)}(n))return n.skip(),yt.useX().testCursor.next(),t;if(n!==t&&t.fieldName===n.fieldName&&t.groupName===n.groupName&&t.isPending()&&t.cancel(),Dn(n),yt.useX().testCursor.next(),n.isUntested()){t=Fn().emit;var e=function(n){return yt.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,p(n.message)&&v(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{e&&r(e.then)?(n.asyncTest=e,n.setPending(),Xn(n)):t(mt.TEST_COMPLETED,n)}catch(t){j("Your test function "+n.fieldName+" returned "+JSON.stringify(e)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}else(t=n.asyncTest)&&r(t.then)&&(n.setPending(),Xn(n));return n}function Bn(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=yt.useX();return qn(t=new Ot(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var _n,Kn,Hn=function(){return(Hn=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)},Mn=Object.assign,Jn=a(c),Vn=a(l),zn=a(p),Yn=a(d),Qn=a(h),Zn=a(g),$n=a(N),nt=a(b),tt=a(C),rt=a(O),et=a(T),ut=a(w),it=a(S),ot=a(P),st=a(x),at=a(v),ct=a(k),ft=a(I),lt=a(A),pt=a(W),vt=R((function(n,t){var r={value:n.value,meta:n.meta||{}};return t?n.set?Mn(r,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:Mn(r,{parent:X})})),dt=Mn({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:Yn,doesNotStartWith:pt,endsWith:d,equals:h,greaterThan:m,greaterThanOrEquals:y,gt:m,gte:y,inside:b,isArray:N,isBetween:C,isBlank:O,isBoolean:T,isEmpty:S,isEven:function(n){return!!g(n)&&0==n%2},isFalsy:ct,isNaN:P,isNegative:x,isNotArray:$n,isNotBetween:tt,isNotBlank:rt,isNotBoolean:et,isNotEmpty:it,isNotNaN:ot,isNotNull:Vn,isNotNumber:ut,isNotNumeric:Zn,isNotString:at,isNotUndefined:zn,isNull:l,isNumber:w,isNumeric:g,isOdd:function(n){return!!g(n)&&0!=n%2},isPositive:st,isString:v,isTruthy:k,isUndefined:p,lengthEquals:c,lengthNotEquals:Jn,lessThan:F,lessThanOrEquals:E,longerThan:f,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:F,lte:E,matches:I,notEquals:Qn,notInside:nt,notMatches:ft,numberEquals:A,numberNotEquals:lt,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:W},{allOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass||r(t)})),o(!0))},anyOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass&&r(t)})),o(!1))},noneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){s(t,n).pass&&r(o(!1))})),o(!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(f(e,1))return!1;(t=s(t,n)).pass&&e.push(t)})),o(c(e,1))},optional:function(n,t){return p(n)||null===n?o(!0):s(t,n)}},{shape:function(n,t){var r=U(n,t);if(!r.pass)return r;for(var e in n)if(!Object.prototype.hasOwnProperty.call(t,e))return o(!1);return o(!0)},loose:U,isArrayOf:function(n,t){return i(e(n,(function(n,r,e){(e=vt.run({value:n,set:!0,meta:{index:e}},(function(){return s(t,n)}))).pass||r(e)})),o(!0))}}),ht=(Kn=Hn({context:function(){return vt.useX()},extend:function(n){Mn(dt,n)}},{partial:_}),L()?new Proxy(Mn(q,Kn),{get:function(n,t){return t in n?n[t]:dt[t]?B(t):void 0}}):(D((function(n){Kn[n]=B(n)})),Kn)),gt=function(n){return function(){return""+n++}}(0);!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.GROUP=4]="GROUP"}(_n||(_n={}));var mt,yt=R((function(n,t){return t?null:Mn({},{isolate:{type:_n.DEFAULT},testCursor:H(),exclusion:{tests:{},groups:{}}},n)})),Nt=Q(),bt=Q(20),Et=Q(20),Ct=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=wn(),Sn(r,n,t))return t;var e=function(){return r(Tn())};return Pn(n)?(e(),t):(xn(e,n),t)};(mt||(mt={})).TEST_COMPLETED="test_completed",In.group=function(n){return Wn("only","groups",n)},An.group=function(n){return Wn("skip","groups",n)};var Ot=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=gt(),this.warns=!1,this.status=Tt,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,p(this.message)&&v(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==It||(this.status=n)},n.prototype.setPending=function(){this.setStatus(kt)},n.prototype.fail=function(){this.setStatus(this.warns?Pt:St)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(xt)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.setStatus(wt)},n.prototype.cancel=function(){this.setStatus(Ft),$()},n.prototype.omit=function(){this.setStatus(It)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===kt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===It},n.prototype.isUntested=function(){return this.status===Tt},n.prototype.isFailing=function(){return this.status===St},n.prototype.isCanceled=function(){return this.status===Ft},n.prototype.isSkipped=function(){return this.status===wt},n.prototype.isPassing=function(){return this.status===xt},n.prototype.isWarning=function(){return this.status===Pt},n}(),Tt="UNTESTED",wt="SKIPPED",St="FAILED",Pt="WARNING",xt="PASSING",kt="PENDING",Ft="CANCELED",It="OMITTED",At=Mn(Bn,{each:function(n){return function(r){return N(r)||j("test.each: Expected table to be an array."),function(e){for(var i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];var s=(i=i.reverse())[0],a=i[1];return un({type:_n.EACH},(function(){return r.map((function(r){return r=[].concat(r),n(u.apply(void 0,t([e],r)),u.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}))}}}(Bn),memo:function(n){var t=Q(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Z().suiteId()[0];var i=yt.useX().testCursor.cursorAt(),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)}))):qn(u[1])}}(Bn)});n.VERSION="4.0.0-dev-366a8b",n.create=function(n){r(n)||j("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(mt.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=Z().testCallbacks()[0].fieldCallbacks;n&&!an(n)&&N(t[n])&&kn(t[n]),n=Z().testCallbacks()[0].doneCallbacks,an()||kn(n)}})),n}(),e=function(n){function t(n,t,r){return i.references.push(),e(n,u(t,r)),function(){return[i.references[n],function(t){return e(n,u(t,i.references[n]))}]}}function e(t,e){var u=i.references[t];i.references[t]=e,r(t=o[t][1])&&t(e,u),r(n)&&n()}var i={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){var n=i.references;i.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),o=function(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:i(null==n?void 0:n.current,[]),current:[]}}))}}(e,{suiteId:gt()});return Mn(yt.bind({stateRef:o,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return e.reset(),un({type:_n.SUITE},(function(){n.apply(void 0,t)})),sn(),wn()})),{get:yt.bind({stateRef:o},Tn),remove:yt.bind({stateRef:o},(function(n){rn().forEach((function(t){on(t,n)&&(t.cancel(),function(n){nn((function(t){return J(t,(function(t){return n!==t}))}))}(t))}))})),reset:e.reset})},n.enforce=ht,n.group=function(n,t){v(n)||Rn("name must be a string"),r(t)||Rn("callback must be a function"),un({type:_n.GROUP},(function(){yt.run({groupName:n},t)}))},n.only=In,n.optional=function(n){(0,Z().optionalFields()[1])((function(t){if(N(n)||v(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))},n.skip=An,n.skipWhen=function(n,t){un({type:_n.SKIP_WHEN},(function(){yt.run({skipped:u(n)},(function(){return t()}))}))},n.test=At,n.warn=function(){var n=yt.useX("warn hook called outside of a running suite.");n.currentTest||j("warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
1
+ "use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n,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)}function r(n){return"function"==typeof n}function e(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 u(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return r(n)?n.apply(void 0,t):n}function i(n,t){var r;return null!==(r=u(n))&&void 0!==r?r:t}function o(n,t){return n={pass:n},t&&(n.message=t),n}function s(n,t){try{return n.run(t)}catch(n){return o(!1)}}function a(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function c(n,t){return n.length===Number(t)}function f(n,t){return n.length>Number(t)}function l(n){return null===n}function p(n){return void 0===n}function v(n){return String(n)===n}function d(n,t){return v(n)&&v(t)&&n.endsWith(t)}function h(n,t){return n===t}function g(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function m(n,t){return g(n)&&g(t)&&Number(n)>Number(t)}function y(n,t){return g(n)&&g(t)&&Number(n)>=Number(t)}function N(n){return!!Array.isArray(n)}function b(n,t){return!!(N(t)||v(t)&&v(n))&&-1!==t.indexOf(n)}function E(n,t){return g(n)&&g(t)&&Number(n)<=Number(t)}function C(n,t,r){return y(n,t)&&E(n,r)}function O(n){return v(n)&&!n.trim()}function T(n){return!!n===n}function w(n){return"number"==typeof n}function S(n){if(n){if(w(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return c(n,0);if("object"==typeof n)return c(Object.keys(n),0)}return!0}function P(n){return Number.isNaN(n)}function x(n){return!!g(n)&&0>Number(n)}function k(n){return!!n}function F(n,t){return g(n)&&g(t)&&Number(n)<Number(t)}function A(n,t){return t instanceof RegExp?t.test(n):!!v(t)&&new RegExp(t).test(n)}function I(n,t){return g(n)&&g(t)&&Number(n)===Number(t)}function W(n,t){return v(n)&&v(t)&&n.startsWith(t)}function j(n,t){throw Error(i(t,n))}function R(n){function t(t,u){var i,o,s=r();return t=Bn({},s||{},null!==(i=null==n?void 0:n(t,s))&&void 0!==i?i:t),i=e.ctx=Object.freeze(t),e.ancestry.unshift(i),u=u(i),e.ancestry.shift(),e.ctx=null!==(o=e.ancestry[0])&&void 0!==o?o:null,u}function r(){return e.ctx}var e={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:r,useX:function(n){var t;return null!==(t=e.ctx)&&void 0!==t?t:j(i(n,"Context was used after it was closed"))}}}function X(){return null}function U(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=ct.run({value:e,set:!0,meta:{key:r}},(function(){return s(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return o(!0)}function D(n){for(var t in ft){var e=ft[t];r(e)&&n(t,e)}}function L(){return"function"==typeof Proxy}function G(n,r,e){for(var i=[],s=3;s<arguments.length;s++)i[s-3]=arguments[s];return T(n)||n&&T(n.pass)||j("Incorrect return value for rule: "+JSON.stringify(n)),T(n)?o(n):o(n.pass,u.apply(void 0,t([n.message,r,e],i)))}function q(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=G.apply(void 0,t([ct.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!S(o.message))throw o.message;j("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!L())return D((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=ft[t])return r(u,n,t)}});return u}function B(n){var r,s=[];return function n(a){return function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l=ft[a];s.push((function(n){return G.apply(void 0,t([l.apply(void 0,t([n],c)),a,n],c))}));var p={run:function(n){return i(e(s,(function(t,e){var i,s=ct.run({value:n},(function(){return t(n)}));s.pass||e(o(!!s.pass,null!==(i=u(r,n,s.message))&&void 0!==i?i:s.message))})),o(!0))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return L()?p=new Proxy(p,{get:function(t,r){return ft[r]?n(r):t[r]}}):(D((function(t){p[t]=n(t)})),p)}}(n)}function _(n){var t,r={};for(t in n)r[t]=lt.optional(n[t]);return r}function K(n){return(n=[].concat(n))[n.length-1]}function H(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return K(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,K(t)},removeLevel:function(){t.pop()},reset:n}}function M(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];N(u)?r.push(M(u,t)):(u=t(u),Kn(u)&&r.push(u))}return r}function J(n){return[].concat(n).reduce((function(n,t){return N(t)?n.concat(J(t)):[].concat(n).concat(t)}),[])}function V(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=i(n[e],[]),n=n[e]}return n}function z(n){void 0===n&&(n=1);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),f(t,n)&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function Y(){return dt.useX().stateRef}function Q(){(0,Y().testObjects()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function Z(n){(0,Y().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function $(){return J(M(Y().testObjects()[0].current,(function(n){return n.isPending()?n:null})))}function nn(){var n=Y().testObjects()[0].current;return ht([n],(function(){return J(n)}))}function tn(){return dt.useX().testCursor.getCursor()}function rn(n,t){if(n=void 0===(n=n.type)?Ln.DEFAULT:n,r(t)){var e=tn();return dt.run({isolate:{type:n}},(function(){dt.useX().testCursor.addLevel(),Z((function(n){return V(n,e)[K(e)]=[],n}));var n=t();return dt.useX().testCursor.removeLevel(),dt.useX().testCursor.next(),n}))}}function en(n,t){return!(!t||n.fieldName!==t)}function un(){var n=Y().optionalFields()[0];if(!S(n)){var t={};Z((function(e){return M(e,(function(e){var u=e.fieldName;if(t.hasOwnProperty(u))t[e.fieldName]&&e.omit();else{var i=n[u];r(i)&&(t[u]=i(),t[e.fieldName]&&e.omit())}return e}))}))}}function on(n){var t=$();return!S(t)&&(n?t.some((function(t){return en(t,n)})):tt(t))}function sn(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 an(n,t,r){var e;void 0===r&&(r={});var u=(r=r||{}).group,i=r.fieldName;return t.reduce((function(t,r){return u&&r.groupName!==u||i&&!en(r,i)||"warnings"===n!=!!r.warns||!r.hasFailures()||(t[r.fieldName]=(t[r.fieldName]||[]).concat(r.message||[])),t}),qn({},i&&((e={})[i]=[],e)))}function cn(n){return ln("errors",n)}function fn(n){return ln("warnings",n)}function ln(n,t){return n=an(n,nn(),{fieldName:t}),t?n[t]:n}function pn(n,t){return n=dn("errors",n,t),t?n[t]:n}function vn(n,t){return n=dn("warnings",n,t),t?n[t]:n}function dn(n,t,r){return t||j("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),an(n,nn(),{group:t,fieldName:r})}function hn(n,t,r){return!(!n.hasFailures()||r&&!en(n,r)||"warnings"===t!=!!n.warns)}function gn(n){return yn("errors",n)}function mn(n){return yn("warnings",n)}function yn(n,t){return nn().some((function(r){return hn(r,n,t)}))}function Nn(n,t){return En("errors",n,t)}function bn(n,t){return En("warnings",n,t)}function En(n,t,r){return nn().some((function(e){return t===e.groupName&&hn(e,n,r)}))}function Cn(){var n=nn(),t={stateRef:Y()};return gt([n],dt.bind(t,(function(){return Bn(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return nn().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=sn(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=sn(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:dt.bind(t,cn),getErrorsByGroup:dt.bind(t,pn),getWarnings:dt.bind(t,fn),getWarningsByGroup:dt.bind(t,vn),hasErrors:dt.bind(t,gn),hasErrorsByGroup:dt.bind(t,Nn),hasWarnings:dt.bind(t,mn),hasWarningsByGroup:dt.bind(t,bn),isValid:dt.bind(t,(function(n){var t=Cn(),r=nn().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(r=!!n&&!!r[n])?n=!0:t.hasErrors(n)?n=!1:n=!(S(r=nn())||n&&S(t.tests[n])||function(n){var t=Y().optionalFields()[0];return tt($().filter((function(r){return!(n&&!en(r,n))&&!0!==t[r.fieldName]})))}(n))&&function(n){var t=nn(),r=Y().optionalFields()[0];return t.every((function(t){return!(!n||en(t,n))||!0===r[t.fieldName]||t.isTested()||t.isOmitted()}))}(n),n}))})})))}function On(){var n=nn(),t={stateRef:Y()};return mt([n],dt.bind(t,(function(){return Bn({},Cn(),{done:dt.bind(t,yt)})})))}function Tn(n,t,e){return!(r(n)&&(!t||e.tests[t]&&0!==e.tests[t].testCount))}function wn(n){return!(on()&&(!n||on(n)))}function Sn(n,t){var r=dt.bind({},n);(0,Y().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Pn(n){return n.forEach((function(n){return n()}))}function xn(){var n=dt.useX();return n.bus||j(),n.bus}function kn(n){return An("only","tests",n)}function Fn(n){return An("skip","tests",n)}function An(n,t,r){var e=dt.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){v(r)&&(e.exclusion[t][r]="only"===n)}))}function In(n){for(var t in n)if(!0===n[t])return!0;return!1}function Wn(n){j("Wrong arguments passed to group. Group "+n+".")}function jn(n){var t=n.asyncTest,e=n.message;if(t&&r(t.then)){var u=xn().emit,i=Y(),o=dt.bind({stateRef:i},(function(){Q(),u(vt.TEST_COMPLETED,n)}));i=dt.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=v(t)?t:e,n.fail(),o())}));try{t.then(o,i)}catch(n){i()}}}function Rn(n){var t=Y().testObjects(),r=t[1],e=t[0].prev;if(S(e))return Xn(n),n;if(function(n,t){return tt(n)&&!(n.fieldName===t.fieldName&&n.groupName===t.groupName)}(t=function(n){var t=tn();return V(n,t)[K(t)]}(e),n)){!function(n,t){dt.useX().isolate.type!==Ln.EACH&&function(n,t){setTimeout((function(){j(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n),t=V(e,tn());var u=dt.useX().testCursor.cursorAt();t.splice(u),r((function(n){return{prev:e,current:n.current}})),t=null}return Xn(n=i(t,n)),n}function Xn(n){var t=tn();Z((function(r){return V(r,t)[K(t)]=n,r}))}function Un(n){var t=Rn(n);if(function(n){var t=n.fieldName;n=n.groupName;var r=dt.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=dt.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||!In(e)&&!1!==e[t])}return!u&&In(e)}(n))return n.skip(),dt.useX().testCursor.next(),t;if(n!==t&&t.fieldName===n.fieldName&&t.groupName===n.groupName&&t.isPending()&&t.cancel(),Xn(n),dt.useX().testCursor.next(),n.isUntested()){t=xn().emit;var e=function(n){return dt.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,p(n.message)&&v(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{e&&r(e.then)?(n.asyncTest=e,n.setPending(),jn(n)):t(vt.TEST_COMPLETED,n)}catch(t){j("Your test function "+n.fieldName+" returned "+JSON.stringify(e)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}else(t=n.asyncTest)&&r(t.then)&&(n.setPending(),jn(n));return n}function Dn(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=dt.useX();return Un(t=new Nt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var Ln,Gn,qn=function(){return(qn=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)},Bn=Object.assign,_n=a(c),Kn=a(l),Hn=a(p),Mn=a(d),Jn=a(h),Vn=a(g),zn=a(N),Yn=a(b),Qn=a(C),Zn=a(O),$n=a(T),nt=a(w),tt=a(S),rt=a(P),et=a(x),ut=a(v),it=a(k),ot=a(A),st=a(I),at=a(W),ct=R((function(n,t){var r={value:n.value,meta:n.meta||{}};return t?n.set?Bn(r,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:Bn(r,{parent:X})})),ft=Bn({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:Mn,doesNotStartWith:at,endsWith:d,equals:h,greaterThan:m,greaterThanOrEquals:y,gt:m,gte:y,inside:b,isArray:N,isBetween:C,isBlank:O,isBoolean:T,isEmpty:S,isEven:function(n){return!!g(n)&&0==n%2},isFalsy:it,isNaN:P,isNegative:x,isNotArray:zn,isNotBetween:Qn,isNotBlank:Zn,isNotBoolean:$n,isNotEmpty:tt,isNotNaN:rt,isNotNull:Kn,isNotNumber:nt,isNotNumeric:Vn,isNotString:ut,isNotUndefined:Hn,isNull:l,isNumber:w,isNumeric:g,isOdd:function(n){return!!g(n)&&0!=n%2},isPositive:et,isString:v,isTruthy:k,isUndefined:p,lengthEquals:c,lengthNotEquals:_n,lessThan:F,lessThanOrEquals:E,longerThan:f,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:F,lte:E,matches:A,notEquals:Jn,notInside:Yn,notMatches:ot,numberEquals:I,numberNotEquals:st,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:W},{allOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass||r(t)})),o(!0))},anyOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass&&r(t)})),o(!1))},noneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){s(t,n).pass&&r(o(!1))})),o(!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(f(e,1))return!1;(t=s(t,n)).pass&&e.push(t)})),o(c(e,1))},optional:function(n,t){return p(n)||null===n?o(!0):s(t,n)}},{shape:function(n,t){var r=U(n,t);if(!r.pass)return r;for(var e in n)if(!Object.prototype.hasOwnProperty.call(t,e))return o(!1);return o(!0)},loose:U,isArrayOf:function(n,t){return i(e(n,(function(n,r,e){(e=ct.run({value:n,set:!0,meta:{index:e}},(function(){return s(t,n)}))).pass||r(e)})),o(!0))}}),lt=(Gn=qn({context:function(){return ct.useX()},extend:function(n){Bn(ft,n)}},{partial:_}),L()?new Proxy(Bn(q,Gn),{get:function(n,t){return t in n?n[t]:ft[t]?B(t):void 0}}):(D((function(n){Gn[n]=B(n)})),Gn)),pt=function(n){return function(){return""+n++}}(0);!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.GROUP=4]="GROUP"}(Ln||(Ln={}));var vt,dt=R((function(n,t){return t?null:Bn({},{isolate:{type:Ln.DEFAULT},testCursor:H(),exclusion:{tests:{},groups:{}}},n)})),ht=z(),gt=z(20),mt=z(20),yt=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=On(),Tn(r,n,t))return t;var e=function(){return r(Cn())};return wn(n)?(e(),t):(Sn(e,n),t)};(vt||(vt={})).TEST_COMPLETED="test_completed",kn.group=function(n){return An("only","groups",n)},Fn.group=function(n){return An("skip","groups",n)};var Nt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=pt(),this.warns=!1,this.status=bt,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,p(this.message)&&v(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Pt||(this.status=n)},n.prototype.setPending=function(){this.setStatus(wt)},n.prototype.fail=function(){this.setStatus(this.warns?Ot:Ct)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Tt)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.setStatus(Et)},n.prototype.cancel=function(){this.setStatus(St),Q()},n.prototype.omit=function(){this.setStatus(Pt)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===wt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===Pt},n.prototype.isUntested=function(){return this.status===bt},n.prototype.isFailing=function(){return this.status===Ct},n.prototype.isCanceled=function(){return this.status===St},n.prototype.isSkipped=function(){return this.status===Et},n.prototype.isPassing=function(){return this.status===Tt},n.prototype.isWarning=function(){return this.status===Ot},n}(),bt="UNTESTED",Et="SKIPPED",Ct="FAILED",Ot="WARNING",Tt="PASSING",wt="PENDING",St="CANCELED",Pt="OMITTED",xt=Bn(Dn,{each:function(n){return function(r){return N(r)||j("test.each: Expected table to be an array."),function(e){for(var i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];var s=(i=i.reverse())[0],a=i[1];return rn({type:Ln.EACH},(function(){return r.map((function(r){return r=[].concat(r),n(u.apply(void 0,t([e],r)),u.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}))}}}(Dn),memo:function(n){var t=z(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Y().suiteId()[0];var i=dt.useX().testCursor.cursorAt(),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)}))):Un(u[1])}}(Dn)});n.VERSION="4.0.0-dev-8851ff",n.create=function(n){r(n)||j("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(vt.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=Y().testCallbacks()[0].fieldCallbacks;n&&!on(n)&&N(t[n])&&Pn(t[n]),n=Y().testCallbacks()[0].doneCallbacks,on()||Pn(n)}})),n}(),e=function(n){function t(n,t,r){return i.references.push(),e(n,u(t,r)),function(){return[i.references[n],function(t){return e(n,u(t,i.references[n]))}]}}function e(t,e){var u=i.references[t];i.references[t]=e,r(t=o[t][1])&&t(e,u),r(n)&&n()}var i={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){var n=i.references;i.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),i=function(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}(e,{suiteId:pt()});return Bn(dt.bind({stateRef:i,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return e.reset(),rn({type:Ln.SUITE},(function(){n.apply(void 0,t)})),un(),On()})),{get:dt.bind({stateRef:i},Cn),remove:dt.bind({stateRef:i},(function(n){nn().forEach((function(t){en(t,n)&&(t.cancel(),function(n){Z((function(t){return M(t,(function(t){return n!==t?t:null}))}))}(t))}))})),reset:e.reset})},n.enforce=lt,n.group=function(n,t){v(n)||Wn("name must be a string"),r(t)||Wn("callback must be a function"),rn({type:Ln.GROUP},(function(){dt.run({groupName:n},t)}))},n.only=kn,n.optional=function(n){(0,Y().optionalFields()[1])((function(t){if(N(n)||v(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))},n.skip=Fn,n.skipWhen=function(n,t){rn({type:Ln.SKIP_WHEN},(function(){dt.run({skipped:u(n)},(function(){return t()}))}))},n.test=xt,n.warn=function(){var n=dt.useX("warn hook called outside of a running suite.");n.currentTest||j("warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.0.0-dev-366a8b",
2
+ "version": "4.0.0-dev-8851ff",
3
3
  "license": "MIT",
4
4
  "name": "vest",
5
5
  "author": "ealush",
package/types/vest.d.ts CHANGED
@@ -318,5 +318,5 @@ declare const _default: typeof testBase & {
318
318
  };
319
319
  };
320
320
  declare const test: typeof _default;
321
- declare const VERSION = "4.0.0-dev-366a8b";
321
+ declare const VERSION = "4.0.0-dev-8851ff";
322
322
  export { test, create, only, skip, warn, group, optional$0 as optional, skipWhen, enforce, VERSION };