vest 4.2.0 → 4.2.2

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.
@@ -1 +1 @@
1
- import{createContext as t}from"context";export{enforce}from"n4s";var n,e=Object.assign,r=(n=0,function(){return"".concat(n++)});function u(t){return"function"==typeof t}function i(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return u(t)?t.apply(void 0,n):t}function o(t,n){var e;return null!==(e=i(t))&&void 0!==e?e:n}function s(t,n){throw Error(o(n,t))}function a(t,n){setTimeout((function(){s(t,n)}),0)}function c(t){function n(t,n,u){return r.references.push(),e(t,i(n,u)),function(){return[r.references[t],function(n){return e(t,i(n,r.references[t]))}]}}function e(n,e){var i=r.references[n];r.references[n]=e,u(n=o[n][1])&&n(e,i),u(t)&&t()}var r={references:[]},o=[];return{registerStateKey:function(t,e){var r=o.length;return o.push([t,e]),n(r,t)},reset:function(){var t=r.references;r.references=[],o.forEach((function(e,r){return n(r,e[0],t[r])}))}}}var f,l=f||(f={});function p(t,n){var e=n.suiteId;return n=n.suiteName,{optionalFields:t.registerStateKey((function(){return{}})),suiteId:t.registerStateKey(e),suiteName:t.registerStateKey(n),testCallbacks:t.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:t.registerStateKey((function(t){return{prev:t?t.current:[],current:[]}}))}}function d(t){return(t=[].concat(t))[t.length-1]}function v(){function t(){n=[0]}var n=[];return t(),{addLevel:function(){n.push(0)},cursorAt:function(){return d(n)},getCursor:function(){return[].concat(n)},next:function(){return n[n.length-1]++,d(n)},removeLevel:function(){n.pop()},reset:t}}l[l.DEFAULT=0]="DEFAULT",l[l.SUITE=1]="SUITE",l[l.EACH=2]="EACH",l[l.SKIP_WHEN=3]="SKIP_WHEN",l[l.OMIT_WHEN=4]="OMIT_WHEN",l[l.GROUP=5]="GROUP";var h,g=h||(h={});g[g.ALL=0]="ALL",g[g.EAGER=1]="EAGER";var E=t((function(t,n){return n?null:e({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:f.DEFAULT,keys:{current:{},prev:{}}},mode:[h.ALL],testCursor:v()},t)}));function m(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(void 0,n)}}var y=m((function(t){return null===t}));function N(t,n){for(var e=[],r=0;r<t.length;r++){var u=t[r];Array.isArray(u)?e.push(N(u,n)):(u=n(u),y(u)&&e.push(u))}return e}function b(t){return[].concat(t).reduce((function(t,n){return Array.isArray(n)?t.concat(b(n)):[].concat(t).concat(n)}),[])}function S(t,n){var e=0;for(n=n.slice(0,-1);e<n.length;e++){var r=n[e];t[r]=o(t[r],[]),t=t[r]}return t}function C(t){return null==t}function R(t){return String(t)===t}function T(t){function n(e,u){var i=n.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),r.length>Number(t)&&(r.length=t),u)}function e(t){return r.findIndex((function(n){var e=n[0];return t.length===Number(e.length)&&t.every((function(t,n){return t===e[n]}))}))}void 0===t&&(t=1);var r=[];return n.invalidate=function(t){-1<(t=e(t))&&r.splice(t,1)},n.get=function(t){return r[e(t)]||null},n}function A(){return E.useX().stateRef}function I(){return A().testObjects()}function k(){(0,I()[1])((function(t){return{prev:t.prev,current:[].concat(t.current)}}))}function O(t){(0,I()[1])((function(n){return{prev:n.prev,current:[].concat(t(n.current))}}))}function _(){return b(N(I()[0].current,(function(t){return t.isPending()?t:null})))}var L=T();function F(){var t=I()[0].current;return L([t],(function(){return b(t)}))}var G,P=G||(G={});P.Error="error",P.Warning="warning";var W=function(){function t(t,n,e){var u=void 0===e?{}:e;e=u.message;var i=u.groupName;u=u.key,this.key=null,this.id=r(),this.severity=G.Error,this.status=X,this.fieldName=t,this.testFn=n,i&&(this.groupName=i),e&&(this.message=e),u&&(this.key=u)}return t.prototype.run=function(){try{var t=this.testFn()}catch(n){t=n,void 0===this.message&&R(t)&&(this.message=n),t=!1}return!1===t&&this.fail(),t},t.prototype.setStatus=function(t){this.isFinalStatus()&&t!==j||(this.status=t)},t.prototype.warns=function(){return this.severity===G.Warning},t.prototype.setPending=function(){this.setStatus(H)},t.prototype.fail=function(){this.setStatus(this.warns()?U:D)},t.prototype.done=function(){this.isFinalStatus()||this.setStatus(x)},t.prototype.warn=function(){this.severity=G.Warning},t.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},t.prototype.skip=function(t){this.isPending()&&!t||this.setStatus(w)},t.prototype.cancel=function(){this.setStatus(K),k()},t.prototype.reset=function(){this.status=X,k()},t.prototype.omit=function(){this.setStatus(j)},t.prototype.valueOf=function(){return!this.isFailing()},t.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},t.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},t.prototype.isPending=function(){return this.statusEquals(H)},t.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},t.prototype.isOmitted=function(){return this.statusEquals(j)},t.prototype.isUntested=function(){return this.statusEquals(X)},t.prototype.isFailing=function(){return this.statusEquals(D)},t.prototype.isCanceled=function(){return this.statusEquals(K)},t.prototype.isSkipped=function(){return this.statusEquals(w)},t.prototype.isPassing=function(){return this.statusEquals(x)},t.prototype.isWarning=function(){return this.statusEquals(U)},t.prototype.statusEquals=function(t){return this.status===t},t}(),X="UNTESTED",w="SKIPPED",D="FAILED",U="WARNING",x="PASSING",H="PENDING",K="CANCELED",j="OMITTED";function M(){return E.useX().testCursor.getCursor()}function q(){return E.useX().testCursor.next()}function B(t,n){if(t=void 0===(t=t.type)?f.DEFAULT:t,u(n)){var e={current:{},prev:{}},r=M();return E.run({isolate:{type:t,keys:e}},(function(){E.useX().testCursor.addLevel(),e.prev=function(){var t=I()[0].prev;return[].concat(S(t,M())).reduce((function(t,n){return n instanceof W&&!C(n.key)?(t[n.key]=n,t):t}),{})}(),O((function(t){return S(t,r)[d(r)]=[],t}));var t=n();return E.useX().testCursor.removeLevel(),q(),t}))}}function V(t){if(t){if("number"==typeof t)return 0===t;if(Object.prototype.hasOwnProperty.call(t,"length"))return t.length===Number(0);if("object"==typeof t)return Object.keys(t).length===Number(0)}return!0}var Y=m(V);function z(t,n){return!(!n||t.fieldName!==n)}function J(t){var n=_();return!V(n)&&(t?n.some((function(n){return z(n,t)})):Y(n))}var Q,Z=Q||(Q={});function $(t,n){function e(t){i[t===Q.ERRORS?"errorCount":"warnCount"]++,u&&(i[t]=(i[t]||[]).concat(u))}var r=n.fieldName,u=n.message;t[r]=t[r]||{errorCount:0,warnCount:0,testCount:0};var i=t[r];return n.isNonActionable()||(t[r].testCount++,n.isFailing()?e(Q.ERRORS):n.isWarning()&&e(Q.WARNINGS)),i}function tt(){return(tt=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var u in n=arguments[e])Object.prototype.hasOwnProperty.call(n,u)&&(t[u]=n[u]);return t}).apply(this,arguments)}function nt(t,n,e){if(e||2===arguments.length)for(var r,u=0,i=n.length;u<i;u++)!r&&u in n||(r||(r=Array.prototype.slice.call(n,0,u)),r[u]=n[u]);return t.concat(r||Array.prototype.slice.call(n))}function et(t,n,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return n.reduce((function(n,e){if(u&&e.groupName!==u)var r=!0;else i&&!z(e,i)?r=!0:(r=e.warns(),r=t===Q.WARNINGS!=!!r);return r||!e.hasFailures()||(n[e.fieldName]=(n[e.fieldName]||[]).concat(e.message||[])),n}),tt({},i&&((r={})[i]=[],r)))}function rt(t){return it(Q.ERRORS,t)}function ut(t){return it(Q.WARNINGS,t)}function it(t,n){return t=et(t,F(),{fieldName:n}),n?t[n]:t}function ot(t,n){return t=at(Q.ERRORS,t,n),n?t[n]:t}function st(t,n){return t=at(Q.WARNINGS,t,n),n?t[n]:t}function at(t,n,e){return n||s("get".concat(t[0].toUpperCase()).concat(t.slice(1),"ByGroup requires a group name. Received `").concat(n,"` instead.")),et(t,F(),{group:n,fieldName:e})}function ct(t,n,e){return(e=!t.hasFailures()||e&&!z(t,e))||(t=t.warns(),e=n===Q.WARNINGS!=!!t),!e}function ft(t){return pt(Q.ERRORS,t)}function lt(t){return pt(Q.WARNINGS,t)}function pt(t,n){return F().some((function(e){return ct(e,t,n)}))}function dt(t,n){return ht(Q.ERRORS,t,n)}function vt(t,n){return ht(Q.WARNINGS,t,n)}function ht(t,n,e){return F().some((function(r){return n===r.groupName&&ct(r,t,e)}))}Z.WARNINGS="warnings",Z.ERRORS="errors";var gt=T(20);function Et(){var t=F(),n={stateRef:A()};return gt([t],E.bind(n,(function(){var t=A().suiteName()[0];return e(function(){var t=F(),n=e({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{}});return t.forEach((function(t){var e=t.fieldName,r=t.groupName;n.tests[e]=$(n.tests,t),r&&(n.groups[r]=n.groups[r]||{},n.groups[r][e]=$(n.groups[r],t))})),function(t){for(var n in t.tests)t.errorCount+=t.tests[n].errorCount,t.warnCount+=t.tests[n].warnCount,t.testCount+=t.tests[n].testCount;return t}(n)}(),{getErrors:E.bind(n,rt),getErrorsByGroup:E.bind(n,ot),getWarnings:E.bind(n,ut),getWarningsByGroup:E.bind(n,st),hasErrors:E.bind(n,ft),hasErrorsByGroup:E.bind(n,dt),hasWarnings:E.bind(n,lt),hasWarningsByGroup:E.bind(n,vt),isValid:E.bind(n,(function(t){var n=Et(),e=F().reduce((function(t,n){return t[n.fieldName]||n.isOmitted()&&(t[n.fieldName]=!0),t}),{});return(e=!!t&&!!e[t])?t=!0:n.hasErrors(t)?t=!1:t=!(V(e=F())||t&&V(n.tests[t])||function(t){var n=A().optionalFields()[0];return Y(_().filter((function(e){return!(t&&!z(e,t))&&!0!==n[e.fieldName]})))}(t))&&function(t){var n=F(),e=A().optionalFields()[0];return n.every((function(n){return!(!t||z(n,t))||!0===e[n.fieldName]||n.isTested()||n.isOmitted()}))}(t),t})),suiteName:t})})))}var mt=T(20);function yt(){var t=F(),n={stateRef:A()};return mt([t],E.bind(n,(function(){return e({},Et(),{done:E.bind(n,St)})})))}function Nt(t,n,e){return!(u(t)&&(!n||e.tests[n]&&!V(e.tests[n].testCount)))}function bt(t){return!(J()&&(!t||J(t)))}function St(){function t(){return r(Et())}for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];return n=n[1],e=yt(),Nt(r,n,e)?e:bt(n)?(t(),e):(Ct(t,n),e)}function Ct(t,n){var e=E.bind({},t);(0,A().testCallbacks()[1])((function(t){return n?t.fieldCallbacks[n]=(t.fieldCallbacks[n]||[]).concat(e):t.doneCallbacks.push(e),t}))}function Rt(t){return t.forEach((function(t){return t()}))}function Tt(){var t=function(){var t={};return{emit:function(n,e){(t[n]||[]).forEach((function(t){t(e)}))},on:function(n,e){return t[n]=(t[n]||[]).concat(e),{off:function(){t[n]=t[n].filter((function(t){return t!==e}))}}}}}();return t.on(It.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var e=A().testCallbacks()[0].fieldCallbacks;n&&!J(n)&&Array.isArray(e[n])&&Rt(e[n]),J()||t.emit(It.ALL_RUNNING_TESTS_FINISHED)}})),t.on(It.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var t=A().optionalFields()[0];if(!V(t)){var n={};O((function(e){return N(e,(function(e){var r=e.fieldName;if(n.hasOwnProperty(r))n[e.fieldName]&&e.omit();else{var i=t[r];u(i)&&(n[r]=i(),n[e.fieldName]&&e.omit())}return e}))}))}}()})),t.on(It.ALL_RUNNING_TESTS_FINISHED,(function(){Rt(A().testCallbacks()[0].doneCallbacks)})),t.on(It.REMOVE_FIELD,(function(t){F().forEach((function(n){z(n,t)&&(n.cancel(),function(t){O((function(n){return N(n,(function(n){return t!==n?n:null}))}))}(n))}))})),t.on(It.RESET_FIELD,(function(t){F().forEach((function(n){z(n,t)&&n.reset()}))})),t}function At(){var t=E.useX();return t.bus||s(),t.bus}var It,kt=It||(It={});function Ot(t){return Lt(0,"tests",t)}function _t(t){return Lt(1,"tests",t)}function Lt(t,n,e){var r=E.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){R(e)&&(r.exclusion[n][e]=0===t)}))}function Ft(t){for(var n in t)if(!0===t[n])return!0;return!1}function Gt(t){s("Wrong arguments passed to group. Group ".concat(t,"."))}kt.TEST_COMPLETED="test_completed",kt.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",kt.REMOVE_FIELD="remove_field",kt.RESET_FIELD="reset_field",kt.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running",Ot.group=function(t){return Lt(0,"groups",t)},_t.group=function(t){return Lt(1,"groups",t)};var Pt=m(R);function Wt(t){var n=t.asyncTest,e=t.message;if(n&&u(n.then)){var r=At().emit,i=A(),o=E.bind({stateRef:i},(function(){k(),r(It.TEST_COMPLETED,t)}));i=E.bind({stateRef:i},(function(n){t.isCanceled()||(t.message=R(n)?n:e,t.fail(),o())}));try{n.then(o,i)}catch(t){i()}}}function Xt(t){var n=M();O((function(e){return S(e,n)[d(n)]=t,e}))}function wt(t){var n=I()[0].prev;if(V(n))Xt(t),n=t;else{var e=M();if(n=S(n,e)[d(e)],C(t.key))!Y(e=n)||e.fieldName===t.fieldName&&e.groupName===t.groupName||(E.useX().isolate.type!==f.EACH&&a("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(t.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 t=I(),n=t[1],e=t[0].prev;t=S(e,M());var r=E.useX().testCursor.cursorAt();t.splice(r),n((function(t){return{prev:e,current:t.current}}))}(),n=null),Xt(n=o(n,t));else{n=t.key;var r=E.useX().isolate.keys.prev[n];e=t,r&&(e=r),r=e;var c=E.useX().isolate.keys.current;C(c[n])?c[n]=r:a('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Xt(n=e)}}if(e=h.EAGER,e=!(E.useX().mode[0]!==e||!ft(t.fieldName)))return q(),t.skip(),t;if(E.useX().omitted)return n.omit(),q(),n;if(function(t){var n=t.fieldName;if(t=t.groupName,E.useX().skipped)return!0;var e=E.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,o=u[n];if(!1===o)return!0;if(o=!0===o,t){t:{var s=E.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(s,t))var a=!1===s[t];else{for(a in s)if(!0===s[a]){a=!0;break t}a=!1}}if(a)return!0;if(!0===r.groups[t])return!(o||!Ft(u)&&!1!==u[n])}r=E.useX().exclusion;t:{for(c in(a=E.useX().exclusion).groups)if(a.groups[c]){var c=!0;break t}c=!1}return!(!c||t&&t in r.groups&&r.groups[t])||!o&&!!Ft(u)&&!i(e[n])}(t))return n.skip(!!E.useX().skipped),q(),n;if(t!==n&&n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&n.cancel(),Xt(t),q(),t.isUntested()){n=At(),e=function(t){return E.run({currentTest:t},(function(){try{var n=t.testFn()}catch(e){n=e,void 0===t.message&&R(n)&&(t.message=e),n=!1}return!1===n&&t.fail(),n}))}(t);try{e&&u(e.then)?(t.asyncTest=e,t.setPending(),Wt(t)):n.emit(It.TEST_COMPLETED,t)}catch(n){s("Unexpected error encountered during test registration.\n Test Object: ".concat(t,".\n Error: ").concat(n,"."))}}else(n=t.asyncTest)&&u(n.then)&&(t.setPending(),Wt(t));return t}function Dt(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var r=u(n[1])?n:nt([void 0],n,!0);n=r[0],e=r[1],r=r[2],Pt(t)&&xt("fieldName","string"),u(e)||xt("Test callback","function");var i=E.useX();return wt(n=new W(t,e,{message:n,groupName:i.groupName,key:r}))}var Ut=e(Dt,{memo:function(t){var n=T(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=E.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[A().suiteId()[0],e,u].concat(i),null===(r=n.get(u))?n(u,(function(){return t(e,s,o)})):r[1].isCanceled()?(n.invalidate(u),n(u,(function(){return t(e,s,o)}))):wt(r[1])}}(Dt)});function xt(t,n){s("Incompatible params passed to test function. ".concat(t," must be a ").concat(n))}var Ht="4.2.0";function Kt(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var i=(t=t.reverse())[0];t=t[1],u(i)||s("vest.create: Expected callback to be a function.");var o=Tt(),a=c();return t={stateRef:p(a,{suiteId:r(),suiteName:t}),bus:o},e(E.bind(t,(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return a.reset(),B({type:f.SUITE},(function(){i.apply(void 0,t)})),o.emit(It.SUITE_CALLBACK_DONE_RUNNING),yt()})),{get:E.bind(t,Et),remove:E.bind(t,(function(t){o.emit(It.REMOVE_FIELD,t)})),reset:a.reset,resetField:E.bind(t,(function(t){o.emit(It.RESET_FIELD,t)}))})}function jt(t,n){u(n)||s("each callback must be a function"),B({type:f.EACH},(function(){t.forEach((function(t,e){n(t,e)}))}))}function Mt(){var t=h.EAGER;E.useX().mode[0]=t}function qt(t,n){R(t)||Gt("name must be a string"),u(n)||Gt("callback must be a function"),B({type:f.GROUP},(function(){E.run({groupName:t},n)}))}function Bt(t){function n(n){var e=E.useX(),r=e.exclusion;e.inclusion[t]=function(){return Object.prototype.hasOwnProperty.call(r.tests,t)?o(r.tests[t],!0):R(n)?!!r.tests[n]:i(n,i(Et))}}var e=E.useX();return t?(e.inclusion[t]=o(e.exclusion.tests[t],!0),{when:n}):{when:n}}function Vt(t,n){B({type:f.OMIT_WHEN},(function(){E.run({omitted:!!E.useX().omitted||i(t,i(Et))},(function(){return n()}))}))}function Yt(t){(0,A().optionalFields()[1])((function(n){if(Array.isArray(t)||R(t))[].concat(t).forEach((function(t){n[t]=!0}));else for(var e in t)n[e]=t[e];return n}))}function zt(t,n){B({type:f.SKIP_WHEN},(function(){E.run({skipped:!!E.useX().skipped||i(t,i(Et))},(function(){return n()}))}))}function Jt(){var t=E.useX("warn hook called outside of a running suite.");t.currentTest||s("warn called outside of a test."),t.currentTest.warn()}export{Ht as VERSION,E as context,Kt as create,jt as each,Mt as eager,qt as group,Bt as include,Vt as omitWhen,Ot as only,Yt as optional,_t as skip,zt as skipWhen,Ut as test,Jt as warn};
1
+ import{createContext as t}from"context";export{enforce}from"n4s";var n,e=(n=0,function(){return"".concat(n++)});function r(t){return String(t)===t}function u(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(void 0,n)}}function i(t){function n(e,u){var i=n.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),r.length>Number(t)&&(r.length=t),u)}function e(t){return r.findIndex((function(n){var e=n[0];return t.length===Number(e.length)&&t.every((function(t,n){return t===e[n]}))}))}void 0===t&&(t=1);var r=[];return n.invalidate=function(t){-1<(t=e(t))&&r.splice(t,1)},n.get=function(t){return r[e(t)]||null},n}var o=u((function(t){return null===t}));function s(t){return"function"==typeof t}function a(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return s(t)?t.apply(void 0,n):t}function c(t,n){var e;return null!==(e=a(t))&&void 0!==e?e:n}function f(t){return(t=[].concat(t))[t.length-1]}function l(t,n){for(var e=[],r=0;r<t.length;r++){var u=t[r];Array.isArray(u)?e.push(l(u,n)):(u=n(u),o(u)&&e.push(u))}return e}function p(t){return[].concat(t).reduce((function(t,n){return Array.isArray(n)?t.concat(p(n)):[].concat(t).concat(n)}),[])}function d(t,n){var e=0;for(n=n.slice(0,-1);e<n.length;e++){var r=n[e];t[r]=c(t[r],[]),t=t[r]}return t}var v=Object.assign;function h(){function t(){n=[0]}var n=[];return t(),{addLevel:function(){n.push(0)},cursorAt:function(){return f(n)},getCursor:function(){return[].concat(n)},next:function(){return n[n.length-1]++,f(n)},removeLevel:function(){n.pop()},reset:t}}var g,E=g||(g={});E[E.DEFAULT=0]="DEFAULT",E[E.SUITE=1]="SUITE",E[E.EACH=2]="EACH",E[E.SKIP_WHEN=3]="SKIP_WHEN",E[E.OMIT_WHEN=4]="OMIT_WHEN",E[E.GROUP=5]="GROUP";var m,y=m||(m={});y[y.ALL=0]="ALL",y[y.EAGER=1]="EAGER";var N=t((function(t,n){return n?null:v({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:g.DEFAULT,keys:{current:{},prev:{}}},mode:[m.ALL],testCursor:h()},t)}));function b(){return N.useX().stateRef}function S(){return b().testObjects()}function C(){(0,S()[1])((function(t){return{prev:t.prev,current:[].concat(t.current)}}))}function R(t){(0,S()[1])((function(n){return{prev:n.prev,current:[].concat(t(n.current))}}))}function T(){return p(l(S()[0].current,(function(t){return t.isPending()?t:null})))}var A=i();function I(){var t=S()[0].current;return A([t],(function(){return p(t)}))}var k,O=k||(k={});O.Error="error",O.Warning="warning";var _=function(){function t(t,n,r){var u=void 0===r?{}:r;r=u.message;var i=u.groupName;u=u.key,this.key=null,this.id=e(),this.severity=k.Error,this.status=L,this.fieldName=t,this.testFn=n,i&&(this.groupName=i),r&&(this.message=r),u&&(this.key=u)}return t.prototype.run=function(){try{var t=this.testFn()}catch(n){t=n,void 0===this.message&&r(t)&&(this.message=n),t=!1}return!1===t&&this.fail(),t},t.prototype.setStatus=function(t){this.isFinalStatus()&&t!==D||(this.status=t)},t.prototype.warns=function(){return this.severity===k.Warning},t.prototype.setPending=function(){this.setStatus(X)},t.prototype.fail=function(){this.setStatus(this.warns()?P:G)},t.prototype.done=function(){this.isFinalStatus()||this.setStatus(W)},t.prototype.warn=function(){this.severity=k.Warning},t.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},t.prototype.skip=function(t){this.isPending()&&!t||this.setStatus(F)},t.prototype.cancel=function(){this.setStatus(w),C()},t.prototype.reset=function(){this.status=L,C()},t.prototype.omit=function(){this.setStatus(D)},t.prototype.valueOf=function(){return!this.isFailing()},t.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},t.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},t.prototype.isPending=function(){return this.statusEquals(X)},t.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},t.prototype.isOmitted=function(){return this.statusEquals(D)},t.prototype.isUntested=function(){return this.statusEquals(L)},t.prototype.isFailing=function(){return this.statusEquals(G)},t.prototype.isCanceled=function(){return this.statusEquals(w)},t.prototype.isSkipped=function(){return this.statusEquals(F)},t.prototype.isPassing=function(){return this.statusEquals(W)},t.prototype.isWarning=function(){return this.statusEquals(P)},t.prototype.statusEquals=function(t){return this.status===t},t}(),L="UNTESTED",F="SKIPPED",G="FAILED",P="WARNING",W="PASSING",X="PENDING",w="CANCELED",D="OMITTED";function U(t,n){throw Error(c(n,t))}function x(t,n){setTimeout((function(){U(t,n)}),0)}function H(t){function n(t,n,u){return r.references.push(),e(t,a(n,u)),function(){return[r.references[t],function(n){return e(t,a(n,r.references[t]))}]}}function e(n,e){var i=r.references[n];r.references[n]=e,s(n=u[n][1])&&n(e,i),s(t)&&t()}var r={references:[]},u=[];return{registerStateKey:function(t,e){var r=u.length;return u.push([t,e]),n(r,t)},reset:function(){var t=r.references;r.references=[],u.forEach((function(e,r){return n(r,e[0],t[r])}))}}}function K(t,n){var e=n.suiteId;return n=n.suiteName,{optionalFields:t.registerStateKey((function(){return{}})),suiteId:t.registerStateKey(e),suiteName:t.registerStateKey(n),testCallbacks:t.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:t.registerStateKey((function(t){return{prev:t?t.current:[],current:[]}}))}}function j(t){return null==t}function M(){return N.useX().testCursor.getCursor()}function q(){return N.useX().testCursor.next()}function B(t,n){if(t=void 0===(t=t.type)?g.DEFAULT:t,s(n)){var e={current:{},prev:{}},r=M();return N.run({isolate:{type:t,keys:e}},(function(){N.useX().testCursor.addLevel(),e.prev=function(){var t=S()[0].prev;return[].concat(d(t,M())).reduce((function(t,n){return n instanceof _&&!j(n.key)?(t[n.key]=n,t):t}),{})}(),R((function(t){return d(t,r)[f(r)]=[],t}));var t=n();return N.useX().testCursor.removeLevel(),q(),t}))}}var V,Y=V||(V={});function J(t,n){function e(t){i[t===V.ERRORS?"errorCount":"warnCount"]++,u&&(i[t]=(i[t]||[]).concat(u))}var r=n.fieldName,u=n.message;t[r]=t[r]||{errorCount:0,warnCount:0,testCount:0};var i=t[r];return n.isNonActionable()||(t[r].testCount++,n.isFailing()?e(V.ERRORS):n.isWarning()&&e(V.WARNINGS)),i}function z(){return(z=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var u in n=arguments[e])Object.prototype.hasOwnProperty.call(n,u)&&(t[u]=n[u]);return t}).apply(this,arguments)}function Q(t,n,e){if(e||2===arguments.length)for(var r,u=0,i=n.length;u<i;u++)!r&&u in n||(r||(r=Array.prototype.slice.call(n,0,u)),r[u]=n[u]);return t.concat(r||Array.prototype.slice.call(n))}function Z(t,n){return!(!n||t.fieldName!==n)}function $(t,n,e){var r;void 0===e&&(e={});var u=(e=e||{}).group,i=e.fieldName;return n.reduce((function(n,e){if(u&&e.groupName!==u)var r=!0;else i&&!Z(e,i)?r=!0:(r=e.warns(),r=t===V.WARNINGS!=!!r);return r||!e.hasFailures()||(n[e.fieldName]=(n[e.fieldName]||[]).concat(e.message||[])),n}),z({},i&&((r={})[i]=[],r)))}function tt(t){return et(V.ERRORS,t)}function nt(t){return et(V.WARNINGS,t)}function et(t,n){return t=$(t,I(),{fieldName:n}),n?t[n]:t}function rt(t,n){return t=it(V.ERRORS,t,n),n?t[n]:t}function ut(t,n){return t=it(V.WARNINGS,t,n),n?t[n]:t}function it(t,n,e){return n||U("get".concat(t[0].toUpperCase()).concat(t.slice(1),"ByGroup requires a group name. Received `").concat(n,"` instead.")),$(t,I(),{group:n,fieldName:e})}function ot(t,n,e){return(e=!t.hasFailures()||e&&!Z(t,e))||(t=t.warns(),e=n===V.WARNINGS!=!!t),!e}function st(t){return ct(V.ERRORS,t)}function at(t){return ct(V.WARNINGS,t)}function ct(t,n){return I().some((function(e){return ot(e,t,n)}))}function ft(t,n){return pt(V.ERRORS,t,n)}function lt(t,n){return pt(V.WARNINGS,t,n)}function pt(t,n,e){return I().some((function(r){return n===r.groupName&&ot(r,t,e)}))}function dt(t){if(t){if("number"==typeof t)return 0===t;if(Object.prototype.hasOwnProperty.call(t,"length"))return t.length===Number(0);if("object"==typeof t)return Object.keys(t).length===Number(0)}return!0}Y.WARNINGS="warnings",Y.ERRORS="errors";var vt=u(dt);var ht=i(20);function gt(){var t=I(),n={stateRef:b()};return ht([t],N.bind(n,(function(){var t=b().suiteName()[0];return v(function(){var t=I(),n=v({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{}});return t.forEach((function(t){var e=t.fieldName,r=t.groupName;n.tests[e]=J(n.tests,t),r&&(n.groups[r]=n.groups[r]||{},n.groups[r][e]=J(n.groups[r],t))})),function(t){for(var n in t.tests)t.errorCount+=t.tests[n].errorCount,t.warnCount+=t.tests[n].warnCount,t.testCount+=t.tests[n].testCount;return t}(n)}(),{getErrors:N.bind(n,tt),getErrorsByGroup:N.bind(n,rt),getWarnings:N.bind(n,nt),getWarningsByGroup:N.bind(n,ut),hasErrors:N.bind(n,st),hasErrorsByGroup:N.bind(n,ft),hasWarnings:N.bind(n,at),hasWarningsByGroup:N.bind(n,lt),isValid:N.bind(n,(function(t){var n=gt(),e=I().reduce((function(t,n){return t[n.fieldName]||n.isOmitted()&&(t[n.fieldName]=!0),t}),{});return(e=!!t&&!!e[t])?t=!0:n.hasErrors(t)?t=!1:t=!(dt(e=I())||t&&dt(n.tests[t])||function(t){var n=b().optionalFields()[0];return vt(T().filter((function(e){return!(t&&!Z(e,t))&&!0!==n[e.fieldName]})))}(t))&&function(t){var n=I(),e=b().optionalFields()[0];return n.every((function(n){return!(!t||Z(n,t))||!0===e[n.fieldName]||n.isTested()||n.isOmitted()}))}(t),t})),suiteName:t})})))}function Et(t){var n=T();return!dt(n)&&(t?n.some((function(n){return Z(n,t)})):vt(n))}var mt=i(20);function yt(){var t=I(),n={stateRef:b()};return mt([t],N.bind(n,(function(){return v({},gt(),{done:N.bind(n,St)})})))}function Nt(t,n,e){return!(s(t)&&(!n||e.tests[n]&&!dt(e.tests[n].testCount)))}function bt(t){return!(Et()&&(!t||Et(t)))}function St(){function t(){return r(gt())}for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];return n=n[1],e=yt(),Nt(r,n,e)?e:bt(n)?(t(),e):(Ct(t,n),e)}function Ct(t,n){var e=N.bind({},t);(0,b().testCallbacks()[1])((function(t){return n?t.fieldCallbacks[n]=(t.fieldCallbacks[n]||[]).concat(e):t.doneCallbacks.push(e),t}))}function Rt(t){return t.forEach((function(t){return t()}))}function Tt(){var t=function(){var t={};return{emit:function(n,e){(t[n]||[]).forEach((function(t){t(e)}))},on:function(n,e){return t[n]=(t[n]||[]).concat(e),{off:function(){t[n]=t[n].filter((function(t){return t!==e}))}}}}}();return t.on(It.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var e=b().testCallbacks()[0].fieldCallbacks;n&&!Et(n)&&Array.isArray(e[n])&&Rt(e[n]),Et()||t.emit(It.ALL_RUNNING_TESTS_FINISHED)}})),t.on(It.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){var t=b().optionalFields()[0];if(!dt(t)){var n={};R((function(e){return l(e,(function(e){var r=e.fieldName;if(n.hasOwnProperty(r))n[e.fieldName]&&e.omit();else{var u=t[r];s(u)&&(n[r]=u(),n[e.fieldName]&&e.omit())}return e}))}))}}()})),t.on(It.ALL_RUNNING_TESTS_FINISHED,(function(){Rt(b().testCallbacks()[0].doneCallbacks)})),t.on(It.REMOVE_FIELD,(function(t){I().forEach((function(n){Z(n,t)&&(n.cancel(),function(t){R((function(n){return l(n,(function(n){return t!==n?n:null}))}))}(n))}))})),t.on(It.RESET_FIELD,(function(t){I().forEach((function(n){Z(n,t)&&n.reset()}))})),t}function At(){var t=N.useX();return t.bus||U(),t.bus}var It,kt=It||(It={});function Ot(t){return Lt(0,"tests",t)}function _t(t){return Lt(1,"tests",t)}function Lt(t,n,e){var u=N.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){r(e)&&(u.exclusion[n][e]=0===t)}))}function Ft(t){for(var n in t)if(!0===t[n])return!0;return!1}function Gt(t){U("Wrong arguments passed to group. Group ".concat(t,"."))}kt.TEST_COMPLETED="test_completed",kt.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",kt.REMOVE_FIELD="remove_field",kt.RESET_FIELD="reset_field",kt.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running",Ot.group=function(t){return Lt(0,"groups",t)},_t.group=function(t){return Lt(1,"groups",t)};var Pt=u(r);function Wt(t){var n=t.asyncTest,e=t.message;if(n&&s(n.then)){var u=At().emit,i=b(),o=N.bind({stateRef:i},(function(){C(),u(It.TEST_COMPLETED,t)}));i=N.bind({stateRef:i},(function(n){t.isCanceled()||(t.message=r(n)?n:e,t.fail(),o())}));try{n.then(o,i)}catch(t){i()}}}function Xt(t){var n=S()[0].prev;if(dt(n))return wt(t),t;var e=M();if(n=d(n,e)[f(e)],!j(t.key)){n=t.key,(e=N.useX().isolate.keys.prev[n])&&(t=e),e=t;var r=N.useX().isolate.keys.current;return j(r[n])?r[n]=e:x('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),wt(t),t}return!vt(e=n)||e.fieldName===t.fieldName&&e.groupName===t.groupName||(N.useX().isolate.type===g.EACH||x("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(t.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 t=S(),n=t[1],e=t[0].prev;t=d(e,M());var r=N.useX().testCursor.cursorAt();t.splice(r),n((function(t){return{prev:e,current:t.current}}))}(),n=null),wt(t=c(n,t)),t}function wt(t){var n=M();R((function(e){return d(e,n)[f(n)]=t,e}))}function Dt(t){var n=m.EAGER;if(n=!(N.useX().mode[0]!==n||!st(t.fieldName)))return t.skip(),Xt(t),q(),t;if(n=Xt(t),N.useX().omitted)return n.omit(),q(),n;if(function(t){var n=t.fieldName;if(t=t.groupName,N.useX().skipped)return!0;var e=N.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[n];if(!1===i)return!0;if(i=!0===i,t){t:{var o=N.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(o,t))var s=!1===o[t];else{for(s in o)if(!0===o[s]){s=!0;break t}s=!1}}if(s)return!0;if(!0===r.groups[t])return!(i||!Ft(u)&&!1!==u[n])}r=N.useX().exclusion;t:{for(c in(s=N.useX().exclusion).groups)if(s.groups[c]){var c=!0;break t}c=!1}return!(!c||t&&t in r.groups&&r.groups[t])||!i&&!!Ft(u)&&!a(e[n])}(t))return n.skip(!!N.useX().skipped),q(),n;if(t!==n&&n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&n.cancel(),wt(t),q(),t.isUntested()){n=At();var e=function(t){return N.run({currentTest:t},(function(){try{var n=t.testFn()}catch(e){n=e,void 0===t.message&&r(n)&&(t.message=e),n=!1}return!1===n&&t.fail(),n}))}(t);try{e&&s(e.then)?(t.asyncTest=e,t.setPending(),Wt(t)):n.emit(It.TEST_COMPLETED,t)}catch(n){U("Unexpected error encountered during test registration.\n Test Object: ".concat(JSON.stringify(t),".\n Error: ").concat(n,"."))}}else(n=t.asyncTest)&&s(n.then)&&(t.setPending(),Wt(t));return t}function Ut(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var r=s(n[1])?n:Q([void 0],n,!0);n=r[0],e=r[1],r=r[2],Pt(t)&&Ht("fieldName","string"),s(e)||Ht("Test callback","function");var u=N.useX();return Dt(n=new _(t,e,{message:n,groupName:u.groupName,key:r}))}var xt=v(Ut,{memo:function(t){var n=i(100);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=N.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[b().suiteId()[0],e,u].concat(i),null===(r=n.get(u))?n(u,(function(){return t(e,s,o)})):r[1].isCanceled()?(n.invalidate(u),n(u,(function(){return t(e,s,o)}))):Dt(r[1])}}(Ut)});function Ht(t,n){U("Incompatible params passed to test function. ".concat(t," must be a ").concat(n))}var Kt="4.2.2";function jt(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=(t=t.reverse())[0];t=t[1],s(r)||U("vest.create: Expected callback to be a function.");var u=Tt(),i=H();return t={stateRef:K(i,{suiteId:e(),suiteName:t}),bus:u},v(N.bind(t,(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return i.reset(),B({type:g.SUITE},(function(){r.apply(void 0,t)})),u.emit(It.SUITE_CALLBACK_DONE_RUNNING),yt()})),{get:N.bind(t,gt),remove:N.bind(t,(function(t){u.emit(It.REMOVE_FIELD,t)})),reset:i.reset,resetField:N.bind(t,(function(t){u.emit(It.RESET_FIELD,t)}))})}function Mt(t,n){s(n)||U("each callback must be a function"),B({type:g.EACH},(function(){t.forEach((function(t,e){n(t,e)}))}))}function qt(){var t=m.EAGER;N.useX().mode[0]=t}function Bt(t,n){r(t)||Gt("name must be a string"),s(n)||Gt("callback must be a function"),B({type:g.GROUP},(function(){N.run({groupName:t},n)}))}function Vt(t){function n(n){var e=N.useX(),u=e.exclusion;e.inclusion[t]=function(){return Object.prototype.hasOwnProperty.call(u.tests,t)?c(u.tests[t],!0):r(n)?!!u.tests[n]:a(n,a(gt))}}var e=N.useX();return t?(e.inclusion[t]=c(e.exclusion.tests[t],!0),{when:n}):{when:n}}function Yt(t,n){B({type:g.OMIT_WHEN},(function(){N.run({omitted:!!N.useX().omitted||a(t,a(gt))},(function(){return n()}))}))}function Jt(t){(0,b().optionalFields()[1])((function(n){if(Array.isArray(t)||r(t))[].concat(t).forEach((function(t){n[t]=!0}));else for(var e in t)n[e]=t[e];return n}))}function zt(t,n){B({type:g.SKIP_WHEN},(function(){N.run({skipped:!!N.useX().skipped||a(t,a(gt))},(function(){return n()}))}))}function Qt(){var t=N.useX("warn hook called outside of a running suite.");t.currentTest||U("warn called outside of a test."),t.currentTest.warn()}export{Kt as VERSION,N as context,jt as create,Mt as each,qt as eager,Bt as group,Vt as include,Yt as omitWhen,Ot as only,Jt as optional,_t as skip,zt as skipWhen,xt as test,Qt as warn};
@@ -693,106 +693,100 @@
693
693
  return "".concat(n++);
694
694
  }; })(0);
