vest 3.2.6 → 3.2.8

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/README.md CHANGED
@@ -62,7 +62,7 @@ Vest tries to remediate this by separating validation logic from feature logic s
62
62
  ## Example code ([Run in sandbox](https://codesandbox.io/s/vest-react-tutorial-finished-ztt8t?file=/src/validate.js))
63
63
 
64
64
  ```js
65
- import { create, only, test, enforce, warn } from 'vest';
65
+ import { create, only, test, enforce, warn, skipWhen } from 'vest';
66
66
 
67
67
  export default create('user_form', (data = {}, currentField) => {
68
68
  only(currentField);
@@ -88,11 +88,11 @@ export default create('user_form', (data = {}, currentField) => {
88
88
  enforce(data.password).matches(/[0-9]/);
89
89
  });
90
90
 
91
- if (data.password) {
91
+ skipWhen(!data.password, () => {
92
92
  test('confirm_password', 'Passwords do not match', () => {
93
93
  enforce(data.confirm_password).equals(data.password);
94
94
  });
95
- }
95
+ });
96
96
 
97
97
  test('email', 'Email Address is not valid', () => {
98
98
  enforce(data.email).isEmail();
package/docs/README.md CHANGED
@@ -62,7 +62,7 @@ Vest tries to remediate this by separating validation logic from feature logic s
62
62
  ## Example code ([Run in sandbox](https://codesandbox.io/s/vest-react-tutorial-finished-ztt8t?file=/src/validate.js))
63
63
 
64
64
  ```js
65
- import { create, only, test, enforce, warn } from 'vest';
65
+ import { create, only, test, enforce, warn, skipWhen } from 'vest';
66
66
 
