vest 4.4.2 → 4.5.0

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.
Files changed (51) hide show
  1. package/dist/cjs/classnames.development.js +16 -90
  2. package/dist/cjs/classnames.production.js +1 -1
  3. package/dist/cjs/enforce/compose.development.js +5 -58
  4. package/dist/cjs/enforce/compose.production.js +1 -1
  5. package/dist/cjs/enforce/compounds.development.js +8 -51
  6. package/dist/cjs/enforce/compounds.production.js +1 -1
  7. package/dist/cjs/enforce/schema.development.js +5 -57
  8. package/dist/cjs/enforce/schema.production.js +1 -1
  9. package/dist/cjs/parser.development.js +15 -89
  10. package/dist/cjs/parser.production.js +1 -1
  11. package/dist/cjs/promisify.development.js +2 -26
  12. package/dist/cjs/promisify.production.js +1 -1
  13. package/dist/cjs/vest.development.js +197 -452
  14. package/dist/cjs/vest.production.js +1 -1
  15. package/dist/es/classnames.development.js +14 -88
  16. package/dist/es/classnames.production.js +1 -1
  17. package/dist/es/enforce/compose.development.js +1 -54
  18. package/dist/es/enforce/compose.production.js +1 -1
  19. package/dist/es/enforce/compounds.development.js +2 -45
  20. package/dist/es/enforce/compounds.production.js +1 -1
  21. package/dist/es/enforce/schema.development.js +1 -53
  22. package/dist/es/enforce/schema.production.js +1 -1
  23. package/dist/es/parser.development.js +14 -88
  24. package/dist/es/parser.production.js +1 -1
  25. package/dist/es/promisify.development.js +1 -25
  26. package/dist/es/promisify.production.js +1 -1
  27. package/dist/es/vest.development.js +131 -387
  28. package/dist/es/vest.production.js +1 -1
  29. package/dist/umd/classnames.development.js +27 -56
  30. package/dist/umd/classnames.production.js +1 -1
  31. package/dist/umd/enforce/compose.development.js +111 -94
  32. package/dist/umd/enforce/compose.production.js +1 -1
  33. package/dist/umd/enforce/compounds.development.js +185 -168
  34. package/dist/umd/enforce/compounds.production.js +1 -1
  35. package/dist/umd/enforce/schema.development.js +134 -117
  36. package/dist/umd/enforce/schema.production.js +1 -1
  37. package/dist/umd/parser.development.js +27 -56
  38. package/dist/umd/parser.production.js +1 -1
  39. package/dist/umd/vest.development.js +398 -386
  40. package/dist/umd/vest.production.js +1 -1
  41. package/package.json +4 -3
  42. package/testUtils/__tests__/partition.test.ts +21 -0
  43. package/testUtils/mockThrowError.ts +2 -1
  44. package/testUtils/partition.ts +13 -0
  45. package/testUtils/suiteDummy.ts +1 -1
  46. package/types/enforce/compose.d.ts +17 -32
  47. package/types/enforce/compounds.d.ts +17 -32
  48. package/types/enforce/schema.d.ts +17 -32
  49. package/types/parser.d.ts +8 -7
  50. package/types/promisify.d.ts +20 -35
  51. package/types/vest.d.ts +45 -60
