@constellar/core
Version:
state manipulation primitives
3 lines (2 loc) • 12.4 kB
JavaScript
"use strict";var se=Object.defineProperty;var oe=(t,e,n)=>e in t?se(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var m=(t,e,n)=>oe(t,typeof e!="symbol"?e+"":e,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function F(t){return typeof t=="string"?{type:t}:t}function ce(t){return e=>t(F(e))}function D(t,e){return[t,...e]}function C(t,e){return[...e,t]}function ae(t,e,n){return t<0&&(t+=n.length),t<0||t>n.length?n:[...n.slice(0,t),e,...n.slice(t)]}function q(t,e,n){return e<0&&(e+=n.length),e<0||e>=n.length||Object.is(n[e],t)?n:[...n.slice(0,e),t,...n.slice(e+1)]}function L(t,e){return t<0&&(t+=e.length),t<0||t>=e.length?e:[...e.slice(0,t),...e.slice(t+1)]}function R(t,e){for(const n of e)if(Object.is(n,t))return e;return e.concat(t)}function H(t,e){let n=!1;const r=[];for(const i of e)Object.is(i,t)?n=!0:r.push(i);return n?r:e}function de(t,...e){return e.reduce((n,r)=>r(n),t)}function g(t){return typeof t=="function"}function w(t){return t===void 0}function l(t){return!1}const N=()=>{};function I(t,e){return t(e)}function c(t){return t}function S(t,e){return t===c?e:e===c?t:n=>e(t(n))}function j(t){return g(t)?t():t}function V(t){return g(t)?e=>t(e):()=>t}function T(t){if(!t)return!0;for(const e of Object.keys(t))return!1;return!0}function le(t){return function(e){return function(...n){return t(e,...n)}}}function me(t,...e){return(...n)=>t(...e,...n)}function he(t,...e){return e.reduce((n,r)=>i=>r(n(i)),t)}function U(t,e){if(t===e)return!0;if(!(t instanceof Object)||!(e instanceof Object))return!1;let n=0,r=0;for(const i in t)if(n+=1,!Object.is(t[i],e[i])||!(i in e))return!1;for(const i in e)r+=1;return n===r}class z{constructor(e){m(this,"last",new Map);this.effectsHandlers=e}foldSubState(e){return(n,r,i)=>{var f,u;if(this.effectsHandlers===void 0)return r;r.add(i);for(const s of Object.entries(this.effectsHandlers)){const[o,a]=s,h=(f=n.effects)==null?void 0:f[o];let d=this.last.get(i);d||(d=new Map,this.last.set(i,d));const p=d.get(o);U(p==null?void 0:p.args,h)||((u=p==null?void 0:p.unmount)==null||u.call(p),d.set(o,{args:h,unmount:h===void 0?void 0:a(h,e)}))}return r}}flush(e){this.last.forEach((n,r)=>{e!=null&&e.has(r)||(n.forEach(({unmount:i})=>i==null?void 0:i()),n.clear())})}update(e,n){this.flush(e(this.foldSubState(n),new Set))}}function G(t){return g(t)?e=>t(F(e)):e=>{const n=F(e);t[n.type](n)}}function pe(){return J()}function J(){return function({derive:t,init:e,states:n}){const r=V(e);function i(f){for(;;){let u=n[f.type].always;if(u===void 0||(g(u)&&(u=u(f)),u===void 0))break;f=u}return f}return function(f){return{getFinal:u=>{const s=n[u.type];if(!s.always&&!s.wildcard&&T(s.events))return u},init:()=>i(F(r(f))),reducer:(u,s,...o)=>{var p;const a=F(u),h=n[s.type];let d=(p=h==null?void 0:h.events)==null?void 0:p[a.type];if(g(d)?d=d(a,s,...o):d===void 0&&(d=h==null?void 0:h.wildcard,g(d)&&(d=d(a,s,...o))),d!==void 0)return i(F(d))},transform:(u,...s)=>{const o=n[u.type].derive,a=o?A(u,o,...s):u;return t?A(a,t,...s):a},visit:(u,s,o,...a)=>s(o,u,o.type,...a)}}}}function A(t,e,...n){const r=g(e)?e(t,...n):e;return{...t,...r}}function K(t,e,n){let r=!1;const i=t.reducer(n,e,()=>{r=!0});return!r&&i===void 0}function Q(t,e,n){const r=t.reducer(n,e,()=>{});return r===void 0?e:t.transform(r)}class W{constructor(e,n){m(this,"effects");m(this,"onFinal");m(this,"onMessage");m(this,"queue",[]);m(this,"final");m(this,"state");this.machine=e,this.onMessage=n!=null&&n.onMessage?G(n.onMessage):()=>{},this.onFinal=n==null?void 0:n.onFinal,this.state=e.transform(e.init()),this.final=e.getFinal(this.state),n!=null&&n.events&&(this.effects=new z(n.events),this.effects.update(this.visit.bind(this),this.send.bind(this)))}onChange(){if(!this.effects)return;const e=this.queue.length===0;if(this.effects.update(this.visit.bind(this),this.send.bind(this)),!!e)for(;;){const n=this.queue.shift();if(n===void 0)break;this.send(n)}}flush(){var e;(e=this.effects)==null||e.flush()}isDisabled(e){return K(this.machine,this.state,e)}next(e){return Q(this.machine,this.state,e)}send(e){const n=this.machine.reducer(e,this.state,this.onMessage);n!==void 0&&(this.state=this.machine.transform(n),this.final=this.machine.getFinal(this.state),this.onChange(),this.onFinal&&this.final!==void 0&&this.onFinal(this.final))}visit(e,n){return this.machine.visit(n,e,this.state)}}function ge(t,e){return new W(t,e)}function Fe(t,e){return new Promise(n=>{new W(t,{events:e,onFinal:n})})}function be(){return X()}function X(){return function({events:t,init:e,transform:n},r){return i=>({getFinal:r??(()=>{}),init:()=>V(e)(i),reducer:(f,u,...s)=>{const o=F(f);if((r==null?void 0:r(u))!==void 0)return;let a=t[o==null?void 0:o.type];if(a!==void 0)return g(a)&&(a=a(o,u,...s)),a},transform:n??c,visit:(f,u,s,...o)=>u(s,f,"",...o)})}}const Y=t=>{let e=0;return function(){if(e!==t.length)return{index:e,part:t[e++]}}};function Z(){return{foldFn:(t,e)=>(e.push(t),e),init:()=>[]}}function $(t){return{foldFn:(e,n,{close:r})=>(r(),e),init:t}}const x={close:N};function B(t,e,n,r,i){const f=r(n);let u=!0;const s={close:()=>{i(),u=!1},index:void 0,whole:n};for(;u;){const o=f();if(o===void 0)break;s.index=o.index,t=e(o.part,t,s)}return t}const ee=Symbol("REMOVE");function ye(t){return t===ee}function v(t,e){throw new Error("forbidden")}class b{constructor(e){m(this,"com");m(this,"getter");m(this,"isCommand");m(this,"isFailure");m(this,"mapper");m(this,"refold");m(this,"setter");this.com=e.com,this.getter=e.getter,this.isCommand=e.isCommand,this.isFailure=e.isFailure,this.mapper=e.mapper,this.refold=e.refold,this.setter=e.setter}static eq(){return new b({com:c,getter:c,isCommand:l,isFailure:l,mapper:I,refold:c,setter:c})}command(e,n){return this.com(e,n)}fold(e,n){return this.refold(e.foldFn)(n,j(e.init),x)}modify(e,n){return this.mapper(e,n)}put(e,n){return this.setter?this.setter(e,n):this.mapper(()=>e,n)}update(e){return this.isCommand(e)?n=>this.com(e,n):g(e)?n=>this.modify(e,n):n=>this.put(e,n)}view(e,n){const r=this.getter?this.getter(e):this.fold($(void 0),e);return this.isFailure(r)?g(n)?n(r):n:r}}function ve(){return function(t){return t(b.eq())}}function te(t,e,n){if(!(!e||!n))return t===l?S(e,n):function(r){const i=e(r);return t(i)?i:n(i)}}function ne(t,e){if(t===l)return e;if(e===l||t===e)return t;throw new Error("unexpected failure value")}function re(t,e){return t===I?e:(n,r)=>t(i=>e(n,i),r)}function E(t,e){return t===c&&e===c?c:t===c?(n,r)=>n(e(r)):e===c?(n,r)=>t(n(r),r):(n,r)=>t(n(e(r)),r)}function we(t,e,n,r){if(!t||!e||!r)return;const i=e===c?(f,u)=>r(f,u):(f,u,s)=>e(r(f,u),s);return(f,u)=>{const s=t(u);return n(s)?u:i(f,s,u)}}function Me(t,e,n){if(!t||!e||!n)return;const r=e===c?i=>n(i):(i,f)=>e(n(i),f);return(i,f)=>r(i,f)}function _(t){return function(e){return new b({com:(n,r)=>e.mapper(i=>t.command(n,i),r),getter:te(e.isFailure,e.getter,t.getter),isCommand:t.isCommand,isFailure:ne(e.isFailure,t.isFailure),mapper:re(e.mapper,t.mapper??((n,r)=>{const i=t.getter(r);return t.isFailure(i)?r:t.setter(n(i))})),refold:S(t.refold??(n=>(r,i,f)=>{const u=t.getter(r);return t.isFailure(u)?i:n(u,i,f)}),e.refold),setter:Me(e.getter,e.setter,t.setter)})}}function M(t){return function(e){return new b({com:(n,r)=>e.mapper(i=>t.command(n,i),r),getter:te(e.isFailure,e.getter,t.getter),isCommand:t.isCommand,isFailure:ne(e.isFailure,t.isFailure),mapper:re(e.mapper,t.mapper??((n,r)=>{const i=t.getter(r);return t.isFailure(i)?r:t.setter(n(i),r)})),refold:S(t.refold??(n=>(r,i,f)=>{const u=t.getter(r);return t.isFailure(u)?i:n(u,i,f)}),e.refold),setter:we(e.getter,e.setter,e.isFailure,t.setter)})}}function k({getter:t,mapper:e,setter:n}){return _({command:v,getter:t,isCommand:l,isFailure:l,mapper:e??E(n,t),refold:t===c?c:r=>(i,f,u)=>r(t(i),f,u),setter:n})}function O({getter:t,mapper:e,setter:n}){return M({command:v,getter:t,isCommand:l,isFailure:l,mapper:e??E(n,t),refold:t===c?c:r=>(i,f,u)=>r(t(i),f,u),setter:n})}function P({getter:t,mapper:e,setter:n}){return _({command:v,getter:t,isCommand:l,isFailure:w,mapper:e,setter:n})}function ie({getter:t,mapper:e,setter:n}){return M({command:v,getter:t,isCommand:l,isFailure:w,mapper:e,setter:n})}function y({getter:t,mapper:e,remover:n,setter:r}){return M({command:(i,f)=>n(f),getter:t,isCommand:ye,isFailure:w,mapper:e,setter:r})}function ue({coll:t,form:e}){return M({command:v,isCommand:l,isFailure:w,mapper:(n,r)=>{const{foldFn:i,init:f}=e(),u=j(f);return B(u,(s,o,a)=>i(n(s),o,a),r,t,N)},refold:n=>function(r,i,{close:f}){return B(i,n,r,t,f)}})}function Oe(t){return function(e){const n=i=>Object.is(e.update(t)(i),i),r=(i,f)=>i&&!n(f)?e.update(t)(f):f;return new b({com:c,getter:n,isCommand:l,isFailure:l,mapper:E(r,n),refold:i=>(f,u,s)=>i(n(f),u,s),setter:r})}}function Ce(t){return function(e){if(!(e.getter&&e.setter))throw new Error("valueOr don't work with traversals");const n=r=>{const i=e.getter(r);return e.isFailure(i)?j(t):i};return new b({com:e.com,getter:n,isCommand:e.isCommand,isFailure:l,mapper:E(e.setter,n),refold:r=>{const i=e.refold(r);return(f,u,s)=>e.isFailure(e.getter(f))?r(n(f),u,s):i(f,u,s)},setter:e.setter})}}function Se(t){return ie({getter:t,setter:v})}function je(t){return k({getter:t,setter:c})}function fe(t){return O({getter:c,setter:t})}function Ee(t=Object.is){return fe((e,n)=>t(e,n)?n:e)}function qe(t,e=0){return k({getter:n=>t*n+e,setter:n=>(n-e)/t})}function Ne(t){return O({getter:e=>e[t],setter:(e,n)=>q(e,t,n)})}function Ie(t){return O({getter:e=>e.includes(t),setter:(e,n)=>e?R(t,n):H(t,n)})}function Ve(t){return P({getter:e=>t(e)?e:void 0,setter:c})}function _e(){return P({getter:t=>{const e=parseInt(t);if(!isNaN(e))return e},setter:t=>String(t)})}function ke(t){return y({getter:e=>e[t],remover:e=>{if(!(t in e))return e;const n={...e};return delete n[t],n},setter:(e,n)=>Object.is(n[t],e)&&t in n?n:{...n,[t]:e}})}function Pe(t){return y({getter:e=>e.at(t),remover:e=>L(t,e),setter:(e,n)=>q(e,t,n)})}function Ae(t){return y({getter:e=>e.find(t),mapper:(e,n)=>{const r=n.findIndex(t);if(r<0)return n;const i=e(n[r]);return[...n.slice(0,r),i,...n.slice(r+1)]},remover:e=>{const n=e.findIndex(t);return n<0?e:[...e.slice(0,n),...e.slice(n+1)]},setter:(e,n)=>{const r=n.findIndex(t);return r<0?C(e,n):[...n.slice(0,r),e,...n.slice(r+1)]}})}function Be(t){return O({getter:e=>e.filter(t),setter:(e,n)=>{let r=!1;const i=[];let f=0,u=0,s=0;for(f=0;f<n.length;f++){const o=n[f];t(o)?u<e.length?(r=r||!Object.is(e[u],o),i[s]=e[u],u++,s++):r=!0:(i[s]=o,s++)}for(;u<e.length;u++,s++)r=!0,i[s]=e[u];return r?i:n}})}function De(){return y({getter:t=>t.length?t.slice(1):void 0,remover:t=>t.length?t.slice(0,1):t,setter:(t,e)=>e.length?[e[0],...t]:e})}function Le(){return y({getter:t=>t.at(0),remover:t=>t.length?t.slice(1):t,setter:D})}function Re(){return y({getter:t=>t.at(-1),remover:t=>t.length?t.slice(0,-1):t,setter:C})}function He(){return y({getter:t=>t.at(0),remover:t=>t.length?t.slice(1):t,setter:C})}function Te(){return ue({coll:Y,form:Z})}exports.COptic=b;exports.MachineEffects=z;exports.REMOVE=ee;exports.append=C;exports.apply=I;exports.at=Pe;exports.ctxNull=x;exports.curry=me;exports.curry1=le;exports.dedupe=Ee;exports.disabled=Oe;exports.elems=Te;exports.findMany=Be;exports.findOne=Ae;exports.flow=de;exports.focus=ve;exports.forbidden=v;exports.fromArray=Y;exports.fromInit=j;exports.fromSendable=F;exports.head=Le;exports.id=c;exports.includes=Ie;exports.insert=ae;exports.insertValue=R;exports.isDisabled=K;exports.isEmpty=T;exports.isFunction=g;exports.isNever=l;exports.isUndefined=w;exports.iso=k;exports.lens=O;exports.linear=qe;exports.multiStateBaseMachine=J;exports.multiStateMachine=pe;exports.nextState=Q;exports.noop=N;exports.nth=Ne;exports.objectMachine=ge;exports.opticNonPrism=M;exports.opticPrism=_;exports.optional=ie;exports.pipe=he;exports.pipe2=S;exports.prepend=D;exports.prism=P;exports.promiseMachine=Fe;exports.prop=ke;exports.queue=He;exports.removable=y;exports.remove=L;exports.removeValue=H;exports.replace=q;exports.reread=je;exports.rewrite=fe;exports.shallowEqual=U;exports.simpleStateBaseMachine=X;exports.simpleStateMachine=be;exports.stack=Re;exports.strToNum=_e;exports.tail=De;exports.to=Se;exports.toArray=Z;exports.toFirst=$;exports.toInit=V;exports.toListener=G;exports.traversal=ue;exports.valueOr=Ce;exports.when=Ve;exports.withSend=ce;
//# sourceMappingURL=index.cjs.map