67
67
  export default create('user_form', (data = {}, currentField) => {
68
68
  only(currentField);
@@ -88,11 +88,11 @@ export default create('user_form', (data = {}, currentField) => {
88
88
  enforce(data.password).matches(/[0-9]/);
89
89
  });
90
90
 
91
- if (data.password) {
91
+ skipWhen(!data.password, () => {
92
92
  test('confirm_password', 'Passwords do not match', () => {
93
93
  enforce(data.confirm_password).equals(data.password);
94
94
  });
95
- }
95
+ });
96
96
 
97
97
  test('email', 'Email Address is not valid', () => {
98
98
  enforce(data.email).isEmail();
@@ -36,44 +36,44 @@ export default create('form_name', (data = {}) => {
36
36
  });
37
37
  ```
38
38
 
39
- ## if/else for conditionally skipping fields
39
+ ## skipWhen for conditionally skipping fields
40
40
 
41
- If your field depends on a different field's existence or a different simple condition, you could use a basic if/else statement.
41
+ If your field depends on a different field's existence or a different simple condition, you could use skipWhen.
42
42
  In the following example I only validate `confirm` if password is not empty:
43
43
 
44
44
  DEMO: https://codesandbox.io/s/demo-forked-z2ur9?file=/src/validate.js
45
45
 
46
46
  ```js
47
- import { create, test, enforce } from 'vest';
47
+ import { create, test, enforce, skipWhen } from 'vest';
48
48
  export default create('user_form', (data = {}) => {
49
49
  test('password', 'Password is required', () => {
50
50
  enforce(data.password).isNotEmpty();
51
51
  });
52
- if (data.password) {
52
+ skipWhen(!data.password, () => {
53
53
  test('confirm', 'Passwords do not match', () => {
54
54
  enforce(data.confirm).equals(data.password);
55
55
  });
56
- }
56
+ });
57
57
  });
58
58
  ```
59
59
 
60
- ## if/else for conditionally skipping field based on a previous result
60
+ ## skipWhen for conditionally skipping field based on a previous result
61
61
 
62
62
  Sometimes you might want to run a certain validation based on the validation result of a previously run test, for example - only test for password strength if password DOESN'T have Errors. You could access the intermediate validation result and use it mid-run.
63
63
 
64
64
  This requires using the function created from create():
65
65
 
66
66
  ```js
67
- import { create, test, enforce } from 'vest';
67
+ import { create, test, enforce, skipWhen } from 'vest';
68
68
  const suite = create('user_form', (data = {}) => {
69
69
  test('password', 'Password is required', () => {
70
70
  enforce(data.password).isNotEmpty();
71
71
  });
72
- if (!suite.get().hasErrors('password')) {
72
+ skipWhen(suite.get().hasErrors('password'), () => {
73
73
  test('password', 'Password is weak', () => {
74
74
  enforce(data.password).longerThan(8);
75
75
  });
76
- }
76
+ });
77
77
  });
78
78
  export default suite;
79
79
  ```
package/docs/exclusion.md CHANGED
@@ -55,24 +55,24 @@ const validationResult = suite(formData);
55
55
 
56
56
  ## Conditionally excluding portions of the suite
57
57
 
58
- In some cases we might need to skip a test or a group based on a given condition, for example - based on the intermediate state of the currently running suite. To allow this, can use an if statement.
58
+ In some cases we might need to skip a test or a group based on a given condition, for example - based on the intermediate state of the currently running suite. To allow this, can use `skipWhen`.
59
59
 
60
60
  In the following example we're skipping the server side verification of the username if the username is invalid to begin with:
61
61
 
62
62
  ```js
63
- import { create, test, enforce } from 'vest';
63
+ import { create, test, enforce, skipWhen } from 'vest';
64
64
 
65
65
  const suite = create('user_form', (data = {}) => {
66
66
  test('username', 'Username is required', () => {
67
67
  enforce(data.username).isNotEmpty();
68
68
  });
69
69
 
70
- if (!suite.get().hasErrors('username')) {
70
+ skipWhen(suite.get().hasErrors('username'), () => {
71
71
  test('username', 'Username already exists', () => {
72
72
  // this is an example for a server call
73
73
  return doesUserExist(data.username);
74
74
  });
75
- }
75
+ });
76
76
  });
77
77
  export default suite;
78
78
  ```
package/docs/migration.md CHANGED
@@ -72,9 +72,9 @@ const suite = vest.create('user_form', () => {
72
72
 
73
73
  ```js
74
74
  const suite = create('user_form', () => {
75
- if (suite.get().hasErrors('username')) {
75
+ skipWhen(suite.get().hasErrors('username'), () => {
76
76
  /* ... */
77
- }
77
+ });
78
78
  });
79
79
  ```
80
80
 
package/docs/utilities.md CHANGED
@@ -81,7 +81,7 @@ This can be useful when running async validations on the server, or when you do
81
81
  `promisify()` accepts a validation suite declaration, and returns a function that when called, returns a Promise.
82
82
 
83
83
  ```js
84
- import { create, test } from 'vest';
84
+ import { create, test, skipWhen } from 'vest';
85
85
  import promisify from 'vest/promisify';
86
86
 
87
87
  const suite = promisify(
@@ -94,12 +94,12 @@ const suite = promisify(
94
94
  );
95
95
 
96
96
  suite(data).then(res => {
97
- if (res.hasErrors('email')) {
97
+ skipWhen(res.hasErrors('email'), () => {
98
98
  /* ... */
99
- }
99
+ });
100
100
 
101
- if (res.hasErrors('username')) {
101
+ skipWhen(res.hasErrors('username'), () => {
102
102
  /* ... */
103
- }
103
+ });
104
104
  });
105
105
  ```
@@ -1991,6 +1991,17 @@ const hasIncludedTests = keyTests => {
1991
1991
  return false;
1992
1992
  };
1993
1993
 
1994
+ // an if statement. The reason for it is to support version 4 api in version 3
1995
+ // so that someone reading the latest docs can still run the code.
1996
+
1997
+ function skipWhen(conditional, callback) {
1998
+ if (isFalsy(optionalFunctionValue(conditional))) {
1999
+ if (isFunction(callback)) {
2000
+ callback();
2001
+ }
2002
+ }
2003
+ }
2004
+
1994
2005
  /**
1995
2006
  * @type {String} Error message to display when `warn` gets called outside of a test.
1996
2007
  */
@@ -2464,7 +2475,7 @@ const test = withArgs(function (fieldName, args) {
2464
2475
  bindTestEach(test);
2465
2476
  bindTestMemo(test);
2466
2477
 
2467
- const VERSION = "3.2.6";
2478
+ const VERSION = "3.2.8";
2468
2479
  var vest_mjs = {
2469
2480
  VERSION,
2470
2481
  create: createSuite,
@@ -2473,9 +2484,10 @@ var vest_mjs = {
2473
2484
  only,
2474
2485
  optional,
2475
2486
  skip,
2487
+ skipWhen,
2476
2488
  test,
2477
2489
  warn
2478
2490
  };
2479
2491
 
2480
2492
  export default vest_mjs;
2481
- export { VERSION, createSuite as create, enforce, group, only, optional, skip, test, warn };
2493
+ export { VERSION, createSuite as create, enforce, group, only, optional, skip, skipWhen, test, warn };
@@ -1991,6 +1991,17 @@ const hasIncludedTests = keyTests => {
1991
1991
  return false;
1992
1992
  };
1993
1993
 
1994
+ // an if statement. The reason for it is to support version 4 api in version 3
1995
+ // so that someone reading the latest docs can still run the code.
1996
+
1997
+ function skipWhen(conditional, callback) {
1998
+ if (isFalsy(optionalFunctionValue(conditional))) {
1999
+ if (isFunction(callback)) {
2000
+ callback();
2001
+ }
2002
+ }
2003
+ }
2004
+
1994
2005
  /**
1995
2006
  * @type {String} Error message to display when `warn` gets called outside of a test.
1996
2007
  */
@@ -2461,7 +2472,7 @@ const test = withArgs(function (fieldName, args) {
2461
2472
  bindTestEach(test);
2462
2473
  bindTestMemo(test);
2463
2474
 
2464
- const VERSION = "3.2.6";
2475
+ const VERSION = "3.2.8";
2465
2476
  var vest_mjs = {
2466
2477
  VERSION,
2467
2478
  create: createSuite,
@@ -2470,9 +2481,10 @@ var vest_mjs = {
2470
2481
  only,
2471
2482
  optional,
2472
2483
  skip,
2484
+ skipWhen,
2473
2485
  test,
2474
2486
  warn
2475
2487
  };
2476
2488
 
2477
2489
  export default vest_mjs;
2478
- export { VERSION, createSuite as create, enforce, group, only, optional, skip, test, warn };
2490
+ export { VERSION, createSuite as create, enforce, group, only, optional, skip, skipWhen, test, warn };
@@ -1 +1 @@
1
- function e(e){return"function"==typeof e}function t(t,n){return e(t)?t.apply(null,n):t}function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n,r=arguments[t];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var r=Object.assign;let s=function(e){function t(t,i){var a,u,o=r();return t=n({},o||{},null!==(a=null==e?void 0:e(t,o))&&void 0!==a?a:t),a=s.ctx=Object.freeze(t),s.ancestry.unshift(a),i=i(a),s.ancestry.shift(),s.ctx=null!==(u=s.ancestry[0])&&void 0!==u?u:null,i}function r(){return s.ctx}var s={ancestry:[]};return{run:t,bind:function(e,n){for(var r=arguments.length,s=Array(2<r?r-2:0),i=2;i<r;i++)s[i-2]=arguments[i];return function(){for(var r=arguments.length,i=Array(r),a=0;a<r;a++)i[a]=arguments[a];return t(e,(function(){return n.apply(void 0,s.concat(i))}))}},use:r}}(((e,t)=>t?null:r({},{exclusion:{tests:{},groups:{}}},e))),i=(a=0,()=>""+a++);var a;function u(e){return"function"==typeof e}function o(e){return function(){return!e.apply(this,arguments)}}function l(e){return null===e}let c=o(l);function f(e,t){return e.length===Number(t)}let d=o(f),p=(e=10)=>{const t=[],n=(r,s)=>{const i=n.get(r);return c(i)?i[1]:(s=s(),t.unshift([r.concat(),s]),t.length>e&&(t.length=e),s)};return n.get=e=>t[t.findIndex((([t])=>f(e,t.length)&&e.every(((e,n)=>e===t[n]))))]||null,n};function g(){return s.use().stateRef.testObjects()}let h=e=>{for(const t in e.tests)e.errorCount+=e.tests[t].errorCount,e.warnCount+=e.tests[t].warnCount,e.testCount+=e.tests[t].testCount;return e},m=(e,t,n)=>{const{fieldName:r,isWarning:s,failed:i,statement:a}=t;return e[r]=e[r]||{errorCount:0,warnCount:0,testCount:0},t=e[r],n||(e[r].testCount++,i&&(s?(t.warnCount++,a&&(t.warnings=(t.warnings||[]).concat(a))):(t.errorCount++,a&&(t.errors=(t.errors||[]).concat(a))))),t},y=(e,t)=>{const[n]=g(),{group:r,fieldName:s}=t||{};return t=n.reduce(((t,n)=>(r&&n.groupName!==r||s&&n.fieldName!==s||!n.failed||"warnings"!==e&&n.isWarning||"warnings"===e&&!n.isWarning||(t[n.fieldName]=(t[n.fieldName]||[]).concat(n.statement)),t)),{}),s?t[s]||[]:t};function b(e,t){return y(e,{fieldName:t})}let N=(e,t=Error)=>{throw new t(`[vest]: ${e}`)},w=(e,t,n)=>(t||N(`get${e[0].toUpperCase()}${e.slice(1)}ByGroup requires a group name. Received \`${t}\` instead.`),y(e,{group:t,fieldName:n})),v=(e,t,n)=>!(!e.failed||n&&n!==e.fieldName||"warnings"!==t&&e.isWarning||"warnings"===t&&!e.isWarning),E=(e,t)=>{const[n]=g();return n.some((n=>v(n,e,t)))},F=(e,t,n)=>{const[r]=g();return r.some((r=>t===r.groupName&&v(r,e,n)))};function k(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function C(e){return!(isNaN(parseFloat(e))||isNaN(Number(e))||!isFinite(e))}let O=o(C);function R(e){if(e){if(C(e))return 0===e;if(k(e,"length"))return f(e,0);if("object"==typeof e)return f(Object.keys(e),0)}return!0}let x=o(R),A=e=>{const[{pending:t,lagging:n}]=s.use().stateRef.pending(),r=t.concat(n);return!R(r)&&(e?r.some((t=>t.fieldName===e)):x(r))};function W(e,t){var n;return null!==(n=Object.getOwnPropertyDescriptor(e,"name"))&&void 0!==n&&n.configurable?Object.defineProperty(e,"name",{value:t}):e}function T(e,t){return W((function(){let t=Array.from(arguments),n=t.splice(e.length-1);return e.apply(null,t.concat([n]))}),t||e.name)}let S=p(20),j=e=>{const{stateRef:t}=s.use(),[n]=g(),r={stateRef:t};return S([n,e],s.bind(r,(()=>[["hasErrors",E,"errors"],["hasWarnings",E,"warnings"],["getErrors",b,"errors"],["getWarnings",b,"warnings"],["hasErrorsByGroup",F,"errors"],["hasWarningsByGroup",F,"warnings"],["getErrorsByGroup",w,"errors"],["getWarningsByGroup",w,"warnings"]].concat([["isValid",B]],e?[]:[["done",T(q)]]).reduce(((e,[t,n,i])=>(e[t]=s.bind(r,n,i),e)),(()=>{function e(e,t){e.forEach((e=>{const{fieldName:n,groupName:r}=e;i.tests[n]=m(i.tests,e,t),r&&(i.groups[r]=i.groups[r]||{},i.groups[r][n]=m(i.groups[r],e,t))}))}const[t]=g(),[n]=s.use().stateRef.suiteId(),[r]=s.use().stateRef.skippedTests(),i={errorCount:0,warnCount:0,testCount:0,groups:{},name:n.name,tests:{}};return e(t),e(r,!0),h(i)})()))))};function q(e){let[t,n]=e.reverse();var{stateRef:r}=s.use();e=j();let i=n&&(!e.tests[n]||0===e.tests[n].testCount);if(!u(t)||i)return e;let a=s.bind({stateRef:r},(()=>t(j(!0))));return!A()||n&&!A(n)?(a(),e):([,r]=s.use().stateRef.testCallbacks(),r((e=>(n?e.fieldCallbacks[n]=(e.fieldCallbacks[n]||[]).concat(a):e.doneCallbacks.push(a),e))),e)}function B(){let e=j();if(e.hasErrors())return!1;var[t]=g();if(0===t.length)return!1;[t]=s.use().stateRef.optionalFields();let[{pending:n,lagging:r}]=s.use().stateRef.pending();if(x(n.concat(r).filter((e=>!e.isWarning))))return!1;for(let n in e.tests)if(!t[n]&&0===e.tests[n].testCount)return!1;return!0}let I=T((n=>{const[r,a]=n.reverse();u(r)||N("Suite initialization error. Expected `tests` to be a function.");const o=[],l=function(n){function r(e,n){return i.references.push(),s(e,t(n)),function(){return[i.references[e],function(n){return s(e,t(n,[i.references[e]]))}]}}function s(t,r){var s=i.references[t];i.references[t]=r,e(t=a[t][1])&&t(r,s),e(n)&&n()}var i={references:[]},a=[];return{registerStateKey:function(e,t){var n=a.length;return a.push([e,t]),r(n,e)},reset:function(){i.references=[],a.forEach((function(e,t){return r(t,e[0])}))}}}((()=>{o.forEach((e=>e({suiteState:c,type:"suiteStateUpdate"})))})),c=function(e,{suiteId:t,name:n}){return{carryOverTests:e.registerStateKey((()=>[])),optionalFields:e.registerStateKey((()=>({}))),pending:e.registerStateKey((()=>({pending:[],lagging:[]}))),skippedTests:e.registerStateKey((()=>[])),suiteId:e.registerStateKey((()=>({id:t,name:n}))),testCallbacks:e.registerStateKey((()=>({fieldCallbacks:{},doneCallbacks:[]}))),testObjects:e.registerStateKey((()=>[]))}}(l,{suiteId:i(),name:a});return(n=s.bind({stateRef:c},(function(){const[e]=g(),[,t]=s.use().stateRef.carryOverTests(),[{pending:n},i]=s.use().stateRef.pending();return l.reset(),t((()=>e)),i({lagging:n,pending:[]}),r.apply(null,arguments),j()}))).get=s.bind({stateRef:c},j,!0),n.reset=l.reset,n.remove=s.bind({stateRef:c},(e=>{const[t]=g();[].concat(t).forEach((t=>{t.fieldName===e&&t.cancel()}))})),n.subscribe=function(e){u(e)&&(o.push(e),e({type:"suiteSubscribeInit",suiteState:c}))},n}));function P(e){r(this,e)}function K(e){return!!e===e}P.prototype.setFailFast=function(e){return this.failFast=!!e,this},P.unwrap=function(e){return P.is(e)?e.value:e},P.wrap=function(e){return P.is(e)?e:new P({value:e})},P.is=function(e){return e instanceof P};let $=o(K);function G(e){return void 0===e}let U=o(G);function z(e){G(e)||(K(e)?this.setFailed(!e):this.extend(e))}function V(e,t){let n=z.is(e),r=z.is(t);if(n&&r){if(e.setFailed(e.failed||t.failed),R(e.children)&&R(t.children))return e;if(e.children&&t.children){for(let n in e.children)V(e.children[n],t.children[n]);for(let n in t.children)k(e.children,n)||e.setChild(n,t.children[n]);return e}if(e.children){if(!t.children)return e}else e.children=t.children}else{if(n)return e;if(r)return t}return new z(!1)}function D(e,t){return!t.pass&&!t.warn&&(!!P.is(e)&&e.failFast)}function M(e,t){let n=new z(!0);for(let r of[].concat(e)){if(D(t,n))break;n.extend(H(r,t))}return n}function H(e,t){return e.run(t)}function J(e,t,n){let r=new z(!0);R(t)&&r.setFailed(!0);let s=[],i=0;for(let a of t){if(null===(t=H(a,e)))return null;let u=t.pass;if(u?i++:s.push(t),n)if("any"===n.mode){if(u){r.extend(t);break}}else{if(r.extend(t),"all"===n.mode&&!u)break;if("one"===n.mode&&(r.setFailed(1!==i),1<i))break}else if(r.extend(t),u)break}return r.pass&&0===i&&(r.setFailed(!0),s.forEach((e=>r.extend(e)))),r}z.is=function(e){return e instanceof z},z.prototype.asArray=function(){return this.isArray=!0,this},z.prototype.setAttribute=function(e,t){return this[e]=t,this},z.prototype.setFailed=function(e){return this.setAttribute(this.warn?"hasWarnings":"hasErrors",e),this.setAttribute("failed",e)},z.prototype.setChild=function(e,t){if(null===t)return null;let n=this.hasWarnings||t.hasWarnings||t.warn||this.warn;return this.setAttribute("hasWarnings",n&&t.failed||!1),this.setAttribute("hasErrors",this.hasErrors||t.hasErrors||!n&&t.failed||!1),this.setFailed(this.failed||t.failed),this.children=this.children||{},this.children[e]=t},z.prototype.getChild=function(e){return(this.children||{})[e]},z.prototype.extend=function(e){if(null===e)return this;e=z.is(e)?e:(new z).setAttribute("warn",!!this.warn).setFailed(!e);let t=this.failed||e.failed,n=V(e,this).children;r(this,e),R(n)||(this.children=n),this.setFailed(t),this.setAttribute("hasWarnings",!(!this.hasWarnings&&!e.hasWarnings)),this.setAttribute("hasErrors",!(!this.hasErrors&&!e.hasErrors))},Object.defineProperty(z.prototype,"pass",{get(){return!this.failed}});var L=T((function(e,t){return J(e,t,{mode:"all"})})),Q=T((function(e,t){return J(e,t,{mode:"any"})}));function X(e){return!!Array.isArray(e)}let Y=o(X);function Z(e,t,n){let r=P.unwrap(e),s=new z(!0);for(let n in t){let i=t[n],a=r[n];if(D(a,s))break;s.setChild(n,H(i,new P({value:a,obj:r,key:n}).setFailFast(e.failFast)))}if(!(n||{}).loose)for(let e in r)if(!k(t,e))return s.setFailed(!0);return s}var _={allOf:L,anyOf:Q,isArrayOf:T((function(e,t){let n=P.unwrap(e),r=new z(!0).asArray();if(Y(n))return r.setFailed(!0);for(let s=0;s<n.length;s++)r.setChild(s,J(new P({value:n[s],obj:n,key:s}).setFailFast(e.failFast),t,{mode:"any"}));return r})),loose:(e,t)=>Z(e,t,{loose:!0}),oneOf:T((function(e,t){return J(e,t,{mode:"one"})})),optional:T((function(e,t){let{obj:n,key:r}=e;return!(k(n,r)&&!G(n[r]||null===n[r])&&!R(t))||J(n[r],t,{mode:"all"})})),shape:Z};function ee(e,t){return u(e)?e.apply(null,t):e}var te={warn:function(e,t=!0){return t},message:function(e,t){return ee(t,[P.unwrap(e)])},when:function(e,t,n){return n(e=!ee(t,[P.unwrap(e)].concat(P.is(e)?[e.key,e.obj]:[])))}};function ne(e){return String(e)===e}function re(e,t){return ne(e)&&ne(t)&&e.endsWith(t)}let se=o(re);function ie(e,t){return e===t}let ae=o(ie);function ue(e,t){return C(e)&&C(t)&&Number(e)>Number(t)}function oe(e,t){return C(e)&&C(t)&&Number(e)>=Number(t)}function le(e,t){return!!(Array.isArray(t)&&/^[s|n|b]/.test(typeof e)||ne(t)&&ne(e))&&-1!==t.indexOf(e)}let ce=o(le);function fe(e,t){return C(e)&&C(t)&&Number(e)<=Number(t)}function de(e,t,n){return oe(e,t)&&fe(e,n)}let pe=o(de);function ge(e){return"string"==typeof e&&""===e.trim()}let he=o(ge);function me(e){return Number.isNaN(e)}let ye=o(me);function be(e){return!!C(e)&&0>Number(e)}let Ne=o(be);function we(e){return"number"==typeof e}let ve=o(we),Ee=o(ne);function Fe(e){return!!e}let ke=o(Fe);function Ce(e,t){return C(e)&&C(t)&&Number(e)<Number(t)}function Oe(e,t){return t instanceof RegExp?t.test(e):!!ne(t)&&new RegExp(t).test(e)}let Re=o(Oe);function xe(e,t){return C(e)&&C(t)&&Number(e)===Number(t)}let Ae=o(xe);function We(e,t){return ne(e)&&ne(t)&&e.startsWith(t)}let Te=o(We);var Se=r({doesNotEndWith:se,doesNotStartWith:Te,endsWith:re,equals:ie,greaterThan:ue,greaterThanOrEquals:oe,gt:ue,gte:oe,inside:le,isArray:X,isBetween:de,isBoolean:K,isBlank:ge,isEmpty:R,isEven:e=>!!C(e)&&0==e%2,isFalsy:ke,isNaN:me,isNegative:be,isNotArray:Y,isNotBetween:pe,isNotBlank:he,isNotBoolean:$,isNotEmpty:x,isNotNaN:ye,isNotNull:c,isNotNumber:ve,isNotNumeric:O,isNotString:Ee,isNotUndefined:U,isNull:l,isNumber:we,isNumeric:C,isOdd:e=>!!C(e)&&0!=e%2,isPositive:Ne,isString:ne,isTruthy:Fe,isUndefined:G,lengthEquals:f,lengthNotEquals:d,lessThan:Ce,lessThanOrEquals:fe,longerThan:function(e,t){return e.length>Number(t)},longerThanOrEquals:function(e,t){return e.length>=Number(t)},lt:Ce,lte:fe,matches:Oe,notEquals:ae,notInside:ce,notMatches:Re,numberEquals:xe,numberNotEquals:Ae,shorterThan:function(e,t){return e.length<Number(t)},shorterThanOrEquals:function(e,t){return e.length<=Number(t)},startsWith:We},_,te);let je=Function("return this")();function qe(e,t){if(u(je.Proxy))return new Proxy(e,{get:(e,n)=>k(e,n)?e[n]:k(Se,n)&&u(Se[n])?t(n):e[n]});for(let n in Se)u(e[n])||Object.defineProperties(e,{[n]:{get:()=>t(n)}});return e}function Be(e){let t=[],n=[],r=e=>T((s=>{const i=Se[e];te[i.name]===i?n.push(((e,t,n)=>{t.setAttribute(i.name,i(e,s[0],n))})):t.push(W((e=>i.apply(null,[k(_,i.name)?P.wrap(e):P.unwrap(e)].concat(s))),e));const a=qe({},r);return a.run=e=>{const r=new z(!0);let s=!1;if(n.forEach((t=>{t(e,r,(e=>s=e))})),s)return null;for(const n of t)try{if(r.extend(n(e)),!r.pass)break}catch(e){r.setFailed(!0);break}return r},a.test=e=>a.run(P.wrap(e).setFailFast(!0)).pass,a}),e);return r(e)}function Ie(e,t,n=[]){let r=k(_,e.name),s=r?P.wrap(t).setFailFast(!0):P.unwrap(t);if(n=e.apply(null,[s].concat(n)),r||(n=function(e,{rule:t,value:n}){return n={message:Error(`invalid ${typeof n} value`)},K(e)||e&&K(e.pass)||N(t.name+"wrong return value"),K(e)?(n.pass=e,n):(n.pass=e.pass,e.message&&(n.message=ee(e.message)),n)}(n,{rule:e,value:t})),!n.pass)throw n.message}let Pe=e=>{const t=qe({},(n=>T((r=>(Ie(Se[n],e,r),t)))));return t},Ke=qe(Pe,Be);function $e(e){return ze("only","tests",e)}function Ge(e){return ze("skip","tests",e)}function Ue(e){let{fieldName:t,groupName:n}=e;({exclusion:e}=s.use());let r=e.tests;var i=r[t];if(!1===i)return!0;if(i=!0===i,n){e:{var{exclusion:a}=s.use();if(k(a=a.groups,n))var u=!1===a[n];else{for(u in a)if(!0===a[u]){u=!0;break e}u=!1}}if(u)return!0;if(!0===e.groups[n])return!i&&(!!Ve(r)||!1===r[t])}return!i&&Ve(r)}!function(e,t){e.extend=n=>(r(Se,n),u(je.Proxy)||qe(t,Be),e)}(Ke,Pe),Ke.template=T((e=>{let t=t=>{Ie(M.bind(null,e),t);const n=qe({},(e=>T((r=>(Ie(Se[e],t,r),n)))));return n};return t.run=t=>M(e,t),t.test=t=>M(e,P.wrap(t).setFailFast(!0)).pass,t})),$e.group=e=>ze("only","groups",e),Ge.group=e=>ze("skip","groups",e);let ze=(e,t,n)=>{const r=s.use();n&&(r?[].concat(n).forEach((n=>{if(!ne(n))return null;r.exclusion[t][n]="only"===e})):N(`${e} hook called outside of a running suite.`))},Ve=e=>{for(const t in e)if(!0===e[t])return!0;return!1},De=()=>{const e=s.use();e?e.currentTest?e.currentTest.warn():N("warn called outside of a test."):N("warn hook called outside of a running suite.")},Me=()=>N("group initialization error. Incompatible argument passed to group."),He=(e,t)=>{ne(e)||Me(),u(t)||Me(),s.bind({groupName:e},t)()};function Je(e){let[,t]=s.use().stateRef.optionalFields();t((t=>([].concat(e).forEach((e=>{t[e]=!0})),t)))}let Le=(e,t)=>(-1!==(t=e.indexOf(t))&&e.splice(t,1),e),Qe=e=>{const[t,n]=s.use().stateRef.pending(),r=[].concat(t.lagging).reduce(((t,n)=>(e.fieldName===n.fieldName&&e.groupName===n.groupName&&n.id!==e.id?n.cancel():t.push(n),t)),[]);n((t=>({lagging:r,pending:t.pending.concat(e)})))},Xe=e=>{const[,t]=s.use().stateRef.pending();t((t=>({pending:Le(t.pending,e),lagging:Le(t.lagging,e)})))};function Ye({fieldName:e,statement:t,testFn:n,group:r}){let s={cancel:function(){s.canceled=!0,Xe(this),(e=>{let[,t]=g();t((t=>[].concat(Le(t,e))))})(this)},fail:function(){s.failed=!0},failed:!1,fieldName:e,id:i(),isWarning:!1,statement:t,testFn:n,valueOf:function(){return!0!==s.failed},warn:function(){s.isWarning=!0}};return r&&(s.groupName=r),s}var Ze=e=>{let[,t]=g();t((t=>t.concat(e)))};function _e(e){return e.forEach((e=>e()))}let et=e=>{const{asyncTest:t,statement:n}=e;var{stateRef:r}=s.use();const i=s.bind({stateRef:r},(()=>{if(Xe(e),!e.canceled){var t=e.fieldName;const[{fieldCallbacks:n,doneCallbacks:r}]=s.use().stateRef.testCallbacks();t&&!A(t)&&Array.isArray(n[t])&&_e(n[t]),A()||_e(r)}}));r=s.bind({stateRef:r},(t=>{e.statement=ne(t)?t:n,e.fail(),[,t]=g(),t((e=>e.slice())),i()}));try{t.then(i,r)}catch(e){r()}};function tt(e){Ze(e);let t=function(e){return s.run({currentTest:e},(()=>{let t;try{t=e.testFn()}catch(n){G(e.statement)&&ne(n)&&(e.statement=n),t=!1}return!1===t&&e.fail(),t}))}(e);try{t&&u(t.then)&&(e.asyncTest=t,Qe(e),et(e))}catch(e){}}let nt=T((function(e,t){const[n,r]=t.reverse();[,t]=s.use().stateRef.skippedTests();const{groupName:i}=s.use(),a=Ye({fieldName:e,group:i,statement:r,testFn:n});return Ue(a)?(t((e=>e.concat(a))),function(e){let[t,n]=s.use().stateRef.carryOverTests(),[,r]=g(),[i,a]=function(e,t){return e.reduce(((n,r,s)=>(n[t(r,s,e)?0:1].push(r),n)),[[],[]])}(t,(t=>t.fieldName===e.fieldName&&t.groupName===e.groupName));n((()=>a)),r((e=>e.concat(i)))}(a),a):u(n)?(tt(a),a):a}));!function(e){e.each=function(t){return Array.isArray(t)||N("test.each: Expected table to be an array."),T(((n,r)=>{let[s,i]=r.reverse();return t.map((t=>(t=[].concat(t),e(ee(n,t),ee(i,t),(()=>s.apply(null,t))))))}))}}(nt),function(e){let t=p(100);e.memo=T((function(n,r){var[i]=s.use().stateRef.suiteId();let[a,o,l]=r.reverse();return r=[i.id,n].concat(a),null===(i=t.get(r))?t(r,e.bind(null,n,l,o)):([,n]=i,Ue(n)||(Ze(n),(r=n)&&(r=(r=n.asyncTest)&&u(r.then)),r&&(Qe(n),et(n))),n)}))}(nt);export default{VERSION:"3.2.6",create:I,enforce:Ke,group:He,only:$e,optional:Je,skip:Ge,test:nt,warn:De};var rt="3.2.6";export{rt as VERSION,I as create,Ke as enforce,He as group,$e as only,Je as optional,Ge as skip,nt as test,De as warn};
1
+ function e(e){return"function"==typeof e}function t(t,n){return e(t)?t.apply(null,n):t}function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n,r=arguments[t];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var r=Object.assign;let s=function(e){function t(t,i){var a,u,o=r();return t=n({},o||{},null!==(a=null==e?void 0:e(t,o))&&void 0!==a?a:t),a=s.ctx=Object.freeze(t),s.ancestry.unshift(a),i=i(a),s.ancestry.shift(),s.ctx=null!==(u=s.ancestry[0])&&void 0!==u?u:null,i}function r(){return s.ctx}var s={ancestry:[]};return{run:t,bind:function(e,n){for(var r=arguments.length,s=Array(2<r?r-2:0),i=2;i<r;i++)s[i-2]=arguments[i];return function(){for(var r=arguments.length,i=Array(r),a=0;a<r;a++)i[a]=arguments[a];return t(e,(function(){return n.apply(void 0,s.concat(i))}))}},use:r}}(((e,t)=>t?null:r({},{exclusion:{tests:{},groups:{}}},e))),i=(a=0,()=>""+a++);var a;function u(e){return"function"==typeof e}function o(e){return function(){return!e.apply(this,arguments)}}function l(e){return null===e}let c=o(l);function f(e,t){return e.length===Number(t)}let d=o(f),p=(e=10)=>{const t=[],n=(r,s)=>{const i=n.get(r);return c(i)?i[1]:(s=s(),t.unshift([r.concat(),s]),t.length>e&&(t.length=e),s)};return n.get=e=>t[t.findIndex((([t])=>f(e,t.length)&&e.every(((e,n)=>e===t[n]))))]||null,n};function g(){return s.use().stateRef.testObjects()}let h=e=>{for(const t in e.tests)e.errorCount+=e.tests[t].errorCount,e.warnCount+=e.tests[t].warnCount,e.testCount+=e.tests[t].testCount;return e},m=(e,t,n)=>{const{fieldName:r,isWarning:s,failed:i,statement:a}=t;return e[r]=e[r]||{errorCount:0,warnCount:0,testCount:0},t=e[r],n||(e[r].testCount++,i&&(s?(t.warnCount++,a&&(t.warnings=(t.warnings||[]).concat(a))):(t.errorCount++,a&&(t.errors=(t.errors||[]).concat(a))))),t},y=(e,t)=>{const[n]=g(),{group:r,fieldName:s}=t||{};return t=n.reduce(((t,n)=>(r&&n.groupName!==r||s&&n.fieldName!==s||!n.failed||"warnings"!==e&&n.isWarning||"warnings"===e&&!n.isWarning||(t[n.fieldName]=(t[n.fieldName]||[]).concat(n.statement)),t)),{}),s?t[s]||[]:t};function b(e,t){return y(e,{fieldName:t})}let N=(e,t=Error)=>{throw new t(`[vest]: ${e}`)},w=(e,t,n)=>(t||N(`get${e[0].toUpperCase()}${e.slice(1)}ByGroup requires a group name. Received \`${t}\` instead.`),y(e,{group:t,fieldName:n})),v=(e,t,n)=>!(!e.failed||n&&n!==e.fieldName||"warnings"!==t&&e.isWarning||"warnings"===t&&!e.isWarning),E=(e,t)=>{const[n]=g();return n.some((n=>v(n,e,t)))},F=(e,t,n)=>{const[r]=g();return r.some((r=>t===r.groupName&&v(r,e,n)))};function k(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function C(e){return!(isNaN(parseFloat(e))||isNaN(Number(e))||!isFinite(e))}let O=o(C);function R(e){if(e){if(C(e))return 0===e;if(k(e,"length"))return f(e,0);if("object"==typeof e)return f(Object.keys(e),0)}return!0}let x=o(R),W=e=>{const[{pending:t,lagging:n}]=s.use().stateRef.pending(),r=t.concat(n);return!R(r)&&(e?r.some((t=>t.fieldName===e)):x(r))};function A(e,t){var n;return null!==(n=Object.getOwnPropertyDescriptor(e,"name"))&&void 0!==n&&n.configurable?Object.defineProperty(e,"name",{value:t}):e}function T(e,t){return A((function(){let t=Array.from(arguments),n=t.splice(e.length-1);return e.apply(null,t.concat([n]))}),t||e.name)}let S=p(20),j=e=>{const{stateRef:t}=s.use(),[n]=g(),r={stateRef:t};return S([n,e],s.bind(r,(()=>[["hasErrors",E,"errors"],["hasWarnings",E,"warnings"],["getErrors",b,"errors"],["getWarnings",b,"warnings"],["hasErrorsByGroup",F,"errors"],["hasWarningsByGroup",F,"warnings"],["getErrorsByGroup",w,"errors"],["getWarningsByGroup",w,"warnings"]].concat([["isValid",B]],e?[]:[["done",T(q)]]).reduce(((e,[t,n,i])=>(e[t]=s.bind(r,n,i),e)),(()=>{function e(e,t){e.forEach((e=>{const{fieldName:n,groupName:r}=e;i.tests[n]=m(i.tests,e,t),r&&(i.groups[r]=i.groups[r]||{},i.groups[r][n]=m(i.groups[r],e,t))}))}const[t]=g(),[n]=s.use().stateRef.suiteId(),[r]=s.use().stateRef.skippedTests(),i={errorCount:0,warnCount:0,testCount:0,groups:{},name:n.name,tests:{}};return e(t),e(r,!0),h(i)})()))))};function q(e){let[t,n]=e.reverse();var{stateRef:r}=s.use();e=j();let i=n&&(!e.tests[n]||0===e.tests[n].testCount);if(!u(t)||i)return e;let a=s.bind({stateRef:r},(()=>t(j(!0))));return!W()||n&&!W(n)?(a(),e):([,r]=s.use().stateRef.testCallbacks(),r((e=>(n?e.fieldCallbacks[n]=(e.fieldCallbacks[n]||[]).concat(a):e.doneCallbacks.push(a),e))),e)}function B(){let e=j();if(e.hasErrors())return!1;var[t]=g();if(0===t.length)return!1;[t]=s.use().stateRef.optionalFields();let[{pending:n,lagging:r}]=s.use().stateRef.pending();if(x(n.concat(r).filter((e=>!e.isWarning))))return!1;for(let n in e.tests)if(!t[n]&&0===e.tests[n].testCount)return!1;return!0}let I=T((n=>{const[r,a]=n.reverse();u(r)||N("Suite initialization error. Expected `tests` to be a function.");const o=[],l=function(n){function r(e,n){return i.references.push(),s(e,t(n)),function(){return[i.references[e],function(n){return s(e,t(n,[i.references[e]]))}]}}function s(t,r){var s=i.references[t];i.references[t]=r,e(t=a[t][1])&&t(r,s),e(n)&&n()}var i={references:[]},a=[];return{registerStateKey:function(e,t){var n=a.length;return a.push([e,t]),r(n,e)},reset:function(){i.references=[],a.forEach((function(e,t){return r(t,e[0])}))}}}((()=>{o.forEach((e=>e({suiteState:c,type:"suiteStateUpdate"})))})),c=function(e,{suiteId:t,name:n}){return{carryOverTests:e.registerStateKey((()=>[])),optionalFields:e.registerStateKey((()=>({}))),pending:e.registerStateKey((()=>({pending:[],lagging:[]}))),skippedTests:e.registerStateKey((()=>[])),suiteId:e.registerStateKey((()=>({id:t,name:n}))),testCallbacks:e.registerStateKey((()=>({fieldCallbacks:{},doneCallbacks:[]}))),testObjects:e.registerStateKey((()=>[]))}}(l,{suiteId:i(),name:a});return(n=s.bind({stateRef:c},(function(){const[e]=g(),[,t]=s.use().stateRef.carryOverTests(),[{pending:n},i]=s.use().stateRef.pending();return l.reset(),t((()=>e)),i({lagging:n,pending:[]}),r.apply(null,arguments),j()}))).get=s.bind({stateRef:c},j,!0),n.reset=l.reset,n.remove=s.bind({stateRef:c},(e=>{const[t]=g();[].concat(t).forEach((t=>{t.fieldName===e&&t.cancel()}))})),n.subscribe=function(e){u(e)&&(o.push(e),e({type:"suiteSubscribeInit",suiteState:c}))},n}));function P(e){r(this,e)}function K(e){return!!e===e}P.prototype.setFailFast=function(e){return this.failFast=!!e,this},P.unwrap=function(e){return P.is(e)?e.value:e},P.wrap=function(e){return P.is(e)?e:new P({value:e})},P.is=function(e){return e instanceof P};let $=o(K);function G(e){return void 0===e}let U=o(G);function z(e){G(e)||(K(e)?this.setFailed(!e):this.extend(e))}function V(e,t){let n=z.is(e),r=z.is(t);if(n&&r){if(e.setFailed(e.failed||t.failed),R(e.children)&&R(t.children))return e;if(e.children&&t.children){for(let n in e.children)V(e.children[n],t.children[n]);for(let n in t.children)k(e.children,n)||e.setChild(n,t.children[n]);return e}if(e.children){if(!t.children)return e}else e.children=t.children}else{if(n)return e;if(r)return t}return new z(!1)}function D(e,t){return!t.pass&&!t.warn&&(!!P.is(e)&&e.failFast)}function M(e,t){let n=new z(!0);for(let r of[].concat(e)){if(D(t,n))break;n.extend(H(r,t))}return n}function H(e,t){return e.run(t)}function J(e,t,n){let r=new z(!0);R(t)&&r.setFailed(!0);let s=[],i=0;for(let a of t){if(null===(t=H(a,e)))return null;let u=t.pass;if(u?i++:s.push(t),n)if("any"===n.mode){if(u){r.extend(t);break}}else{if(r.extend(t),"all"===n.mode&&!u)break;if("one"===n.mode&&(r.setFailed(1!==i),1<i))break}else if(r.extend(t),u)break}return r.pass&&0===i&&(r.setFailed(!0),s.forEach((e=>r.extend(e)))),r}z.is=function(e){return e instanceof z},z.prototype.asArray=function(){return this.isArray=!0,this},z.prototype.setAttribute=function(e,t){return this[e]=t,this},z.prototype.setFailed=function(e){return this.setAttribute(this.warn?"hasWarnings":"hasErrors",e),this.setAttribute("failed",e)},z.prototype.setChild=function(e,t){if(null===t)return null;let n=this.hasWarnings||t.hasWarnings||t.warn||this.warn;return this.setAttribute("hasWarnings",n&&t.failed||!1),this.setAttribute("hasErrors",this.hasErrors||t.hasErrors||!n&&t.failed||!1),this.setFailed(this.failed||t.failed),this.children=this.children||{},this.children[e]=t},z.prototype.getChild=function(e){return(this.children||{})[e]},z.prototype.extend=function(e){if(null===e)return this;e=z.is(e)?e:(new z).setAttribute("warn",!!this.warn).setFailed(!e);let t=this.failed||e.failed,n=V(e,this).children;r(this,e),R(n)||(this.children=n),this.setFailed(t),this.setAttribute("hasWarnings",!(!this.hasWarnings&&!e.hasWarnings)),this.setAttribute("hasErrors",!(!this.hasErrors&&!e.hasErrors))},Object.defineProperty(z.prototype,"pass",{get(){return!this.failed}});var L=T((function(e,t){return J(e,t,{mode:"all"})})),Q=T((function(e,t){return J(e,t,{mode:"any"})}));function X(e){return!!Array.isArray(e)}let Y=o(X);function Z(e,t,n){let r=P.unwrap(e),s=new z(!0);for(let n in t){let i=t[n],a=r[n];if(D(a,s))break;s.setChild(n,H(i,new P({value:a,obj:r,key:n}).setFailFast(e.failFast)))}if(!(n||{}).loose)for(let e in r)if(!k(t,e))return s.setFailed(!0);return s}var _={allOf:L,anyOf:Q,isArrayOf:T((function(e,t){let n=P.unwrap(e),r=new z(!0).asArray();if(Y(n))return r.setFailed(!0);for(let s=0;s<n.length;s++)r.setChild(s,J(new P({value:n[s],obj:n,key:s}).setFailFast(e.failFast),t,{mode:"any"}));return r})),loose:(e,t)=>Z(e,t,{loose:!0}),oneOf:T((function(e,t){return J(e,t,{mode:"one"})})),optional:T((function(e,t){let{obj:n,key:r}=e;return!(k(n,r)&&!G(n[r]||null===n[r])&&!R(t))||J(n[r],t,{mode:"all"})})),shape:Z};function ee(e,t){return u(e)?e.apply(null,t):e}var te={warn:function(e,t=!0){return t},message:function(e,t){return ee(t,[P.unwrap(e)])},when:function(e,t,n){return n(e=!ee(t,[P.unwrap(e)].concat(P.is(e)?[e.key,e.obj]:[])))}};function ne(e){return String(e)===e}function re(e,t){return ne(e)&&ne(t)&&e.endsWith(t)}let se=o(re);function ie(e,t){return e===t}let ae=o(ie);function ue(e,t){return C(e)&&C(t)&&Number(e)>Number(t)}function oe(e,t){return C(e)&&C(t)&&Number(e)>=Number(t)}function le(e,t){return!!(Array.isArray(t)&&/^[s|n|b]/.test(typeof e)||ne(t)&&ne(e))&&-1!==t.indexOf(e)}let ce=o(le);function fe(e,t){return C(e)&&C(t)&&Number(e)<=Number(t)}function de(e,t,n){return oe(e,t)&&fe(e,n)}let pe=o(de);function ge(e){return"string"==typeof e&&""===e.trim()}let he=o(ge);function me(e){return Number.isNaN(e)}let ye=o(me);function be(e){return!!C(e)&&0>Number(e)}let Ne=o(be);function we(e){return"number"==typeof e}let ve=o(we),Ee=o(ne);function Fe(e){return!!e}let ke=o(Fe);function Ce(e,t){return C(e)&&C(t)&&Number(e)<Number(t)}function Oe(e,t){return t instanceof RegExp?t.test(e):!!ne(t)&&new RegExp(t).test(e)}let Re=o(Oe);function xe(e,t){return C(e)&&C(t)&&Number(e)===Number(t)}let We=o(xe);function Ae(e,t){return ne(e)&&ne(t)&&e.startsWith(t)}let Te=o(Ae);var Se=r({doesNotEndWith:se,doesNotStartWith:Te,endsWith:re,equals:ie,greaterThan:ue,greaterThanOrEquals:oe,gt:ue,gte:oe,inside:le,isArray:X,isBetween:de,isBoolean:K,isBlank:ge,isEmpty:R,isEven:e=>!!C(e)&&0==e%2,isFalsy:ke,isNaN:me,isNegative:be,isNotArray:Y,isNotBetween:pe,isNotBlank:he,isNotBoolean:$,isNotEmpty:x,isNotNaN:ye,isNotNull:c,isNotNumber:ve,isNotNumeric:O,isNotString:Ee,isNotUndefined:U,isNull:l,isNumber:we,isNumeric:C,isOdd:e=>!!C(e)&&0!=e%2,isPositive:Ne,isString:ne,isTruthy:Fe,isUndefined:G,lengthEquals:f,lengthNotEquals:d,lessThan:Ce,lessThanOrEquals:fe,longerThan:function(e,t){return e.length>Number(t)},longerThanOrEquals:function(e,t){return e.length>=Number(t)},lt:Ce,lte:fe,matches:Oe,notEquals:ae,notInside:ce,notMatches:Re,numberEquals:xe,numberNotEquals:We,shorterThan:function(e,t){return e.length<Number(t)},shorterThanOrEquals:function(e,t){return e.length<=Number(t)},startsWith:Ae},_,te);let je=Function("return this")();function qe(e,t){if(u(je.Proxy))return new Proxy(e,{get:(e,n)=>k(e,n)?e[n]:k(Se,n)&&u(Se[n])?t(n):e[n]});for(let n in Se)u(e[n])||Object.defineProperties(e,{[n]:{get:()=>t(n)}});return e}function Be(e){let t=[],n=[],r=e=>T((s=>{const i=Se[e];te[i.name]===i?n.push(((e,t,n)=>{t.setAttribute(i.name,i(e,s[0],n))})):t.push(A((e=>i.apply(null,[k(_,i.name)?P.wrap(e):P.unwrap(e)].concat(s))),e));const a=qe({},r);return a.run=e=>{const r=new z(!0);let s=!1;if(n.forEach((t=>{t(e,r,(e=>s=e))})),s)return null;for(const n of t)try{if(r.extend(n(e)),!r.pass)break}catch(e){r.setFailed(!0);break}return r},a.test=e=>a.run(P.wrap(e).setFailFast(!0)).pass,a}),e);return r(e)}function Ie(e,t,n=[]){let r=k(_,e.name),s=r?P.wrap(t).setFailFast(!0):P.unwrap(t);if(n=e.apply(null,[s].concat(n)),r||(n=function(e,{rule:t,value:n}){return n={message:Error(`invalid ${typeof n} value`)},K(e)||e&&K(e.pass)||N(t.name+"wrong return value"),K(e)?(n.pass=e,n):(n.pass=e.pass,e.message&&(n.message=ee(e.message)),n)}(n,{rule:e,value:t})),!n.pass)throw n.message}let Pe=e=>{const t=qe({},(n=>T((r=>(Ie(Se[n],e,r),t)))));return t},Ke=qe(Pe,Be);function $e(e){return ze("only","tests",e)}function Ge(e){return ze("skip","tests",e)}function Ue(e){let{fieldName:t,groupName:n}=e;({exclusion:e}=s.use());let r=e.tests;var i=r[t];if(!1===i)return!0;if(i=!0===i,n){e:{var{exclusion:a}=s.use();if(k(a=a.groups,n))var u=!1===a[n];else{for(u in a)if(!0===a[u]){u=!0;break e}u=!1}}if(u)return!0;if(!0===e.groups[n])return!i&&(!!Ve(r)||!1===r[t])}return!i&&Ve(r)}!function(e,t){e.extend=n=>(r(Se,n),u(je.Proxy)||qe(t,Be),e)}(Ke,Pe),Ke.template=T((e=>{let t=t=>{Ie(M.bind(null,e),t);const n=qe({},(e=>T((r=>(Ie(Se[e],t,r),n)))));return n};return t.run=t=>M(e,t),t.test=t=>M(e,P.wrap(t).setFailFast(!0)).pass,t})),$e.group=e=>ze("only","groups",e),Ge.group=e=>ze("skip","groups",e);let ze=(e,t,n)=>{const r=s.use();n&&(r?[].concat(n).forEach((n=>{if(!ne(n))return null;r.exclusion[t][n]="only"===e})):N(`${e} hook called outside of a running suite.`))},Ve=e=>{for(const t in e)if(!0===e[t])return!0;return!1};function De(e,t){ke(ee(e))&&u(t)&&t()}let Me=()=>{const e=s.use();e?e.currentTest?e.currentTest.warn():N("warn called outside of a test."):N("warn hook called outside of a running suite.")},He=()=>N("group initialization error. Incompatible argument passed to group."),Je=(e,t)=>{ne(e)||He(),u(t)||He(),s.bind({groupName:e},t)()};function Le(e){let[,t]=s.use().stateRef.optionalFields();t((t=>([].concat(e).forEach((e=>{t[e]=!0})),t)))}let Qe=(e,t)=>(-1!==(t=e.indexOf(t))&&e.splice(t,1),e),Xe=e=>{const[t,n]=s.use().stateRef.pending(),r=[].concat(t.lagging).reduce(((t,n)=>(e.fieldName===n.fieldName&&e.groupName===n.groupName&&n.id!==e.id?n.cancel():t.push(n),t)),[]);n((t=>({lagging:r,pending:t.pending.concat(e)})))},Ye=e=>{const[,t]=s.use().stateRef.pending();t((t=>({pending:Qe(t.pending,e),lagging:Qe(t.lagging,e)})))};function Ze({fieldName:e,statement:t,testFn:n,group:r}){let s={cancel:function(){s.canceled=!0,Ye(this),(e=>{let[,t]=g();t((t=>[].concat(Qe(t,e))))})(this)},fail:function(){s.failed=!0},failed:!1,fieldName:e,id:i(),isWarning:!1,statement:t,testFn:n,valueOf:function(){return!0!==s.failed},warn:function(){s.isWarning=!0}};return r&&(s.groupName=r),s}var _e=e=>{let[,t]=g();t((t=>t.concat(e)))};function et(e){return e.forEach((e=>e()))}let tt=e=>{const{asyncTest:t,statement:n}=e;var{stateRef:r}=s.use();const i=s.bind({stateRef:r},(()=>{if(Ye(e),!e.canceled){var t=e.fieldName;const[{fieldCallbacks:n,doneCallbacks:r}]=s.use().stateRef.testCallbacks();t&&!W(t)&&Array.isArray(n[t])&&et(n[t]),W()||et(r)}}));r=s.bind({stateRef:r},(t=>{e.statement=ne(t)?t:n,e.fail(),[,t]=g(),t((e=>e.slice())),i()}));try{t.then(i,r)}catch(e){r()}};function nt(e){_e(e);let t=function(e){return s.run({currentTest:e},(()=>{let t;try{t=e.testFn()}catch(n){G(e.statement)&&ne(n)&&(e.statement=n),t=!1}return!1===t&&e.fail(),t}))}(e);try{t&&u(t.then)&&(e.asyncTest=t,Xe(e),tt(e))}catch(e){}}let rt=T((function(e,t){const[n,r]=t.reverse();[,t]=s.use().stateRef.skippedTests();const{groupName:i}=s.use(),a=Ze({fieldName:e,group:i,statement:r,testFn:n});return Ue(a)?(t((e=>e.concat(a))),function(e){let[t,n]=s.use().stateRef.carryOverTests(),[,r]=g(),[i,a]=function(e,t){return e.reduce(((n,r,s)=>(n[t(r,s,e)?0:1].push(r),n)),[[],[]])}(t,(t=>t.fieldName===e.fieldName&&t.groupName===e.groupName));n((()=>a)),r((e=>e.concat(i)))}(a),a):u(n)?(nt(a),a):a}));!function(e){e.each=function(t){return Array.isArray(t)||N("test.each: Expected table to be an array."),T(((n,r)=>{let[s,i]=r.reverse();return t.map((t=>(t=[].concat(t),e(ee(n,t),ee(i,t),(()=>s.apply(null,t))))))}))}}(rt),function(e){let t=p(100);e.memo=T((function(n,r){var[i]=s.use().stateRef.suiteId();let[a,o,l]=r.reverse();return r=[i.id,n].concat(a),null===(i=t.get(r))?t(r,e.bind(null,n,l,o)):([,n]=i,Ue(n)||(_e(n),(r=n)&&(r=(r=n.asyncTest)&&u(r.then)),r&&(Xe(n),tt(n))),n)}))}(rt);export default{VERSION:"3.2.8",create:I,enforce:Ke,group:Je,only:$e,optional:Le,skip:Ge,skipWhen:De,test:rt,warn:Me};var st="3.2.8";export{st as VERSION,I as create,Ke as enforce,Je as group,$e as only,Le as optional,Ge as skip,De as skipWhen,rt as test,Me as warn};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vest",
3
- "version": "3.2.6",
3
+ "version": "3.2.8",
4
4
  "description": "Declarative validations.",
5
5
  "main": "./vest.js",
6
6
  "browser": "./vest.js",
@@ -1993,6 +1993,17 @@ const hasIncludedTests = keyTests => {
1993
1993
  return false;
1994
1994
  };
1995
1995
 
1996
+ // an if statement. The reason for it is to support version 4 api in version 3
1997
+ // so that someone reading the latest docs can still run the code.
1998
+
1999
+ function skipWhen(conditional, callback) {
2000
+ if (isFalsy(optionalFunctionValue(conditional))) {
2001
+ if (isFunction(callback)) {
2002
+ callback();
2003
+ }
2004
+ }
2005
+ }
2006
+
1996
2007
  /**
1997
2008
  * @type {String} Error message to display when `warn` gets called outside of a test.
1998
2009
  */
@@ -2466,7 +2477,7 @@ const test = withArgs(function (fieldName, args) {
2466
2477
  bindTestEach(test);
2467
2478
  bindTestMemo(test);
2468
2479
 
2469
- const VERSION = "3.2.6";
2480
+ const VERSION = "3.2.8";
2470
2481
  var vest = {
2471
2482
  VERSION,
2472
2483
  create: createSuite,
@@ -2475,6 +2486,7 @@ var vest = {
2475
2486
  only,
2476
2487
  optional,
2477
2488
  skip,
2489
+ skipWhen,
2478
2490
  test,
2479
2491
  warn
2480
2492
  };
@@ -1993,6 +1993,17 @@ const hasIncludedTests = keyTests => {
1993
1993
  return false;
1994
1994
  };
1995
1995
 
1996
+ // an if statement. The reason for it is to support version 4 api in version 3
1997
+ // so that someone reading the latest docs can still run the code.
1998
+
1999
+ function skipWhen(conditional, callback) {
2000
+ if (isFalsy(optionalFunctionValue(conditional))) {
2001
+ if (isFunction(callback)) {
2002
+ callback();
2003
+ }
2004
+ }
2005
+ }
2006
+
1996
2007
  /**
1997
2008
  * @type {String} Error message to display when `warn` gets called outside of a test.
1998
2009
  */
@@ -2463,7 +2474,7 @@ const test = withArgs(function (fieldName, args) {
2463
2474
  bindTestEach(test);
2464
2475
  bindTestMemo(test);
2465
2476
 
2466
- const VERSION = "3.2.6";
2477
+ const VERSION = "3.2.8";
2467
2478
  var vest = {
2468
2479
  VERSION,
2469
2480
  create: createSuite,
@@ -2472,6 +2483,7 @@ var vest = {
2472
2483
  only,
2473
2484
  optional,
2474
2485
  skip,
2486
+ skipWhen,
2475
2487
  test,
2476
2488
  warn
2477
2489
  };
@@ -1 +1 @@
1
- "use strict";function e(e){return"function"==typeof e}function t(t,n){return e(t)?t.apply(null,n):t}function n(e){return[].concat(e)}function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n,r=arguments[t];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var i=Object.assign;let u=function(e){function t(t,u){var s,o,a=n();return t=r({},a||{},null!==(s=null==e?void 0:e(t,a))&&void 0!==s?s:t),s=i.ctx=Object.freeze(t),i.ancestry.unshift(s),u=u(s),i.ancestry.shift(),i.ctx=null!==(o=i.ancestry[0])&&void 0!==o?o:null,u}function n(){return i.ctx}var i={ancestry:[]};return{run:t,bind:function(e,n){for(var r=arguments.length,i=Array(2<r?r-2:0),u=2;u<r;u++)i[u-2]=arguments[u];return function(){for(var r=arguments.length,u=Array(r),s=0;s<r;s++)u[s]=arguments[s];return t(e,(function(){return n.apply(void 0,i.concat(u))}))}},use:n}}(((e,t)=>t?null:i({},{exclusion:{tests:{},groups:{}}},e))),s=(o=0,()=>""+o++);var o;function a(e){return"function"==typeof e}function l(e){return function(){return!e.apply(this,arguments)}}function c(e){return null===e}let f=l(c);function d(e,t){return e.length===Number(t)}let p=l(d),h=(e=10)=>{const t=[],n=(r,i)=>{const u=n.get(r);return f(u)?u[1]:(i=i(),t.unshift([r.concat(),i]),t.length>e&&(t.length=e),i)};return n.get=e=>t[t.findIndex((([t])=>d(e,t.length)&&e.every(((e,n)=>e===t[n]))))]||null,n},g="warnings",m="errors",y=()=>u.use().stateRef;function b(){return y().carryOverTests()}function N(){return y().pending()}function v(){return y().suiteId()}function w(){return y().testCallbacks()}function F(){return y().testObjects()}function E(){return y().skippedTests()}function C(){return y().optionalFields()}let k=e=>{for(const t in e.tests)e.errorCount+=e.tests[t].errorCount,e.warnCount+=e.tests[t].warnCount,e.testCount+=e.tests[t].testCount;return e},O=(e,t,n)=>{const{fieldName:r,isWarning:i,failed:u,statement:s}=t;return e[r]=e[r]||{errorCount:0,warnCount:0,testCount:0},t=e[r],n||(e[r].testCount++,u&&(i?(e=g,t.warnCount++,s&&(t[e]=(t[e]||[]).concat(s))):(e=m,t.errorCount++,s&&(t[e]=(t[e]||[]).concat(s))))),t};function x(e,t){return e!==g&&t.isWarning||e===g&&!t.isWarning}let A=(e,t)=>{const[n]=F(),{group:r,fieldName:i}=t||{};return t=n.reduce(((t,n)=>(r&&n.groupName!==r||i&&n.fieldName!==i||!n.failed||x(e,n)||(t[n.fieldName]=(t[n.fieldName]||[]).concat(n.statement)),t)),{}),i?t[i]||[]:t};function T(e,t){return A(e,{fieldName:t})}let S=(e,t=Error)=>{throw new t(`[vest]: ${e}`)},j=(e,t,n)=>(t||S(`get${e[0].toUpperCase()}${e.slice(1)}ByGroup requires a group name. Received \`${t}\` instead.`),A(e,{group:t,fieldName:n})),W=(e,t,n)=>!(!e.failed||n&&n!==e.fieldName||x(t,e)),R=(e,t)=>{const[n]=F();return n.some((n=>W(n,e,t)))},q=(e,t,n)=>{const[r]=F();return r.some((r=>t===r.groupName&&W(r,e,n)))};function B(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function I(e){return!(isNaN(parseFloat(e))||isNaN(Number(e))||!isFinite(e))}let P=l(I);function K(e){if(e){if(I(e))return 0===e;if(B(e,"length"))return d(e,0);if("object"==typeof e)return d(Object.keys(e),0)}return!0}let $=l(K),G=e=>{const[{pending:t,lagging:n}]=N(),r=t.concat(n);return!K(r)&&(e?r.some((t=>t.fieldName===e)):$(r))},U="hasWarnings",z="hasErrors";function V(e,t){var n;return null!==(n=Object.getOwnPropertyDescriptor(e,"name"))&&void 0!==n&&n.configurable?Object.defineProperty(e,"name",{value:t}):e}function D(e,t){return V((function(){let t=Array.from(arguments),n=t.splice(e.length-1);return e.apply(null,t.concat([n]))}),t||e.name)}let M=h(20),H=e=>{const{stateRef:t}=u.use(),[n]=F(),r={stateRef:t};return M([n,e],u.bind(r,(()=>[[z,R,m],[U,R,g],["getErrors",T,m],["getWarnings",T,g],["hasErrorsByGroup",q,m],["hasWarningsByGroup",q,g],["getErrorsByGroup",j,m],["getWarningsByGroup",j,g]].concat([["isValid",L]],e?[]:[["done",D(J)]]).reduce(((e,[t,n,i])=>(e[t]=u.bind(r,n,i),e)),(()=>{function e(e,t){e.forEach((e=>{const{fieldName:n,groupName:r}=e;i.tests[n]=O(i.tests,e,t),r&&(i.groups[r]=i.groups[r]||{},i.groups[r][n]=O(i.groups[r],e,t))}))}const[t]=F(),[n]=v(),[r]=E(),i={errorCount:0,warnCount:0,testCount:0,groups:{},name:n.name,tests:{}};return e(t),e(r,!0),k(i)})()))))};function J(e){let[t,n]=e.reverse();var{stateRef:r}=u.use();e=H();let i=n&&(!e.tests[n]||0===e.tests[n].testCount);if(!a(t)||i)return e;let s=u.bind({stateRef:r},(()=>t(H(!0))));return!G()||n&&!G(n)?(s(),e):([,r]=w(),r((e=>(n?e.fieldCallbacks[n]=(e.fieldCallbacks[n]||[]).concat(s):e.doneCallbacks.push(s),e))),e)}function L(){let e=H();if(e.hasErrors())return!1;var[t]=F();if(0===t.length)return!1;[t]=C();let[{pending:n,lagging:r}]=N();if($(n.concat(r).filter((e=>!e.isWarning))))return!1;for(let n in e.tests)if(!t[n]&&0===e.tests[n].testCount)return!1;return!0}let Q=D((r=>{const[i,o]=r.reverse();a(i)||S("Suite initialization error. Expected `tests` to be a function.");const l=[],c=function(n){function r(e,n){return u.references.push(),i(e,t(n)),function(){return[u.references[e],function(n){return i(e,t(n,[u.references[e]]))}]}}function i(t,r){var i=u.references[t];u.references[t]=r,e(t=s[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},s=[];return{registerStateKey:function(e,t){var n=s.length;return s.push([e,t]),r(n,e)},reset:function(){u.references=[],s.forEach((function(e,t){return r(t,e[0])}))}}}((()=>{l.forEach((e=>e({suiteState:f,type:"suiteStateUpdate"})))})),f=function(e,{suiteId:t,name:n}){return{carryOverTests:e.registerStateKey((()=>[])),optionalFields:e.registerStateKey((()=>({}))),pending:e.registerStateKey((()=>({pending:[],lagging:[]}))),skippedTests:e.registerStateKey((()=>[])),suiteId:e.registerStateKey((()=>({id:t,name:n}))),testCallbacks:e.registerStateKey((()=>({fieldCallbacks:{},doneCallbacks:[]}))),testObjects:e.registerStateKey((()=>[]))}}(c,{suiteId:s(),name:o});return(r=u.bind({stateRef:f},(function(){const[e]=F(),[,t]=b(),[{pending:n},r]=N();return c.reset(),t((()=>e)),r({lagging:n,pending:[]}),i.apply(null,arguments),H()}))).get=u.bind({stateRef:f},H,!0),r.reset=c.reset,r.remove=u.bind({stateRef:f},(e=>{const[t]=F();n(t).forEach((t=>{t.fieldName===e&&t.cancel()}))})),r.subscribe=function(e){a(e)&&(l.push(e),e({type:"suiteSubscribeInit",suiteState:f}))},r}));function X(e){i(this,e)}function Y(e){return!!e===e}X.prototype.setFailFast=function(e){return this.failFast=!!e,this},X.unwrap=function(e){return X.is(e)?e.value:e},X.wrap=function(e){return X.is(e)?e:new X({value:e})},X.is=function(e){return e instanceof X};let Z=l(Y);function _(e){return void 0===e}let ee=l(_);function te(e){_(e)||(Y(e)?this.setFailed(!e):this.extend(e))}function ne(e,t){let n=te.is(e),r=te.is(t);if(n&&r){if(e.setFailed(e.failed||t.failed),K(e.children)&&K(t.children))return e;if(e.children&&t.children){for(let n in e.children)ne(e.children[n],t.children[n]);for(let n in t.children)B(e.children,n)||e.setChild(n,t.children[n]);return e}if(e.children){if(!t.children)return e}else e.children=t.children}else{if(n)return e;if(r)return t}return new te(!1)}te.is=function(e){return e instanceof te},te.prototype.asArray=function(){return this.isArray=!0,this},te.prototype.setAttribute=function(e,t){return this[e]=t,this},te.prototype.setFailed=function(e){return this.setAttribute(this.warn?U:z,e),this.setAttribute("failed",e)},te.prototype.setChild=function(e,t){if(c(t))return null;let n=this[U]||t[U]||t.warn||this.warn;return this.setAttribute(U,n&&t.failed||!1),this.setAttribute(z,this[z]||t[z]||!n&&t.failed||!1),this.setFailed(this.failed||t.failed),this.children=this.children||{},this.children[e]=t},te.prototype.getChild=function(e){return(this.children||{})[e]},te.prototype.extend=function(e){if(c(e))return this;e=te.is(e)?e:(new te).setAttribute("warn",!!this.warn).setFailed(!e);let t=this.failed||e.failed,n=ne(e,this).children;i(this,e),K(n)||(this.children=n),this.setFailed(t),this.setAttribute(U,!(!this[U]&&!e[U])),this.setAttribute(z,!(!this[z]&&!e[z]))},Object.defineProperty(te.prototype,"pass",{get(){return!this.failed}});function re(e,t){return!t.pass&&!t.warn&&(!!X.is(e)&&e.failFast)}function ie(e,t){let r=new te(!0);for(let i of n(e)){if(re(t,r))break;r.extend(ue(i,t))}return r}function ue(e,t){return e.run(t)}function se(e,t,n){let r=new te(!0);K(t)&&r.setFailed(!0);let i=[],u=0;for(let s of t){if(c(t=ue(s,e)))return null;let o=t.pass;if(o?u++:i.push(t),n)if("any"===n.mode){if(o){r.extend(t);break}}else{if(r.extend(t),"all"===n.mode&&!o)break;if("one"===n.mode&&(r.setFailed(1!==u),1<u))break}else if(r.extend(t),o)break}return r.pass&&0===u&&(r.setFailed(!0),i.forEach((e=>r.extend(e)))),r}var oe=D((function(e,t){return se(e,t,{mode:"all"})}));var ae=D((function(e,t){return se(e,t,{mode:"any"})}));function le(e){return!!Array.isArray(e)}let ce=l(le);function fe(e,t,n){let r=X.unwrap(e),i=new te(!0);for(let n in t){let u=t[n],s=r[n];if(re(s,i))break;i.setChild(n,ue(u,new X({value:s,obj:r,key:n}).setFailFast(e.failFast)))}if(!(n||{}).loose)for(let e in r)if(!B(t,e))return i.setFailed(!0);return i}var de={allOf:oe,anyOf:ae,isArrayOf:D((function(e,t){let n=X.unwrap(e),r=new te(!0).asArray();if(ce(n))return r.setFailed(!0);for(let i=0;i<n.length;i++)r.setChild(i,se(new X({value:n[i],obj:n,key:i}).setFailFast(e.failFast),t,{mode:"any"}));return r})),loose:(e,t)=>fe(e,t,{loose:!0}),oneOf:D((function(e,t){return se(e,t,{mode:"one"})})),optional:D((function(e,t){let{obj:n,key:r}=e;return!(B(n,r)&&!_(n[r]||c(n[r]))&&!K(t))||se(n[r],t,{mode:"all"})})),shape:fe};function pe(e,t){return a(e)?e.apply(null,t):e}var he={warn:function(e,t=!0){return t},message:function(e,t){return pe(t,[X.unwrap(e)])},when:function(e,t,n){return n(e=!pe(t,[X.unwrap(e)].concat(X.is(e)?[e.key,e.obj]:[])))}};function ge(e){return String(e)===e}function me(e,t){return ge(e)&&ge(t)&&e.endsWith(t)}let ye=l(me);function be(e,t){return e===t}let Ne=l(be);function ve(e,t){return I(e)&&I(t)&&Number(e)>Number(t)}function we(e,t){return I(e)&&I(t)&&Number(e)>=Number(t)}function Fe(e,t){return!!(Array.isArray(t)&&/^[s|n|b]/.test(typeof e)||ge(t)&&ge(e))&&-1!==t.indexOf(e)}let Ee=l(Fe);function Ce(e,t){return I(e)&&I(t)&&Number(e)<=Number(t)}function ke(e,t,n){return we(e,t)&&Ce(e,n)}let Oe=l(ke);function xe(e){return"string"==typeof e&&""===e.trim()}let Ae=l(xe),Te=e=>!!I(e)&&0==e%2;function Se(e){return Number.isNaN(e)}let je=l(Se);function We(e){return!!I(e)&&0>Number(e)}let Re=l(We);function qe(e){return"number"==typeof e}let Be=l(qe),Ie=e=>!!I(e)&&0!=e%2,Pe=l(ge);function Ke(e){return!!e}let $e=l(Ke);function Ge(e,t){return I(e)&&I(t)&&Number(e)<Number(t)}function Ue(e,t){return e.length>Number(t)}function ze(e,t){return e.length>=Number(t)}function Ve(e,t){return t instanceof RegExp?t.test(e):!!ge(t)&&new RegExp(t).test(e)}let De=l(Ve);function Me(e,t){return I(e)&&I(t)&&Number(e)===Number(t)}let He=l(Me);function Je(e,t){return e.length<Number(t)}function Le(e,t){return e.length<=Number(t)}function Qe(e,t){return ge(e)&&ge(t)&&e.startsWith(t)}let Xe=l(Qe);var Ye=i({doesNotEndWith:ye,doesNotStartWith:Xe,endsWith:me,equals:be,greaterThan:ve,greaterThanOrEquals:we,gt:ve,gte:we,inside:Fe,isArray:le,isBetween:ke,isBoolean:Y,isBlank:xe,isEmpty:K,isEven:Te,isFalsy:$e,isNaN:Se,isNegative:We,isNotArray:ce,isNotBetween:Oe,isNotBlank:Ae,isNotBoolean:Z,isNotEmpty:$,isNotNaN:je,isNotNull:f,isNotNumber:Be,isNotNumeric:P,isNotString:Pe,isNotUndefined:ee,isNull:c,isNumber:qe,isNumeric:I,isOdd:Ie,isPositive:Re,isString:ge,isTruthy:Ke,isUndefined:_,lengthEquals:d,lengthNotEquals:p,lessThan:Ge,lessThanOrEquals:Ce,longerThan:Ue,longerThanOrEquals:ze,lt:Ge,lte:Ce,matches:Ve,notEquals:Ne,notInside:Ee,notMatches:De,numberEquals:Me,numberNotEquals:He,shorterThan:Je,shorterThanOrEquals:Le,startsWith:Qe},de,he);let Ze=Function("return this")(),_e=()=>a(Ze.Proxy);function et(e,t){if(_e())return new Proxy(e,{get:(e,n)=>B(e,n)?e[n]:(e=>B(Ye,e)&&a(Ye[e]))(n)?t(n):e[n]});for(let n in Ye)a(e[n])||Object.defineProperties(e,{[n]:{get:()=>t(n)}});return e}function tt(e){return B(de,e.name)}function nt(e){let t=[],n=[],r=e=>D((i=>{const u=Ye[e];he[u.name]===u?n.push(((e,t,n)=>{t.setAttribute(u.name,u(e,i[0],n))})):t.push(V((e=>u.apply(null,[tt(u)?X.wrap(e):X.unwrap(e)].concat(i))),e));const s=et({},r);return s.run=e=>{const r=new te(!0);let i=!1;if(n.forEach((t=>{t(e,r,(e=>i=e))})),i)return null;for(const n of t)try{if(r.extend(n(e)),!r.pass)break}catch(e){r.setFailed(!0);break}return r},s.test=e=>s.run(X.wrap(e).setFailFast(!0)).pass,s}),e);return r(e)}function rt(e,{rule:t,value:n}){return n=function(e){return{message:Error(`invalid ${typeof e} value`)}}(n),function(e,t){Y(e)||e&&Y(e.pass)||S(t.name+"wrong return value")}(e,t),Y(e)?(n.pass=e,n):(n.pass=e.pass,e.message&&(n.message=pe(e.message)),n)}function it(e,t,n=[]){let r=tt(e),i=r?X.wrap(t).setFailFast(!0):X.unwrap(t);if(n=e.apply(null,[i].concat(n)),r||(n=rt(n,{rule:e,value:t})),!n.pass)throw n.message}let ut=e=>{const t=et({},(n=>D((r=>(it(Ye[n],e,r),t)))));return t},st=et(ut,nt);!function(e,t){e.extend=n=>(i(Ye,n),_e()||et(t,nt),e)}(st,ut),function(e){e.template=D((e=>{let t=t=>{it(ie.bind(null,e),t);const n=et({},(e=>D((r=>(it(Ye[e],t,r),n)))));return n};return t.run=t=>ie(e,t),t.test=t=>ie(e,X.wrap(t).setFailFast(!0)).pass,t}))}(st);function ot(e){return dt(ct,"tests",e)}function at(e){return dt(ft,"tests",e)}function lt(e){let{fieldName:t,groupName:n}=e;({exclusion:e}=u.use());let r=e.tests;var i=r[t];if(!1===i)return!0;if(i=!0===i,n){if(function(e){var{exclusion:t}=u.use();if(B(t=t.groups,e))return!1===t[e];for(let e in t)if(!0===t[e])return!0;return!1}(n))return!0;if(!0===e.groups[n])return!i&&(!!pt(r)||!1===r[t])}return!i&&pt(r)}ot.group=e=>dt(ct,"groups",e),at.group=e=>dt(ft,"groups",e);let ct="only",ft="skip",dt=(e,t,r)=>{const i=u.use();r&&(i?n(r).forEach((n=>{if(!ge(n))return null;i.exclusion[t][n]=e===ct})):S(`${e} hook called outside of a running suite.`))},pt=e=>{for(const t in e)if(!0===e[t])return!0;return!1},ht=()=>S("group initialization error. Incompatible argument passed to group.");function gt(e,t){return e.fieldName===t.fieldName&&e.groupName===t.groupName}let mt=(e,t)=>(-1!==(t=e.indexOf(t))&&e.splice(t,1),e),yt=e=>{const[t,r]=N(),i=n(t.lagging).reduce(((t,n)=>(gt(e,n)&&n.id!==e.id?n.cancel():t.push(n),t)),[]);r((t=>({lagging:i,pending:t.pending.concat(e)})))},bt=e=>{const[,t]=N();t((t=>({pending:mt(t.pending,e),lagging:mt(t.lagging,e)})))};function Nt({fieldName:e,statement:t,testFn:r,group:i}){let u={cancel:function(){u.canceled=!0,bt(this),(e=>{let[,t]=F();t((t=>n(mt(t,e))))})(this)},fail:function(){u.failed=!0},failed:!1,fieldName:e,id:s(),isWarning:!1,statement:t,testFn:r,valueOf:function(){return!0!==u.failed},warn:function(){u.isWarning=!0}};return i&&(u.groupName=i),u}var vt=e=>{let[,t]=F();t((t=>t.concat(e)))};function wt(e){return e&&a(e.then)}function Ft(e){return e.forEach((e=>e()))}let Et=e=>{const{asyncTest:t,statement:n}=e;var{stateRef:r}=u.use();const i=u.bind({stateRef:r},(()=>{bt(e),e.canceled||Ct(e.fieldName)}));r=u.bind({stateRef:r},(t=>{e.statement=ge(t)?t:n,e.fail(),[,t]=F(),t((e=>e.slice())),i()}));try{t.then(i,r)}catch(e){r()}},Ct=e=>{const[{fieldCallbacks:t,doneCallbacks:n}]=w();e&&!G(e)&&Array.isArray(t[e])&&Ft(t[e]),G()||Ft(n)};function kt(e){vt(e);let t=function(e){return u.run({currentTest:e},(()=>{let t;try{t=e.testFn()}catch(n){_(e.statement)&&ge(n)&&(e.statement=n),t=!1}return!1===t&&e.fail(),t}))}(e);try{wt(t)&&(e.asyncTest=t,yt(e),Et(e))}catch(e){}}let Ot=D((function(e,t){const[n,r]=t.reverse();[,t]=E();const{groupName:i}=u.use(),s=Nt({fieldName:e,group:i,statement:r,testFn:n});return lt(s)?(t((e=>e.concat(s))),function(e){let[t,n]=b(),[,r]=F(),[i,u]=function(e,t){return e.reduce(((n,r,i)=>(n[t(r,i,e)?0:1].push(r),n)),[[],[]])}(t,(t=>gt(t,e)));n((()=>u)),r((e=>e.concat(i)))}(s),s):a(n)?(kt(s),s):s}));!function(e){e.each=function(t){return Array.isArray(t)||S("test.each: Expected table to be an array."),D(((r,i)=>{let[u,s]=i.reverse();return t.map((t=>(t=n(t),e(pe(r,t),pe(s,t),(()=>u.apply(null,t))))))}))}}(Ot),function(e){let t=h(100);e.memo=D((function(n,r){var[i]=v();let[u,s,o]=r.reverse();return r=[i.id,n].concat(u),c(i=t.get(r))?t(r,e.bind(null,n,o,s)):([,n]=i,lt(n)||(vt(n),n&&wt(n.asyncTest)&&(yt(n),Et(n))),n)}))}(Ot);var xt={VERSION:"3.2.6",create:Q,enforce:st,group:(e,t)=>{ge(e)||ht(),a(t)||ht(),u.bind({groupName:e},t)()},only:ot,optional:function(e){let[,t]=C();t((t=>(n(e).forEach((e=>{t[e]=!0})),t)))},skip:at,test:Ot,warn:()=>{const e=u.use();e?e.currentTest?e.currentTest.warn():S("warn called outside of a test."):S("warn hook called outside of a running suite.")}};module.exports=xt;
1
+ "use strict";function e(e){return"function"==typeof e}function t(t,n){return e(t)?t.apply(null,n):t}function n(e){return[].concat(e)}function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n,r=arguments[t];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var i=Object.assign;let u=function(e){function t(t,u){var s,o,a=n();return t=r({},a||{},null!==(s=null==e?void 0:e(t,a))&&void 0!==s?s:t),s=i.ctx=Object.freeze(t),i.ancestry.unshift(s),u=u(s),i.ancestry.shift(),i.ctx=null!==(o=i.ancestry[0])&&void 0!==o?o:null,u}function n(){return i.ctx}var i={ancestry:[]};return{run:t,bind:function(e,n){for(var r=arguments.length,i=Array(2<r?r-2:0),u=2;u<r;u++)i[u-2]=arguments[u];return function(){for(var r=arguments.length,u=Array(r),s=0;s<r;s++)u[s]=arguments[s];return t(e,(function(){return n.apply(void 0,i.concat(u))}))}},use:n}}(((e,t)=>t?null:i({},{exclusion:{tests:{},groups:{}}},e))),s=(o=0,()=>""+o++);var o;function a(e){return"function"==typeof e}function l(e){return function(){return!e.apply(this,arguments)}}function c(e){return null===e}let f=l(c);function d(e,t){return e.length===Number(t)}let p=l(d),h=(e=10)=>{const t=[],n=(r,i)=>{const u=n.get(r);return f(u)?u[1]:(i=i(),t.unshift([r.concat(),i]),t.length>e&&(t.length=e),i)};return n.get=e=>t[t.findIndex((([t])=>d(e,t.length)&&e.every(((e,n)=>e===t[n]))))]||null,n},g="warnings",m="errors",y=()=>u.use().stateRef;function b(){return y().carryOverTests()}function N(){return y().pending()}function v(){return y().suiteId()}function w(){return y().testCallbacks()}function F(){return y().testObjects()}function E(){return y().skippedTests()}function C(){return y().optionalFields()}let k=e=>{for(const t in e.tests)e.errorCount+=e.tests[t].errorCount,e.warnCount+=e.tests[t].warnCount,e.testCount+=e.tests[t].testCount;return e},O=(e,t,n)=>{const{fieldName:r,isWarning:i,failed:u,statement:s}=t;return e[r]=e[r]||{errorCount:0,warnCount:0,testCount:0},t=e[r],n||(e[r].testCount++,u&&(i?(e=g,t.warnCount++,s&&(t[e]=(t[e]||[]).concat(s))):(e=m,t.errorCount++,s&&(t[e]=(t[e]||[]).concat(s))))),t};function x(e,t){return e!==g&&t.isWarning||e===g&&!t.isWarning}let A=(e,t)=>{const[n]=F(),{group:r,fieldName:i}=t||{};return t=n.reduce(((t,n)=>(r&&n.groupName!==r||i&&n.fieldName!==i||!n.failed||x(e,n)||(t[n.fieldName]=(t[n.fieldName]||[]).concat(n.statement)),t)),{}),i?t[i]||[]:t};function T(e,t){return A(e,{fieldName:t})}let S=(e,t=Error)=>{throw new t(`[vest]: ${e}`)},j=(e,t,n)=>(t||S(`get${e[0].toUpperCase()}${e.slice(1)}ByGroup requires a group name. Received \`${t}\` instead.`),A(e,{group:t,fieldName:n})),W=(e,t,n)=>!(!e.failed||n&&n!==e.fieldName||x(t,e)),R=(e,t)=>{const[n]=F();return n.some((n=>W(n,e,t)))},q=(e,t,n)=>{const[r]=F();return r.some((r=>t===r.groupName&&W(r,e,n)))};function B(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function I(e){return!(isNaN(parseFloat(e))||isNaN(Number(e))||!isFinite(e))}let P=l(I);function K(e){if(e){if(I(e))return 0===e;if(B(e,"length"))return d(e,0);if("object"==typeof e)return d(Object.keys(e),0)}return!0}let $=l(K),G=e=>{const[{pending:t,lagging:n}]=N(),r=t.concat(n);return!K(r)&&(e?r.some((t=>t.fieldName===e)):$(r))},U="hasWarnings",z="hasErrors";function V(e,t){var n;return null!==(n=Object.getOwnPropertyDescriptor(e,"name"))&&void 0!==n&&n.configurable?Object.defineProperty(e,"name",{value:t}):e}function D(e,t){return V((function(){let t=Array.from(arguments),n=t.splice(e.length-1);return e.apply(null,t.concat([n]))}),t||e.name)}let M=h(20),H=e=>{const{stateRef:t}=u.use(),[n]=F(),r={stateRef:t};return M([n,e],u.bind(r,(()=>[[z,R,m],[U,R,g],["getErrors",T,m],["getWarnings",T,g],["hasErrorsByGroup",q,m],["hasWarningsByGroup",q,g],["getErrorsByGroup",j,m],["getWarningsByGroup",j,g]].concat([["isValid",L]],e?[]:[["done",D(J)]]).reduce(((e,[t,n,i])=>(e[t]=u.bind(r,n,i),e)),(()=>{function e(e,t){e.forEach((e=>{const{fieldName:n,groupName:r}=e;i.tests[n]=O(i.tests,e,t),r&&(i.groups[r]=i.groups[r]||{},i.groups[r][n]=O(i.groups[r],e,t))}))}const[t]=F(),[n]=v(),[r]=E(),i={errorCount:0,warnCount:0,testCount:0,groups:{},name:n.name,tests:{}};return e(t),e(r,!0),k(i)})()))))};function J(e){let[t,n]=e.reverse();var{stateRef:r}=u.use();e=H();let i=n&&(!e.tests[n]||0===e.tests[n].testCount);if(!a(t)||i)return e;let s=u.bind({stateRef:r},(()=>t(H(!0))));return!G()||n&&!G(n)?(s(),e):([,r]=w(),r((e=>(n?e.fieldCallbacks[n]=(e.fieldCallbacks[n]||[]).concat(s):e.doneCallbacks.push(s),e))),e)}function L(){let e=H();if(e.hasErrors())return!1;var[t]=F();if(0===t.length)return!1;[t]=C();let[{pending:n,lagging:r}]=N();if($(n.concat(r).filter((e=>!e.isWarning))))return!1;for(let n in e.tests)if(!t[n]&&0===e.tests[n].testCount)return!1;return!0}let Q=D((r=>{const[i,o]=r.reverse();a(i)||S("Suite initialization error. Expected `tests` to be a function.");const l=[],c=function(n){function r(e,n){return u.references.push(),i(e,t(n)),function(){return[u.references[e],function(n){return i(e,t(n,[u.references[e]]))}]}}function i(t,r){var i=u.references[t];u.references[t]=r,e(t=s[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},s=[];return{registerStateKey:function(e,t){var n=s.length;return s.push([e,t]),r(n,e)},reset:function(){u.references=[],s.forEach((function(e,t){return r(t,e[0])}))}}}((()=>{l.forEach((e=>e({suiteState:f,type:"suiteStateUpdate"})))})),f=function(e,{suiteId:t,name:n}){return{carryOverTests:e.registerStateKey((()=>[])),optionalFields:e.registerStateKey((()=>({}))),pending:e.registerStateKey((()=>({pending:[],lagging:[]}))),skippedTests:e.registerStateKey((()=>[])),suiteId:e.registerStateKey((()=>({id:t,name:n}))),testCallbacks:e.registerStateKey((()=>({fieldCallbacks:{},doneCallbacks:[]}))),testObjects:e.registerStateKey((()=>[]))}}(c,{suiteId:s(),name:o});return(r=u.bind({stateRef:f},(function(){const[e]=F(),[,t]=b(),[{pending:n},r]=N();return c.reset(),t((()=>e)),r({lagging:n,pending:[]}),i.apply(null,arguments),H()}))).get=u.bind({stateRef:f},H,!0),r.reset=c.reset,r.remove=u.bind({stateRef:f},(e=>{const[t]=F();n(t).forEach((t=>{t.fieldName===e&&t.cancel()}))})),r.subscribe=function(e){a(e)&&(l.push(e),e({type:"suiteSubscribeInit",suiteState:f}))},r}));function X(e){i(this,e)}function Y(e){return!!e===e}X.prototype.setFailFast=function(e){return this.failFast=!!e,this},X.unwrap=function(e){return X.is(e)?e.value:e},X.wrap=function(e){return X.is(e)?e:new X({value:e})},X.is=function(e){return e instanceof X};let Z=l(Y);function _(e){return void 0===e}let ee=l(_);function te(e){_(e)||(Y(e)?this.setFailed(!e):this.extend(e))}function ne(e,t){let n=te.is(e),r=te.is(t);if(n&&r){if(e.setFailed(e.failed||t.failed),K(e.children)&&K(t.children))return e;if(e.children&&t.children){for(let n in e.children)ne(e.children[n],t.children[n]);for(let n in t.children)B(e.children,n)||e.setChild(n,t.children[n]);return e}if(e.children){if(!t.children)return e}else e.children=t.children}else{if(n)return e;if(r)return t}return new te(!1)}te.is=function(e){return e instanceof te},te.prototype.asArray=function(){return this.isArray=!0,this},te.prototype.setAttribute=function(e,t){return this[e]=t,this},te.prototype.setFailed=function(e){return this.setAttribute(this.warn?U:z,e),this.setAttribute("failed",e)},te.prototype.setChild=function(e,t){if(c(t))return null;let n=this[U]||t[U]||t.warn||this.warn;return this.setAttribute(U,n&&t.failed||!1),this.setAttribute(z,this[z]||t[z]||!n&&t.failed||!1),this.setFailed(this.failed||t.failed),this.children=this.children||{},this.children[e]=t},te.prototype.getChild=function(e){return(this.children||{})[e]},te.prototype.extend=function(e){if(c(e))return this;e=te.is(e)?e:(new te).setAttribute("warn",!!this.warn).setFailed(!e);let t=this.failed||e.failed,n=ne(e,this).children;i(this,e),K(n)||(this.children=n),this.setFailed(t),this.setAttribute(U,!(!this[U]&&!e[U])),this.setAttribute(z,!(!this[z]&&!e[z]))},Object.defineProperty(te.prototype,"pass",{get(){return!this.failed}});function re(e,t){return!t.pass&&!t.warn&&(!!X.is(e)&&e.failFast)}function ie(e,t){let r=new te(!0);for(let i of n(e)){if(re(t,r))break;r.extend(ue(i,t))}return r}function ue(e,t){return e.run(t)}function se(e,t,n){let r=new te(!0);K(t)&&r.setFailed(!0);let i=[],u=0;for(let s of t){if(c(t=ue(s,e)))return null;let o=t.pass;if(o?u++:i.push(t),n)if("any"===n.mode){if(o){r.extend(t);break}}else{if(r.extend(t),"all"===n.mode&&!o)break;if("one"===n.mode&&(r.setFailed(1!==u),1<u))break}else if(r.extend(t),o)break}return r.pass&&0===u&&(r.setFailed(!0),i.forEach((e=>r.extend(e)))),r}var oe=D((function(e,t){return se(e,t,{mode:"all"})}));var ae=D((function(e,t){return se(e,t,{mode:"any"})}));function le(e){return!!Array.isArray(e)}let ce=l(le);function fe(e,t,n){let r=X.unwrap(e),i=new te(!0);for(let n in t){let u=t[n],s=r[n];if(re(s,i))break;i.setChild(n,ue(u,new X({value:s,obj:r,key:n}).setFailFast(e.failFast)))}if(!(n||{}).loose)for(let e in r)if(!B(t,e))return i.setFailed(!0);return i}var de={allOf:oe,anyOf:ae,isArrayOf:D((function(e,t){let n=X.unwrap(e),r=new te(!0).asArray();if(ce(n))return r.setFailed(!0);for(let i=0;i<n.length;i++)r.setChild(i,se(new X({value:n[i],obj:n,key:i}).setFailFast(e.failFast),t,{mode:"any"}));return r})),loose:(e,t)=>fe(e,t,{loose:!0}),oneOf:D((function(e,t){return se(e,t,{mode:"one"})})),optional:D((function(e,t){let{obj:n,key:r}=e;return!(B(n,r)&&!_(n[r]||c(n[r]))&&!K(t))||se(n[r],t,{mode:"all"})})),shape:fe};function pe(e,t){return a(e)?e.apply(null,t):e}var he={warn:function(e,t=!0){return t},message:function(e,t){return pe(t,[X.unwrap(e)])},when:function(e,t,n){return n(e=!pe(t,[X.unwrap(e)].concat(X.is(e)?[e.key,e.obj]:[])))}};function ge(e){return String(e)===e}function me(e,t){return ge(e)&&ge(t)&&e.endsWith(t)}let ye=l(me);function be(e,t){return e===t}let Ne=l(be);function ve(e,t){return I(e)&&I(t)&&Number(e)>Number(t)}function we(e,t){return I(e)&&I(t)&&Number(e)>=Number(t)}function Fe(e,t){return!!(Array.isArray(t)&&/^[s|n|b]/.test(typeof e)||ge(t)&&ge(e))&&-1!==t.indexOf(e)}let Ee=l(Fe);function Ce(e,t){return I(e)&&I(t)&&Number(e)<=Number(t)}function ke(e,t,n){return we(e,t)&&Ce(e,n)}let Oe=l(ke);function xe(e){return"string"==typeof e&&""===e.trim()}let Ae=l(xe),Te=e=>!!I(e)&&0==e%2;function Se(e){return Number.isNaN(e)}let je=l(Se);function We(e){return!!I(e)&&0>Number(e)}let Re=l(We);function qe(e){return"number"==typeof e}let Be=l(qe),Ie=e=>!!I(e)&&0!=e%2,Pe=l(ge);function Ke(e){return!!e}let $e=l(Ke);function Ge(e,t){return I(e)&&I(t)&&Number(e)<Number(t)}function Ue(e,t){return e.length>Number(t)}function ze(e,t){return e.length>=Number(t)}function Ve(e,t){return t instanceof RegExp?t.test(e):!!ge(t)&&new RegExp(t).test(e)}let De=l(Ve);function Me(e,t){return I(e)&&I(t)&&Number(e)===Number(t)}let He=l(Me);function Je(e,t){return e.length<Number(t)}function Le(e,t){return e.length<=Number(t)}function Qe(e,t){return ge(e)&&ge(t)&&e.startsWith(t)}let Xe=l(Qe);var Ye=i({doesNotEndWith:ye,doesNotStartWith:Xe,endsWith:me,equals:be,greaterThan:ve,greaterThanOrEquals:we,gt:ve,gte:we,inside:Fe,isArray:le,isBetween:ke,isBoolean:Y,isBlank:xe,isEmpty:K,isEven:Te,isFalsy:$e,isNaN:Se,isNegative:We,isNotArray:ce,isNotBetween:Oe,isNotBlank:Ae,isNotBoolean:Z,isNotEmpty:$,isNotNaN:je,isNotNull:f,isNotNumber:Be,isNotNumeric:P,isNotString:Pe,isNotUndefined:ee,isNull:c,isNumber:qe,isNumeric:I,isOdd:Ie,isPositive:Re,isString:ge,isTruthy:Ke,isUndefined:_,lengthEquals:d,lengthNotEquals:p,lessThan:Ge,lessThanOrEquals:Ce,longerThan:Ue,longerThanOrEquals:ze,lt:Ge,lte:Ce,matches:Ve,notEquals:Ne,notInside:Ee,notMatches:De,numberEquals:Me,numberNotEquals:He,shorterThan:Je,shorterThanOrEquals:Le,startsWith:Qe},de,he);let Ze=Function("return this")(),_e=()=>a(Ze.Proxy);function et(e,t){if(_e())return new Proxy(e,{get:(e,n)=>B(e,n)?e[n]:(e=>B(Ye,e)&&a(Ye[e]))(n)?t(n):e[n]});for(let n in Ye)a(e[n])||Object.defineProperties(e,{[n]:{get:()=>t(n)}});return e}function tt(e){return B(de,e.name)}function nt(e){let t=[],n=[],r=e=>D((i=>{const u=Ye[e];he[u.name]===u?n.push(((e,t,n)=>{t.setAttribute(u.name,u(e,i[0],n))})):t.push(V((e=>u.apply(null,[tt(u)?X.wrap(e):X.unwrap(e)].concat(i))),e));const s=et({},r);return s.run=e=>{const r=new te(!0);let i=!1;if(n.forEach((t=>{t(e,r,(e=>i=e))})),i)return null;for(const n of t)try{if(r.extend(n(e)),!r.pass)break}catch(e){r.setFailed(!0);break}return r},s.test=e=>s.run(X.wrap(e).setFailFast(!0)).pass,s}),e);return r(e)}function rt(e,{rule:t,value:n}){return n=function(e){return{message:Error(`invalid ${typeof e} value`)}}(n),function(e,t){Y(e)||e&&Y(e.pass)||S(t.name+"wrong return value")}(e,t),Y(e)?(n.pass=e,n):(n.pass=e.pass,e.message&&(n.message=pe(e.message)),n)}function it(e,t,n=[]){let r=tt(e),i=r?X.wrap(t).setFailFast(!0):X.unwrap(t);if(n=e.apply(null,[i].concat(n)),r||(n=rt(n,{rule:e,value:t})),!n.pass)throw n.message}let ut=e=>{const t=et({},(n=>D((r=>(it(Ye[n],e,r),t)))));return t},st=et(ut,nt);!function(e,t){e.extend=n=>(i(Ye,n),_e()||et(t,nt),e)}(st,ut),function(e){e.template=D((e=>{let t=t=>{it(ie.bind(null,e),t);const n=et({},(e=>D((r=>(it(Ye[e],t,r),n)))));return n};return t.run=t=>ie(e,t),t.test=t=>ie(e,X.wrap(t).setFailFast(!0)).pass,t}))}(st);function ot(e){return dt(ct,"tests",e)}function at(e){return dt(ft,"tests",e)}function lt(e){let{fieldName:t,groupName:n}=e;({exclusion:e}=u.use());let r=e.tests;var i=r[t];if(!1===i)return!0;if(i=!0===i,n){if(function(e){var{exclusion:t}=u.use();if(B(t=t.groups,e))return!1===t[e];for(let e in t)if(!0===t[e])return!0;return!1}(n))return!0;if(!0===e.groups[n])return!i&&(!!pt(r)||!1===r[t])}return!i&&pt(r)}ot.group=e=>dt(ct,"groups",e),at.group=e=>dt(ft,"groups",e);let ct="only",ft="skip",dt=(e,t,r)=>{const i=u.use();r&&(i?n(r).forEach((n=>{if(!ge(n))return null;i.exclusion[t][n]=e===ct})):S(`${e} hook called outside of a running suite.`))},pt=e=>{for(const t in e)if(!0===e[t])return!0;return!1};let ht=()=>S("group initialization error. Incompatible argument passed to group.");function gt(e,t){return e.fieldName===t.fieldName&&e.groupName===t.groupName}let mt=(e,t)=>(-1!==(t=e.indexOf(t))&&e.splice(t,1),e),yt=e=>{const[t,r]=N(),i=n(t.lagging).reduce(((t,n)=>(gt(e,n)&&n.id!==e.id?n.cancel():t.push(n),t)),[]);r((t=>({lagging:i,pending:t.pending.concat(e)})))},bt=e=>{const[,t]=N();t((t=>({pending:mt(t.pending,e),lagging:mt(t.lagging,e)})))};function Nt({fieldName:e,statement:t,testFn:r,group:i}){let u={cancel:function(){u.canceled=!0,bt(this),(e=>{let[,t]=F();t((t=>n(mt(t,e))))})(this)},fail:function(){u.failed=!0},failed:!1,fieldName:e,id:s(),isWarning:!1,statement:t,testFn:r,valueOf:function(){return!0!==u.failed},warn:function(){u.isWarning=!0}};return i&&(u.groupName=i),u}var vt=e=>{let[,t]=F();t((t=>t.concat(e)))};function wt(e){return e&&a(e.then)}function Ft(e){return e.forEach((e=>e()))}let Et=e=>{const{asyncTest:t,statement:n}=e;var{stateRef:r}=u.use();const i=u.bind({stateRef:r},(()=>{bt(e),e.canceled||Ct(e.fieldName)}));r=u.bind({stateRef:r},(t=>{e.statement=ge(t)?t:n,e.fail(),[,t]=F(),t((e=>e.slice())),i()}));try{t.then(i,r)}catch(e){r()}},Ct=e=>{const[{fieldCallbacks:t,doneCallbacks:n}]=w();e&&!G(e)&&Array.isArray(t[e])&&Ft(t[e]),G()||Ft(n)};function kt(e){vt(e);let t=function(e){return u.run({currentTest:e},(()=>{let t;try{t=e.testFn()}catch(n){_(e.statement)&&ge(n)&&(e.statement=n),t=!1}return!1===t&&e.fail(),t}))}(e);try{wt(t)&&(e.asyncTest=t,yt(e),Et(e))}catch(e){}}let Ot=D((function(e,t){const[n,r]=t.reverse();[,t]=E();const{groupName:i}=u.use(),s=Nt({fieldName:e,group:i,statement:r,testFn:n});return lt(s)?(t((e=>e.concat(s))),function(e){let[t,n]=b(),[,r]=F(),[i,u]=function(e,t){return e.reduce(((n,r,i)=>(n[t(r,i,e)?0:1].push(r),n)),[[],[]])}(t,(t=>gt(t,e)));n((()=>u)),r((e=>e.concat(i)))}(s),s):a(n)?(kt(s),s):s}));!function(e){e.each=function(t){return Array.isArray(t)||S("test.each: Expected table to be an array."),D(((r,i)=>{let[u,s]=i.reverse();return t.map((t=>(t=n(t),e(pe(r,t),pe(s,t),(()=>u.apply(null,t))))))}))}}(Ot),function(e){let t=h(100);e.memo=D((function(n,r){var[i]=v();let[u,s,o]=r.reverse();return r=[i.id,n].concat(u),c(i=t.get(r))?t(r,e.bind(null,n,o,s)):([,n]=i,lt(n)||(vt(n),n&&wt(n.asyncTest)&&(yt(n),Et(n))),n)}))}(Ot);var xt={VERSION:"3.2.8",create:Q,enforce:st,group:(e,t)=>{ge(e)||ht(),a(t)||ht(),u.bind({groupName:e},t)()},only:ot,optional:function(e){let[,t]=C();t((t=>(n(e).forEach((e=>{t[e]=!0})),t)))},skip:at,skipWhen:function(e,t){$e(pe(e))&&a(t)&&t()},test:Ot,warn:()=>{const e=u.use();e?e.currentTest?e.currentTest.warn():S("warn called outside of a test."):S("warn hook called outside of a running suite.")}};module.exports=xt;
package/vest.d.ts CHANGED
@@ -179,11 +179,16 @@ interface ICreateResult {
179
179
  subscribe: (payload: ISubscribePayload) => void;
180
180
  }
181
181
 
182
+ interface ISkipWhen {
183
+ (conditional: boolean | (() => boolean), callback: () => void): void;
184
+ }
185
+
182
186
  declare namespace vest {
183
187
  const enforce: TEnforce;
184
188
  const test: ITest;
185
189
  const only: IOnly;
186
190
  const skip: ISkip;
191
+ const skipWhen: ISkipWhen;
187
192
 
188
193
  function optional(optionalFields: string | string[]): boolean;
189
194
 
@@ -2150,6 +2150,17 @@
2150
2150
  return false;
2151
2151
  };
2152
2152
 
2153
+ // an if statement. The reason for it is to support version 4 api in version 3
2154
+ // so that someone reading the latest docs can still run the code.
2155
+
2156
+ function skipWhen(conditional, callback) {
2157
+ if (isFalsy(optionalFunctionValue(conditional))) {
2158
+ if (isFunction(callback)) {
2159
+ callback();
2160
+ }
2161
+ }
2162
+ }
2163
+
2153
2164
  /**
2154
2165
  * @type {String} Error message to display when `warn` gets called outside of a test.
2155
2166
  */
@@ -2681,7 +2692,7 @@
2681
2692
  bindTestEach(test);
2682
2693
  bindTestMemo(test);
2683
2694
 
2684
- var VERSION = "3.2.6";
2695
+ var VERSION = "3.2.8";
2685
2696
  var vest = {
2686
2697
  VERSION: VERSION,
2687
2698
  create: createSuite,
@@ -2690,6 +2701,7 @@
2690
2701
  only: only,
2691
2702
  optional: optional,
2692
2703
  skip: skip,
2704
+ skipWhen: skipWhen,
2693
2705
  test: test,
2694
2706
  warn: warn
2695
2707
  };
@@ -2150,6 +2150,17 @@
2150
2150
  return false;
2151
2151
  };
2152
2152
 
2153
+ // an if statement. The reason for it is to support version 4 api in version 3
2154
+ // so that someone reading the latest docs can still run the code.
2155
+
2156
+ function skipWhen(conditional, callback) {
2157
+ if (isFalsy(optionalFunctionValue(conditional))) {
2158
+ if (isFunction(callback)) {
2159
+ callback();
2160
+ }
2161
+ }
2162
+ }
2163
+
2153
2164
  /**
2154
2165
  * @type {String} Error message to display when `warn` gets called outside of a test.
2155
2166
  */
@@ -2678,7 +2689,7 @@
2678
2689
  bindTestEach(test);
2679
2690
  bindTestMemo(test);
2680
2691
 
2681
- var VERSION = "3.2.6";
2692
+ var VERSION = "3.2.8";
2682
2693
  var vest = {
2683
2694
  VERSION: VERSION,
2684
2695
  create: createSuite,
@@ -2687,6 +2698,7 @@
2687
2698
  only: only,
2688
2699
  optional: optional,
2689
2700
  skip: skip,
2701
+ skipWhen: skipWhen,
2690
2702
  test: test,
2691
2703
  warn: warn
2692
2704
  };
@@ -1 +1 @@
1
- "use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).vest=t()}(this,(function(){function n(n){return"function"==typeof n}function t(t,e){return n(t)?t.apply(null,e):t}function e(){return(e=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e,r=arguments[t];for(e in r)Object.prototype.hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n}).apply(this,arguments)}function r(n){return"function"==typeof n}function i(n){return function(){return!n.apply(this,arguments)}}function u(n){return null===n}function a(n,t){return n.length===Number(t)}function o(){return cn().testObjects()}function s(n,t){return dn(n,{fieldName:t})}function c(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function f(n){return!(isNaN(parseFloat(n))||isNaN(Number(n))||!isFinite(n))}function l(n){if(n){if(f(n))return 0===n;if(c(n,"length"))return a(n,0);if("object"==typeof n)return a(Object.keys(n),0)}return!0}function d(n,t){var e;return null!==(e=Object.getOwnPropertyDescriptor(n,"name"))&&void 0!==e&&e.configurable?Object.defineProperty(n,"name",{value:t}):n}function p(n,t){return d((function(){var t=Array.from(arguments),e=t.splice(n.length-1);return n.apply(null,t.concat([e]))}),t||n.name)}function g(n){var t=(n=n.reverse())[0],e=n[1];n=rn.use().stateRef;var i=En(),u=e&&(!i.tests[e]||0===i.tests[e].testCount);if(!r(t)||u)return i;var a=rn.bind({stateRef:n},(function(){return t(En(!0))}));return!Nn()||e&&!Nn(e)?(a(),i):((0,cn().testCallbacks()[1])((function(n){return e?n.fieldCallbacks[e]=(n.fieldCallbacks[e]||[]).concat(a):n.doneCallbacks.push(a),n})),i)}function h(){var n=En();if(n.hasErrors()||0===o()[0].length)return!1;var t=cn().optionalFields()[0],e=cn().pending()[0];if(bn(e.pending.concat(e.lagging).filter((function(n){return!n.isWarning}))))return!1;for(var r in n.tests)if(!t[r]&&0===n.tests[r].testCount)return!1;return!0}function v(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=Array(t);e<t;e++)r[e]=n[e];return r}function m(n,t){var e;if("undefined"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(e=function(n,t){if(n){if("string"==typeof n)return v(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);if("Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e)return Array.from(n);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return v(n,t)}}(n))||t&&n&&"number"==typeof n.length){e&&(n=e);var r=0;return function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(e=n[Symbol.iterator]()).next.bind(e)}function y(n){en(this,n)}function b(n){return!!n===n}function N(n){return void 0===n}function w(n){N(n)||(b(n)?this.setFailed(!n):this.extend(n))}function E(n,t){var e=w.is(n),r=w.is(t);if(e&&r){if(n.setFailed(n.failed||t.failed),l(n.children)&&l(t.children))return n;if(n.children&&t.children){for(var i in n.children)E(n.children[i],t.children[i]);for(var u in t.children)c(n.children,u)||n.setChild(u,t.children[u]);return n}if(n.children){if(!t.children)return n}else n.children=t.children}else{if(e)return n;if(r)return t}return new w(!1)}function F(n,t){return!t.pass&&!t.warn&&(!!y.is(n)&&n.failFast)}function C(n,t){var e,r=new w(!0);for(n=m([].concat(n));!(e=n()).done&&(e=e.value,!F(t,r));)r.extend(O(e,t));return r}function O(n,t){return n.run(t)}function k(n,t,e){var r=new w(!0);l(t)&&r.setFailed(!0);var i,u=[],a=0;for(t=m(t);!(i=t()).done;){if(null===(i=O(i.value,n)))return null;var o=i.pass;if(o?a++:u.push(i),e)if("any"===e.mode){if(o){r.extend(i);break}}else{if(r.extend(i),"all"===e.mode&&!o)break;if("one"===e.mode&&(r.setFailed(1!==a),1<a))break}else if(r.extend(i),o)break}return r.pass&&0===a&&(r.setFailed(!0),u.forEach((function(n){return r.extend(n)}))),r}function A(n){return!!Array.isArray(n)}function x(n,t,e){var r,i=y.unwrap(n),u=new w(!0);for(r in t){var a=t[r],o=i[r];if(F(o,u))break;u.setChild(r,O(a,new y({value:o,obj:i,key:r}).setFailFast(n.failFast)))}if(!(e||{}).loose)for(var s in i)if(!c(t,s))return u.setFailed(!0);return u}function W(n,t){return r(n)?n.apply(null,t):n}function S(n){return String(n)===n}function T(n,t){return S(n)&&S(t)&&n.endsWith(t)}function j(n,t){return n===t}function R(n,t){return f(n)&&f(t)&&Number(n)>Number(t)}function I(n,t){return f(n)&&f(t)&&Number(n)>=Number(t)}function q(n,t){return!!(Array.isArray(t)&&/^[s|n|b]/.test(typeof n)||S(t)&&S(n))&&-1!==t.indexOf(n)}function B(n,t){return f(n)&&f(t)&&Number(n)<=Number(t)}function P(n,t,e){return I(n,t)&&B(n,e)}function K(n){return"string"==typeof n&&""===n.trim()}function G(n){return Number.isNaN(n)}function U(n){return!!f(n)&&0>Number(n)}function z(n){return"number"==typeof n}function M(n){return!!n}function V(n,t){return f(n)&&f(t)&&Number(n)<Number(t)}function D(n,t){return t instanceof RegExp?t.test(n):!!S(t)&&new RegExp(t).test(n)}function $(n,t){return f(n)&&f(t)&&Number(n)===Number(t)}function H(n,t){return S(n)&&S(t)&&n.startsWith(t)}function J(n,t){if(r($n.Proxy))return new Proxy(n,{get:function(n,e){return c(n,e)?n[e]:c(Dn,e)&&r(Dn[e])?t(e):n[e]}});var e,i=function(e){var i;r(n[e])||Object.defineProperties(n,((i={})[e]={get:function(){return t(e)}},i))};for(e in Dn)i(e);return n}function L(n){var t=[],e=[];return function n(r){return p((function(i){var u=Dn[r];Sn[u.name]===u?e.push((function(n,t,e){t.setAttribute(u.name,u(n,i[0],e))})):t.push(d((function(n){return u.apply(null,[c(Wn,u.name)?y.wrap(n):y.unwrap(n)].concat(i))}),r));var a=J({},n);return a.run=function(n){var r=new w(!0),i=!1;if(e.forEach((function(t){t(n,r,(function(n){return i=n}))})),i)return null;for(var u,a=m(t);!(u=a()).done;){u=u.value;try{if(r.extend(u(n)),!r.pass)break}catch(n){r.setFailed(!0);break}}return r},a.test=function(n){return a.run(y.wrap(n).setFailFast(!0)).pass},a}),r)}(n)}function Q(n,t,e){void 0===e&&(e=[]);var r=c(Wn,n.name),i=r?y.wrap(t).setFailFast(!0):y.unwrap(t);if(e=n.apply(null,[i].concat(e)),r||(r=e,t={message:Error("invalid "+typeof t+" value")},b(r)||r&&b(r.pass)||pn(n.name+"wrong return value"),b(r)?(t.pass=r,e=t):(t.pass=r.pass,r.message&&(t.message=W(r.message)),e=t)),!e.pass)throw e.message}function X(n){return Xn(Ln,"tests",n)}function Y(n){return Xn(Qn,"tests",n)}function Z(n){var t=n.fieldName;n=n.groupName;var e=rn.use().exclusion,r=e.tests,i=r[t];if(!1===i)return!0;if(i=!0===i,n){n:{var u=rn.use().exclusion.groups;if(c(u,n))var a=!1===u[n];else{for(a in u)if(!0===u[a]){a=!0;break n}a=!1}}if(a)return!0;if(!0===e.groups[n])return!i&&(!!Yn(r)||!1===r[t])}return!i&&Yn(r)}function _(n){return n.forEach((function(n){return n()}))}function nn(n){rt(n);var t=function(n){return rn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){N(n.statement)&&S(e)&&(n.statement=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{t&&r(t.then)&&(n.asyncTest=t,nt(n),it(n))}catch(n){}}var tn,en=Object.assign,rn=function(n){function t(t,u){var a,o,s=r();return t=e({},s||{},null!==(a=null==n?void 0:n(t,s))&&void 0!==a?a:t),a=i.ctx=Object.freeze(t),i.ancestry.unshift(a),u=u(a),i.ancestry.shift(),i.ctx=null!==(o=i.ancestry[0])&&void 0!==o?o:null,u}function r(){return i.ctx}var i={ancestry:[]};return{run:t,bind:function(n,e){for(var r=arguments.length,i=Array(2<r?r-2:0),u=2;u<r;u++)i[u-2]=arguments[u];return function(){for(var r=arguments.length,u=Array(r),a=0;a<r;a++)u[a]=arguments[a];return t(n,(function(){return e.apply(void 0,i.concat(u))}))}},use:r}}((function(n,t){var e;return t?null:en({},{exclusion:(e={},e.tests={},e.groups={},e)},n)})),un=(tn=0,function(){return""+tn++}),an=i(u),on=i(a),sn=function(n){void 0===n&&(n=10);var t=[],e=function e(r,i){var u=e.get(r);return an(u)?u[1]:(i=i(),t.unshift([r.concat(),i]),t.length>n&&(t.length=n),i)};return e.get=function(n){return t[t.findIndex((function(t){var e=t[0];return a(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))]||null},e},cn=function(){return rn.use().stateRef},fn=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},ln=function(n,t,e){var r,i=t.fieldName,u=t.isWarning,a=t.failed,o=t.statement;n[i]=n[i]||((r={}).errorCount=0,r.warnCount=0,r.testCount=0,r);var s=n[i];return e||(n[i].testCount++,n=function(n,t){s[n]++,o&&(s[t]=(s[t]||[]).concat(o))},a&&(u?n("warnCount","warnings"):n("errorCount","errors"))),s},dn=function(n,t){var e=o()[0],r=(t=t||{}).group,i=t.fieldName;return e=e.reduce((function(t,e){return r&&e.groupName!==r||i&&e.fieldName!==i||!e.failed||"warnings"!==n&&e.isWarning||"warnings"===n&&!e.isWarning||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.statement)),t}),{}),i?e[i]||[]:e},pn=function(n,t){throw void 0===t&&(t=Error),new t("[vest]: "+n)},gn=function(n,t,e){return t||pn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),dn(n,{group:t,fieldName:e})},hn=function(n,t,e){return!(!n.failed||e&&e!==n.fieldName||"warnings"!==t&&n.isWarning||"warnings"===t&&!n.isWarning)},vn=function(n,t){return o()[0].some((function(e){return hn(e,n,t)}))},mn=function(n,t,e){return o()[0].some((function(r){return t===r.groupName&&hn(r,n,e)}))},yn=i(f),bn=i(l),Nn=function(n){var t=cn().pending()[0];return!l(t=t.pending.concat(t.lagging))&&(n?t.some((function(t){return t.fieldName===n})):bn(t))},wn=sn(20),En=function(n){var t=rn.use().stateRef,e=o()[0],r={stateRef:t};return wn([e,n],rn.bind(r,(function(){return[["hasErrors",vn,"errors"],["hasWarnings",vn,"warnings"],["getErrors",s,"errors"],["getWarnings",s,"warnings"],["hasErrorsByGroup",mn,"errors"],["hasWarningsByGroup",mn,"warnings"],["getErrorsByGroup",gn,"errors"],["getWarningsByGroup",gn,"warnings"]].concat([["isValid",h]],n?[]:[["done",p(g)]]).reduce((function(n,t){return n[t[0]]=rn.bind(r,t[1],t[2]),n}),function(){function n(n,t){n.forEach((function(n){var e=n.fieldName,r=n.groupName;u.tests[e]=ln(u.tests,n,t),r&&(u.groups[r]=u.groups[r]||{},u.groups[r][e]=ln(u.groups[r],n,t))}))}var t,e=o()[0],r=cn().suiteId()[0],i=cn().skippedTests()[0],u=((t={}).errorCount=0,t.warnCount=0,t.testCount=0,t.groups={},t.name=r.name,t.tests={},t);return n(e),n(i,!0),fn(u)}())})))},Fn=p((function(e){var i=(e=e.reverse())[0];e=e[1],r(i)||pn("Suite initialization error. Expected `tests` to be a function.");var u=[],a=function(e){function r(n,e){return u.references.push(),i(n,t(e)),function(){return[u.references[n],function(e){return i(n,t(e,[u.references[n]]))}]}}function i(t,r){var i=u.references[t];u.references[t]=r,n(t=a[t][1])&&t(r,i),n(e)&&e()}var u={references:[]},a=[];return{registerStateKey:function(n,t){var e=a.length;return a.push([n,t]),r(e,n)},reset:function(){u.references=[],a.forEach((function(n,t){return r(t,n[0])}))}}}((function(){u.forEach((function(n){return n({suiteState:s,type:"suiteStateUpdate"})}))})),s=function(n,t){var e=t.suiteId,r=t.name;return{carryOverTests:n.registerStateKey((function(){return[]})),optionalFields:n.registerStateKey((function(){return{}})),pending:n.registerStateKey((function(){return{pending:[],lagging:[]}})),skippedTests:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return{id:e,name:r}})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]}))}}(a,{suiteId:un(),name:e});return(e=rn.bind({stateRef:s},(function(){var n=o()[0],t=cn().carryOverTests()[1],e=cn().pending(),r=e[0].pending;return e=e[1],a.reset(),t((function(){return n})),e({lagging:r,pending:[]}),i.apply(null,arguments),En()}))).get=rn.bind({stateRef:s},En,!0),e.reset=a.reset,e.remove=rn.bind({stateRef:s},(function(n){var t=o()[0];[].concat(t).forEach((function(t){t.fieldName===n&&t.cancel()}))})),e.subscribe=function(n){r(n)&&(u.push(n),n({type:"suiteSubscribeInit",suiteState:s}))},e}));y.prototype.setFailFast=function(n){return this.failFast=!!n,this},y.unwrap=function(n){return y.is(n)?n.value:n},y.wrap=function(n){return y.is(n)?n:new y({value:n})},y.is=function(n){return n instanceof y};var Cn=i(b),On=i(N);w.is=function(n){return n instanceof w},w.prototype.asArray=function(){return this.isArray=!0,this},w.prototype.setAttribute=function(n,t){return this[n]=t,this},w.prototype.setFailed=function(n){return this.setAttribute(this.warn?"hasWarnings":"hasErrors",n),this.setAttribute("failed",n)},w.prototype.setChild=function(n,t){if(null===t)return null;var e=this.hasWarnings||t.hasWarnings||t.warn||this.warn;return this.setAttribute("hasWarnings",e&&t.failed||!1),this.setAttribute("hasErrors",this.hasErrors||t.hasErrors||!e&&t.failed||!1),this.setFailed(this.failed||t.failed),this.children=this.children||{},this.children[n]=t},w.prototype.getChild=function(n){return(this.children||{})[n]},w.prototype.extend=function(n){if(null===n)return this;n=w.is(n)?n:(new w).setAttribute("warn",!!this.warn).setFailed(!n);var t=this.failed||n.failed,e=E(n,this).children;en(this,n),l(e)||(this.children=e),this.setFailed(t),this.setAttribute("hasWarnings",!(!this.hasWarnings&&!n.hasWarnings)),this.setAttribute("hasErrors",!(!this.hasErrors&&!n.hasErrors))},Object.defineProperty(w.prototype,"pass",{get:function(){return!this.failed}});var kn=p((function(n,t){return k(n,t,{mode:"all"})})),An=p((function(n,t){return k(n,t,{mode:"any"})})),xn=i(A),Wn={allOf:kn,anyOf:An,isArrayOf:p((function(n,t){var e=y.unwrap(n),r=new w(!0).asArray();if(xn(e))return r.setFailed(!0);for(var i=0;i<e.length;i++)r.setChild(i,k(new y({value:e[i],obj:e,key:i}).setFailFast(n.failFast),t,{mode:"any"}));return r})),loose:function(n,t){return x(n,t,{loose:!0})},oneOf:p((function(n,t){return k(n,t,{mode:"one"})})),optional:p((function(n,t){var e=n.obj;return!(c(e,n=n.key)&&!N(e[n]||null===e[n])&&!l(t))||k(e[n],t,{mode:"all"})})),shape:x},Sn={warn:function(n,t){return void 0===t&&(t=!0),t},message:function(n,t){return W(t,[y.unwrap(n)])},when:function(n,t,e){return e(n=!W(t,[y.unwrap(n)].concat(y.is(n)?[n.key,n.obj]:[])))}},Tn=i(T),jn=i(j),Rn=i(q),In=i(P),qn=i(K),Bn=i(G),Pn=i(U),Kn=i(z),Gn=i(S),Un=i(M),zn=i(D),Mn=i($),Vn=i(H),Dn=en({doesNotEndWith:Tn,doesNotStartWith:Vn,endsWith:T,equals:j,greaterThan:R,greaterThanOrEquals:I,gt:R,gte:I,inside:q,isArray:A,isBetween:P,isBoolean:b,isBlank:K,isEmpty:l,isEven:function(n){return!!f(n)&&0==n%2},isFalsy:Un,isNaN:G,isNegative:U,isNotArray:xn,isNotBetween:In,isNotBlank:qn,isNotBoolean:Cn,isNotEmpty:bn,isNotNaN:Bn,isNotNull:an,isNotNumber:Kn,isNotNumeric:yn,isNotString:Gn,isNotUndefined:On,isNull:u,isNumber:z,isNumeric:f,isOdd:function(n){return!!f(n)&&0!=n%2},isPositive:Pn,isString:S,isTruthy:M,isUndefined:N,lengthEquals:a,lengthNotEquals:on,lessThan:V,lessThanOrEquals:B,longerThan:function(n,t){return n.length>Number(t)},longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:V,lte:B,matches:D,notEquals:jn,notInside:Rn,notMatches:zn,numberEquals:$,numberNotEquals:Mn,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:H},Wn,Sn),$n=Function("return this")(),Hn=function(n){var t=J({},(function(e){return p((function(r){return Q(Dn[e],n,r),t}))}));return t},Jn=J(Hn,L);!function(n,t){n.extend=function(e){return en(Dn,e),r($n.Proxy)||J(t,L),n}}(Jn,Hn),function(n){n.template=p((function(n){var t=function(t){Q(C.bind(null,n),t);var e=J({},(function(n){return p((function(r){return Q(Dn[n],t,r),e}))}));return e};return t.run=function(t){return C(n,t)},t.test=function(t){return C(n,y.wrap(t).setFailFast(!0)).pass},t}))}(Jn),X.group=function(n){return Xn(Ln,"groups",n)},Y.group=function(n){return Xn(Qn,"groups",n)};var Ln="only",Qn="skip",Xn=function(n,t,e){var r=rn.use();e&&(r?[].concat(e).forEach((function(e){if(!S(e))return null;r.exclusion[t][e]=n===Ln})):pn(n+" hook called outside of a running suite."))},Yn=function(n){for(var t in n)if(!0===n[t])return!0;return!1},Zn=function(){return pn("group initialization error. Incompatible argument passed to group.")},_n=function(n,t){return-1!==(t=n.indexOf(t))&&n.splice(t,1),n},nt=function(n){var t=cn().pending(),e=t[1],r=[].concat(t[0].lagging).reduce((function(t,e){return n.fieldName===e.fieldName&&n.groupName===e.groupName&&e.id!==n.id?e.cancel():t.push(e),t}),[]);e((function(t){return{lagging:r,pending:t.pending.concat(n)}}))},tt=function(n){(0,cn().pending()[1])((function(t){return{pending:_n(t.pending,n),lagging:_n(t.lagging,n)}}))},et=function(n){(0,o()[1])((function(t){return[].concat(_n(t,n))}))},rt=function(n){(0,o()[1])((function(t){return t.concat(n)}))},it=function(n){var t=n.asyncTest,e=n.statement,r=rn.use().stateRef,i=rn.bind({stateRef:r},(function(){if(tt(n),!n.canceled){var t=n.fieldName,e=cn().testCallbacks()[0],r=e.fieldCallbacks;e=e.doneCallbacks,t&&!Nn(t)&&Array.isArray(r[t])&&_(r[t]),Nn()||_(e)}}));r=rn.bind({stateRef:r},(function(t){n.statement=S(t)?t:e,n.fail(),(0,o()[1])((function(n){return n.slice()})),i()}));try{t.then(i,r)}catch(n){r()}},ut=p((function(n,t){var e=t.reverse();t=e[0],e=e[1];var i=cn().skippedTests()[1],u=function(n){var t=n.statement,e=n.testFn,r=n.group,i={cancel:function(){i.canceled=!0,tt(this),et(this)},fail:function(){i.failed=!0},failed:!1,fieldName:n.fieldName,id:un(),isWarning:!1,statement:t,testFn:e,valueOf:function(){return!0!==i.failed},warn:function(){i.isWarning=!0}};return r&&(i.groupName=r),i}({fieldName:n,group:rn.use().groupName,statement:e,testFn:t});return Z(u)?(i((function(n){return n.concat(u)})),function(n){var t=cn().carryOverTests(),e=t[0];t=t[1];var r=o()[1],i=(e=function(n,t){return n.reduce((function(e,r,i){return e[t(r,i,n)?0:1].push(r),e}),[[],[]])}(e,(function(t){return t.fieldName===n.fieldName&&t.groupName===n.groupName})))[0],u=e[1];t((function(){return u})),r((function(n){return n.concat(i)}))}(u),u):r(t)?(nn(u),u):u}));return function(n){n.each=function(t){return Array.isArray(t)||pn("test.each: Expected table to be an array."),p((function(e,r){var i=(r=r.reverse())[0],u=r[1];return t.map((function(t){return t=[].concat(t),n(W(e,t),W(u,t),(function(){return i.apply(null,t)}))}))}))}}(ut),function(n){var t=sn(100);n.memo=p((function(e,i){var u=cn().suiteId()[0],a=i.reverse();i=a[1];var o=a[2];return u=[u.id,e].concat(a[0]),null===(a=t.get(u))?t(u,n.bind(null,e,o,i)):(Z(e=a[1])||(rt(e),(i=e)&&(i=(i=e.asyncTest)&&r(i.then)),i&&(nt(e),it(e))),e)}))}(ut),{VERSION:"3.2.6",create:Fn,enforce:Jn,group:function(n,t){S(n)||Zn(),r(t)||Zn(),rn.bind({groupName:n},t)()},only:X,optional:function(n){(0,cn().optionalFields()[1])((function(t){return[].concat(n).forEach((function(n){t[n]=!0})),t}))},skip:Y,test:ut,warn:function(){var n=rn.use();n?n.currentTest?n.currentTest.warn():pn("warn called outside of a test."):pn("warn hook called outside of a running suite.")}}}));
1
+ "use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).vest=t()}(this,(function(){function n(n){return"function"==typeof n}function t(t,e){return n(t)?t.apply(null,e):t}function e(){return(e=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e,r=arguments[t];for(e in r)Object.prototype.hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n}).apply(this,arguments)}function r(n){return"function"==typeof n}function i(n){return function(){return!n.apply(this,arguments)}}function u(n){return null===n}function a(n,t){return n.length===Number(t)}function o(){return cn().testObjects()}function s(n,t){return dn(n,{fieldName:t})}function c(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function f(n){return!(isNaN(parseFloat(n))||isNaN(Number(n))||!isFinite(n))}function l(n){if(n){if(f(n))return 0===n;if(c(n,"length"))return a(n,0);if("object"==typeof n)return a(Object.keys(n),0)}return!0}function d(n,t){var e;return null!==(e=Object.getOwnPropertyDescriptor(n,"name"))&&void 0!==e&&e.configurable?Object.defineProperty(n,"name",{value:t}):n}function p(n,t){return d((function(){var t=Array.from(arguments),e=t.splice(n.length-1);return n.apply(null,t.concat([e]))}),t||n.name)}function g(n){var t=(n=n.reverse())[0],e=n[1];n=rn.use().stateRef;var i=En(),u=e&&(!i.tests[e]||0===i.tests[e].testCount);if(!r(t)||u)return i;var a=rn.bind({stateRef:n},(function(){return t(En(!0))}));return!Nn()||e&&!Nn(e)?(a(),i):((0,cn().testCallbacks()[1])((function(n){return e?n.fieldCallbacks[e]=(n.fieldCallbacks[e]||[]).concat(a):n.doneCallbacks.push(a),n})),i)}function h(){var n=En();if(n.hasErrors()||0===o()[0].length)return!1;var t=cn().optionalFields()[0],e=cn().pending()[0];if(bn(e.pending.concat(e.lagging).filter((function(n){return!n.isWarning}))))return!1;for(var r in n.tests)if(!t[r]&&0===n.tests[r].testCount)return!1;return!0}function v(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=Array(t);e<t;e++)r[e]=n[e];return r}function m(n,t){var e;if("undefined"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(e=function(n,t){if(n){if("string"==typeof n)return v(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);if("Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e)return Array.from(n);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return v(n,t)}}(n))||t&&n&&"number"==typeof n.length){e&&(n=e);var r=0;return function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(e=n[Symbol.iterator]()).next.bind(e)}function y(n){en(this,n)}function b(n){return!!n===n}function N(n){return void 0===n}function w(n){N(n)||(b(n)?this.setFailed(!n):this.extend(n))}function E(n,t){var e=w.is(n),r=w.is(t);if(e&&r){if(n.setFailed(n.failed||t.failed),l(n.children)&&l(t.children))return n;if(n.children&&t.children){for(var i in n.children)E(n.children[i],t.children[i]);for(var u in t.children)c(n.children,u)||n.setChild(u,t.children[u]);return n}if(n.children){if(!t.children)return n}else n.children=t.children}else{if(e)return n;if(r)return t}return new w(!1)}function F(n,t){return!t.pass&&!t.warn&&(!!y.is(n)&&n.failFast)}function C(n,t){var e,r=new w(!0);for(n=m([].concat(n));!(e=n()).done&&(e=e.value,!F(t,r));)r.extend(k(e,t));return r}function k(n,t){return n.run(t)}function O(n,t,e){var r=new w(!0);l(t)&&r.setFailed(!0);var i,u=[],a=0;for(t=m(t);!(i=t()).done;){if(null===(i=k(i.value,n)))return null;var o=i.pass;if(o?a++:u.push(i),e)if("any"===e.mode){if(o){r.extend(i);break}}else{if(r.extend(i),"all"===e.mode&&!o)break;if("one"===e.mode&&(r.setFailed(1!==a),1<a))break}else if(r.extend(i),o)break}return r.pass&&0===a&&(r.setFailed(!0),u.forEach((function(n){return r.extend(n)}))),r}function A(n){return!!Array.isArray(n)}function x(n,t,e){var r,i=y.unwrap(n),u=new w(!0);for(r in t){var a=t[r],o=i[r];if(F(o,u))break;u.setChild(r,k(a,new y({value:o,obj:i,key:r}).setFailFast(n.failFast)))}if(!(e||{}).loose)for(var s in i)if(!c(t,s))return u.setFailed(!0);return u}function W(n,t){return r(n)?n.apply(null,t):n}function S(n){return String(n)===n}function T(n,t){return S(n)&&S(t)&&n.endsWith(t)}function j(n,t){return n===t}function R(n,t){return f(n)&&f(t)&&Number(n)>Number(t)}function I(n,t){return f(n)&&f(t)&&Number(n)>=Number(t)}function q(n,t){return!!(Array.isArray(t)&&/^[s|n|b]/.test(typeof n)||S(t)&&S(n))&&-1!==t.indexOf(n)}function B(n,t){return f(n)&&f(t)&&Number(n)<=Number(t)}function P(n,t,e){return I(n,t)&&B(n,e)}function K(n){return"string"==typeof n&&""===n.trim()}function G(n){return Number.isNaN(n)}function U(n){return!!f(n)&&0>Number(n)}function z(n){return"number"==typeof n}function M(n){return!!n}function V(n,t){return f(n)&&f(t)&&Number(n)<Number(t)}function D(n,t){return t instanceof RegExp?t.test(n):!!S(t)&&new RegExp(t).test(n)}function $(n,t){return f(n)&&f(t)&&Number(n)===Number(t)}function H(n,t){return S(n)&&S(t)&&n.startsWith(t)}function J(n,t){if(r($n.Proxy))return new Proxy(n,{get:function(n,e){return c(n,e)?n[e]:c(Dn,e)&&r(Dn[e])?t(e):n[e]}});var e,i=function(e){var i;r(n[e])||Object.defineProperties(n,((i={})[e]={get:function(){return t(e)}},i))};for(e in Dn)i(e);return n}function L(n){var t=[],e=[];return function n(r){return p((function(i){var u=Dn[r];Sn[u.name]===u?e.push((function(n,t,e){t.setAttribute(u.name,u(n,i[0],e))})):t.push(d((function(n){return u.apply(null,[c(Wn,u.name)?y.wrap(n):y.unwrap(n)].concat(i))}),r));var a=J({},n);return a.run=function(n){var r=new w(!0),i=!1;if(e.forEach((function(t){t(n,r,(function(n){return i=n}))})),i)return null;for(var u,a=m(t);!(u=a()).done;){u=u.value;try{if(r.extend(u(n)),!r.pass)break}catch(n){r.setFailed(!0);break}}return r},a.test=function(n){return a.run(y.wrap(n).setFailFast(!0)).pass},a}),r)}(n)}function Q(n,t,e){void 0===e&&(e=[]);var r=c(Wn,n.name),i=r?y.wrap(t).setFailFast(!0):y.unwrap(t);if(e=n.apply(null,[i].concat(e)),r||(r=e,t={message:Error("invalid "+typeof t+" value")},b(r)||r&&b(r.pass)||pn(n.name+"wrong return value"),b(r)?(t.pass=r,e=t):(t.pass=r.pass,r.message&&(t.message=W(r.message)),e=t)),!e.pass)throw e.message}function X(n){return Xn(Ln,"tests",n)}function Y(n){return Xn(Qn,"tests",n)}function Z(n){var t=n.fieldName;n=n.groupName;var e=rn.use().exclusion,r=e.tests,i=r[t];if(!1===i)return!0;if(i=!0===i,n){n:{var u=rn.use().exclusion.groups;if(c(u,n))var a=!1===u[n];else{for(a in u)if(!0===u[a]){a=!0;break n}a=!1}}if(a)return!0;if(!0===e.groups[n])return!i&&(!!Yn(r)||!1===r[t])}return!i&&Yn(r)}function _(n){return n.forEach((function(n){return n()}))}function nn(n){rt(n);var t=function(n){return rn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){N(n.statement)&&S(e)&&(n.statement=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{t&&r(t.then)&&(n.asyncTest=t,nt(n),it(n))}catch(n){}}var tn,en=Object.assign,rn=function(n){function t(t,u){var a,o,s=r();return t=e({},s||{},null!==(a=null==n?void 0:n(t,s))&&void 0!==a?a:t),a=i.ctx=Object.freeze(t),i.ancestry.unshift(a),u=u(a),i.ancestry.shift(),i.ctx=null!==(o=i.ancestry[0])&&void 0!==o?o:null,u}function r(){return i.ctx}var i={ancestry:[]};return{run:t,bind:function(n,e){for(var r=arguments.length,i=Array(2<r?r-2:0),u=2;u<r;u++)i[u-2]=arguments[u];return function(){for(var r=arguments.length,u=Array(r),a=0;a<r;a++)u[a]=arguments[a];return t(n,(function(){return e.apply(void 0,i.concat(u))}))}},use:r}}((function(n,t){var e;return t?null:en({},{exclusion:(e={},e.tests={},e.groups={},e)},n)})),un=(tn=0,function(){return""+tn++}),an=i(u),on=i(a),sn=function(n){void 0===n&&(n=10);var t=[],e=function e(r,i){var u=e.get(r);return an(u)?u[1]:(i=i(),t.unshift([r.concat(),i]),t.length>n&&(t.length=n),i)};return e.get=function(n){return t[t.findIndex((function(t){var e=t[0];return a(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))]||null},e},cn=function(){return rn.use().stateRef},fn=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},ln=function(n,t,e){var r,i=t.fieldName,u=t.isWarning,a=t.failed,o=t.statement;n[i]=n[i]||((r={}).errorCount=0,r.warnCount=0,r.testCount=0,r);var s=n[i];return e||(n[i].testCount++,n=function(n,t){s[n]++,o&&(s[t]=(s[t]||[]).concat(o))},a&&(u?n("warnCount","warnings"):n("errorCount","errors"))),s},dn=function(n,t){var e=o()[0],r=(t=t||{}).group,i=t.fieldName;return e=e.reduce((function(t,e){return r&&e.groupName!==r||i&&e.fieldName!==i||!e.failed||"warnings"!==n&&e.isWarning||"warnings"===n&&!e.isWarning||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.statement)),t}),{}),i?e[i]||[]:e},pn=function(n,t){throw void 0===t&&(t=Error),new t("[vest]: "+n)},gn=function(n,t,e){return t||pn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),dn(n,{group:t,fieldName:e})},hn=function(n,t,e){return!(!n.failed||e&&e!==n.fieldName||"warnings"!==t&&n.isWarning||"warnings"===t&&!n.isWarning)},vn=function(n,t){return o()[0].some((function(e){return hn(e,n,t)}))},mn=function(n,t,e){return o()[0].some((function(r){return t===r.groupName&&hn(r,n,e)}))},yn=i(f),bn=i(l),Nn=function(n){var t=cn().pending()[0];return!l(t=t.pending.concat(t.lagging))&&(n?t.some((function(t){return t.fieldName===n})):bn(t))},wn=sn(20),En=function(n){var t=rn.use().stateRef,e=o()[0],r={stateRef:t};return wn([e,n],rn.bind(r,(function(){return[["hasErrors",vn,"errors"],["hasWarnings",vn,"warnings"],["getErrors",s,"errors"],["getWarnings",s,"warnings"],["hasErrorsByGroup",mn,"errors"],["hasWarningsByGroup",mn,"warnings"],["getErrorsByGroup",gn,"errors"],["getWarningsByGroup",gn,"warnings"]].concat([["isValid",h]],n?[]:[["done",p(g)]]).reduce((function(n,t){return n[t[0]]=rn.bind(r,t[1],t[2]),n}),function(){function n(n,t){n.forEach((function(n){var e=n.fieldName,r=n.groupName;u.tests[e]=ln(u.tests,n,t),r&&(u.groups[r]=u.groups[r]||{},u.groups[r][e]=ln(u.groups[r],n,t))}))}var t,e=o()[0],r=cn().suiteId()[0],i=cn().skippedTests()[0],u=((t={}).errorCount=0,t.warnCount=0,t.testCount=0,t.groups={},t.name=r.name,t.tests={},t);return n(e),n(i,!0),fn(u)}())})))},Fn=p((function(e){var i=(e=e.reverse())[0];e=e[1],r(i)||pn("Suite initialization error. Expected `tests` to be a function.");var u=[],a=function(e){function r(n,e){return u.references.push(),i(n,t(e)),function(){return[u.references[n],function(e){return i(n,t(e,[u.references[n]]))}]}}function i(t,r){var i=u.references[t];u.references[t]=r,n(t=a[t][1])&&t(r,i),n(e)&&e()}var u={references:[]},a=[];return{registerStateKey:function(n,t){var e=a.length;return a.push([n,t]),r(e,n)},reset:function(){u.references=[],a.forEach((function(n,t){return r(t,n[0])}))}}}((function(){u.forEach((function(n){return n({suiteState:s,type:"suiteStateUpdate"})}))})),s=function(n,t){var e=t.suiteId,r=t.name;return{carryOverTests:n.registerStateKey((function(){return[]})),optionalFields:n.registerStateKey((function(){return{}})),pending:n.registerStateKey((function(){return{pending:[],lagging:[]}})),skippedTests:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return{id:e,name:r}})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]}))}}(a,{suiteId:un(),name:e});return(e=rn.bind({stateRef:s},(function(){var n=o()[0],t=cn().carryOverTests()[1],e=cn().pending(),r=e[0].pending;return e=e[1],a.reset(),t((function(){return n})),e({lagging:r,pending:[]}),i.apply(null,arguments),En()}))).get=rn.bind({stateRef:s},En,!0),e.reset=a.reset,e.remove=rn.bind({stateRef:s},(function(n){var t=o()[0];[].concat(t).forEach((function(t){t.fieldName===n&&t.cancel()}))})),e.subscribe=function(n){r(n)&&(u.push(n),n({type:"suiteSubscribeInit",suiteState:s}))},e}));y.prototype.setFailFast=function(n){return this.failFast=!!n,this},y.unwrap=function(n){return y.is(n)?n.value:n},y.wrap=function(n){return y.is(n)?n:new y({value:n})},y.is=function(n){return n instanceof y};var Cn=i(b),kn=i(N);w.is=function(n){return n instanceof w},w.prototype.asArray=function(){return this.isArray=!0,this},w.prototype.setAttribute=function(n,t){return this[n]=t,this},w.prototype.setFailed=function(n){return this.setAttribute(this.warn?"hasWarnings":"hasErrors",n),this.setAttribute("failed",n)},w.prototype.setChild=function(n,t){if(null===t)return null;var e=this.hasWarnings||t.hasWarnings||t.warn||this.warn;return this.setAttribute("hasWarnings",e&&t.failed||!1),this.setAttribute("hasErrors",this.hasErrors||t.hasErrors||!e&&t.failed||!1),this.setFailed(this.failed||t.failed),this.children=this.children||{},this.children[n]=t},w.prototype.getChild=function(n){return(this.children||{})[n]},w.prototype.extend=function(n){if(null===n)return this;n=w.is(n)?n:(new w).setAttribute("warn",!!this.warn).setFailed(!n);var t=this.failed||n.failed,e=E(n,this).children;en(this,n),l(e)||(this.children=e),this.setFailed(t),this.setAttribute("hasWarnings",!(!this.hasWarnings&&!n.hasWarnings)),this.setAttribute("hasErrors",!(!this.hasErrors&&!n.hasErrors))},Object.defineProperty(w.prototype,"pass",{get:function(){return!this.failed}});var On=p((function(n,t){return O(n,t,{mode:"all"})})),An=p((function(n,t){return O(n,t,{mode:"any"})})),xn=i(A),Wn={allOf:On,anyOf:An,isArrayOf:p((function(n,t){var e=y.unwrap(n),r=new w(!0).asArray();if(xn(e))return r.setFailed(!0);for(var i=0;i<e.length;i++)r.setChild(i,O(new y({value:e[i],obj:e,key:i}).setFailFast(n.failFast),t,{mode:"any"}));return r})),loose:function(n,t){return x(n,t,{loose:!0})},oneOf:p((function(n,t){return O(n,t,{mode:"one"})})),optional:p((function(n,t){var e=n.obj;return!(c(e,n=n.key)&&!N(e[n]||null===e[n])&&!l(t))||O(e[n],t,{mode:"all"})})),shape:x},Sn={warn:function(n,t){return void 0===t&&(t=!0),t},message:function(n,t){return W(t,[y.unwrap(n)])},when:function(n,t,e){return e(n=!W(t,[y.unwrap(n)].concat(y.is(n)?[n.key,n.obj]:[])))}},Tn=i(T),jn=i(j),Rn=i(q),In=i(P),qn=i(K),Bn=i(G),Pn=i(U),Kn=i(z),Gn=i(S),Un=i(M),zn=i(D),Mn=i($),Vn=i(H),Dn=en({doesNotEndWith:Tn,doesNotStartWith:Vn,endsWith:T,equals:j,greaterThan:R,greaterThanOrEquals:I,gt:R,gte:I,inside:q,isArray:A,isBetween:P,isBoolean:b,isBlank:K,isEmpty:l,isEven:function(n){return!!f(n)&&0==n%2},isFalsy:Un,isNaN:G,isNegative:U,isNotArray:xn,isNotBetween:In,isNotBlank:qn,isNotBoolean:Cn,isNotEmpty:bn,isNotNaN:Bn,isNotNull:an,isNotNumber:Kn,isNotNumeric:yn,isNotString:Gn,isNotUndefined:kn,isNull:u,isNumber:z,isNumeric:f,isOdd:function(n){return!!f(n)&&0!=n%2},isPositive:Pn,isString:S,isTruthy:M,isUndefined:N,lengthEquals:a,lengthNotEquals:on,lessThan:V,lessThanOrEquals:B,longerThan:function(n,t){return n.length>Number(t)},longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:V,lte:B,matches:D,notEquals:jn,notInside:Rn,notMatches:zn,numberEquals:$,numberNotEquals:Mn,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:H},Wn,Sn),$n=Function("return this")(),Hn=function(n){var t=J({},(function(e){return p((function(r){return Q(Dn[e],n,r),t}))}));return t},Jn=J(Hn,L);!function(n,t){n.extend=function(e){return en(Dn,e),r($n.Proxy)||J(t,L),n}}(Jn,Hn),function(n){n.template=p((function(n){var t=function(t){Q(C.bind(null,n),t);var e=J({},(function(n){return p((function(r){return Q(Dn[n],t,r),e}))}));return e};return t.run=function(t){return C(n,t)},t.test=function(t){return C(n,y.wrap(t).setFailFast(!0)).pass},t}))}(Jn),X.group=function(n){return Xn(Ln,"groups",n)},Y.group=function(n){return Xn(Qn,"groups",n)};var Ln="only",Qn="skip",Xn=function(n,t,e){var r=rn.use();e&&(r?[].concat(e).forEach((function(e){if(!S(e))return null;r.exclusion[t][e]=n===Ln})):pn(n+" hook called outside of a running suite."))},Yn=function(n){for(var t in n)if(!0===n[t])return!0;return!1},Zn=function(){return pn("group initialization error. Incompatible argument passed to group.")},_n=function(n,t){return-1!==(t=n.indexOf(t))&&n.splice(t,1),n},nt=function(n){var t=cn().pending(),e=t[1],r=[].concat(t[0].lagging).reduce((function(t,e){return n.fieldName===e.fieldName&&n.groupName===e.groupName&&e.id!==n.id?e.cancel():t.push(e),t}),[]);e((function(t){return{lagging:r,pending:t.pending.concat(n)}}))},tt=function(n){(0,cn().pending()[1])((function(t){return{pending:_n(t.pending,n),lagging:_n(t.lagging,n)}}))},et=function(n){(0,o()[1])((function(t){return[].concat(_n(t,n))}))},rt=function(n){(0,o()[1])((function(t){return t.concat(n)}))},it=function(n){var t=n.asyncTest,e=n.statement,r=rn.use().stateRef,i=rn.bind({stateRef:r},(function(){if(tt(n),!n.canceled){var t=n.fieldName,e=cn().testCallbacks()[0],r=e.fieldCallbacks;e=e.doneCallbacks,t&&!Nn(t)&&Array.isArray(r[t])&&_(r[t]),Nn()||_(e)}}));r=rn.bind({stateRef:r},(function(t){n.statement=S(t)?t:e,n.fail(),(0,o()[1])((function(n){return n.slice()})),i()}));try{t.then(i,r)}catch(n){r()}},ut=p((function(n,t){var e=t.reverse();t=e[0],e=e[1];var i=cn().skippedTests()[1],u=function(n){var t=n.statement,e=n.testFn,r=n.group,i={cancel:function(){i.canceled=!0,tt(this),et(this)},fail:function(){i.failed=!0},failed:!1,fieldName:n.fieldName,id:un(),isWarning:!1,statement:t,testFn:e,valueOf:function(){return!0!==i.failed},warn:function(){i.isWarning=!0}};return r&&(i.groupName=r),i}({fieldName:n,group:rn.use().groupName,statement:e,testFn:t});return Z(u)?(i((function(n){return n.concat(u)})),function(n){var t=cn().carryOverTests(),e=t[0];t=t[1];var r=o()[1],i=(e=function(n,t){return n.reduce((function(e,r,i){return e[t(r,i,n)?0:1].push(r),e}),[[],[]])}(e,(function(t){return t.fieldName===n.fieldName&&t.groupName===n.groupName})))[0],u=e[1];t((function(){return u})),r((function(n){return n.concat(i)}))}(u),u):r(t)?(nn(u),u):u}));return function(n){n.each=function(t){return Array.isArray(t)||pn("test.each: Expected table to be an array."),p((function(e,r){var i=(r=r.reverse())[0],u=r[1];return t.map((function(t){return t=[].concat(t),n(W(e,t),W(u,t),(function(){return i.apply(null,t)}))}))}))}}(ut),function(n){var t=sn(100);n.memo=p((function(e,i){var u=cn().suiteId()[0],a=i.reverse();i=a[1];var o=a[2];return u=[u.id,e].concat(a[0]),null===(a=t.get(u))?t(u,n.bind(null,e,o,i)):(Z(e=a[1])||(rt(e),(i=e)&&(i=(i=e.asyncTest)&&r(i.then)),i&&(nt(e),it(e))),e)}))}(ut),{VERSION:"3.2.8",create:Fn,enforce:Jn,group:function(n,t){S(n)||Zn(),r(t)||Zn(),rn.bind({groupName:n},t)()},only:X,optional:function(n){(0,cn().optionalFields()[1])((function(t){return[].concat(n).forEach((function(n){t[n]=!0})),t}))},skip:Y,skipWhen:function(n,t){Un(W(n))&&r(t)&&t()},test:ut,warn:function(){var n=rn.use();n?n.currentTest?n.currentTest.warn():pn("warn called outside of a test."):pn("warn hook called outside of a running suite.")}}}));