vest 4.0.0-dev-31f012 → 4.0.0-next-cfb1a7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,75 +4,81 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## 4.0.0 - 2021-10-31
7
+ ## 4.0.0 - 2021-11-10
8
8
  ### Changed or removed
9
- - f5ba507 major(context): used named export in context (ealush)
10
- - eaed68f breaking(vest, enforce): prepare next major (ealush)
9
+ - 31f7185 major(context): used named export in context (ealush)
10
+ - f789154 breaking(vest, enforce): prepare next major (ealush)
11
+ - 72eecb5 breaking(vest, enforce): prepare next major (ealush)
11
12
 
12
13
  ### Added
13
- - e0f0f91 feat(vest): support custom optional logic (ealush)
14
- - d4fecee feat(vest): Add a parser export (ealush)
15
- - e72498d feat(vest): isValid with field name (ealush)
16
- - f60d952 feat(vest): handle execution order state refill with memoized tests (ealush)
17
- - a2b60c4 feat(vest): Make the state rely on execution order. Make skipWhen set skipped context. (undefined)
18
- - ae5eb02 added(n4s): partial rule modifier (undefined)
19
- - 990c68f feat(n4s): context propagation within enforce (undefined)
14
+ - ad71cbc feat(vest): support custom optional logic (ealush)
15
+ - e7fd0da feat(vest): Add a parser export (ealush)
16
+ - dd3fe6a feat(vest): isValid with field name (ealush)
17
+ - d0cb5e1 feat(vest): handle execution order state refill with memoized tests (ealush)
18
+ - 6c40b13 feat(vest): Make the state rely on execution order. Make skipWhen set skipped context. (undefined)
19
+ - 89858cd added(n4s): partial rule modifier (undefined)
20
+ - e809f35 feat(n4s): context propagation within enforce (undefined)
20
21
 
21
22
  ### Fixed and improved
22
- - 31f0123 patch(vest): move creation functions to event bus (ealush)
23
- - d23641c patch: Some cleanups (ealush)
24
- - 7acb76f fix(vest): prevent pending tests from being marked as skipped (ealush)
25
- - 8851ff5 patch(vest): Add isolate module for containing re-orders (ealush)
26
- - 0593c0f patch(vest): refresh tests after cancel (ealush)
27
- - e915b53 patch: add cursor util (ealush)
28
- - f54ae8b patch(vest): move cursor into context (ealush)
29
- - fc7627e patch(vest): automatically purge not-found test results (ealush)
30
- - d68d990 vx: correctly pass cli options to build script (ealush)
31
- - 7c47b9a patch(vest): Throw error when tests are called in the wrong order (ealush)
32
- - 01be84e vx: add types to exports (ealush)
33
- - 7201170 organize vest state hooks (ealush)
34
- - e39bfd8 patch(vest): infer omitted optional fields (ealush)
35
- - 93014e3 vx: add dev bundle to exports (ealush)
36
- - 91df42e fix(vest): prevent changing test status once it was finalized (ealush)
37
- - 797df3e patch(vest): add cache invalidation for canceled tests (ealush)
38
- - 14ba6d9 types(vest): add safeguard around shouldUseErrorAsMessage (ealush)
39
- - 477ca00 patch(vest): some cleanups (ealush)
40
- - 58d5ed3 patch(vest): remove duplicate code handling perv test registration (ealush)
41
- - 6a98443 vx: use context directly from published package (ealush)
42
- - a79e479 patch: run done callbacks via event (ealush)
43
- - 01d32b7 patch(vest): removed state subscription (ealush)
23
+ - cfb1a7a types(vest): allow unprovided suite name in tests (ealush)
24
+ - 80166b3 patch(vest): replace warns boolean flag with enum (ealush)
25
+ - 94cc21b patch(vest): Pass draft result to skipWhen conditional (ealush)
26
+ - c340eab patch(vest): add back optional suite name argument (ealush)
27
+ - a1f3bc6 patch(vest): make compose an external export (ealush)
28
+ - c78e0c9 patch(vest): move creation functions to event bus (ealush)
29
+ - 6c426e4 patch: Some cleanups (ealush)
30
+ - b76dd3d fix(vest): prevent pending tests from being marked as skipped (ealush)
31
+ - 52bb16d patch(vest): Add isolate module for containing re-orders (ealush)
32
+ - 013bd54 patch(vest): refresh tests after cancel (ealush)
33
+ - a48cb89 patch: add cursor util (ealush)
34
+ - 82a2386 patch(vest): move cursor into context (ealush)
35
+ - 0c529df patch(vest): automatically purge not-found test results (ealush)
36
+ - 14604e0 vx: correctly pass cli options to build script (ealush)
37
+ - d6c3638 patch(vest): Throw error when tests are called in the wrong order (ealush)
38
+ - 3cd07f6 vx: add types to exports (ealush)
39
+ - 083adf1 organize vest state hooks (ealush)
40
+ - ac62b45 patch(vest): infer omitted optional fields (ealush)
41
+ - bb44b7a vx: add dev bundle to exports (ealush)
42
+ - efae31d fix(vest): prevent changing test status once it was finalized (ealush)
43
+ - a2d8c89 patch(vest): add cache invalidation for canceled tests (ealush)
44
+ - 694b88e types(vest): add safeguard around shouldUseErrorAsMessage (ealush)
45
+ - bb23481 patch(vest): some cleanups (ealush)
46
+ - 33bbe52 patch(vest): remove duplicate code handling perv test registration (ealush)
47
+ - f379875 vx: use context directly from published package (ealush)
48
+ - d435f30 patch: run done callbacks via event (ealush)
49
+ - 4e575c2 patch(vest): removed state subscription (ealush)
44
50
  - package.json
45
51
  - packages/anyone/package.json
46
52
  - packages/anyone/package.json
47
53
  - packages/vast/types/vast.d.ts
48
- - b10b98b patch(vest): remove pending and lagging state (ealush)
49
- - dfd2cc3 patch(vest): convert boolean flags to a single status key (ealush)
50
- - 1c9da6c patch: simplify fieldname comparison (ealush)
51
- - 43c75a4 patch(vest): add useAllIncomplete hook (ealush)
52
- - 2dfdc97 patch(vest): invalid accounts for warning tests as well (ealush)
53
- - 4033cca patch(vest): isValid counts all required tests per field (ealush)
54
- - 02b28a6 chore: cleanups (ealush)
54
+ - ffac5fc patch(vest): remove pending and lagging state (ealush)
55
+ - e803851 patch(vest): convert boolean flags to a single status key (ealush)
56
+ - af9f79b patch: simplify fieldname comparison (ealush)
57
+ - 5a8157f patch(vest): add useAllIncomplete hook (ealush)
58
+ - 7f565ce patch(vest): invalid accounts for warning tests as well (ealush)
59
+ - 3e7cbd3 patch(vest): isValid counts all required tests per field (ealush)
60
+ - 0309a9f chore: cleanups (ealush)
55
61
  - .eslintrc.js
56
- - afa16e9 add(n4s): enforce.condition (ealush)
62
+ - 9d415e0 add(n4s): enforce.condition (ealush)
57
63
  - package.json
58
64
  - packages/anyone/package.json
59
- - d452e26 chore: cleanup residue (undefined)
60
- - 5982183 chore: remove duplicate types (undefined)
65
+ - 98ea7f3 chore: cleanup residue (undefined)
66
+ - ba3d423 chore: remove duplicate types (undefined)
61
67
  - packages/anyone/package.json
62
- - 52ac8e0 patch: add nodejs exports (undefined)
63
- - f9c4b3e patch: remove unused exports (undefined)
68
+ - 4941ab3 patch: add nodejs exports (undefined)
69
+ - 603db2c patch: remove unused exports (undefined)
64
70
  - packages/anyone/package.json
65
- - db0253b chore: reduce complexity, remove all lint errors (undefined)
71
+ - 1bb9fb9 chore: reduce complexity, remove all lint errors (undefined)
66
72
  - packages/anyone/.npmignore
67
73
  - .github/PULL_REQUEST_TEMPLATE.md
68
- - be9c776 chore: cleanup unused code (ealush)
69
- - c5eb2de lint: handling lint of all packages (ealush)
74
+ - 7ad4c81 chore: cleanup unused code (ealush)
75
+ - 2696ab3 lint: handling lint of all packages (ealush)
70
76
  - .gitignore
