@jivanf/vest
Version:
Declarative Form Validations Framework
3 lines (2 loc) • 23.3 kB
JavaScript
import{enforce as t}from"n4s";export{enforce}from"n4s";import{assign as e,tinyState as n,cache as s,isArray as i,isStringValue as r,asArray as a,hasOwnProperty as u,StateMachine as o,invariant as c,isPromise as l,optionalFunctionValue as d,noop as f,isNotEmpty as E,seq as N,isPositive as g,greaterThan as T,isEmpty as S,Predicates as p,isNullish as I,bindNot as R,either as m,defaultTo as D,isNotNullish as O,deferThrow as _,text as A,isUndefined as v,isNull as C,isFunction as h,callEach as P,numberEquals as L,freezeAssign as F}from"vest-utils";import{Isolate as U,VestRuntime as G,IsolateSelectors as W,IsolateMutator as y,Walker as b,IsolateInspector as M,Reconciler as w,Bus as k,RuntimeEvents as B}from"vestjs-runtime";import{createCascade as V}from"context";import{InjectionToken as j,inject as X,Injector as H,runInInjectionContext as K}from"@angular/core";const x={Each:"Each",Focused:"Focused",Group:"Group",OmitWhen:"OmitWhen",SkipWhen:"SkipWhen",Suite:"Suite",Test:"Test"};class q{static setOptionalField(t,n,s){const i=t.data.optional,r=i[n];e(i,{[n]:e({},r,s(r))})}static getOptionalField(t,e){var n;return null!==(n=q.getOptionalFields(t)[e])&&void 0!==n?n:{}}static getOptionalFields(t){var e,n;return null!==(n=null===(e=t.data)||void 0===e?void 0:e.optional)&&void 0!==n?n:{}}}var Y,J;!function(t){t[t.CUSTOM_LOGIC=0]="CUSTOM_LOGIC",t[t.AUTO=1]="AUTO"}(Y||(Y={})),function(t){t.EAGER="EAGER",t.ALL="ALL",t.ONE="ONE"}(J||(J={}));const z=V(((t,s)=>s?null:e({inclusion:{},mode:n.createTinyState(J.EAGER),suiteParams:[],testMemoCache:$},t)));function Q(){return z.useX().inclusion}function Z(){return z.useX().mode()}const $=s(10);function tt(e){var n;const s=G.useAvailableRoot(),o=z.useX().suiteParams,c=null!==(n=null==o?void 0:o[0])&&void 0!==n?n:{};if(i(e)||r(e))a(e).forEach((e=>{q.setOptionalField(s,e,(()=>({type:Y.AUTO,applied:!!u(c,e)&&t.isBlank().test(null==c?void 0:c[e]),rule:null})))}));else for(const n in e){const i=e[n];q.setOptionalField(s,n,(()=>({type:Y.CUSTOM_LOGIC,rule:i,applied:t.isBlank().test(i)||!0===i})))}}function et(t){var e,n;if(!t)return!1;const s=G.useAvailableRoot();return null!==(n=null===(e=q.getOptionalField(s,t))||void 0===e?void 0:e.applied)&&void 0!==n&&n}const nt="PENDING",st="INITIAL",it="DONE",rt={[nt]:nt,[st]:st,[it]:it},at=o({initial:rt.INITIAL,states:{[rt.DONE]:{},[rt.INITIAL]:{[rt.PENDING]:rt.PENDING,[rt.DONE]:rt.DONE},[rt.PENDING]:{[rt.DONE]:rt.DONE}}}),ut={[nt]:nt,CANCELED:"CANCELED",FAILED:"FAILED",OMITTED:"OMITTED",PASSING:"PASSING",SKIPPED:"SKIPPED",UNTESTED:"UNTESTED",WARNING:"WARNING"},ot="RESET",ct=o({initial:ut.UNTESTED,states:{"*":{[ut.OMITTED]:ut.OMITTED,[ot]:ut.UNTESTED},[ut.UNTESTED]:{[ut.CANCELED]:ut.CANCELED,[ut.FAILED]:ut.FAILED,[ut.PASSING]:ut.PASSING,[ut.PENDING]:ut.PENDING,[ut.SKIPPED]:ut.SKIPPED,[ut.WARNING]:ut.WARNING},[ut.PENDING]:{[ut.CANCELED]:ut.CANCELED,[ut.FAILED]:ut.FAILED,[ut.PASSING]:ut.PASSING,[ut.SKIPPED]:[ut.SKIPPED,t=>!0===t],[ut.WARNING]:ut.WARNING},[ut.SKIPPED]:{},[ut.FAILED]:{},[ut.WARNING]:{},[ut.PASSING]:{},[ut.CANCELED]:{},[ut.OMITTED]:{}}});var lt,dt,ft;function Et(t){return t===lt.ERRORS?dt.ERROR_COUNT:dt.WARN_COUNT}function Nt(t,e,n){const s=Object.assign(Object.assign({},{severity:ft.Error,status:ct.initial()}),{fieldName:e.fieldName,testFn:e.testFn});e.groupName&&(s.groupName=e.groupName),e.message&&(s.message=e.message);return U.create(x.Test,t,s,null!=n?n:null)}!function(t){t.WARNINGS="warnings",t.ERRORS="errors"}(lt||(lt={})),function(t){t.ERROR_COUNT="errorCount",t.WARN_COUNT="warnCount"}(dt||(dt={})),function(t){t.Error="error",t.Warning="warning"}(ft||(ft={}));const gt=new j("VEST_TEST_CONTEXT");var Tt,St,pt,It;!function(t){t.HOOK_CALLED_OUTSIDE="hook called outside of a running suite.",t.EXPECTED_VEST_TEST="Expected value to be an instance of IsolateTest",t.FIELD_NAME_REQUIRED="Field name must be passed",t.SUITE_MUST_BE_INITIALIZED_WITH_FUNCTION="Suite must be initialized with a function",t.PROMISIFY_REQUIRE_FUNCTION="Vest.Promisify must be called with a function",t.PARSER_EXPECT_RESULT_OBJECT="Vest parser: expected argument at position 0 to be Vest's result object.",t.WARN_MUST_BE_CALLED_FROM_TEST="Warn must be called from within the body of a test function",t.EACH_CALLBACK_MUST_BE_A_FUNCTION="Each must be called with a function",t.INVALID_PARAM_PASSED_TO_FUNCTION='Incompatible params passed to {fn_name} function. "{param}" must be of type {expected}',t.TESTS_CALLED_IN_DIFFERENT_ORDER='Vest Critical Error: Tests called in different order than previous run.\n expected: {fieldName}\n received: {prevName}\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.',t.UNEXPECTED_TEST_REGISTRATION_ERROR="Unexpected error encountered during test registration.\n Please report this issue to Vest's Github repository.\n Test Object: {testObject}.\n Error: {error}.",t.UNEXPECTED_TEST_RUN_ERROR="Unexpected error encountered during test run. Please report this issue to Vest's Github repository.\n Test Object: {testObject}.",t.INCLUDE_SELF="Trying to call include.when on the same field."}(Tt||(Tt={}));class Rt{static getStatus(t){var e;return null!==(e=t.status)&&void 0!==e?e:st}static setStatus(t,e,n){t.status=this.stateMachine.staticTransition(Rt.getStatus(t),e,n)}static statusEquals(t,e){return Rt.getStatus(t)===e}static setPending(t){this.setStatus(t,nt)}static setDone(t){this.setStatus(t,it)}static isPending(t){return Rt.statusEquals(t,nt)}}Rt.stateMachine=at;class mt extends Rt{static getData(t){return c(t.data),t.data}static is(t){return W.isIsolateType(t,x.Test)}static isX(t){c(mt.is(t),Tt.EXPECTED_VEST_TEST)}static cast(t){return mt.isX(t),t}static warns(t){return mt.getData(t).severity===ft.Warning}static isOmitted(t){return mt.statusEquals(t,ut.OMITTED)}static isUntested(t){return mt.statusEquals(t,ut.UNTESTED)}static isFailing(t){return mt.statusEquals(t,ut.FAILED)}static isCanceled(t){return mt.statusEquals(t,ut.CANCELED)}static isSkipped(t){return mt.statusEquals(t,ut.SKIPPED)}static isPassing(t){return mt.statusEquals(t,ut.PASSING)}static isWarning(t){return mt.statusEquals(t,ut.WARNING)}static hasFailures(t){return mt.isFailing(t)||mt.isWarning(t)}static isNonActionable(t){return mt.isSkipped(t)||mt.isOmitted(t)||mt.isCanceled(t)}static isTested(t){return mt.hasFailures(t)||mt.isPassing(t)}static awaitsResolution(t){return mt.isSkipped(t)||mt.isUntested(t)||mt.isPending(t)}static isAsyncTest(t){return l(mt.getData(t).asyncTest)}static fail(t){mt.setStatus(t,mt.warns(t)?ut.WARNING:ut.FAILED)}static pass(t){mt.setStatus(t,ut.PASSING)}static warn(t){mt.setData(t,(t=>Object.assign(Object.assign({},t),{severity:ft.Warning})))}static setData(t,e){t.data=d(e,mt.getData(t))}static skip(t,e){mt.setStatus(t,ut.SKIPPED,e)}static cancel(t){mt.setStatus(t,ut.CANCELED),y.abort(t,ut.CANCELED)}static omit(t){mt.setStatus(t,ut.OMITTED)}static reset(t){mt.setStatus(t,ot)}}function Dt(t,e){return!!e&&!Ot(t,e)}function Ot(t,e){return!(!e||t.fieldName!==e)}function _t(t,e){const{groupName:n}=mt.getData(t),{groupName:s,fieldName:i}=mt.getData(e);return Ot(mt.getData(t),i)&&n===s&&t.key==e.key}function At(t,e){return U.create(x.Focused,f,{focusMode:t,match:a(e).filter(r),matchAll:!0===e})}mt.stateMachine=ct,function(t){t[t.ONLY=0]="ONLY",t[t.SKIP=1]="SKIP"}(St||(St={}));class vt{static isSkipFocused(t,e){return(null==t?void 0:t.data.focusMode)===St.SKIP&&(Lt(t,e)||!0===t.data.matchAll)}static isOnlyFocused(t,e){return(null==t?void 0:t.data.focusMode)===St.ONLY&&Lt(t,e)}static isIsolateFocused(t){return W.isIsolateType(t,x.Focused)}}function Ct(t){return At(St.ONLY,Pt(t))}function ht(t){return At(St.SKIP,Pt(t))}function Pt(t){return!1===t?[]:t}function Lt(t,e){var n,s;return E(null==t?void 0:t.data.match)&&(!e||(null===(s=null===(n=null==t?void 0:t.data.match)||void 0===n?void 0:n.includes(e))||void 0===s||s))}class Ft{constructor(){this.errorCount=0,this.warnCount=0,this.testCount=0,this.pendingCount=0}}class Ut extends Ft{constructor(){super(...arguments),this[pt]=[],this[It]=[],this.groups={},this.tests={},this.valid=null}}pt=lt.ERRORS,It=lt.WARNINGS;const Gt=s(),Wt=s();function yt(){return G.useXAppData()}function bt(){return yt().doneCallbacks()}function Mt(){return yt().fieldCallbacks()}function wt(){return yt().suiteId}function kt(){yt().suiteResultCache.invalidate([wt()]),Wt.invalidate([wt()])}function Bt(){const[,,t]=bt(),[,,e]=Mt();t(),e()}function Vt(t){G.useSetHistoryRoot(t),kt()}function jt(t,e,n){return n?function(t,e,n){var s;return(null===(s=null==t?void 0:t[n])||void 0===s?void 0:s[e])||[]}(t,e,n):function(t,e){const n={},s=Et(e);for(const i in t)g(t[i][s])&&(n[i]=t[i][e]||[]);return n}(t,e)}function Xt(t){const e={getError:s,getErrors:function(e){return Ht(t,lt.ERRORS,e)},getErrorsByGroup:function(e,n){return Kt(t,lt.ERRORS,e,n)},getMessage:function(t){return s(t)||n(t)},getWarning:n,getWarnings:function(e){return Ht(t,lt.WARNINGS,e)},getWarningsByGroup:function(e,n){return Kt(t,lt.WARNINGS,e,n)},hasErrors:function(e){return Yt(t,dt.ERROR_COUNT,e)},hasErrorsByGroup:function(e,n){return qt(t,dt.ERROR_COUNT,e,n)},hasWarnings:function(e){return Yt(t,dt.WARN_COUNT,e)},hasWarningsByGroup:function(e,n){return qt(t,dt.WARN_COUNT,e,n)},isPending:function(e){var n;return T(e?null===(n=t.tests[e])||void 0===n?void 0:n.pendingCount:t.pendingCount,0)},isTested:function(e){var n;return g(null===(n=t.tests[e])||void 0===n?void 0:n.testCount)},isValid:function(e){var n;return Boolean(e?null===(n=t.tests[e])||void 0===n?void 0:n.valid:t.valid)},isValidByGroup:function(e,n){const s=t.groups[e];if(!s)return!1;if(n)return xt(s,n);for(const t in s)if(!xt(s,t))return!1;return!0}};return e;function n(e){return Jt(lt.WARNINGS,t,e)}function s(e){return Jt(lt.ERRORS,t,e)}}function Ht(t,e,n){return jt(t.tests,e,n)}function Kt(t,e,n,s){return jt(t.groups[n],e,s)}function xt(t,e){var n;return!!(null===(n=t[e])||void 0===n?void 0:n.valid)}function qt(t,e,n,s){var i,r;const a=t.groups[n];if(!a)return!1;if(s)return g(null===(i=a[s])||void 0===i?void 0:i[e]);for(const t in a)if(g(null===(r=a[t])||void 0===r?void 0:r[e]))return!0;return!1}function Yt(t,e,n){var s;const i=n?null===(s=t.tests[n])||void 0===s?void 0:s[e]:t[e]||0;return g(i)}function Jt(t,e,n){var s;const i=e[t];return n?null===(s=i.find((t=>Ot(t,n))))||void 0===s?void 0:s.message:i[0]}class zt{constructor(t,e,n){this.fieldName=t,this.message=e,this.groupName=n}static fromTestObject(t){const{fieldName:e,message:n,groupName:s}=mt.getData(t);return new zt(e,n,s)}}class Qt{static hasNoTests(t=Qt.defaultRoot()){return!t||!b.has(t,mt.is)}static someTests(t,e=Qt.defaultRoot()){return!!e&&b.some(e,(e=>(mt.isX(e),t(e))),mt.is)}static everyTest(t,e=Qt.defaultRoot()){return!!e&&b.every(e,(e=>(mt.isX(e),t(e))),mt.is)}static walkTests(t,e=Qt.defaultRoot()){e&&b.walk(e,((e,n)=>{t(mt.cast(e),n)}),mt.is)}static reduceTests(t,e,n=Qt.defaultRoot()){return n?b.reduce(n,((e,n,s)=>t(e,mt.cast(n),s)),e,mt.is):e}static pluckTests(t,e=Qt.defaultRoot()){e&&b.pluck(e,(e=>(mt.isX(e),t(e))),mt.is)}static resetField(t){Qt.walkTests((e=>{Ot(mt.getData(e),t)&&mt.reset(e)}),Qt.defaultRoot())}static removeTestByFieldName(t,e=Qt.defaultRoot()){Qt.pluckTests((e=>Ot(mt.getData(e),t)),e)}}Qt.defaultRoot=G.useAvailableRoot;class Zt{static useHasPending(t){if(!Zt.defaultRoot())return!1;const e=Zt.usePreAggs().pending;return!S(e)&&e.some(p.all(null==t||t))}static usePreAggs(){return t=$t,(0,yt().preAggCache)([wt()],t);var t}static useHasRemainingWithTestNameMatching(t){return Zt.useHasPending(p.any(I(t),p.all(mt.is,(e=>function(t,e){return!e||Ot(t,e)}(mt.getData(e),t)))))}}function $t(){const t=Zt.defaultRoot(),e={pending:[],failures:{errors:{},warnings:{}}};return t?b.reduce(t,((t,e)=>{var n,s;if(Rt.isPending(e)&&t.pending.push(e),mt.is(e)){const i=mt.getData(e).fieldName;mt.isWarning(e)&&(t.failures.warnings[i]=null!==(n=t.failures.warnings[i])&&void 0!==n?n:[],t.failures.warnings[i].push(e)),mt.isFailing(e)&&(t.failures.errors[i]=null!==(s=t.failures.errors[i])&&void 0!==s?s:[],t.failures.errors[i].push(e))}return t}),e):e}Zt.defaultRoot=G.useAvailableRoot;const te=R((function(t,e){return mt.getData(t).groupName===e}));function ee(t){return function(t,e){const n=Zt.usePreAggs().failures;if(S(n[t]))return!1;if(e)return!S(n[t][e]);return!0}(lt.ERRORS,t)}function ne(t,e,n){return Qt.someTests((s=>!te(s,e)&&function(t,e,n){if(!mt.hasFailures(t))return!1;if(Dt(mt.getData(t),n))return!1;if(function(t,e){return m(t===lt.WARNINGS,mt.warns(e))}(e,t))return!1;return!0}(s,t,n)))}function se(t){return!!et(t)||!Qt.hasNoTests()&&(!ee(t)&&(!function(t){return Zt.useHasPending(p.all(mt.is,(e=>!Dt(mt.getData(e),t)),(()=>!et(t))))}(t)&&function(t){return Qt.everyTest((e=>re(e,t)))}(t)))}function ie(t,e){return!!et(e)||!ne(lt.ERRORS,t,e)&&(!function(t,e){return Zt.useHasPending(p.all(mt.is,(e=>!te(e,t)),(t=>!Dt(mt.getData(t),e)),(()=>!et(e))))}(t,e)&&function(t,e){return Qt.everyTest((n=>!!te(n,t)||re(n,e)))}(t,e))}function re(t,e){return!!Dt(mt.getData(t),e)||(mt.isOmitted(t)||mt.isTested(t)||function(t){const e=G.useAvailableRoot(),{fieldName:n}=mt.getData(t);return q.getOptionalField(e,n).type===Y.AUTO&&mt.awaitsResolution(t)}(t))}function ae(){const t=Qt.reduceTests(((t,e)=>{const n=mt.getData(e).fieldName;return t.tests[n]=function(t,e){const n=mt.getData(e).fieldName,s=ue(t[n],e);return s.valid=!1!==s.valid&&se(n),s}(t.tests,e),t.groups=function(t,e){const{groupName:n,fieldName:s}=mt.getData(e);if(!n)return t;t[n]=t[n]||{};const i=t[n];return i[s]=ue(i[s],e),i[s].valid=!1!==i[s].valid&&ie(n,s),t}(t.groups,e),mt.isOmitted(e)?t:(!1===t.tests[n].valid&&(t.valid=!1),function(t,e){mt.isWarning(t)?(e.warnCount++,e.warnings.push(zt.fromTestObject(t))):mt.isFailing(t)&&(e.errorCount++,e.errors.push(zt.fromTestObject(t)));mt.isPending(t)&&e.pendingCount++;ce(t)&&e.testCount++;return e}(e,t))}),new Ut);return t.valid=!1!==t.valid&&se(),t}function ue(t,e){const{message:n}=mt.getData(e),s=D(t?Object.assign({},t):null,oe);return mt.isNonActionable(e)||(mt.isPending(e)&&s.pendingCount++,mt.isFailing(e)?i(lt.ERRORS):mt.isWarning(e)&&i(lt.WARNINGS),ce(e)&&s.testCount++),s;function i(t){const e=Et(t);s[e]++,n&&(s[t]=(s[t]||[]).concat(n))}}function oe(){return e(new Ft,{errors:[],valid:!0,warnings:[]})}function ce(t){return mt.isTested(t)||mt.isPending(t)}function le(){return t=()=>{const t=ae(),e=yt().suiteName;return Object.freeze(de(t,e))},(0,yt().suiteResultCache)([wt()],t);var t}function de(t,n){return e(t,Xt(t),{suiteName:n})}function fe(){const t=de(new Ut);return new Proxy(t,{get:(t,e)=>le()[e]})}function Ee(t,e){U.create(x.SkipWhen,(()=>{z.run({skipped:Ne()||d(t,fe())},e)}))}function Ne(){return function(){var t;return null!==(t=z.useX().skipped)&&void 0!==t&&t}()}function ge(t,e){return O(b.findClosest(t,(t=>!!vt.isIsolateFocused(t)&&vt.isOnlyFocused(t,e))))}function Te(t){const{fieldName:e}=mt.getData(t);if(Ne())return!0;const n=Q(),s=function(t){return b.findClosest(t,(e=>{var n;if(!vt.isIsolateFocused(e))return!1;const{fieldName:s}=mt.getData(t);return(null===(n=e.data.match)||void 0===n?void 0:n.includes(s))||e.data.matchAll}))}(t);if(vt.isSkipFocused(s))return!0;return!vt.isOnlyFocused(s)&&(!!ge(t)&&!d(n[e],t))}function Se(t){const[,e]=Z();e(t)}function pe(t){const[e]=Z();return e===t}function Ie(t){return pe(J.ONE)?ee():!!pe(J.EAGER)&&ee(t.fieldName)}function Re(t,e){U.create(x.OmitWhen,(()=>{z.run({omitted:me()||d(t,fe())},e)}))}function me(){return function(){var t;return null!==(t=z.useX().omitted)&&void 0!==t&&t}()}function De(t,e=t){const n=mt.getData(t);return Ie(n)?(s=t,mt.skip(s),s):(i=n.fieldName,me()||et(i)?function(t){return mt.omit(t),t}(t):Te(t)?function(t){return mt.skip(t,Ne()),t}(e):t);var s,i}function Oe(t,e){return mt.is(e)&&!_t(e,t)}const _e=[class{static match(t,e){return mt.is(t)&&mt.is(e)}static reconcile(t,e){const n=De(t,function(t,e){if(M.usesKey(t))return function(t){return mt.cast(w.handleIsolateNodeWithKey(t,(e=>!!mt.isNonActionable(e)||!Te(t))))}(t);if(w.dropNextNodesOnReorder(Oe,t,e))return function(t,e){if(M.canReorder(t))return;_(A(Tt.TESTS_CALLED_IN_DIFFERENT_ORDER,{fieldName:mt.getData(t).fieldName,prevName:mt.is(e)?mt.getData(e).fieldName:void 0}))}(t,e),t;if(!mt.is(e))return t;if(mt.isOmitted(e))return t;return e}(t,e));return function(t,e,n){t===e&&mt.is(e)&&(i=e)!==(s=n)&&_t(s,i)&&mt.isPending(s)&&mt.cancel(s);var s,i}(n,t,e),n}}];function Ae(t){_e.includes(t)||_e.push(t)}function ve(t,e){var n,s;return null!==(s=null===(n=_e.find((n=>n.match(t,e))))||void 0===n?void 0:n.reconcile(t,e))&&void 0!==s?s:null}function Ce(...t){const[e,n]=t.reverse();return U.create(x.Group,(()=>z.run(Object.assign({},n&&{groupName:n}),e)))}function he(t){c(r(t));return Q()[t]=!0,{when:function(e){c(e!==t,Tt.INCLUDE_SELF);const n=Q();n[t]=function(t){return r(e)?ge(t,e):d(e,d(le))}}}}function Pe(t){if(De(t),mt.isUntested(t))return function(t){const e=function(t){return z.run({currentTest:t},(()=>{var e;let n;const{message:s,testFn:i}=mt.getData(t),a=null!==(e=X(H,{optional:!0}))&&void 0!==e?e:void 0,u=H.create({providers:[{provide:gt,useValue:t}],parent:a});try{K(u,(()=>{n=i({signal:t.abortController.signal})}))}catch(e){(function(t,e){return v(t)&&r(e)})(s,e)&&(mt.getData(t).message=e),n=!1}return!1===n&&mt.fail(t),n}))}(t);try{if(l(e))return mt.getData(t).asyncTest=e,function(t){const{asyncTest:e,message:n}=mt.getData(t);if(!l(e))return;const s=G.persist((()=>{Le(t)})),i=G.persist((e=>{mt.isCanceled(t)||(mt.getData(t).message=r(e)?e:n,mt.fail(t),s())}));return e.then(s,i)}(t);Le(t)}catch(e){throw new Error(A(Tt.UNEXPECTED_TEST_REGISTRATION_ERROR,{testObject:JSON.stringify(t),error:e}))}}(t);mt.isNonActionable(t)||_(A(Tt.UNEXPECTED_TEST_REGISTRATION_ERROR,{testObject:JSON.stringify(t)}))}function Le(t){mt.pass(t)}function Fe(t,...e){const[n,s,i]=h(e[1])?e:[void 0,...e];!function(t,e){const n="test";c(r(t),A(Tt.INVALID_PARAM_PASSED_TO_FUNCTION,{fn_name:n,param:"fieldName",expected:"string"})),c(h(e),A(Tt.INVALID_PARAM_PASSED_TO_FUNCTION,{fn_name:n,param:"callback",expected:"function"}))}(t,s);const a={fieldName:t,groupName:z.useX().groupName,message:n,testFn:s};return k.useEmit("TEST_RUN_STARTED"),Nt(Pe,a,i)}const Ue=e(Fe,{memo:function(t){return function(e,...n){const[s,i,r]=n.reverse();return function(t,e){const n=z.useX().testMemoCache,s=n.get(t);if(C(s))return n(t,e);const[,i]=s;if(mt.isCanceled(i))return n.invalidate(t),n(t,e);return G.useSetNextIsolateChild(i),i}([wt(),e,G.useCurrentCursor()].concat(s),(function(){return t(e,r,i)}))}}(Fe)});function Ge(){return{group:Ce,include:he,omitWhen:Re,only:Ct,optional:tt,skip:ht,skipWhen:Ee,test:Ue}}function We(){const t=G.useAvailableRoot(),e=q.getOptionalFields(t);if(S(e))return;const n=new Set;function s(e){const{fieldName:s}=mt.getData(e);n.has(s)&&(mt.omit(e),q.setOptionalField(t,s,(t=>Object.assign(Object.assign({},t),{applied:!0}))))}Qt.walkTests((e=>{if(mt.isPending(e))return;const{fieldName:i}=mt.getData(e);n.has(i)?s(e):function(e){const{fieldName:i}=mt.getData(e),r=q.getOptionalField(t,i);!0===d(r.rule)&&n.add(i);s(e)}(e)})),k.useEmit("DONE_TEST_OMISSION_PASS")}function ye(){const t=k.useBus();return e("TEST_COMPLETED",(()=>{})),e("TEST_RUN_STARTED",(()=>{})),t.on(B.ISOLATE_PENDING,(t=>{mt.is(t)&&mt.setPending(t),Rt.setPending(t)})),t.on(B.ISOLATE_DONE,(e=>{mt.is(e)&&t.emit("TEST_COMPLETED",e),Rt.setDone(e)})),t.on(B.ASYNC_ISOLATE_DONE,(e=>{if(mt.is(e)&&!mt.isCanceled(e)){const{fieldName:t}=mt.getData(e);!function(t){const[e]=Mt();t&&!Zt.useHasRemainingWithTestNameMatching(t)&&i(e[t])&&P(e[t])}(t)}Zt.useHasPending()||t.emit("ALL_RUNNING_TESTS_FINISHED")})),e("DONE_TEST_OMISSION_PASS",(()=>{})),t.on("ALL_RUNNING_TESTS_FINISHED",(()=>{Qt.someTests(mt.isAsyncTest)&&We(),function(){const[t]=bt();P(t)}()})),e("RESET_FIELD",(t=>{Qt.resetField(t)})),e("SUITE_RUN_STARTED",(()=>{Bt()})),e("SUITE_CALLBACK_RUN_FINISHED",(()=>{Zt.useHasPending()||t.emit("ALL_RUNNING_TESTS_FINISHED"),We()})),e("REMOVE_FIELD",(t=>{Qt.removeTestByFieldName(t)})),e("RESET_SUITE",(()=>{Bt(),G.reset()})),{subscribe:function(...e){const[n,s]=e.reverse();return t.on(null!=s?s:"*",(()=>{n()})).off}};function e(e,n){t.on(e,((...t)=>{kt(),n(...t)}))}}function be(){return F({done:G.persist(Me)},le())}function Me(...t){const[n,s]=t.reverse(),i=be();if(function(t,e,n){var s,i;return!!(!h(t)||e&&L(null!==(i=null===(s=n.tests[e])||void 0===s?void 0:s.testCount)&&void 0!==i?i:0,0))}(n,s,i))return i;const r=()=>n(le());return Zt.useHasRemainingWithTestNameMatching(s)?(function(t,n){const[,s]=Mt(),[,i]=bt();n?s((s=>e(s,{[n]:(s[n]||[]).concat(t)}))):i((e=>e.concat(t)))}(r,s),i):(r(),i)}function we(...t){const[s,i]=a(t).reverse();!function(t){c(h(t),Tt.SUITE_MUST_BE_INITIALIZED_WITH_FUNCTION)}(s);const r=function({suiteName:t,VestReconciler:e}){const s={doneCallbacks:n.createTinyState((()=>[])),fieldCallbacks:n.createTinyState((()=>({}))),preAggCache:Wt,suiteId:N(),suiteName:t,suiteResultCache:Gt};return G.createRef(e,s)}({suiteName:i,VestReconciler:ve});function u(...t){return z.run({suiteParams:t},(()=>{return k.useEmit("SUITE_RUN_STARTED"),e=function(t,...e){const n=k.useEmit();return()=>(t(...e),n("SUITE_CALLBACK_RUN_FINISHED"),be())}(s,...t),U.create(x.Suite,e,{optional:{}});var e})).output}const o=ke(...t);return G.Run(r,(()=>{const t=ye();return e(G.persist(u),Object.assign(Object.assign({dump:G.persist((()=>G.useAvailableRoot())),get:G.persist(le),remove:k.usePrepareEmitter("REMOVE_FIELD"),reset:k.usePrepareEmitter("RESET_SUITE"),resetField:k.usePrepareEmitter("RESET_FIELD"),resume:G.persist(Vt),runStatic:(...t)=>o(...t),subscribe:t.subscribe},(n=G.persist(le),{getError:(...t)=>n().getError(...t),getErrors:(...t)=>n().getErrors(...t),getErrorsByGroup:(...t)=>n().getErrorsByGroup(...t),getMessage:(...t)=>n().getMessage(...t),getWarning:(...t)=>n().getWarning(...t),getWarnings:(...t)=>n().getWarnings(...t),getWarningsByGroup:(...t)=>n().getWarningsByGroup(...t),hasErrors:(...t)=>n().hasErrors(...t),hasErrorsByGroup:(...t)=>n().hasErrorsByGroup(...t),hasWarnings:(...t)=>n().hasWarnings(...t),hasWarningsByGroup:(...t)=>n().hasWarningsByGroup(...t),isPending:(...t)=>n().isPending(...t),isTested:(...t)=>n().isTested(...t),isValid:(...t)=>n().isValid(...t),isValidByGroup:(...t)=>n().isValidByGroup(...t)})),Ge()));var n}))}function ke(...t){return e(((...n)=>{const s=we(...t),i=s(...n);return e(new Promise((t=>{i.done((e=>{t(r(e))}))})),r(i));function r(t){return e({dump:s.dump},t)}}),Object.assign({},Ge()))}function Be(t,e){c(h(e),Tt.EACH_CALLBACK_MUST_BE_A_FUNCTION),function(t){U.create(x.Each,t,{allowReorder:!0})}((()=>{t.forEach(((t,n)=>{e(t,n)}))}))}const Ve=Tt.WARN_MUST_BE_CALLED_FROM_TEST;function je(){const t=(e=Tt.HOOK_CALLED_OUTSIDE,z.useX(e).currentTest);var e;c(t,Ve),mt.warn(t)}export{J as Modes,gt as VEST_TEST_CONTEXT,we as create,Be as each,Ce as group,he as include,Se as mode,Re as omitWhen,Ct as only,tt as optional,Ae as registerReconciler,ht as skip,Ee as skipWhen,ke as staticSuite,Xt as suiteSelectors,Ue as test,je as warn};
//# sourceMappingURL=vest.production.js.map