@zeix/cause-effect 0.18.0 → 0.18.1

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.
package/index.js CHANGED
@@ -1 +1 @@
1
- function Y($){return typeof $==="function"}function v($){return Y($)&&$.constructor.name==="AsyncFunction"}function q$($){return Y($)&&$.constructor.name!=="AsyncFunction"}function C($,J){return Object.prototype.toString.call($)===`[object ${J}]`}function O($){return C($,"Object")}function I$($,J=(z)=>z!=null){return Array.isArray($)&&$.every(J)}function j$($){return typeof $==="string"?`"${$}"`:!!$&&typeof $==="object"?JSON.stringify($):String($)}class n extends Error{constructor($){super(`[${$}] Circular dependency detected`);this.name="CircularDependencyError"}}class C$ extends TypeError{constructor($){super(`[${$}] Signal value cannot be null or undefined`);this.name="NullishSignalValueError"}}class c extends Error{constructor($){super(`[${$}] Signal value is unset`);this.name="UnsetSignalValueError"}}class a extends TypeError{constructor($,J){super(`[${$}] Signal value ${j$(J)} is invalid`);this.name="InvalidSignalValueError"}}class V$ extends TypeError{constructor($,J){super(`[${$}] Callback ${j$(J)} is invalid`);this.name="InvalidCallbackError"}}class m$ extends Error{constructor($){super(`[${$}] Active owner is required`);this.name="RequiredOwnerError"}}class l extends Error{constructor($,J,z){super(`[${$}] Could not add key "${J}"${z?` with value ${JSON.stringify(z)}`:""} because it already exists`);this.name="DuplicateKeyError"}}function F($,J,z){if(J==null)throw new C$($);if(z&&!z(J))throw new a($,J)}function e($,J){if(J==null)throw new c($)}function _($,J,z=Y){if(!z(J))throw new V$($,J)}var h="State",p="Memo",y="Task",g="Sensor",w="List",S="Collection",k="Store",f=0,x$=1,G=2,Z$=4,j=null,E=null,N$=[],V=0,A$=!1,u=($,J)=>$===J,S$=($,J)=>!1;function h$($,J){let z=J.sourcesTail;if(z){let X=J.sources;while(X){if(X===$)return!0;if(X===z)break;X=X.nextSource}}return!1}function R($,J){let z=J.sourcesTail;if(z?.source===$)return;let X=null,U=J.flags&Z$;if(U){if(X=z?z.nextSource:J.sources,X?.source===$){J.sourcesTail=X;return}}let B=$.sinksTail;if(B?.sink===J&&(!U||h$(B,J)))return;let M={source:$,sink:J,nextSource:X,prevSink:B,nextSink:null};if(J.sourcesTail=$.sinksTail=M,z)z.nextSource=M;else J.sources=M;if(B)B.nextSink=M;else $.sinks=M}function p$($){let{source:J,nextSource:z,nextSink:X,prevSink:U}=$;if(X)X.prevSink=U;else J.sinksTail=U;if(U)U.nextSink=X;else J.sinks=X;if(!J.sinks&&J.stop)J.stop(),J.stop=void 0;return z}function Q$($){let J=$.sourcesTail,z=J?J.nextSource:$.sources;while(z)z=p$(z);if(J)J.nextSource=null;else $.sources=null}function A($,J=G){let z=$.flags;if("sinks"in $){if((z&(G|x$))>=J)return;if($.flags=z|J,"controller"in $&&$.controller)$.controller.abort(),$.controller=void 0;for(let X=$.sinks;X;X=X.nextSink)A(X.sink,x$)}else{if(z&G)return;$.flags=G,N$.push($)}}function H$($,J){if($.equals($.value,J))return;$.value=J;for(let z=$.sinks;z;z=z.nextSink)A(z.sink);if(V===0)L()}function i($,J){if(!$.cleanup)$.cleanup=J;else if(Array.isArray($.cleanup))$.cleanup.push(J);else $.cleanup=[$.cleanup,J]}function G$($){if(!$.cleanup)return;if(Array.isArray($.cleanup))for(let J=0;J<$.cleanup.length;J++)$.cleanup[J]();else $.cleanup();$.cleanup=null}function y$($){let J=j;j=$,$.sourcesTail=null,$.flags=Z$;let z=!1;try{let X=$.fn($.value);if($.error||!$.equals(X,$.value))$.value=X,$.error=void 0,z=!0}catch(X){z=!0,$.error=X instanceof Error?X:Error(String(X))}finally{j=J,Q$($)}if(z){for(let X=$.sinks;X;X=X.nextSink)if(X.sink.flags&x$)X.sink.flags|=G}$.flags=f}function g$($){$.controller?.abort();let J=new AbortController;$.controller=J,$.error=void 0;let z=j;j=$,$.sourcesTail=null,$.flags=Z$;let X;try{X=$.fn($.value,J.signal)}catch(U){$.controller=void 0,$.error=U instanceof Error?U:Error(String(U));return}finally{j=z,Q$($)}X.then((U)=>{if(J.signal.aborted)return;if($.controller=void 0,$.error||!$.equals(U,$.value)){$.value=U,$.error=void 0;for(let B=$.sinks;B;B=B.nextSink)A(B.sink);if(V===0)L()}},(U)=>{if(J.signal.aborted)return;$.controller=void 0;let B=U instanceof Error?U:Error(String(U));if(!$.error||B.name!==$.error.name||B.message!==$.error.message){$.error=B;for(let M=$.sinks;M;M=M.nextSink)A(M.sink);if(V===0)L()}}),$.flags=f}function Y$($){G$($);let J=j,z=E;j=E=$,$.sourcesTail=null,$.flags=Z$;try{let X=$.fn();if(typeof X==="function")i($,X)}finally{j=J,E=z,Q$($)}$.flags=f}function b($){if($.flags&x$)for(let J=$.sources;J;J=J.nextSource){if("fn"in J.source)b(J.source);if($.flags&G)break}if($.flags&Z$)throw new n("controller"in $?y:("value"in $)?p:"Effect");if($.flags&G)if("controller"in $)g$($);else if("value"in $)y$($);else Y$($);else $.flags=f}function L(){if(A$)return;A$=!0;try{for(let $=0;$<N$.length;$++){let J=N$[$];if(J.flags&G)b(J)}N$.length=0}finally{A$=!1}}function o($){V++;try{$()}finally{if(V--,V===0)L()}}function d($){let J=j;j=null;try{return $()}finally{j=J}}function k$($){let J=E,z={cleanup:null};E=z;try{let X=$();if(typeof X==="function")i(z,X);let U=()=>G$(z);if(J)i(J,U);return U}finally{E=J}}function T($,J){F(h,$,J?.guard);let z={value:$,sinks:null,sinksTail:null,equals:J?.equals??u,guard:J?.guard};return{[Symbol.toStringTag]:h,get(){if(j)R(z,j);return z.value},set(X){F(h,X,z.guard),H$(z,X)},update(X){_(h,X);let U=X(z.value);F(h,U,z.guard),H$(z,U)}}}function W$($){return C($,h)}function B$($,J){if($.length!==J.length)return!1;for(let z=0;z<$.length;z++)if($[z]!==J[z])return!1;return!0}function t($,J,z){if(Object.is($,J))return!0;if(typeof $!==typeof J)return!1;if($==null||typeof $!=="object"||J==null||typeof J!=="object")return!1;if(!z)z=new WeakSet;if(z.has($)||z.has(J))throw new n("isEqual");z.add($),z.add(J);try{let X=Array.isArray($);if(X!==Array.isArray(J))return!1;if(X){let U=$,B=J;if(U.length!==B.length)return!1;for(let M=0;M<U.length;M++)if(!t(U[M],B[M],z))return!1;return!0}if(O($)&&O(J)){let U=Object.keys($),B=Object.keys(J);if(U.length!==B.length)return!1;for(let M of U){if(!(M in J))return!1;if(!t($[M],J[M],z))return!1}return!0}return!1}finally{z.delete($),z.delete(J)}}function v$($,J,z,X,U){let B=new WeakSet,M={},K={},W={},Q=[],H=!1,m=new Map;for(let D=0;D<$.length;D++){let Z=z[D];if(Z&&$[D])m.set(Z,$[D])}let P=new Set;for(let D=0;D<J.length;D++){let Z=J[D];if(Z===void 0)continue;let q=U?X(Z):z[D]??X(Z);if(P.has(q))throw new l(w,q,Z);if(Q.push(q),P.add(q),!m.has(q))M[q]=Z,H=!0;else{let N=m.get(q);if(!t(N,Z,B))K[q]=Z,H=!0}}for(let[D]of m)if(!P.has(D))W[D]=null,H=!0;if(!H&&!B$(z,Q))H=!0;return{add:M,change:K,remove:W,newKeys:Q,changed:H}}function $$($,J){F(w,$,Array.isArray);let z=new Map,X=[],U=0,B=J?.keyConfig,M=Y(B),K=typeof B==="string"?()=>`${B}${U++}`:M?(Z)=>B(Z):()=>String(U++),W=()=>X.map((Z)=>z.get(Z)?.get()).filter((Z)=>Z!==void 0),Q={fn:W,value:$,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:t,error:void 0},H=(Z)=>{let q={};for(let N=0;N<Z.length;N++){let x=Z[N];if(x===void 0)continue;let I=X[N];if(!I)I=K(x),X[N]=I;q[I]=x}return q},m=(Z)=>{let q=!1;for(let N in Z.add){let x=Z.add[N];F(`${w} item for key "${N}"`,x),z.set(N,T(x)),q=!0}if(Object.keys(Z.change).length)o(()=>{for(let N in Z.change){let x=Z.change[N];F(`${w} item for key "${N}"`,x);let I=z.get(N);if(I)I.set(x)}});for(let N in Z.remove){z.delete(N);let x=X.indexOf(N);if(x!==-1)X.splice(x,1);q=!0}if(q)Q.sources=null,Q.sourcesTail=null;return Z.changed},P=H($);for(let Z in P){let q=P[Z];F(`${w} item for key "${Z}"`,q),z.set(Z,T(q))}Q.value=$,Q.flags=0;let D={[Symbol.toStringTag]:w,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of X){let q=z.get(Z);if(q)yield q}},get length(){if(j){if(!Q.sinks&&J?.watched)Q.stop=J.watched();R(Q,j)}return X.length},get(){if(j){if(!Q.sinks&&J?.watched)Q.stop=J.watched();R(Q,j)}if(Q.sources){if(Q.flags)Q.value=d(W),Q.flags=f}else if(b(Q),Q.error)throw Q.error;return Q.value},set(Z){let q=Q.flags&G?W():Q.value,N=v$(q,Z,X,K,M);if(N.changed){if(X=N.newKeys,m(N),A(Q),Q.flags|=G,V===0)L()}},update(Z){D.set(Z(D.get()))},at(Z){return z.get(X[Z])},keys(){if(j){if(!Q.sinks&&J?.watched)Q.stop=J.watched();R(Q,j)}return X.values()},byKey(Z){return z.get(Z)},keyAt(Z){return X[Z]},indexOfKey(Z){return X.indexOf(Z)},add(Z){let q=K(Z);if(z.has(q))throw new l(w,q,Z);if(!X.includes(q))X.push(q);if(F(`${w} item for key "${q}"`,Z),z.set(q,T(Z)),Q.sources=null,Q.sourcesTail=null,A(Q),Q.flags|=G,V===0)L();return q},remove(Z){let q=typeof Z==="number"?X[Z]:Z;if(z.delete(q)){let x=typeof Z==="number"?Z:X.indexOf(q);if(x>=0)X.splice(x,1);if(Q.sources=null,Q.sourcesTail=null,A(Q),Q.flags|=G,V===0)L()}},sort(Z){let N=X.map((x)=>[x,z.get(x)?.get()]).sort(Y(Z)?(x,I)=>Z(x[1],I[1]):(x,I)=>String(x[1]).localeCompare(String(I[1]))).map(([x])=>x);if(!B$(X,N)){if(X=N,A(Q),Q.flags|=G,V===0)L()}},splice(Z,q,...N){let x=X.length,I=Z<0?Math.max(0,x+Z):Math.min(Z,x),_$=Math.max(0,Math.min(q??Math.max(0,x-Math.max(0,I)),x-I)),P$={},X$={};for(let r=0;r<_$;r++){let s=I+r,R$=X[s];if(R$){let b$=z.get(R$);if(b$)X$[R$]=b$.get()}}let F$=X.slice(0,I);for(let r of N){let s=K(r);if(z.has(s)&&!(s in X$))throw new l(w,s,r);F$.push(s),P$[s]=r}F$.push(...X.slice(I+_$));let w$=!!(Object.keys(P$).length||Object.keys(X$).length);if(w$){if(m({add:P$,change:{},remove:X$,changed:w$}),X=F$,A(Q),Q.flags|=G,V===0)L()}return Object.values(X$)},deriveCollection(Z){return D$(D,Z)}};return D}function U$($){return C($,w)}function J$($,J){if(_(p,$,q$),J?.value!==void 0)F(p,J.value,J?.guard);let z={fn:$,value:J?.value,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:J?.equals??u,error:void 0};return{[Symbol.toStringTag]:p,get(){if(j)R(z,j);if(b(z),z.error)throw z.error;return e(p,z.value),z.value}}}function L$($){return C($,p)}function z$($,J){if(_(y,$,v),J?.value!==void 0)F(y,J.value,J?.guard);let z={fn:$,value:J?.value,sources:null,sourcesTail:null,sinks:null,sinksTail:null,flags:G,equals:J?.equals??u,controller:void 0,error:void 0};return{[Symbol.toStringTag]:y,get(){if(j)R(z,j);if(b(z),z.error)throw z.error;return e(y,z.value),z.value},isPending(){return!!z.controller},abort(){z.controller?.abort(),z.controller=void 0}}}function f$($){return C($,y)}function D$($,J){if(_(S,J),!u$($))throw TypeError(`[${S}] Invalid collection source: expected a List or Collection`);let z=v(J),X=new Map,U=(H)=>{let m=z?z$(async(P,D)=>{let Z=$.byKey(H)?.get();if(Z==null)return P;return J(Z,D)}):J$(()=>{let P=$.byKey(H)?.get();if(P==null)return;return J(P)});X.set(H,m)};function B(){let H=Array.from($.keys()),m=M.value;if(!B$(m,H)){let P=new Set(m),D=new Set(H);for(let Z of m)if(!D.has(Z))X.delete(Z);for(let Z of H)if(!P.has(Z))U(Z)}return H}let M={fn:B,value:[],flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:B$,error:void 0};function K(){if(M.sources){if(M.flags)M.value=d(B),M.flags=f}else if(b(M),M.error)throw M.error;return M.value}let W=Array.from($.keys());for(let H of W)U(H);M.value=W;let Q={[Symbol.toStringTag]:S,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let H of M.value){let m=X.get(H);if(m)yield m}},get length(){if(j)R(M,j);return K().length},keys(){if(j)R(M,j);return K().values()},get(){if(j)R(M,j);let H=K(),m=[];for(let P of H)try{let D=X.get(P)?.get();if(D!=null)m.push(D)}catch(D){if(!(D instanceof c))throw D}return m},at(H){return X.get(M.value[H])},byKey(H){return X.get(H)},keyAt(H){return M.value[H]},indexOfKey(H){return M.value.indexOf(H)},deriveCollection(H){return D$(Q,H)}};return Q}function c$($,J){let z=J?.value??[];if(z.length)F(S,z,Array.isArray);_(S,$);let X=new Map,U=[],B=0,M=J?.keyConfig,K=typeof M==="string"?()=>`${M}${B++}`:Y(M)?(Z)=>M(Z):()=>String(B++),W=J?.createItem??((Z,q)=>T(q));function Q(){let Z=[];for(let q of U)try{let N=X.get(q)?.get();if(N!=null)Z.push(N)}catch(N){if(!(N instanceof c))throw N}return Z}let H={fn:Q,value:z,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:()=>!1,error:void 0};function m(Z){if(!Z.changed)return;let q=!1;o(()=>{for(let N in Z.add){let x=Z.add[N];if(X.set(N,W(N,x)),!U.includes(N))U.push(N);q=!0}for(let N in Z.change){let x=X.get(N);if(x&&W$(x))x.set(Z.change[N])}for(let N in Z.remove){X.delete(N);let x=U.indexOf(N);if(x!==-1)U.splice(x,1);q=!0}if(q)H.sources=null,H.sourcesTail=null;H.flags=f,A(H),H.flags|=G})}for(let Z of z){let q=K(Z);X.set(q,W(q,Z)),U.push(q)}H.value=z,H.flags=G;function P(){if(!H.sinks)H.stop=$(m)}let D={[Symbol.toStringTag]:S,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of U){let q=X.get(Z);if(q)yield q}},get length(){if(j)P(),R(H,j);return U.length},keys(){if(j)P(),R(H,j);return U.values()},get(){if(j)P(),R(H,j);if(H.sources){if(H.flags)H.value=d(Q),H.flags=f}else if(b(H),H.error)throw H.error;return H.value},at(Z){return X.get(U[Z])},byKey(Z){return X.get(Z)},keyAt(Z){return U[Z]},indexOfKey(Z){return U.indexOf(Z)},deriveCollection(Z){return D$(D,Z)}};return D}function T$($){return C($,S)}function u$($){return U$($)||T$($)}function d$($){_("Effect",$);let J={fn:$,flags:G,sources:null,sourcesTail:null,cleanup:null},z=()=>{G$(J),J.fn=void 0,J.flags=f,J.sourcesTail=null,Q$(J)};if(E)i(E,z);return Y$(J),z}function t$($,J){if(!E)throw new m$("match");let{ok:z,err:X=console.error,nil:U}=J,B,M=!1,K=Array($.length);for(let Q=0;Q<$.length;Q++)try{K[Q]=$[Q].get()}catch(H){if(H instanceof c){M=!0;continue}if(!B)B=[];B.push(H instanceof Error?H:Error(String(H)))}let W;try{if(M)W=U?.();else if(B)W=X(B);else W=z(K)}catch(Q){X([Q instanceof Error?Q:Error(String(Q))])}if(typeof W==="function")return W;if(W instanceof Promise){let Q=E,H=new AbortController;i(Q,()=>H.abort()),W.then((m)=>{if(!H.signal.aborted&&typeof m==="function")i(Q,m)}).catch((m)=>{X([m instanceof Error?m:Error(String(m))])})}}function r$($,J){if(_(g,$,q$),J?.value!==void 0)F(g,J.value,J?.guard);let z={value:J?.value,sinks:null,sinksTail:null,equals:J?.equals??u,guard:J?.guard,stop:void 0};return{[Symbol.toStringTag]:g,get(){if(j){if(!z.sinks)z.stop=$((X)=>{F(g,X,z.guard),H$(z,X)});R(z,j)}return e(g,z.value),z.value}}}function s$($){return C($,g)}function l$($,J){let z=O($)||Array.isArray($),X=O(J)||Array.isArray(J);if(!z||!X){let m=!Object.is($,J);return{changed:m,add:m&&X?J:{},change:{},remove:m&&z?$:{}}}let U=new WeakSet,B={},M={},K={},W=!1,Q=Object.keys($),H=Object.keys(J);for(let m of H)if(m in $){if(!t($[m],J[m],U))M[m]=J[m],W=!0}else B[m]=J[m],W=!0;for(let m of Q)if(!(m in J))K[m]=void 0,W=!0;return{add:B,change:M,remove:K,changed:W}}function M$($,J){F(k,$,O);let z=new Map,X=(W,Q)=>{if(F(`${k} for key "${W}"`,Q),Array.isArray(Q))z.set(W,$$(Q));else if(O(Q))z.set(W,M$(Q));else z.set(W,T(Q))},U=()=>{let W={};return z.forEach((Q,H)=>{W[H]=Q.get()}),W},B={fn:U,value:$,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:t,error:void 0},M=(W)=>{let Q=!1;for(let H in W.add)X(H,W.add[H]),Q=!0;if(Object.keys(W.change).length)o(()=>{for(let H in W.change){let m=W.change[H];F(`${k} for key "${H}"`,m);let P=z.get(H);if(P)if(O(m)!==K$(P))X(H,m),Q=!0;else P.set(m)}});for(let H in W.remove)z.delete(H),Q=!0;if(Q)B.sources=null,B.sourcesTail=null;return W.changed};for(let W of Object.keys($))X(W,$[W]);let K={[Symbol.toStringTag]:k,[Symbol.isConcatSpreadable]:!1,*[Symbol.iterator](){for(let W of Array.from(z.keys())){let Q=z.get(W);if(Q)yield[W,Q]}},keys(){if(j){if(!B.sinks&&J?.watched)B.stop=J.watched();R(B,j)}return z.keys()},byKey(W){return z.get(W)},get(){if(j){if(!B.sinks&&J?.watched)B.stop=J.watched();R(B,j)}if(B.sources){if(B.flags)B.value=d(U),B.flags=f}else if(b(B),B.error)throw B.error;return B.value},set(W){let Q=B.flags&G?U():B.value,H=l$(Q,W);if(M(H)){if(A(B),B.flags|=G,V===0)L()}},update(W){K.set(W(K.get()))},add(W,Q){if(z.has(W))throw new l(k,W,Q);if(X(W,Q),B.sources=null,B.sourcesTail=null,A(B),B.flags|=G,V===0)L();return W},remove(W){if(z.delete(W)){if(B.sources=null,B.sourcesTail=null,A(B),B.flags|=G,V===0)L()}}};return new Proxy(K,{get(W,Q){if(Q in W){let H=Reflect.get(W,Q);return Y(H)?H.bind(W):H}if(typeof Q!=="symbol")return W.byKey(Q)},has(W,Q){if(Q in W)return!0;return W.byKey(String(Q))!==void 0},ownKeys(W){return Array.from(W.keys())},getOwnPropertyDescriptor(W,Q){if(Q in W)return Reflect.getOwnPropertyDescriptor(W,Q);if(typeof Q==="symbol")return;let H=W.byKey(String(Q));return H?{enumerable:!0,configurable:!0,writable:!0,value:H}:void 0}})}function K$($){return C($,k)}function i$($,J){return v($)?z$($,J):J$($,J)}function o$($){if(O$($))return $;if($==null)throw new a("createSignal",$);if(v($))return z$($);if(Y($))return J$($);if(I$($))return $$($);if(O($))return M$($);return T($)}function n$($){if(E$($))return $;if($==null||Y($)||O$($))throw new a("createMutableSignal",$);if(I$($))return $$($);if(O($))return M$($);return T($)}function a$($){return L$($)||f$($)}function O$($){let J=[h,p,y,g,w,S,k],z=Object.prototype.toString.call($).slice(8,-1);return J.includes(z)}function E$($){return W$($)||K$($)||U$($)}export{j$ as valueString,d as untrack,t$ as match,f$ as isTask,K$ as isStore,W$ as isState,O$ as isSignal,s$ as isSensor,O as isRecord,C as isObjectOfType,E$ as isMutableSignal,L$ as isMemo,U$ as isList,Y as isFunction,t as isEqual,a$ as isComputed,T$ as isCollection,v as isAsyncFunction,z$ as createTask,M$ as createStore,T as createState,o$ as createSignal,r$ as createSensor,k$ as createScope,n$ as createMutableSignal,J$ as createMemo,$$ as createList,d$ as createEffect,i$ as createComputed,c$ as createCollection,o as batch,c as UnsetSignalValueError,S$ as SKIP_EQUALITY,m$ as RequiredOwnerError,C$ as NullishSignalValueError,a as InvalidSignalValueError,V$ as InvalidCallbackError,n as CircularDependencyError};
1
+ function y($){return typeof $==="function"}function l($){return y($)&&$.constructor.name==="AsyncFunction"}function $$($){return y($)&&$.constructor.name!=="AsyncFunction"}function Y($,J){return Object.prototype.toString.call($)===`[object ${J}]`}function L($){return Y($,"Object")}function C$($,J=(z)=>z!=null){return Array.isArray($)&&$.every(J)}function V$($){return typeof $==="string"?`"${$}"`:!!$&&typeof $==="object"?JSON.stringify($):String($)}class J$ extends Error{constructor($){super(`[${$}] Circular dependency detected`);this.name="CircularDependencyError"}}class I$ extends TypeError{constructor($){super(`[${$}] Signal value cannot be null or undefined`);this.name="NullishSignalValueError"}}class t extends Error{constructor($){super(`[${$}] Signal value is unset`);this.name="UnsetSignalValueError"}}class z$ extends TypeError{constructor($,J){super(`[${$}] Signal value ${V$(J)} is invalid`);this.name="InvalidSignalValueError"}}class x$ extends TypeError{constructor($,J){super(`[${$}] Callback ${V$(J)} is invalid`);this.name="InvalidCallbackError"}}class G$ extends Error{constructor($){super(`[${$}] Active owner is required`);this.name="RequiredOwnerError"}}class n extends Error{constructor($,J,z){super(`[${$}] Could not add key "${J}"${z?` with value ${JSON.stringify(z)}`:""} because it already exists`);this.name="DuplicateKeyError"}}function K($,J,z){if(J==null)throw new I$($);if(z&&!z(J))throw new z$($,J)}function X$($,J){if(J==null)throw new t($)}function _($,J,z=y){if(!z(J))throw new x$($,J)}var k="State",v="Memo",u="Task",c="Sensor",b="List",g="Collection",d="Store",T=0,D$=1,D=2,H$=4,U=null,p=null,m$=[],C=0,A$=!1,r=($,J)=>$===J,w$=($,J)=>!1;function p$($,J){let z=J.sourcesTail;if(z){let X=J.sources;while(X){if(X===$)return!0;if(X===z)break;X=X.nextSource}}return!1}function O($,J){let z=J.sourcesTail;if(z?.source===$)return;let X=null,Q=J.flags&H$;if(Q){if(X=z?z.nextSource:J.sources,X?.source===$){J.sourcesTail=X;return}}let H=$.sinksTail;if(H?.sink===J&&(!Q||p$(H,J)))return;let B={source:$,sink:J,nextSource:X,prevSink:H,nextSink:null};if(J.sourcesTail=$.sinksTail=B,z)z.nextSource=B;else J.sources=B;if(H)H.nextSink=B;else $.sinks=B}function y$($){let{source:J,nextSource:z,nextSink:X,prevSink:Q}=$;if(X)X.prevSink=Q;else J.sinksTail=Q;if(Q)Q.nextSink=X;else J.sinks=X;if(!J.sinks&&J.stop)J.stop(),J.stop=void 0;return z}function Q$($){let J=$.sourcesTail,z=J?J.nextSource:$.sources;while(z)z=y$(z);if(J)J.nextSource=null;else $.sources=null}function I($,J=D){let z=$.flags;if("sinks"in $){if((z&(D|D$))>=J)return;if($.flags=z|J,"controller"in $&&$.controller)$.controller.abort(),$.controller=void 0;for(let X=$.sinks;X;X=X.nextSink)I(X.sink,D$)}else{if(z&D)return;$.flags=D,m$.push($)}}function B$($,J){if($.equals($.value,J))return;$.value=J;for(let z=$.sinks;z;z=z.nextSink)I(z.sink);if(C===0)A()}function a($,J){if(!$.cleanup)$.cleanup=J;else if(Array.isArray($.cleanup))$.cleanup.push(J);else $.cleanup=[$.cleanup,J]}function P$($){if(!$.cleanup)return;if(Array.isArray($.cleanup))for(let J=0;J<$.cleanup.length;J++)$.cleanup[J]();else $.cleanup();$.cleanup=null}function g$($){let J=U;U=$,$.sourcesTail=null,$.flags=H$;let z=!1;try{let X=$.fn($.value);if($.error||!$.equals(X,$.value))$.value=X,$.error=void 0,z=!0}catch(X){z=!0,$.error=X instanceof Error?X:Error(String(X))}finally{U=J,Q$($)}if(z){for(let X=$.sinks;X;X=X.nextSink)if(X.sink.flags&D$)X.sink.flags|=D}$.flags=T}function k$($){$.controller?.abort();let J=new AbortController;$.controller=J,$.error=void 0;let z=U;U=$,$.sourcesTail=null,$.flags=H$;let X;try{X=$.fn($.value,J.signal)}catch(Q){$.controller=void 0,$.error=Q instanceof Error?Q:Error(String(Q));return}finally{U=z,Q$($)}X.then((Q)=>{if(J.signal.aborted)return;if($.controller=void 0,$.error||!$.equals(Q,$.value)){$.value=Q,$.error=void 0;for(let H=$.sinks;H;H=H.nextSink)I(H.sink);if(C===0)A()}},(Q)=>{if(J.signal.aborted)return;$.controller=void 0;let H=Q instanceof Error?Q:Error(String(Q));if(!$.error||H.name!==$.error.name||H.message!==$.error.message){$.error=H;for(let B=$.sinks;B;B=B.nextSink)I(B.sink);if(C===0)A()}}),$.flags=T}function Y$($){P$($);let J=U,z=p;U=p=$,$.sourcesTail=null,$.flags=H$;try{let X=$.fn();if(typeof X==="function")a($,X)}finally{U=J,p=z,Q$($)}$.flags=T}function E($){if($.flags&D$)for(let J=$.sources;J;J=J.nextSource){if("fn"in J.source)E(J.source);if($.flags&D)break}if($.flags&H$)throw new J$("controller"in $?u:("value"in $)?v:"Effect");if($.flags&D)if("controller"in $)k$($);else if("value"in $)g$($);else Y$($);else $.flags=T}function A(){if(A$)return;A$=!0;try{for(let $=0;$<m$.length;$++){let J=m$[$];if(J.flags&D)E(J)}m$.length=0}finally{A$=!1}}function e($){C++;try{$()}finally{if(C--,C===0)A()}}function s($){let J=U;U=null;try{return $()}finally{U=J}}function v$($){let J=p,z={cleanup:null};p=z;try{let X=$();if(typeof X==="function")a(z,X);let Q=()=>P$(z);if(J)a(J,Q);return Q}finally{p=J}}function h($,J){K(k,$,J?.guard);let z={value:$,sinks:null,sinksTail:null,equals:J?.equals??r,guard:J?.guard};return{[Symbol.toStringTag]:k,get(){if(U)O(z,U);return z.value},set(X){K(k,X,z.guard),B$(z,X)},update(X){_(k,X);let Q=X(z.value);K(k,Q,z.guard),B$(z,Q)}}}function q$($){return Y($,k)}function i($,J,z){if(Object.is($,J))return!0;if(typeof $!==typeof J)return!1;if($==null||typeof $!=="object"||J==null||typeof J!=="object")return!1;if(!z)z=new WeakSet;if(z.has($)||z.has(J))throw new J$("isEqual");z.add($),z.add(J);try{let X=Array.isArray($);if(X!==Array.isArray(J))return!1;if(X){let Q=$,H=J;if(Q.length!==H.length)return!1;for(let B=0;B<Q.length;B++)if(!i(Q[B],H[B],z))return!1;return!0}if(L($)&&L(J)){let Q=Object.keys($),H=Object.keys(J);if(Q.length!==H.length)return!1;for(let B of Q){if(!(B in J))return!1;if(!i($[B],J[B],z))return!1}return!0}return!1}finally{z.delete($),z.delete(J)}}function M$($,J){if($.length!==J.length)return!1;for(let z=0;z<$.length;z++)if($[z]!==J[z])return!1;return!0}function f$($){let J=0,z=typeof $==="function";return[typeof $==="string"?()=>`${$}${J++}`:z?(X)=>$(X)||String(J++):()=>String(J++),z]}function u$($,J,z,X,Q){let H=new WeakSet,B={},q={},F={},P=[],W=!1,j=new Map;for(let G=0;G<$.length;G++){let Z=z[G];if(Z&&$[G])j.set(Z,$[G])}let N=new Set;for(let G=0;G<J.length;G++){let Z=J[G];if(Z===void 0)continue;let M=Q?X(Z):z[G]??X(Z);if(N.has(M))throw new n(b,M,Z);if(P.push(M),N.add(M),!j.has(M))B[M]=Z,W=!0;else if(!i(j.get(M),Z,H))q[M]=Z,W=!0}for(let[G]of j)if(!N.has(G))F[G]=null,W=!0;if(!W&&!M$(z,P))W=!0;return{add:B,change:q,remove:F,newKeys:P,changed:W}}function Z$($,J){K(b,$,Array.isArray);let z=new Map,X=[],[Q,H]=f$(J?.keyConfig),B=()=>X.map((Z)=>z.get(Z)?.get()).filter((Z)=>Z!==void 0),q={fn:B,value:$,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:i,error:void 0},F=(Z)=>{let M={};for(let m=0;m<Z.length;m++){let V=Z[m];if(V===void 0)continue;let R=X[m];if(!R)R=Q(V),X[m]=R;M[R]=V}return M},P=(Z)=>{let M=!1;for(let m in Z.add){let V=Z.add[m];K(`${b} item for key "${m}"`,V),z.set(m,h(V)),M=!0}if(Object.keys(Z.change).length)e(()=>{for(let m in Z.change){let V=Z.change[m];K(`${b} item for key "${m}"`,V);let R=z.get(m);if(R)R.set(V)}});for(let m in Z.remove){z.delete(m);let V=X.indexOf(m);if(V!==-1)X.splice(V,1);M=!0}if(M)q.sources=null,q.sourcesTail=null;return Z.changed},W=J?.watched,j=W?()=>{if(U){if(!q.sinks)q.stop=W();O(q,U)}}:()=>{if(U)O(q,U)},N=F($);for(let Z in N){let M=N[Z];K(`${b} item for key "${Z}"`,M),z.set(Z,h(M))}q.value=$,q.flags=0;let G={[Symbol.toStringTag]:b,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of X){let M=z.get(Z);if(M)yield M}},get length(){return j(),X.length},get(){if(j(),q.sources){if(q.flags)q.value=s(B),q.flags=T}else if(E(q),q.error)throw q.error;return q.value},set(Z){let M=q.flags&D?B():q.value,m=u$(M,Z,X,Q,H);if(m.changed){X=m.newKeys,P(m),q.flags|=D;for(let V=q.sinks;V;V=V.nextSink)I(V.sink);if(C===0)A()}},update(Z){G.set(Z(G.get()))},at(Z){return z.get(X[Z])},keys(){return j(),X.values()},byKey(Z){return z.get(Z)},keyAt(Z){return X[Z]},indexOfKey(Z){return X.indexOf(Z)},add(Z){let M=Q(Z);if(z.has(M))throw new n(b,M,Z);if(!X.includes(M))X.push(M);K(`${b} item for key "${M}"`,Z),z.set(M,h(Z)),q.sources=null,q.sourcesTail=null,q.flags|=D;for(let m=q.sinks;m;m=m.nextSink)I(m.sink);if(C===0)A();return M},remove(Z){let M=typeof Z==="number"?X[Z]:Z;if(z.delete(M)){let V=typeof Z==="number"?Z:X.indexOf(M);if(V>=0)X.splice(V,1);q.sources=null,q.sourcesTail=null,q.flags|=D;for(let R=q.sinks;R;R=R.nextSink)I(R.sink);if(C===0)A()}},sort(Z){let m=X.map((V)=>[V,z.get(V)?.get()]).sort(y(Z)?(V,R)=>Z(V[1],R[1]):(V,R)=>String(V[1]).localeCompare(String(R[1]))).map(([V])=>V);if(!M$(X,m)){X=m,q.flags|=D;for(let V=q.sinks;V;V=V.nextSink)I(V.sink);if(C===0)A()}},splice(Z,M,...m){let V=X.length,R=Z<0?Math.max(0,V+Z):Math.min(Z,V),x=Math.max(0,Math.min(M??Math.max(0,V-Math.max(0,R)),V-R)),w={},f={};for(let S=0;S<x;S++){let o=R+S,O$=X[o];if(O$){let E$=z.get(O$);if(E$)f[O$]=E$.get()}}let K$=X.slice(0,R);for(let S of m){let o=Q(S);if(z.has(o)&&!(o in f))throw new n(b,o,S);K$.push(o),w[o]=S}K$.push(...X.slice(R+x));let T$=!!(Object.keys(w).length||Object.keys(f).length);if(T$){P({add:w,change:{},remove:f,changed:T$}),X=K$,q.flags|=D;for(let S=q.sinks;S;S=S.nextSink)I(S.sink);if(C===0)A()}return Object.values(f)},deriveCollection(Z){return F$(G,Z)}};return G}function U$($){return Y($,b)}function j$($,J){if(_(v,$,$$),J?.value!==void 0)K(v,J.value,J?.guard);let z={fn:$,value:J?.value,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:J?.equals??r,error:void 0,stop:void 0},X=J?.watched,Q=X?()=>{if(U){if(!z.sinks)z.stop=X(()=>{z.flags|=D;for(let H=z.sinks;H;H=H.nextSink)I(H.sink);if(C===0)A()});O(z,U)}}:()=>{if(U)O(z,U)};return{[Symbol.toStringTag]:v,get(){if(Q(),E(z),z.error)throw z.error;return X$(v,z.value),z.value}}}function L$($){return Y($,v)}function W$($,J){if(_(u,$,l),J?.value!==void 0)K(u,J.value,J?.guard);let z={fn:$,value:J?.value,sources:null,sourcesTail:null,sinks:null,sinksTail:null,flags:D,equals:J?.equals??r,controller:void 0,error:void 0,stop:void 0},X=J?.watched,Q=X?()=>{if(U){if(!z.sinks)z.stop=X(()=>{z.flags|=D;for(let H=z.sinks;H;H=H.nextSink)I(H.sink);if(C===0)A()});O(z,U)}}:()=>{if(U)O(z,U)};return{[Symbol.toStringTag]:u,get(){if(Q(),E(z),z.error)throw z.error;return X$(u,z.value),z.value},isPending(){return!!z.controller},abort(){z.controller?.abort(),z.controller=void 0}}}function _$($){return Y($,u)}function F$($,J){if(_(g,J),!d$($))throw TypeError(`[${g}] Invalid collection source: expected a List or Collection`);let z=l(J),X=new Map,Q=(W)=>{let j=z?W$(async(N,G)=>{let Z=$.byKey(W)?.get();if(Z==null)return N;return J(Z,G)}):j$(()=>{let N=$.byKey(W)?.get();if(N==null)return;return J(N)});X.set(W,j)};function H(){let W=Array.from($.keys()),j=B.value;if(!M$(j,W)){let N=new Set(j),G=new Set(W);for(let Z of j)if(!G.has(Z))X.delete(Z);for(let Z of W)if(!N.has(Z))Q(Z)}return W}let B={fn:H,value:[],flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:M$,error:void 0};function q(){if(B.sources){if(B.flags)B.value=s(H),B.flags=T}else if(E(B),B.error)throw B.error;return B.value}let F=Array.from($.keys());for(let W of F)Q(W);B.value=F;let P={[Symbol.toStringTag]:g,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let W of B.value){let j=X.get(W);if(j)yield j}},get length(){if(U)O(B,U);return q().length},keys(){if(U)O(B,U);return q().values()},get(){if(U)O(B,U);let W=q(),j=[];for(let N of W)try{let G=X.get(N)?.get();if(G!=null)j.push(G)}catch(G){if(!(G instanceof t))throw G}return j},at(W){return X.get(B.value[W])},byKey(W){return X.get(W)},keyAt(W){return B.value[W]},indexOfKey(W){return B.value.indexOf(W)},deriveCollection(W){return F$(P,W)}};return P}function c$($,J){let z=J?.value??[];if(z.length)K(g,z,Array.isArray);_(g,$,$$);let X=new Map,Q=[],H=new Map,[B,q]=f$(J?.keyConfig),F=(Z)=>H.get(Z)??(q?B(Z):void 0),P=J?.createItem??h;function W(){let Z=[];for(let M of Q)try{let m=X.get(M)?.get();if(m!=null)Z.push(m)}catch(m){if(!(m instanceof t))throw m}return Z}let j={fn:W,value:z,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:w$,error:void 0};for(let Z of z){let M=B(Z);X.set(M,P(Z)),H.set(Z,M),Q.push(M)}j.value=z,j.flags=D;function N(){if(U){if(!j.sinks)j.stop=$((Z)=>{let{add:M,change:m,remove:V}=Z;if(!M?.length&&!m?.length&&!V?.length)return;let R=!1;e(()=>{if(M)for(let x of M){let w=B(x);if(X.set(w,P(x)),H.set(x,w),!Q.includes(w))Q.push(w);R=!0}if(m)for(let x of m){let w=F(x);if(!w)continue;let f=X.get(w);if(f&&q$(f))H.delete(f.get()),f.set(x),H.set(x,w)}if(V)for(let x of V){let w=F(x);if(!w)continue;H.delete(x),X.delete(w);let f=Q.indexOf(w);if(f!==-1)Q.splice(f,1);R=!0}if(R)j.sources=null,j.sourcesTail=null;j.flags=D;for(let x=j.sinks;x;x=x.nextSink)I(x.sink)})});O(j,U)}}let G={[Symbol.toStringTag]:g,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of Q){let M=X.get(Z);if(M)yield M}},get length(){return N(),Q.length},keys(){return N(),Q.values()},get(){if(N(),j.sources){if(j.flags)j.value=s(W),j.flags=T}else if(E(j),j.error)throw j.error;return j.value},at(Z){return X.get(Q[Z])},byKey(Z){return X.get(Z)},keyAt(Z){return Q[Z]},indexOfKey(Z){return Q.indexOf(Z)},deriveCollection(Z){return F$(G,Z)}};return G}function S$($){return Y($,g)}function d$($){return U$($)||S$($)}function l$($){_("Effect",$);let J={fn:$,flags:D,sources:null,sourcesTail:null,cleanup:null},z=()=>{P$(J),J.fn=void 0,J.flags=T,J.sourcesTail=null,Q$(J)};if(p)a(p,z);return Y$(J),z}function t$($,J){if(!p)throw new G$("match");let{ok:z,err:X=console.error,nil:Q}=J,H,B=!1,q=Array($.length);for(let P=0;P<$.length;P++)try{q[P]=$[P].get()}catch(W){if(W instanceof t){B=!0;continue}if(!H)H=[];H.push(W instanceof Error?W:Error(String(W)))}let F;try{if(B)F=Q?.();else if(H)F=X(H);else F=z(q)}catch(P){X([P instanceof Error?P:Error(String(P))])}if(typeof F==="function")return F;if(F instanceof Promise){let P=p,W=new AbortController;a(P,()=>W.abort()),F.then((j)=>{if(!W.signal.aborted&&typeof j==="function")a(P,j)}).catch((j)=>{X([j instanceof Error?j:Error(String(j))])})}}function r$($,J){if(_(c,$,$$),J?.value!==void 0)K(c,J.value,J?.guard);let z={value:J?.value,sinks:null,sinksTail:null,equals:J?.equals??r,guard:J?.guard,stop:void 0};return{[Symbol.toStringTag]:c,get(){if(U){if(!z.sinks)z.stop=$((X)=>{K(c,X,z.guard),B$(z,X)});O(z,U)}return X$(c,z.value),z.value}}}function s$($){return Y($,c)}function i$($,J){let z=L($)||Array.isArray($),X=L(J)||Array.isArray(J);if(!z||!X){let j=!Object.is($,J);return{changed:j,add:j&&X?J:{},change:{},remove:j&&z?$:{}}}let Q=new WeakSet,H={},B={},q={},F=!1,P=Object.keys($),W=Object.keys(J);for(let j of W)if(j in $){if(!i($[j],J[j],Q))B[j]=J[j],F=!0}else H[j]=J[j],F=!0;for(let j of P)if(!(j in J))q[j]=void 0,F=!0;return{add:H,change:B,remove:q,changed:F}}function N$($,J){K(d,$,L);let z=new Map,X=(W,j)=>{if(K(`${d} for key "${W}"`,j),Array.isArray(j))z.set(W,Z$(j));else if(L(j))z.set(W,N$(j));else z.set(W,h(j))},Q=()=>{let W={};return z.forEach((j,N)=>{W[N]=j.get()}),W},H={fn:Q,value:$,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:i,error:void 0},B=(W)=>{let j=!1;for(let N in W.add)X(N,W.add[N]),j=!0;if(Object.keys(W.change).length)e(()=>{for(let N in W.change){let G=W.change[N];K(`${d} for key "${N}"`,G);let Z=z.get(N);if(Z)if(L(G)!==R$(Z))X(N,G),j=!0;else Z.set(G)}});for(let N in W.remove)z.delete(N),j=!0;if(j)H.sources=null,H.sourcesTail=null;return W.changed},q=J?.watched,F=q?()=>{if(U){if(!H.sinks)H.stop=q();O(H,U)}}:()=>{if(U)O(H,U)};for(let W of Object.keys($))X(W,$[W]);let P={[Symbol.toStringTag]:d,[Symbol.isConcatSpreadable]:!1,*[Symbol.iterator](){for(let W of Array.from(z.keys())){let j=z.get(W);if(j)yield[W,j]}},keys(){return F(),z.keys()},byKey(W){return z.get(W)},get(){if(F(),H.sources){if(H.flags)H.value=s(Q),H.flags=T}else if(E(H),H.error)throw H.error;return H.value},set(W){let j=H.flags&D?Q():H.value,N=i$(j,W);if(B(N)){H.flags|=D;for(let G=H.sinks;G;G=G.nextSink)I(G.sink);if(C===0)A()}},update(W){P.set(W(P.get()))},add(W,j){if(z.has(W))throw new n(d,W,j);X(W,j),H.sources=null,H.sourcesTail=null,H.flags|=D;for(let N=H.sinks;N;N=N.nextSink)I(N.sink);if(C===0)A();return W},remove(W){if(z.delete(W)){H.sources=null,H.sourcesTail=null,H.flags|=D;for(let N=H.sinks;N;N=N.nextSink)I(N.sink);if(C===0)A()}}};return new Proxy(P,{get(W,j){if(j in W)return Reflect.get(W,j);if(typeof j!=="symbol")return W.byKey(j)},has(W,j){if(j in W)return!0;return W.byKey(String(j))!==void 0},ownKeys(W){return Array.from(W.keys())},getOwnPropertyDescriptor(W,j){if(j in W)return Reflect.getOwnPropertyDescriptor(W,j);if(typeof j==="symbol")return;let N=W.byKey(String(j));return N?{enumerable:!0,configurable:!0,writable:!0,value:N}:void 0}})}function R$($){return Y($,d)}function o$($,J){return l($)?W$($,J):j$($,J)}function n$($){if(b$($))return $;if($==null)throw new z$("createSignal",$);if(l($))return W$($);if(y($))return j$($);if(C$($))return Z$($);if(L($))return N$($);return h($)}function a$($){if(h$($))return $;if($==null||y($)||b$($))throw new z$("createMutableSignal",$);if(C$($))return Z$($);if(L($))return N$($);return h($)}function e$($){return L$($)||_$($)}function b$($){let J=[k,v,u,c,b,g,d],z=Object.prototype.toString.call($).slice(8,-1);return J.includes(z)}function h$($){return q$($)||R$($)||U$($)}export{V$ as valueString,s as untrack,t$ as match,_$ as isTask,R$ as isStore,q$ as isState,b$ as isSignal,s$ as isSensor,L as isRecord,Y as isObjectOfType,h$ as isMutableSignal,L$ as isMemo,U$ as isList,y as isFunction,i as isEqual,e$ as isComputed,S$ as isCollection,l as isAsyncFunction,W$ as createTask,N$ as createStore,h as createState,n$ as createSignal,r$ as createSensor,v$ as createScope,a$ as createMutableSignal,j$ as createMemo,Z$ as createList,l$ as createEffect,o$ as createComputed,c$ as createCollection,e as batch,t as UnsetSignalValueError,w$ as SKIP_EQUALITY,G$ as RequiredOwnerError,I$ as NullishSignalValueError,z$ as InvalidSignalValueError,x$ as InvalidCallbackError,J$ as CircularDependencyError};
package/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @name Cause & Effect
3
- * @version 0.18.0
3
+ * @version 0.18.1
4
4
  * @author Esther Brunner