71
- - d388fdc patch(n4s): add ruleReturn default values (ealush)
72
- - be91b7e fix(n4s): make enforce compound runners fall back to correct response (ealush)
73
- - 7e8f25c fix(n4s): make enforce chaining work (ealush)
74
- - e60ce3b chore: some lint fixes (ealush)
75
- - fc8e2d8 add cli options support (ealush)
77
+ - 021c752 patch(n4s): add ruleReturn default values (ealush)
78
+ - a14b02d fix(n4s): make enforce compound runners fall back to correct response (ealush)
79
+ - e70b369 fix(n4s): make enforce chaining work (ealush)
80
+ - b251877 chore: some lint fixes (ealush)
81
+ - c8508e8 add cli options support (ealush)
76
82
 
77
83
  ## 3.2.7 - 2021-07-17
78
84
 
@@ -0,0 +1,222 @@
1
+ 'use strict';
2
+
3
+ function mapFirst(array, callback) {
4
+ var broke = false;
5
+ var breakoutValue = null;
6
+ for (var i = 0; i < array.length; i++) {
7
+ callback(array[i], breakout, i);
8
+ if (broke) {
9
+ return breakoutValue;
10
+ }
11
+ }
12
+ function breakout(value) {
13
+ broke = true;
14
+ breakoutValue = value;
15
+ }
16
+ }
17
+
18
+ function isFunction(value) {
19
+ return typeof value === 'function';
20
+ }
21
+
22
+ function optionalFunctionValue(value) {
23
+ var args = [];
24
+ for (var _i = 1; _i < arguments.length; _i++) {
25
+ args[_i - 1] = arguments[_i];
26
+ }
27
+ return isFunction(value) ? value.apply(void 0, args) : value;
28
+ }
29
+
30
+ function defaultTo(callback, defaultValue) {
31
+ var _a;
32
+ return (_a = optionalFunctionValue(callback)) !== null && _a !== void 0 ? _a : defaultValue;
33
+ }
34
+
35
+ /**
36
+ * Throws a timed out error.
37
+ */
38
+ function throwError(devMessage, productionMessage) {
39
+ throw new Error(devMessage );
40
+ }
41
+
42
+ var assign = Object.assign;
43
+
44
+ // eslint-disable-next-line max-lines-per-function
45
+ function createContext(init) {
46
+ var storage = { ancestry: [] };
47
+ return {
48
+ bind: bind,
49
+ run: run,
50
+ use: use,
51
+ useX: useX
52
+ };
53
+ function useX(errorMessage) {
54
+ var _a;
55
+ return ((_a = storage.ctx) !== null && _a !== void 0 ? _a : throwError(defaultTo(errorMessage, 'Context was used after it was closed')));
56
+ }
57
+ function run(ctxRef, fn) {
58
+ var _a;
59
+ var parentContext = use();
60
+ var out = assign({}, parentContext ? parentContext : {}, (_a = optionalFunctionValue(init, ctxRef, parentContext)) !== null && _a !== void 0 ? _a : ctxRef);
61
+ var ctx = set(Object.freeze(out));
62
+ storage.ancestry.unshift(ctx);
63
+ var res = fn(ctx);
64
+ clear();
65
+ return res;
66
+ }
67
+ function bind(ctxRef, fn) {
68
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
69
+ // @ts-ignore - this one's pretty hard to get right
70
+ var returnedFn = function () {
71
+ var runTimeArgs = [];
72
+ for (var _i = 0; _i < arguments.length; _i++) {
73
+ runTimeArgs[_i] = arguments[_i];
74
+ }
75
+ return run(ctxRef, function () {
76
+ return fn.apply(void 0, runTimeArgs);
77
+ });
78
+ };
79
+ return returnedFn;
80
+ }
81
+ function use() {
82
+ return storage.ctx;
83
+ }
84
+ function set(value) {
85
+ return (storage.ctx = value);
86
+ }
87
+ function clear() {
88
+ var _a;
89
+ storage.ancestry.shift();
90
+ set((_a = storage.ancestry[0]) !== null && _a !== void 0 ? _a : null);
91
+ }
92
+ }
93
+
94
+ var ctx = createContext(function (ctxRef, parentContext) {
95
+ var base = {
96
+ value: ctxRef.value,
97
+ meta: ctxRef.meta || {}
98
+ };
99
+ if (!parentContext) {
100
+ return assign(base, {
101
+ parent: emptyParent
102
+ });
103
+ }
104
+ else if (ctxRef.set) {
105
+ return assign(base, {
106
+ parent: function () { return stripContext(parentContext); }
107
+ });
108
+ }
109
+ return parentContext;
110
+ });
111
+ function stripContext(ctx) {
112
+ if (!ctx) {
113
+ return ctx;
114
+ }
115
+ return {
116
+ value: ctx.value,
117
+ meta: ctx.meta,
118
+ parent: ctx.parent
119
+ };
120
+ }
121
+ function emptyParent() {
122
+ return null;
123
+ }
124
+
125
+ /**
126
+ * A safe hasOwnProperty access
127
+ */
128
+ function hasOwnProperty(obj, key) {
129
+ return Object.prototype.hasOwnProperty.call(obj, key);
130
+ }
131
+
132
+ function isNumber(value) {
133
+ return Boolean(typeof value === 'number');
134
+ }
135
+
136
+ function lengthEquals(value, arg1) {
137
+ return value.length === Number(arg1);
138
+ }
139
+
140
+ function isEmpty(value) {
141
+ if (!value) {
142
+ return true;
143
+ }
144
+ else if (isNumber(value)) {
145
+ return value === 0;
146
+ }
147
+ else if (hasOwnProperty(value, 'length')) {
148
+ return lengthEquals(value, 0);
149
+ }
150
+ else if (typeof value === 'object') {
151
+ return lengthEquals(Object.keys(value), 0);
152
+ }
153
+ return true;
154
+ }
155
+
156
+ function ruleReturn(pass, message) {
157
+ var output = { pass: pass };
158
+ if (message) {
159
+ output.message = message;
160
+ }
161
+ return output;
162
+ }
163
+ function failing() {
164
+ return ruleReturn(false);
165
+ }
166
+ function passing() {
167
+ return ruleReturn(true);
168
+ }
169
+ function defaultToPassing(callback) {
170
+ return defaultTo(callback, passing());
171
+ }
172
+
173
+ function runLazyRule(lazyRule, currentValue) {
174
+ try {
175
+ return lazyRule.run(currentValue);
176
+ }
177
+ catch (_a) {
178
+ return failing();
179
+ }
180
+ }
181
+
182
+ /* eslint-disable max-lines-per-function */
183
+ // TODO: This gives me a headache. Instead of `any` we should use `TLazy`
184
+ // but it fails when using compose. The type is very complex.
185
+ function compose() {
186
+ var composites = [];
187
+ for (var _i = 0; _i < arguments.length; _i++) {
188
+ composites[_i] = arguments[_i];
189
+ }
190
+ return Object.assign(function (value) {
191
+ var res = run(value);
192
+ if (!res.pass) {
193
+ if (isEmpty(res.message)) {
194
+ throwError();
195
+ }
196
+ else {
197
+ // Explicitly throw a string so that vest.test can pick it up as the validation error message
198
+ throw res.message;
199
+ }
200
+ }
201
+ }, {
202
+ run: run,
203
+ test: function (value) { return run(value).pass; }
204
+ });
205
+ function run(value) {
206
+ return ctx.run({ value: value }, function () {
207
+ return defaultToPassing(mapFirst(composites, function (composite, breakout) {
208
+ /* HACK: Just a small white lie. ~~HELP WANTED~~.
209
+ The ideal is that instead of `TLazyRuleRunners` We would simply use `TLazy` to begin with.
210
+ The problem is that lazy rules can't really be passed to this function due to some generic hell
211
+ so we're limiting it to a small set of functions.
212
+ */
213
+ var res = runLazyRule(composite, value);
214
+ if (!res.pass) {
215
+ breakout(res);
216
+ }
217
+ }));
218
+ });
219
+ }
220
+ }
221
+
222
+ module.exports = compose;
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ if (process.env.NODE_ENV === 'production') {
4
+ module.exports = require('./enforce-compose.production.js');
5
+ } else {
6
+ module.exports = require('./enforce-compose.development.js');
7
+ }
@@ -0,0 +1 @@
1
+ "use strict";function n(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,o=0;o<n.length;o++)if(t(n[o],r,o),e)return u}function t(n){return"function"==typeof n}function r(n){for(var r=[],e=1;e<arguments.length;e++)r[e-1]=arguments[e];return t(n)?n.apply(void 0,r):n}function e(n,t){var e;return null!==(e=r(n))&&void 0!==e?e:t}function u(n,t){throw Error(e(t,n))}var o=Object.assign;var i=function(n){function t(t,e){var u,f,a=i();return t=o({},a||{},null!==(u=r(n,t,a))&&void 0!==u?u:t),u=c.ctx=Object.freeze(t),c.ancestry.unshift(u),e=e(u),c.ancestry.shift(),c.ctx=null!==(f=c.ancestry[0])&&void 0!==f?f:null,e}function i(){return c.ctx}var c={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:i,useX:function(n){var t;return null!==(t=c.ctx)&&void 0!==t?t:u(e(n,"Context was used after it was closed"))}}}((function(n,t){var r={value:n.value,meta:n.meta||{}};return t?n.set?o(r,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:o(r,{parent:c})}));function c(){return null}function f(n,t){return n.length===Number(t)}function a(n){if(n){if(function(n){return"number"==typeof n}(n))return 0===n;if(function(n,t){return Object.prototype.hasOwnProperty.call(n,t)}(n,"length"))return f(n,0);if("object"==typeof n)return f(Object.keys(n),0)}return!0}function s(n,t){return n={pass:n},t&&(n.message=t),n}function l(n){return e(n,s(!0))}function v(n,t){try{return n.run(t)}catch(n){return s(!1)}}module.exports=function(){function t(t){return i.run({value:t},(function(){return l(n(r,(function(n,r){(n=v(n,t)).pass||r(n)})))}))}for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return Object.assign((function(n){if(!(n=t(n)).pass){if(!a(n.message))throw n.message;u()}}),{run:t,test:function(n){return t(n).pass}})};
@@ -474,7 +474,7 @@ function createContext(init) {
474
474
  function run(ctxRef, fn) {
475
475
  var _a;
476
476
  var parentContext = use();
477
- var out = assign({}, parentContext ? parentContext : {}, (_a = init === null || init === void 0 ? void 0 : init(ctxRef, parentContext)) !== null && _a !== void 0 ? _a : ctxRef);
477
+ var out = assign({}, parentContext ? parentContext : {}, (_a = optionalFunctionValue(init, ctxRef, parentContext)) !== null && _a !== void 0 ? _a : ctxRef);
478
478
  var ctx = set(Object.freeze(out));
479
479
  storage.ancestry.unshift(ctx);
480
480
  var res = fn(ctx);
@@ -875,10 +875,11 @@ var IsolateTypes;
875
875
  })(IsolateTypes || (IsolateTypes = {}));
876
876
 
877
877
  function createStateRef(state, _a) {
878
- var suiteId = _a.suiteId;
878
+ var suiteId = _a.suiteId, suiteName = _a.suiteName;
879
879
  return {
880
880
  optionalFields: state.registerStateKey(function () { return ({}); }),
881
881
  suiteId: state.registerStateKey(suiteId),
882
+ suiteName: state.registerStateKey(suiteName),
882
883
  testCallbacks: state.registerStateKey(function () { return ({
883
884
  fieldCallbacks: {},
884
885
  doneCallbacks: []
@@ -1039,7 +1040,10 @@ function useStateRef() {
1039
1040
  }
1040
1041
  // STATE KEYS
1041
1042
  function useSuiteId() {
1042
- return useStateRef().suiteId();
1043
+ return useStateRef().suiteId()[0];
1044
+ }
1045
+ function useSuiteName() {
1046
+ return useStateRef().suiteName()[0];
1043
1047
  }
1044
1048
  function useTestCallbacks() {
1045
1049
  return useStateRef().testCallbacks();
@@ -1231,7 +1235,7 @@ function either(a, b) {
1231
1235
  * Checks that a given test object matches the currently specified severity level
1232
1236
  */
1233
1237
  function nonMatchingSeverityProfile(severity, testObject) {
1234
- return either(severity === 'warnings', testObject.warns);
1238
+ return either(severity === 'warnings', testObject.warns());
1235
1239
  }
1236
1240
 
1237
1241
  function collectFailureMessages(severity, testObjects, options) {
@@ -1417,6 +1421,7 @@ function produceDraft() {
1417
1421
  var testObjects = useTestsFlat();
1418
1422
  var ctxRef = { stateRef: useStateRef() };
1419
1423
  return cache$1([testObjects], ctx.bind(ctxRef, function () {
1424
+ var suiteName = useSuiteName();
1420
1425
  return assign(genTestsSummary(), {
1421
1426
  getErrors: ctx.bind(ctxRef, getErrors),
1422
1427
  getErrorsByGroup: ctx.bind(ctxRef, getErrorsByGroup),
@@ -1428,7 +1433,8 @@ function produceDraft() {
1428
1433
  hasWarningsByGroup: ctx.bind(ctxRef, hasWarningsByGroup),
1429
1434
  isValid: ctx.bind(ctxRef, function (fieldName) {
1430
1435
  return isValid(produceDraft(), fieldName);
1431
- })
1436
+ }),
1437
+ suiteName: suiteName
1432
1438
  });
1433
1439
  }));
1434
1440
  }
@@ -1626,7 +1632,12 @@ var Events;
1626
1632
  })(Events || (Events = {}));
1627
1633
 
1628
1634
  // eslint-disable-next-line max-lines-per-function
1629
- function create(suiteCallback) {
1635
+ function create() {
1636
+ var args = [];
1637
+ for (var _i = 0; _i < arguments.length; _i++) {
1638
+ args[_i] = arguments[_i];
1639
+ }
1640
+ var _a = args.reverse(), suiteCallback = _a[0], suiteName = _a[1];
1630
1641
  if (!isFunction(suiteCallback)) {
1631
1642
  throwError('vest.create: Expected callback to be a function.');
1632
1643
  }
@@ -1635,7 +1646,7 @@ function create(suiteCallback) {
1635
1646
  // State initialization
1636
1647
  var state = createState();
1637
1648
  // State reference - this holds the actual state values
1638
- var stateRef = createStateRef(state, { suiteId: genId() });
1649
+ var stateRef = createStateRef(state, { suiteId: genId(), suiteName: suiteName });
1639
1650
  // Create base context reference. All hooks will derive their data from this
1640
1651
  var ctxRef = { stateRef: stateRef, bus: bus };
1641
1652
  var suite = assign(
@@ -1779,7 +1790,9 @@ function hasIncludedTests(keyTests) {
1779
1790
 
1780
1791
  function skipWhen(conditional, callback) {
1781
1792
  isolate({ type: IsolateTypes.SKIP_WHEN }, function () {
1782
- ctx.run({ skipped: optionalFunctionValue(conditional) }, function () { return callback(); });
1793
+ ctx.run({
1794
+ skipped: optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
1795
+ }, function () { return callback(); });
1783
1796
  });
1784
1797
  }
1785
1798
 
@@ -1839,11 +1852,16 @@ function shouldUseErrorAsMessage(message, error) {
1839
1852
  return isUndefined(message) && isStringValue(error);
1840
1853
  }
1841
1854
 
1855
+ var TestSeverity;
1856
+ (function (TestSeverity) {
1857
+ TestSeverity["Error"] = "error";
1858
+ TestSeverity["Warning"] = "warning";
1859
+ })(TestSeverity || (TestSeverity = {}));
1842
1860
  var VestTest = /** @class */ (function () {
1843
1861
  function VestTest(fieldName, testFn, _a) {
1844
1862
  var _b = _a === void 0 ? {} : _a, message = _b.message, groupName = _b.groupName;
1845
1863
  this.id = genId();
1846
- this.warns = false;
1864
+ this.severity = TestSeverity.Error;
1847
1865
  this.status = STATUS_UNTESTED;
1848
1866
  this.fieldName = fieldName;
1849
1867
  this.testFn = testFn;
@@ -1876,11 +1894,14 @@ var VestTest = /** @class */ (function () {
1876
1894
  }
1877
1895
  this.status = status;
1878
1896
  };
1897
+ VestTest.prototype.warns = function () {
1898
+ return this.severity === TestSeverity.Warning;
1899
+ };
1879
1900
  VestTest.prototype.setPending = function () {
1880
1901
  this.setStatus(STATUS_PENDING);
1881
1902
  };
1882
1903
  VestTest.prototype.fail = function () {
1883
- this.setStatus(this.warns ? STATUS_WARNING : STATUS_FAILED);
1904
+ this.setStatus(this.warns() ? STATUS_WARNING : STATUS_FAILED);
1884
1905
  };
1885
1906
  VestTest.prototype.done = function () {
1886
1907
  if (this.isFinalStatus()) {
@@ -1889,7 +1910,7 @@ var VestTest = /** @class */ (function () {
1889
1910
  this.setStatus(STATUS_PASSING);
1890
1911
  };
1891
1912
  VestTest.prototype.warn = function () {
1892
- this.warns = true;
1913
+ this.severity = TestSeverity.Warning;
1893
1914
  };
1894
1915
  VestTest.prototype.isFinalStatus = function () {
1895
1916
  return this.hasFailures() || this.isCanceled() || this.isPassing();
@@ -2175,11 +2196,10 @@ function bindTestMemo(test) {
2175
2196
  for (var _i = 1; _i < arguments.length; _i++) {
2176
2197
  args[_i - 1] = arguments[_i];
2177
2198
  }
2178
- var suiteId = useSuiteId()[0];
2179
2199
  var cursorAt = useCursorAt();
2180
2200
  var _a = args.reverse(), deps = _a[0], testFn = _a[1], msg = _a[2];
2181
2201
  // Implicit dependency for more specificity
2182
- var dependencies = [suiteId, fieldName, cursorAt].concat(deps);
2202
+ var dependencies = [useSuiteId(), fieldName, cursorAt].concat(deps);
2183
2203
  var cached = cache.get(dependencies);
2184
2204
  if (isNull(cached)) {
2185
2205
  // cache miss
@@ -2204,7 +2224,7 @@ function testBase(fieldName) {
2204
2224
  var context = ctx.useX();
2205
2225
  var testObject = new VestTest(fieldName, testFn, {
2206
2226
  message: message,
2207
- groupName: context === null || context === void 0 ? void 0 : context.groupName
2227
+ groupName: context.groupName
2208
2228
  });
2209
2229
  return registerPrevRunTest(testObject);
2210
2230
  }
@@ -2213,7 +2233,7 @@ var test = assign(testBase, {
2213
2233
  memo: bindTestMemo(testBase)
2214
2234
  });
2215
2235
 
2216
- var VERSION = "4.0.0-dev-31f012";
2236
+ var VERSION = "4.0.0-next-cfb1a7";
2217
2237
 
2218
2238
  exports.VERSION = VERSION;
2219
2239
  exports.create = create;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(){return(n=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)};function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}var r=Object.assign;function e(n){return"function"==typeof n}function u(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function i(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return e(n)?n.apply(void 0,t):n}function o(n,t){var r;return null!==(r=i(n))&&void 0!==r?r:t}function s(n,t){return n={pass:n},t&&(n.message=t),n}function a(){return s(!1)}function c(){return s(!0)}function f(n){return o(n,a())}function l(n){return o(n,c())}function p(n,t){try{return n.run(t)}catch(n){return a()}}function v(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){(t=p(t,n)).pass||r(t)})))}function d(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return f(u(t,(function(t,r){(t=p(t,n)).pass&&r(t)})))}function h(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){p(t,n).pass&&r(a())})))}function g(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function m(n,t){return n.length===Number(t)}var y=g(m);function N(n,t){return n.length>Number(t)}function E(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(N(e,1))return!1;(t=p(t,n)).pass&&e.push(t)})),s(m(e,1))}function b(n){return null===n}var C=g(b);function T(n){return void 0===n}var O=g(T);function S(n,t){return T(n)||b(n)?c():p(t,n)}function w(n){return String(n)===n}function x(n,t){return w(n)&&w(t)&&n.endsWith(t)}var P=g(x);function F(n,t){return n===t}var I=g(F);function k(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var A=g(k);function D(n,t){return k(n)&&k(t)&&Number(n)>Number(t)}function L(n,t){return k(n)&&k(t)&&Number(n)>=Number(t)}function W(n){return!!Array.isArray(n)}var U=g(W);function R(n,t){return!!(W(t)||w(t)&&w(n))&&-1!==t.indexOf(n)}var _=g(R);function X(n,t){return k(n)&&k(t)&&Number(n)<=Number(t)}function M(n,t,r){return L(n,t)&&X(n,r)}var G=g(M);function j(n){return w(n)&&!n.trim()}var q=g(j);function B(n){return!!n===n}var K=g(B);function H(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function V(n){return"number"==typeof n}var J=g(V);function z(n){if(n){if(V(n))return 0===n;if(H(n,"length"))return m(n,0);if("object"==typeof n)return m(Object.keys(n),0)}return!0}var Y=g(z),Q=function(n){return!!k(n)&&0==n%2};function Z(n){return Number.isNaN(n)}var $=g(Z);function nn(n){return!!k(n)&&0>Number(n)}var tn=g(nn),rn=function(n){return!!k(n)&&0!=n%2},en=g(w);function un(n){return!!n}var on=g(un);function sn(n,t){return k(n)&&k(t)&&Number(n)<Number(t)}function an(n,t){return n.length>=Number(t)}function cn(n,t){return t instanceof RegExp?t.test(n):!!w(t)&&new RegExp(t).test(n)}var fn=g(cn);function ln(n,t){return k(n)&&k(t)&&Number(n)===Number(t)}var pn=g(ln);function vn(n,t){try{return t(n)}catch(n){return!1}}function dn(n,t){return n.length<Number(t)}function hn(n,t){return n.length<=Number(t)}function gn(n,t){return w(n)&&w(t)&&n.startsWith(t)}var mn=g(gn);function yn(n,t){throw Error(o(t,n))}function Nn(n){function t(t,i){var o,s,a=e();return t=r({},a||{},null!==(o=null==n?void 0:n(t,a))&&void 0!==o?o:t),o=u.ctx=Object.freeze(t),u.ancestry.unshift(o),i=i(o),u.ancestry.shift(),u.ctx=null!==(s=u.ancestry[0])&&void 0!==s?s:null,i}function e(){return u.ctx}var u={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=u.ctx)&&void 0!==t?t:yn(o(n,"Context was used after it was closed"))}}}var En=Nn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:r(e,{parent:bn})}));function bn(){return null}function Cn(n,t){return l(u(n,(function(n,r,e){(e=En.run({value:n,set:!0,meta:{index:e}},(function(){return p(t,n)}))).pass||r(e)})))}function Tn(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=En.run({value:e,set:!0,meta:{key:r}},(function(){return p(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return c()}function On(n,t){var r=Tn(n,t);if(!r.pass)return r;for(var e in n)if(!H(t,e))return a();return c()}var Sn=r({condition:vn,doesNotEndWith:P,doesNotStartWith:mn,endsWith:x,equals:F,greaterThan:D,greaterThanOrEquals:L,gt:D,gte:L,inside:R,isArray:W,isBetween:M,isBlank:j,isBoolean:B,isEmpty:z,isEven:Q,isFalsy:on,isNaN:Z,isNegative:nn,isNotArray:U,isNotBetween:G,isNotBlank:q,isNotBoolean:K,isNotEmpty:Y,isNotNaN:$,isNotNull:C,isNotNumber:J,isNotNumeric:A,isNotString:en,isNotUndefined:O,isNull:b,isNumber:V,isNumeric:k,isOdd:rn,isPositive:tn,isString:w,isTruthy:un,isUndefined:T,lengthEquals:m,lengthNotEquals:y,lessThan:sn,lessThanOrEquals:X,longerThan:N,longerThanOrEquals:an,lt:sn,lte:X,matches:cn,notEquals:I,notInside:_,notMatches:fn,numberEquals:ln,numberNotEquals:pn,shorterThan:dn,shorterThanOrEquals:hn,startsWith:gn},{allOf:v,anyOf:d,noneOf:h,oneOf:E,optional:S},{shape:On,loose:Tn,isArrayOf:Cn});function wn(n){return Sn[n]}function xn(n){for(var t in Sn){var r=wn(t);e(r)&&n(t,r)}}function Pn(){try{return e(Proxy)}catch(n){return!1}}function Fn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return In(n),B(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function In(n){B(n)||n&&B(n.pass)||yn("Incorrect return value for rule: "+JSON.stringify(n))}function kn(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=Fn.apply(void 0,t([En.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!z(o.message))throw o.message;yn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!Pn())return xn((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=wn(t))return r(u,n,t)}});return u}function An(n){var r,e=[];return function n(o){return function(){for(var a=[],c=0;c<arguments.length;c++)a[c]=arguments[c];var f=wn(o);e.push((function(n){return Fn.apply(void 0,t([f.apply(void 0,t([n],a)),o,n],a))}));var p={run:function(n){return l(u(e,(function(t,e){var u,o=En.run({value:n},(function(){return t(n)}));o.pass||e(s(!!o.pass,null!==(u=i(r,n,o.message))&&void 0!==u?u:o.message))})))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return Pn()?p=new Proxy(p,{get:function(t,r){return wn(r)?n(r):t[r]}}):(xn((function(t){p[t]=n(t)})),p)}}(n)}function Dn(n){var t,r={};for(t in n)r[t]=Un.optional(n[t]);return r}var Ln,Wn,Un=(Ln=n({context:function(){return En.useX()},extend:function(n){r(Sn,n)}},{partial:Dn}),Pn()?new Proxy(r(kn,Ln),{get:function(n,t){return t in n?n[t]:wn(t)?An(t):void 0}}):(xn((function(n){Ln[n]=An(n)})),Ln)),Rn=function(n){return function(){return""+n++}}(0);function _n(n,t){return t=t.suiteId,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}function Xn(n){return[].concat(n)}function Mn(n){return(n=Xn(n))[n.length-1]}function Gn(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return Mn(t)},getCursor:function(){return Xn(t)},next:function(){return t[t.length-1]++,Mn(t)},removeLevel:function(){t.pop()},reset:n}}!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.GROUP=4]="GROUP"}(Wn||(Wn={}));var jn=Nn((function(n,t){return t?null:r({},{isolate:{type:Wn.DEFAULT},testCursor:Gn(),exclusion:{tests:{},groups:{}}},n)}));function qn(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];W(u)?r.push(qn(u,t)):(u=t(u),C(u)&&r.push(u))}return r}function Bn(n,t,r){return Hn(n,t)[Mn(t)]=r,n}function Kn(n){return Xn(n).reduce((function(n,t){return W(t)?n.concat(Kn(t)):Xn(n).concat(t)}),[])}function Hn(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=o(n[e],[]),n=n[e]}return n}function Vn(n){void 0===n&&(n=1);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),N(t,n)&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function Jn(){return jn.useX().stateRef}function zn(){return Jn().suiteId()}function Yn(){return Jn().testCallbacks()}function Qn(){return Jn().optionalFields()}function Zn(){return Jn().testObjects()}function $n(){(0,Zn()[1])((function(n){return{prev:n.prev,current:Xn(n.current)}}))}function nt(n){(0,Zn()[1])((function(t){return{prev:t.prev,current:Xn(n(t.current))}}))}function tt(){return Kn(qn(Zn()[0].current,(function(n){return n.isPending()?n:null})))}var rt=Vn();function et(){var n=Zn()[0].current;return rt([n],(function(){return Kn(n)}))}function ut(){return jn.useX().testCursor.getCursor()}function it(){return jn.useX().testCursor.cursorAt()}function ot(){return jn.useX().testCursor.next()}function st(n,t){if(n=void 0===(n=n.type)?Wn.DEFAULT:n,e(t)){var r=ut();return jn.run({isolate:{type:n}},(function(){jn.useX().testCursor.addLevel(),nt((function(n){return Bn(n,r,[])}));var n=t();return jn.useX().testCursor.removeLevel(),ot(),n}))}}function at(n,t){return!!t&&!ct(n,t)}function ct(n,t){return!(!t||n.fieldName!==t)}function ft(n){var t=tt();return!z(t)&&(n?t.some((function(t){return ct(t,n)})):Y(t))}function lt(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function pt(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns)}function vt(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return function(n,t,r,e){return!!(function(n,t){return!(!t||n.groupName===t)}(n,r)||at(n,e)||pt(t,n))}(r,t,i,o)||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function dt(n,t){return t?n[t]:n}function ht(n){return mt("errors",n)}function gt(n){return mt("warnings",n)}function mt(n,t){return dt(n=vt(n,et(),{fieldName:t}),t)}function yt(n,t){return dt(n=Et("errors",n,t),t)}function Nt(n,t){return dt(n=Et("warnings",n,t),t)}function Et(n,t,r){return t||yn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),vt(n,et(),{group:t,fieldName:r})}function bt(n,t,r){return!(!n.hasFailures()||at(n,r)||pt(t,n))}function Ct(n){return Ot("errors",n)}function Tt(n){return Ot("warnings",n)}function Ot(n,t){return et().some((function(r){return bt(r,n,t)}))}function St(n,t){return xt("errors",n,t)}function wt(n,t){return xt("warnings",n,t)}function xt(n,t,r){return et().some((function(e){return t===e.groupName&&bt(e,n,r)}))}function Pt(n,t){return!!function(n){var t=et().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return!!n&&!!t[n]}(t)||!n.hasErrors(t)&&(!(z(et())||function(n,t){return!!t&&z(n.tests[t])}(n,t)||function(n){var t=Qn()[0];return Y(tt().filter((function(r){return!at(r,n)&&!0!==t[r.fieldName]})))}(t))&&function(n){var t=et(),r=Qn()[0];return t.every((function(t){return!!at(t,n)||(!0===r[t.fieldName]||t.isTested()||t.isOmitted())}))}(t))}var Ft=Vn(20);function It(){var n=et(),t={stateRef:Jn()};return Ft([n],jn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return et().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=lt(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=lt(n.groups[e],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:jn.bind(t,ht),getErrorsByGroup:jn.bind(t,yt),getWarnings:jn.bind(t,gt),getWarningsByGroup:jn.bind(t,Nt),hasErrors:jn.bind(t,Ct),hasErrorsByGroup:jn.bind(t,St),hasWarnings:jn.bind(t,Tt),hasWarningsByGroup:jn.bind(t,wt),isValid:jn.bind(t,(function(n){return Pt(It(),n)}))})})))}var kt=Vn(20);function At(){var n=et(),t={stateRef:Jn()};return kt([n],jn.bind(t,(function(){return r({},It(),{done:jn.bind(t,Ut)})})))}function Dt(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Lt(n){return!(ft()&&(!n||ft(n)))}var Wt,Ut=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=At(),Dt(r,n,t))return t;var e=function(){return r(It())};return Lt(n)?(e(),t):(Rt(e,n),t)};function Rt(n,t){var r=jn.bind({},n);(0,Yn()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function _t(n){return n.forEach((function(n){return n()}))}function Xt(){var n=function(){var n={};return{emit:function(t,r){n[t]&&n[t].forEach((function(n){n(r)}))},on:function(t,r){return n[t]||(n[t]=[]),n[t].push(r),{off:function(){n[t]=n[t].filter((function(n){return n!==r}))}}}}}();return n.on(Wt.TEST_COMPLETED,(function(n){n.isCanceled()||(n.done(),function(n){var t=Yn()[0].fieldCallbacks;n&&!ft(n)&&W(t[n])&&_t(t[n])}(n.fieldName),function(){var n=Yn()[0].doneCallbacks;ft()||_t(n)}())})),n.on(Wt.SUITE_COMPLETED,(function(){!function(){var n=Qn()[0];if(!z(n)){var t={};nt((function(r){return qn(r,(function(r){var u=r.fieldName;if(t.hasOwnProperty(u))t[r.fieldName]&&r.omit();else{var i=n[u];e(i)&&(t[u]=i(),t[r.fieldName]&&r.omit())}return r}))}))}}()})),n.on(Wt.REMOVE_FIELD,(function(n){et().forEach((function(t){ct(t,n)&&(t.cancel(),function(n){nt((function(t){return qn(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n}function Mt(){var n=jn.useX();return n.bus||yn(),n.bus}!function(n){n.TEST_COMPLETED="test_completed",n.REMOVE_FIELD="remove_field",n.SUITE_COMPLETED="suite_completed"}(Wt||(Wt={}));function Gt(n){return Bt(0,"tests",n)}function jt(n){return Bt(1,"tests",n)}function qt(n){var t=n.fieldName;n=n.groupName;var r=jn.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){if(function(n){var t=jn.useX().exclusion.groups;if(H(t,n))return!1===t[n];for(var r in t)if(!0===t[r])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!u&&(!!Kt(e)||!1===e[t])}return!u&&Kt(e)}function Bt(n,t,r){var e=jn.useX("hook called outside of a running suite.");r&&Xn(r).forEach((function(r){w(r)&&(e.exclusion[t][r]=0===n)}))}function Kt(n){for(var t in n)if(!0===n[t])return!0;return!1}Gt.group=function(n){return Bt(0,"groups",n)},jt.group=function(n){return Bt(1,"groups",n)};function Ht(n){yn("Wrong arguments passed to group. Group "+n+".")}function Vt(n,t){return T(n)&&w(t)}var Jt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=Rn(),this.warns=!1,this.status=zt,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){Vt(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==rr||(this.status=n)},n.prototype.setPending=function(){this.setStatus(nr)},n.prototype.fail=function(){this.setStatus(this.warns?Zt:Qt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus($t)},n.prototype.warn=function(){this.warns=!0},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.isPending()||this.setStatus(Yt)},n.prototype.cancel=function(){this.setStatus(tr),$n()},n.prototype.omit=function(){this.setStatus(rr)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===nr},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===rr},n.prototype.isUntested=function(){return this.status===zt},n.prototype.isFailing=function(){return this.status===Qt},n.prototype.isCanceled=function(){return this.status===tr},n.prototype.isSkipped=function(){return this.status===Yt},n.prototype.isPassing=function(){return this.status===$t},n.prototype.isWarning=function(){return this.status===Zt},n}(),zt="UNTESTED",Yt="SKIPPED",Qt="FAILED",Zt="WARNING",$t="PASSING",nr="PENDING",tr="CANCELED",rr="OMITTED";function er(n){return n&&e(n.then)}function ur(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}function ir(n){var t=n.asyncTest,r=n.message;if(er(t)){var e=Mt().emit,u=Jn(),i=jn.bind({stateRef:u},(function(){$n(),e(Wt.TEST_COMPLETED,n)}));u=jn.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=w(t)?t:r,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function or(n){var t=Mt(),r=function(n){return jn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){Vt(n.message,r)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{er(r)?(n.asyncTest=r,n.setPending(),ir(n)):t.emit(Wt.TEST_COMPLETED,n)}catch(t){yn("Your test function "+n.fieldName+' returned a value. Only "false" or Promise returns are supported.')}}function sr(n){var t=Zn(),r=t[1],e=t[0].prev;if(z(e))return ar(n),n;if(function(n,t){return Y(n)&&!ur(n,t)}(t=function(n){var t=ut();return function(n,t){return Hn(n,t)[Mn(t)]}(n,t)}(e),n)){!function(n,t){jn.useX().isolate.type===Wn.EACH||function(n,t){setTimeout((function(){yn(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n),t=Hn(e,ut());var u=it();t.splice(u),r((function(n){return{prev:e,current:n.current}})),t=null}return ar(n=o(t,n)),n}function ar(n){var t=ut();nt((function(r){return Bn(r,t,n)}))}function cr(n){var t=sr(n);return qt(n)?(n.skip(),ot(),t):(function(n,t){t!==n&&ur(n,t)&&n.isPending()&&n.cancel()}(t,n),ar(n),ot(),function(n){n.isUntested()?or(n):er(n.asyncTest)&&(n.setPending(),ir(n))}(n),n)}function fr(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var e=jn.useX();return cr(t=new Jt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var lr=r(fr,{each:function(n){return function(r){return W(r)||yn("test.each: Expected table to be an array."),function(e){for(var u=[],o=1;o<arguments.length;o++)u[o-1]=arguments[o];var s=(u=u.reverse())[0],a=u[1];return st({type:Wn.EACH},(function(){return r.map((function(r){return r=Xn(r),n(i.apply(void 0,t([e],r)),i.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}))}}}(fr),memo:function(n){var t=Vn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=zn()[0];var i=it(),o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),b(u=t.get(e))?t(e,(function(){return n(r,s,o)})):u[1].isCanceled()?(t.invalidate(e),t(e,(function(){return n(r,s,o)}))):cr(u[1])}}(fr)});exports.VERSION="4.0.0-dev-31f012",exports.create=function(n){e(n)||yn("vest.create: Expected callback to be a function.");var t=Xt(),u=function(n){function t(n,t,e){return u.references.push(),r(n,i(t,e)),function(){return[u.references[n],function(t){return r(n,i(t,u.references[n]))}]}}function r(t,r){var i=u.references[t];u.references[t]=r,e(t=o[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){var n=u.references;u.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}(),o={stateRef:_n(u,{suiteId:Rn()}),bus:t};return r(jn.bind(o,(function(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return u.reset(),st({type:Wn.SUITE},(function(){n.apply(void 0,r)})),t.emit(Wt.SUITE_COMPLETED),At()})),{get:jn.bind(o,It),reset:u.reset,remove:jn.bind(o,(function(n){t.emit(Wt.REMOVE_FIELD,n)}))})},exports.enforce=Un,exports.group=function(n,t){w(n)||Ht("name must be a string"),e(t)||Ht("callback must be a function"),st({type:Wn.GROUP},(function(){jn.run({groupName:n},t)}))},exports.only=Gt,exports.optional=function(n){(0,Qn()[1])((function(t){if(W(n)||w(n))Xn(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))},exports.skip=jt,exports.skipWhen=function(n,t){st({type:Wn.SKIP_WHEN},(function(){jn.run({skipped:i(n)},(function(){return t()}))}))},exports.test=lr,exports.warn=function(){var n=jn.useX("warn hook called outside of a running suite.");n.currentTest||yn("warn called outside of a test."),n.currentTest.warn()};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(){return(n=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)};function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}var r=Object.assign;function e(n){return"function"==typeof n}function u(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function i(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return e(n)?n.apply(void 0,t):n}function o(n,t){var r;return null!==(r=i(n))&&void 0!==r?r:t}function s(n,t){return n={pass:n},t&&(n.message=t),n}function a(){return s(!1)}function c(){return s(!0)}function f(n){return o(n,a())}function l(n){return o(n,c())}function v(n,t){try{return n.run(t)}catch(n){return a()}}function p(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){(t=v(t,n)).pass||r(t)})))}function d(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return f(u(t,(function(t,r){(t=v(t,n)).pass&&r(t)})))}function g(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){v(t,n).pass&&r(a())})))}function h(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function m(n,t){return n.length===Number(t)}var y=h(m);function N(n,t){return n.length>Number(t)}function E(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(N(e,1))return!1;(t=v(t,n)).pass&&e.push(t)})),s(m(e,1))}function b(n){return null===n}var C=h(b);function T(n){return void 0===n}var O=h(T);function S(n,t){return T(n)||b(n)?c():v(t,n)}function x(n){return String(n)===n}function w(n,t){return x(n)&&x(t)&&n.endsWith(t)}var P=h(w);function F(n,t){return n===t}var I=h(F);function k(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var W=h(k);function A(n,t){return k(n)&&k(t)&&Number(n)>Number(t)}function D(n,t){return k(n)&&k(t)&&Number(n)>=Number(t)}function L(n){return!!Array.isArray(n)}var U=h(L);function R(n,t){return!!(L(t)||x(t)&&x(n))&&-1!==t.indexOf(n)}var _=h(R);function X(n,t){return k(n)&&k(t)&&Number(n)<=Number(t)}function M(n,t,r){return D(n,t)&&X(n,r)}var G=h(M);function j(n){return x(n)&&!n.trim()}var q=h(j);function B(n){return!!n===n}var K=h(B);function H(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function V(n){return"number"==typeof n}var J=h(V);function z(n){if(n){if(V(n))return 0===n;if(H(n,"length"))return m(n,0);if("object"==typeof n)return m(Object.keys(n),0)}return!0}var Y=h(z),Q=function(n){return!!k(n)&&0==n%2};function Z(n){return Number.isNaN(n)}var $=h(Z);function nn(n){return!!k(n)&&0>Number(n)}var tn=h(nn),rn=function(n){return!!k(n)&&0!=n%2},en=h(x);function un(n){return!!n}var on=h(un);function sn(n,t){return k(n)&&k(t)&&Number(n)<Number(t)}function an(n,t){return n.length>=Number(t)}function cn(n,t){return t instanceof RegExp?t.test(n):!!x(t)&&new RegExp(t).test(n)}var fn=h(cn);function ln(n,t){return k(n)&&k(t)&&Number(n)===Number(t)}var vn=h(ln);function pn(n,t){try{return t(n)}catch(n){return!1}}function dn(n,t){return n.length<Number(t)}function gn(n,t){return n.length<=Number(t)}function hn(n,t){return x(n)&&x(t)&&n.startsWith(t)}var mn=h(hn);function yn(n,t){throw Error(o(t,n))}function Nn(n){function t(t,o){var s,a,c=e();return t=r({},c||{},null!==(s=i(n,t,c))&&void 0!==s?s:t),s=u.ctx=Object.freeze(t),u.ancestry.unshift(s),o=o(s),u.ancestry.shift(),u.ctx=null!==(a=u.ancestry[0])&&void 0!==a?a:null,o}function e(){return u.ctx}var u={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=u.ctx)&&void 0!==t?t:yn(o(n,"Context was used after it was closed"))}}}var En=Nn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:r(e,{parent:bn})}));function bn(){return null}function Cn(n,t){return l(u(n,(function(n,r,e){(e=En.run({value:n,set:!0,meta:{index:e}},(function(){return v(t,n)}))).pass||r(e)})))}function Tn(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=En.run({value:e,set:!0,meta:{key:r}},(function(){return v(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return c()}function On(n,t){var r=Tn(n,t);if(!r.pass)return r;for(var e in n)if(!H(t,e))return a();return c()}var Sn=r({condition:pn,doesNotEndWith:P,doesNotStartWith:mn,endsWith:w,equals:F,greaterThan:A,greaterThanOrEquals:D,gt:A,gte:D,inside:R,isArray:L,isBetween:M,isBlank:j,isBoolean:B,isEmpty:z,isEven:Q,isFalsy:on,isNaN:Z,isNegative:nn,isNotArray:U,isNotBetween:G,isNotBlank:q,isNotBoolean:K,isNotEmpty:Y,isNotNaN:$,isNotNull:C,isNotNumber:J,isNotNumeric:W,isNotString:en,isNotUndefined:O,isNull:b,isNumber:V,isNumeric:k,isOdd:rn,isPositive:tn,isString:x,isTruthy:un,isUndefined:T,lengthEquals:m,lengthNotEquals:y,lessThan:sn,lessThanOrEquals:X,longerThan:N,longerThanOrEquals:an,lt:sn,lte:X,matches:cn,notEquals:I,notInside:_,notMatches:fn,numberEquals:ln,numberNotEquals:vn,shorterThan:dn,shorterThanOrEquals:gn,startsWith:hn},{allOf:p,anyOf:d,noneOf:g,oneOf:E,optional:S},{shape:On,loose:Tn,isArrayOf:Cn});function xn(n){return Sn[n]}function wn(n){for(var t in Sn){var r=xn(t);e(r)&&n(t,r)}}function Pn(){try{return e(Proxy)}catch(n){return!1}}function Fn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return In(n),B(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function In(n){B(n)||n&&B(n.pass)||yn("Incorrect return value for rule: "+JSON.stringify(n))}function kn(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=Fn.apply(void 0,t([En.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!z(o.message))throw o.message;yn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!Pn())return wn((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=xn(t))return r(u,n,t)}});return u}function Wn(n){var r,e=[];return function n(o){return function(){for(var a=[],c=0;c<arguments.length;c++)a[c]=arguments[c];var f=xn(o);e.push((function(n){return Fn.apply(void 0,t([f.apply(void 0,t([n],a)),o,n],a))}));var v={run:function(n){return l(u(e,(function(t,e){var u,o=En.run({value:n},(function(){return t(n)}));o.pass||e(s(!!o.pass,null!==(u=i(r,n,o.message))&&void 0!==u?u:o.message))})))},test:function(n){return v.run(n).pass},message:function(n){return n&&(r=n),v}};return Pn()?v=new Proxy(v,{get:function(t,r){return xn(r)?n(r):t[r]}}):(wn((function(t){v[t]=n(t)})),v)}}(n)}function An(n){var t,r={};for(t in n)r[t]=Un.optional(n[t]);return r}var Dn,Ln,Un=(Dn=n({context:function(){return En.useX()},extend:function(n){r(Sn,n)}},{partial:An}),Pn()?new Proxy(r(kn,Dn),{get:function(n,t){return t in n?n[t]:xn(t)?Wn(t):void 0}}):(wn((function(n){Dn[n]=Wn(n)})),Dn)),Rn=function(n){return function(){return""+n++}}(0);function _n(n){function t(n,t,e){return u.references.push(),r(n,i(t,e)),function(){return[u.references[n],function(t){return r(n,i(t,u.references[n]))}]}}function r(t,r){var i=u.references[t];u.references[t]=r,e(t=o[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){var n=u.references;u.references=[],o.forEach((function(r,e){return t(e,r[0],n[e])}))}}}function Xn(n,t){var r=t.suiteId;return t=t.suiteName,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(r),suiteName:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}function Mn(n){return[].concat(n)}function Gn(n){return(n=Mn(n))[n.length-1]}function jn(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return Gn(t)},getCursor:function(){return Mn(t)},next:function(){return t[t.length-1]++,Gn(t)},removeLevel:function(){t.pop()},reset:n}}!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.GROUP=4]="GROUP"}(Ln||(Ln={}));var qn=Nn((function(n,t){return t?null:r({},{isolate:{type:Ln.DEFAULT},testCursor:jn(),exclusion:{tests:{},groups:{}}},n)}));function Bn(n,t){for(var r=[],e=0;e<n.length;e++){var u=n[e];L(u)?r.push(Bn(u,t)):(u=t(u),C(u)&&r.push(u))}return r}function Kn(n,t,r){return Vn(n,t)[Gn(t)]=r,n}function Hn(n){return Mn(n).reduce((function(n,t){return L(t)?n.concat(Hn(t)):Mn(n).concat(t)}),[])}function Vn(n,t){var r=0;for(t=t.slice(0,-1);r<t.length;r++){var e=t[r];n[e]=o(n[e],[]),n=n[e]}return n}function Jn(n){void 0===n&&(n=1);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),N(t,n)&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return m(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function zn(){return qn.useX().stateRef}function Yn(){return zn().suiteId()[0]}function Qn(){return zn().testCallbacks()}function Zn(){return zn().optionalFields()}function $n(){return zn().testObjects()}function nt(){(0,$n()[1])((function(n){return{prev:n.prev,current:Mn(n.current)}}))}function tt(n){(0,$n()[1])((function(t){return{prev:t.prev,current:Mn(n(t.current))}}))}function rt(){return Hn(Bn($n()[0].current,(function(n){return n.isPending()?n:null})))}var et=Jn();function ut(){var n=$n()[0].current;return et([n],(function(){return Hn(n)}))}function it(){return qn.useX().testCursor.getCursor()}function ot(){return qn.useX().testCursor.cursorAt()}function st(){return qn.useX().testCursor.next()}function at(n,t){if(n=void 0===(n=n.type)?Ln.DEFAULT:n,e(t)){var r=it();return qn.run({isolate:{type:n}},(function(){qn.useX().testCursor.addLevel(),tt((function(n){return Kn(n,r,[])}));var n=t();return qn.useX().testCursor.removeLevel(),st(),n}))}}function ct(n,t){return!!t&&!ft(n,t)}function ft(n,t){return!(!t||n.fieldName!==t)}function lt(n){var t=rt();return!z(t)&&(n?t.some((function(t){return ft(t,n)})):Y(t))}function vt(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function pt(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns())}function dt(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return function(n,t,r,e){return!!(function(n,t){return!(!t||n.groupName===t)}(n,r)||ct(n,e)||pt(t,n))}(r,t,i,o)||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function gt(n,t){return t?n[t]:n}function ht(n){return yt("errors",n)}function mt(n){return yt("warnings",n)}function yt(n,t){return gt(n=dt(n,ut(),{fieldName:t}),t)}function Nt(n,t){return gt(n=bt("errors",n,t),t)}function Et(n,t){return gt(n=bt("warnings",n,t),t)}function bt(n,t,r){return t||yn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),dt(n,ut(),{group:t,fieldName:r})}function Ct(n,t,r){return!(!n.hasFailures()||ct(n,r)||pt(t,n))}function Tt(n){return St("errors",n)}function Ot(n){return St("warnings",n)}function St(n,t){return ut().some((function(r){return Ct(r,n,t)}))}function xt(n,t){return Pt("errors",n,t)}function wt(n,t){return Pt("warnings",n,t)}function Pt(n,t,r){return ut().some((function(e){return t===e.groupName&&Ct(e,n,r)}))}function Ft(n,t){return!!function(n){var t=ut().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return!!n&&!!t[n]}(t)||!n.hasErrors(t)&&(!(z(ut())||function(n,t){return!!t&&z(n.tests[t])}(n,t)||function(n){var t=Zn()[0];return Y(rt().filter((function(r){return!ct(r,n)&&!0!==t[r.fieldName]})))}(t))&&function(n){var t=ut(),r=Zn()[0];return t.every((function(t){return!!ct(t,n)||(!0===r[t.fieldName]||t.isTested()||t.isOmitted())}))}(t))}var It=Jn(20);function kt(){var n=ut(),t={stateRef:zn()};return It([n],qn.bind(t,(function(){var n=zn().suiteName()[0];return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return ut().forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=vt(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=vt(n.groups[e],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:qn.bind(t,ht),getErrorsByGroup:qn.bind(t,Nt),getWarnings:qn.bind(t,mt),getWarningsByGroup:qn.bind(t,Et),hasErrors:qn.bind(t,Tt),hasErrorsByGroup:qn.bind(t,xt),hasWarnings:qn.bind(t,Ot),hasWarningsByGroup:qn.bind(t,wt),isValid:qn.bind(t,(function(n){return Ft(kt(),n)})),suiteName:n})})))}var Wt=Jn(20);function At(){var n=ut(),t={stateRef:zn()};return Wt([n],qn.bind(t,(function(){return r({},kt(),{done:qn.bind(t,Rt)})})))}function Dt(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Lt(n){return!(lt()&&(!n||lt(n)))}var Ut,Rt=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=At(),Dt(r,n,t))return t;var e=function(){return r(kt())};return Lt(n)?(e(),t):(_t(e,n),t)};function _t(n,t){var r=qn.bind({},n);(0,Qn()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Xt(n){return n.forEach((function(n){return n()}))}function Mt(){var n=function(){var n={};return{emit:function(t,r){n[t]&&n[t].forEach((function(n){n(r)}))},on:function(t,r){return n[t]||(n[t]=[]),n[t].push(r),{off:function(){n[t]=n[t].filter((function(n){return n!==r}))}}}}}();return n.on(Ut.TEST_COMPLETED,(function(n){n.isCanceled()||(n.done(),function(n){var t=Qn()[0].fieldCallbacks;n&&!lt(n)&&L(t[n])&&Xt(t[n])}(n.fieldName),function(){var n=Qn()[0].doneCallbacks;lt()||Xt(n)}())})),n.on(Ut.SUITE_COMPLETED,(function(){!function(){var n=Zn()[0];if(!z(n)){var t={};tt((function(r){return Bn(r,(function(r){var u=r.fieldName;if(t.hasOwnProperty(u))t[r.fieldName]&&r.omit();else{var i=n[u];e(i)&&(t[u]=i(),t[r.fieldName]&&r.omit())}return r}))}))}}()})),n.on(Ut.REMOVE_FIELD,(function(n){ut().forEach((function(t){ft(t,n)&&(t.cancel(),function(n){tt((function(t){return Bn(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n}function Gt(){var n=qn.useX();return n.bus||yn(),n.bus}!function(n){n.TEST_COMPLETED="test_completed",n.REMOVE_FIELD="remove_field",n.SUITE_COMPLETED="suite_completed"}(Ut||(Ut={}));function jt(n){return Kt(0,"tests",n)}function qt(n){return Kt(1,"tests",n)}function Bt(n){var t=n.fieldName;n=n.groupName;var r=qn.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){if(function(n){var t=qn.useX().exclusion.groups;if(H(t,n))return!1===t[n];for(var r in t)if(!0===t[r])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!u&&(!!Ht(e)||!1===e[t])}return!u&&Ht(e)}function Kt(n,t,r){var e=qn.useX("hook called outside of a running suite.");r&&Mn(r).forEach((function(r){x(r)&&(e.exclusion[t][r]=0===n)}))}function Ht(n){for(var t in n)if(!0===n[t])return!0;return!1}jt.group=function(n){return Kt(0,"groups",n)},qt.group=function(n){return Kt(1,"groups",n)};var Vt;function Jt(n){yn("Wrong arguments passed to group. Group "+n+".")}function zt(n,t){return T(n)&&x(t)}!function(n){n.Error="error",n.Warning="warning"}(Vt||(Vt={}));var Yt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=Rn(),this.severity=Vt.Error,this.status=Qt,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){zt(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==ur||(this.status=n)},n.prototype.warns=function(){return this.severity===Vt.Warning},n.prototype.setPending=function(){this.setStatus(rr)},n.prototype.fail=function(){this.setStatus(this.warns()?nr:$t)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(tr)},n.prototype.warn=function(){this.severity=Vt.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(){this.isPending()||this.setStatus(Zt)},n.prototype.cancel=function(){this.setStatus(er),nt()},n.prototype.omit=function(){this.setStatus(ur)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===rr},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.status===ur},n.prototype.isUntested=function(){return this.status===Qt},n.prototype.isFailing=function(){return this.status===$t},n.prototype.isCanceled=function(){return this.status===er},n.prototype.isSkipped=function(){return this.status===Zt},n.prototype.isPassing=function(){return this.status===tr},n.prototype.isWarning=function(){return this.status===nr},n}(),Qt="UNTESTED",Zt="SKIPPED",$t="FAILED",nr="WARNING",tr="PASSING",rr="PENDING",er="CANCELED",ur="OMITTED";function ir(n){return n&&e(n.then)}function or(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}function sr(n){var t=n.asyncTest,r=n.message;if(ir(t)){var e=Gt().emit,u=zn(),i=qn.bind({stateRef:u},(function(){nt(),e(Ut.TEST_COMPLETED,n)}));u=qn.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=x(t)?t:r,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function ar(n){var t=Gt(),r=function(n){return qn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){zt(n.message,r)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{ir(r)?(n.asyncTest=r,n.setPending(),sr(n)):t.emit(Ut.TEST_COMPLETED,n)}catch(t){yn("Your test function "+n.fieldName+' returned a value. Only "false" or Promise returns are supported.')}}function cr(n){var t=$n(),r=t[1],e=t[0].prev;if(z(e))return fr(n),n;if(function(n,t){return Y(n)&&!or(n,t)}(t=function(n){var t=it();return function(n,t){return Vn(n,t)[Gn(t)]}(n,t)}(e),n)){!function(n,t){qn.useX().isolate.type===Ln.EACH||function(n,t){setTimeout((function(){yn(n,t)}),0)}("Vest Critical Error: Tests called in different order than previous run.\n expected: "+n.fieldName+"\n received: "+t.fieldName+"\n This happens when you conditionally call your tests using if/else.\n This might lead to incorrect validation results.\n Replacing if/else with skipWhen solves these issues.")}(t,n),t=Vn(e,it());var u=ot();t.splice(u),r((function(n){return{prev:e,current:n.current}})),t=null}return fr(n=o(t,n)),n}function fr(n){var t=it();tt((function(r){return Kn(r,t,n)}))}function lr(n){var t=cr(n);return Bt(n)?(n.skip(),st(),t):(function(n,t){t!==n&&or(n,t)&&n.isPending()&&n.cancel()}(t,n),fr(n),st(),function(n){n.isUntested()?ar(n):ir(n.asyncTest)&&(n.setPending(),sr(n))}(n),n)}function vr(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var e=qn.useX();return lr(t=new Yt(n,t,{message:r,groupName:e.groupName}))}var pr=r(vr,{each:function(n){return function(r){return L(r)||yn("test.each: Expected table to be an array."),function(e){for(var u=[],o=1;o<arguments.length;o++)u[o-1]=arguments[o];var s=(u=u.reverse())[0],a=u[1];return at({type:Ln.EACH},(function(){return r.map((function(r){return r=Mn(r),n(i.apply(void 0,t([e],r)),i.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}))}}}(vr),memo:function(n){var t=Jn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=ot();var i=(e=e.reverse())[0],o=e[1],s=e[2];return u=[Yn(),r,u].concat(i),b(e=t.get(u))?t(u,(function(){return n(r,s,o)})):e[1].isCanceled()?(t.invalidate(u),t(u,(function(){return n(r,s,o)}))):lr(e[1])}}(vr)});exports.VERSION="4.0.0-next-cfb1a7",exports.create=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var u=(n=n.reverse())[0];n=n[1],e(u)||yn("vest.create: Expected callback to be a function.");var i=Mt(),o=_n();return n={stateRef:Xn(o,{suiteId:Rn(),suiteName:n}),bus:i},r(qn.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return o.reset(),at({type:Ln.SUITE},(function(){u.apply(void 0,n)})),i.emit(Ut.SUITE_COMPLETED),At()})),{get:qn.bind(n,kt),reset:o.reset,remove:qn.bind(n,(function(n){i.emit(Ut.REMOVE_FIELD,n)}))})},exports.enforce=Un,exports.group=function(n,t){x(n)||Jt("name must be a string"),e(t)||Jt("callback must be a function"),at({type:Ln.GROUP},(function(){qn.run({groupName:n},t)}))},exports.only=jt,exports.optional=function(n){(0,Zn()[1])((function(t){if(L(n)||x(n))Mn(n).forEach((function(n){t[n]=!0}));else for(var r in n)t[r]=n[r];return t}))},exports.skip=qt,exports.skipWhen=function(n,t){at({type:Ln.SKIP_WHEN},(function(){qn.run({skipped:i(n,i(kt))},(function(){return t()}))}))},exports.test=pr,exports.warn=function(){var n=qn.useX("warn hook called outside of a running suite.");n.currentTest||yn("warn called outside of a test."),n.currentTest.warn()};