vest 4.3.4 → 4.4.1

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.
@@ -438,7 +438,7 @@
438
438
  return null;
439
439
  }
440
440
 
441
- /*! *****************************************************************************
441
+ /******************************************************************************
442
442
  Copyright (c) Microsoft Corporation.
443
443
 
444
444
  Permission to use, copy, modify, and/or distribute this software for any
@@ -775,40 +775,6 @@
775
775
  return current;
776
776
  }
777
777
 
778
- function createCursor() {
779
- var storage = {
780
- cursor: []
781
- };
782
- function addLevel() {
783
- storage.cursor.push(0);
784
- }
785
- function removeLevel() {
786
- storage.cursor.pop();
787
- }
788
- function cursorAt() {
789
- return last(storage.cursor);
790
- }
791
- function getCursor() {
792
- return asArray(storage.cursor);
793
- }
794
- function next() {
795
- storage.cursor[storage.cursor.length - 1]++;
796
- return last(storage.cursor);
797
- }
798
- function reset() {
799
- storage.cursor = [0];
800
- }
801
- reset();
802
- return {
803
- addLevel: addLevel,
804
- cursorAt: cursorAt,
805
- getCursor: getCursor,
806
- next: next,
807
- removeLevel: removeLevel,
808
- reset: reset
809
- };
810
- }
811
-
812
778
  var IsolateTypes;
813
779
  (function (IsolateTypes) {
814
780
  IsolateTypes[IsolateTypes["DEFAULT"] = 0] = "DEFAULT";
@@ -825,6 +791,41 @@
825
791
  Modes[Modes["EAGER"] = 1] = "EAGER";
826
792
  })(Modes || (Modes = {}));
827
793
 
794
+ function createIsolateCursor() {
795
+ var cursor = {
796
+ value: 0
797
+ };
798
+ return {
799
+ current: current,
800
+ next: next
801
+ };
802
+ /**
803
+ * @returns {number} The current value of the cursor
804
+ */
805
+ function current() {
806
+ return cursor.value;
807
+ }
808
+ /**
809
+ * Moves the isolate cursor forward by 1
810
+ */
811
+ function next() {
812
+ cursor.value++;
813
+ }
814
+ }
815
+
816
+ function generateIsolate(type, path) {
817
+ if (path === void 0) { path = []; }
818
+ return {
819
+ cursor: createIsolateCursor(),
820
+ keys: {
821
+ current: {},
822
+ prev: {}
823
+ },
824
+ path: path,
825
+ type: type
826
+ };
827
+ }
828
+
828
829
  var context = createContext(function (ctxRef, parentContext) {
829
830
  return parentContext
830
831
  ? null
@@ -834,15 +835,8 @@
834
835
  groups: {}
835
836
  },
836
837
  inclusion: {},
837
- isolate: {
838
- type: IsolateTypes.DEFAULT,
839
- keys: {
840
- current: {},
841
- prev: {}
842
- }
843
- },
844
- mode: [Modes.ALL],
845
- testCursor: createCursor()
838
+ isolate: generateIsolate(IsolateTypes.DEFAULT),
839
+ mode: [Modes.ALL]
846
840
  }, ctxRef);
847
841
  });
848
842
 
@@ -1150,30 +1144,9 @@
1150
1144
  }, 0);
1151
1145
  }
1152
1146
 
1153
- function usePath() {
1154
- var context$1 = context.useX();
1155
- return context$1.testCursor.getCursor();
1156
- }
1157
- function useCursorAt() {
1158
- var context$1 = context.useX();
1159
- return context$1.testCursor.cursorAt();
1160
- }
1161
- function moveForward() {
1162
- var context$1 = context.useX();
1163
- return context$1.testCursor.next();
1164
- }
1165
- function addLevel() {
1166
- var context$1 = context.useX();
1167
- context$1.testCursor.addLevel();
1168
- }
1169
- function removeLevel() {
1170
- var context$1 = context.useX();
1171
- context$1.testCursor.removeLevel();
1172
- }
1173
-
1174
1147
  function usePrevKeys() {
1175
1148
  var prev = useTestObjects()[0].prev;
1176
- return asArray(getCurrent(prev, usePath())).reduce(function (prevKeys, testObject) {
1149
+ return asArray(getCurrent(prev, useCurrentPath())).reduce(function (prevKeys, testObject) {
1177
1150
  if (!(testObject instanceof VestTest)) {
1178
1151
  return prevKeys;
1179
1152
  }
@@ -1185,12 +1158,11 @@
1185
1158
  }, {});
1186
1159
  }
1187
1160
  function usePrevTestByKey(key) {
1188
- var prev = context.useX().isolate.keys.prev;
1161
+ var prev = useIsolate().keys.prev;
1189
1162
  return prev[key];
1190
1163
  }
1191
1164
  function useRetainTestKey(key, testObject) {
1192
- var context$1 = context.useX();
1193
- var current = context$1.isolate.keys.current;
1165
+ var current = useIsolate().keys.current;
1194
1166
  if (isNullish(current[key])) {
1195
1167
  current[key] = testObject;
1196
1168
  }
@@ -1202,23 +1174,42 @@
1202
1174
  function isolate(_a, callback) {
1203
1175
  var _b = _a.type, type = _b === void 0 ? IsolateTypes.DEFAULT : _b;
1204
1176
  invariant(isFunction(callback));
1205
- var keys = {
1206
- current: {},
1207
- prev: {}
1208
- };
1209
- var path = usePath();
1210
- return context.run({ isolate: { type: type, keys: keys } }, function () {
1211
- addLevel();
1212
- keys.prev = usePrevKeys();
1213
- useSetTests(function (tests) { return setValueAtPath(tests, path, []); });
1177
+ // Generate a new Isolate layer, with its own cursor
1178
+ var isolate = generateIsolate(type, useCurrentPath());
1179
+ var output = context.run({ isolate: isolate }, function () {
1180
+ isolate.keys.prev = usePrevKeys();
1181
+ useSetTests(function (tests) { return setValueAtPath(tests, isolate.path, []); });
1214
1182
  var res = callback();
1215
- removeLevel();
1216
- moveForward();
1217
1183
  return res;
1218
1184
  });
1185
+ // Move the parent cursor forward once we're done
1186
+ useCursor().next();
1187
+ return output;
1188
+ }
1189
+ /**
1190
+ * @returns {Isolate} The current isolate layer
1191
+ */
1192
+ function useIsolate() {
1193
+ return context.useX().isolate;
1219
1194
  }
1195
+ /**
1196
+ * @returns {boolean} Whether or not the current isolate allows tests to be reordered
1197
+ */
1220
1198
  function shouldAllowReorder() {
1221
- return context.useX().isolate.type === IsolateTypes.EACH;
1199
+ return useIsolate().type === IsolateTypes.EACH;
1200
+ }
1201
+ /**
1202
+ * @returns {number[]} The current cursor path of the isolate tree
1203
+ */
1204
+ function useCurrentPath() {
1205
+ var isolate = useIsolate();
1206
+ return isolate.path.concat(isolate.cursor.current());
1207
+ }
1208
+ /**
1209
+ * @returns {IsolateCursor} The cursor object for the current isolate
1210
+ */
1211
+ function useCursor() {
1212
+ return useIsolate().cursor;
1222
1213
  }
1223
1214
 
1224
1215
  var Severity;
@@ -1244,6 +1235,11 @@
1244
1235
  return !!(fieldName && testObject.fieldName === fieldName);
1245
1236
  }
1246
1237
 
1238
+ var nonMatchingGroupName = bindNot(matchingGroupName);
1239
+ function matchingGroupName(testObject, groupName) {
1240
+ return testObject.groupName === groupName;
1241
+ }
1242
+
1247
1243
  function either(a, b) {
1248
1244
  return !!a !== !!b;
1249
1245
  }
@@ -1268,6 +1264,15 @@
1268
1264
  return hasFailuresByTestObject(testObject, severityKey, fieldName);
1269
1265
  });
1270
1266
  }
1267
+ function hasGroupFailuresByTestObjects(severityKey, groupName, fieldName) {
1268
+ var testObjects = useTestsFlat();
1269
+ return testObjects.some(function (testObject) {
1270
+ if (nonMatchingGroupName(testObject, groupName)) {
1271
+ return false;
1272
+ }
1273
+ return hasFailuresByTestObject(testObject, severityKey, fieldName);
1274
+ });
1275
+ }
1271
1276
  /**
1272
1277
  * Determines whether a certain test profile has failures.
1273
1278
  */
@@ -1285,7 +1290,7 @@
1285
1290
  }
1286
1291
 
1287
1292
  // eslint-disable-next-line max-statements, complexity