695
695
 
696
- // eslint-disable-next-line max-lines-per-function
697
- function createState(onStateChange) {
698
- var state = {
699
- references: []
696
+ function shouldUseErrorAsMessage(message, error) {
697
+ // kind of cheating with this safe guard, but it does the job
698
+ return isUndefined(message) && isStringValue(error);
699
+ }
700
+
701
+ function asArray(possibleArg) {
702
+ return [].concat(possibleArg);
703
+ }
704
+
705
+ /**
706
+ * Creates a cache function
707
+ */
708
+ function createCache(maxSize) {
709
+ if (maxSize === void 0) { maxSize = 1; }
710
+ var cacheStorage = [];
711
+ var cache = function (deps, cacheAction) {
712
+ var cacheHit = cache.get(deps);
713
+ // cache hit is not null
714
+ if (cacheHit)
715
+ return cacheHit[1];
716
+ var result = cacheAction();
717
+ cacheStorage.unshift([deps.concat(), result]);
718
+ if (longerThan(cacheStorage, maxSize))
719
+ cacheStorage.length = maxSize;
720
+ return result;
700
721
  };
701
- var registrations = [];
702
- return {
703
- registerStateKey: registerStateKey,
704
- reset: reset
722
+ // invalidate an item in the cache by its dependencies
723
+ cache.invalidate = function (deps) {
724
+ var index = findIndex(deps);
725
+ if (index > -1)
726
+ cacheStorage.splice(index, 1);
705
727
  };
706
- /**
707
- * Registers a new key in the state, takes the initial value (may be a function that returns the initial value), returns a function.
708
- *
709
- * @example
710
- *
711
- * const useColor = state.registerStateKey("blue");
712
- *
713
- * let [color, setColor] = useColor(); // -> ["blue", Function]
714
- *
715
- * setColor("green");
716
- *
717
- * useColor()[0]; -> "green"
718
- */
719
- function registerStateKey(initialState, onUpdate) {
720
- var key = registrations.length;
721
- registrations.push([initialState, onUpdate]);
722
- return initKey(key, initialState);
723
- }
724
- function reset() {
725
- var prev = current();
726
- state.references = [];
727
- registrations.forEach(function (_a, index) {
728
- var initialValue = _a[0];
729
- return initKey(index, initialValue, prev[index]);
728
+ // Retrieves an item from the cache.
729
+ cache.get = function (deps) {
730
+ return cacheStorage[findIndex(deps)] || null;
731
+ };
732
+ return cache;
733
+ function findIndex(deps) {
734
+ return cacheStorage.findIndex(function (_a) {
735
+ var cachedDeps = _a[0];
736
+ return lengthEquals(deps, cachedDeps.length) &&
737
+ deps.every(function (dep, i) { return dep === cachedDeps[i]; });
730
738
  });
731
739
  }
732
- function initKey(key, initialState, prevState) {
733
- current().push();
734
- set(key, optionalFunctionValue(initialState, prevState));
735
- return function useStateKey() {
736
- return [
737
- current()[key],
738
- function (nextState) {
739
- return set(key, optionalFunctionValue(nextState, current()[key]));
740
- },
741
- ];
742
- };
743
- }
744
- function current() {
745
- return state.references;
746
- }
747
- function set(index, value) {
748
- var prevValue = state.references[index];
749
- state.references[index] = value;
750
- var _a = registrations[index], onUpdate = _a[1];
751
- if (isFunction(onUpdate)) {
752
- onUpdate(value, prevValue);
740
+ }
741
+
742
+ function last(values) {
743
+ var valuesArray = asArray(values);
744
+ return valuesArray[valuesArray.length - 1];
745
+ }
746
+
747
+ // This is kind of a map/filter in one function.
748
+ // Normally, behaves like a nested-array map,
749
+ // but returning `null` will drop the element from the array
750
+ function transform(array, cb) {
751
+ var res = [];
752
+ for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
753
+ var v = array_1[_i];
754
+ if (isArray(v)) {
755
+ res.push(transform(v, cb));
753
756
  }
754
- if (isFunction(onStateChange)) {
755
- onStateChange();
757
+ else {
758
+ var output = cb(v);
759
+ if (isNotNull(output)) {
760
+ res.push(output);
761
+ }
756
762
  }
757
763
  }
764
+ return res;
758
765
  }
759
-
760
- var IsolateTypes;
761
- (function (IsolateTypes) {
762
- IsolateTypes[IsolateTypes["DEFAULT"] = 0] = "DEFAULT";
763
- IsolateTypes[IsolateTypes["SUITE"] = 1] = "SUITE";
764
- IsolateTypes[IsolateTypes["EACH"] = 2] = "EACH";
765
- IsolateTypes[IsolateTypes["SKIP_WHEN"] = 3] = "SKIP_WHEN";
766
- IsolateTypes[IsolateTypes["OMIT_WHEN"] = 4] = "OMIT_WHEN";
767
- IsolateTypes[IsolateTypes["GROUP"] = 5] = "GROUP";
768
- })(IsolateTypes || (IsolateTypes = {}));
769
-
770
- function createStateRef(state, _a) {
771
- var suiteId = _a.suiteId, suiteName = _a.suiteName;
772
- return {
773
- optionalFields: state.registerStateKey(function () { return ({}); }),
774
- suiteId: state.registerStateKey(suiteId),
775
- suiteName: state.registerStateKey(suiteName),
776
- testCallbacks: state.registerStateKey(function () { return ({
777
- fieldCallbacks: {},
778
- doneCallbacks: []
779
- }); }),
780
- testObjects: state.registerStateKey(function (prev) {
781
- return {
782
- prev: prev ? prev.current : [],
783
- current: []
784
- };
785
- })
786
- };
766
+ function valueAtPath(array, path) {
767
+ return getCurrent(array, path)[last(path)];
787
768
  }
788
-
789
- function asArray(possibleArg) {
790
- return [].concat(possibleArg);
769
+ function setValueAtPath(array, path, value) {
770
+ var current = getCurrent(array, path);
771
+ current[last(path)] = value;
772
+ return array;
791
773
  }
792
-
793
- function last(values) {
794
- var valuesArray = asArray(values);
795
- return valuesArray[valuesArray.length - 1];
774
+ function flatten(values) {
775
+ return asArray(values).reduce(function (acc, value) {
776
+ if (isArray(value)) {
777
+ return acc.concat(flatten(value));
778
+ }
779
+ return asArray(acc).concat(value);
780
+ }, []);
781
+ }
782
+ function getCurrent(array, path) {
783
+ var current = array;
784
+ for (var _i = 0, _a = path.slice(0, -1); _i < _a.length; _i++) {
785
+ var p = _a[_i];
786
+ current[p] = defaultTo(current[p], []);
787
+ current = current[p];
788
+ }
789
+ return current;
796
790
  }
797
791
 
798
792
  function createCursor() {
@@ -829,6 +823,16 @@
829
823
  };
830
824
  }
831
825
 
826
+ var IsolateTypes;
827
+ (function (IsolateTypes) {
828
+ IsolateTypes[IsolateTypes["DEFAULT"] = 0] = "DEFAULT";
829
+ IsolateTypes[IsolateTypes["SUITE"] = 1] = "SUITE";
830
+ IsolateTypes[IsolateTypes["EACH"] = 2] = "EACH";
831
+ IsolateTypes[IsolateTypes["SKIP_WHEN"] = 3] = "SKIP_WHEN";
832
+ IsolateTypes[IsolateTypes["OMIT_WHEN"] = 4] = "OMIT_WHEN";
833
+ IsolateTypes[IsolateTypes["GROUP"] = 5] = "GROUP";
834
+ })(IsolateTypes || (IsolateTypes = {}));
835
+
832
836
  var Modes;
833
837
  (function (Modes) {
834
838
  Modes[Modes["ALL"] = 0] = "ALL";
@@ -856,93 +860,6 @@
856
860
  }, ctxRef);
857
861
  });
858
862
 
859
- // This is kind of a map/filter in one function.
860
- // Normally, behaves like a nested-array map,
861
- // but returning `null` will drop the element from the array
862
- function transform(array, cb) {
863
- var res = [];
864
- for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
865
- var v = array_1[_i];
866
- if (isArray(v)) {
867
- res.push(transform(v, cb));
868
- }
869
- else {
870
- var output = cb(v);
871
- if (isNotNull(output)) {
872
- res.push(output);
873
- }
874
- }
875
- }
876
- return res;
877
- }
878
- function valueAtPath(array, path) {
879
- return getCurrent(array, path)[last(path)];
880
- }
881
- function setValueAtPath(array, path, value) {
882
- var current = getCurrent(array, path);
883
- current[last(path)] = value;
884
- return array;
885
- }
886
- function flatten(values) {
887
- return asArray(values).reduce(function (acc, value) {
888
- if (isArray(value)) {
889
- return acc.concat(flatten(value));
890
- }
891
- return asArray(acc).concat(value);
892
- }, []);
893
- }
894
- function getCurrent(array, path) {
895
- var current = array;
896
- for (var _i = 0, _a = path.slice(0, -1); _i < _a.length; _i++) {
897
- var p = _a[_i];
898
- current[p] = defaultTo(current[p], []);
899
- current = current[p];
900
- }
901
- return current;
902
- }
903
-
904
- function shouldUseErrorAsMessage(message, error) {
905
- // kind of cheating with this safe guard, but it does the job
906
- return isUndefined(message) && isStringValue(error);
907
- }
908
-
909
- /**
910
- * Creates a cache function
911
- */
912
- function createCache(maxSize) {
913
- if (maxSize === void 0) { maxSize = 1; }
914
- var cacheStorage = [];
915
- var cache = function (deps, cacheAction) {
916
- var cacheHit = cache.get(deps);
917
- // cache hit is not null
918
- if (cacheHit)
919
- return cacheHit[1];
920
- var result = cacheAction();
921
- cacheStorage.unshift([deps.concat(), result]);
922
- if (longerThan(cacheStorage, maxSize))
923
- cacheStorage.length = maxSize;
924
- return result;
925
- };
926
- // invalidate an item in the cache by its dependencies
927
- cache.invalidate = function (deps) {
928
- var index = findIndex(deps);
929
- if (index > -1)
930
- cacheStorage.splice(index, 1);
931
- };
932
- // Retrieves an item from the cache.
933
- cache.get = function (deps) {
934
- return cacheStorage[findIndex(deps)] || null;
935
- };
936
- return cache;
937
- function findIndex(deps) {
938
- return cacheStorage.findIndex(function (_a) {
939
- var cachedDeps = _a[0];
940
- return lengthEquals(deps, cachedDeps.length) &&
941
- deps.every(function (dep, i) { return dep === cachedDeps[i]; });
942
- });
943
- }
944
- }
945
-
946
863
  // STATE REF
947
864
  function useStateRef() {
948
865
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -1158,6 +1075,89 @@
1158
1075
  var STATUS_CANCELED = 'CANCELED';
1159
1076
  var STATUS_OMITTED = 'OMITTED';
1160
1077
 
1078
+ // eslint-disable-next-line max-lines-per-function
1079
+ function createState(onStateChange) {
1080
+ var state = {
1081
+ references: []
1082
+ };
1083
+ var registrations = [];
1084
+ return {
1085
+ registerStateKey: registerStateKey,
1086
+ reset: reset
1087
+ };
1088
+ /**
1089
+ * Registers a new key in the state, takes the initial value (may be a function that returns the initial value), returns a function.
1090
+ *
1091
+ * @example
1092
+ *
1093
+ * const useColor = state.registerStateKey("blue");
1094
+ *
1095
+ * let [color, setColor] = useColor(); // -> ["blue", Function]
1096
+ *
1097
+ * setColor("green");
1098
+ *
1099
+ * useColor()[0]; -> "green"
1100
+ */
1101
+ function registerStateKey(initialState, onUpdate) {
1102
+ var key = registrations.length;
1103
+ registrations.push([initialState, onUpdate]);
1104
+ return initKey(key, initialState);
1105
+ }
1106
+ function reset() {
1107
+ var prev = current();
1108
+ state.references = [];
1109
+ registrations.forEach(function (_a, index) {
1110
+ var initialValue = _a[0];
1111
+ return initKey(index, initialValue, prev[index]);
1112
+ });
1113
+ }
1114
+ function initKey(key, initialState, prevState) {
1115
+ current().push();
1116
+ set(key, optionalFunctionValue(initialState, prevState));
1117
+ return function useStateKey() {
1118
+ return [
1119
+ current()[key],
1120
+ function (nextState) {
1121
+ return set(key, optionalFunctionValue(nextState, current()[key]));
1122
+ },
1123
+ ];
1124
+ };
1125
+ }
1126
+ function current() {
1127
+ return state.references;
1128
+ }
1129
+ function set(index, value) {
1130
+ var prevValue = state.references[index];
1131
+ state.references[index] = value;
1132
+ var _a = registrations[index], onUpdate = _a[1];
1133
+ if (isFunction(onUpdate)) {
1134
+ onUpdate(value, prevValue);
1135
+ }
1136
+ if (isFunction(onStateChange)) {
1137
+ onStateChange();
1138
+ }
1139
+ }
1140
+ }
1141
+
1142
+ function createStateRef(state, _a) {
1143
+ var suiteId = _a.suiteId, suiteName = _a.suiteName;
1144
+ return {
1145
+ optionalFields: state.registerStateKey(function () { return ({}); }),
1146
+ suiteId: state.registerStateKey(suiteId),
1147
+ suiteName: state.registerStateKey(suiteName),
1148
+ testCallbacks: state.registerStateKey(function () { return ({
1149
+ fieldCallbacks: {},
1150
+ doneCallbacks: []
1151
+ }); }),
1152
+ testObjects: state.registerStateKey(function (prev) {
1153
+ return {
1154
+ prev: prev ? prev.current : [],
1155
+ current: []
1156
+ };
1157
+ })
1158
+ };
1159
+ }
1160
+
1161
1161
  function usePath() {
1162
1162
  var context$1 = context.useX();
1163
1163
  return context$1.testCursor.getCursor();
@@ -1231,29 +1231,6 @@
1231
1231
  return context.useX().isolate.type === IsolateTypes.EACH;
1232
1232
  }
1233
1233
 
1234
- function nonMatchingFieldName(testObject, fieldName) {
1235
- return !!fieldName && !matchingFieldName(testObject, fieldName);
1236
- }
1237
- function matchingFieldName(testObject, fieldName) {
1238
- return !!(fieldName && testObject.fieldName === fieldName);
1239
- }
1240
-
1241
- /**
1242
- * Checks if a given field, or the suite as a whole still have remaining tests.
1243
- */
1244
- function hasRemainingTests(fieldName) {
1245
- var allIncomplete = useAllIncomplete();
1246
- if (isEmpty(allIncomplete)) {
1247
- return false;
1248
- }
1249
- if (fieldName) {
1250
- return allIncomplete.some(function (testObject) {
1251
- return matchingFieldName(testObject, fieldName);
1252
- });
1253
- }
1254
- return isNotEmpty(allIncomplete);
1255
- }
1256
-
1257
1234
  var Severity;
1258
1235
  (function (Severity) {
1259
1236
  Severity["WARNINGS"] = "warnings";
@@ -1325,6 +1302,13 @@
1325
1302
  };
1326
1303
  }
1327
1304
 
1305
+ function nonMatchingFieldName(testObject, fieldName) {
1306
+ return !!fieldName && !matchingFieldName(testObject, fieldName);
1307
+ }
1308
+ function matchingFieldName(testObject, fieldName) {
1309
+ return !!(fieldName && testObject.fieldName === fieldName);
1310
+ }
1311
+
1328
1312
  function either(a, b) {
1329
1313
  return !!a !== !!b;
1330
1314
  }
@@ -1513,7 +1497,7 @@
1513
1497
  }
1514
1498
 
1515
1499
  var cache$1 = createCache(20);
1516
- function produceDraft() {
1500
+ function produceSuiteResult() {
1517
1501
  var testObjects = useTestsFlat();
1518
1502
  var ctxRef = { stateRef: useStateRef() };
1519
1503
  return cache$1([testObjects], context.bind(ctxRef, function () {
@@ -1528,19 +1512,35 @@
1528
1512
  hasWarnings: context.bind(ctxRef, hasWarnings),
1529
1513
  hasWarningsByGroup: context.bind(ctxRef, hasWarningsByGroup),
1530
1514
  isValid: context.bind(ctxRef, function (fieldName) {
1531
- return isValid(produceDraft(), fieldName);
1515
+ return isValid(produceSuiteResult(), fieldName);
1532
1516
  }),
1533
1517
  suiteName: suiteName
1534
1518
  });
1535
1519
  }));
1536
1520
  }
1537
1521
 
1522
+ /**
1523
+ * Checks if a given field, or the suite as a whole still have remaining tests.
1524
+ */
1525
+ function hasRemainingTests(fieldName) {
1526
+ var allIncomplete = useAllIncomplete();
1527
+ if (isEmpty(allIncomplete)) {
1528
+ return false;
1529
+ }
1530
+ if (fieldName) {
1531
+ return allIncomplete.some(function (testObject) {
1532
+ return matchingFieldName(testObject, fieldName);
1533
+ });
1534
+ }
1535
+ return isNotEmpty(allIncomplete);
1536
+ }
1537
+
1538
1538
  var cache = createCache(20);
1539
1539
  function produceFullResult() {
1540
1540
  var testObjects = useTestsFlat();
1541
1541
  var ctxRef = { stateRef: useStateRef() };
1542
1542
  return cache([testObjects], context.bind(ctxRef, function () {
1543
- return assign({}, produceDraft(), {
1543
+ return assign({}, produceSuiteResult(), {
1544
1544
  done: context.bind(ctxRef, done)
1545
1545
  });
1546
1546
  }));
@@ -1573,7 +1573,7 @@
1573
1573
  if (shouldSkipDoneRegistration(callback, fieldName, output)) {
1574
1574
  return output;
1575
1575
  }
1576
- var doneCallback = function () { return callback(produceDraft()); };
1576
+ var doneCallback = function () { return callback(produceSuiteResult()); };
1577
1577
  if (shouldRunDoneCallback(fieldName)) {
1578
1578
  doneCallback();
1579
1579
  return output;
@@ -1774,7 +1774,7 @@
1774
1774
  // Return the result
1775
1775
  return produceFullResult();
1776
1776
  }), {
1777
- get: context.bind(ctxRef, produceDraft),
1777
+ get: context.bind(ctxRef, produceSuiteResult),
1778
1778
  remove: context.bind(ctxRef, function (fieldName) {
1779
1779
  bus.emit(Events.REMOVE_FIELD, fieldName);
1780
1780
  }),
@@ -1832,7 +1832,7 @@
1832
1832
  // we should skip the test if the parent conditional is true.
1833
1833
  isExcludedIndividually() ||
1834
1834
  // Otherwise, we should skip the test if the conditional is true.
1835
- optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
1835
+ optionalFunctionValue(conditional, optionalFunctionValue(produceSuiteResult))
1836
1836
  }, function () { return callback(); });
1837
1837
  });
1838
1838
  }
@@ -2032,7 +2032,7 @@
2032
2032
  if (isStringValue(condition)) {
2033
2033
  return Boolean(exclusion.tests[condition]);
2034
2034
  }
2035
- return optionalFunctionValue(condition, optionalFunctionValue(produceDraft));
2035
+ return optionalFunctionValue(condition, optionalFunctionValue(produceSuiteResult));
2036
2036
  };
2037
2037
  }
2038
2038
  }
@@ -2089,7 +2089,7 @@
2089
2089
  isolate({ type: IsolateTypes.OMIT_WHEN }, function () {
2090
2090
  context.run({
2091
2091
  omitted: isOmitted() ||
2092
- optionalFunctionValue(conditional, optionalFunctionValue(produceDraft))
2092
+ optionalFunctionValue(conditional, optionalFunctionValue(produceSuiteResult))
2093
2093
  }, function () { return callback(); });
2094
2094
  });
2095
2095
  }
