vest 4.2.3-dev-87ebfa → 4.3.2-dev-2805e3

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 (41) hide show
  1. package/dist/cjs/classnames.development.js +61 -23
  2. package/dist/cjs/classnames.production.js +1 -1
  3. package/dist/cjs/enforce/compose.development.js +1 -1
  4. package/dist/cjs/enforce/compounds.development.js +20 -5
  5. package/dist/cjs/enforce/compounds.production.js +1 -1
  6. package/dist/cjs/enforce/schema.development.js +1 -1
  7. package/dist/cjs/parser.development.js +87 -22
  8. package/dist/cjs/parser.production.js +1 -1
  9. package/dist/cjs/vest.development.js +548 -566
  10. package/dist/cjs/vest.production.js +1 -1
  11. package/dist/es/classnames.development.js +61 -23
  12. package/dist/es/classnames.production.js +1 -1
  13. package/dist/es/enforce/compose.development.js +1 -1
  14. package/dist/es/enforce/compounds.development.js +20 -5
  15. package/dist/es/enforce/compounds.production.js +1 -1
  16. package/dist/es/enforce/schema.development.js +1 -1
  17. package/dist/es/parser.development.js +87 -22
  18. package/dist/es/parser.production.js +1 -1
  19. package/dist/es/vest.development.js +548 -566
  20. package/dist/es/vest.production.js +1 -1
  21. package/dist/umd/classnames.development.js +61 -23
  22. package/dist/umd/classnames.production.js +1 -1
  23. package/dist/umd/enforce/compose.development.js +34 -30
  24. package/dist/umd/enforce/compose.production.js +1 -1
  25. package/dist/umd/enforce/compounds.development.js +36 -32
  26. package/dist/umd/enforce/compounds.production.js +1 -1
  27. package/dist/umd/enforce/schema.development.js +34 -30
  28. package/dist/umd/enforce/schema.production.js +1 -1
  29. package/dist/umd/parser.development.js +87 -22
  30. package/dist/umd/parser.production.js +1 -1
  31. package/dist/umd/vest.development.js +482 -515
  32. package/dist/umd/vest.production.js +1 -1
  33. package/package.json +1 -1
  34. package/testUtils/suiteDummy.ts +5 -1
  35. package/types/classnames.d.ts +17 -55
  36. package/types/enforce/compose.d.ts +22 -21
  37. package/types/enforce/compounds.d.ts +24 -23
  38. package/types/enforce/schema.d.ts +26 -25
  39. package/types/parser.d.ts +16 -54
  40. package/types/promisify.d.ts +23 -16
  41. package/types/vest.d.ts +109 -101