1288
- function shouldAddValidProp(fieldName) {
1293
+ function shouldAddValidProperty(fieldName) {
1289
1294
  if (fieldIsOmitted(fieldName)) {
1290
1295
  return true;
1291
1296
  }
@@ -1296,36 +1301,78 @@
1296
1301
  if (isEmpty(testObjects)) {
1297
1302
  return false;
1298
1303
  }
1304
+ // Does the given field have any pending tests that are not optional?
1299
1305
  if (hasNonOptionalIncomplete(fieldName)) {
1300
1306
  return false;
1301
1307
  }
1302
1308
  return noMissingTests(fieldName);
1303
1309
  }
1310
+ function shouldAddValidPropertyInGroup(groupName, fieldName) {
1311
+ if (fieldIsOmitted(fieldName)) {
1312
+ return true;
1313
+ }
1314
+ if (hasGroupFailuresByTestObjects(Severity.ERRORS, groupName, fieldName)) {
1315
+ return false;
1316
+ }
1317
+ // Do the given group/field have any pending tests that are not optional?
1318
+ if (hasNonOptionalIncompleteByGroup(groupName, fieldName)) {
1319
+ return false;
1320
+ }
1321
+ return noMissingTestsByGroup(groupName, fieldName);
1322
+ }
1304
1323
  function fieldIsOmitted(fieldName) {
1305
1324
  if (!fieldName) {
1306
1325
  return false;
1307
1326
  }
1308
1327
  return useOptionalFieldApplied(fieldName) === true;
1309
1328
  }
1329
+ // Does the given field have any pending tests that are not optional?
1310
1330
  function hasNonOptionalIncomplete(fieldName) {
1311
1331
  return isNotEmpty(useAllIncomplete().filter(function (testObject) {
1312
- if (nonMatchingFieldName(testObject, fieldName)) {
1332
+ return isOptionalFieldIncomplete(testObject, fieldName);
1333
+ }));
1334
+ }
1335
+ // Do the given group/field have any pending tests that are not optional?
1336
+ function hasNonOptionalIncompleteByGroup(groupName, fieldName) {
1337
+ return isNotEmpty(useAllIncomplete().filter(function (testObject) {
1338
+ if (nonMatchingGroupName(testObject, groupName)) {
1313
1339
  return false;
1314
1340
  }
1315
- return useOptionalFieldConfig(testObject.fieldName) !== true;
1341
+ return isOptionalFieldIncomplete(testObject, fieldName);
1316
1342
  }));
1317
1343
  }
1344
+ function isOptionalFieldIncomplete(testObject, fieldName) {
1345
+ if (nonMatchingFieldName(testObject, fieldName)) {
1346
+ return false;
1347
+ }
1348
+ return useOptionalFieldConfig(testObject.fieldName) !== true;
1349
+ }
1318
1350
  function noMissingTests(fieldName) {
1319
1351
  var testObjects = useTestsFlat();
1320
1352
  return testObjects.every(function (testObject) {
1321
1353
  if (nonMatchingFieldName(testObject, fieldName)) {
1322
1354
  return true;
1323
1355
  }
1324
- return (useOptionalFieldConfig(testObject.fieldName) === true ||
1325
- testObject.isTested() ||
1326
- testObject.isOmitted());
1356
+ return missingTestsLogic(testObject, fieldName);
1327
1357
  });
1328
1358
  }
1359
+ function noMissingTestsByGroup(groupName, fieldName) {
1360
+ var testObjects = useTestsFlat();
1361
+ return testObjects.every(function (testObject) {
1362
+ if (nonMatchingGroupName(testObject, groupName)) {
1363
+ return true;
1364
+ }
1365
+ return missingTestsLogic(testObject, fieldName);
1366
+ });
1367
+ }
1368
+ function missingTestsLogic(testObject, fieldName) {
1369
+ if (nonMatchingFieldName(testObject, fieldName)) {
1370
+ return true;
1371
+ }
1372
+ return (useOptionalFieldConfig(testObject.fieldName) === true ||
1373
+ testObject.isTested() ||
1374
+ testObject.isOmitted());
1375
+ }
1329
1376
 
1330
1377
  function useSummary() {
1331
1378
  var summary = context.useX().summary;
@@ -1347,7 +1394,7 @@
1347
1394
  appendToGroup(summary.groups, testObject);
1348
1395
  return summary;
1349
1396
  }, summary);
1350
- summary.valid = shouldAddValidProp();
1397
+ summary.valid = shouldAddValidProperty();
1351
1398
  return countFailures(summary);
1352
1399
  }
1353
1400
  function appendToTest(tests, testObject) {
@@ -1356,7 +1403,7 @@
1356
1403
  tests[testObject.fieldName].valid =
1357
1404
  tests[testObject.fieldName].valid === false
1358
1405
  ? false
1359
- : shouldAddValidProp(testObject.fieldName);
1406
+ : shouldAddValidProperty(testObject.fieldName);
1360
1407
  }