@@ -2220,7 +2220,7 @@
2220
2220
  }
2221
2221
  }
2222
2222
  catch (e) {
2223
- throwError("Unexpected error encountered during test registration.\n Test Object: ".concat(testObject, ".\n Error: ").concat(e, "."));
2223
+ throwError("Unexpected error encountered during test registration.\n Test Object: ".concat(JSON.stringify(testObject), ".\n Error: ").concat(e, "."));
2224
2224
  }
2225
2225
  }
2226
2226
 
@@ -2305,12 +2305,13 @@
2305
2305
 
2306
2306
  // eslint-disable-next-line max-statements
2307
2307
  function registerPrevRunTest(testObject) {
2308
- var prevRunTest = useTestAtCursor(testObject);
2309
2308
  if (shouldSkipBasedOnMode(testObject)) {
2310
- moveForward();
2311
2309
  testObject.skip();
2310
+ useTestAtCursor(testObject);
2311
+ moveForward();
2312
2312
  return testObject;
2313
2313
  }
2314
+ var prevRunTest = useTestAtCursor(testObject);
2314
2315
  if (isOmitted()) {
2315
2316
  prevRunTest.omit();
2316
2317
  moveForward();
@@ -2419,7 +2420,7 @@
2419
2420
  ctx.currentTest.warn();
2420
2421
  }
2421
2422
 
2422
- var VERSION = "4.2.0";
2423
+ var VERSION = "4.2.2";
2423
2424
 
2424
2425
  exports.VERSION = VERSION;
2425
2426
  exports.context = context;