5
5
  */
6
6
 
@@ -19,6 +19,7 @@ export {
19
19
  type ComputedOptions,
20
20
  createScope,
21
21
  type EffectCallback,
22
+ type MaybeCleanup,
22
23
  type MemoCallback,
23
24
  type Signal,
24
25
  type SignalOptions,
@@ -29,6 +30,7 @@ export {
29
30
  export {
30
31
  type Collection,
31
32
  type CollectionCallback,
33
+ type CollectionChanges,
32
34
  type CollectionOptions,
33
35
  createCollection,
34
36
  type DeriveCollectionCallback,
@@ -42,7 +44,6 @@ export {
42
44
  } from './src/nodes/effect'
43
45
  export {
44
46
  createList,
45
- type DiffResult,
46
47
  isEqual,
47
48
  isList,
48
49
  type KeyConfig,
@@ -55,6 +56,7 @@ export {
55
56
  isSensor,
56
57
  type Sensor,
57
58
  type SensorCallback,
59
+ type SensorOptions,
58
60
  } from './src/nodes/sensor'
59
61
  export {
60
62
  createState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeix/cause-effect",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "author": "Esther Brunner",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -15,7 +15,7 @@
15
15
  "peerDependencies": {
16
16
  "typescript": "^5.6.3"
17
17
  },
18
- "description": "Cause & Effect - fine-grained reactive state management library.",
18
+ "description": "Cause & Effect - reactive state management primitives library for TypeScript.",
19
19
  "license": "MIT",
20
20
  "keywords": [
21
21
  "Cause & Effect",
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: changelog
3
+ description: Update CHANGELOG.md with user-facing changes. Use after meaningful code changes, when asked to add release notes, or to prepare a release.
4
+ user_invocable: true
5
+ ---
6
+
7
+ # Changelog Keeper
8
+
9
+ Maintain `CHANGELOG.md` following [Keep a Changelog](https://keepachangelog.com) conventions.
10
+
11
+ ## Structure
12
+
13
+ The changelog uses this heading hierarchy:
14
+
15
+ ```markdown
16
+ # Changelog
17
+
18
+ ## [Unreleased]
19
+
20
+ ### Added
21
+ ### Changed
22
+ ### Deprecated
23
+ ### Removed
24
+ ### Fixed
25
+ ### Security
26
+
27
+ ## 0.18.1
28
+
29
+ ### Added
30
+ ...
31
+ ```
32
+
33
+ - `## [Unreleased]` is always the first version section. New changes go here.
34
+ - Only include categories that have entries.
35
+ - Version 0.18.0 is the baseline. Do not document changes before it.
36
+
37
+ ## Adding entries
38
+
39
+ 1. Read `CHANGELOG.md`.
40
+ 2. Determine which changes are user-facing by inspecting the diff (`git diff main..HEAD -- src/ index.ts` or as directed).
41
+ 3. Classify each change into exactly one category: Added, Changed, Deprecated, Removed, Fixed, or Security.
42
+ 4. Write concise bullets describing user-visible behavior. Use backticks for public API names.
43
+ 5. Do not duplicate existing entries.
44
+ 6. Edit the file in place using the Edit tool.
45
+
46
+ ## Preparing a release
47
+
48
+ When asked to release a version:
49
+
50
+ 1. Move all `[Unreleased]` entries under a new `## X.Y.Z` heading.
51
+ 2. Leave an empty `## [Unreleased]` section above it.
52
+ 3. Update `version` in `package.json` and the `@version` tag in `index.ts` to match.
53
+
54
+ ## Entry style
55
+
56
+ - One behavior change per bullet.
57
+ - Factual and concise; skip implementation-only details.
58
+ - Include migration notes under Changed or Removed when behavior breaks compatibility.
59
+ - Bold the API name or short summary at the start: `- **\`createMemo\` \`watched\` option**: description...`
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Changelog Keeper"
3
+ short_description: "Maintain Keep a Changelog format and entries"
4
+ default_prompt: "Use $changelog-keeper to update CHANGELOG.md after recent code changes."
package/src/graph.ts CHANGED
@@ -105,6 +105,17 @@ type ComputedOptions<T extends {}> = SignalOptions<T> & {
105
105
  * Useful for reducer patterns so that calculations start with a value of correct type.
106
106
  */
107
107
  value?: T
108
+
109
+ /**
110
+ * Optional callback invoked when the signal is first watched by an effect.
111
+ * Receives an `invalidate` function that marks the signal dirty and triggers re-evaluation.
112
+ * Must return a cleanup function that is called when the signal is no longer watched.
113
+ *
114
+ * This enables lazy resource activation for computed signals that need to
115
+ * react to external events (e.g. DOM mutations, timers) in addition to
116
+ * tracked signal dependencies.
117
+ */
118
+ watched?: (invalidate: () => void) => Cleanup
108
119
  }
109
120
 
110
121
  /**
@@ -132,7 +143,7 @@ type TaskCallback<T extends {}> = (
132
143
  /**
133
144
  * A callback function for effects that can perform side effects.
134
145
  *
135
- * @param match - A function to register cleanup callbacks that will be called before the effect re-runs or is disposed
146
+ * @returns An optional cleanup function that will be called before the effect re-runs or is disposed
136
147
  */
137
148
  type EffectCallback = () => MaybeCleanup
138
149
 
@@ -576,7 +587,7 @@ export {
576
587
  batch,
577
588
  batchDepth,
578
589
  createScope,
579
- DEFAULT_EQUALITY as defaultEquals,
590
+ DEFAULT_EQUALITY,
580
591
  SKIP_EQUALITY,
581
592
  FLAG_CLEAN,
582
593
  FLAG_DIRTY,