@@ -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 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,t){return l(n.length,t)}function b(n){return!n||(Object.prototype.hasOwnProperty.call(n,"length")?y(n,0):"object"==typeof n&&y(Object.keys(n),0))}function R(n,t){return n in t}function S(n){return Number.isNaN(n)}function O(n){return"number"==typeof 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 Wt){var r=Wt[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 x(n,t){var e;return null!==(e=W(n))&&void 0!==e?e:W(t)}function F(n,t){if(!n)throw t instanceof String?t.valueOf():Error(t?W(t):t)}function L(n){function t(t,u){var i,o,s=e();return t=ft({},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){var t=e();return F(t,x(n,"Context was used after it was closed")),t}}}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,W.apply(void 0,U([n.message,t,e],r,!1)))}function q(n){function t(t,e,r){return function(){for(var u=[],o=0;o<arguments.length;o++)u[o]=arguments[o];return F((o=xt.run({value:n},(function(){return X.apply(void 0,U([e.apply(void 0,U([n],u,!1)),r,n],u,!1))}))).pass,i(o.message)?"enforce/".concat(r," failed with ").concat(JSON.stringify(n)):new String(W(o.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=Wt[e])return t(r,n,e)}});return r}function j(n,t){function e(n,t){n&&(r=!0,u=t)}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=Wt[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 x(j(e,(function(e,r){var u,i=xt.run({value:n},(function(){return e(n)}));r(!i.pass,D(!!i.pass,null!==(u=W(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 Wt[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 y(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]=x(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]=W(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,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 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 an(n){setTimeout((function(){throw Error(n)}),0)}function cn(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)&&(!b(un())&&!function(n){return Ot(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 Ot(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 xn(Xt.ERROR_COUNT,n)}function Wn(n){return xn(Xt.WARN_COUNT,n)}function xn(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,Wn),hasWarningsByGroup:Ut.bind(e,Ln),isValid:Ut.bind(e,Un),isValidByGroup:Ut.bind(e,Gn),suiteName:t})})))}function qn(n){var t=rn();return!b(t)&&(n?t.some((function(t){return pn(t,n)})):Ot(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]&&!b(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(!b(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(b(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:an('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!Ot(e=t)||e.fieldName===n.fieldName&&e.groupName===n.groupName||(fn().type===st.EACH||an("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=x(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=ct.EAGER;if(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)&&!W(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,at,ct,ft=Object.assign,lt=e(r),dt=e(u),pt=e(i),vt=e(s),ht=e(a),Nt=e(c),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),Wt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:vt,doesNotStartWith:e(A),endsWith:s,equals:a,greaterThan:f,greaterThanOrEquals:d,gt:f,gte:d,inside:v,isArray:p,isBetween:g,isBlank:E,isBoolean:m,isEmpty:b,isEven:function(n){return!!c(n)&&0==n%2},isFalsy:kt,isKeyOf:R,isNaN:S,isNegative:function(n){return h(n,0)},isNotArray:Et,isNotBetween:yt,isNotBlank:bt,isNotBoolean:Rt,isNotEmpty:Ot,isNotKeyOf:Tt,isNotNaN:Ct,isNotNull:lt,isNotNullish:pt,isNotNumber:It,isNotNumeric:Nt,isNotString:_t,isNotUndefined:dt,isNotValueOf:At,isNull:r,isNullish:i,isNumber:O,isNumeric:c,isOdd:function(n){return!!c(n)&&0!=n%2},isPositive:T,isString:o,isTruthy:C,isUndefined:u,isValueOf:I,lengthEquals:y,lengthNotEquals:St,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},xt=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 xt.useX()},extend:function(t){ft(Wt,t),n()}};return n(),new Proxy(ft(q,t),{get:function(n,t){return t in n?n[t]:Wt[t]?K(t):void 0}})}(),Lt=(at=0,function(){return"".concat(at++)});!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"}(ct||(ct={}));var Pt,Ut=L((function(n,t){return t?null:ft({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:z(st.DEFAULT),mode:[ct.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.2",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(),cn({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"),cn({type:st.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.eager=function(){var n=ct.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")),cn({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]=x(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)?x(r.tests[n],!0):o(t)?!!r.tests[t]:W(t,W(Xn))}}}},n.omitWhen=function(n,t){cn({type:st.OMIT_WHEN},(function(){Ut.run({omitted:!!Ut.useX().omitted||W(n,W(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){cn({type:st.SKIP_WHEN},(function(){Ut.run({skipped:!!Ut.useX().skipped||W(n,W(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})}));
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(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return!n.apply(void 0,t)}}function e(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function r(n,t){return e(n)&&e(t)&&Number(n)===Number(t)}function u(n,t){return r(n.length,t)}function i(n,t){return e(n)&&e(t)&&Number(n)>Number(t)}function o(n,t){return i(n.length,t)}function s(n){function t(n){return e.findIndex((function(t){var e=t[0];return u(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]),o(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 a(n){return null===n}function c(n){return void 0===n}function f(n){return null===n||c(n)}function l(n){return"function"==typeof n}function p(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return l(n)?n.apply(void 0,t):n}function d(n,t){var e;return null!==(e=p(n))&&void 0!==e?e:p(t)}function v(n){return!!Array.isArray(n)}function h(n){return(n=[].concat(n))[n.length-1]}function N(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];v(u)?e.push(N(u,t)):(u=t(u),$n(u)&&e.push(u))}return e}function g(n){return[].concat(n).reduce((function(n,t){return v(t)?n.concat(g(t)):[].concat(n).concat(t)}),[])}function E(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=d(n[r],[]),n=n[r]}return n}function m(n){return n.forEach((function(n){return n()}))}function y(n,t){if(!n)throw t instanceof String?t.valueOf():Error(t?p(t):t)}function R(n){return String(n)===n}function O(n){return!!n===n}function S(n){setTimeout((function(){throw Error(n)}),0)}function T(n,t){function e(n,t){n&&(r=!0,u=t)}for(var r=!1,u=null,i=0;i<n.length;i++)if(t(n[i],e,i),r)return u}function b(n){return!n||(Object.prototype.hasOwnProperty.call(n,"length")?u(n,0):"object"==typeof n&&u(Object.keys(n),0))}function C(n){return i(n,0)}function _(n,t){return R(n)&&R(t)&&n.endsWith(t)}function I(n,t){return n===t}function k(n,t){return r(n,t)||i(n,t)}function A(n,t){return!!(v(t)||R(t)&&R(n))&&-1!==t.indexOf(n)}function w(n,t){return e(n)&&e(t)&&Number(n)<Number(t)}function W(n,t){return r(n,t)||w(n,t)}function U(n,t,e){return k(n,t)&&W(n,e)}function x(n){return f(n)||R(n)&&!n.trim()}function F(n,t){return n in t}function L(n){return Number.isNaN(n)}function P(n){return"number"==typeof n}function G(n){return!!n}function D(n,t){if(f(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function X(n,t){return t instanceof RegExp?t.test(n):!!R(t)&&new RegExp(t).test(n)}function q(n,t){return R(n)&&R(t)&&n.startsWith(t)}function j(n){for(var t in mt){var e=mt[t];l(e)&&n(t,e)}}function K(n){function t(t,u){var i,o,s=e();return t=rt({},s||{},null!==(i=p(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){var t=e();return y(t,d(n,"Context was used after it was closed")),t}}}function B(){return null}function H(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 M(){try{return l(Proxy)}catch(n){return!1}}function V(n,t){return n={pass:n},t&&(n.message=t),n}function J(n,t,e){for(var r=[],u=3;u<arguments.length;u++)r[u-3]=arguments[u];return y(O(n)||n&&O(n.pass),"Incorrect return value for rule: "+JSON.stringify(n)),O(n)?V(n):V(n.pass,p.apply(void 0,H([n.message,t,e],r,!1)))}function Y(n){function t(t,e,r){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];return y((i=yt.run({value:n},(function(){return J.apply(void 0,H([e.apply(void 0,H([n],u,!1)),r,n],u,!1))}))).pass,f(i.message)?"enforce/".concat(r," failed with ").concat(JSON.stringify(n)):new String(p(i.message))),t}}var e={};if(!M())return j((function(n,r){e[n]=t(e,r,n)})),e;var r=new Proxy(e,{get:function(n,e){if(n=mt[e])return t(r,n,e)}});return r}function z(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=mt[r];e.push((function(n){return J.apply(void 0,H([o.apply(void 0,H([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return d(T(e,(function(e,r){var u,i=yt.run({value:n},(function(){return e(n)}));r(!i.pass,V(!!i.pass,null!==(u=p(t,n,i.message))&&void 0!==u?u:i.message))})),V(!0))},test:function(n){return s.run(n).pass},message:function(n){return n&&(t=n),s}};return M()?s=new Proxy(s,{get:function(t,e){return mt[e]?n(e):t[e]}}):(j((function(t){s[t]=n(t)})),s)}}(n)}function Q(){var n=0;return{current:function(){return n},next:function(){n++}}}function Z(n,t){return void 0===t&&(t=[]),{cursor:Q(),keys:{current:{},prev:{}},path:t,type:n}}function $(){return St.useX().stateRef}function nn(n){return $().optionalFields()[0][n]}function tn(n,t){(0,$().optionalFields()[1])((function(e){var r;return rt(e,((r={})[n]=p(t,e[n]),r))}))}function en(n){var t;return null===(t=nn(n))||void 0===t?void 0:t[0]}function rn(){un((function(n){return n}))}function un(n){(0,$().testObjects()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function on(){return sn().filter((function(n){return n.isPending()}))}function sn(){var n=$().testObjects()[0].current;return Tt([n],(function(){return g(n)}))}function an(n){function t(n,t,u){return r.references.push(),e(n,p(t,u)),function(){return[r.references[n],function(t){return e(n,p(t,r.references[n]))}]}}function e(t,e){var i=r.references[t];r.references[t]=e,l(t=u[t][1])&&t(e,i),l(n)&&n()}var r={references:[]},u=[];return{registerStateKey:function(n,e){var r=u.length;return u.push([n,e]),t(r,n)},reset:function(){var n=r.references;r.references=[],u.forEach((function(e,r){return t(r,e[0],n[r])}))}}}function cn(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 fn(){return St.useX().isolate}function ln(){var n=fn();return n.path.concat(n.cursor.current())}function pn(n,t){n=void 0===(n=n.type)?Vn.DEFAULT:n,y(l(t));var e=Z(n,ln());return n=St.run({isolate:e},(function(){return e.keys.prev=function(){var n=$().testObjects()[0].prev;return[].concat(E(n,ln())).reduce((function(n,t){return t instanceof _t&&!f(t.key)?(n[t.key]=t,n):n}),{})}(),un((function(n){var t=e.path;return E(n,t)[h(t)]=[],n})),t()})),fn().cursor.next(),n}function dn(n,t){return!(!t||n.fieldName!==t)}function vn(n,t){return sn().some((function(e){return hn(e,n,t)}))}function hn(n,t,e){return(e=!n.hasFailures()||e&&!dn(n,e))||(n=n.warns(),e=t===bt.WARNINGS!=!!n),!e}function Nn(n){return!!gn(n)||!vn(bt.ERRORS,n)&&(!b(sn())&&!function(n){return it(on().filter((function(t){return En(t,n)})))}(n)&&function(n){return sn().every((function(t){return!(!n||dn(t,n))||mn(t,n)}))}(n))}function gn(n){return!!n&&!0===(null===(t=nn(n))||void 0===t?void 0:t[1]);var t}function En(n,t){return!(t&&!dn(n,t))&&!0!==en(n.fieldName)}function mn(n,t){return!(!t||dn(n,t))||(!0===en(n.fieldName)||n.isTested()||n.isOmitted())}function yn(){var n=sn(),t=rt({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 sn().some((function(r){return!Pt(r,t)&&hn(r,n,e)}))}(bt.ERRORS,u,t)&&!function(n,t){return it(on().filter((function(e){return!Pt(e,n)&&En(e,t)})))}(u,t)&&function(n,t){return sn().every((function(e){return!!Pt(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){i[n===bt.ERRORS?Ct.ERROR_COUNT:Ct.WARN_COUNT]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||rt({errorCount:0,warnCount:0,testCount:0},{errors:[],warnings:[]});var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e(bt.ERRORS):t.isWarning()&&e(bt.WARNINGS)),i}function On(n,t,e){if(e){var r;n=(null===(r=null==n?void 0:n[e])||void 0===r?void 0:r[t])||[]}else{for(var u in r={},e=t===bt.ERRORS?Ct.ERROR_COUNT:Ct.WARN_COUNT,n)C(n[u][e])&&(r[u]=n[u][t]||[]);n=r}return n}function Sn(n){return{getErrors:function(t){return On(n.tests,bt.ERRORS,t)},getErrorsByGroup:function(t,e){return On(n.groups[t],bt.ERRORS,e)},getWarnings:function(t){return On(n.tests,bt.WARNINGS,t)},getWarningsByGroup:function(t,e){return On(n.groups[t],bt.WARNINGS,e)},hasErrors:function(t){return Cn(n,Ct.ERROR_COUNT,t)},hasErrorsByGroup:function(t,e){return bn(n,Ct.ERROR_COUNT,t,e)},hasWarnings:function(t){return Cn(n,Ct.WARN_COUNT,t)},hasWarningsByGroup:function(t,e){return bn(n,Ct.WARN_COUNT,t,e)},isValid:function(t){var e;return t?!(null===(e=n.tests[t])||void 0===e||!e.valid):n.valid},isValidByGroup:function(t,e){if(!(t=n.groups[t]))return!1;if(e)return Tn(t,e);for(var r in t)if(!Tn(t,r))return!1;return!0}}}function Tn(n,t){var e;return!(null===(e=n[t])||void 0===e||!e.valid)}function bn(n,t,e,r){var u,i;if(!(n=n.groups[e]))return!1;if(r)return C(null===(u=n[r])||void 0===u?void 0:u[t]);for(var o in n)if(C(null===(i=n[o])||void 0===i?void 0:i[t]))return!0;return!1}function Cn(n,t,e){var r;return C(n=e?null===(r=n.tests[e])||void 0===r?void 0:r[t]:n[t]||0)}function _n(){var n=sn(),t={stateRef:$()};return Gt([n],St.bind(t,(function(){var n=yn(),t=$().suiteName()[0];return rt(n,Sn(n),{suiteName:t})})))}function In(n){var t=on();return!b(t)&&(!n||t.some((function(t){return dn(t,n)})))}function kn(){var n=sn(),t={stateRef:$()};return Dt([n],St.bind(t,(function(){return rt({},_n(),{done:St.bind(t,Xt)})})))}function An(n,t,e){var u;return!!(!l(n)||t&&r(null===(u=e.tests[t])||void 0===u?void 0:u.testCount,0))}function wn(n){return!(In()&&(!n||In(n)))}function Wn(n,t){(0,$().testCallbacks()[1])((function(e){return t?e.fieldCallbacks[t]=(e.fieldCallbacks[t]||[]).concat(n):e.doneCallbacks.push(n),e}))}function Un(){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(Lt.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var e=$().testCallbacks()[0].fieldCallbacks;t&&!In(t)&&v(e[t])&&m(e[t]),In()||n.emit(Lt.ALL_RUNNING_TESTS_FINISHED)}})),n.on(Lt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){function n(n){t[n.fieldName]&&(n.omit(),tn(n.fieldName,(function(n){return[n[0],!0]})))}if(!b($().optionalFields()[0])){var t={};un((function(e){return N(e,(function(e){if(Object.prototype.hasOwnProperty.call(t,e.fieldName))n(e);else{var r=en(e.fieldName);l(r)&&(t[e.fieldName]=r(),n(e))}return e}))}))}}()})),n.on(Lt.ALL_RUNNING_TESTS_FINISHED,(function(){m($().testCallbacks()[0].doneCallbacks)})),n.on(Lt.REMOVE_FIELD,(function(n){sn().forEach((function(t){dn(t,n)&&(t.cancel(),function(n){un((function(t){return N(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Lt.RESET_FIELD,(function(n){sn().forEach((function(t){dn(t,n)&&t.reset()}))})),n}function xn(){var n=St.useX();return y(n.bus),n.bus}function Fn(n){return Pn(0,"tests",n)}function Ln(n){return Pn(1,"tests",n)}function Pn(n,t,e){var r=St.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){R(e)&&(r.exclusion[t][e]=0===n)}))}function Gn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Dn(){var n,t=St.useX().exclusion;for(n in t.groups)if(t.groups[n])return!0;return!1}function Xn(n){return"Wrong arguments passed to group. Group ".concat(n,".")}function qn(n){var t=n.asyncTest,e=n.message;if(t&&l(t.then)){var r=xn().emit,u=$(),i=St.bind({stateRef:u},(function(){rn(),r(Lt.TEST_COMPLETED,n)}));u=St.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=R(t)?t:e,n.fail(),i())}));try{t.then(i,u)}catch(n){u()}}}function jn(n){var t=$().testObjects()[0].prev;if(b(t))return Kn(n),n;var e=ln();if(t=E(t,e)[h(e)],!f(n.key)){t=n.key,(e=fn().keys.prev[t])&&(n=e),e=n;var r=fn().keys.current;return f(r[t])?r[t]=e:S('Encountered the same test key "'.concat(t,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Kn(n),n}return!it(e=t)||e.fieldName===n.fieldName&&e.groupName===n.groupName||(fn().type===Vn.EACH||S("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();un((function(t){return t.splice(n),t}))}(),t=null),Kn(n=d(t,n)),n}function Kn(n){var t=ln();un((function(e){return E(e,t)[h(t)]=n,e}))}function Bn(n){var t=fn().cursor,e=Yn.EAGER;if(St.useX().mode[0]===e&&vn(bt.ERRORS,n.fieldName))return n.skip(),jn(n),t.next(),n;if(e=jn(n),St.useX().omitted)return e.omit(),t.next(),e;if(function(n){var t=n.fieldName;if(n=n.groupName,St.useX().skipped)return!0;var e=St.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=St.useX().exclusion.groups;if(o=Object.prototype.hasOwnProperty.call(o,n)?!1===o[n]:Dn())return!0;if(!0===r.groups[n])return!(i||!Gn(u)&&!1!==u[t])}return!!(n=!!Dn()&&!n)||!i&&!!Gn(u)&&!p(e[t])}(n))return e.skip(!!St.useX().skipped),t.next(),e;if(n!==e&&e.fieldName===n.fieldName&&e.groupName===n.groupName&&e.isPending()&&e.cancel(),Kn(n),n.isUntested()){e=xn();var r=function(n){return St.run({currentTest:n},(function(){return n.run()}))}(n);try{r&&l(r.then)?(n.asyncTest=r,n.setPending(),qn(n)):e.emit(Lt.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)&&l(e.then)&&(n.setPending(),qn(n));return t.next(),n}function Hn(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];var r=l(t[1])?t:H([void 0],t,!0);t=r[0],e=r[1],r=r[2],y(R(n),Mn("fieldName","string")),y(l(e),Mn("Test callback","function"));var u=St.useX();return Bn(t=new _t(n,e,{message:t,groupName:u.groupName,key:r}))}function Mn(n,t){return"Incompatible params passed to test function. ".concat(n," must be a ").concat(t)}var Vn,Jn,Yn,zn=t(e),Qn=t(r),Zn=t(u),$n=t(a),nt=t(c),tt=t(f),et=t(v),rt=Object.assign,ut=(Jn=0,function(){return"".concat(Jn++)}),it=t(b),ot=t(_),st=t(I),at=t(A),ct=t(U),ft=t(x),lt=t(O),pt=t(F),dt=t(L),vt=t(P),ht=t(R),Nt=t(G),gt=t(D),Et=t(X),mt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:ot,doesNotStartWith:t(q),endsWith:_,equals:I,greaterThan:i,greaterThanOrEquals:k,gt:i,gte:k,inside:A,isArray:v,isBetween:U,isBlank:x,isBoolean:O,isEmpty:b,isEven:function(n){return!!e(n)&&0==n%2},isFalsy:Nt,isKeyOf:F,isNaN:L,isNegative:function(n){return w(n,0)},isNotArray:et,isNotBetween:ct,isNotBlank:ft,isNotBoolean:lt,isNotEmpty:it,isNotKeyOf:pt,isNotNaN:dt,isNotNull:$n,isNotNullish:tt,isNotNumber:vt,isNotNumeric:zn,isNotString:ht,isNotUndefined:nt,isNotValueOf:gt,isNull:a,isNullish:f,isNumber:P,isNumeric:e,isOdd:function(n){return!!e(n)&&0!=n%2},isPositive:C,isString:R,isTruthy:G,isUndefined:c,isValueOf:D,lengthEquals:u,lengthNotEquals:Zn,lessThan:w,lessThanOrEquals:W,longerThan:o,longerThanOrEquals:function(n,t){return k(n.length,t)},lt:w,lte:W,matches:X,notEquals:st,notInside:at,notMatches:Et,numberEquals:r,numberNotEquals:Qn,shorterThan:function(n,t){return w(n.length,t)},shorterThanOrEquals:function(n,t){return W(n.length,t)},startsWith:q},yt=K((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?rt(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:rt(e,{parent:B})})),Rt=function(){function n(){if(!M())return j((function(n){t[n]=z(n)})),rt(Y,t)}var t={context:function(){return yt.useX()},extend:function(t){rt(mt,t),n()}};return n(),new Proxy(rt(Y,t),{get:function(n,t){return t in n?n[t]:mt[t]?z(t):void 0}})}();!function(n){n[n.DEFAULT=0]="DEFAULT",n[n.SUITE=1]="SUITE",n[n.EACH=2]="EACH",n[n.SKIP_WHEN=3]="SKIP_WHEN",n[n.OMIT_WHEN=4]="OMIT_WHEN",n[n.GROUP=5]="GROUP"}(Vn||(Vn={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(Yn||(Yn={}));var Ot,St=K((function(n,t){return t?null:rt({exclusion:{tests:{},groups:{}},inclusion:{},isolate:Z(Vn.DEFAULT),mode:[Yn.ALL]},n)})),Tt=s();!function(n){n.Error="error",n.Warning="warning"}(Ot||(Ot={}));var bt,Ct,_t=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=ut(),this.severity=Ot.Error,this.status=It,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,c(this.message)&&R(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isFinalStatus()&&n!==Ft||(this.status=n)},n.prototype.warns=function(){return this.severity===Ot.Warning},n.prototype.setPending=function(){this.setStatus(Ut)},n.prototype.fail=function(){this.setStatus(this.warns()?wt:At)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Wt)},n.prototype.warn=function(){this.severity=Ot.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(xt),rn()},n.prototype.reset=function(){this.status=It,rn()},n.prototype.omit=function(){this.setStatus(Ft)},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(Ut)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(Ft)},n.prototype.isUntested=function(){return this.statusEquals(It)},n.prototype.isFailing=function(){return this.statusEquals(At)},n.prototype.isCanceled=function(){return this.statusEquals(xt)},n.prototype.isSkipped=function(){return this.statusEquals(kt)},n.prototype.isPassing=function(){return this.statusEquals(Wt)},n.prototype.isWarning=function(){return this.statusEquals(wt)},n.prototype.statusEquals=function(n){return this.status===n},n}(),It="UNTESTED",kt="SKIPPED",At="FAILED",wt="WARNING",Wt="PASSING",Ut="PENDING",xt="CANCELED",Ft="OMITTED";!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(bt||(bt={})),function(n){n.ERROR_COUNT="errorCount",n.WARN_COUNT="warnCount"}(Ct||(Ct={}));var Lt,Pt=t((function(n,t){return n.groupName===t})),Gt=s(1),Dt=s(20),Xt=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=kn(),An(e,n,t))return t;var r=function(){return e(_n())};return wn(n)?(r(),t):(Wn(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"}(Lt||(Lt={})),Fn.group=function(n){return Pn(0,"groups",n)},Ln.group=function(n){return Pn(1,"groups",n)};var qt=rt(Hn,{memo:function(n){var t=s(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=[$().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)}))):Bn(r[1])}}(Hn)});n.VERSION="4.5.0",n.context=St,n.create=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var e=(n=n.reverse())[0];n=n[1],y(l(e),"vest.create: Expected callback to be a function.");var r=Un(),u=an();return n={stateRef:cn(u,{suiteId:ut(),suiteName:n}),bus:r},rt(St.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return u.reset(),pn({type:Vn.SUITE},(function(){e.apply(void 0,n)})),r.emit(Lt.SUITE_CALLBACK_DONE_RUNNING),kn()})),{get:St.bind(n,_n),remove:St.bind(n,(function(n){r.emit(Lt.REMOVE_FIELD,n)})),reset:u.reset,resetField:St.bind(n,(function(n){r.emit(Lt.RESET_FIELD,n)}))})},n.each=function(n,t){y(l(t),"each callback must be a function"),pn({type:Vn.EACH},(function(){n.forEach((function(n,e){t(n,e)}))}))},n.eager=function(){var n=Yn.EAGER;St.useX().mode[0]=n},n.enforce=Rt,n.group=function(n,t){y(R(n),Xn("name must be a string")),y(l(t),Xn("callback must be a function")),pn({type:Vn.GROUP},(function(){St.run({groupName:n},t)}))},n.include=function(n){var t=St.useX(),e=t.inclusion;return t=t.exclusion,y(R(n)),e[n]=d(t.tests[n],!0),{when:function(t){var e=St.useX(),r=e.exclusion;e.inclusion[n]=function(){return Object.prototype.hasOwnProperty.call(r.tests,n)?d(r.tests[n],!0):R(t)?!!r.tests[t]:p(t,p(_n))}}}},n.omitWhen=function(n,t){pn({type:Vn.OMIT_WHEN},(function(){St.run({omitted:!!St.useX().omitted||p(n,p(_n))},(function(){return t()}))}))},n.only=Fn,n.optional=function(n){if(v(n)||R(n))[].concat(n).forEach((function(n){tn(n,[!0,!1])}));else for(var t in n)tn(t,[n[t],!1])},n.skip=Ln,n.skipWhen=function(n,t){pn({type:Vn.SKIP_WHEN},(function(){St.run({skipped:!!St.useX().skipped||p(n,p(_n))},(function(){return t()}))}))},n.suiteSelectors=Sn,n.test=qt,n.warn=function(){var n=St.useX("warn hook called outside of a running suite.");y(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.4.2",
2
+ "version": "4.5.0",
3
3
  "license": "MIT",
4
4
  "name": "vest",
5
5
  "author": "ealush",
@@ -20,8 +20,9 @@
20
20
  "url": "https://github.com/ealush/vest.git/issues"
21
21
  },
22
22
  "dependencies": {
23
- "context": "^2.0.7",
24
- "n4s": "^4.1.8"
23
+ "context": "^2.0.8",
24
+ "n4s": "^4.1.9",
25
+ "vest-utils": "^0.0.2"
25
26
  },
26
27
  "homepage": "https://vestjs.dev/",
27
28
  "exports": {
@@ -0,0 +1,21 @@
1
+ import { partition } from 'vest-utils';
2
+
3
+ describe('partition', () => {
4
+ it('Should correctly partition array', () => {
5
+ expect(partition([300, 200, 10, 50, 0, -500], v => v <= 100))
6
+ .toMatchInlineSnapshot(`
7
+ Array [
8
+ Array [
9
+ 10,
10
+ 50,
11
+ 0,
12
+ -500,
13
+ ],
14
+ Array [
15
+ 300,
16
+ 200,
17
+ ],
18
+ ]
19
+ `);
20
+ });
21
+ });
@@ -1,7 +1,8 @@
1
1
  export default function mockThrowError() {
2
2
  const deferThrow = jest.fn();
3
3
  jest.resetModules();
4
- jest.mock('throwError', () => ({
4
+ jest.mock('vest-utils', () => ({
5
+ ...jest.requireActual('vest-utils'),
5
6
  deferThrow,
6
7
  }));
7
8
  const vest = require('vest');
@@ -0,0 +1,13 @@
1
+ export default function partition<T>(
2
+ array: T[],
3
+ // eslint-disable-next-line no-unused-vars
4
+ predicate: (value: T, index: number, array: T[]) => boolean
5
+ ): [T[], T[]] {
6
+ return array.reduce(
7
+ (partitions: [T[], T[]], value, number) => {
8
+ partitions[predicate(value, number, array) ? 0 : 1].push(value);
9
+ return partitions;
10
+ },
11
+ [[], []]
12
+ );
13
+ }
@@ -1,4 +1,4 @@
1
- import asArray from '../../shared/src/asArray';
1
+ import { asArray } from 'vest-utils';
2
2
 
3
3
  import { dummyTest } from './testDummy';
4
4
 
@@ -3,6 +3,7 @@ type DropFirst<T extends unknown[]> = T extends [
3
3
  ...infer U
4
4
  ] ? U : never;
5
5
  type Stringable = string | ((...args: any[]) => string);
6
+ type CB = (...args: any[]) => any;
6
7
  type RuleReturn = boolean | {
7
8
  pass: boolean;
8
9
  message?: Stringable;
@@ -17,36 +18,20 @@ type KBaseRules = keyof BaseRules;
17
18
  declare function condition(value: any, callback: (value: any) => RuleReturn): RuleReturn;
18
19
  declare function endsWith(value: string, arg1: string): boolean;
19
20
  declare function equals(value: unknown, arg1: unknown): boolean;
20
- declare function greaterThan(value: number | string, gt: number | string): boolean;
21
21
  declare function greaterThanOrEquals(value: string | number, gte: string | number): boolean;
22
22
  declare function inside(value: unknown, arg1: string | unknown[]): boolean;
23
- // The module is named "isArrayValue" since it
24
- // is conflicting with a nested npm dependency.
25
- // We may need to revisit this in the future.
26
- declare function isArray(value: unknown): value is Array<unknown>;
27
23
  declare function isBetween(value: number | string, min: number | string, max: number | string): boolean;
28
24
  declare function isBlank(value: unknown): boolean;
29
- declare function isBoolean(value: unknown): value is boolean;
30
- declare function isEmpty(value: unknown): boolean;
31
25
  declare function isKeyOf(key: string | symbol | number, obj: any): boolean;
32
26
  declare function isNaN(value: unknown): boolean;
33
27
  declare function isNegative(value: number | string): boolean;
34
- declare function isNull(value: unknown): value is null;
35
- declare function isNullish(value: any): value is null | undefined;
36
28
  declare function isNumber(value: unknown): value is number;
37
- declare function isNumeric(value: string | number): boolean;
38
- declare function isPositive(value: number | string): boolean;
39
- declare function isStringValue(v: unknown): v is string;
40
29
  declare function isTruthy(value: unknown): boolean;
41
- declare function isUndefined(value?: unknown): value is undefined;
42
30
  declare function isValueOf(value: any, objectToCheck: any): boolean;
43
- declare function lengthEquals(value: string | unknown[], arg1: string | number): boolean;
44
31
  declare function lessThan(value: string | number, lt: string | number): boolean;
45
32
  declare function lessThanOrEquals(value: string | number, lte: string | number): boolean;
46
- declare function longerThan(value: string | unknown[], arg1: string | number): boolean;
47
33
  declare function longerThanOrEquals(value: string | unknown[], arg1: string | number): boolean;
48
34
  declare function matches(value: string, regex: RegExp | string): boolean;
49
- declare function numberEquals(value: string | number, eq: string | number): boolean;
50
35
  declare function shorterThan(value: string | unknown[], arg1: string | number): boolean;
51
36
  declare function shorterThanOrEquals(value: string | unknown[], arg1: string | number): boolean;
52
37
  declare function startsWith(value: string, arg1: string): boolean;
@@ -56,16 +41,16 @@ declare const baseRules: {
56
41
  doesNotStartWith: (value: string, arg1: string) => boolean;
57
42
  endsWith: typeof endsWith;
58
43
  equals: typeof equals;
59
- greaterThan: typeof greaterThan;
44
+ greaterThan: typeof import("packages/vest-utils/types/vest-utils").greaterThan;
60
45
  greaterThanOrEquals: typeof greaterThanOrEquals;
61
- gt: typeof greaterThan;
46
+ gt: typeof import("packages/vest-utils/types/vest-utils").greaterThan;
62
47
  gte: typeof greaterThanOrEquals;
63
48
  inside: typeof inside;
64
- isArray: typeof isArray;
49
+ isArray: typeof import("packages/vest-utils/types/vest-utils").isArray;
65
50
  isBetween: typeof isBetween;
66
51
  isBlank: typeof isBlank;
67
- isBoolean: typeof isBoolean;
68
- isEmpty: typeof isEmpty;
52
+ isBoolean: typeof import("packages/vest-utils/types/vest-utils").isBoolean;
53
+ isEmpty: typeof import("packages/vest-utils/types/vest-utils").isEmpty;
69
54
  isEven: (value: any) => boolean;
70
55
  isFalsy: (value: unknown) => boolean;
71
56
  isKeyOf: typeof isKeyOf;
@@ -85,21 +70,21 @@ declare const baseRules: {
85
70
  isNotString: (v: unknown) => boolean;
86
71
  isNotUndefined: (value?: unknown) => boolean;
87
72
  isNotValueOf: (value: any, objectToCheck: any) => boolean;
88
- isNull: typeof isNull;
89
- isNullish: typeof isNullish;
73
+ isNull: typeof import("packages/vest-utils/types/vest-utils").isNull;
74
+ isNullish: typeof import("packages/vest-utils/types/vest-utils").isNullish;
90
75
  isNumber: typeof isNumber;
91
- isNumeric: typeof isNumeric;
76
+ isNumeric: typeof import("packages/vest-utils/types/vest-utils").isNumeric;
92
77
  isOdd: (value: any) => boolean;
93
- isPositive: typeof isPositive;
94
- isString: typeof isStringValue;
78
+ isPositive: typeof import("packages/vest-utils/types/vest-utils").isPositive;
79
+ isString: typeof import("packages/vest-utils/types/vest-utils").isStringValue;
95
80
  isTruthy: typeof isTruthy;
96
- isUndefined: typeof isUndefined;
81
+ isUndefined: typeof import("packages/vest-utils/types/vest-utils").isUndefined;
97
82
  isValueOf: typeof isValueOf;
98
- lengthEquals: typeof lengthEquals;
83
+ lengthEquals: typeof import("packages/vest-utils/types/vest-utils").lengthEquals;
99
84
  lengthNotEquals: (value: string | unknown[], arg1: string | number) => boolean;
100
85
  lessThan: typeof lessThan;
101
86
  lessThanOrEquals: typeof lessThanOrEquals;
102
- longerThan: typeof longerThan;
87
+ longerThan: typeof import("packages/vest-utils/types/vest-utils").longerThan;
103
88
  longerThanOrEquals: typeof longerThanOrEquals;
104
89
  lt: typeof lessThan;
105
90
  lte: typeof lessThanOrEquals;
@@ -107,13 +92,13 @@ declare const baseRules: {
107
92
  notEquals: (value: unknown, arg1: unknown) => boolean;
108
93
  notInside: (value: unknown, arg1: string | unknown[]) => boolean;
109
94
  notMatches: (value: string, regex: string | RegExp) => boolean;
110
- numberEquals: typeof numberEquals;
95
+ numberEquals: typeof import("packages/vest-utils/types/vest-utils").numberEquals;
111
96
  numberNotEquals: (value: string | number, eq: string | number) => boolean;
112
97
  shorterThan: typeof shorterThan;
113
98
  shorterThanOrEquals: typeof shorterThanOrEquals;
114
99
  startsWith: typeof startsWith;
115
100
  };
116
- type Rules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
101
+ type Rules<E> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
117
102
  [P in KBaseRules]: (...args: DropFirst<Parameters<BaseRules[P]>> | Args) => Rules<E> & E;
118
103
  };
119
104
  /* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/no-empty-interface */
@@ -127,7 +112,7 @@ type LazyRules = n4s.IRules<LazyRuleMethods>;
127
112
  type Lazy = LazyRules & LazyRuleMethods &
128
113
  // This is a "catch all" hack to make TS happy while not
129
114
  // losing type hints
130
- Record<string, (...args: any[]) => any>;
115
+ Record<string, CB>;
131
116
  type LazyRuleMethods = LazyRuleRunners & {
132
117
  message: (message: LazyMessage) => Lazy;
133
118
  };
@@ -3,6 +3,7 @@ type DropFirst<T extends unknown[]> = T extends [
3
3
  ...infer U
4
4
  ] ? U : never;
5
5
  type Stringable = string | ((...args: any[]) => string);
6
+ type CB = (...args: any[]) => any;
6
7
  type RuleReturn = boolean | {
7
8
  pass: boolean;
8
9
  message?: Stringable;
@@ -17,36 +18,20 @@ type KBaseRules = keyof BaseRules;
17
18
  declare function condition(value: any, callback: (value: any) => RuleReturn): RuleReturn;
18
19
  declare function endsWith(value: string, arg1: string): boolean;
19
20
  declare function equals(value: unknown, arg1: unknown): boolean;
20
- declare function greaterThan(value: number | string, gt: number | string): boolean;
21
21
  declare function greaterThanOrEquals(value: string | number, gte: string | number): boolean;
22
22
  declare function inside(value: unknown, arg1: string | unknown[]): boolean;
23
- // The module is named "isArrayValue" since it
24
- // is conflicting with a nested npm dependency.
25
- // We may need to revisit this in the future.
26
- declare function isArray(value: unknown): value is Array<unknown>;
27
23
  declare function isBetween(value: number | string, min: number | string, max: number | string): boolean;
28
24
  declare function isBlank(value: unknown): boolean;
29
- declare function isBoolean(value: unknown): value is boolean;
30
- declare function isEmpty(value: unknown): boolean;
31
25
  declare function isKeyOf(key: string | symbol | number, obj: any): boolean;
32
26
  declare function isNaN(value: unknown): boolean;
33
27
  declare function isNegative(value: number | string): boolean;
34
- declare function isNull(value: unknown): value is null;
35
- declare function isNullish(value: any): value is null | undefined;
36
28
  declare function isNumber(value: unknown): value is number;
37
- declare function isNumeric(value: string | number): boolean;
38
- declare function isPositive(value: number | string): boolean;
39
- declare function isStringValue(v: unknown): v is string;
40
29
  declare function isTruthy(value: unknown): boolean;
41
- declare function isUndefined(value?: unknown): value is undefined;
42
30
  declare function isValueOf(value: any, objectToCheck: any): boolean;
43
- declare function lengthEquals(value: string | unknown[], arg1: string | number): boolean;
44
31
  declare function lessThan(value: string | number, lt: string | number): boolean;
45
32
  declare function lessThanOrEquals(value: string | number, lte: string | number): boolean;
46
- declare function longerThan(value: string | unknown[], arg1: string | number): boolean;
47
33
  declare function longerThanOrEquals(value: string | unknown[], arg1: string | number): boolean;
48
34
  declare function matches(value: string, regex: RegExp | string): boolean;
49
- declare function numberEquals(value: string | number, eq: string | number): boolean;
50
35
  declare function shorterThan(value: string | unknown[], arg1: string | number): boolean;
51
36
  declare function shorterThanOrEquals(value: string | unknown[], arg1: string | number): boolean;
52
37
  declare function startsWith(value: string, arg1: string): boolean;
@@ -56,16 +41,16 @@ declare const baseRules: {
56
41
  doesNotStartWith: (value: string, arg1: string) => boolean;
57
42
  endsWith: typeof endsWith;
58
43
  equals: typeof equals;
59
- greaterThan: typeof greaterThan;
44
+ greaterThan: typeof import("packages/vest-utils/types/vest-utils").greaterThan;
60
45
  greaterThanOrEquals: typeof greaterThanOrEquals;
61
- gt: typeof greaterThan;
46
+ gt: typeof import("packages/vest-utils/types/vest-utils").greaterThan;
62
47
  gte: typeof greaterThanOrEquals;
63
48
  inside: typeof inside;
64
- isArray: typeof isArray;
49
+ isArray: typeof import("packages/vest-utils/types/vest-utils").isArray;
65
50
  isBetween: typeof isBetween;
66
51
  isBlank: typeof isBlank;
67
- isBoolean: typeof isBoolean;
68
- isEmpty: typeof isEmpty;
52
+ isBoolean: typeof import("packages/vest-utils/types/vest-utils").isBoolean;
53
+ isEmpty: typeof import("packages/vest-utils/types/vest-utils").isEmpty;
69
54
  isEven: (value: any) => boolean;
70
55
  isFalsy: (value: unknown) => boolean;
71
56
  isKeyOf: typeof isKeyOf;
@@ -85,21 +70,21 @@ declare const baseRules: {
85
70
  isNotString: (v: unknown) => boolean;
86
71
  isNotUndefined: (value?: unknown) => boolean;
87
72
  isNotValueOf: (value: any, objectToCheck: any) => boolean;
88
- isNull: typeof isNull;
89
- isNullish: typeof isNullish;
73
+ isNull: typeof import("packages/vest-utils/types/vest-utils").isNull;
74
+ isNullish: typeof import("packages/vest-utils/types/vest-utils").isNullish;
90
75
  isNumber: typeof isNumber;
91
- isNumeric: typeof isNumeric;
76
+ isNumeric: typeof import("packages/vest-utils/types/vest-utils").isNumeric;
92
77
  isOdd: (value: any) => boolean;
93
- isPositive: typeof isPositive;
94
- isString: typeof isStringValue;
78
+ isPositive: typeof import("packages/vest-utils/types/vest-utils").isPositive;
79
+ isString: typeof import("packages/vest-utils/types/vest-utils").isStringValue;
95
80
  isTruthy: typeof isTruthy;
96
- isUndefined: typeof isUndefined;
81
+ isUndefined: typeof import("packages/vest-utils/types/vest-utils").isUndefined;
97
82
  isValueOf: typeof isValueOf;
98
- lengthEquals: typeof lengthEquals;
83
+ lengthEquals: typeof import("packages/vest-utils/types/vest-utils").lengthEquals;
99
84
  lengthNotEquals: (value: string | unknown[], arg1: string | number) => boolean;
100
85
  lessThan: typeof lessThan;
101
86
  lessThanOrEquals: typeof lessThanOrEquals;
102
- longerThan: typeof longerThan;
87
+ longerThan: typeof import("packages/vest-utils/types/vest-utils").longerThan;
103
88
  longerThanOrEquals: typeof longerThanOrEquals;
104
89
  lt: typeof lessThan;
105
90
  lte: typeof lessThanOrEquals;
@@ -107,13 +92,13 @@ declare const baseRules: {
107
92
  notEquals: (value: unknown, arg1: unknown) => boolean;
108
93
  notInside: (value: unknown, arg1: string | unknown[]) => boolean;
109
94
  notMatches: (value: string, regex: string | RegExp) => boolean;
110
- numberEquals: typeof numberEquals;
95
+ numberEquals: typeof import("packages/vest-utils/types/vest-utils").numberEquals;
111
96
  numberNotEquals: (value: string | number, eq: string | number) => boolean;
112
97
  shorterThan: typeof shorterThan;
113
98
  shorterThanOrEquals: typeof shorterThanOrEquals;
114
99
  startsWith: typeof startsWith;
115
100
  };
116
- type Rules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
101
+ type Rules<E> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
117
102
  [P in KBaseRules]: (...args: DropFirst<Parameters<BaseRules[P]>> | Args) => Rules<E> & E;
118
103
  };
119
104
  /* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/no-empty-interface */
@@ -127,7 +112,7 @@ type LazyRules = n4s.IRules<LazyRuleMethods>;
127
112
  type Lazy = LazyRules & LazyRuleMethods &
128
113
  // This is a "catch all" hack to make TS happy while not
129
114
  // losing type hints
130
- Record<string, (...args: any[]) => any>;
115
+ Record<string, CB>;
131
116
  type LazyRuleMethods = LazyRuleRunners & {
132
117
  message: (message: LazyMessage) => Lazy;
133
118
  };
@@ -3,6 +3,7 @@ type DropFirst<T extends unknown[]> = T extends [
3
3
  ...infer U
4
4
  ] ? U : never;
5
5
  type Stringable = string | ((...args: any[]) => string);
6
+ type CB = (...args: any[]) => any;
6
7
  type RuleReturn = boolean | {
7
8
  pass: boolean;
8
9
  message?: Stringable;
@@ -17,36 +18,20 @@ type KBaseRules = keyof BaseRules;
17
18
  declare function condition(value: any, callback: (value: any) => RuleReturn): RuleReturn;
18
19
  declare function endsWith(value: string, arg1: string): boolean;
19
20
  declare function equals(value: unknown, arg1: unknown): boolean;
20
- declare function greaterThan(value: number | string, gt: number | string): boolean;
21
21
  declare function greaterThanOrEquals(value: string | number, gte: string | number): boolean;
22
22
  declare function inside(value: unknown, arg1: string | unknown[]): boolean;
23
- // The module is named "isArrayValue" since it
24
- // is conflicting with a nested npm dependency.
25
- // We may need to revisit this in the future.
26
- declare function isArray(value: unknown): value is Array<unknown>;
27
23
  declare function isBetween(value: number | string, min: number | string, max: number | string): boolean;
28
24
  declare function isBlank(value: unknown): boolean;
29
- declare function isBoolean(value: unknown): value is boolean;
30
- declare function isEmpty(value: unknown): boolean;
31
25
  declare function isKeyOf(key: string | symbol | number, obj: any): boolean;
32
26
  declare function isNaN(value: unknown): boolean;
33
27
  declare function isNegative(value: number | string): boolean;
34
- declare function isNull(value: unknown): value is null;
35
- declare function isNullish(value: any): value is null | undefined;
36
28
  declare function isNumber(value: unknown): value is number;
37
- declare function isNumeric(value: string | number): boolean;
38
- declare function isPositive(value: number | string): boolean;
39
- declare function isStringValue(v: unknown): v is string;
40
29
  declare function isTruthy(value: unknown): boolean;
41
- declare function isUndefined(value?: unknown): value is undefined;
42
30
  declare function isValueOf(value: any, objectToCheck: any): boolean;
43
- declare function lengthEquals(value: string | unknown[], arg1: string | number): boolean;
44
31
  declare function lessThan(value: string | number, lt: string | number): boolean;
45
32
  declare function lessThanOrEquals(value: string | number, lte: string | number): boolean;
46
- declare function longerThan(value: string | unknown[], arg1: string | number): boolean;
47
33
  declare function longerThanOrEquals(value: string | unknown[], arg1: string | number): boolean;
48
34
  declare function matches(value: string, regex: RegExp | string): boolean;
49
- declare function numberEquals(value: string | number, eq: string | number): boolean;
50
35
  declare function shorterThan(value: string | unknown[], arg1: string | number): boolean;
51
36
  declare function shorterThanOrEquals(value: string | unknown[], arg1: string | number): boolean;
52
37
  declare function startsWith(value: string, arg1: string): boolean;
@@ -56,16 +41,16 @@ declare const baseRules: {
56
41
  doesNotStartWith: (value: string, arg1: string) => boolean;
57
42
  endsWith: typeof endsWith;
58
43
  equals: typeof equals;
59
- greaterThan: typeof greaterThan;
44
+ greaterThan: typeof import("packages/vest-utils/types/vest-utils").greaterThan;
60
45
  greaterThanOrEquals: typeof greaterThanOrEquals;
61
- gt: typeof greaterThan;
46
+ gt: typeof import("packages/vest-utils/types/vest-utils").greaterThan;
62
47
  gte: typeof greaterThanOrEquals;
63
48
  inside: typeof inside;
64
- isArray: typeof isArray;
49
+ isArray: typeof import("packages/vest-utils/types/vest-utils").isArray;
65
50
  isBetween: typeof isBetween;
66
51
  isBlank: typeof isBlank;
67
- isBoolean: typeof isBoolean;
68
- isEmpty: typeof isEmpty;
52
+ isBoolean: typeof import("packages/vest-utils/types/vest-utils").isBoolean;
53
+ isEmpty: typeof import("packages/vest-utils/types/vest-utils").isEmpty;
69
54
  isEven: (value: any) => boolean;
70
55
  isFalsy: (value: unknown) => boolean;
71
56
  isKeyOf: typeof isKeyOf;
@@ -85,21 +70,21 @@ declare const baseRules: {
85
70
  isNotString: (v: unknown) => boolean;
86
71
  isNotUndefined: (value?: unknown) => boolean;
87
72
  isNotValueOf: (value: any, objectToCheck: any) => boolean;
88
- isNull: typeof isNull;
89
- isNullish: typeof isNullish;
73
+ isNull: typeof import("packages/vest-utils/types/vest-utils").isNull;
74
+ isNullish: typeof import("packages/vest-utils/types/vest-utils").isNullish;
90
75
  isNumber: typeof isNumber;
91
- isNumeric: typeof isNumeric;
76
+ isNumeric: typeof import("packages/vest-utils/types/vest-utils").isNumeric;
92
77
  isOdd: (value: any) => boolean;
93
- isPositive: typeof isPositive;
94
- isString: typeof isStringValue;
78
+ isPositive: typeof import("packages/vest-utils/types/vest-utils").isPositive;
79
+ isString: typeof import("packages/vest-utils/types/vest-utils").isStringValue;
95
80
  isTruthy: typeof isTruthy;
96
- isUndefined: typeof isUndefined;
81
+ isUndefined: typeof import("packages/vest-utils/types/vest-utils").isUndefined;
97
82
  isValueOf: typeof isValueOf;
98
- lengthEquals: typeof lengthEquals;
83
+ lengthEquals: typeof import("packages/vest-utils/types/vest-utils").lengthEquals;
99
84
  lengthNotEquals: (value: string | unknown[], arg1: string | number) => boolean;
100
85
  lessThan: typeof lessThan;
101
86
  lessThanOrEquals: typeof lessThanOrEquals;
102
- longerThan: typeof longerThan;
87
+ longerThan: typeof import("packages/vest-utils/types/vest-utils").longerThan;
103
88
  longerThanOrEquals: typeof longerThanOrEquals;
104
89
  lt: typeof lessThan;
105
90
  lte: typeof lessThanOrEquals;
@@ -107,13 +92,13 @@ declare const baseRules: {
107
92
  notEquals: (value: unknown, arg1: unknown) => boolean;
108
93
  notInside: (value: unknown, arg1: string | unknown[]) => boolean;
109
94
  notMatches: (value: string, regex: string | RegExp) => boolean;
110
- numberEquals: typeof numberEquals;
95
+ numberEquals: typeof import("packages/vest-utils/types/vest-utils").numberEquals;
111
96
  numberNotEquals: (value: string | number, eq: string | number) => boolean;
112
97
  shorterThan: typeof shorterThan;
113
98
  shorterThanOrEquals: typeof shorterThanOrEquals;
114
99
  startsWith: typeof startsWith;
115
100
  };
116
- type Rules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
101
+ type Rules<E> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
117
102
  [P in KBaseRules]: (...args: DropFirst<Parameters<BaseRules[P]>> | Args) => Rules<E> & E;
118
103
  };
119
104
  /* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/no-empty-interface */
@@ -127,7 +112,7 @@ type LazyRules = n4s.IRules<LazyRuleMethods>;
127
112
  type Lazy = LazyRules & LazyRuleMethods &
128
113
  // This is a "catch all" hack to make TS happy while not
129
114
  // losing type hints
130
- Record<string, (...args: any[]) => any>;
115
+ Record<string, CB>;
131
116
  type LazyRuleMethods = LazyRuleRunners & {
132
117
  message: (message: LazyMessage) => Lazy;
133
118
  };
package/types/parser.d.ts CHANGED
@@ -17,11 +17,12 @@ type SummaryBase = {
17
17
  warnCount: number;
18
18
  testCount: number;
19
19
  };
20
- declare function parse(res: SuiteSummary): {
21
- valid: (fieldName?: string) => boolean;
22
- tested: (fieldName?: string) => boolean;
23
- invalid: (fieldName?: string) => boolean;
24
- untested: (fieldName?: string) => boolean;
25
- warning: (fieldName?: string) => boolean;
26
- };
20
+ declare function parse(summary: SuiteSummary): ParsedVestObject;
21
+ interface ParsedVestObject {
22
+ valid(fieldName?: string): boolean;
23
+ tested(fieldName?: string): boolean;
24
+ invalid(fieldName?: string): boolean;
25
+ untested(fieldName?: string): boolean;
26
+ warning(fieldName?: string): boolean;
27
+ }
27
28
  export { parse };
@@ -1,7 +1,3 @@
1
- /**
2
- * Reads the testObjects list and gets full validation result from it.
3
- */
4
- declare function genTestsSummary(): SuiteSummary;
5
1
  type SuiteSummary = {
6
2
  groups: Groups;
7
3
  tests: Tests;
@@ -22,37 +18,6 @@ type SummaryBase = {
22
18
  testCount: number;
23
19
  };
24
20
  type FailureMessages = Record<string, string[]>;
25
- declare function getErrors(): FailureMessages;
26
- declare function getErrors(fieldName?: string): string[];
27
- declare function getWarnings(): FailureMessages;
28
- declare function getWarnings(fieldName?: string): string[];
29
- declare function getErrorsByGroup(groupName: string): FailureMessages;
30
- declare function getErrorsByGroup(groupName: string, fieldName: string): string[];
31
- declare function getWarningsByGroup(groupName: string): FailureMessages;
32
- declare function getWarningsByGroup(groupName: string, fieldName: string): string[];
33
- declare function hasErrors(fieldName?: string): boolean;
34
- declare function hasWarnings(fieldName?: string): boolean;
35
- declare function hasErrorsByGroup(groupName: string, fieldName?: string): boolean;
36
- declare function hasWarningsByGroup(groupName: string, fieldName?: string): boolean;
37
- declare function isValid(fieldName?: string): boolean;
38
- declare function isValidByGroup(groupName: string, fieldName?: string): boolean;
39
- type SuiteResult = ReturnType<typeof genTestsSummary> & {
40
- /**
41
- * Returns whether the suite as a whole is valid.
42
- * Determined if there are no errors, and if no
43
- * required fields are skipped.
44
- */
45
- isValid: typeof isValid;
46
- isValidByGroup: typeof isValidByGroup;
47
- hasErrors: typeof hasErrors;
48
- hasWarnings: typeof hasWarnings;
49
- getErrors: typeof getErrors;
50
- getWarnings: typeof getWarnings;
51
- hasErrorsByGroup: typeof hasErrorsByGroup;
52
- hasWarningsByGroup: typeof hasWarningsByGroup;
53
- getErrorsByGroup: typeof getErrorsByGroup;
54
- getWarningsByGroup: typeof getWarningsByGroup;
55
- };
56
21
  type SuiteRunResult = SuiteResult & {
57
22
  done: Done;
58
23
  };
@@ -65,5 +30,25 @@ interface Done {
65
30
  cb: (res: SuiteResult) => void
66
31
  ]): SuiteRunResult;
67
32
  }
33
+ type SuiteName = string | void;
34
+ interface SuiteSelectors {
35
+ getErrors(fieldName: string): string[];
36
+ getErrors(): FailureMessages;
37
+ getWarnings(): FailureMessages;
38
+ getWarnings(fieldName: string): string[];
39
+ getErrorsByGroup(groupName: string, fieldName: string): string[];
40
+ getErrorsByGroup(groupName: string): FailureMessages;
41
+ getWarningsByGroup(groupName: string): FailureMessages;
42
+ getWarningsByGroup(groupName: string, fieldName: string): string[];
43
+ hasErrors(fieldName?: string): boolean;
44
+ hasWarnings(fieldName?: string): boolean;
45
+ hasErrorsByGroup(groupName: string, fieldName?: string): boolean;
46
+ hasWarningsByGroup(groupName: string, fieldName?: string): boolean;
47
+ isValid(fieldName?: string): boolean;
48
+ isValidByGroup(groupName: string, fieldName?: string): boolean;
49
+ }
50
+ type SuiteResult = SuiteSummary & SuiteSelectors & {
51
+ suiteName: SuiteName;
52
+ };
68
53
  declare const promisify: (validatorFn: (...args: any[]) => SuiteRunResult) => (...args: any[]) => Promise<SuiteResult>;
69
54
  export { promisify as default };