UNPKG

effector

Version:

Business logic with ease

3 lines (2 loc) 29.6 kB
function e(e,t){for(const r in e)t(e[r],r)}function t(e,t){e.forEach(t)}function r(e,t,r){if(!e)throw Error(`${r?r+': ':''}${t}`)}function n(e,t){const r=M(e),n=r.meta||{};V(e)||(n.isRegion=1),te={id:r.id,parent:te,value:e,template:n.template||ne(),sidRoot:n.sidRoot||te&&te.sidRoot,meta:n};try{return t()}finally{re('region'),te=j(te)}}function a({node:e=[],from:r,source:n,parent:a=r||n,to:o,target:s,child:i=o||s,scope:c={},meta:l={},family:d={type:'regular'},regional:u}={}){const f=se(a),p=se(d.links),m=se(d.owners),g=[];t(e,(e=>e&&H(g,e)));const h={id:Y(),seq:g,next:se(i),meta:l,scope:c,family:{triggers:f.length,type:d.type||"crosslink",links:p,owners:m}};return t(p,(e=>H(z(e),h))),t(m,(e=>H(R(e),h))),t(f,(e=>H(e.next,h))),u&&te&&oe(N(te),[h]),h}function o(e,r,n){let a,o=Be,s=null,i=Te;if(e.target&&(r=e.params,n=e.defer,a=e.meta,o='page'in e?e.page:o,e.stack&&(s=e.stack),i=C(e)||i,e=e.target),i&&Te&&i!==Te&&(Te=null),Array.isArray(e))for(let t=0;t<e.length;t++)Fe('pure',o,M(e[t]),s,r[t],i,a);else Fe('pure',o,M(e),s,r,i,a);if(n&&!_e)return;const c={isRoot:_e,currentPage:Be,scope:Te,isWatch:Pe,isPure:Ve};let l,d,u,f,p,m;_e=0;e:for(;f=Oe();){const{idx:e,stack:r,type:n}=f;u=r.node,Be=p=r.page,Te=C(r),p?m=p.reg:Te&&(m=Te.reg);const a=!!p,o=!!Te,s={fail:0,scope:u.scope};l=d=0;for(let t=e;t<u.seq.length&&!l;t++){const i=u.seq[t];if(i.order){const{priority:a,barrierID:o}=i.order,s=o?p?`${p.fullID}_${o}`:o:0;if(t!==e||n!==a){o?Ee.has(s)||(Ee.add(s),De(t,r,a,o)):De(t,r,a,0);continue e}o&&Ee.delete(s)}switch(i.type){case'mov':{const e=i.data;let t;switch(e.from){case'stack':t=N(r);break;case'a':case'b':t=r[e.from];break;case'value':t=e.store;break;case'store':if(m&&!m[e.store.id])if(a){const t=Ge(p,e.store.id);r.page=p=t,t?m=t.reg:o?(Ke(Te,e.store,0,1,e.softRead),m=Te.reg):m=void 0}else o&&Ke(Te,e.store,0,1,e.softRead);t=Re(m&&m[e.store.id]||e.store)}switch(e.to){case'stack':r.value=t;break;case'a':case'b':r[e.to]=t;break;case'store':He(p,Te,e.target,0).current=t}break}case'compute':const e=i.data;if(e.fn){Pe='watch'===u.meta.op,Ve=e.pure;const t=e.safe?(0,e.fn)(N(r),s.scope,r):Qe(s,e.fn,r);e.filter?d=!t:r.value=t,Pe=c.isWatch,Ve=c.isPure}}l=s.fail||d}if(Ue&&Ue(r,s),!l){const e=N(r),n=C(r);if(t(u.next,(t=>{Fe('child',p,t,r,e,n)})),n){u.meta.needFxCounter&&Fe('child',p,n.fxCount,r,e,n),u.meta.storeChange&&Fe('child',p,n.storeChange,r,e,n),u.meta.warnSerialize&&Fe('child',p,n.warnSerializeNode,r,e,n);const a=n.additionalLinks[u.id];a&&t(a,(t=>{Fe('child',p,t,r,e,n)}))}}}_e=c.isRoot,Be=c.currentPage,Te=C(c)}function s(t,r="combine"){let n=r+'(',a='',o=0;return e(t,(e=>{o<25&&(null!=e&&(n+=a,n+=D(e)?F(e).fullName:e.toString()),o+=1,a=', ')})),n+')'}function i(e,t){let r,n;const a=e;if(t){const a=F(t);0===e.length?(r=a.path,n=a.fullName):(r=a.path.concat([e]),n=0===a.fullName.length?e:a.fullName+'/'+e)}else r=0===e.length?[]:[e],n=e;return{shortName:a,fullName:n,path:r}}function c(e,t){if(!t)return e;if(!t.name&&!t.named&&!t.loc)return e;let r=`[${e}]`;const n=t.named||t.name;n&&(r+=` unit '${n}'`);const a=t.loc;return!n&&a&&(r+=` (${a.file}:${a.line}:${a.column})`),r}function l(e,t){const r=t?e:e[0];de(r);let n=r.or;const a=r.and;if(a){const r=t?a:a[0];if(ie(r)&&'and'in r){const r=l(a,t);e=r[0],n={...n,...r[1]}}else e=a}return[e,n]}function d(e){const t=()=>e();return t.unsubscribe=()=>e(),t}function u(e,...t){const r=ne();if(r){const n=r.handlers[e];if(n)return n(r,...t)}}function f(e,t){const n=Xe({or:t,and:'string'==typeof e?{name:e}:e}),s=c('event',n),i=(e,...t)=>(r(!I(i,'derived'),'call of derived event is not supported, use createEvent instead',s),r(!Ve,'unit call from pure function is not supported, use operators like sample instead',s),Be?((e,t,r,n)=>{const a=Be;let o=null;if(t)for(o=Be;o&&o.template!==t;)o=j(o);We(o);const s=e.create(r,n);return We(a),s})(i,l,e,t):i.create(e,t)),l=ne(),d=Object.assign(i,{graphite:a({meta:dt(n.actualOp||"event",i,n,lt(f)),regional:1}),create:e=>(o({target:i,params:e,scope:Te}),e),watch:e=>ot(i,e),map:e=>ut(i,$,e,[$e()]),filter:e=>ut(i,'filter',e.fn?e:e.fn,[$e(he,1)]),filterMap:e=>ut(i,'filterMap',e,[$e(),Se((e=>!le(e)),1)]),prepend(e){r(i.targetable,'.prepend of derived event is not supported, call source event instead',s);const t=f('* \u2192 '+i.shortName,{parent:j(i)});return u('eventPrepend',M(t)),at(t,i,[$e()],'prepend',e),st(i,t),t}});return null!=n&&n.domain&&n.domain.hooks.event(d),O(d,'id',d.graphite.id),re(d.graphite),d}function p(e,n,a,o,s){return fe(a,`${s} ${n}`,'first argument'),r(ce(o),'second argument should be a function',s),U(!I(e,'derived'),`${n} in derived store`,`${n} in store created via createStore`,s),t(Array.isArray(a)?a:[a],(t=>{e.off(t),pt(t,e,'on',ge,o)})),e}function m(e,n){const s=Xe(n),i=ze(e),l=c('store',s),d=f({named:'updates',derived:1});u('storeBase',i);const g=i.id,h='skipVoid'in s,y=h&&!s.skipVoid;U(!(h&&s.skipVoid),'{skipVoid: true}','updateFilter',l);const v={updates:d,defaultState:e,stateRef:i,getState(){let e,t=i;if(Be){let t=Be;for(;t&&!t.reg[g];)t=j(t);t&&(e=t)}return!e&&Te&&(Ke(Te,i,1),e=Te),e&&(t=e.reg[g]),Re(t)},setState:e=>o({target:v,params:e,defer:1,scope:Te}),reset:(...e)=>(r(v.targetable,'.reset of derived store is not supported',l),t(e,(e=>p(v,'.reset',e,(()=>v.defaultState),l))),v),on:(e,t)=>(r(v.targetable,'.on of derived store is not supported',l),p(v,'.on',e,t,l)),off(e){const t=M(e).id,r=M(v).family.links.find((e=>e.meta.onTrigger===t));return r&&rt(r),v},map(e,t){let r,n;ie(e)&&(r=e,e=e.fn);const a=v.getState(),o=le(a);ne()?n=null:(!o||o&&y)&&(n=e(a));const s=m(n,{name:`${v.shortName} \u2192 *`,derived:1,...t,and:r}),c=pt(v,s,$,he,e);return Ae(A(s),{type:$,fn:e,from:i}),A(s).noInit=1,u('storeMap',i,c),s},watch(e,t){if(U(!t,'watch second argument','sample',l),!t||!D(e)){const t=ot(v,e);return u('storeWatch',i,e)||e(v.getState()),t}return r(ce(t),'second argument should be a function',l),e.watch((e=>t(v.getState(),e)))}},b=dt("store",v,s,lt(m)),k=v.defaultConfig.updateFilter;v.graphite=a({scope:{state:i,fn:k},node:[Se(((e,t,r)=>(r.scope&&!r.scope.reg[i.id]&&(r.b=1),e))),we(i),Se(((e,t,{a:r,b:n})=>{const a=le(e);return a&&!h&&J(`${l}: ${ft}`,I(v,'unitTrace')),(a&&y||!a)&&(e!==r||n)}),1),k&&$e(me,1),be({from:"stack",target:i})],child:d,meta:{...b,defaultState:e,stateRef:i},regional:1}),O(v,'id',v.graphite.id),O(v,'rootStateRefId',g);const x=I(v,'serialize'),S=I(v,'derived'),w='ignore'===x,z=I(v,'sid');z&&(O(v,'storeChange',1),i.sid=z),z||w||S||O(v,'warnSerialize',1);const R=le(e);return r(S||!R||R&&y,ft,l),S&&R&&!h&&console.error(`${l}: ${ft}`),oe(v,[d]),null!=s&&s.domain&&s.domain.hooks.store(v),S||(v.reinit=f({named:'reinit'}),v.reset(v.reinit)),i.meta=v.graphite.meta,re(v.graphite),v}function g(...e){let t,n,a;[e,a]=l(e);const o=c('combine',a),s=e[e.length-1],i=e.length>1&&!E(s)&&ie(s),d=i&&s,u=i?e[e.length-2]:s;let f,p,m;if(ce(u)?(n=e.slice(0,i?-2:-1),t=u):n=e,1===n.length){const e=n[0];E(e)||(f=e,p=1)}if(!p&&(f=n,t)){m=1;const e=t;t=t=>e(...t)}return r(ie(f),`${o}: shape should be an object`),mt(Array.isArray(f),!m,f,lt(g),a,t,d)}function h(){const e={};return e.req=new Promise(((t,r)=>{e.rs=t,e.rj=r})),e.req.catch((()=>{})),e}function y(e,t={}){const n=Xe(ce(e)?{handler:e}:e,t),s=c('effect',n),i=f(ce(e)?{handler:e}:e,{...t,actualOp:"effect"});ct(i,lt(y));const l=M(i);O(l,'op',i.kind="effect"),i.use=e=>(r(ce(e),'.use argument should be a function',s),b.scope.handler=e,i),i.use.getCurrent=()=>b.scope.handler;const d=i.finally=f({named:'finally',derived:1}),u=i.done=d.filterMap({named:'done',fn({status:e,params:t,result:r}){if('done'===e)return{params:t,result:r}}}),p=i.fail=d.filterMap({named:'fail',fn({status:e,params:t,error:r}){if('fail'===e)return{params:t,error:r}}}),g=i.doneData=u.map({named:'doneData',fn:({result:e})=>e}),v=i.failData=p.map({named:'failData',fn:({error:e})=>e}),b=a({scope:{handler:i.defaultConfig.handler||(()=>r(0,`no handler used in ${i.compositeName.fullName}`))},node:[Se(((e,t,r)=>{let n=t.handler;const a=C(r);if(a){const e=a.handlers.unitMap.get(i)||a.handlers.sidMap[i.sid];e&&(n=e)}return e.handler=n,e}),0,1),Se(((e,t,r)=>{if(t.runnerFn&&!t.runnerFn(e,null,r))return;const{params:n,req:a,handler:o,args:s=[n]}=e,i=ht(n,a,1,d,r),c=ht(n,a,0,d,r),[l,u]=gt(o,c,s);l&&(ie(u)&&ce(u.then)?u.then(i,c):i(u))}),0,1)],meta:{op:'fx',fx:'runner'},regional:1});l.scope.runner=b,H(l.seq,Se(((e,{runner:t},r)=>{const n=j(r)?{params:e,req:{rs(e){},rj(e){}}}:e;return r.meta||(r.meta={fxID:Z()}),o({target:t,params:n,defer:1,scope:C(r),meta:r.meta}),n.params}))),i.create=e=>{const t=h(),r={params:e,req:t};if(Te&&!Pe){const e=Te;t.req.finally((()=>{Le(e)})).catch((()=>{}))}return o({target:i,params:r,scope:Te}),t.req};const k=i.inFlight=m(0,{serialize:'ignore',named:(I(i,'name')||i.graphite.id)+'.inFlight'}).on(i,(e=>e+1)).on(d,(e=>e-1)).map({fn:e=>e,named:'inFlight'});O(d,'needFxCounter','dec'),O(i,'needFxCounter',1);const x=i.pending=k.map({fn:e=>e>0,named:'pending'});return oe(i,[d,u,p,g,v,x,k]),null!=n&&n.domain&&n.domain.hooks.effect(i),i}function v(e,n){let a=0;return t(vt,(t=>{t in e&&(r(null!=e[t],bt(n,t)),a=1)})),a}function b(...e){let t,r,n,a,[[o,s,i],d]=l(e),u=1;const f=c('sample',d);return le(s)&&ie(o)&&v(o,f)&&(s=o.clock,i=o.fn,'batch'in o?u=o.batch:(U(!('greedy'in o),'greedy in sample','batch',f),u=!o.greedy),a=o.filter,t=o.target,r=o.name,n=o.sid,o=o.source),kt('sample',s,o,a,t,i,r,d,u,1,0,n)}function k(e,r,n){const a=[];(function e(o){W(a,o)||(H(a,o),"store"===I(o,'op')&&(n||I(o,'sid'))&&r(o,I(o,'sid')),t(o.next,e),t(z(o),e),t(R(o),e))})(e)}function x(e,n){const a=Array.isArray(e)?new Map(e):e,o=new Map;let s=0;if(a instanceof Map){const e={};return t(a,((t,a)=>{r(D(a),'Map key should be a unit'),n&&n(a,t),a.sid&&(a.sid in e&&(s=1),e[a.sid]=t),o.set(a,t)})),{sidMap:e,unitMap:o,hasSidDoubles:s}}return{sidMap:a,unitMap:o}}function S(e,t){return E(t)?[Me.mov({store:t.stateRef,to:'stack'}),...e]:e}Object.defineProperty(exports,'__esModule',{value:1});const w='undefined'!=typeof Symbol&&Symbol.observable||'@@observable',$='map',M=e=>e.graphite||e,z=e=>e.family.owners,R=e=>e.family.links,A=e=>e.stateRef,N=e=>e.value,j=e=>e.parent,C=e=>e.scope,I=(e,t)=>M(e).meta[t],O=(e,t,r)=>M(e).meta[t]=r,F=e=>e.compositeName,D=e=>(ce(e)||ie(e))&&'kind'in e,q=e=>t=>D(t)&&t.kind===e,E=q("store"),T=q("event"),_=q("effect"),P=e=>D(e)&&!!e.targetable,V=q("domain"),B=q("scope");var L={__proto__:null,unit:D,store:E,event:T,effect:_,targetable:P,domain:V,scope:B,attached:e=>_(e)&&1==I(e,'attached')};const W=(e,t)=>e.includes(t),G=(e,t)=>{const r=e.indexOf(t);-1!==r&&e.splice(r,1)},H=(e,t)=>e.push(t),U=(e,t,r,n)=>!e&&console.error(`${n?n+': ':''}${t} is deprecated${r?`, use ${r} instead`:''}`),J=(e,t)=>{const r=Error(e);r.stack=t,console.error(r)},K=()=>{let e=0;return()=>""+ ++e},Q=K(),X=K(),Y=K(),Z=K();let ee,te=null;const re=e=>{ee&&ee(e,te)},ne=()=>te&&te.template,ae=e=>(e&&te&&te.sidRoot&&(e=`${te.sidRoot}|${e}`),e),oe=(e,r)=>{const n=M(e);t(r,(e=>{const t=M(e);"domain"!==n.family.type&&(t.family.type="crosslink"),H(z(t),n),H(R(n),t)}))},se=(e=[])=>(Array.isArray(e)?e:[e]).flat().map(M),ie=e=>'object'==typeof e&&null!==e,ce=e=>'function'==typeof e,le=e=>void 0===e,de=e=>r(ie(e)||ce(e),'expect first argument be an object'),ue=(e,t,n,a)=>r(!(!ie(e)&&!ce(e)||!('family'in e)&&!('graphite'in e)),`${t}: expect ${n} to be a unit (store, event or effect)${a}`),fe=(e,r,n)=>{Array.isArray(e)?t(e,((e,t)=>ue(e,r,`${t} item of ${n}`,''))):ue(e,r,n,' or array of units')},pe=(e,n,a="target")=>t(se(n),(t=>r(!I(t,'derived'),`${e}: derived unit in "${a}" is not supported, use createStore/createEvent instead"`))),me=(e,{fn:t},{a:r})=>t(e,r),ge=(e,{fn:t},{a:r})=>t(r,e),he=(e,{fn:t})=>t(e),ye=(e,t,r,n)=>{const a={id:X(),type:e,data:t};return r&&(a.order={priority:r},n&&(a.order.barrierID=++ve)),a};let ve=0;const be=({from:e="store",store:t,target:r,to:n=(r?"store":"stack"),batch:a,priority:o})=>ye('mov',{from:e,store:t,to:n,target:r},o,a),ke=({fn:e,batch:t,priority:r,safe:n=0,filter:a=0,pure:o=0})=>ye('compute',{fn:e,safe:n,filter:a,pure:o},r,t),xe=({fn:e})=>ke({fn:e,priority:"effect"}),Se=(e,t,r)=>ke({fn:e,safe:1,filter:t,priority:r&&"effect"}),we=(e,t,r)=>be({store:e,to:t?"stack":"a",priority:r&&"sampler",batch:1}),$e=(e=he,t)=>ke({fn:e,pure:1,filter:t}),Me={mov:be,compute:ke,filter:({fn:e,pure:t})=>ke({fn:e,filter:1,pure:t}),run:xe},ze=e=>({id:X(),current:e,initial:e}),Re=({current:e})=>e,Ae=(e,t)=>{e.before||(e.before=[]),H(e.before,t)};let Ne=null;const je=(e,t)=>{if(!e)return t;if(!t)return e;let r;return(e.v.type===t.v.type&&e.v.id>t.v.id||qe(e.v.type)>qe(t.v.type))&&(r=e,e=t,t=r),r=je(e.r,t),e.r=e.l,e.l=r,e},Ce=[];let Ie=0;for(;Ie<6;)H(Ce,{first:null,last:null,size:0}),Ie+=1;const Oe=()=>{for(let e=0;e<6;e++){const t=Ce[e];if(t.size>0){if(3===e||4===e){t.size-=1;const e=Ne.v;return Ne=je(Ne.l,Ne.r),e}1===t.size&&(t.last=null);const r=t.first;return t.first=r.r,t.size-=1,r.v}}},Fe=(e,t,r,n,a,o,s)=>De(0,{a:null,b:null,node:r,parent:n,value:a,page:t,scope:o,meta:s},e,0),De=(e,t,r,n)=>{const a=qe(r),o=Ce[a],s={v:{idx:e,stack:t,type:r,id:n},l:null,r:null};3===a||4===a?Ne=je(Ne,s):(0===o.size?o.first=s:o.last.r=s,o.last=s),o.size+=1},qe=e=>{switch(e){case'child':return 0;case'pure':return 1;case'read':return 2;case'barrier':return 3;case'sampler':return 4;case'effect':return 5;default:return-1}},Ee=new Set;let Te,_e=1,Pe=0,Ve=0,Be=null;const Le=e=>{Te=e},We=e=>{Be=e},Ge=(e,t)=>{if(e){for(;e&&!e.reg[t];)e=e.parent;if(e)return e}return null},He=(e,t,r,n)=>{const a=Ge(e,r.id);return a?a.reg[r.id]:t?(Ke(t,r,n),t.reg[r.id]):r};let Ue;const Je=e=>e,Ke=(e,r,n,a,o)=>{const s=e.reg;if(s[r.id])return;const i=r.sid,c={id:r.id,current:r.initial,meta:r.meta};if(c.id in e.values.idMap)c.current=e.values.idMap[c.id];else if(i&&i in e.values.sidMap&&!(i in e.sidIdMap)){var l;const t=null==r||null===(l=r.meta)||void 0===l?void 0:l.serialize;c.current=(e.fromSerialize&&'ignore'!==t&&(null==t?void 0:t.read)||Je)(e.values.sidMap[i])}else if(r.before&&!o){let o=0;const i=n||!r.noInit||a;t(r.before,(t=>{switch(t.type){case'map':{const r=t.from;if((r||t.fn)&&(r&&Ke(e,r,n,a),i)){const e=r&&s[r.id].current;c.current=t.fn?t.fn(e):e}break}case'field':Ke(e,t.from,n,a),o||(o=1,c.current=Array.isArray(c.current)?[...c.current]:{...c.current}),i&&(c.current[t.field]=s[s[t.from.id].id].current)}}))}i&&(e.sidIdMap[i]=r.id),s[r.id]=c},Qe=(e,t,r)=>{try{return t(N(r),e.scope,r)}catch(t){console.error(t),e.fail=1,e.failReason=t}},Xe=(t,r={})=>(ie(t)&&(Xe(t.or,r),e(t,((e,t)=>{le(e)||'or'===t||'and'===t||(r[t]=e)})),Xe(t.and,r)),r),Ye=(e,t)=>{G(e.next,t),G(z(e),t),G(R(e),t)},Ze=['on','reset','sample','split','merge','guard','forward'],et=(e,t,r,n,a)=>{let o;e.next.length=0,e.seq.length=0,e.scope=null;let s=R(e);const{stateRef:i,defaultShape:c,isRegion:l,op:d}=e.meta;if(i&&(i.before=[],e.meta.stateRef=null),c)for(const e in c)c[e]=null;const u=l?e:n;if(s.length>0){const n=W(Ze,d),i=!l&&!a,c=i&&r&&!n;for(;o=s.pop();){const s=W(o.next,e);Ye(o,e),l&&et(o,0,0,e,1),s||(o.family.triggers-=1),(t||c||i&&"crosslink"===o.family.type&&!n||a&&W(Ze,o.meta.op)&&(s&&0===o.next.length||!s&&o.family.triggers<=0))&&et(o,t,r&&'on'!==o.meta.op,u,a)}}for(s=z(e);o=s.pop();)Ye(o,e),r&&"crosslink"===o.family.type&&et(o,t,'on'!==o.meta.op,u,a)},tt=e=>e.clear(),rt=(e,{deep:t}={})=>{let r=0;if(e.ownerSet&&e.ownerSet.delete(e),V(e)){r=1;const t=e.history;tt(t.events),tt(t.effects),tt(t.stores),tt(t.domains)}et(M(e),!!t,r,null,0)},nt=e=>d((()=>rt(e))),at=(e,t,r,n,o)=>a({node:r,parent:e,child:t,scope:{fn:o},meta:{op:n},family:{owners:[e,t],links:t},regional:1}),ot=(e,t)=>(r(ce(t),'.watch argument should be a function'),nt(a({scope:{fn:t},node:[xe({fn:he})],parent:e,meta:{op:'watch'},family:{owners:e},regional:1}))),st=(e,t,r="event")=>{j(e)&&j(e).hooks[r](t)},ct=(e,t)=>O(e,'unitTrace',t),lt=e=>{const t=Error('unit trace');return Error.captureStackTrace&&Error.captureStackTrace(t,e),t.stack},dt=(e,t,r,n)=>{const a=Xe(r),o="domain"===e,s=Q(),{sid:c=null,named:l=null,domain:d=null,parent:u=d}=a,f=l||a.name||(o?'':s),p=i(f,u),m={op:t.kind=e,name:t.shortName=f,sid:t.sid=ae(c),named:l,unitId:t.id=s,serialize:a.serialize,derived:a.derived,config:a,unitTrace:n};if(t.targetable=!a.derived,t.parent=u,t.compositeName=p,t.defaultConfig=a,t.getType=()=>(U(0,'getType','compositeName.fullName'),p.fullName),!o){t.subscribe=e=>(de(e),t.watch(ce(e)?e:t=>e.next&&e.next(t))),t[w]=()=>t;const e=ne();e&&(m.nativeTemplate=e)}return m},ut=(e,t,r,n)=>{let a;ie(r)&&(a=r,r=r.fn);const o=f({name:`${e.shortName} \u2192 *`,derived:1,and:a});return at(e,o,n,t,r),o},ft='undefined is used to skip updates. To allow undefined as a value provide explicit { skipVoid: false } option',pt=(e,t,r,n,a)=>{const o=A(t),s=be({store:o,to:"a",priority:'read'});r===$&&(s.data.softRead=1);const i=[s,$e(n)];u('storeOnMap',o,i,E(e)&&A(e));const c=at(e,t,i,r,a);return r!==$&&O(c,'onTrigger',M(e).id),c},mt=(t,n,o,i,l,d,f)=>{const p=c('combine',l),g=t?e=>[...e]:e=>({...e}),h=t?[]:{},y=g(h),v=ze(y),b=ze(1);v.type=t?'list':'shape',v.noInit=1,u('combineBase',v,b);const k=m(y,{name:s(o),derived:1,...f,and:l});ct(k,i);const x=A(k);x.noInit=1,O(k,'isCombine',1),oe(k,[a({meta:{stateRef:v}})]);const S=we(v);S.order={priority:'barrier'};const w=be({store:x,to:'b',priority:'read'});w.data.softRead=1;const M=[Se(((e,t,r)=>(r.scope&&!r.scope.reg[v.id]&&(r.c=1),e))),S,be({store:b,to:'b'}),Se(((e,{key:t},r)=>{if(r.c||e!==r.a[t])return n&&r.b&&(r.a=g(r.a)),r.a[t]=e,1}),1),be({from:"a",target:v}),be({from:"value",store:0,target:b}),be({from:"value",store:1,target:b,priority:'barrier',batch:1}),we(v,1,1),d&&$e(),w];if(e(o,((e,t)=>{if(!E(e))return r(!D(e)&&!le(e),`combine expects a store in a field ${t}`,p),void(y[t]=h[t]=e);h[t]=e.defaultState,y[t]=e.getState();const n=at(e,k,M,'combine',d);n.scope.key=t;const a=A(e);Ae(v,{type:'field',field:t,from:a}),u('combineField',a,n)})),k.defaultShape=o,O(k,'defaultShape',o),Ae(x,{type:$,from:v,fn:d}),!ne())if(d){const e=d(y);!le(e)||f&&'skipVoid'in f||console.error(`${p}: ${ft}`),x.current=e,x.initial=e,k.defaultState=e}else k.defaultState=h;return k},gt=(e,t,r)=>{try{return[1,e(...r)]}catch(e){return t(e),[0,null]}},ht=(e,t,r,n,a)=>s=>{o({target:[n,yt],params:[r?{status:'done',params:e,result:s}:{status:'fail',params:e,error:s},{value:s,fn:r?t.rs:t.rj}],defer:1,page:a.page,scope:a.scope,meta:a.meta})},yt=a({node:[xe({fn:({fn:e,value:t})=>e(t)})],meta:{op:'fx',fx:'sidechain'}}),vt=['source','clock','target'],bt=(e,t)=>e+`: ${t} should be defined`,kt=(e,t,n,a,o,s,i,l,d,p,h,y)=>{const v=c(e,l),k=!!o;r(!le(n)||!le(t),bt(v,'either source or clock'));let x=0;le(n)?x=1:D(n)||(n=g(n)),le(t)?t=n:(fe(t,v,'clock'),Array.isArray(t)&&(t=at(t,[],[],e))),x&&(n=t),l||i?l&&i?l.name=i:!l&&i&&(l={name:i}):i=n.shortName;let S='none';(h||a)&&(D(a)?S='unit':(r(ce(a),'`filter` should be function or unit'),S='fn')),o?(fe(o,v,'target'),pe(v,o)):'none'===S&&p&&E(n)&&E(t)?o=m(s?s(Re(A(n)),Re(A(t))):Re(A(n)),{name:i,sid:y,or:l}):(o=f({name:i,derived:1,or:l}),u('sampleTarget',M(o)));const w=ze();let $=[];const z=[];if('unit'===S){const[r,n,s,i]=St(a,o,t,w,e);i&&H(z,i),s||$.push(...xt(n)),$.push(...xt(r))}const R=[];if(x)d&&H(R,we(w,1,1));else{const[r,a,s,i]=St(n,o,t,w,e);i&&H(z,i),s||R.push(...xt(a)),H(R,we(r,1,d))}const N=at(t,o,[u('sampleSourceLoader'),be({from:"stack",target:w}),...R,...$,we(w),'fn'===S&&$e(((e,t,{a:r})=>a(e,r)),1),s&&$e(me),u('sampleSourceUpward',k)],e,s);return oe(n,[N]),oe(N,z),Object.assign(N.meta,l,{joint:1,stateRef:w}),ct(N,lt(b)),o},xt=e=>[we(e),Se(((e,t,{a:r})=>r),1)],St=(e,t,r,n,o)=>{const s=E(e),i=s?A(e):ze(),c=ze(s);let l;return s||(l=a({parent:e,node:[be({from:"stack",target:i}),be({from:"value",store:1,target:c})],family:{owners:[...new Set([e,t,r].flat())],links:t},meta:{op:o},regional:1})),u('sampleSource',c,i,n),[i,c,s,l]},wt=(e,t,r,n)=>{const a=e[t];a&&o({target:a,params:Array.isArray(a)?a.map((()=>r)):r,defer:1,stack:n})},$t=e=>!e.node.meta.isCombine||e.parent&&'combine'!==e.parent.node.meta.op,Mt=e=>e;exports.allSettled=(e,{scope:t,params:r}={})=>{if(!D(e))return Promise.reject(new Error('first argument should be unit'));if(!(_(e)||T(e)||E(e)||B(e)))return Promise.reject(new Error('first argument accepts only effects, events, stores or scopes'));if(B(e))t=e;else if(!P(e)){const t=c('allSettled',M(e).meta);return Promise.reject(Error(`${t}: unit should be targetable`))}const n=h();n.parentFork=Te;const{fxCount:a}=t;H(a.scope.defers,n);const s=[],i=[];return B(e)||(H(s,e),H(i,_(e)?{params:r,req:{rs(e){n.value={status:'done',value:e}},rj(e){n.value={status:'fail',value:e}}}}:r)),H(s,a),H(i,null),o({target:s,params:i,scope:t}),n.req},exports.attach=function e(t){let n;[t,n]=l(t,1);const a=c('attach',n);let{source:s,effect:d,mapParams:u,domain:f}=t;_(d)&&r(le(f),'`domain` can only be used with a plain function',a);const p=y(t,n);O(p,'attached',1),ct(p,lt(e));const{runner:m}=M(p).scope;let h;const v=(e,t,r)=>{const{params:n,req:a,handler:i}=e,c=p.finally,l=ht(n,a,0,c,r),d=r.a,f=_(i);let m,g=1;if(u?[g,m]=gt(u,l,[n,d]):m=s&&f?d:n,g){if(!f)return e.args=[d,m],1;o({target:i,params:{params:m,req:{rs:ht(n,a,1,c,r),rj:l}},page:r.page,defer:1,meta:r.meta})}};if(s){let e;m.scope.runnerFn=v,E(s)?(e=s,oe(e,[p])):(e=g(s),oe(p,[e])),h=[Se((e=>e),0,1),we(A(e))],delete m.seq[1].order}else h=[Se(v,1,1)];m.seq.splice(1,0,...h),p.use(d);const b=j(d);return b&&(Object.assign(F(p),i(p.shortName,b)),p.defaultConfig.parent=b),st(d,p,"effect"),p},exports.clearNode=rt,exports.combine=g,exports.createApi=(...t)=>{let[[r,n],a]=l(t);const o={};return e(n,((e,t)=>{const n=o[t]=f(t,{parent:j(r),config:a});r.on(n,e),st(r,n)})),o},exports.createDomain=function r(n,s){const i=Xe({or:s,and:'string'==typeof n?{name:n}:n}),c=a({family:{type:"domain"},regional:1,parent:(null==i?void 0:i.domain)||(null==i?void 0:i.parent)}),l={history:{},graphite:c,hooks:{}};c.meta=dt("domain",l,{parent:(null==i?void 0:i.domain)||(null==i?void 0:i.parent),or:{...i,derived:1}},lt(r)),e({Event:f,Effect:y,Store:m,Domain:r},((e,r)=>{const n=r.toLowerCase(),a=f({named:`on${r}`});l.hooks[n]=a;const s=new Set;l.history[`${n}s`]=s,a.create=e=>(o(a,e),e),H(M(a).seq,Se(((e,t,r)=>(r.scope=null,e)))),a.watch((e=>{oe(l,[e]),s.add(e),e.ownerSet||(e.ownerSet=s),j(e)||(e.parent=l)})),oe(l,[a]),l[`onCreate${r}`]=e=>(t(s,e),a.watch(e)),l[`create${r}`]=l[n]=(t,r)=>{const n=Xe({and:r,or:t});return null!=n&&n.domain?e(t,r):a(e(t,{parent:l,or:n}))}}));const d=j(l);return d&&e(l.hooks,((e,t)=>at(e,d.hooks[t]))),null!=i&&i.domain&&i.domain.hooks.domain(l),l},exports.createEffect=y,exports.createEvent=f,exports.createNode=a,exports.createStore=m,exports.createWatch=({unit:e,fn:t,scope:r,batch:n})=>{const o=[Me.run({fn:e=>t(e)})];n&&o.unshift(Me.compute({priority:'sampler',batch:1})),E(e)&&o.unshift(Me.mov({store:e.stateRef,to:'stack'}));const s=Array.isArray(e)?e:[e];if(r){const e=[],t=r.additionalLinks;return s.forEach((r=>{const n=t[r.graphite.id]||[];t[r.graphite.id]=n;const s=a({node:S(o,r),meta:{watchOp:r.kind}});n.push(s),e.push((()=>{const e=n.indexOf(s);-1!==e&&n.splice(e,1),rt(s)}))})),d((()=>{e.forEach((e=>e()))}))}{const e=a({node:o,parent:s,family:{owners:s}});return d((()=>{rt(e)}))}},exports.fork=(e,n)=>{let o,s=e;V(e)&&(U(0,'fork(domain)','fork()'),o=e,s=n);const i=(e=>{const r=a({scope:{defers:[],inFlight:0,fxID:0},node:[Se(((e,t,r)=>{r.parent?'dec'===r.parent.node.meta.needFxCounter?t.inFlight-=1:(t.inFlight+=1,t.fxID+=1):t.fxID+=1})),ke({priority:"sampler",batch:1}),Se(((e,r)=>{const{defers:n,fxID:a}=r;r.inFlight>0||0===n.length||Promise.resolve().then((()=>{r.fxID===a&&t(n.splice(0,n.length),(e=>{Le(e.parentFork),e.rs(e.value)}))}))}),0,1)]}),n=a({node:[Se(((e,t,r)=>{const n=r.parent;if(n){const t=n.node;if($t(n)){const n=C(r),a=t.meta.sid;n.sidIdMap[a]=t.scope.state.id,n.values.sidMap[a]=e;const o=t.meta.serialize;o&&n.sidSerializeSettings.set(a,'ignore'===o?{ignore:1}:{ignore:0,write:o.write})}}}))]}),o=a({node:[Se(((e,t,r)=>{const n=C(r),a=r.parent;n&&a&&$t(a)&&n.warnSerializeTraces.add(I(a.node,'unitTrace'))}))]}),s={cloneOf:e,reg:{},values:{sidMap:{},idMap:{}},sidIdMap:{},sidSerializeSettings:new Map,getState(e){if('current'in e)return He(Be,s,e,0).current;const t=M(e);return He(Be,s,t.scope.state,1).current},kind:"scope",graphite:a({family:{type:"domain",links:[r,n,o]},meta:{unit:'fork'},scope:{forkInFlightCounter:r}}),additionalLinks:{},handlers:{sidMap:{},unitMap:new Map},fxCount:r,storeChange:n,warnSerializeTraces:new Set,warnSerializeNode:o};return s})(o);if(s){if(s.values){const{sidMap:e,unitMap:n,hasSidDoubles:a}=x(s.values,(e=>r(E(e)&&P(e),'Values map can contain only writable stores as keys')));Object.assign(i.values.sidMap,e),t(n,((e,t)=>{if(i.values.idMap[t.stateRef.id]=e,i.sidIdMap[I(t,'sid')]=t.stateRef.id,'ignore'===I(t,'serialize')){const e=I(t,'sid');i.sidSerializeSettings.set(e,{ignore:1})}})),i.fromSerialize=!(Array.isArray(s.values)||s.values instanceof Map),i.hasSidDoubles=a}s.handlers&&(U(s.handlers instanceof Map||Array.isArray(s.handlers),'object with handlers','array'),i.handlers=x(s.handlers,(e=>r(_(e),"Handlers map can contain only effects as keys"))))}return i},exports.forward=e=>{const t='forward',[{from:r,to:n},o]=l(e,1),s=c(t,o);return U(0,t,'sample',s),fe(r,s,'"from"'),fe(n,s,'"to"'),pe(s,n,'to'),nt(a({parent:r,child:n,meta:{op:t,config:o},family:{},regional:1}))},exports.fromObservable=e=>{de(e);const t=w in e?e[w]():e;r(t.subscribe,'expect observable to have .subscribe');const n=f(),a=nt(n);return t.subscribe({next:n,error:a,complete:a}),n},exports.guard=(...e)=>{let[[t,r],n]=l(e);const a=c('guard',n);return U(0,'guard','sample',a),r||(r=t,t=r.source),v(r,a),kt('guard',r.clock,t,r.filter,r.target,null,r.name,n,!r.greedy,0,1)},exports.hydrate=(e,{values:n})=>{r(ie(n),'values property should be an object');const{sidMap:a,unitMap:s}=x(n),i=Object.getOwnPropertyNames(a),c={};t(s,((e,t)=>{c[t.stateRef.id]=t}));const l=[],d=[];let u,f,p;B(e)?(u=e,p=1,r(u.cloneOf,'scope should be created from domain'),U(0,'hydrate(fork(domain), { values })','fork({ values })'),f=M(u.cloneOf)):V(e)?(U(0,'hydrate(domain, { values })','fork({ values })'),f=M(e)):r(0,'first argument of hydrate should be domain or scope'),k(f,((e,t)=>{if(t&&W(i,t)){H(l,e);const r=I(e,'serialize');r&&'ignore'!==r&&(a[t]=r.read(a[t])),H(d,a[t])}else e.scope.state.id in c&&(H(l,e),H(d,s.get(c[e.scope.state.id])))}),1),o({target:l,params:d,scope:u}),p&&Object.assign(u.values.sidMap,a)},exports.is=L,exports.launch=o,exports.merge=(e,t)=>{const r=c('merge',t);fe(e,r,'first argument');const n=f({name:s(e,'merge'),derived:1,and:t});return at(e,n,[],'merge'),n},exports.restore=(t,n,a)=>{const o=c('restore',a);if(r(!E(t),'restore($store) is not supported',o),T(t)||_(t)){const e=j(t),r=m(n,{parent:e,name:t.shortName,and:a});return at(_(t)?t.doneData:t,r),e&&e.hooks.store(r),r}const s=Array.isArray(t)?[]:{};return e(t,((e,t)=>s[t]=E(e)?e:m(e,{name:t}))),s},exports.sample=b,exports.scopeBind=(e,{scope:t,safe:n}={})=>{r(t||Te||n,'scopeBind: scope not found');const a=t||Te;return(...t)=>{function r(){Le(s)}let n,o=0;const s=Te;Le(a);try{n=e(...t)}catch(e){n=e,o=1}if(r(),o)throw n;return n instanceof Promise&&n.then(r,r),n}},exports.serialize=(n,a={})=>{n.warnSerializeTraces.size&&(console.error('serialize: One or more stores dont have sids, their values are omitted'),t(n.warnSerializeTraces,(e=>{J('store should have sid or `serialize: ignore`',e)}))),r(!n.hasSidDoubles,'duplicate sid found in this scope');const o=a.ignore?a.ignore.map((({sid:e})=>e)):[],s={};return e(n.values.sidMap,((e,t)=>{var r;if(W(o,t))return;const a=n.sidIdMap[t],i=null!==(r=n.sidSerializeSettings.get(t))&&void 0!==r?r:{ignore:0,write:Mt};i.ignore||(s[t]=(0,i.write)(a&&a in n.reg?n.reg[a].current:e))})),'onlyChanges'in a&&(U(0,'onlyChanges'),a.onlyChanges||(r(n.cloneOf,'scope should be created from domain'),k(M(n.cloneOf),((e,t)=>{t in s||W(o,t)||I(e,'isCombine')||'ignore'===I(e,'serialize')||(s[t]=n.getState(e))})))),s},exports.setGraphInspector=e=>{ee=e},exports.setInspector=e=>{Ue=e},exports.setStoreName=(e,t)=>{e.shortName=t,Object.assign(F(e),i(t,j(e)))},exports.split=function t(...n){const o='split';let s,i,[[d,p],m]=l(n);const g=c(o,m),h=!p;h&&(s=d.cases,p=d.match,i=d.clock,d=d.source);const y=E(p),v=!D(p)&&ce(p),b=!y&&!v&&ie(p);r(D(d),'source must be a unit',g),s||(s={}),h?e(s,((e,t)=>pe(g,e,`cases.${t}`))):(r(b,'match should be an object',g),e(p,((e,t)=>s[t]=f({derived:1,named:`cases.${t}`,and:m}))),s.__=f({derived:1,named:'cases.__',and:m}));const k=new Set([].concat(d,i||[],Object.values(s))),x=Object.keys(y||v?s:p);let S,w;if(y||v)y&&k.add(p),S=[y&&we(A(p),0,1),ke({safe:y,filter:1,pure:!y,fn(e,t,r){const n=String(y?r.a:p(e));wt(t,W(x,n)?n:'__',e,r)}})];else if(b){const t=w=ze({});t.type='shape';const r=[];let n;e(p,((e,a)=>{if(D(e)){n=1,H(r,a),k.add(e);const o=at(e,[],[we(t),Se(((e,t,{a:r})=>r[a]=e))]);if(E(e)){t.current[a]=e.getState();const r=A(e);Ae(t,{from:r,field:a,type:'field'}),u('splitMatchStore',r,o)}}})),n&&u('splitBase',t),S=[n&&we(t,0,1),$e(((e,t,n)=>{for(let a=0;a<x.length;a++){const o=x[a];if(W(r,o)?n.a[o]:p[o](e))return void wt(t,o,e,n)}wt(t,'__',e,n)}),1)]}else r(0,'expect match to be unit, function or object');const $=a({meta:{op:o,stateRef:w},parent:i?[]:d,scope:s,node:S,family:{owners:Array.from(k)},regional:1});if(i&&kt(o,i,d,null,$,null,o,m,0,0,0),ct($,lt(t)),!h)return s},exports.step=Me,exports.version="23.4.1",exports.withFactory=({sid:e,name:t,loc:r,method:o,fn:s})=>n(a({meta:{sidRoot:ae(e),sid:e,name:t,loc:r,method:o,type:'factory'},regional:1}),s),exports.withRegion=n; //# sourceMappingURL=effector.cjs.js.map