@@ -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 p(n){return!!Array.isArray(n)}function d(n,t){return!!(p(t)||o(t)&&o(n))&&-1!==t.indexOf(n)}function v(n,t){return c(n)&&c(t)&&Number(n)<=Number(t)}function h(n,t,e){return l(n,t)&&v(n,e)}function N(n){return i(n)||o(n)&&!n.trim()}function g(n){return!!n===n}function m(n){return"number"==typeof n}function y(n,t){return n.length===Number(t)}function E(n){if(n){if(m(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return y(n,0);if("object"==typeof n)return y(Object.keys(n),0)}return!0}function b(n,t){return n in t}function S(n){return Number.isNaN(n)}function O(n){return!!c(n)&&0>Number(n)}function R(n){return!!n}function T(n,t){if(i(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function C(n,t){return c(n)&&c(t)&&Number(n)<Number(t)}function I(n,t){return n.length>Number(t)}function k(n,t){return t instanceof RegExp?t.test(n):!!o(t)&&new RegExp(t).test(n)}function A(n,t){return c(n)&&c(t)&&Number(n)===Number(t)}function _(n,t){return o(n)&&o(t)&&n.startsWith(t)}function w(n){for(var e in mt){var r=mt[e];t(r)&&n(e,r)}}function F(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 L(n,t){var e;return null!==(e=F(n))&&void 0!==e?e:t}function W(n,t){if(!n)throw t instanceof String?t.valueOf():Error(t?F(t):t)}function P(n){function t(t,u){var i,o,s=e();return t=Yn({},s||{},null!==(i=F(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 W(r.ctx,L(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 G(){try{return t(Proxy)}catch(n){return!1}}function X(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 W(g(n)||n&&g(n.pass),"Incorrect return value for rule: "+JSON.stringify(n)),g(n)?X(n):X(n.pass,F.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 W((i=D.apply(void 0,U([yt.run({value:n},(function(){return e.apply(void 0,U([n],u,!1))})),r,n],u,!1))).pass,E(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=mt[e])return t(r,n,e)}});return r}function K(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 j(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 D.apply(void 0,U([o.apply(void 0,U([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return L(K(e,(function(e,r){var u,i=yt.run({value:n},(function(){return e(n)}));i.pass||r(X(!!i.pass,null!==(u=F(t,n,i.message))&&void 0!==u?u:i.message))})),X(!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 mt[e]?n(e):t[e]}}):(w((function(t){s[t]=n(t)})),s)}}(n)}function B(n){function e(n,t,e){return u.references.push(),r(n,F(t,e)),function(){return[u.references[n],function(t){return r(n,F(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 H(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 M(n){return(n=[].concat(n))[n.length-1]}function V(){function n(){t=[0]}var t=[];return n(),{addLevel:function(){t.push(0)},cursorAt:function(){return M(t)},getCursor:function(){return[].concat(t)},next:function(){return t[t.length-1]++,M(t)},removeLevel:function(){t.pop()},reset:n}}function J(n,t){for(var e=[],r=0;r<n.length;r++){var u=n[r];p(u)?e.push(J(u,t)):(u=t(u),zn(u)&&e.push(u))}return e}function Y(n){return[].concat(n).reduce((function(n,t){return p(t)?n.concat(Y(t)):[].concat(n).concat(t)}),[])}function z(n,t){var e=0;for(t=t.slice(0,-1);e<t.length;e++){var r=t[e];n[r]=L(n[r],[]),n=n[r]}return n}function Q(n){setTimeout((function(){throw Error(n)}),0)}function Z(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]),I(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 $(){return Rt.useX().stateRef}function nn(){return $().testObjects()}function tn(){(0,nn()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function en(n){(0,nn()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function rn(){return Y(J(nn()[0].current,(function(n){return n.isPending()?n:null})))}function un(){var n=nn()[0].current;return Tt([n],(function(){return Y(n)}))}function on(){return Rt.useX().testCursor.getCursor()}function sn(){return Rt.useX().testCursor.next()}function an(n,e){if(n=void 0===(n=n.type)?Mn.DEFAULT:n,t(e)){var r={current:{},prev:{}},u=on();return Rt.run({isolate:{type:n,keys:r}},(function(){Rt.useX().testCursor.addLevel(),r.prev=function(){var n=nn()[0].prev;return[].concat(z(n,on())).reduce((function(n,t){return t instanceof kt&&!i(t.key)?(n[t.key]=t,n):n}),{})}(),en((function(n){return z(n,u)[M(u)]=[],n}));var n=e();return Rt.useX().testCursor.removeLevel(),sn(),n}))}}function cn(n,t){function e(n){i[n===Ct.ERRORS?It.ERROR_COUNT:It.WARN_COUNT]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||{errorCount:0,warnCount:0,testCount:0};var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e(Ct.ERRORS):t.isWarning()&&e(Ct.WARNINGS)),i}function fn(n,t){return!(!t||n.fieldName!==t)}function ln(n,t,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return t.reduce((function(t,e){if(u&&e.groupName!==u)var r=!0;else i&&!fn(e,i)?r=!0:(r=e.warns(),r=n===Ct.WARNINGS!=!!r);return r||!e.hasFailures()||(t[e.fieldName]=(t[e.fieldName]||[]).concat(e.message||[])),t}),Et({},i&&((r={})[i]=[],r)))}function pn(n){return vn(Ct.ERRORS,n)}function dn(n){return vn(Ct.WARNINGS,n)}function vn(n,t){return n=ln(n,un(),{fieldName:t}),t?n[t]:n}function hn(n,t){return n=gn(Ct.ERRORS,n,t),t?n[t]:n}function Nn(n,t){return n=gn(Ct.WARNINGS,n,t),t?n[t]:n}function gn(n,t,e){return W(t,"get".concat(n[0].toUpperCase()).concat(n.slice(1),"ByGroup requires a group name. Received `").concat(t,"` instead.")),ln(n,un(),{group:t,fieldName:e})}function mn(n,t,e){return(e=!n.hasFailures()||e&&!fn(n,e))||(n=n.warns(),e=t===Ct.WARNINGS!=!!n),!e}function yn(n){return bn(Ct.ERRORS,n)}function En(n){return bn(Ct.WARNINGS,n)}function bn(n,t){return un().some((function(e){return mn(e,n,t)}))}function Sn(n,t){return Rn(Ct.ERRORS,n,t)}function On(n,t){return Rn(Ct.WARNINGS,n,t)}function Rn(n,t,e){return un().some((function(r){return t===r.groupName&&mn(r,n,e)}))}function Tn(n){var t=un().reduce((function(n,t){return n[t.fieldName]||t.isOmitted()&&(n[t.fieldName]=!0),n}),{});return(t=!!n&&!!t[n])||!yn(n)&&(!(E(t=un())||function(n){var t=un();return!!n&&!t.find((function(t){return t.fieldName===n}))}(n)||function(n){var t=$().optionalFields()[0];return ct(rn().filter((function(e){return!(n&&!fn(e,n))&&!0!==t[e.fieldName]})))}(n))&&function(n){var t=un(),e=$().optionalFields()[0];return t.every((function(t){return!(!n||fn(t,n))||(!0===e[t.fieldName]||t.isTested()||t.isOmitted())}))}(n))}function Cn(){var n=un(),t={stateRef:$()};return Gt([n],Rt.bind(t,(function(){var n=$().suiteName()[0];return Yn(function(){var n=un(),t=Yn({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{}});return n.reduce((function(n,t){var e=n.tests;e[t.fieldName]=cn(e,t),e=n.groups;var r=t.groupName;return r&&(e[r]=e[r]||{},e[r][t.fieldName]=cn(e[r],t)),n}),t),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(t)}(),{getErrors:Rt.bind(t,pn),getErrorsByGroup:Rt.bind(t,hn),getWarnings:Rt.bind(t,dn),getWarningsByGroup:Rt.bind(t,Nn),hasErrors:Rt.bind(t,yn),hasErrorsByGroup:Rt.bind(t,Sn),hasWarnings:Rt.bind(t,En),hasWarningsByGroup:Rt.bind(t,On),isValid:Rt.bind(t,Tn),suiteName:n})})))}function In(n){var t=rn();return!E(t)&&(n?t.some((function(t){return fn(t,n)})):ct(t))}function kn(){var n=un(),t={stateRef:$()};return Xt([n],Rt.bind(t,(function(){return Yn({},Cn(),{done:Rt.bind(t,Dt)})})))}function An(n,e,r){return!(t(n)&&(!e||r.tests[e]&&!E(r.tests[e].testCount)))}function _n(n){return!(In()&&(!n||In(n)))}function wn(n,t){var e=Rt.bind({},n);(0,$().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(e):n.doneCallbacks.push(e),n}))}function Fn(n){return n.forEach((function(n){return n()}))}function Ln(){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(Ut.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var e=$().testCallbacks()[0].fieldCallbacks;t&&!In(t)&&p(e[t])&&Fn(e[t]),In()||n.emit(Ut.ALL_RUNNING_TESTS_FINISHED)}})),n.on(Ut.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var n=$().optionalFields()[0];if(!E(n)){var e={};en((function(r){return J(r,(function(r){var u=r.fieldName;if(e.hasOwnProperty(u))e[r.fieldName]&&r.omit();else{var i=n[u];t(i)&&(e[u]=i(),e[r.fieldName]&&r.omit())}return r}))}))}}()})),n.on(Ut.ALL_RUNNING_TESTS_FINISHED,(function(){Fn($().testCallbacks()[0].doneCallbacks)})),n.on(Ut.REMOVE_FIELD,(function(n){un().forEach((function(t){fn(t,n)&&(t.cancel(),function(n){en((function(t){return J(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Ut.RESET_FIELD,(function(n){un().forEach((function(t){fn(t,n)&&t.reset()}))})),n}function Wn(){var n=Rt.useX();return W(n.bus),n.bus}function Pn(n){return Un(0,"tests",n)}function xn(n){return Un(1,"tests",n)}function Un(n,t,e){var r=Rt.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){o(e)&&(r.exclusion[t][e]=0===n)}))}function Gn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Xn(n){return"Wrong arguments passed to group. Group ".concat(n,".")}function Dn(n){var e=n.asyncTest,r=n.message;if(e&&t(e.then)){var u=Wn().emit,i=$(),s=Rt.bind({stateRef:i},(function(){tn(),u(Ut.TEST_COMPLETED,n)}));i=Rt.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 qn(n){var t=nn()[0].prev;if(E(t))return Kn(n),n;var e=on();if(t=z(t,e)[M(e)],!i(n.key)){t=n.key,(e=Rt.useX().isolate.keys.prev[t])&&(n=e),e=n;var r=Rt.useX().isolate.keys.current;return i(r[t])?r[t]=e:Q('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!ct(e=t)||e.fieldName===n.fieldName&&e.groupName===n.groupName||(Rt.useX().isolate.type===Mn.EACH||Q("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=nn(),t=n[1],e=n[0].prev;n=z(e,on());var r=Rt.useX().testCursor.cursorAt();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),t=null),Kn(n=L(t,n)),n}function Kn(n){var t=on();en((function(e){return z(e,t)[M(t)]=n,e}))}function jn(n){var e=Jn.EAGER;if(e=!(Rt.useX().mode[0]!==e||!yn(n.fieldName)))return n.skip(),qn(n),sn(),n;if(e=qn(n),Rt.useX().omitted)return e.omit(),sn(),e;if(function(n){var t=n.fieldName;if(n=n.groupName,Rt.useX().skipped)return!0;var e=Rt.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[t];if(!1===i)return!0;if(i=!0===i,n){n:{var o=Rt.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(o,n))var s=!1===o[n];else{for(s in o)if(!0===o[s]){s=!0;break n}s=!1}}if(s)return!0;if(!0===r.groups[n])return!(i||!Gn(u)&&!1!==u[t])}r=Rt.useX().exclusion;n:{for(a in(s=Rt.useX().exclusion).groups)if(s.groups[a]){var a=!0;break n}a=!1}return!(!a||n&&n in r.groups&&r.groups[n])||!i&&!!Gn(u)&&!F(e[t])}(n))return e.skip(!!Rt.useX().skipped),sn(),e;if(n!==e&&e.fieldName===n.fieldName&&e.groupName===n.groupName&&e.isPending()&&e.cancel(),Kn(n),sn(),n.isUntested()){e=Wn();var r=function(n){return Rt.run({currentTest:n},(function(){try{var t=n.testFn()}catch(e){t=e,u(n.message)&&o(t)&&(n.message=e),t=!1}return!1===t&&n.fail(),t}))}(n);try{r&&t(r.then)?(n.asyncTest=r,n.setPending(),Dn(n)):e.emit(Ut.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(),Dn(n));return n}function Bn(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],W(o(n),Hn("fieldName","string")),W(t(r),Hn("Test callback","function"));var i=Rt.useX();return jn(e=new kt(n,r,{message:e,groupName:i.groupName,key:u}))}function Hn(n,t){return"Incompatible params passed to test function. ".concat(n," must be a ").concat(t)}var Mn,Vn,Jn,Yn=Object.assign,zn=e(r),Qn=e(u),Zn=e(i),$n=e(s),nt=e(a),tt=e(c),et=e(p),rt=e(d),ut=e(h),it=e(N),ot=e(g),st=e(m),at=e(y),ct=e(E),ft=e(b),lt=e(S),pt=e(O),dt=e(o),vt=e(R),ht=e(T),Nt=e(k),gt=e(A),mt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:$n,doesNotStartWith:e(_),endsWith:s,equals:a,greaterThan:f,greaterThanOrEquals:l,gt:f,gte:l,inside:d,isArray:p,isBetween:h,isBlank:N,isBoolean:g,isEmpty:E,isEven:function(n){return!!c(n)&&0==n%2},isFalsy:vt,isKeyOf:b,isNaN:S,isNegative:O,isNotArray:et,isNotBetween:ut,isNotBlank:it,isNotBoolean:ot,isNotEmpty:ct,isNotKeyOf:ft,isNotNaN:lt,isNotNull:zn,isNotNullish:Zn,isNotNumber:st,isNotNumeric:tt,isNotString:dt,isNotUndefined:Qn,isNotValueOf:ht,isNull:r,isNullish:i,isNumber:m,isNumeric:c,isOdd:function(n){return!!c(n)&&0!=n%2},isPositive:pt,isString:o,isTruthy:R,isUndefined:u,isValueOf:T,lengthEquals:y,lengthNotEquals:at,lessThan:C,lessThanOrEquals:v,longerThan:I,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:C,lte:v,matches:k,notEquals:nt,notInside:rt,notMatches:Nt,numberEquals:A,numberNotEquals:gt,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:_},yt=P((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?Yn(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:Yn(e,{parent:x})})),Et=function(){return(Et=Object.assign||function(n){for(var t,e=1,r=arguments.length;e<r;e++)for(var u in t=arguments[e])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)},bt=(Vn={context:function(){return yt.useX()},extend:function(n){Yn(mt,n)}},G()?new Proxy(Yn(q,Vn),{get:function(n,t){return t in n?n[t]:mt[t]?j(t):void 0}}):(w((function(n){Vn[n]=j(n)})),Yn(q,Vn))),St=function(n){return function(){return"".concat(n++)}}(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"}(Mn||(Mn={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(Jn||(Jn={}));var Ot,Rt=P((function(n,t){return t?null:Yn({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:Mn.DEFAULT,keys:{current:{},prev:{}}},mode:[Jn.ALL],testCursor:V()},n)})),Tt=Z();!function(n){n.Error="error",n.Warning="warning"}(Ot||(Ot={}));var Ct,It,kt=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=St(),this.severity=Ot.Error,this.status=At,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!==xt||(this.status=n)},n.prototype.warns=function(){return this.severity===Ot.Warning},n.prototype.setPending=function(){this.setStatus(Wt)},n.prototype.fail=function(){this.setStatus(this.warns()?Ft:wt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Lt)},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(_t)},n.prototype.cancel=function(){this.setStatus(Pt),tn()},n.prototype.reset=function(){this.status=At,tn()},n.prototype.omit=function(){this.setStatus(xt)},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(Wt)},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isOmitted=function(){return this.statusEquals(xt)},n.prototype.isUntested=function(){return this.statusEquals(At)},n.prototype.isFailing=function(){return this.statusEquals(wt)},n.prototype.isCanceled=function(){return this.statusEquals(Pt)},n.prototype.isSkipped=function(){return this.statusEquals(_t)},n.prototype.isPassing=function(){return this.statusEquals(Lt)},n.prototype.isWarning=function(){return this.statusEquals(Ft)},n.prototype.statusEquals=function(n){return this.status===n},n}(),At="UNTESTED",_t="SKIPPED",wt="FAILED",Ft="WARNING",Lt="PASSING",Wt="PENDING",Pt="CANCELED",xt="OMITTED";!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(Ct||(Ct={})),function(n){n.ERROR_COUNT="errorCount",n.WARN_COUNT="warnCount"}(It||(It={}));var Ut,Gt=Z(20),Xt=Z(20),Dt=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(Cn())};return _n(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"}(Ut||(Ut={})),Pn.group=function(n){return Un(0,"groups",n)},xn.group=function(n){return Un(1,"groups",n)};var qt=Yn(Bn,{memo:function(n){var t=Z(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=Rt.useX().testCursor.cursorAt();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)}))):jn(r[1])}}(Bn)});n.VERSION="4.2.3-dev-87ebfa",n.context=Rt,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],W(t(r),"vest.create: Expected callback to be a function.");var u=Ln(),i=B();return n={stateRef:H(i,{suiteId:St(),suiteName:n}),bus:u},Yn(Rt.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return i.reset(),an({type:Mn.SUITE},(function(){r.apply(void 0,n)})),u.emit(Ut.SUITE_CALLBACK_DONE_RUNNING),kn()})),{get:Rt.bind(n,Cn),remove:Rt.bind(n,(function(n){u.emit(Ut.REMOVE_FIELD,n)})),reset:i.reset,resetField:Rt.bind(n,(function(n){u.emit(Ut.RESET_FIELD,n)}))})},n.each=function(n,e){W(t(e),"each callback must be a function"),an({type:Mn.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.eager=function(){var n=Jn.EAGER;Rt.useX().mode[0]=n},n.enforce=bt,n.group=function(n,e){W(o(n),Xn("name must be a string")),W(t(e),Xn("callback must be a function")),an({type:Mn.GROUP},(function(){Rt.run({groupName:n},e)}))},n.include=function(n){function t(t){var e=Rt.useX(),r=e.exclusion;e.inclusion[n]=function(){return Object.prototype.hasOwnProperty.call(r.tests,n)?L(r.tests[n],!0):o(t)?!!r.tests[t]:F(t,F(Cn))}}var e=Rt.useX();return n?(e.inclusion[n]=L(e.exclusion.tests[n],!0),{when:t}):{when:t}},n.omitWhen=function(n,t){an({type:Mn.OMIT_WHEN},(function(){Rt.run({omitted:!!Rt.useX().omitted||F(n,F(Cn))},(function(){return t()}))}))},n.only=Pn,n.optional=function(n){(0,$().optionalFields()[1])((function(t){if(p(n)||o(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var e in n)t[e]=n[e];return t}))},n.skip=xn,n.skipWhen=function(n,t){an({type:Mn.SKIP_WHEN},(function(){Rt.run({skipped:!!Rt.useX().skipped||F(n,F(Cn))},(function(){return t()}))}))},n.test=qt,n.warn=function(){var n=Rt.useX("warn hook called outside of a running suite.");W(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 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 p(n,t){return l(n,t)||f(n,t)}function d(n){return!!Array.isArray(n)}function v(n,t){return!!(d(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 p(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 R(n,t){return l(n.length,t)}function b(n){return!n||(y(n)?0===n:Object.prototype.hasOwnProperty.call(n,"length")?R(n,0):"object"==typeof n&&R(Object.keys(n),0))}function O(n,t){return n in t}function S(n){return Number.isNaN(n)}function T(n){return f(n,0)}function C(n){return!!n}function _(n,t){if(i(t))return!1;for(var e in t)if(t[e]===n)return!0;return!1}function I(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=$n({},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 U(){return null}function x(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,x([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,x([bt.run({value:n},(function(){return e.apply(void 0,x([n],u,!1))})),r,n],u,!1))).pass,b(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 K(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 j(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,x([o.apply(void 0,x([n],u,!1)),r,n],u,!1))}));var s={run:function(n){return W(K(e,(function(e,r){var u,i=bt.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 R(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]),I(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];d(u)?e.push(M(u,t)):(u=t(u),nt(u)&&e.push(u))}return e}function V(n){return[].concat(n).reduce((function(n,t){return d(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 Ct.useX().stateRef}function Q(){return z().testObjects()}function Z(){(0,Q()[1])((function(n){return{prev:n.prev,current:[].concat(n.current)}}))}function $(n){(0,Q()[1])((function(t){return{prev:t.prev,current:[].concat(n(t.current))}}))}function nn(){return V(M(Q()[0].current,(function(n){return n.isPending()?n:null})))}function tn(){var n=Q()[0].current;return _t([n],(function(){return V(n)}))}function en(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 rn(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 un(n){setTimeout((function(){throw Error(n)}),0)}function on(){return Ct.useX().testCursor.getCursor()}function sn(){return Ct.useX().testCursor.next()}function an(n,e){n=void 0===(n=n.type)?zn.DEFAULT:n,F(t(e));var r={current:{},prev:{}},u=on();return Ct.run({isolate:{type:n,keys:r}},(function(){Ct.useX().testCursor.addLevel(),r.prev=function(){var n=Q()[0].prev;return[].concat(J(n,on())).reduce((function(n,t){return t instanceof kt&&!i(t.key)?(n[t.key]=t,n):n}),{})}(),$((function(n){return J(n,u)[H(u)]=[],n}));var n=e();return Ct.useX().testCursor.removeLevel(),sn(),n}))}function cn(n,t){return!(!t||n.fieldName!==t)}function fn(n,t){return tn().some((function(e){return e.hasFailures()?t&&!cn(e,t)?e=!1:(e=e.warns(),e=n===It.WARNINGS==!!e):e=!1,e}))}function ln(n){return!!function(n){return!!n&&tn().some((function(t){return t.fieldName===n&&t.isOmitted()}))}(n)||!fn(It.ERRORS,n)&&(!b(tn())&&!function(n){var t=z().optionalFields()[0];return vt(nn().filter((function(e){return!(n&&!cn(e,n))&&!0!==t[e.fieldName]})))}(n)&&function(n){var t=tn(),e=z().optionalFields()[0];return t.every((function(t){return!(!n||cn(t,n))||(!0===e[t.fieldName]||t.isTested()||t.isOmitted())}))}(n))}function pn(){var n=Ct.useX().summary;return F(n),n}function dn(n,t){function e(n){i[n===It.ERRORS?At.ERROR_COUNT:At.WARN_COUNT]++,u&&(i[n]=(i[n]||[]).concat(u))}var r=t.fieldName,u=t.message;n[r]=n[r]||$n({errorCount:0,warnCount:0,testCount:0},{errors:[],warnings:[]});var i=n[r];return t.isNonActionable()||(n[r].testCount++,t.isFailing()?e(It.ERRORS):t.isWarning()&&e(It.WARNINGS)),i}function vn(n,t,e){var r;return(null===(r=null==n?void 0:n[e])||void 0===r?void 0:r[t])||[]}function hn(n,t){var e,r={};for(e in n)r[e]=n[e][t]||[];return r}function Nn(n){return En(It.ERRORS,n)}function gn(n){return En(It.WARNINGS,n)}function En(n,t){var e=pn().tests;return t?vn(e,n,t):hn(e,n)}function mn(n,t){return Rn(n,It.ERRORS,t)}function yn(n,t){return Rn(n,It.WARNINGS,t)}function Rn(n,t,e){return n=pn().groups[n],e?vn(n,t,e):hn(n,t)}function bn(n){return Sn(At.ERROR_COUNT,n)}function On(n){return Sn(At.WARN_COUNT,n)}function Sn(n,t){var e,r=pn();return T(t?null===(e=r.tests[t])||void 0===e?void 0:e[n]:r[n])}function Tn(n,t){return _n(It.ERRORS,n,t)}function Cn(n,t){return _n(It.WARNINGS,n,t)}function _n(n,t,e){var r,u,i=pn();if(n=n===It.ERRORS?At.ERROR_COUNT:At.WARN_COUNT,!(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 In(n){var t,e=pn();return n?!(null===(t=e.tests[n])||void 0===t||!t.valid):e.valid}function An(){var n=tn(),t={stateRef:z()};return Dt([n],Ct.bind(t,(function(){var n=function(){var n=tn(),t=$n({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{},valid:!1});return n.reduce((function(n,t){var e=n.tests;e[t.fieldName]=dn(e,t),e[t.fieldName].valid=!1!==e[t.fieldName].valid&&ln(t.fieldName),e=n.groups;var r=t.groupName;return r&&(e[r]=e[r]||{},e[r][t.fieldName]=dn(e[r],t)),n}),t),t.valid=ln(),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 $n(n,{getErrors:Ct.bind(e,Nn),getErrorsByGroup:Ct.bind(e,mn),getWarnings:Ct.bind(e,gn),getWarningsByGroup:Ct.bind(e,yn),hasErrors:Ct.bind(e,bn),hasErrorsByGroup:Ct.bind(e,Tn),hasWarnings:Ct.bind(e,On),hasWarningsByGroup:Ct.bind(e,Cn),isValid:Ct.bind(e,In),suiteName:t})})))}function kn(n){var t=nn();return!b(t)&&(n?t.some((function(t){return cn(t,n)})):vt(t))}function Ln(){var n=tn(),t={stateRef:z()};return qt([n],Ct.bind(t,(function(){return $n({},An(),{done:Ct.bind(t,Kt)})})))}function wn(n,e,r){return!(t(n)&&(!e||r.tests[e]&&!b(r.tests[e].testCount)))}function Wn(n){return!(kn()&&(!n||kn(n)))}function Fn(n,t){(0,z().testCallbacks()[1])((function(e){return t?e.fieldCallbacks[t]=(e.fieldCallbacks[t]||[]).concat(n):e.doneCallbacks.push(n),e}))}function Pn(n){return n.forEach((function(n){return n()}))}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(Gt.TEST_COMPLETED,(function(t){if(!t.isCanceled()){t.done(),t=t.fieldName;var e=z().testCallbacks()[0].fieldCallbacks;t&&!kn(t)&&d(e[t])&&Pn(e[t]),kn()||n.emit(Gt.ALL_RUNNING_TESTS_FINISHED)}})),n.on(Gt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var n=z().optionalFields()[0];if(!b(n)){var e={};$((function(r){return M(r,(function(r){if(Object.prototype.hasOwnProperty.call(e,r.fieldName))e[r.fieldName]&&r.omit();else{var u=n[r.fieldName];t(u)&&(e[r.fieldName]=u(),e[r.fieldName]&&r.omit())}return r}))}))}}()})),n.on(Gt.ALL_RUNNING_TESTS_FINISHED,(function(){Pn(z().testCallbacks()[0].doneCallbacks)})),n.on(Gt.REMOVE_FIELD,(function(n){tn().forEach((function(t){cn(t,n)&&(t.cancel(),function(n){$((function(t){return M(t,(function(t){return n!==t?t:null}))}))}(t))}))})),n.on(Gt.RESET_FIELD,(function(n){tn().forEach((function(t){cn(t,n)&&t.reset()}))})),n}function xn(){var n=Ct.useX();return F(n.bus),n.bus}function Xn(n){return Dn(0,"tests",n)}function Gn(n){return Dn(1,"tests",n)}function Dn(n,t,e){var r=Ct.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){o(e)&&(r.exclusion[t][e]=0===n)}))}function qn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Kn(){var n,t=Ct.useX().exclusion;for(n in t.groups)if(t.groups[n])return!0;return!1}function jn(n){return"Wrong arguments passed to group. Group ".concat(n,".")}function Bn(n){var e=n.asyncTest,r=n.message;if(e&&t(e.then)){var u=xn().emit,i=z(),s=Ct.bind({stateRef:i},(function(){Z(),u(Gt.TEST_COMPLETED,n)}));i=Ct.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 Hn(n){var t=Q()[0].prev;if(b(t))return Mn(n),n;var e=on();if(t=J(t,e)[H(e)],!i(n.key)){t=n.key,(e=Ct.useX().isolate.keys.prev[t])&&(n=e),e=n;var r=Ct.useX().isolate.keys.current;return i(r[t])?r[t]=e:un('Encountered the same test key "'.concat(t,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Mn(n),n}return!vt(e=t)||e.fieldName===n.fieldName&&e.groupName===n.groupName||(Ct.useX().isolate.type===zn.EACH||un("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=Q(),t=n[1],e=n[0].prev;n=J(e,on());var r=Ct.useX().testCursor.cursorAt();n.splice(r),t((function(n){return{prev:e,current:n.current}}))}(),t=null),Mn(n=W(t,n)),n}function Mn(n){var t=on();$((function(e){return J(e,t)[H(t)]=n,e}))}function Vn(n){var e=Zn.EAGER;if(e=!(Ct.useX().mode[0]!==e||!fn(It.ERRORS,n.fieldName)))return n.skip(),Hn(n),sn(),n;if(e=Hn(n),Ct.useX().omitted)return e.omit(),sn(),e;if(function(n){var t=n.fieldName;if(n=n.groupName,Ct.useX().skipped)return!0;var e=Ct.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=Ct.useX().exclusion.groups;if(o=Object.prototype.hasOwnProperty.call(o,n)?!1===o[n]:Kn())return!0;if(!0===r.groups[n])return!(i||!qn(u)&&!1!==u[t])}return!!(n=!!Kn()&&!n)||!i&&!!qn(u)&&!w(e[t])}(n))return e.skip(!!Ct.useX().skipped),sn(),e;if(n!==e&&e.fieldName===n.fieldName&&e.groupName===n.groupName&&e.isPending()&&e.cancel(),Mn(n),sn(),n.isUntested()){e=xn();var r=function(n){return Ct.run({currentTest:n},(function(){return n.run()}))}(n);try{r&&t(r.then)?(n.asyncTest=r,n.setPending(),Bn(n)):e.emit(Gt.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(),Bn(n));return n}function Jn(n){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var u=t(e[1])?e:x([void 0],e,!0);e=u[0],r=u[1],u=u[2],F(o(n),Yn("fieldName","string")),F(t(r),Yn("Test callback","function"));var i=Ct.useX();return Vn(e=new kt(n,r,{message:e,groupName:i.groupName,key:u}))}function Yn(n,t){return"Incompatible params passed to test function. ".concat(n," must be a ").concat(t)}var zn,Qn,Zn,$n=Object.assign,nt=e(r),tt=e(u),et=e(i),rt=e(s),ut=e(a),it=e(c),ot=e(l),st=e(d),at=e(v),ct=e(g),ft=e(E),lt=e(m),pt=e(y),dt=e(R),vt=e(b),ht=e(O),Nt=e(S),gt=e(o),Et=e(C),mt=e(_),yt=e(A),Rt={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:rt,doesNotStartWith:e(k),endsWith:s,equals:a,greaterThan:f,greaterThanOrEquals:p,gt:f,gte:p,inside:v,isArray:d,isBetween:g,isBlank:E,isBoolean:m,isEmpty:b,isEven:function(n){return!!c(n)&&0==n%2},isFalsy:Et,isKeyOf:O,isNaN:S,isNegative:function(n){return h(n,0)},isNotArray:st,isNotBetween:ct,isNotBlank:ft,isNotBoolean:lt,isNotEmpty:vt,isNotKeyOf:ht,isNotNaN:Nt,isNotNull:nt,isNotNullish:et,isNotNumber:pt,isNotNumeric:it,isNotString:gt,isNotUndefined:tt,isNotValueOf:mt,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:_,lengthEquals:R,lengthNotEquals:dt,lessThan:h,lessThanOrEquals:N,longerThan:I,longerThanOrEquals:function(n,t){return p(n.length,t)},lt:h,lte:N,matches:A,notEquals:ut,notInside:at,notMatches:yt,numberEquals:l,numberNotEquals:ot,shorterThan:function(n,t){return h(n.length,t)},shorterThanOrEquals:function(n,t){return N(n.length,t)},startsWith:k},bt=P((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?$n(e,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:$n(e,{parent:U})})),Ot=function(){function n(){if(!X())return L((function(n){t[n]=j(n)})),$n(q,t)}var t={context:function(){return bt.useX()},extend:function(t){$n(Rt,t),n()}};return n(),new Proxy($n(q,t),{get:function(n,t){return t in n?n[t]:Rt[t]?j(t):void 0}})}(),St=(Qn=0,function(){return"".concat(Qn++)});!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"}(zn||(zn={})),function(n){n[n.ALL=0]="ALL",n[n.EAGER=1]="EAGER"}(Zn||(Zn={}));var Tt,Ct=P((function(n,t){return t?null:$n({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:zn.DEFAULT,keys:{current:{},prev:{}}},mode:[Zn.ALL],testCursor:Y()},n)})),_t=B();!function(n){n.Error="error",n.Warning="warning"}(Tt||(Tt={}));var It,At,kt=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=St(),this.severity=Tt.Error,this.status=Lt,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!==Xt||(this.status=n)},n.prototype.warns=function(){return this.severity===Tt.Warning},n.prototype.setPending=function(){this.setStatus(Ut)},n.prototype.fail=function(){this.setStatus(this.warns()?Ft:Wt)},n.prototype.done=function(){this.isFinalStatus()||this.setStatus(Pt)},n.prototype.warn=function(){this.severity=Tt.Warning},n.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},n.prototype.skip=function(n){this.isPending()&&!n||this.setStatus(wt)},n.prototype.cancel=function(){this.setStatus(xt),Z()},n.prototype.reset=function(){this.status=Lt,Z()},n.prototype.omit=function(){this.setStatus(Xt)},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(Xt)},n.prototype.isUntested=function(){return this.statusEquals(Lt)},n.prototype.isFailing=function(){return this.statusEquals(Wt)},n.prototype.isCanceled=function(){return this.statusEquals(xt)},n.prototype.isSkipped=function(){return this.statusEquals(wt)},n.prototype.isPassing=function(){return this.statusEquals(Pt)},n.prototype.isWarning=function(){return this.statusEquals(Ft)},n.prototype.statusEquals=function(n){return this.status===n},n}(),Lt="UNTESTED",wt="SKIPPED",Wt="FAILED",Ft="WARNING",Pt="PASSING",Ut="PENDING",xt="CANCELED",Xt="OMITTED";!function(n){n.WARNINGS="warnings",n.ERRORS="errors"}(It||(It={})),function(n){n.ERROR_COUNT="errorCount",n.WARN_COUNT="warnCount"}(At||(At={}));var Gt,Dt=B(1),qt=B(20),Kt=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=Ln(),wn(e,n,t))return t;var r=function(){return e(An())};return Wn(n)?(r(),t):(Fn(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"}(Gt||(Gt={})),Xn.group=function(n){return Dn(0,"groups",n)},Gn.group=function(n){return Dn(1,"groups",n)};var jt=$n(Jn,{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=Ct.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)}))):Vn(r[1])}}(Jn)});n.VERSION="4.3.2-dev-2805e3",n.context=Ct,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=Un(),i=en();return n={stateRef:rn(i,{suiteId:St(),suiteName:n}),bus:u},$n(Ct.bind(n,(function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return i.reset(),an({type:zn.SUITE},(function(){r.apply(void 0,n)})),u.emit(Gt.SUITE_CALLBACK_DONE_RUNNING),Ln()})),{get:Ct.bind(n,An),remove:Ct.bind(n,(function(n){u.emit(Gt.REMOVE_FIELD,n)})),reset:i.reset,resetField:Ct.bind(n,(function(n){u.emit(Gt.RESET_FIELD,n)}))})},n.each=function(n,e){F(t(e),"each callback must be a function"),an({type:zn.EACH},(function(){n.forEach((function(n,t){e(n,t)}))}))},n.eager=function(){var n=Zn.EAGER;Ct.useX().mode[0]=n},n.enforce=Ot,n.group=function(n,e){F(o(n),jn("name must be a string")),F(t(e),jn("callback must be a function")),an({type:zn.GROUP},(function(){Ct.run({groupName:n},e)}))},n.include=function(n){var t=Ct.useX(),e=t.inclusion;return t=t.exclusion,F(o(n)),e[n]=W(t.tests[n],!0),{when:function(t){var e=Ct.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(An))}}}},n.omitWhen=function(n,t){an({type:zn.OMIT_WHEN},(function(){Ct.run({omitted:!!Ct.useX().omitted||w(n,w(An))},(function(){return t()}))}))},n.only=Xn,n.optional=function(n){(0,z().optionalFields()[1])((function(t){if(d(n)||o(n))[].concat(n).forEach((function(n){t[n]=!0}));else for(var e in n)t[e]=n[e];return t}))},n.skip=Gn,n.skipWhen=function(n,t){an({type:zn.SKIP_WHEN},(function(){Ct.run({skipped:!!Ct.useX().skipped||w(n,w(An))},(function(){return t()}))}))},n.test=jt,n.warn=function(){var n=Ct.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.2.3-dev-87ebfa",
2
+ "version": "4.3.2-dev-2805e3",
3
3
  "license": "MIT",
4
4
  "name": "vest",
5
5
  "author": "ealush",
@@ -2,7 +2,7 @@ import asArray from '../../shared/src/asArray';
2
2
 
3
3
  import { dummyTest } from './testDummy';
4
4
 
5
- import { optional, create, skip } from 'vest';
5
+ import { optional, create, skip, SuiteResult } from 'vest';
6
6
 
7
7
  export function failing(failingFields?: string | string[]) {
8
8
  return createSuiteRunResult(failingFields, fieldName => {
@@ -102,3 +102,7 @@ function createSuite(
102
102
  asArray(fieldNames).forEach(fieldName => callback(fieldName));
103
103
  });
104
104
  }
105
+
106
+ export function ser(res: SuiteResult) {
107
+ return JSON.parse(JSON.stringify(res));
108
+ }
@@ -1,67 +1,29 @@
1
- /**
2
- * Reads the testObjects list and gets full validation result from it.
3
- */
4
- declare function genTestsSummary(): TTestSummary;
5
- type TGroups = Record<string, TTestGroup>;
6
- type TTestSummary = {
7
- groups: TGroups;
8
- tests: TTestGroup;
9
- } & TTestSummaryBase;
10
- type TTestGroup = Record<string, TSingleTestSummary>;
11
- type TSingleTestSummary = {
1
+ type SuiteSummary = {
2
+ groups: Groups;
3
+ tests: Tests;
4
+ valid: boolean;
5
+ } & SummaryBase;
6
+ type GroupTestSummary = BaseTestSummary;
7
+ type Groups = Record<string, Group>;
8
+ type Group = Record<string, GroupTestSummary>;
9
+ type Tests = Record<string, SingleTestSummary>;
10
+ type SingleTestSummary = BaseTestSummary & {
11
+ valid: boolean;
12
+ };
13
+ type BaseTestSummary = SummaryBase & {
12
14
  errors: string[];
13
15
  warnings: string[];
14
- } & TTestSummaryBase;
15
- type TTestSummaryBase = {
16
+ };
17
+ type SummaryBase = {
16
18
  errorCount: number;
17
19
  warnCount: number;
18
20
  testCount: number;
19
21
  };
20
- declare function getErrors(): Record<string, string[]>;
21
- declare function getErrors(fieldName?: string): string[];
22
- declare function getWarnings(): Record<string, string[]>;
23
- declare function getWarnings(fieldName?: string): string[];
24
- declare function getErrorsByGroup(groupName: string): Record<string, string[]>;
25
- declare function getErrorsByGroup(groupName: string, fieldName: string): string[];
26
- declare function getWarningsByGroup(groupName: string): Record<string, string[]>;
27
- declare function getWarningsByGroup(groupName: string, fieldName: string): string[];
28
- declare function hasErrors(fieldName?: string): boolean;
29
- declare function hasWarnings(fieldName?: string): boolean;
30
- declare function hasErrorsByGroup(groupName: string, fieldName?: string): boolean;
31
- declare function hasWarningsByGroup(groupName: string, fieldName?: string): boolean;
32
- type SuiteResult = ReturnType<typeof genTestsSummary> & {
33
- /**
34
- * Returns whether the suite as a whole is valid.
35
- * Determined if there are no errors, and if no
36
- * required fields are skipped.
37
- */
38
- isValid: (fieldName?: string) => boolean;
39
- hasErrors: typeof hasErrors;
40
- hasWarnings: typeof hasWarnings;
41
- getErrors: typeof getErrors;
42
- getWarnings: typeof getWarnings;
43
- hasErrorsByGroup: typeof hasErrorsByGroup;
44
- hasWarningsByGroup: typeof hasWarningsByGroup;
45
- getErrorsByGroup: typeof getErrorsByGroup;
46
- getWarningsByGroup: typeof getWarningsByGroup;
47
- };
48
- type SuiteRunResult = SuiteResult & {
49
- done: IDone;
50
- };
51
- interface IDone {
52
- (...args: [
53
- cb: (res: SuiteResult) => void
54
- ]): SuiteRunResult;
55
- (...args: [
56
- fieldName: string,
57
- cb: (res: SuiteResult) => void
58
- ]): SuiteRunResult;
59
- }
60
22
  /**
61
23
  * Creates a function that returns class names that match the validation result
62
24
  */
63
- declare function classnames(res: SuiteRunResult | SuiteResult, classes?: TSupportedClasses): (fieldName: string) => string;
64
- type TSupportedClasses = {
25
+ declare function classnames(res: SuiteSummary, classes?: SupportedClasses): (fieldName: string) => string;
26
+ type SupportedClasses = {
65
27
  valid?: string;
66
28
  tested?: string;
67
29
  invalid?: string;
@@ -2,19 +2,19 @@ type DropFirst<T extends unknown[]> = T extends [
2
2
  unknown,
3
3
  ...infer U
4
4
  ] ? U : never;
5
- type TStringable = string | ((...args: any[]) => string);
6
- type TRuleReturn = boolean | {
5
+ type Stringable = string | ((...args: any[]) => string);
6
+ type RuleReturn = boolean | {
7
7
  pass: boolean;
8
- message?: TStringable;
8
+ message?: Stringable;
9
9
  };
10
- type TRuleDetailedResult = {
10
+ type RuleDetailedResult = {
11
11
  pass: boolean;
12
12
  message?: string;
13
13
  };
14
- type TArgs = any[];
15
- type TBaseRules = typeof baseRules;
16
- type KBaseRules = keyof TBaseRules;
17
- declare function condition(value: any, callback: (value: any) => TRuleReturn): TRuleReturn;
14
+ type Args = any[];
15
+ type BaseRules = typeof baseRules;
16
+ type KBaseRules = keyof BaseRules;
17
+ declare function condition(value: any, callback: (value: any) => RuleReturn): RuleReturn;
18
18
  declare function endsWith(value: string, arg1: string): boolean;
19
19
  declare function equals(value: unknown, arg1: unknown): boolean;
20
20
  declare function greaterThan(value: number | string, gt: number | string): boolean;
@@ -35,6 +35,7 @@ declare function isNull(value: unknown): value is null;
35
35
  declare function isNullish(value: any): value is null | undefined;
36
36
  declare function isNumber(value: unknown): value is number;
37
37
  declare function isNumeric(value: string | number): boolean;
38
+ declare function isPositive(value: number | string): boolean;
38
39
  declare function isStringValue(v: unknown): v is string;
39
40
  declare function isTruthy(value: unknown): boolean;
40
41
  declare function isUndefined(value?: unknown): boolean;
@@ -89,7 +90,7 @@ declare const baseRules: {
89
90
  isNumber: typeof isNumber;
90
91
  isNumeric: typeof isNumeric;
91
92
  isOdd: (value: any) => boolean;
92
- isPositive: (value: string | number) => boolean;
93
+ isPositive: typeof isPositive;
93
94
  isString: typeof isStringValue;
94
95
  isTruthy: typeof isTruthy;
95
96
  isUndefined: typeof isUndefined;
@@ -112,29 +113,29 @@ declare const baseRules: {
112
113
  shorterThanOrEquals: typeof shorterThanOrEquals;
113
114
  startsWith: typeof startsWith;
114
115
  };
115
- type TRules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<TRules<E> & E> & Record<string, (...args: TArgs) => TRules<E> & E> & {
116
- [P in KBaseRules]: (...args: DropFirst<Parameters<TBaseRules[P]>> | TArgs) => TRules<E> & E;
116
+ type Rules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
117
+ [P in KBaseRules]: (...args: DropFirst<Parameters<BaseRules[P]>> | Args) => Rules<E> & E;
117
118
  };
118
119
  /* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/no-empty-interface */
119
120
  declare global {
120
121
  namespace n4s {
121
- interface IRules<E> extends TRules<E> {
122
+ interface IRules<E> extends Rules<E> {
122
123
  }
123
124
  }
124
125
  }
125
- type TLazyRules = n4s.IRules<TLazyRuleMethods>;
126
- type TLazy = TLazyRules & TLazyRuleMethods &
126
+ type LazyRules = n4s.IRules<LazyRuleMethods>;
127
+ type Lazy = LazyRules & LazyRuleMethods &
127
128
  // This is a "catch all" hack to make TS happy while not
128
129
  // losing type hints
129
130
  Record<string, (...args: any[]) => any>;
130
- type TLazyRuleMethods = TLazyRuleRunners & {
131
- message: (message: TLazyMessage) => TLazy;
131
+ type LazyRuleMethods = LazyRuleRunners & {
132
+ message: (message: LazyMessage) => Lazy;
132
133
  };
133
- type TLazyRuleRunners = {
134
+ type LazyRuleRunners = {
134
135
  test: (value: unknown) => boolean;
135
- run: (value: unknown) => TRuleDetailedResult;
136
+ run: (value: unknown) => RuleDetailedResult;
136
137
  };
137
- type TComposeResult = TLazyRuleRunners & ((value: any) => void);
138
- type TLazyMessage = string | ((value: unknown, originalMessage?: TStringable) => string);
139
- declare function compose(...composites: TLazyRuleRunners[]): TComposeResult;
138
+ type ComposeResult = LazyRuleRunners & ((value: any) => void);
139
+ type LazyMessage = string | ((value: unknown, originalMessage?: Stringable) => string);
140
+ declare function compose(...composites: LazyRuleRunners[]): ComposeResult;
140
141
  export { compose as default };
@@ -2,19 +2,19 @@ type DropFirst<T extends unknown[]> = T extends [
2
2
  unknown,
3
3
  ...infer U
4
4
  ] ? U : never;
5
- type TStringable = string | ((...args: any[]) => string);
6
- type TRuleReturn = boolean | {
5
+ type Stringable = string | ((...args: any[]) => string);
6
+ type RuleReturn = boolean | {
7
7
  pass: boolean;
8
- message?: TStringable;
8
+ message?: Stringable;
9
9
  };
10
- type TRuleDetailedResult = {
10
+ type RuleDetailedResult = {
11
11
  pass: boolean;
12
12
  message?: string;
13
13
  };
14
- type TArgs = any[];
15
- type TBaseRules = typeof baseRules;
16
- type KBaseRules = keyof TBaseRules;
17
- declare function condition(value: any, callback: (value: any) => TRuleReturn): TRuleReturn;
14
+ type Args = any[];
15
+ type BaseRules = typeof baseRules;
16
+ type KBaseRules = keyof BaseRules;
17
+ declare function condition(value: any, callback: (value: any) => RuleReturn): RuleReturn;
18
18
  declare function endsWith(value: string, arg1: string): boolean;
19
19
  declare function equals(value: unknown, arg1: unknown): boolean;
20
20
  declare function greaterThan(value: number | string, gt: number | string): boolean;
@@ -35,6 +35,7 @@ declare function isNull(value: unknown): value is null;
35
35
  declare function isNullish(value: any): value is null | undefined;
36
36
  declare function isNumber(value: unknown): value is number;
37
37
  declare function isNumeric(value: string | number): boolean;
38
+ declare function isPositive(value: number | string): boolean;
38
39
  declare function isStringValue(v: unknown): v is string;
39
40
  declare function isTruthy(value: unknown): boolean;
40
41
  declare function isUndefined(value?: unknown): boolean;
@@ -89,7 +90,7 @@ declare const baseRules: {
89
90
  isNumber: typeof isNumber;
90
91
  isNumeric: typeof isNumeric;
91
92
  isOdd: (value: any) => boolean;
92
- isPositive: (value: string | number) => boolean;
93
+ isPositive: typeof isPositive;
93
94
  isString: typeof isStringValue;
94
95
  isTruthy: typeof isTruthy;
95
96
  isUndefined: typeof isUndefined;
@@ -112,33 +113,33 @@ declare const baseRules: {
112
113
  shorterThanOrEquals: typeof shorterThanOrEquals;
113
114
  startsWith: typeof startsWith;
114
115
  };
115
- type TRules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<TRules<E> & E> & Record<string, (...args: TArgs) => TRules<E> & E> & {
116
- [P in KBaseRules]: (...args: DropFirst<Parameters<TBaseRules[P]>> | TArgs) => TRules<E> & E;
116
+ type Rules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
117
+ [P in KBaseRules]: (...args: DropFirst<Parameters<BaseRules[P]>> | Args) => Rules<E> & E;
117
118
  };
118
119
  /* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/no-empty-interface */
119
120
  declare global {
120
121
  namespace n4s {
121
- interface IRules<E> extends TRules<E> {
122
+ interface IRules<E> extends Rules<E> {
122
123
  }
123
124
  }
124
125
  }
125
- type TLazyRules = n4s.IRules<TLazyRuleMethods>;
126
- type TLazy = TLazyRules & TLazyRuleMethods &
126
+ type LazyRules = n4s.IRules<LazyRuleMethods>;
127
+ type Lazy = LazyRules & LazyRuleMethods &
127
128
  // This is a "catch all" hack to make TS happy while not
128
129
  // losing type hints
129
130
  Record<string, (...args: any[]) => any>;
130
- type TLazyRuleMethods = TLazyRuleRunners & {
131
- message: (message: TLazyMessage) => TLazy;
131
+ type LazyRuleMethods = LazyRuleRunners & {
132
+ message: (message: LazyMessage) => Lazy;
132
133
  };
133
- type TLazyRuleRunners = {
134
+ type LazyRuleRunners = {
134
135
  test: (value: unknown) => boolean;
135
- run: (value: unknown) => TRuleDetailedResult;
136
+ run: (value: unknown) => RuleDetailedResult;
136
137
  };
137
- type TLazyMessage = string | ((value: unknown, originalMessage?: TStringable) => string);
138
- declare function allOf(value: unknown, ...rules: TLazy[]): TRuleDetailedResult;
139
- declare function anyOf(value: unknown, ...rules: TLazy[]): TRuleDetailedResult;
140
- declare function noneOf(value: unknown, ...rules: TLazy[]): TRuleDetailedResult;
141
- declare function oneOf(value: unknown, ...rules: TLazy[]): TRuleDetailedResult;
138
+ type LazyMessage = string | ((value: unknown, originalMessage?: Stringable) => string);
139
+ declare function allOf(value: unknown, ...rules: Lazy[]): RuleDetailedResult;
140
+ declare function anyOf(value: unknown, ...rules: Lazy[]): RuleDetailedResult;
141
+ declare function noneOf(value: unknown, ...rules: Lazy[]): RuleDetailedResult;
142
+ declare function oneOf(value: unknown, ...rules: Lazy[]): RuleDetailedResult;
142
143
  declare global {
143
144
  namespace n4s {
144
145
  interface EnforceCustomMatchers<R> {
@@ -2,19 +2,19 @@ type DropFirst<T extends unknown[]> = T extends [
2
2
  unknown,
3
3
  ...infer U
4
4
  ] ? U : never;
5
- type TStringable = string | ((...args: any[]) => string);
6
- type TRuleReturn = boolean | {
5
+ type Stringable = string | ((...args: any[]) => string);
6
+ type RuleReturn = boolean | {
7
7
  pass: boolean;
8
- message?: TStringable;
8
+ message?: Stringable;
9
9
  };
10
- type TRuleDetailedResult = {
10
+ type RuleDetailedResult = {
11
11
  pass: boolean;
12
12
  message?: string;
13
13
  };
14
- type TArgs = any[];
15
- type TBaseRules = typeof baseRules;
16
- type KBaseRules = keyof TBaseRules;
17
- declare function condition(value: any, callback: (value: any) => TRuleReturn): TRuleReturn;
14
+ type Args = any[];
15
+ type BaseRules = typeof baseRules;
16
+ type KBaseRules = keyof BaseRules;
17
+ declare function condition(value: any, callback: (value: any) => RuleReturn): RuleReturn;
18
18
  declare function endsWith(value: string, arg1: string): boolean;
19
19
  declare function equals(value: unknown, arg1: unknown): boolean;
20
20
  declare function greaterThan(value: number | string, gt: number | string): boolean;
@@ -35,6 +35,7 @@ declare function isNull(value: unknown): value is null;
35
35
  declare function isNullish(value: any): value is null | undefined;
36
36
  declare function isNumber(value: unknown): value is number;
37
37
  declare function isNumeric(value: string | number): boolean;
38
+ declare function isPositive(value: number | string): boolean;
38
39
  declare function isStringValue(v: unknown): v is string;
39
40
  declare function isTruthy(value: unknown): boolean;
40
41
  declare function isUndefined(value?: unknown): boolean;
@@ -89,7 +90,7 @@ declare const baseRules: {
89
90
  isNumber: typeof isNumber;
90
91
  isNumeric: typeof isNumeric;
91
92
  isOdd: (value: any) => boolean;
92
- isPositive: (value: string | number) => boolean;
93
+ isPositive: typeof isPositive;
93
94
  isString: typeof isStringValue;
94
95
  isTruthy: typeof isTruthy;
95
96
  isUndefined: typeof isUndefined;
@@ -112,37 +113,37 @@ declare const baseRules: {
112
113
  shorterThanOrEquals: typeof shorterThanOrEquals;
113
114
  startsWith: typeof startsWith;
114
115
  };
115
- type TRules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<TRules<E> & E> & Record<string, (...args: TArgs) => TRules<E> & E> & {
116
- [P in KBaseRules]: (...args: DropFirst<Parameters<TBaseRules[P]>> | TArgs) => TRules<E> & E;
116
+ type Rules<E = Record<string, unknown>> = n4s.EnforceCustomMatchers<Rules<E> & E> & Record<string, (...args: Args) => Rules<E> & E> & {
117
+ [P in KBaseRules]: (...args: DropFirst<Parameters<BaseRules[P]>> | Args) => Rules<E> & E;
117
118
  };
118
119
  /* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/no-empty-interface */
119
120
  declare global {
120
121
  namespace n4s {
121
- interface IRules<E> extends TRules<E> {
122
+ interface IRules<E> extends Rules<E> {
122
123
  }
123
124
  }
124
125
  }
125
- type TLazyRules = n4s.IRules<TLazyRuleMethods>;
126
- type TLazy = TLazyRules & TLazyRuleMethods &
126
+ type LazyRules = n4s.IRules<LazyRuleMethods>;
127
+ type Lazy = LazyRules & LazyRuleMethods &
127
128
  // This is a "catch all" hack to make TS happy while not
128
129
  // losing type hints
129
130
  Record<string, (...args: any[]) => any>;
130
- type TLazyRuleMethods = TLazyRuleRunners & {
131
- message: (message: TLazyMessage) => TLazy;
131
+ type LazyRuleMethods = LazyRuleRunners & {
132
+ message: (message: LazyMessage) => Lazy;
132
133
  };
133
- type TLazyRuleRunners = {
134
+ type LazyRuleRunners = {
134
135
  test: (value: unknown) => boolean;
135
- run: (value: unknown) => TRuleDetailedResult;
136
+ run: (value: unknown) => RuleDetailedResult;
136
137
  };
137
- type TLazyMessage = string | ((value: unknown, originalMessage?: TStringable) => string);
138
- declare function isArrayOf(inputArray: any[], currentRule: TLazyRuleRunners): TRuleDetailedResult;
139
- interface IShapeObject extends Record<string, any>, Record<string, TLazyRuleRunners> {
138
+ type LazyMessage = string | ((value: unknown, originalMessage?: Stringable) => string);
139
+ declare function isArrayOf(inputArray: any[], currentRule: LazyRuleRunners): RuleDetailedResult;
140
+ interface ShapeObject extends Record<string, any>, Record<string, LazyRuleRunners> {
140
141
  }
141
- declare function loose(inputObject: Record<string, any>, shapeObject: IShapeObject): TRuleDetailedResult;
142
- declare function optional(value: any, ruleChain: TLazy): TRuleDetailedResult;
143
- declare function shape(inputObject: Record<string, any>, shapeObject: IShapeObject): TRuleDetailedResult;
142
+ declare function loose(inputObject: Record<string, any>, shapeObject: ShapeObject): RuleDetailedResult;
143
+ declare function optional(value: any, ruleChain: Lazy): RuleDetailedResult;
144
+ declare function shape(inputObject: Record<string, any>, shapeObject: ShapeObject): RuleDetailedResult;
144
145
  // Help needed improving the typings of this file.
145
- // Ideally, we'd be able to extend IShapeObject, but that's not possible.
146
+ // Ideally, we'd be able to extend ShapeObject, but that's not possible.
146
147
  declare function partial<T extends Record<any, any>>(shapeObject: T): T;
147
148
  declare global {
148
149
  namespace n4s {
package/types/parser.d.ts CHANGED
@@ -1,63 +1,25 @@
1
- /**
2
- * Reads the testObjects list and gets full validation result from it.
3
- */
4
- declare function genTestsSummary(): TTestSummary;
5
- type TGroups = Record<string, TTestGroup>;
6
- type TTestSummary = {
7
- groups: TGroups;
8
- tests: TTestGroup;
9
- } & TTestSummaryBase;
10
- type TTestGroup = Record<string, TSingleTestSummary>;
11
- type TSingleTestSummary = {
1
+ type SuiteSummary = {
2
+ groups: Groups;
3
+ tests: Tests;
4
+ valid: boolean;
5
+ } & SummaryBase;
6
+ type GroupTestSummary = BaseTestSummary;
7
+ type Groups = Record<string, Group>;
8
+ type Group = Record<string, GroupTestSummary>;
9
+ type Tests = Record<string, SingleTestSummary>;
10
+ type SingleTestSummary = BaseTestSummary & {
11
+ valid: boolean;
12
+ };
13
+ type BaseTestSummary = SummaryBase & {
12
14
  errors: string[];
13
15
  warnings: string[];
14
- } & TTestSummaryBase;
15
- type TTestSummaryBase = {
16
+ };
17
+ type SummaryBase = {
16
18
  errorCount: number;
17
19
  warnCount: number;
18
20
  testCount: number;
19
21
  };
20
- declare function getErrors(): Record<string, string[]>;
21
- declare function getErrors(fieldName?: string): string[];
22
- declare function getWarnings(): Record<string, string[]>;
23
- declare function getWarnings(fieldName?: string): string[];
24
- declare function getErrorsByGroup(groupName: string): Record<string, string[]>;
25
- declare function getErrorsByGroup(groupName: string, fieldName: string): string[];
26
- declare function getWarningsByGroup(groupName: string): Record<string, string[]>;
27
- declare function getWarningsByGroup(groupName: string, fieldName: string): string[];
28
- declare function hasErrors(fieldName?: string): boolean;
29
- declare function hasWarnings(fieldName?: string): boolean;
30
- declare function hasErrorsByGroup(groupName: string, fieldName?: string): boolean;
31
- declare function hasWarningsByGroup(groupName: string, fieldName?: string): boolean;
32
- type SuiteResult = ReturnType<typeof genTestsSummary> & {
33
- /**
34
- * Returns whether the suite as a whole is valid.
35
- * Determined if there are no errors, and if no
36
- * required fields are skipped.
37
- */
38
- isValid: (fieldName?: string) => boolean;
39
- hasErrors: typeof hasErrors;
40
- hasWarnings: typeof hasWarnings;
41
- getErrors: typeof getErrors;
42
- getWarnings: typeof getWarnings;
43
- hasErrorsByGroup: typeof hasErrorsByGroup;
44
- hasWarningsByGroup: typeof hasWarningsByGroup;
45
- getErrorsByGroup: typeof getErrorsByGroup;
46
- getWarningsByGroup: typeof getWarningsByGroup;
47
- };
48
- type SuiteRunResult = SuiteResult & {
49
- done: IDone;
50
- };
51
- interface IDone {
52
- (...args: [
53
- cb: (res: SuiteResult) => void
54
- ]): SuiteRunResult;
55
- (...args: [
56
- fieldName: string,
57
- cb: (res: SuiteResult) => void
58
- ]): SuiteRunResult;
59
- }
60
- declare function parse(res: SuiteRunResult | SuiteResult): {
22
+ declare function parse(res: SuiteSummary): {
61
23
  valid: (fieldName?: string) => boolean;
62
24
  tested: (fieldName?: string) => boolean;
63
25
  invalid: (fieldName?: string) => boolean;