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 +3 -3
- package/docs/README.md +3 -3
- package/docs/cross_field_validations.md +9 -9
- package/docs/exclusion.md +4 -4
- package/docs/migration.md +2 -2
- package/docs/utilities.md +5 -5
- package/esm/vest.es.development.js +14 -2
- package/esm/vest.es.production.js +14 -2
- package/esm/vest.es.production.min.js +1 -1
- package/package.json +1 -1
- package/vest.cjs.development.js +13 -1
- package/vest.cjs.production.js +13 -1
- package/vest.cjs.production.min.js +1 -1
- package/vest.d.ts +5 -0
- package/vest.umd.development.js +13 -1
- package/vest.umd.production.js +13 -1
- package/vest.umd.production.min.js +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
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
|
-
|
|
97
|
+
skipWhen(res.hasErrors('email'), () => {
|
|
98
98
|
/* ... */
|
|
99
|
-
}
|
|
99
|
+
});
|
|
100
100
|
|
|
101
|
-
|
|
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.
|
|
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.
|
|
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
package/vest.cjs.development.js
CHANGED
|
@@ -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.
|
|
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
|
};
|
package/vest.cjs.production.js
CHANGED
|
@@ -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.
|
|
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
|
|
package/vest.umd.development.js
CHANGED
|
@@ -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.
|
|
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
|
};
|
package/vest.umd.production.js
CHANGED
|
@@ -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.
|
|
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.")}}}));
|