1361
1408
  /**
1362
1409
  * Appends to a group object if within a group
@@ -1368,6 +1415,10 @@
1368
1415
  }
1369
1416
  groups[groupName] = groups[groupName] || {};
1370
1417
  groups[groupName][testObject.fieldName] = appendTestObject(groups[groupName], testObject);
1418
+ groups[groupName][testObject.fieldName].valid =
1419
+ groups[groupName][testObject.fieldName].valid === false
1420
+ ? false
1421
+ : shouldAddValidPropertyInGroup(groupName, testObject.fieldName);
1371
1422
  }
1372
1423
  /**
1373
1424
  * Counts the failed tests and adds global counters
@@ -1506,9 +1557,30 @@
1506
1557
  }
1507
1558
 
1508
1559
  function isValid(fieldName) {
1509
- var _a;
1510
1560
  var summary = useSummary();
1511
- return fieldName ? Boolean((_a = summary.tests[fieldName]) === null || _a === void 0 ? void 0 : _a.valid) : summary.valid;
1561
+ return fieldName
1562
+ ? Boolean(isFieldValid(summary.tests, fieldName))
1563
+ : summary.valid;
1564
+ }
1565
+ function isValidByGroup(groupName, fieldName) {
1566
+ var summary = useSummary();
1567
+ var group = summary.groups[groupName];
1568
+ if (!group) {
1569
+ return false;
1570
+ }
1571
+ if (fieldName) {
1572
+ return isFieldValid(group, fieldName);
1573
+ }
1574
+ for (var fieldName_1 in group) {
1575
+ if (!isFieldValid(group, fieldName_1)) {
1576
+ return false;
1577
+ }
1578
+ }
1579
+ return true;
1580
+ }
1581
+ function isFieldValid(testContainer, fieldName) {
1582
+ var _a;
1583
+ return !!((_a = testContainer[fieldName]) === null || _a === void 0 ? void 0 : _a.valid);
1512
1584
  }
1513
1585
 
1514
1586
  var cache$1 = createCache(1);
@@ -1529,6 +1601,7 @@
1529
1601
  hasWarnings: context.bind(ref, hasWarnings),
1530
1602
  hasWarningsByGroup: context.bind(ref, hasWarningsByGroup),
1531
1603
  isValid: context.bind(ref, isValid),
1604
+ isValidByGroup: context.bind(ref, isValidByGroup),
1532
1605
  suiteName: suiteName
1533
1606
  });
1534
1607
  }));
@@ -2244,30 +2317,23 @@
2244
2317
  return nextTest;
2245
2318
  }
2246
2319
  function removeAllNextTestsInIsolate() {
2247
- var _a = useTestObjects(), testObjects = _a[0], setTestObjects = _a[1];
2248
- var prevTests = testObjects.prev;
2249
- var current = getCurrent(prevTests, usePath());
2250
- var cursorAt = useCursorAt();
2251
- current.splice(cursorAt);
2320
+ var cursorAt = useCursor().current();
2252
2321
  // We actually don't mind mutating the state directly (as can be seen above). There is no harm in it
2253
2322
  // since we're only touching the "prev" state. The reason we still use the setter function is
2254
2323
  // to prevent future headaches if we ever do need to rely on prev-state immutability.
2255
- setTestObjects(function (_a) {
2256
- var current = _a.current;
2257
- return ({
2258
- prev: prevTests,
2259
- current: current
2260
- });
2324
+ useSetTests(function (current) {
2325
+ current.splice(cursorAt);
2326
+ return current;
2261
2327
  });
2262
2328
  }
2263
2329
  function useSetTestAtCursor(testObject) {
2264
- var cursorPath = usePath();
2330
+ var cursorPath = useCurrentPath();
2265
2331
  useSetTests(function (tests) {
2266
2332
  return setValueAtPath(tests, cursorPath, testObject);
2267
2333
  });
2268
2334
  }
2269
2335
  function useGetTestAtCursor(tests) {
2270
- var cursorPath = usePath();
2336
+ var cursorPath = useCurrentPath();
2271
2337
  return valueAtPath(tests, cursorPath);
2272
2338
  }
2273
2339
  function testReorderDetected(prevTest, newTest) {
@@ -2291,16 +2357,17 @@
2291
2357
 
2292
2358
  // eslint-disable-next-line max-statements
2293
2359
  function registerPrevRunTest(testObject) {
2360
+ var cursor = useCursor();
2294
2361
  if (shouldSkipBasedOnMode(testObject)) {
2295
2362
  testObject.skip();
2296
2363
  useTestAtCursor(testObject);
2297
- moveForward();
2364
+ cursor.next();
2298
2365
  return testObject;
2299
2366
  }
2300
2367
  var prevRunTest = useTestAtCursor(testObject);
2301
2368
  if (isOmitted()) {
2302
2369
  prevRunTest.omit();
2303
- moveForward();
2370
+ cursor.next();
2304
2371
  return prevRunTest;
2305
2372
  }
2306
2373
  if (isExcluded(testObject)) {
@@ -2309,13 +2376,13 @@
2309
2376
  // This mostly means that we're probably giving
2310
2377
  // up on this async test intentionally.
2311
2378
  prevRunTest.skip(isExcludedIndividually());
2312
- moveForward();
2379
+ cursor.next();
2313
2380
  return prevRunTest;
2314
2381
  }
2315
2382
  cancelOverriddenPendingTest(prevRunTest, testObject);
2316
2383
  useSetTestAtCursor(testObject);
2317
- moveForward();
2318
2384
  registerTestObjectByTier(testObject);
2385
+ cursor.next();
2319
2386
  return testObject;
2320
2387
  }
2321
2388
  function registerTestObjectByTier(testObject) {
@@ -2338,7 +2405,7 @@
2338
2405
  for (var _i = 1; _i < arguments.length; _i++) {
2339
2406
  args[_i - 1] = arguments[_i];
2340
2407
  }
2341
- var cursorAt = useCursorAt();
2408
+ var cursorAt = useCursor().current();
2342
2409
  var _a = args.reverse(), deps = _a[0], testFn = _a[1], msg = _a[2];
2343
2410
  // Implicit dependency for more specificity
2344
2411
  var dependencies = [useSuiteId(), fieldName, cursorAt].concat(deps);
@@ -2400,7 +2467,7 @@
2400
2467
  ctx.currentTest.warn();
2401
2468
  }
2402
2469
 
2403
- var VERSION = "4.3.4";
2470
+ var VERSION = "4.4.1";
2404
2471
 
2405
2472
  exports.VERSION = VERSION;
2406
2473
  exports.context = context;
@@ -1 +1 @@
1
- "use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n){return"function"==typeof n}function e(n){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function r(n){return null===n}function u(n){return void 0===n}function i(n){return null===n||u(n)}function o(n){return String(n)===n}function s(n,t){return o(n)&&o(t)&&n.endsWith(t)}function a(n,t){return n===t}function c(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function f(n,t){return c(n)&&c(t)&&Number(n)>Number(t)}function l(n,t){return c(n)&&c(t)&&Number(n)===Number(t)}function d(n,t){return l(n,t)||f(n,t)}function p(n){return!!Array.isArray(n)}function v(n,t){return!!(p(t)||o(t)&&o(n))&&-1!==t.indexOf(n)}function h(n,t){return c(n)&&c(t)&&Number(n)<Number(t)}function g(n,t){return l(n,t)||h(n,t)}function N(n,t,e){return d(n,t)&&g(n,e)}function E(n){return i(n)||o(n)&&!n.trim()}function m(n){return!!n===n}function y(n){return"number"==typeof n}function b(n,t){return l(n.length,t)}function O(n){return!n||(y(n)?0===n:Object.prototype.hasOwnProperty.call(n,"length")?b(n,0):"object"==typeof n&&b(Object.keys(n),0))}function S(n,t){return n in t}function R(n){return Number.isNaN(n)}function T(n){return f(n,0)}function C(n){return!!n}function I(n,t){if(i(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function _(n,t){return f(n.length,t)}function A(n,t){return t instanceof RegExp?t.test(n):!!o(t)&&new RegExp(t).test(n)}function k(n,t){return o(n)&&o(t)&&n.startsWith(t)}function L(n){for(var e in Rt){var r=Rt[e];t(r)&&n(e,r)}}function w(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return t(n)?n.apply(void 0,e):n}function W(n,t){var e;return null!==(e=w(n))&&void 0!==e?e:t}function F(n,t){if(!n)throw t instanceof String?t.valueOf():Error(t?w(t):t)}function P(n){function t(t,u){var i,o,s=e();return t=et({},s||{},null!==(i=w(n,t,s))&&void 0!==i?i:t),i=r.ctx=Object.freeze(t),r.ancestry.unshift(i),u=u(i),r.ancestry.shift(),r.ctx=null!==(o=r.ancestry[0])&&void 0!==o?o:null,u}function e(){return r.ctx}var r={ancestry:[]};return{bind:function(n,e){return function(){for(var r=[],u=0;u<arguments.length;u++)r[u]=arguments[u];return t(n,(function(){return e.apply(void 0,r)}))}},run:t,use:e,useX:function(n){return F(r.ctx,W(n,"Context was used after it was closed")),r.ctx}}}function x(){return null}function U(n,t,e){if(e||2===arguments.length)for(var r,u=0,i=t.length;u<i;u++)!r&&u in t||(r||(r=Array.prototype.slice.call(t,0,u)),r[u]=t[u]);return n.concat(r||Array.prototype.slice.call(t))}function X(){try{return t(Proxy)}catch(n){return!1}}function G(n,t){return n={pass:n},t&&(n.message=t),n}function D(n,t,e){for(var r=[],u=3;u<arguments.length;u++)r[u-3]=arguments[u];return F(m(n)||n&&m(n.pass),"Incorrect return value for rule: "+JSON.stringify(n)),m(n)?G(n):G(n.pass,w.apply(void 0,U([n.message,t,e],r,!1)))}function q(n){function t(t,e,r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];return F((i=D.apply(void 0,U([Tt.run({value:n},(function(){return e.apply(void 0,U([n],u,!1))})),r,n],u,!1))).pass,O(i.message)?"enforce/".concat(r," failed with ").concat(JSON.stringify(n)):new String(i.message)),t}}var e={};if(!X())return L((function(n,r){e[n]=t(e,r,n)})),e;var r=new Proxy(e,{get:function(n,e){if(n=Rt[e])return t(r,n,e)}});return r}function j(n,t){function e(n){r=!0,u=n}for(var r=!1,u=null,i=0;i<n.length;i++)if(t(n[i],e,i),r)return u}function K(n){var t,e=[];return function n(r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];var o=Rt[r];e.push((function(n){return D.apply(void 0,U([o.apply(void 0,U([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return W(j(e,(function(e,r){var u,i=Tt.run({value:n},(function(){return e(n)}));i.pass||r(G(!!i.pass,null!==(u=w(t,n,i.message))&&void 0!==u?u:i.message))})),G(!0))},test:function(n){return s.run(n).pass},message:function(n){return n&&(t=n),s}};return X()?s=new Proxy(s,{get:function(t,e){return Rt[e]?n(e):t[e]}}):(L((function(t){s[t]=n(t)})),s)}}(n)}function B(n){function t(n){return e.findIndex((function(t){var e=t[0];return b(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))}void 0===n&&(n=1);var e=[],r=function(t,u){var i=r.get(t);return i?i[1]:(u=u(),e.unshift([t.concat(),u]),_(e,n)&&(e.length=n),u)};return r.invalidate=function(n){-1<(n=t(n))&&e.splice(n,1)},r.get=function(n){return e[t(n)]||null},r}function H(n){return(n=[].concat(n))[n.length-1]}function M(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];p(u)?e.push(M(u,t)):(u=t(u),rt(u)&&e.push(u))}return e}function V(n){return[].concat(n).reduce((function(n,t){return p(t)?n.concat(V(t)):[].concat(n).concat(t)}),[])}function J(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=W(n[r],[]),n=n[r]}return n}function Y(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return H(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,H(t)},removeLevel:function(){t.pop()},reset:n}}function z(){return At.useX().stateRef}function Q(n){return z().optionalFields()[0][n]}function Z(n,t){(0,z().optionalFields()[1])((function(e){var r;return et(e,((r={})[n]=w(t,e[n]),r))}))}function $(n){var t;return null===(t=Q(n))||void 0===t?void 0:t[0]}function nn(){tn((function(n){return n}))}function tn(n){(0,z().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function en(){return rn().filter((function(n){return n.isPending()}))}function rn(){var n=z().testObjects()[0].current;return kt([n],(function(){return V(n)}))}function un(n){function e(n,t,e){return u.references.push(),r(n,w(t,e)),function(){return[u.references[n],function(t){return r(n,w(t,u.references[n]))}]}}function r(e,r){var o=u.references[e];u.references[e]=r,t(e=i[e][1])&&e(r,o),t(n)&&n()}var u={references:[]},i=[];return{registerStateKey:function(n,t){var r=i.length;return i.push([n,t]),e(r,n)},reset:function(){var n=u.references;u.references=[],i.forEach((function(t,r){return e(r,t[0],n[r])}))}}}function on(n,t){var e=t.suiteId;return t=t.suiteName,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(e),suiteName:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}function sn(n){setTimeout((function(){throw Error(n)}),0)}function an(){return At.useX().testCursor.getCursor()}function cn(){return At.useX().testCursor.next()}function fn(n,e){n=void 0===(n=n.type)?$n.DEFAULT:n,F(t(e));var r={current:{},prev:{}},u=an();return At.run({isolate:{type:n,keys:r}},(function(){At.useX().testCursor.addLevel(),r.prev=function(){var n=z().testObjects()[0].prev;return[].concat(J(n,an())).reduce((function(n,t){return t instanceof Wt&&!i(t.key)?(n[t.key]=t,n):n}),{})}(),tn((function(n){return J(n,u)[H(u)]=[],n}));var n=e();return At.useX().testCursor.removeLevel(),cn(),n}))}function ln(n){return n===Lt.ERRORS?wt.ERROR_COUNT:wt.WARN_COUNT}function dn(n,t){return!(!t||n.fieldName!==t)}function pn(n,t){return rn().some((function(e){return e.hasFailures()?t&&!dn(e,t)?e=!1:(e=e.warns(),e=n===Lt.WARNINGS==!!e):e=!1,e}))}function vn(n){if(n)var t,e=!0===(null===(t=Q(n))||void 0===t?void 0:t[1]);else e=!1;return!!e||!pn(Lt.ERRORS,n)&&(!O(e=rn())&&!function(n){return Nt(en().filter((function(t){return!(n&&!dn(t,n))&&!0!==$(t.fieldName)})))}(n)&&function(n){return rn().every((function(t){return!(!n||dn(t,n))||(!0===$(t.fieldName)||t.isTested()||t.isOmitted())}))}(n))}function hn(){var n=At.useX().summary;return F(n),n}function gn(n,t){function e(n){var t=ln(n);i[t]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||et({errorCount:0,warnCount:0,testCount:0},{errors:[],warnings:[]});var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e(Lt.ERRORS):t.isWarning()&&e(Lt.WARNINGS)),i}function Nn(n,t,e){var r;return(null===(r=null==n?void 0:n[e])||void 0===r?void 0:r[t])||[]}function En(n,t){var e,r={},u=ln(t);for(e in n)T(n[e][u])&&(r[e]=n[e][t]||[]);return r}function mn(n){return bn(Lt.ERRORS,n)}function yn(n){return bn(Lt.WARNINGS,n)}function bn(n,t){var e=hn().tests;return t?Nn(e,n,t):En(e,n)}function On(n,t){return Rn(n,Lt.ERRORS,t)}function Sn(n,t){return Rn(n,Lt.WARNINGS,t)}function Rn(n,t,e){return n=hn().groups[n],e?Nn(n,t,e):En(n,t)}function Tn(n){return In(wt.ERROR_COUNT,n)}function Cn(n){return In(wt.WARN_COUNT,n)}function In(n,t){var e,r=hn();return T(t?null===(e=r.tests[t])||void 0===e?void 0:e[n]:r[n])}function _n(n,t){return kn(Lt.ERRORS,n,t)}function An(n,t){return kn(Lt.WARNINGS,n,t)}function kn(n,t,e){var r,u,i=hn();if(n=ln(n),!(t=i.groups[t]))return!1;if(e)return T(null===(r=t[e])||void 0===r?void 0:r[n]);for(var o in t)if(T(null===(u=t[o])||void 0===u?void 0:u[n]))return!0;return!1}function Ln(n){var t,e=hn();return n?!(null===(t=e.tests[n])||void 0===t||!t.valid):e.valid}function wn(){var n=rn(),t={stateRef:z()};return Kt([n],At.bind(t,(function(){var n=function(){var n=rn(),t=et({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{},valid:!1});return n.reduce((function(n,t){var e=n.tests;e[t.fieldName]=gn(e,t),e[t.fieldName].valid=!1!==e[t.fieldName].valid&&vn(t.fieldName),e=n.groups;var r=t.groupName;return r&&(e[r]=e[r]||{},e[r][t.fieldName]=gn(e[r],t)),n}),t),t.valid=vn(),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}(t)}(),t=z().suiteName()[0],e={summary:n};return et(n,{getErrors:At.bind(e,mn),getErrorsByGroup:At.bind(e,On),getWarnings:At.bind(e,yn),getWarningsByGroup:At.bind(e,Sn),hasErrors:At.bind(e,Tn),hasErrorsByGroup:At.bind(e,_n),hasWarnings:At.bind(e,Cn),hasWarningsByGroup:At.bind(e,An),isValid:At.bind(e,Ln),suiteName:t})})))}function Wn(n){var t=en();return!O(t)&&(n?t.some((function(t){return dn(t,n)})):Nt(t))}function Fn(){var n=rn(),t={stateRef:z()};return Bt([n],At.bind(t,(function(){return et({},wn(),{done:At.bind(t,Ht)})})))}function Pn(n,e,r){return!(t(n)&&(!e||r.tests[e]&&!O(r.tests[e].testCount)))}function xn(n){return!(Wn()&&(!n||Wn(n)))}function Un(n,t){(0,z().testCallbacks()[1])((function(e){return t?e.fieldCallbacks[t]=(e.fieldCallbacks[t]||[]).concat(n):e.doneCallbacks.push(n),e}))}function Xn(n){return n.forEach((function(n){return n()}))}function Gn(){var n=function(){var n={};return{emit:function(t,e){(n[t]||[]).forEach((function(n){n(e)}))},on:function(t,e){return n[t]=(n[t]||[]).concat(e),{off:function(){n[t]=(n[t]||[]).filter((function(n){return n!==e}))}}}}}();return n.on(jt.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var e=z().testCallbacks()[0].fieldCallbacks;t&&!Wn(t)&&p(e[t])&&Xn(e[t]),Wn()||n.emit(jt.ALL_RUNNING_TESTS_FINISHED)}})),n.on(jt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){function n(n){e[n.fieldName]&&(n.omit(),Z(n.fieldName,(function(n){return[n[0],!0]})))}if(!O(z().optionalFields()[0])){var e={};tn((function(r){return M(r,(function(r){if(Object.prototype.hasOwnProperty.call(e,r.fieldName))n(r);else{var u=$(r.fieldName);t(u)&&(e[r.fieldName]=u(),n(r))}return r}))}))}}()})),n.on(jt.ALL_RUNNING_TESTS_FINISHED,(function(){Xn(z().testCallbacks()[0].doneCallbacks)})),n.on(jt.REMOVE_FIELD,(function(n){rn().forEach((function(t){dn(t,n)&&(t.cancel(),function(n){tn((function(t){return M(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(jt.RESET_FIELD,(function(n){rn().forEach((function(t){dn(t,n)&&t.reset()}))})),n}function Dn(){var n=At.useX();return F(n.bus),n.bus}function qn(n){return Kn(0,"tests",n)}function jn(n){return Kn(1,"tests",n)}function Kn(n,t,e){var r=At.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){o(e)&&(r.exclusion[t][e]=0===n)}))}function Bn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Hn(){var n,t=At.useX().exclusion;for(n in t.groups)if(t.groups[n])return!0;return!1}function Mn(n){return"Wrong arguments passed to group. Group ".concat(n,".")}function Vn(n){var e=n.asyncTest,r=n.message;if(e&&t(e.then)){var u=Dn().emit,i=z(),s=At.bind({stateRef:i},(function(){nn(),u(jt.TEST_COMPLETED,n)}));i=At.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=o(t)?t:r,n.fail(),s())}));try{e.then(s,i)}catch(n){i()}}}function Jn(n){var t=z().testObjects()[0].prev;if(O(t))return Yn(n),n;var e=an();if(t=J(t,e)[H(e)],!i(n.key)){t=n.key,(e=At.useX().isolate.keys.prev[t])&&(n=e),e=n;var r=At.useX().isolate.keys.current;return i(r[t])?r[t]=e:sn('Encountered the same test key "'.concat(t,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Yn(n),n}return!Nt(e=t)||e.fieldName===n.fieldName&&e.groupName===n.groupName||(At.useX().isolate.type===$n.EACH||sn("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(t.fieldName,"\n received: ").concat(n.fieldName,'\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.')),function(){var n=z().testObjects(),t=n[1],e=n[0].prev;n=J(e,an());var r=At.useX().testCursor.cursorAt();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),t=null),Yn(n=W(t,n)),n}function Yn(n){var t=an();tn((function(e){return J(e,t)[H(t)]=n,e}))}function zn(n){var e=tt.EAGER;if(e=!(At.useX().mode[0]!==e||!pn(Lt.ERRORS,n.fieldName)))return n.skip(),Jn(n),cn(),n;if(e=Jn(n),At.useX().omitted)return e.omit(),cn(),e;if(function(n){var t=n.fieldName;if(n=n.groupName,At.useX().skipped)return!0;var e=At.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){var o=At.useX().exclusion.groups;if(o=Object.prototype.hasOwnProperty.call(o,n)?!1===o[n]:Hn())return!0;if(!0===r.groups[n])return!(i||!Bn(u)&&!1!==u[t])}return!!(n=!!Hn()&&!n)||!i&&!!Bn(u)&&!w(e[t])}(n))return e.skip(!!At.useX().skipped),cn(),e;if(n!==e&&e.fieldName===n.fieldName&&e.groupName===n.groupName&&e.isPending()&&e.cancel(),Yn(n),cn(),n.isUntested()){e=Dn();var r=function(n){return At.run({currentTest:n},(function(){return n.run()}))}(n);try{r&&t(r.then)?(n.asyncTest=r,n.setPending(),Vn(n)):e.emit(jt.TEST_COMPLETED,n)}catch(t){throw Error("Unexpected error encountered during test registration.\n Test Object: ".concat(JSON.stringify(n),".\n Error: ").concat(t,"."))}}else(e=n.asyncTest)&&t(e.then)&&(n.setPending(),Vn(n));return n}function Qn(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var u=t(e[1])?e:U([void 0],e,!0);e=u[0],r=u[1],u=u[2],F(o(n),Zn("fieldName","string")),F(t(r),Zn("Test callback","function"));var i=At.useX();return zn(e=new Wt(n,r,{message:e,groupName:i.groupName,key:u}))}function Zn(n,t){return"Incompatible params passed to test function. ".concat(n," must be a ").concat(t)}var $n,nt,tt,et=Object.assign,rt=e(r),ut=e(u),it=e(i),ot=e(s),st=e(a),at=e(c),ct=e(l),ft=e(p),lt=e(v),dt=e(N),pt=e(E),vt=e(m),ht=e(y),gt=e(b),Nt=e(O),Et=e(S),mt=e(R),yt=e(o),bt=e(C),Ot=e(I),St=e(A),Rt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:ot,doesNotStartWith:e(k),endsWith:s,equals:a,greaterThan:f,greaterThanOrEquals:d,gt:f,gte:d,inside:v,isArray:p,isBetween:N,isBlank:E,isBoolean:m,isEmpty:O,isEven:function(n){return!!c(n)&&0==n%2},isFalsy:bt,isKeyOf:S,isNaN:R,isNegative:function(n){return h(n,0)},isNotArray:ft,isNotBetween:dt,isNotBlank:pt,isNotBoolean:vt,isNotEmpty:Nt,isNotKeyOf:Et,isNotNaN:mt,isNotNull:rt,isNotNullish:it,isNotNumber:ht,isNotNumeric:at,isNotString:yt,isNotUndefined:ut,isNotValueOf:Ot,isNull:r,isNullish:i,isNumber:y,isNumeric:c,isOdd:function(n){return!!c(n)&&0!=n%2},isPositive:T,isString:o,isTruthy:C,isUndefined:u,isValueOf:I,lengthEquals:b,lengthNotEquals:gt,lessThan:h,lessThanOrEquals:g,longerThan:_,longerThanOrEquals:function(n,t){return d(n.length,t)},lt:h,lte:g,matches:A,notEquals:st,notInside:lt,notMatches:St,numberEquals:l,numberNotEquals:ct,shorterThan:function(n,t){return h(n.length,t)},shorterThanOrEquals:function(n,t){return g(n.length,t)},startsWith:k},Tt=P((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?et(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:et(e,{parent:x})})),Ct=function(){function n(){if(!X())return L((function(n){t[n]=K(n)})),et(q,t)}var t={context:function(){return Tt.useX()},extend:function(t){et(Rt,t),n()}};return n(),new Proxy(et(q,t),{get:function(n,t){return t in n?n[t]:Rt[t]?K(t):void 0}})}(),It=(nt=0,function(){return"".concat(nt++)});!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.OMIT_WHEN=4]="OMIT_WHEN",n[n.GROUP=5]="GROUP"}($n||($n={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(tt||(tt={}));var _t,At=P((function(n,t){return t?null:et({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:$n.DEFAULT,keys:{current:{},prev:{}}},mode:[tt.ALL],testCursor:Y()},n)})),kt=B();!function(n){n.Error="error",n.Warning="warning"}(_t||(_t={}));var Lt,wt,Wt=function(){function n(n,t,e){var r=void 0===e?{}:e;e=r.message;var u=r.groupName;r=r.key,this.key=null,this.id=It(),this.severity=_t.Error,this.status=Ft,this.fieldName=n,this.testFn=t,u&&(this.groupName=u),e&&(this.message=e),r&&(this.key=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,u(this.message)&&o(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==qt||(this.status=n)},n.prototype.warns=function(){return this.severity===_t.Warning},n.prototype.setPending=function(){this.setStatus(Gt)},n.prototype.fail=function(){this.setStatus(this.warns()?Ut:xt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Xt)},n.prototype.warn=function(){this.severity=_t.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(Pt)},n.prototype.cancel=function(){this.setStatus(Dt),nn()},n.prototype.reset=function(){this.status=Ft,nn()},n.prototype.omit=function(){this.setStatus(qt)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},n.prototype.isPending=function(){return this.statusEquals(Gt)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(qt)},n.prototype.isUntested=function(){return this.statusEquals(Ft)},n.prototype.isFailing=function(){return this.statusEquals(xt)},n.prototype.isCanceled=function(){return this.statusEquals(Dt)},n.prototype.isSkipped=function(){return this.statusEquals(Pt)},n.prototype.isPassing=function(){return this.statusEquals(Xt)},n.prototype.isWarning=function(){return this.statusEquals(Ut)},n.prototype.statusEquals=function(n){return this.status===n},n}(),Ft="UNTESTED",Pt="SKIPPED",xt="FAILED",Ut="WARNING",Xt="PASSING",Gt="PENDING",Dt="CANCELED",qt="OMITTED";!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(Lt||(Lt={})),function(n){n.ERROR_COUNT="errorCount",n.WARN_COUNT="warnCount"}(wt||(wt={}));var jt,Kt=B(1),Bt=B(20),Ht=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=(n=n.reverse())[0];if(n=n[1],t=Fn(),Pn(e,n,t))return t;var r=function(){return e(wn())};return xn(n)?(r(),t):(Un(r,n),t)};!function(n){n.TEST_COMPLETED="test_completed",n.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",n.REMOVE_FIELD="remove_field",n.RESET_FIELD="reset_field",n.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running"}(jt||(jt={})),qn.group=function(n){return Kn(0,"groups",n)},jn.group=function(n){return Kn(1,"groups",n)};var Mt=et(Qn,{memo:function(n){var t=B(10);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=At.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[z().suiteId()[0],e,u].concat(i),null===(r=t.get(u))?t(u,(function(){return n(e,s,o)})):r[1].isCanceled()?(t.invalidate(u),t(u,(function(){return n(e,s,o)}))):zn(r[1])}}(Qn)});n.VERSION="4.3.4",n.context=At,n.create=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];n=n[1],F(t(r),"vest.create: Expected callback to be a function.");var u=Gn(),i=un();return n={stateRef:on(i,{suiteId:It(),suiteName:n}),bus:u},et(At.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return i.reset(),fn({type:$n.SUITE},(function(){r.apply(void 0,n)})),u.emit(jt.SUITE_CALLBACK_DONE_RUNNING),Fn()})),{get:At.bind(n,wn),remove:At.bind(n,(function(n){u.emit(jt.REMOVE_FIELD,n)})),reset:i.reset,resetField:At.bind(n,(function(n){u.emit(jt.RESET_FIELD,n)}))})},n.each=function(n,e){F(t(e),"each callback must be a function"),fn({type:$n.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.eager=function(){var n=tt.EAGER;At.useX().mode[0]=n},n.enforce=Ct,n.group=function(n,e){F(o(n),Mn("name must be a string")),F(t(e),Mn("callback must be a function")),fn({type:$n.GROUP},(function(){At.run({groupName:n},e)}))},n.include=function(n){var t=At.useX(),e=t.inclusion;return t=t.exclusion,F(o(n)),e[n]=W(t.tests[n],!0),{when:function(t){var e=At.useX(),r=e.exclusion;e.inclusion[n]=function(){return Object.prototype.hasOwnProperty.call(r.tests,n)?W(r.tests[n],!0):o(t)?!!r.tests[t]:w(t,w(wn))}}}},n.omitWhen=function(n,t){fn({type:$n.OMIT_WHEN},(function(){At.run({omitted:!!At.useX().omitted||w(n,w(wn))},(function(){return t()}))}))},n.only=qn,n.optional=function(n){if(p(n)||o(n))[].concat(n).forEach((function(n){Z(n,[!0,!1])}));else for(var t in n)Z(t,[n[t],!1])},n.skip=jn,n.skipWhen=function(n,t){fn({type:$n.SKIP_WHEN},(function(){At.run({skipped:!!At.useX().skipped||w(n,w(wn))},(function(){return t()}))}))},n.test=Mt,n.warn=function(){var n=At.useX("warn hook called outside of a running suite.");F(n.currentTest,"warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
1
+ "use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n){return"function"==typeof n}function e(n){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function r(n){return null===n}function u(n){return void 0===n}function i(n){return null===n||u(n)}function o(n){return String(n)===n}function s(n,t){return o(n)&&o(t)&&n.endsWith(t)}function c(n,t){return n===t}function a(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function f(n,t){return a(n)&&a(t)&&Number(n)>Number(t)}function l(n,t){return a(n)&&a(t)&&Number(n)===Number(t)}function d(n,t){return l(n,t)||f(n,t)}function p(n){return!!Array.isArray(n)}function v(n,t){return!!(p(t)||o(t)&&o(n))&&-1!==t.indexOf(n)}function h(n,t){return a(n)&&a(t)&&Number(n)<Number(t)}function N(n,t){return l(n,t)||h(n,t)}function g(n,t,e){return d(n,t)&&N(n,e)}function E(n){return i(n)||o(n)&&!n.trim()}function m(n){return!!n===n}function y(n){return"number"==typeof n}function b(n,t){return l(n.length,t)}function R(n){return!n||(y(n)?0===n:Object.prototype.hasOwnProperty.call(n,"length")?b(n,0):"object"==typeof n&&b(Object.keys(n),0))}function S(n,t){return n in t}function O(n){return Number.isNaN(n)}function T(n){return f(n,0)}function C(n){return!!n}function I(n,t){if(i(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function _(n,t){return f(n.length,t)}function k(n,t){return t instanceof RegExp?t.test(n):!!o(t)&&new RegExp(t).test(n)}function A(n,t){return o(n)&&o(t)&&n.startsWith(t)}function w(n){for(var e in xt){var r=xt[e];t(r)&&n(e,r)}}function x(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return t(n)?n.apply(void 0,e):n}function W(n,t){var e;return null!==(e=x(n))&&void 0!==e?e:t}function F(n,t){if(!n)throw t instanceof String?t.valueOf():Error(t?x(t):t)}function L(n){function t(t,u){var i,o,s=e();return t=ft({},s||{},null!==(i=x(n,t,s))&&void 0!==i?i:t),i=r.ctx=Object.freeze(t),r.ancestry.unshift(i),u=u(i),r.ancestry.shift(),r.ctx=null!==(o=r.ancestry[0])&&void 0!==o?o:null,u}function e(){return r.ctx}var r={ancestry:[]};return{bind:function(n,e){return function(){for(var r=[],u=0;u<arguments.length;u++)r[u]=arguments[u];return t(n,(function(){return e.apply(void 0,r)}))}},run:t,use:e,useX:function(n){return F(r.ctx,W(n,"Context was used after it was closed")),r.ctx}}}function P(){return null}function U(n,t,e){if(e||2===arguments.length)for(var r,u=0,i=t.length;u<i;u++)!r&&u in t||(r||(r=Array.prototype.slice.call(t,0,u)),r[u]=t[u]);return n.concat(r||Array.prototype.slice.call(t))}function G(){try{return t(Proxy)}catch(n){return!1}}function D(n,t){return n={pass:n},t&&(n.message=t),n}function X(n,t,e){for(var r=[],u=3;u<arguments.length;u++)r[u-3]=arguments[u];return F(m(n)||n&&m(n.pass),"Incorrect return value for rule: "+JSON.stringify(n)),m(n)?D(n):D(n.pass,x.apply(void 0,U([n.message,t,e],r,!1)))}function q(n){function t(t,e,r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];return F((i=X.apply(void 0,U([Wt.run({value:n},(function(){return e.apply(void 0,U([n],u,!1))})),r,n],u,!1))).pass,R(i.message)?"enforce/".concat(r," failed with ").concat(JSON.stringify(n)):new String(i.message)),t}}var e={};if(!G())return w((function(n,r){e[n]=t(e,r,n)})),e;var r=new Proxy(e,{get:function(n,e){if(n=xt[e])return t(r,n,e)}});return r}function j(n,t){function e(n){r=!0,u=n}for(var r=!1,u=null,i=0;i<n.length;i++)if(t(n[i],e,i),r)return u}function K(n){var t,e=[];return function n(r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];var o=xt[r];e.push((function(n){return X.apply(void 0,U([o.apply(void 0,U([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return W(j(e,(function(e,r){var u,i=Wt.run({value:n},(function(){return e(n)}));i.pass||r(D(!!i.pass,null!==(u=x(t,n,i.message))&&void 0!==u?u:i.message))})),D(!0))},test:function(n){return s.run(n).pass},message:function(n){return n&&(t=n),s}};return G()?s=new Proxy(s,{get:function(t,e){return xt[e]?n(e):t[e]}}):(w((function(t){s[t]=n(t)})),s)}}(n)}function B(n){function t(n){return e.findIndex((function(t){var e=t[0];return b(n,e.length)&&n.every((function(n,t){return n===e[t]}))}))}void 0===n&&(n=1);var e=[],r=function(t,u){var i=r.get(t);return i?i[1]:(u=u(),e.unshift([t.concat(),u]),_(e,n)&&(e.length=n),u)};return r.invalidate=function(n){-1<(n=t(n))&&e.splice(n,1)},r.get=function(n){return e[t(n)]||null},r}function H(n){return(n=[].concat(n))[n.length-1]}function M(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];p(u)?e.push(M(u,t)):(u=t(u),lt(u)&&e.push(u))}return e}function V(n){return[].concat(n).reduce((function(n,t){return p(t)?n.concat(V(t)):[].concat(n).concat(t)}),[])}function J(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=W(n[r],[]),n=n[r]}return n}function Y(){var n=0;return{current:function(){return n},next:function(){n++}}}function z(n,t){return void 0===t&&(t=[]),{cursor:Y(),keys:{current:{},prev:{}},path:t,type:n}}function Q(){return Ut.useX().stateRef}function Z(n){return Q().optionalFields()[0][n]}function $(n,t){(0,Q().optionalFields()[1])((function(e){var r;return ft(e,((r={})[n]=x(t,e[n]),r))}))}function nn(n){var t;return null===(t=Z(n))||void 0===t?void 0:t[0]}function tn(){en((function(n){return n}))}function en(n){(0,Q().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function rn(){return un().filter((function(n){return n.isPending()}))}function un(){var n=Q().testObjects()[0].current;return Gt([n],(function(){return V(n)}))}function on(n){function e(n,t,e){return u.references.push(),r(n,x(t,e)),function(){return[u.references[n],function(t){return r(n,x(t,u.references[n]))}]}}function r(e,r){var o=u.references[e];u.references[e]=r,t(e=i[e][1])&&e(r,o),t(n)&&n()}var u={references:[]},i=[];return{registerStateKey:function(n,t){var r=i.length;return i.push([n,t]),e(r,n)},reset:function(){var n=u.references;u.references=[],i.forEach((function(t,r){return e(r,t[0],n[r])}))}}}function sn(n,t){var e=t.suiteId;return t=t.suiteName,{optionalFields:n.registerStateKey((function(){return{}})),suiteId:n.registerStateKey(e),suiteName:n.registerStateKey(t),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(n){return{prev:n?n.current:[],current:[]}}))}}function cn(n){setTimeout((function(){throw Error(n)}),0)}function an(n,e){n=void 0===(n=n.type)?st.DEFAULT:n,F(t(e));var r=z(n,ln());return n=Ut.run({isolate:r},(function(){return r.keys.prev=function(){var n=Q().testObjects()[0].prev;return[].concat(J(n,ln())).reduce((function(n,t){return t instanceof qt&&!i(t.key)?(n[t.key]=t,n):n}),{})}(),en((function(n){var t=r.path;return J(n,t)[H(t)]=[],n})),e()})),fn().cursor.next(),n}function fn(){return Ut.useX().isolate}function ln(){var n=fn();return n.path.concat(n.cursor.current())}function dn(n){return n===Dt.ERRORS?Xt.ERROR_COUNT:Xt.WARN_COUNT}function pn(n,t){return!(!t||n.fieldName!==t)}function vn(n,t){return un().some((function(e){return hn(e,n,t)}))}function hn(n,t,e){return(e=!n.hasFailures()||e&&!pn(n,e))||(n=n.warns(),e=t===Dt.WARNINGS!=!!n),!e}function Nn(n){return!!gn(n)||!vn(Dt.ERRORS,n)&&(!R(un())&&!function(n){return Tt(rn().filter((function(t){return En(t,n)})))}(n)&&function(n){return un().every((function(t){return!(!n||pn(t,n))||mn(t,n)}))}(n))}function gn(n){return!!n&&!0===(null===(t=Z(n))||void 0===t?void 0:t[1]);var t}function En(n,t){return!(t&&!pn(n,t))&&!0!==nn(n.fieldName)}function mn(n,t){return!(!t||pn(n,t))||(!0===nn(n.fieldName)||n.isTested()||n.isOmitted())}function yn(){var n=Ut.useX().summary;return F(n),n}function bn(){var n=un(),t=ft({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{},valid:!1});return n.reduce((function(n,t){var e=n.tests;e[t.fieldName]=Rn(e,t),e[t.fieldName].valid=!1!==e[t.fieldName].valid&&Nn(t.fieldName);var r=n.groups,u=t.groupName;return u&&(r[u]=r[u]||{},r[u][t.fieldName]=Rn(r[u],t),e=r[u][t.fieldName],!1===r[u][t.fieldName].valid?t=!1:t=!!gn(t=t.fieldName)||!function(n,t,e){return un().some((function(r){return!Qt(r,t)&&hn(r,n,e)}))}(Dt.ERRORS,u,t)&&!function(n,t){return Tt(rn().filter((function(e){return!Qt(e,n)&&En(e,t)})))}(u,t)&&function(n,t){return un().every((function(e){return!!Qt(e,n)||mn(e,t)}))}(u,t),e.valid=t),n}),t),t.valid=Nn(),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}(t)}function Rn(n,t){function e(n){var t=dn(n);i[t]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||ft({errorCount:0,warnCount:0,testCount:0},{errors:[],warnings:[]});var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e(Dt.ERRORS):t.isWarning()&&e(Dt.WARNINGS)),i}function Sn(n,t,e){var r;return(null===(r=null==n?void 0:n[e])||void 0===r?void 0:r[t])||[]}function On(n,t){var e,r={},u=dn(t);for(e in n)T(n[e][u])&&(r[e]=n[e][t]||[]);return r}function Tn(n){return In(Dt.ERRORS,n)}function Cn(n){return In(Dt.WARNINGS,n)}function In(n,t){var e=yn().tests;return t?Sn(e,n,t):On(e,n)}function _n(n,t){return An(n,Dt.ERRORS,t)}function kn(n,t){return An(n,Dt.WARNINGS,t)}function An(n,t,e){return n=yn().groups[n],e?Sn(n,t,e):On(n,t)}function wn(n){return Wn(Xt.ERROR_COUNT,n)}function xn(n){return Wn(Xt.WARN_COUNT,n)}function Wn(n,t){var e,r=yn();return T(t?null===(e=r.tests[t])||void 0===e?void 0:e[n]:r[n])}function Fn(n,t){return Pn(Dt.ERRORS,n,t)}function Ln(n,t){return Pn(Dt.WARNINGS,n,t)}function Pn(n,t,e){var r,u,i=yn();if(n=dn(n),!(t=i.groups[t]))return!1;if(e)return T(null===(r=t[e])||void 0===r?void 0:r[n]);for(var o in t)if(T(null===(u=t[o])||void 0===u?void 0:u[n]))return!0;return!1}function Un(n){var t=yn();return n?!!Dn(t.tests,n):t.valid}function Gn(n,t){if(!(n=yn().groups[n]))return!1;if(t)return Dn(n,t);for(var e in n)if(!Dn(n,e))return!1;return!0}function Dn(n,t){var e;return!(null===(e=n[t])||void 0===e||!e.valid)}function Xn(){var n=un(),t={stateRef:Q()};return Zt([n],Ut.bind(t,(function(){var n=bn(),t=Q().suiteName()[0],e={summary:n};return ft(n,{getErrors:Ut.bind(e,Tn),getErrorsByGroup:Ut.bind(e,_n),getWarnings:Ut.bind(e,Cn),getWarningsByGroup:Ut.bind(e,kn),hasErrors:Ut.bind(e,wn),hasErrorsByGroup:Ut.bind(e,Fn),hasWarnings:Ut.bind(e,xn),hasWarningsByGroup:Ut.bind(e,Ln),isValid:Ut.bind(e,Un),isValidByGroup:Ut.bind(e,Gn),suiteName:t})})))}function qn(n){var t=rn();return!R(t)&&(n?t.some((function(t){return pn(t,n)})):Tt(t))}function jn(){var n=un(),t={stateRef:Q()};return $t([n],Ut.bind(t,(function(){return ft({},Xn(),{done:Ut.bind(t,ne)})})))}function Kn(n,e,r){return!(t(n)&&(!e||r.tests[e]&&!R(r.tests[e].testCount)))}function Bn(n){return!(qn()&&(!n||qn(n)))}function Hn(n,t){(0,Q().testCallbacks()[1])((function(e){return t?e.fieldCallbacks[t]=(e.fieldCallbacks[t]||[]).concat(n):e.doneCallbacks.push(n),e}))}function Mn(n){return n.forEach((function(n){return n()}))}function Vn(){var n=function(){var n={};return{emit:function(t,e){(n[t]||[]).forEach((function(n){n(e)}))},on:function(t,e){return n[t]=(n[t]||[]).concat(e),{off:function(){n[t]=(n[t]||[]).filter((function(n){return n!==e}))}}}}}();return n.on(zt.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var e=Q().testCallbacks()[0].fieldCallbacks;t&&!qn(t)&&p(e[t])&&Mn(e[t]),qn()||n.emit(zt.ALL_RUNNING_TESTS_FINISHED)}})),n.on(zt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){function n(n){e[n.fieldName]&&(n.omit(),$(n.fieldName,(function(n){return[n[0],!0]})))}if(!R(Q().optionalFields()[0])){var e={};en((function(r){return M(r,(function(r){if(Object.prototype.hasOwnProperty.call(e,r.fieldName))n(r);else{var u=nn(r.fieldName);t(u)&&(e[r.fieldName]=u(),n(r))}return r}))}))}}()})),n.on(zt.ALL_RUNNING_TESTS_FINISHED,(function(){Mn(Q().testCallbacks()[0].doneCallbacks)})),n.on(zt.REMOVE_FIELD,(function(n){un().forEach((function(t){pn(t,n)&&(t.cancel(),function(n){en((function(t){return M(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(zt.RESET_FIELD,(function(n){un().forEach((function(t){pn(t,n)&&t.reset()}))})),n}function Jn(){var n=Ut.useX();return F(n.bus),n.bus}function Yn(n){return Qn(0,"tests",n)}function zn(n){return Qn(1,"tests",n)}function Qn(n,t,e){var r=Ut.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){o(e)&&(r.exclusion[t][e]=0===n)}))}function Zn(n){for(var t in n)if(!0===n[t])return!0;return!1}function $n(){var n,t=Ut.useX().exclusion;for(n in t.groups)if(t.groups[n])return!0;return!1}function nt(n){return"Wrong arguments passed to group. Group ".concat(n,".")}function tt(n){var e=n.asyncTest,r=n.message;if(e&&t(e.then)){var u=Jn().emit,i=Q(),s=Ut.bind({stateRef:i},(function(){tn(),u(zt.TEST_COMPLETED,n)}));i=Ut.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=o(t)?t:r,n.fail(),s())}));try{e.then(s,i)}catch(n){i()}}}function et(n){var t=Q().testObjects()[0].prev;if(R(t))return rt(n),n;var e=ln();if(t=J(t,e)[H(e)],!i(n.key)){t=n.key,(e=fn().keys.prev[t])&&(n=e),e=n;var r=fn().keys.current;return i(r[t])?r[t]=e:cn('Encountered the same test key "'.concat(t,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),rt(n),n}return!Tt(e=t)||e.fieldName===n.fieldName&&e.groupName===n.groupName||(fn().type===st.EACH||cn("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(t.fieldName,"\n received: ").concat(n.fieldName,'\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.')),function(){var n=fn().cursor.current();en((function(t){return t.splice(n),t}))}(),t=null),rt(n=W(t,n)),n}function rt(n){var t=ln();en((function(e){return J(e,t)[H(t)]=n,e}))}function ut(n){var e=fn().cursor,r=at.EAGER;if(r=!(Ut.useX().mode[0]!==r||!vn(Dt.ERRORS,n.fieldName)))return n.skip(),et(n),e.next(),n;if(r=et(n),Ut.useX().omitted)return r.omit(),e.next(),r;if(function(n){var t=n.fieldName;if(n=n.groupName,Ut.useX().skipped)return!0;var e=Ut.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){var o=Ut.useX().exclusion.groups;if(o=Object.prototype.hasOwnProperty.call(o,n)?!1===o[n]:$n())return!0;if(!0===r.groups[n])return!(i||!Zn(u)&&!1!==u[t])}return!!(n=!!$n()&&!n)||!i&&!!Zn(u)&&!x(e[t])}(n))return r.skip(!!Ut.useX().skipped),e.next(),r;if(n!==r&&r.fieldName===n.fieldName&&r.groupName===n.groupName&&r.isPending()&&r.cancel(),rt(n),n.isUntested()){r=Jn();var u=function(n){return Ut.run({currentTest:n},(function(){return n.run()}))}(n);try{u&&t(u.then)?(n.asyncTest=u,n.setPending(),tt(n)):r.emit(zt.TEST_COMPLETED,n)}catch(t){throw Error("Unexpected error encountered during test registration.\n Test Object: ".concat(JSON.stringify(n),".\n Error: ").concat(t,"."))}}else(r=n.asyncTest)&&t(r.then)&&(n.setPending(),tt(n));return e.next(),n}function it(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var u=t(e[1])?e:U([void 0],e,!0);e=u[0],r=u[1],u=u[2],F(o(n),ot("fieldName","string")),F(t(r),ot("Test callback","function"));var i=Ut.useX();return ut(e=new qt(n,r,{message:e,groupName:i.groupName,key:u}))}function ot(n,t){return"Incompatible params passed to test function. ".concat(n," must be a ").concat(t)}var st,ct,at,ft=Object.assign,lt=e(r),dt=e(u),pt=e(i),vt=e(s),ht=e(c),Nt=e(a),gt=e(l),Et=e(p),mt=e(v),yt=e(g),bt=e(E),Rt=e(m),St=e(y),Ot=e(b),Tt=e(R),Ct=e(S),It=e(O),_t=e(o),kt=e(C),At=e(I),wt=e(k),xt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:vt,doesNotStartWith:e(A),endsWith:s,equals:c,greaterThan:f,greaterThanOrEquals:d,gt:f,gte:d,inside:v,isArray:p,isBetween:g,isBlank:E,isBoolean:m,isEmpty:R,isEven:function(n){return!!a(n)&&0==n%2},isFalsy:kt,isKeyOf:S,isNaN:O,isNegative:function(n){return h(n,0)},isNotArray:Et,isNotBetween:yt,isNotBlank:bt,isNotBoolean:Rt,isNotEmpty:Tt,isNotKeyOf:Ct,isNotNaN:It,isNotNull:lt,isNotNullish:pt,isNotNumber:St,isNotNumeric:Nt,isNotString:_t,isNotUndefined:dt,isNotValueOf:At,isNull:r,isNullish:i,isNumber:y,isNumeric:a,isOdd:function(n){return!!a(n)&&0!=n%2},isPositive:T,isString:o,isTruthy:C,isUndefined:u,isValueOf:I,lengthEquals:b,lengthNotEquals:Ot,lessThan:h,lessThanOrEquals:N,longerThan:_,longerThanOrEquals:function(n,t){return d(n.length,t)},lt:h,lte:N,matches:k,notEquals:ht,notInside:mt,notMatches:wt,numberEquals:l,numberNotEquals:gt,shorterThan:function(n,t){return h(n.length,t)},shorterThanOrEquals:function(n,t){return N(n.length,t)},startsWith:A},Wt=L((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?ft(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:ft(e,{parent:P})})),Ft=function(){function n(){if(!G())return w((function(n){t[n]=K(n)})),ft(q,t)}var t={context:function(){return Wt.useX()},extend:function(t){ft(xt,t),n()}};return n(),new Proxy(ft(q,t),{get:function(n,t){return t in n?n[t]:xt[t]?K(t):void 0}})}(),Lt=(ct=0,function(){return"".concat(ct++)});!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.OMIT_WHEN=4]="OMIT_WHEN",n[n.GROUP=5]="GROUP"}(st||(st={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(at||(at={}));var Pt,Ut=L((function(n,t){return t?null:ft({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:z(st.DEFAULT),mode:[at.ALL]},n)})),Gt=B();!function(n){n.Error="error",n.Warning="warning"}(Pt||(Pt={}));var Dt,Xt,qt=function(){function n(n,t,e){var r=void 0===e?{}:e;e=r.message;var u=r.groupName;r=r.key,this.key=null,this.id=Lt(),this.severity=Pt.Error,this.status=jt,this.fieldName=n,this.testFn=t,u&&(this.groupName=u),e&&(this.message=e),r&&(this.key=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,u(this.message)&&o(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Yt||(this.status=n)},n.prototype.warns=function(){return this.severity===Pt.Warning},n.prototype.setPending=function(){this.setStatus(Vt)},n.prototype.fail=function(){this.setStatus(this.warns()?Ht:Bt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Mt)},n.prototype.warn=function(){this.severity=Pt.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(Kt)},n.prototype.cancel=function(){this.setStatus(Jt),tn()},n.prototype.reset=function(){this.status=jt,tn()},n.prototype.omit=function(){this.setStatus(Yt)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},n.prototype.isPending=function(){return this.statusEquals(Vt)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(Yt)},n.prototype.isUntested=function(){return this.statusEquals(jt)},n.prototype.isFailing=function(){return this.statusEquals(Bt)},n.prototype.isCanceled=function(){return this.statusEquals(Jt)},n.prototype.isSkipped=function(){return this.statusEquals(Kt)},n.prototype.isPassing=function(){return this.statusEquals(Mt)},n.prototype.isWarning=function(){return this.statusEquals(Ht)},n.prototype.statusEquals=function(n){return this.status===n},n}(),jt="UNTESTED",Kt="SKIPPED",Bt="FAILED",Ht="WARNING",Mt="PASSING",Vt="PENDING",Jt="CANCELED",Yt="OMITTED";!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(Dt||(Dt={})),function(n){n.ERROR_COUNT="errorCount",n.WARN_COUNT="warnCount"}(Xt||(Xt={}));var zt,Qt=e((function(n,t){return n.groupName===t})),Zt=B(1),$t=B(20),ne=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=(n=n.reverse())[0];if(n=n[1],t=jn(),Kn(e,n,t))return t;var r=function(){return e(Xn())};return Bn(n)?(r(),t):(Hn(r,n),t)};!function(n){n.TEST_COMPLETED="test_completed",n.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",n.REMOVE_FIELD="remove_field",n.RESET_FIELD="reset_field",n.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running"}(zt||(zt={})),Yn.group=function(n){return Qn(0,"groups",n)},zn.group=function(n){return Qn(1,"groups",n)};var te=ft(it,{memo:function(n){var t=B(10);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=fn().cursor.current();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[Q().suiteId()[0],e,u].concat(i),null===(r=t.get(u))?t(u,(function(){return n(e,s,o)})):r[1].isCanceled()?(t.invalidate(u),t(u,(function(){return n(e,s,o)}))):ut(r[1])}}(it)});n.VERSION="4.4.1",n.context=Ut,n.create=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];n=n[1],F(t(r),"vest.create: Expected callback to be a function.");var u=Vn(),i=on();return n={stateRef:sn(i,{suiteId:Lt(),suiteName:n}),bus:u},ft(Ut.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return i.reset(),an({type:st.SUITE},(function(){r.apply(void 0,n)})),u.emit(zt.SUITE_CALLBACK_DONE_RUNNING),jn()})),{get:Ut.bind(n,Xn),remove:Ut.bind(n,(function(n){u.emit(zt.REMOVE_FIELD,n)})),reset:i.reset,resetField:Ut.bind(n,(function(n){u.emit(zt.RESET_FIELD,n)}))})},n.each=function(n,e){F(t(e),"each callback must be a function"),an({type:st.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.eager=function(){var n=at.EAGER;Ut.useX().mode[0]=n},n.enforce=Ft,n.group=function(n,e){F(o(n),nt("name must be a string")),F(t(e),nt("callback must be a function")),an({type:st.GROUP},(function(){Ut.run({groupName:n},e)}))},n.include=function(n){var t=Ut.useX(),e=t.inclusion;return t=t.exclusion,F(o(n)),e[n]=W(t.tests[n],!0),{when:function(t){var e=Ut.useX(),r=e.exclusion;e.inclusion[n]=function(){return Object.prototype.hasOwnProperty.call(r.tests,n)?W(r.tests[n],!0):o(t)?!!r.tests[t]:x(t,x(Xn))}}}},n.omitWhen=function(n,t){an({type:st.OMIT_WHEN},(function(){Ut.run({omitted:!!Ut.useX().omitted||x(n,x(Xn))},(function(){return t()}))}))},n.only=Yn,n.optional=function(n){if(p(n)||o(n))[].concat(n).forEach((function(n){$(n,[!0,!1])}));else for(var t in n)$(t,[n[t],!1])},n.skip=zn,n.skipWhen=function(n,t){an({type:st.SKIP_WHEN},(function(){Ut.run({skipped:!!Ut.useX().skipped||x(n,x(Xn))},(function(){return t()}))}))},n.test=te,n.warn=function(){var n=Ut.useX("warn hook called outside of a running suite.");F(n.currentTest,"warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.3.4",
2
+ "version": "4.4.1",
3
3
  "license": "MIT",
4
4
  "name": "vest",
5
5
  "author": "ealush",
@@ -1,21 +1,14 @@
1
1
  import VestTest from 'VestTest';
2
- import { useTestObjects } from 'stateHooks';
2
+ import { useSetTests } from 'stateHooks';
3
3
 
4
4
  export function emptyTestObjects(): void {
5
- const [, setTestObjects] = useTestObjects();
6
- setTestObjects(({ prev }) => ({ prev, current: [] }));
5
+ useSetTests(() => []);
7
6
  }
8
7
 
9
8
  export function setTestObjects(...args: VestTest[]): void {
10
- const [, setTestObjects] = useTestObjects();
11
- setTestObjects(({ prev }) => ({ prev, current: [...args] }));
9
+ useSetTests(() => [...args]);
12
10
  }
13
11
 
14
12
  export function addTestObject(addedTests: VestTest[] | VestTest): void {
15
- const [, setTestObjects] = useTestObjects();
16
-
17
- setTestObjects(({ prev, current }) => ({
18
- prev,
19
- current: current.concat(addedTests),
20
- }));
13
+ useSetTests(tests => tests.concat(addedTests));
21
14
  }
@@ -3,16 +3,14 @@ type SuiteSummary = {
3
3
  tests: Tests;
4
4
  valid: boolean;
5
5
  } & SummaryBase;
6
- type GroupTestSummary = BaseTestSummary;
6
+ type GroupTestSummary = SingleTestSummary;
7
7
  type Groups = Record<string, Group>;
8
8
  type Group = Record<string, GroupTestSummary>;
9
9
  type Tests = Record<string, SingleTestSummary>;
10
- type SingleTestSummary = BaseTestSummary & {
11
- valid: boolean;
12
- };
13
- type BaseTestSummary = SummaryBase & {
10
+ type SingleTestSummary = SummaryBase & {
14
11
  errors: string[];
15
12
  warnings: string[];
13
+ valid: boolean;
16
14
  };
17
15
  type SummaryBase = {
18
16
  errorCount: number;
package/types/parser.d.ts CHANGED
@@ -3,16 +3,14 @@ type SuiteSummary = {
3
3
  tests: Tests;
4
4
  valid: boolean;
5
5
  } & SummaryBase;
6
- type GroupTestSummary = BaseTestSummary;
6
+ type GroupTestSummary = SingleTestSummary;
7
7
  type Groups = Record<string, Group>;
8
8
  type Group = Record<string, GroupTestSummary>;
9
9
  type Tests = Record<string, SingleTestSummary>;
10
- type SingleTestSummary = BaseTestSummary & {
11
- valid: boolean;
12
- };
13
- type BaseTestSummary = SummaryBase & {
10
+ type SingleTestSummary = SummaryBase & {
14
11
  errors: string[];
15
12
  warnings: string[];
13
+ valid: boolean;
16
14
  };
17
15
  type SummaryBase = {
18
16
  errorCount: number;