reactjrx 1.128.2 → 1.130.0

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.
Files changed (38) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.ts +5 -4
  4. package/dist/index.js +803 -667
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/binding/useObserve/store.d.ts +21 -0
  7. package/dist/lib/binding/useObserve/types.d.ts +5 -0
  8. package/dist/lib/binding/useObserve/useObserve.d.ts +15 -0
  9. package/dist/lib/binding/useObserve/useStore.d.ts +17 -0
  10. package/dist/lib/queries/useConcatMutation$.d.ts +1 -1
  11. package/dist/lib/queries/useMutation$.d.ts +18 -18
  12. package/dist/lib/queries/useQuery$.d.ts +1 -1
  13. package/dist/lib/queries/useSwitchMutation$.d.ts +9 -9
  14. package/dist/lib/state/Signal.d.ts +10 -2
  15. package/dist/lib/state/index.d.ts +1 -1
  16. package/dist/lib/state/persistence/constants.d.ts +1 -0
  17. package/dist/lib/state/{persistance → persistence}/helpers.d.ts +2 -2
  18. package/dist/lib/state/{persistance → persistence}/types.d.ts +3 -3
  19. package/dist/lib/state/react/usePersistSignals.d.ts +4 -4
  20. package/dist/lib/utils/index.d.ts +1 -5
  21. package/dist/lib/utils/react/index.d.ts +9 -0
  22. package/dist/lib/utils/react/useDebounced.d.ts +8 -0
  23. package/dist/lib/utils/react/useMemoCompare.d.ts +1 -0
  24. package/dist/lib/utils/react/useUnmount.d.ts +1 -0
  25. package/package.json +8 -6
  26. package/dist/lib/binding/useObserve.d.ts +0 -21
  27. package/dist/lib/state/persistance/constants.d.ts +0 -1
  28. /package/dist/lib/binding/{useObserve.compare.test.d.ts → useObserve/useObserve.compare.test.d.ts} +0 -0
  29. /package/dist/lib/binding/{useObserve.selector.test.d.ts → useObserve/useObserve.selector.test.d.ts} +0 -0
  30. /package/dist/lib/binding/{useObserve.test.d.ts → useObserve/useObserve.test.d.ts} +0 -0
  31. /package/dist/lib/{utils/react → binding}/useUnmountObservable.d.ts +0 -0
  32. /package/dist/lib/{utils/react → binding}/useUnmountObservable.test.d.ts +0 -0
  33. /package/dist/lib/state/{persistance → persistence}/adapters/Adapter.d.ts +0 -0
  34. /package/dist/lib/state/{persistance → persistence}/adapters/MockAdapter.d.ts +0 -0
  35. /package/dist/lib/state/{persistance → persistence}/adapters/createLocalStorageAdapter.d.ts +0 -0
  36. /package/dist/lib/state/{persistance → persistence}/adapters/createLocalforageAdapter.d.ts +0 -0
  37. /package/dist/lib/state/{persistance → persistence}/persistSignals.d.ts +0 -0
  38. /package/dist/lib/state/{persistance → persistence}/persistSignals.test.d.ts +0 -0
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),n=require("rxjs"),K=require("react/jsx-runtime"),C=require("@tanstack/react-query"),v=require("rxjs/operators"),A=e=>{const t=f.useRef(void 0);return t.current||(t.current=e()),f.useEffect(()=>{process.env.NODE_ENV},[]),t},M=e=>A(e).current,V=e=>{const t=M(()=>new n.BehaviorSubject(e));return f.useEffect(()=>{t.next(e)},[e,t]),t},E=e=>{const t=f.useRef(e);return f.useMemo(()=>{t.current=e},[e]),t},te=e=>{const t=M(()=>new n.BehaviorSubject(e)),r=E(t),s=f.useCallback(u=>{t.next(u)},[t]);return[r.current,s,t.getValue()]};function re(e,t){return t.reduce((r,s)=>s in e?{...r,[s]:e[s]}:r,{})}function $(e){return e instanceof Promise||e&&typeof e=="object"&&"then"in e&&typeof e.then=="function"&&"catch"in e&&e.catch==="function"}function F(e){if(n.isObservable(e))return()=>e;if($(e))return()=>n.from(e);if(typeof e!="function")return()=>n.of(e);const t=e;return r=>n.defer(()=>{const s=t(r);return $(s)?n.from(s):n.isObservable(s)?s:n.of(s)})}function H(e,t){if(e==null||t===void 0||typeof e!="object"||typeof t!="object")return e===t;if(e.constructor!==t?.constructor)return!1;const r=Object.keys(e),s=Object.keys(t);if(r.length!==s.length)return!1;for(const u of r)if(!t.hasOwnProperty(u)||e[u]!==t[u])return!1;return!0}function O(e,t,r){const s=t!=null&&!Array.isArray(t)?t:{defaultValue:void 0,unsubscribeOnUnmount:!0,compareFn:void 0},u=!r&&Array.isArray(t)?t:typeof e=="function"?r??[]:[e],c=f.useRef(void 0),a=E(e),y=E(s),o=typeof e!="function"&&Array.isArray(t)?JSON.stringify(t):void 0,l=E(typeof e!="function"&&Array.isArray(t)?t:void 0),i=f.useMemo(()=>{const S=l.current,d=y.current.compareFn,b=d||(S?H:void 0);return{observable:F(a.current)().pipe(n.map(h=>S&&typeof h=="object"&&h!==null?re(h,S):h),n.distinctUntilChanged((h,R)=>h===void 0||R===void 0?!1:b?b(h,R):h===R),n.shareReplay({refCount:!0,bufferSize:1})),subscribed:!1,snapshotSub:void 0}},[...u,o,l,a,y]),m=f.useCallback(()=>{if(!i.subscribed){i.subscribed=!0;const S=i.observable.subscribe(d=>{c.current={value:d}});i.snapshotSub=S}return c.current===void 0?y.current.defaultValue:c.current?.value},[i,y]),p=f.useCallback(S=>{i.subscribed=!0;const d=i.observable.pipe(y.current.defaultValue?n.startWith(y.current.defaultValue):n.identity,n.tap(b=>{c.current={value:b}}),n.catchError(b=>(console.error(b),n.EMPTY))).subscribe(S);return i.snapshotSub?.unsubscribe(),()=>{y.current.unsubscribeOnUnmount!==!1&&d.unsubscribe()}},[i]);return f.useSyncExternalStore(p,m,m)}function z(e,t=[]){const r=E(e);f.useEffect(()=>{const s=F(r.current)().pipe(n.catchError(u=>(console.error(u),n.EMPTY))).subscribe();return()=>{s.unsubscribe()}},[...t,r])}function ne(e,t,r=[]){const s=t!=null&&!Array.isArray(t)?t:{},u=s.retry??!0,c=E(s.onError??(o=>{console.error(o)})),a=f.useCallback(()=>F(e)(),r),y=f.useCallback(()=>a().pipe(n.catchError(o=>{throw c.current(o),o}),u?n.retry():n.identity),[a,u,c]);z(y,r)}class Y{queryMap=new Map;getQuery(t){return this.queryMap.get(t)}setQuery(t,r,s){const u=C.hashKey(t),c=r.pipe(n.takeUntil(n.fromEvent(s,"abort")),n.share()),a={query$:c,signal:s,sub:void 0,isCompleted:!1,lastData:void 0};this.queryMap.set(u,a);const y=c.subscribe({next:o=>{const l=this.queryMap.get(u);l&&(l.lastData={value:o})},complete:()=>{this.deleteQuery(u)}});return a.sub=y,a}deleteQuery(t){const r=this.queryMap.get(t);r&&(r.sub&&(r.sub.unsubscribe(),r.sub=void 0),r.isCompleted=!0,this.queryMap.delete(t))}destroy(){this.queryMap.forEach((t,r)=>{this.deleteQuery(r)})}}const k=f.createContext(void 0),se=f.memo(({children:e,client:t})=>{const[r]=f.useState(()=>t??new Y);return f.useEffect(()=>()=>{r.destroy()},[r]),K.jsx(k.Provider,{value:r,children:e})}),B=()=>{const e=f.useContext(k);if(!e)throw new Error("useReactJrxQueryClient must be used within a ReactJrxQueryProvider");return e};function Q(e,t){const r=M(()=>new n.BehaviorSubject({status:"idle",isPending:!1,isError:!1,isSuccess:!1,isIdle:!0})),s=C.useMutation({...e,mutationFn:l=>{let i;return new Promise((m,p)=>{(typeof e.mutationFn=="function"?e.mutationFn(l):e.mutationFn).pipe(n.take(1)).subscribe({next:S=>{i={value:S}},error:S=>{p(S)},complete:()=>{if(i===void 0)return p(new Error("Stream completed without any data"));m(i.value)}})})}},t),{status:u,isPending:c,isError:a,isSuccess:y,isIdle:o}=s;return f.useEffect(()=>{r.next({status:u,isPending:c,isError:a,isSuccess:y,isIdle:o})},[u,c,a,y,o,r]),{...s,state$:r}}function ue(e,t){const r=C.useQueryClient(t),s=e.mutationKey,{mutateAsync:u,...c}=Q({...e,onMutate({variables:o},...l){return e.onMutate?.(o,...l)},onSuccess(o,{variables:l},...i){return e.onSuccess?.(o,l,...i)},onError(o,{variables:l},...i){return e.onError?.(o,l,...i)},onSettled(o,l,{variables:i},...m){return e.onSettled?.(o,l,i,...m)},mutationFn:({ready$:o,variables:l})=>{const i=typeof e.mutationFn=="function"?e.mutationFn(l):e.mutationFn;return o.pipe(n.filter(m=>m),n.first(),n.switchMap(()=>i))}},t),a=f.useCallback(async o=>{const l=r.getMutationCache().findAll({mutationKey:s,exact:!0}),i=new n.BehaviorSubject(!1),m=u({variables:o,ready$:i});return await Promise.all(l.map(p=>p.continue().catch(n.noop))),i.next(!0),await m.finally(()=>{i.complete()})},[u,r,s]),y=f.useCallback(o=>{a(o).catch(n.noop)},[a]);return{...c,mutate:y,mutateAsync:a}}function oe(e,t){const r=C.useQueryClient(t),s=B(),u=a=>new Promise((y,o)=>{const l=()=>n.defer(()=>typeof e.queryFn=="function"?e.queryFn(a):e.queryFn),i=C.hashKey(a.queryKey),m=s.getQuery(i),p=m??s.setQuery(a.queryKey,l(),a.signal),g=()=>{p?.isCompleted===!1&&setTimeout(()=>{r?.refetchQueries({queryKey:a.queryKey,exact:!0})})};if(!m&&p.lastData!==void 0){y(p.lastData.value),g();return}p.query$.pipe(n.take(1),n.delay(1)).subscribe({error:d=>o(d),complete:()=>{if(p?.lastData===void 0)return p.signal.aborted||(console.log(`cancelled due to stream completing without data for query ${i}`,p?.lastData),r.cancelQueries({queryKey:a.queryKey,exact:!0})),y(void 0);y(p.lastData.value),g()}})});return C.useQuery({...e,queryFn:u},t)}class N extends Error{constructor(t="Mutation canceled"){super(t),this.name="SwitchMutationCancelError"}}function ae(e,t){const r=f.useRef(new AbortController),{mutate:s,mutateAsync:u,...c}=Q({...e,mutationFn:({variables:o,abort:l})=>{if(l.aborted)throw new N;const i=typeof e.mutationFn=="function"?e.mutationFn(o):e.mutationFn;return n.merge(i,n.fromEvent(l,"abort").pipe(n.tap(()=>{throw new N}),n.ignoreElements())).pipe(n.first(),n.defaultIfEmpty(null))},onMutate:({variables:o},...l)=>e.onMutate?.(o,...l),onSuccess:(o,{variables:l},...i)=>e.onSuccess?.(o,l,...i),onError:(o,{variables:l},...i)=>e.onError?.(o,l,...i),onSettled:(o,l,{variables:i},...m)=>e.onSettled?.(o,l,i,...m)},t),a=f.useCallback(o=>(r.current.abort(),r.current=new AbortController,s({variables:o,abort:r.current.signal})),[s]),y=f.useCallback(o=>(r.current.abort(),r.current=new AbortController,u({variables:o,abort:r.current.signal})),[u]);return{...c,mutate:a,mutateAsync:y}}const J=Symbol("SIGNAL_RESET"),ce=e=>({getItem:async t=>{const r=await e.getItem(t);if(r)return JSON.parse(r)},setItem:async(t,r)=>{await e.setItem(t,JSON.stringify(r))},removeItem:async t=>{},clear:async()=>{}}),q=e=>{if(!(!e||typeof e!="object"))return e},ie=({adapter:e,key:t})=>({clear:async()=>await e.removeItem(t),removeItem:async r=>{const s=await e.getItem(t),{[r]:u,...c}=q(s)??{};await e.setItem(t,c)},getItem:async r=>{const s=await e.getItem(t),u=q(s)??{};if(r in u)return u[r]},setItem:async(r,s)=>{const u=await e.getItem(t),c=q(u)??{};await e.setItem(t,{...c,[r]:s})}}),U=({key:e}={})=>e?ie({adapter:U(),key:e}):{clear:async()=>{localStorage.clear()},removeItem:async t=>{localStorage.removeItem(t)},getItem:async t=>{const r=localStorage.getItem(t);if(r)return JSON.parse(r)},setItem:async(t,r)=>{localStorage.setItem(t,JSON.stringify(r))}};class j extends n.BehaviorSubject{constructor(t){super(t.default),this.config=t}update=t=>{if(t===J)super.next(this.config.default);else if(typeof t=="function"){const r=t;super.next(r(this.value))}else super.next(t)};setValue=this.update.bind(this);get subject(){return this}get key(){return this.config.key}}class x{constructor(t){this.config=t}}function le(e={}){return new j({key:void 0,...e,default:e.default??void 0})}function fe(e){return new x(e)}class P{signals=new n.BehaviorSubject(new Map);isDestroyed=!1;getOrCreateSignal(t){const r=this.signals.value.get(t);if(r)return r;const s=new j({...t.config,key:void 0});return this.signals.value.set(t,s),this.signals.next(this.signals.value),s}destroy(){this.signals.value.forEach(t=>{t.complete()}),this.signals.value.clear(),this.signals.complete(),this.isDestroyed=!0}}const T=f.createContext(new P),ye=f.memo(({children:e})=>{const t=A(()=>new P),r=t.current,[s,u]=f.useState(!1);s&&(t.current=new P,u(!1));const c=r;return f.useEffect(()=>()=>{t.current?.destroy(),u(!0)},[t]),K.jsx(T.Provider,{value:c,children:e})}),D=()=>f.useContext(T),G=e=>{const t=D();return e?t.getOrCreateSignal(e):void 0},I="__reactjrx",de=e=>{if(typeof e=="object"&&e!==null&&I in e&&e[I]===I)return e},me=({adapter:e,config:t})=>{const{signal:r,version:s}=t,c={value:r.getValue(),[I]:I,migrationVersion:s};return process.env.NODE_ENV==="development"&&console.log("[reactjrx][state][persistance]:","Persist value",c,`for signal ${r.config.key}`),n.from(e.setItem(r.config.key,c)).pipe(n.catchError(a=>(console.error(a),n.of(null))))};function pe({adapter:e,config:t}){const{hydrate:r=({value:c})=>c,signal:s,version:u}=t;return n.from(e.getItem(s.config.key)).pipe(n.switchMap(c=>{const a=de(c);if(!a)return n.of(c);const y=typeof a.migrationVersion!="number",o=a.migrationVersion!==void 0&&u>a.migrationVersion;if(y||o||a.value===void 0)return n.of(c);const l=a.value;return process.env.NODE_ENV==="development"&&console.log("[reactjrx][state][persistance]:","Hydrate value",a,`for signal ${s.config.key}`),s.setValue(r({value:l,version:u})),n.of(c)}))}function be({entries:e=[],onHydrated:t,adapter:r}){const u=(e.length===0?n.of([]):n.zip(...e.map(a=>pe({adapter:r,config:a})))).pipe(n.tap(t),n.catchError(a=>(console.error("Unable to hydrate",a),n.EMPTY)),n.share()),c=u.pipe(n.switchMap(()=>n.merge(...e.map(a=>a.signal.pipe(n.throttleTime(500,n.asyncScheduler,{trailing:!0}),n.switchMap(()=>n.from(me({adapter:r,config:a}))))))));return n.merge(u.pipe(n.map(()=>({type:"hydrated"}))),c.pipe(n.map(()=>({type:"persisted"}))))}function Se({entries:e=[],onHydrated:t,adapter:r}){const s=E(t),u=V(r),c=V(e);return O(()=>u.pipe(n.switchMap(y=>y?n.merge(n.of({type:"reset"}),c.pipe(n.concatMap(o=>be({adapter:y,entries:o,onHydrated:()=>{s.current?.()}})))):n.of({type:"reset"}))).pipe(n.scan((y,o)=>o.type==="reset"?{isHydrated:!1}:o.type==="hydrated"?{isHydrated:!0}:y,{isHydrated:!1})),{defaultValue:{isHydrated:!1},compareFn:H},[u,c])}function _(e){const t=D();if(e instanceof x&&!t)throw new Error("useSignalValue must be used within a SignalContextProvider");return G(e instanceof x?e:void 0)??e}function W(e){return _(e).update}const ge=(e,t)=>e.length===t.length&&e.every((r,s)=>r===t[s]);function he(e){return e!=null}const ve=typeof window>"u"||"Deno"in window;function X(e,t){return Math.min(e,t)}function Z(e,t){return 2**e*t}function Ee(e){const{retry:t,retryDelay:r,retryAfterDelay:s,retryAfter:u=()=>n.of(!0)}=e,c=typeof t!="function"?t===!1?0:t===!0?Number.POSITIVE_INFINITY:t??Number.POSITIVE_INFINITY:Number.POSITIVE_INFINITY,a=typeof t=="function"?t:()=>!0,y=typeof r=="number"?r:100,o={...e},{maxInterval:l=Number.POSITIVE_INFINITY,resetOnSuccess:i=!1,backoffDelay:m=Z}=o;return p=>n.defer(()=>{let g=0;const S=(d,b)=>d<c?a(d,b):!1;return p.pipe(v.catchError(d=>{if(g++,!S(g-1,d))throw d;const b=e.caughtError?.(g,d);if(!b)throw d;return b.pipe(v.mergeMap(w=>n.merge(n.of(w),n.throwError(()=>d))))}),v.retryWhen(d=>d.pipe(v.concatMap(b=>{const w=g-1;return u().pipe(v.first(),v.mergeMap(()=>S(w,b)?n.timer(X(m(w,y),l)).pipe(v.mergeMap(h=>s&&!s(w,b)?n.throwError(()=>b):n.of(h))):n.throwError(()=>b)))}))),v.catchError(d=>{if(e.catchError)return e.catchError(g,d);throw d}),v.tap(()=>{i&&(g=0)}))})}const ee=e=>{f.useEffect(e,[])},we=e=>{ee(()=>{e()})},Ce=()=>{const e=A(()=>new n.ReplaySubject(1)),[t,r]=f.useState(!1);return t&&(e.current=new n.ReplaySubject(1),r(!1)),f.useEffect(()=>()=>{e.current.next(void 0),r(!0)},[e]),e.current};function L(e,t){const r=E(t),s=_(e);return O(()=>{const u=r.current??(a=>a);return s.pipe(n.map(u),n.distinctUntilChanged())},{defaultValue:t?t?.(s.value):s.value},[s])}function Ie(e){const t=_(e),r=L(e),s=W(e);return[r,s,t]}const Me=e=>{const t=M(e);return[L(t),t]};exports.Context=k;exports.QueryClient$=Y;exports.QueryClientProvider$=se;exports.SIGNAL_RESET=J;exports.Signal=j;exports.SignalContextProvider=ye;exports.SignalReactContext=T;exports.SwitchMutationCancelError=N;exports.VirtualSignal=x;exports.arrayEqual=ge;exports.createLocalStorageAdapter=U;exports.createLocalforageAdapter=ce;exports.exponentialBackoffDelay=Z;exports.getDelay=X;exports.isDefined=he;exports.isPromiseLike=$;exports.isServer=ve;exports.retryBackoff=Ee;exports.signal=le;exports.useConstant=M;exports.useContactMutation$=ue;exports.useEffectOnce=ee;exports.useLiveBehaviorSubject=V;exports.useLiveRef=E;exports.useMakeOrRetrieveSignal=G;exports.useMount=we;exports.useMutation$=Q;exports.useObservableState=te;exports.useObserve=O;exports.usePersistSignals=Se;exports.useQuery$=oe;exports.useQueryClient$=B;exports.useSetSignal=W;exports.useSignal=Ie;exports.useSignalContext=D;exports.useSignalState=Me;exports.useSignalValue=L;exports.useSubscribe=z;exports.useSubscribeEffect=ne;exports.useSwitchMutation$=ae;exports.useUnmountObservable=Ce;exports.virtualSignal=fe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("react/compiler-runtime"),S=require("react"),u=require("rxjs"),R=require("rxjs/operators"),te=require("react/jsx-runtime"),V=require("@tanstack/react-query"),ee=Symbol("UNSET"),A=r=>{const t=S.useRef(ee);return t.current===ee&&(t.current=r()),t},F=r=>A(r).current,D=r=>{const t=I.c(6);let e;t[0]!==r?(e=()=>new u.BehaviorSubject(r),t[0]=r,t[1]=e):e=t[1];const n=F(e);let s,o;return t[2]!==r||t[3]!==n?(s=()=>{n.next(r)},o=[r,n],t[2]=r,t[3]=n,t[4]=s,t[5]=o):(s=t[4],o=t[5]),S.useEffect(s,o),n},N=r=>{const t=S.useRef(r);return S.useMemo(()=>{t.current=r},[r]),t},me=r=>{const t=I.c(10);let e;t[0]!==r?(e=()=>new u.BehaviorSubject(r),t[0]=r,t[1]=e):e=t[1];const n=F(e),s=N(n);let o;t[2]!==n?(o=p=>{n.next(p)},t[2]=n,t[3]=o):o=t[3];const c=o,a=s.current;let i;t[4]!==n?(i=n.getValue(),t[4]=n,t[5]=i):i=t[5];let l;return t[6]!==c||t[7]!==s.current||t[8]!==i?(l=[a,c,i],t[6]=c,t[7]=s.current,t[8]=i,t[9]=l):l=t[9],l},re=(r,t)=>r.length===t.length&&r.every((e,n)=>e===t[n]);function pe(r){return r!=null}function L(r){return r instanceof Promise||r&&typeof r=="object"&&"then"in r&&typeof r.then=="function"&&"catch"in r&&r.catch==="function"}const be=typeof window>"u"||"Deno"in window;function ne(r,t){return Math.min(r,t)}function se(r,t){return 2**r*t}function Se(r){const{retry:t,retryDelay:e,retryAfterDelay:n,retryAfter:s=()=>u.of(!0)}=r,o=typeof t!="function"?t===!1?0:t===!0?Number.POSITIVE_INFINITY:t??Number.POSITIVE_INFINITY:Number.POSITIVE_INFINITY,c=typeof t=="function"?t:()=>!0,a=typeof e=="number"?e:100,i={...r},{maxInterval:l=Number.POSITIVE_INFINITY,resetOnSuccess:p=!1,backoffDelay:f=se}=i;return d=>u.defer(()=>{let b=0;const g=(m,h)=>m<o?c(m,h):!1;return d.pipe(R.catchError(m=>{if(b++,!g(b-1,m))throw m;const h=r.caughtError?.(b,m);if(!h)throw m;return h.pipe(R.mergeMap(y=>u.merge(u.of(y),u.throwError(()=>m))))}),R.retryWhen(m=>m.pipe(R.concatMap(h=>{const y=b-1;return s().pipe(R.first(),R.mergeMap(()=>g(y,h)?u.timer(ne(f(y,a),l)).pipe(R.mergeMap(v=>n&&!n(y,h)?u.throwError(()=>h):u.of(v))):u.throwError(()=>h)))}))),R.catchError(m=>{if(r.catchError)return r.catchError(b,m);throw m}),R.tap(()=>{p&&(b=0)}))})}const he=()=>{const r=A(()=>new u.ReplaySubject(1)),[t,e]=S.useState(!1);return t&&(r.current=new u.ReplaySubject(1),e(!1)),S.useEffect(()=>()=>{r.current.next(void 0),e(!0)},[r]),r.current},K=r=>{const t=I.c(1);let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=[],t[0]=e):e=t[0],S.useEffect(r,e)},oe=r=>{const t=S.useRef(r);t.current=r,K(()=>()=>t.current())},ve=(r,t,e)=>{const n=I.c(7);let s;n[0]!==e?(s=e===void 0?{}:e,n[0]=e,n[1]=s):s=n[1];const o=s,{cancelOnUnmount:c}=o,a=c===void 0?!1:c,i=S.useRef(null);let l;n[2]!==r||n[3]!==t?(l=d=>{i.current!==null&&clearTimeout(i.current),i.current=setTimeout(()=>r(d),t)},n[2]=r,n[3]=t,n[4]=l):l=n[4];const p=l;let f;return n[5]!==a?(f=()=>{a&&i.current&&clearTimeout(i.current)},n[5]=a,n[6]=f):f=n[6],oe(f),p},ge=(r,t)=>{const e=S.useRef({value:r});return S.useMemo(()=>t(r,e.current.value)?e.current.value:(e.current={value:r},r),[r,t])},Ee=r=>{const t=I.c(2);let e;t[0]!==r?(e=()=>{r()},t[0]=r,t[1]=e):e=t[1],K(e)};class we{state;source$;sub;constructor({source$:t,defaultValue:e,compareFn:n}){const s=typeof t=="function"?t():t,o=s===void 0;this.state={data:s instanceof u.BehaviorSubject?s.value:e,status:o?"success":"pending",observableState:o?"complete":"live",error:void 0},this.source$=(s??u.NEVER).pipe(u.distinctUntilChanged(n),u.tap({complete:()=>{this.state={...this.state,status:"success",observableState:"complete"}},error:c=>{this.state={...this.state,observableState:"error",status:"error",error:c}},next:c=>{this.state={...this.state,data:c}}}),u.share()),this.sub=this.source$.subscribe()}subscribe=t=>{if(this.state.observableState==="complete")return()=>{};const e=this.source$.subscribe({complete:t,error:t,next:t});return()=>{e.unsubscribe()}};getSnapshot=()=>this.state}const Ie=(r,t,e)=>{const n=N(t),s=S.useRef(void 0);(!s.current||!re([...e],[...s.current.deps]))&&(s.current={deps:e,store:new we({source$:r,defaultValue:n.current.defaultValue,compareFn:(c,a)=>n.current?.compareFn?.(c,a)??c===a})});const o=s.current.store;return S.useEffect(()=>()=>{o.sub.unsubscribe()},[o]),o};function U(r,t,e){const n=I.c(6);let s;n[0]!==t?(s=t!=null&&!Array.isArray(t)?t:{defaultValue:void 0,compareFn:void 0},n[0]=t,n[1]=s):s=n[1];const o=s;let c;n[2]!==e||n[3]!==t||n[4]!==r?(c=!e&&Array.isArray(t)?t:typeof r=="function"?e??[]:[r],n[2]=e,n[3]=t,n[4]=r,n[5]=c):c=n[5];const i=Ie(r,o,c);return S.useSyncExternalStore(i.subscribe,i.getSnapshot,i.getSnapshot)}function ce(r){if(u.isObservable(r))return()=>r;if(L(r))return()=>u.from(r);if(typeof r!="function")return()=>u.of(r);const t=r;return e=>u.defer(()=>{const n=t(e);return L(n)?u.from(n):u.isObservable(n)?n:u.of(n)})}function ue(r,t){const e=I.c(7);let n;e[0]!==t?(n=t===void 0?[]:t,e[0]=t,e[1]=n):n=e[1];const s=n,o=N(r);let c;e[2]!==o?(c=()=>{const i=ce(o.current)().pipe(u.catchError($e)).subscribe();return()=>{i.unsubscribe()}},e[2]=o,e[3]=c):c=e[3];let a;e[4]!==s||e[5]!==o?(a=[...s,o],e[4]=s,e[5]=o,e[6]=a):a=e[6],S.useEffect(c,a)}function $e(r){return console.error(r),u.EMPTY}function Ce(r,t,e=[]){const n=t!=null&&!Array.isArray(t)?t:{},s=n.retry??!0,o=N(n.onError??(i=>{console.error(i)})),c=S.useCallback(()=>ce(r)(),e),a=S.useCallback(()=>c().pipe(u.catchError(i=>{throw o.current(i),i}),s?u.retry():u.identity),[c,s,o]);ue(a,e)}class ie{queryMap=new Map;getQuery(t){return this.queryMap.get(t)}setQuery(t,e,n){const s=V.hashKey(t),o=e.pipe(u.takeUntil(u.fromEvent(n,"abort")),u.share()),c={query$:o,signal:n,sub:void 0,isCompleted:!1,lastData:void 0};this.queryMap.set(s,c);const a=o.subscribe({next:i=>{const l=this.queryMap.get(s);l&&(l.lastData={value:i})},complete:()=>{this.deleteQuery(s)}});return c.sub=a,c}deleteQuery(t){const e=this.queryMap.get(t);e&&(e.sub&&(e.sub.unsubscribe(),e.sub=void 0),e.isCompleted=!0,this.queryMap.delete(t))}destroy(){this.queryMap.forEach((t,e)=>{this.deleteQuery(e)})}}const B=S.createContext(void 0),Me=S.memo(r=>{const t=I.c(8),{children:e,client:n}=r;let s;t[0]!==n?(s=()=>n??new ie,t[0]=n,t[1]=s):s=t[1];const[o]=S.useState(s);let c,a;t[2]!==o?(c=()=>()=>{o.destroy()},a=[o],t[2]=o,t[3]=c,t[4]=a):(c=t[3],a=t[4]),S.useEffect(c,a);let i;return t[5]!==e||t[6]!==o?(i=te.jsx(B.Provider,{value:o,children:e}),t[5]=e,t[6]=o,t[7]=i):i=t[7],i}),ae=()=>{const r=S.useContext(B);if(!r)throw new Error("useReactJrxQueryClient must be used within a ReactJrxQueryProvider");return r};function Y(r,t){const e=I.c(16),n=F(_e);let s;e[0]!==r?(s=m=>{let h;return new Promise((y,v)=>{(typeof r.mutationFn=="function"?r.mutationFn(m):r.mutationFn).pipe(u.take(1)).subscribe({next:w=>{h={value:w}},error:w=>{v(w)},complete:()=>{if(h===void 0)return v(new Error("Stream completed without any data"));y(h.value)}})})},e[0]=r,e[1]=s):s=e[1];let o;e[2]!==r||e[3]!==s?(o={...r,mutationFn:s},e[2]=r,e[3]=s,e[4]=o):o=e[4];const c=V.useMutation(o,t),{status:a,isPending:i,isError:l,isSuccess:p,isIdle:f}=c;let d,b;e[5]!==l||e[6]!==f||e[7]!==i||e[8]!==p||e[9]!==n||e[10]!==a?(d=()=>{n.next({status:a,isPending:i,isError:l,isSuccess:p,isIdle:f})},b=[a,i,l,p,f,n],e[5]=l,e[6]=f,e[7]=i,e[8]=p,e[9]=n,e[10]=a,e[11]=d,e[12]=b):(d=e[11],b=e[12]),S.useEffect(d,b);let g;return e[13]!==c||e[14]!==n?(g={...c,state$:n},e[13]=c,e[14]=n,e[15]=g):g=e[15],g}function _e(){return new u.BehaviorSubject({status:"idle",isPending:!1,isError:!1,isSuccess:!1,isIdle:!0})}function xe(r,t){const e=I.c(23);let n,s;e[0]!==r?({onMutate:n,...s}=r,e[0]=r,e[1]=n,e[2]=s):(n=e[1],s=e[2]);const o=V.useQueryClient(t),c=s.mutationKey;let a;e[3]!==n?(a=n?(y,...v)=>{const{variables:E}=y;return n(E,...v)}:void 0,e[3]=n,e[4]=a):a=e[4];let i;if(e[5]!==s||e[6]!==a){let y;e[8]!==s?(y=v=>{const{ready$:E,variables:w}=v,C=typeof s.mutationFn=="function"?s.mutationFn(w):s.mutationFn;return E.pipe(u.filter(qe),u.first(),u.switchMap(()=>C))},e[8]=s,e[9]=y):y=e[9],i={...s,onMutate:a,onSuccess(v,E,...w){const{variables:C}=E,M=w;return s.onSuccess?.(v,C,...M)},onError(v,E,...w){const{variables:C}=E,M=w;return s.onError?.(v,C,...M)},onSettled(v,E,w,...C){const{variables:M}=w,P=C;return s.onSettled?.(v,E,M,...P)},mutationFn:y},e[5]=s,e[6]=a,e[7]=i}else i=e[7];const l=Y(i,t);let p,f;e[10]!==l?({mutateAsync:p,...f}=l,e[10]=l,e[11]=p,e[12]=f):(p=e[11],f=e[12]);let d;e[13]!==o||e[14]!==p||e[15]!==c?(d=async y=>{const v=o.getMutationCache().findAll({mutationKey:c,exact:!0}),E=new u.BehaviorSubject(!1),w=p({variables:y,ready$:E});return await Promise.all(v.map(Re)),E.next(!0),await w.finally(()=>{E.complete()})},e[13]=o,e[14]=p,e[15]=c,e[16]=d):d=e[16];const b=d;let g;e[17]!==b?(g=y=>{b(y).catch(u.noop)},e[17]=b,e[18]=g):g=e[18];const m=g;let h;return e[19]!==b||e[20]!==m||e[21]!==f?(h={...f,mutate:m,mutateAsync:b},e[19]=b,e[20]=m,e[21]=f,e[22]=h):h=e[22],h}function Re(r){return r.continue().catch(u.noop)}function qe(r){return r}function Ne(r,t){const e=I.c(10);let n,s;e[0]!==r?({queryFn:s,...n}=r,e[0]=r,e[1]=n,e[2]=s):(n=e[1],s=e[2]);const o=V.useQueryClient(t),c=ae();let a;e[3]!==o||e[4]!==c||e[5]!==s?(a=f=>new Promise((d,b)=>{const g=()=>u.defer(()=>typeof s=="function"?s(f):s),m=V.hashKey(f.queryKey),h=c.getQuery(m),y=h??c.setQuery(f.queryKey,g(),f.signal),v=()=>{y?.isCompleted===!1&&setTimeout(()=>{o?.refetchQueries({queryKey:f.queryKey,exact:!0})})};if(!h&&y.lastData!==void 0){d(y.lastData.value),v();return}y.query$.pipe(u.take(1),u.delay(1)).subscribe({error:w=>b(w),complete:()=>{if(y?.lastData===void 0)return y.signal.aborted||(console.log(`cancelled due to stream completing without data for query ${m}`,y?.lastData),o.cancelQueries({queryKey:f.queryKey,exact:!0})),d(void 0);d(y.lastData.value),v()}})}),e[3]=o,e[4]=c,e[5]=s,e[6]=a):a=e[6];const i=a;let l;return e[7]!==n||e[8]!==i?(l={...n,queryFn:i},e[7]=n,e[8]=i,e[9]=l):l=e[9],V.useQuery(l,t)}class z extends Error{constructor(t="Mutation canceled"){super(t),this.name="SwitchMutationCancelError"}}function Ve(r,t){const e=I.c(37);let n,s,o,c,a;e[0]!==r?({mutationFn:n,onMutate:o,onError:s,onSettled:c,...a}=r,e[0]=r,e[1]=n,e[2]=s,e[3]=o,e[4]=c,e[5]=a):(n=e[1],s=e[2],o=e[3],c=e[4],a=e[5]);const i=A(Oe);let l;e[6]!==n?(l=$=>{const{variables:x,abort:_}=$;if(_.aborted)throw new z;const q=typeof n=="function"?n(x):n;return u.merge(q,u.fromEvent(_,"abort").pipe(u.tap(Pe),u.ignoreElements())).pipe(u.first(),u.defaultIfEmpty(null))},e[6]=n,e[7]=l):l=e[7];const p=l;let f;e[8]!==o?(f=o?($,...x)=>{const{variables:_}=$;return o(_,...x)}:void 0,e[8]=o,e[9]=f):f=e[9];let d;e[10]!==a?(d=($,x,..._)=>{const{variables:q}=x,T=_;return a.onSuccess?.($,q,...T)},e[10]=a,e[11]=d):d=e[11];let b;e[12]!==s?(b=($,x,..._)=>{const{variables:q}=x;return s?.($,q,..._)},e[12]=s,e[13]=b):b=e[13];let g;e[14]!==c?(g=($,x,_,...q)=>{const{variables:T}=_;return c?.($,x,T,...q)},e[14]=c,e[15]=g):g=e[15];let m;e[16]!==a||e[17]!==p||e[18]!==f||e[19]!==d||e[20]!==b||e[21]!==g?(m={...a,mutationFn:p,onMutate:f,onSuccess:d,onError:b,onSettled:g},e[16]=a,e[17]=p,e[18]=f,e[19]=d,e[20]=b,e[21]=g,e[22]=m):m=e[22];const h=Y(m,t);let y,v,E;e[23]!==h?({mutate:y,mutateAsync:v,...E}=h,e[23]=h,e[24]=y,e[25]=v,e[26]=E):(y=e[24],v=e[25],E=e[26]);let w;e[27]!==y||e[28]!==i?(w=$=>(i.current.abort(),i.current=new AbortController,y({variables:$,abort:i.current.signal})),e[27]=y,e[28]=i,e[29]=w):w=e[29];const C=w;let M;e[30]!==v||e[31]!==i?(M=$=>(i.current.abort(),i.current=new AbortController,v({variables:$,abort:i.current.signal})),e[30]=v,e[31]=i,e[32]=M):M=e[32];const P=M;let Q;return e[33]!==P||e[34]!==C||e[35]!==E?(Q={...E,mutate:C,mutateAsync:P},e[33]=P,e[34]=C,e[35]=E,e[36]=Q):Q=e[36],Q}function Pe(){throw new z}function Oe(){return new AbortController}const le=Symbol("SIGNAL_RESET"),Ae=r=>({getItem:async t=>{const e=await r.getItem(t);if(e)return JSON.parse(e)},setItem:async(t,e)=>{await r.setItem(t,JSON.stringify(e))},removeItem:async t=>{},clear:async()=>{}}),k=r=>{if(!(!r||typeof r!="object"))return r},Fe=({adapter:r,key:t})=>({clear:async()=>await r.removeItem(t),removeItem:async e=>{const n=await r.getItem(t),{[e]:s,...o}=k(n)??{};await r.setItem(t,o)},getItem:async e=>{const n=await r.getItem(t),s=k(n)??{};if(e in s)return s[e]},setItem:async(e,n)=>{const s=await r.getItem(t),o=k(s)??{};await r.setItem(t,{...o,[e]:n})}}),fe=({key:r}={})=>r?Fe({adapter:fe(),key:r}):{clear:async()=>{localStorage.clear()},removeItem:async t=>{localStorage.removeItem(t)},getItem:async t=>{const e=localStorage.getItem(t);if(e)return JSON.parse(e)},setItem:async(t,e)=>{localStorage.setItem(t,JSON.stringify(e))}};class J extends u.BehaviorSubject{constructor(t){super(t.default),this.config=t}update=t=>{if(t===le)super.next(this.config.default);else if(typeof t=="function"){const e=t;super.next(e(this.value))}else super.next(t)};setValue=this.update.bind(this);get subject(){return this}get key(){return this.config.key}}class j{constructor(t){this.config=t}}function Qe(r={}){return new J({key:void 0,...r,default:r.default??void 0})}function Te(r){return new j(r)}class H{signals=new u.BehaviorSubject(new Map);isDestroyed=!1;getOrCreateSignal(t){const e=this.signals.value.get(t);if(e)return e;const n=new J({...t.config,key:void 0});return this.signals.value.set(t,n),this.signals.next(this.signals.value),n}destroy(){this.signals.value.forEach(t=>{t.complete()}),this.signals.value.clear(),this.signals.complete(),this.isDestroyed=!0}}const G=S.createContext(new H),je=S.memo(({children:r})=>{const t=A(()=>new H),e=t.current,[n,s]=S.useState(!1);n&&(t.current=new H,s(!1));const o=e;return S.useEffect(()=>()=>{t.current?.destroy(),s(!0)},[t]),te.jsx(G.Provider,{value:o,children:r})}),W=()=>S.useContext(G),ye=r=>{const t=I.c(3),e=W();let n;return t[0]!==e||t[1]!==r?(n=r?e.getOrCreateSignal(r):void 0,t[0]=e,t[1]=r,t[2]=n):n=t[2],n};function ke(r,t){if(r==null||t===void 0||typeof r!="object"||typeof t!="object")return r===t;if(r.constructor!==t?.constructor)return!1;const e=Object.keys(r),n=Object.keys(t);if(e.length!==n.length)return!1;for(const s of e)if(!t.hasOwnProperty(s)||r[s]!==t[s])return!1;return!0}const O="__reactjrx",De=r=>{if(typeof r=="object"&&r!==null&&O in r&&r[O]===O)return r},Le=({adapter:r,config:t})=>{const{signal:e,version:n}=t,o={value:e.getValue(),[O]:O,migrationVersion:n};return process.env.NODE_ENV==="development"&&console.log("[reactjrx][state][persistance]:","Persist value",o,`for signal ${e.config.key}`),u.from(r.setItem(e.config.key,o)).pipe(u.catchError(c=>(console.error(c),u.of(null))))};function He({adapter:r,config:t}){const{hydrate:e=({value:o})=>o,signal:n,version:s}=t;return u.from(r.getItem(n.config.key)).pipe(u.switchMap(o=>{const c=De(o);if(!c)return u.of(o);const a=typeof c.migrationVersion!="number",i=c.migrationVersion!==void 0&&s>c.migrationVersion;if(a||i||c.value===void 0)return u.of(o);const l=c.value;return process.env.NODE_ENV==="development"&&console.log("[reactjrx][state][persistance]:","Hydrate value",c,`for signal ${n.config.key}`),n.setValue(e({value:l,version:s})),u.of(o)}))}function Ke({entries:r=[],onHydrated:t,adapter:e}){const s=(r.length===0?u.of([]):u.zip(...r.map(c=>He({adapter:e,config:c})))).pipe(u.tap(t),u.catchError(c=>(console.error("Unable to hydrate",c),u.EMPTY)),u.share()),o=s.pipe(u.switchMap(()=>u.merge(...r.map(c=>c.signal.pipe(u.throttleTime(500,u.asyncScheduler,{trailing:!0}),u.switchMap(()=>u.from(Le({adapter:e,config:c}))))))));return u.merge(s.pipe(u.map(()=>({type:"hydrated"}))),o.pipe(u.map(()=>({type:"persisted"}))))}function Ue(r){const t=I.c(10),{entries:e,onHydrated:n,adapter:s}=r;let o;t[0]!==e?(o=e===void 0?[]:e,t[0]=e,t[1]=o):o=t[1];const c=o,a=N(n),i=D(s),l=D(c);let p;t[2]!==i||t[3]!==l||t[4]!==a?(p=()=>i.pipe(u.switchMap(m=>m?u.merge(u.of({type:"reset"}),l.pipe(u.concatMap(h=>Ke({adapter:m,entries:h,onHydrated:()=>{a.current?.()}})))):u.of({type:"reset"}))).pipe(u.scan(Be,{isHydrated:!1})),t[2]=i,t[3]=l,t[4]=a,t[5]=p):p=t[5];let f;t[6]===Symbol.for("react.memo_cache_sentinel")?(f={defaultValue:{isHydrated:!1},compareFn:ke},t[6]=f):f=t[6];let d;return t[7]!==i||t[8]!==l?(d=[i,l],t[7]=i,t[8]=l,t[9]=d):d=t[9],U(p,f,d).data}function Be(r,t){return t.type==="reset"?{isHydrated:!1}:t.type==="hydrated"?{isHydrated:!0}:r}function X(r){const t=W();if(r instanceof j&&!t)throw new Error("useSignalValue must be used within a SignalContextProvider");return ye(r instanceof j?r:void 0)??r}function de(r){return X(r).update}function Z(r,t){const e=I.c(10),n=N(t),s=X(r);let o;e[0]!==s||e[1]!==n?(o=()=>{const l=n.current??Ye;return s.pipe(u.map(l),u.distinctUntilChanged())},e[0]=s,e[1]=n,e[2]=o):o=e[2];let c;e[3]!==s.value||e[4]!==t?(c=t?t?.(s.value):s.value,e[3]=s.value,e[4]=t,e[5]=c):c=e[5];let a;e[6]!==c?(a={defaultValue:c},e[6]=c,e[7]=a):a=e[7];let i;return e[8]!==s?(i=[s],e[8]=s,e[9]=i):i=e[9],U(o,a,i).data}function Ye(r){return r}function ze(r){const t=I.c(4),e=X(r),n=Z(r),s=de(r);let o;return t[0]!==e||t[1]!==s||t[2]!==n?(o=[n,s,e],t[0]=e,t[1]=s,t[2]=n,t[3]=o):o=t[3],o}const Je=r=>{const t=I.c(3),e=F(r),n=Z(e);let s;return t[0]!==e||t[1]!==n?(s=[n,e],t[0]=e,t[1]=n,t[2]=s):s=t[2],s};exports.Context=B;exports.QueryClient$=ie;exports.QueryClientProvider$=Me;exports.SIGNAL_RESET=le;exports.Signal=J;exports.SignalContextProvider=je;exports.SignalReactContext=G;exports.SwitchMutationCancelError=z;exports.VirtualSignal=j;exports.arrayEqual=re;exports.createLocalStorageAdapter=fe;exports.createLocalforageAdapter=Ae;exports.exponentialBackoffDelay=se;exports.getDelay=ne;exports.isDefined=pe;exports.isPromiseLike=L;exports.isServer=be;exports.retryBackoff=Se;exports.signal=Qe;exports.useConstant=F;exports.useContactMutation$=xe;exports.useDebounced=ve;exports.useEffectOnce=K;exports.useLiveBehaviorSubject=D;exports.useLiveRef=N;exports.useMakeOrRetrieveSignal=ye;exports.useMemoCompare=ge;exports.useMount=Ee;exports.useMutation$=Y;exports.useObservableState=me;exports.useObserve=U;exports.usePersistSignals=Ue;exports.useQuery$=Ne;exports.useQueryClient$=ae;exports.useRefOnce=A;exports.useSetSignal=de;exports.useSignal=ze;exports.useSignalContext=W;exports.useSignalState=Je;exports.useSignalValue=Z;exports.useSubscribe=ue;exports.useSubscribeEffect=Ce;exports.useSwitchMutation$=Ve;exports.useUnmount=oe;exports.useUnmountObservable=he;exports.virtualSignal=Te;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/lib/utils/react/useRefOnce.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObservableState.ts","../src/lib/utils/filterObjectByKey.ts","../src/lib/utils/isPromiseLike.ts","../src/lib/utils/makeObservable.ts","../src/lib/utils/shallowEqual.ts","../src/lib/binding/useObserve.ts","../src/lib/binding/useSubscribe.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useMutation$.ts","../src/lib/queries/useConcatMutation$.ts","../src/lib/queries/useQuery$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/state/constants.ts","../src/lib/state/persistance/adapters/createLocalforageAdapter.ts","../src/lib/state/persistance/adapters/createLocalStorageAdapter.ts","../src/lib/state/Signal.ts","../src/lib/state/SignalContext.ts","../src/lib/state/react/SignalContextProvider.tsx","../src/lib/state/persistance/constants.ts","../src/lib/state/persistance/helpers.ts","../src/lib/state/persistance/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/state/react/useSignalReference.ts","../src/lib/state/react/useSetSignal.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/isServer.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useMount.ts","../src/lib/utils/react/useUnmountObservable.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/react/useSignalState.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\"\n\nexport const useRefOnce = <T>(fn: () => T) => {\n const ref = useRef<T>(undefined)\n\n if (!ref.current) {\n ref.current = fn()\n }\n\n useEffect(() => {\n /**\n * Because strict mode keep reference to the same ref when the component\n * is re-mounted we force a rewrite here to prevent weird behavior.\n * I don't know why react does that since it is I believe technically\n * wrong. useRef should persist across re-render, not re-mount.\n *\n * @important\n * The downside is that during dev the factory will be called again every\n * mount.\n */\n if (process.env.NODE_ENV === \"development\") {\n // ref.current = fn();\n }\n }, [])\n\n return ref as { current: T }\n}\n","import { useRefOnce } from \"./useRefOnce\"\n\nexport const useConstant = <T>(fn: () => T) => {\n const ref = useRefOnce(fn)\n\n return ref.current\n}\n","import { useEffect } from \"react\"\nimport { BehaviorSubject } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n const subject = useConstant(() => new BehaviorSubject(state))\n\n useEffect(() => {\n subject.next(state)\n }, [state, subject])\n\n return subject\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useLiveRef = <T>(value: T) => {\n const ref = useRef(value)\n\n /**\n * We don't update the value on render because of potential\n * bug related to react concurrency mode.\n * We don't update the value in a useEffect because effects run after\n * render and we could maybe? have situation where the ref\n * is being called after render but before effect?\n * I am not sure of that one.\n *\n * `useMemo` is a good compromise since it runs during render but before\n * repaint. It prevents the concurrency mode issue.\n */\n useMemo(() => {\n ref.current = value\n }, [value])\n\n return ref\n}\n","import { useCallback } from \"react\"\nimport { BehaviorSubject, type Observable } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\n\n/**\n * If you need to represent some piece of state as an observable and also want the ability to change\n * this state during the lifetime of the component, useObservableState\n * is for you. It acts like React.useState(), only that\n * it returns an observable representing changes to the\n * value instead of the value itself. The callback/setter\n * returned acts like a the regular callback you\n * would otherwise get from React.useState. This is useful when you want\n * to compose the state change together with other observables.\n *\n * @important\n * The last array value is the value itself in case\n * you need a direct reference to the value\n */\nexport const useObservableState = <T>(\n defaultValue: T,\n): [Observable<T>, (value: T) => void, T] => {\n const subject = useConstant(() => new BehaviorSubject(defaultValue))\n\n const subject$ = useLiveRef(subject)\n\n const setState = useCallback(\n (value: T) => {\n subject.next(value)\n },\n [subject],\n )\n\n return [subject$.current, setState, subject.getValue()]\n}\n","export function filterObjectByKey<T extends object, K extends keyof T>(\n obj: T,\n keys: K[],\n): Pick<T, K> {\n return keys.reduce(\n (acc, key) => {\n if (key in obj) {\n // biome-ignore lint/performance/noAccumulatingSpread: TODO\n return { ...acc, [key]: obj[key] }\n }\n return acc\n },\n {} as Pick<T, K>,\n )\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport function isPromiseLike<T>(value: T): value is T & Promise<any> {\n return (\n value instanceof Promise ||\n (value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n typeof value.then === \"function\" &&\n \"catch\" in value &&\n value.catch === \"function\")\n )\n}\n","import { defer, from, isObservable, type Observable, of } from \"rxjs\"\nimport { isPromiseLike } from \"./isPromiseLike\"\n\ntype FnReturnToObservable<T> = T extends Observable<infer ObservedData>\n ? ObservedData\n : T extends Promise<infer ThenData>\n ? ThenData\n : T\n\nexport function makeObservable<Data>(\n fn: Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(fn: Promise<Data>): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data> | Data,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data, Params>(\n fn: (params: Params) => Data,\n): (params: Params) => Observable<FnReturnToObservable<Data>>\n\n/**\n * Generic factory OR Observable\n */\nexport function makeObservable<Data, Return>(\n fn: Observable<Data> | (() => Return),\n): () => Observable<Data | FnReturnToObservable<Return>>\n\nexport function makeObservable<Data>(fn: Data): () => Observable<Data>\n\n/**\n * Convert the input into an observable.\n *\n * - Observable: return the same observable\n * - Promise: return an observable from the promise\n * - Data: return an observable from the data\n * - Function: Execute the function and return an observable from the result\n */\nexport function makeObservable<Data, Params>(\n something:\n | ((params: Params) => Observable<Data>)\n | Promise<Data>\n | Observable<Data>\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n | Data,\n): (params: Params) => Observable<Data> {\n if (isObservable(something)) return () => something\n\n if (isPromiseLike(something)) return () => from(something)\n\n if (typeof something !== \"function\") return () => of(something)\n\n const somethingAsFunction = something as\n | ((params: Params) => Observable<Data>)\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n\n return (params: Params) =>\n defer(() => {\n const result = somethingAsFunction(params)\n\n if (isPromiseLike(result)) {\n return from(result)\n }\n\n if (isObservable(result)) {\n return result\n }\n\n return of(result)\n })\n}\n","export function isShallowEqual<A, B>(objA: A, objB: B): boolean {\n // Check if both objects are null or undefined\n if (objA === null || objA === undefined || objB === undefined) {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects are primitives\n if (typeof objA !== \"object\" || typeof objB !== \"object\") {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects have the same prototype\n if (objA.constructor !== objB?.constructor) {\n return false\n }\n\n // Check if both objects have the same keys\n const keysA = Object.keys(objA) as Array<keyof A>\n const keysB = Object.keys(objB) as Array<keyof A>\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n // Check if the values of the keys are equal\n for (const key of keysA) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: TODO\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n if (!objB.hasOwnProperty(key) || objA[key] !== (objB as any)[key]) {\n return false\n }\n }\n\n // If all checks pass, the objects are considered shallowly equal\n return true\n}\n","import {\n type DependencyList,\n useCallback,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\"\nimport {\n type BehaviorSubject,\n catchError,\n distinctUntilChanged,\n EMPTY,\n identity,\n map,\n type Observable,\n type Subscription,\n shareReplay,\n startWith,\n tap,\n} from \"rxjs\"\nimport { filterObjectByKey } from \"../utils/filterObjectByKey\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport { isShallowEqual } from \"../utils/shallowEqual\"\n\ninterface Option<R = undefined> {\n defaultValue: R\n unsubscribeOnUnmount?: boolean\n compareFn?: (a: R, b: R) => boolean\n}\n\nexport function useObserve<T>(source: BehaviorSubject<T>): T\nexport function useObserve<T extends object, SelectorKeys extends keyof T>(\n source: BehaviorSubject<T>,\n selector: SelectorKeys[],\n): { [K in SelectorKeys]: T[K] }\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n options: Omit<Option<T>, \"defaultValue\">,\n): T\n\nexport function useObserve<T>(source: Observable<T>): T | undefined\nexport function useObserve<T extends object, SelectorKeys extends keyof T>(\n source: Observable<T>,\n selector: SelectorKeys[],\n): { [K in SelectorKeys]: T[K] } | undefined\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n deps: DependencyList,\n): T | undefined\n\nexport function useObserve<T>(\n source: () => Observable<T> | undefined,\n deps: DependencyList,\n): T | undefined\n\nexport function useObserve<T>(source: Observable<T>, options: Option<T>): T\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n options: Option<T>,\n deps: DependencyList,\n): T\n\nexport function useObserve<T, SelectorKeys extends keyof T>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n optionsOrDeps?: Partial<Option<T>> | DependencyList | SelectorKeys[],\n maybeDeps?: DependencyList,\n): T {\n const options =\n optionsOrDeps != null && !Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as Partial<Option<T>>)\n : ({\n defaultValue: undefined,\n unsubscribeOnUnmount: true,\n compareFn: undefined,\n } satisfies Partial<Option<T>>)\n const deps =\n !maybeDeps && Array.isArray(optionsOrDeps)\n ? optionsOrDeps\n : typeof source$ === \"function\"\n ? (maybeDeps ?? [])\n : [source$]\n const valueRef = useRef<{ value: T | undefined } | undefined>(undefined)\n const sourceRef = useLiveRef(source$)\n const optionsRef = useLiveRef(options)\n const selectorKey =\n typeof source$ !== \"function\" && Array.isArray(optionsOrDeps)\n ? JSON.stringify(optionsOrDeps)\n : undefined\n const selectorRef = useLiveRef(\n typeof source$ !== \"function\" && Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as SelectorKeys[])\n : undefined,\n )\n\n const observable = useMemo(() => {\n void selectorKey\n\n const selectorOption = selectorRef.current\n const compareFnOption = optionsRef.current.compareFn\n const compareFn = compareFnOption\n ? compareFnOption\n : selectorOption\n ? isShallowEqual\n : undefined\n const observable$ = makeObservable(sourceRef.current)()\n\n return {\n observable: observable$.pipe(\n // Maybe selector\n map((v) => {\n if (selectorOption && typeof v === \"object\" && v !== null) {\n return filterObjectByKey(v, selectorOption) as T | undefined\n }\n\n return v\n }),\n // Maybe compareFn\n distinctUntilChanged((a, b) => {\n if (a === undefined || b === undefined) return false\n\n if (compareFn) {\n return compareFn(a as T, b as T)\n }\n\n return a === b\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n ),\n subscribed: false,\n snapshotSub: undefined as Subscription | undefined,\n }\n }, [...deps, selectorKey, selectorRef, sourceRef, optionsRef])\n\n const getSnapshot = useCallback(() => {\n /**\n * If getting a snapshot before the observable has been subscribed, we will subscribe to it to get a chance\n * to retrieve the actual value if the observable is synchronous.\n * This is to avoid re-rendering the hook in the situation where we can actually have a value already.\n */\n if (!observable.subscribed) {\n observable.subscribed = true\n\n const sub = observable.observable.subscribe((value) => {\n valueRef.current = { value: value as T }\n })\n\n observable.snapshotSub = sub\n }\n\n if (valueRef.current === undefined) return optionsRef.current.defaultValue\n\n return valueRef.current?.value\n }, [observable, optionsRef])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: TODO\n const subscribe = useCallback(\n (next: () => void) => {\n observable.subscribed = true\n\n const sub = observable.observable\n .pipe(\n optionsRef.current.defaultValue\n ? startWith(optionsRef.current.defaultValue)\n : identity,\n tap((value) => {\n valueRef.current = { value: value as T }\n }),\n catchError((error) => {\n console.error(error)\n\n return EMPTY\n }),\n )\n .subscribe(next)\n\n /**\n * Unsubscribe from early snapshot subscription to avoid re-running the original observable.\n * From this point onward we have an active subscription to the observable.\n */\n observable.snapshotSub?.unsubscribe()\n\n return () => {\n if (optionsRef.current.unsubscribeOnUnmount === false) return\n\n sub.unsubscribe()\n }\n },\n [observable],\n )\n\n const result = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n return result as T\n}\n","import { type DependencyList, useEffect } from \"react\"\nimport { catchError, EMPTY } from \"rxjs\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport type { SubscribeSource } from \"./types\"\n\nexport function useSubscribe<T>(\n source: SubscribeSource<T> | (() => T),\n deps: DependencyList = [],\n) {\n const sourceRef = useLiveRef(source)\n\n useEffect(() => {\n const sub = makeObservable(sourceRef.current)()\n .pipe(\n catchError((error) => {\n console.error(error)\n\n return EMPTY\n }),\n )\n .subscribe()\n\n return () => {\n sub.unsubscribe()\n }\n }, [...deps, sourceRef])\n}\n","import { type DependencyList, useCallback } from \"react\"\nimport { catchError, identity, retry } from \"rxjs\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport type { SubscribeSource } from \"./types\"\nimport { useSubscribe } from \"./useSubscribe\"\n\ninterface Option {\n retry?: boolean\n onError?: (error: unknown) => void\n}\n\nexport function useSubscribeEffect<T>(source: SubscribeSource<T>): void\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n): void\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n deps: DependencyList,\n): void\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n deps: DependencyList,\n): void\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n unsafeOptions?: Option | DependencyList,\n deps: DependencyList = [],\n) {\n const options =\n unsafeOptions != null && !Array.isArray(unsafeOptions)\n ? (unsafeOptions as Option)\n : ({} satisfies Option)\n const retryOption = options.retry ?? true\n const onErrorRef = useLiveRef(\n options.onError ??\n ((error: unknown) => {\n console.error(error)\n }),\n )\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: TODO\n const sourceAsObservable = useCallback(() => makeObservable(source)(), deps)\n\n const enhancerMakeObservable = useCallback(\n () =>\n sourceAsObservable().pipe(\n catchError((error) => {\n onErrorRef.current(error)\n\n throw error\n }),\n retryOption ? retry() : identity,\n ),\n [sourceAsObservable, retryOption, onErrorRef],\n )\n\n useSubscribe(enhancerMakeObservable, deps)\n}\n","import { hashKey, type QueryKey } from \"@tanstack/react-query\"\nimport { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport {\n fromEvent,\n type Observable,\n type Subscription,\n share,\n takeUntil,\n} from \"rxjs\"\n\ntype CacheEntry = {\n query$: Observable<unknown>\n signal: AbortSignal\n sub: Subscription | undefined\n isCompleted: boolean\n lastData: { value: unknown } | undefined\n}\n\nexport class QueryClient$ {\n public readonly queryMap: Map<string, CacheEntry> = new Map()\n\n getQuery(queryHash: string) {\n return this.queryMap.get(queryHash)\n }\n\n setQuery(\n queryKey: QueryKey,\n query$: Observable<unknown>,\n signal: AbortSignal,\n ) {\n const queryHash = hashKey(queryKey)\n\n const sharedQuery$ = query$.pipe(\n /**\n * abort signal is triggered on:\n * - manual cancellation from user\n * - unmounting the component\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-cancellation\n */\n takeUntil(fromEvent(signal, \"abort\")),\n share(),\n )\n\n const cacheEntry: CacheEntry = {\n query$: sharedQuery$,\n signal,\n sub: undefined,\n isCompleted: false,\n lastData: undefined,\n }\n\n this.queryMap.set(queryHash, cacheEntry)\n\n const sub = sharedQuery$.subscribe({\n next: (data) => {\n const entry = this.queryMap.get(queryHash)\n\n if (entry) {\n entry.lastData = { value: data }\n }\n },\n complete: () => {\n this.deleteQuery(queryHash)\n },\n })\n\n cacheEntry.sub = sub\n\n return cacheEntry\n }\n\n deleteQuery(queryHash: string) {\n const entry = this.queryMap.get(queryHash)\n\n if (!entry) return\n\n if (entry.sub) {\n entry.sub.unsubscribe()\n entry.sub = undefined\n }\n\n entry.isCompleted = true\n\n this.queryMap.delete(queryHash)\n }\n\n destroy() {\n this.queryMap.forEach((_, key) => {\n this.deleteQuery(key)\n })\n }\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined)\n\nexport const QueryClientProvider$ = memo(\n ({\n children,\n client: _client,\n }: {\n children: React.ReactNode\n client?: QueryClient$\n }) => {\n const [client] = useState(() => _client ?? new QueryClient$())\n\n useEffect(() => {\n return () => {\n client.destroy()\n }\n }, [client])\n\n return <Context.Provider value={client}>{children}</Context.Provider>\n },\n)\n\nexport const useQueryClient$ = () => {\n const client = useContext(Context)\n\n if (!client) {\n throw new Error(\n \"useReactJrxQueryClient must be used within a ReactJrxQueryProvider\",\n )\n }\n\n return client\n}\n","import {\n type DefaultError,\n type QueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\"\nimport { useEffect } from \"react\"\nimport { BehaviorSubject, type Observable, take } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport type UseMutation$Options<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TContext>,\n \"mutationFn\"\n> & {\n mutationFn: ((variables: TVariables) => Observable<TData>) | Observable<TData>\n}\n\nexport function useMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n) {\n const stateSubject = useConstant(\n () =>\n new BehaviorSubject<\n Pick<\n UseMutationResult<TData, TError, TVariables, TContext>,\n \"status\" | \"isPending\" | \"isError\" | \"isSuccess\" | \"isIdle\"\n >\n >({\n status: \"idle\",\n isPending: false,\n isError: false,\n isSuccess: false,\n isIdle: true,\n }),\n )\n\n const result = useMutation<TData, TError, TVariables, TContext>(\n {\n ...options,\n mutationFn: (variables: TVariables) => {\n let lastData: { value: TData } | undefined\n\n return new Promise<TData>((resolve, reject) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n source.pipe(take(1)).subscribe({\n next: (data) => {\n lastData = { value: data }\n },\n error: (error) => {\n reject(error)\n },\n complete: () => {\n if (lastData === undefined)\n return reject(new Error(\"Stream completed without any data\"))\n\n resolve(lastData.value)\n },\n })\n })\n },\n },\n queryClient,\n )\n\n const { status, isPending, isError, isSuccess, isIdle } = result\n\n useEffect(() => {\n stateSubject.next({\n status,\n isPending,\n isError,\n isSuccess,\n isIdle,\n })\n }, [status, isPending, isError, isSuccess, isIdle, stateSubject])\n\n return { ...result, state$: stateSubject }\n}\n","import {\n type DefaultError,\n type MutationKey,\n type QueryClient,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n BehaviorSubject,\n filter,\n first,\n noop,\n type Subject,\n switchMap,\n} from \"rxjs\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport function useContactMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData | null, TError, TVariables, TContext> & {\n mutationKey: MutationKey\n },\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n type TDataOrNull = TData | null\n const mutationKey = options.mutationKey\n\n const { mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; ready$: Subject<boolean> },\n TContext\n >(\n {\n ...options,\n onMutate({ variables }, ...rest) {\n return options.onMutate?.(variables, ...rest)\n },\n onSuccess(data, { variables }, ...rest) {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError(error, { variables }, ...rest) {\n return options.onError?.(error, variables, ...rest)\n },\n onSettled(data, error, { variables }, ...rest) {\n return options.onSettled?.(data, error, variables, ...rest)\n },\n mutationFn: ({ ready$, variables }) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n return ready$.pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => source),\n )\n },\n },\n queryClient,\n )\n\n const mutateAsyncConcat = useCallback(\n async (variables: TVariables) => {\n const mutations = client.getMutationCache().findAll({\n mutationKey,\n exact: true,\n })\n\n const subject = new BehaviorSubject(false)\n\n const result = mutateAsync({ variables, ready$: subject })\n\n await Promise.all(\n mutations.map((mutation) => mutation.continue().catch(noop)),\n )\n\n subject.next(true)\n\n return await result.finally(() => {\n subject.complete()\n })\n },\n [mutateAsync, client, mutationKey],\n )\n\n const mutateConcat = useCallback(\n (variables: TVariables) => {\n mutateAsyncConcat(variables).catch(noop)\n },\n [mutateAsyncConcat],\n )\n\n return { ...rest, mutate: mutateConcat, mutateAsync: mutateAsyncConcat }\n}\n","import {\n type DefaultError,\n hashKey,\n type QueryClient,\n type QueryFunctionContext,\n type QueryKey,\n type UseQueryOptions,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { defer, delay, type Observable, take } from \"rxjs\"\nimport { useQueryClient$ } from \"./QueryClientProvider$\"\n\nexport function useQuery$<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\"\n > & {\n queryFn:\n | ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\n | Observable<TQueryFnData>\n },\n queryClient?: QueryClient,\n) {\n const _queryClient = useQueryClient(queryClient)\n const queryClient$ = useQueryClient$()\n\n const queryFnAsync = (context: QueryFunctionContext<TQueryKey>) => {\n return new Promise<TQueryFnData>((resolve, reject) => {\n const getSource = () =>\n defer(() =>\n typeof options.queryFn === \"function\"\n ? options.queryFn(context)\n : options.queryFn,\n )\n\n const queryHash = hashKey(context.queryKey)\n\n const queryAlreadyInCache = queryClient$.getQuery(queryHash)\n\n const queryCacheEntry =\n queryAlreadyInCache ??\n queryClient$.setQuery(context.queryKey, getSource(), context.signal)\n\n const refetchIfNeeded = () => {\n if (queryCacheEntry?.isCompleted === false) {\n setTimeout(() => {\n _queryClient?.refetchQueries({\n queryKey: context.queryKey,\n exact: true,\n })\n })\n }\n }\n\n // if the observable returns results synchronously\n if (!queryAlreadyInCache && queryCacheEntry.lastData !== undefined) {\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n\n return\n }\n\n const query$ = queryCacheEntry.query$\n\n query$\n .pipe(\n take(1),\n /**\n * If several values are emitted during this delay, we will only\n * keep the last value. This is unfortunate but it's the best we can do\n * for now.\n */\n delay(1),\n )\n .subscribe({\n error: (error) => {\n return reject(error)\n },\n complete: () => {\n if (queryCacheEntry?.lastData === undefined) {\n if (queryCacheEntry.signal.aborted) {\n return resolve(undefined as TQueryFnData)\n }\n\n console.log(\n `cancelled due to stream completing without data for query ${queryHash}`,\n queryCacheEntry?.lastData,\n )\n\n _queryClient.cancelQueries({\n queryKey: context.queryKey,\n exact: true,\n })\n\n return resolve(undefined as TQueryFnData)\n }\n\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n },\n })\n })\n }\n\n const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n {\n ...options,\n queryFn: queryFnAsync,\n },\n queryClient,\n )\n\n return result\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\"\nimport { useCallback, useRef } from \"react\"\nimport {\n defaultIfEmpty,\n first,\n fromEvent,\n ignoreElements,\n merge,\n tap,\n} from \"rxjs\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport class SwitchMutationCancelError extends Error {\n constructor(message = \"Mutation canceled\") {\n super(message)\n this.name = \"SwitchMutationCancelError\"\n }\n}\n\nexport function useSwitchMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData | null, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n) {\n const previousMutationCancelRef = useRef(new AbortController())\n type TDataOrNull = TData | null\n\n const { mutate, mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; abort: AbortSignal },\n TContext\n >(\n {\n ...options,\n mutationFn: ({ variables, abort }) => {\n if (abort.aborted) {\n throw new SwitchMutationCancelError()\n }\n\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n return merge(\n source,\n fromEvent(abort, \"abort\").pipe(\n tap(() => {\n throw new SwitchMutationCancelError()\n }),\n ignoreElements(),\n ),\n ).pipe(first(), defaultIfEmpty(null))\n },\n onMutate: ({ variables }, ...rest) => {\n return options.onMutate?.(variables, ...rest)\n },\n onSuccess: (data, { variables }, ...rest) => {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError: (error, { variables }, ...rest) => {\n return options.onError?.(error, variables, ...rest)\n },\n onSettled: (data, error, { variables }, ...rest) => {\n return options.onSettled?.(data, error, variables, ...rest)\n },\n },\n queryClient,\n )\n\n const mutateSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutate({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutate],\n )\n\n const mutateAsyncSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutateAsync({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutateAsync],\n )\n\n return { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch }\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\")\n","import type { Adapter } from \"./Adapter\"\n\nexport const createLocalforageAdapter = (forage: {\n getItem: (key: string) => Promise<string | null>\n setItem: (key: string, value: string) => Promise<string>\n}): Adapter => ({\n getItem: async (key: string) => {\n const serializedValue = await forage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key: string, value: unknown) => {\n await forage.setItem(key, JSON.stringify(value))\n },\n\n removeItem: async (_: string) => {},\n\n clear: async () => {},\n})\n","import type { Adapter } from \"./Adapter\"\n\nconst normalizeStore = (store: unknown) => {\n if (!store || typeof store !== \"object\") {\n return undefined\n }\n\n return store\n}\n\n/**\n * Create an adapter which use one unique store entry to store all\n * state. When using many signals it can help with maintenance to keep things\n * tidy.\n */\nconst createSharedStoreAdapter = ({\n adapter,\n key,\n}: {\n adapter: Adapter\n key: string\n}): Adapter => ({\n clear: async () => {\n return await adapter.removeItem(key)\n },\n\n removeItem: async (keyToDelete) => {\n const unsafeStore = await adapter.getItem(key)\n // biome-ignore lint/correctness/noUnusedVariables: TODO\n const { [keyToDelete]: toRemove, ...rest } =\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n normalizeStore(unsafeStore) ?? ({} as any)\n\n await adapter.setItem(key, rest)\n },\n\n getItem: async (itemKey: string) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n if (itemKey in store) {\n return store[itemKey as keyof typeof store]\n }\n\n return undefined\n },\n\n setItem: async (itemKey: string, value: unknown) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n await adapter.setItem(key, { ...store, [itemKey]: value })\n },\n})\n\nexport const createLocalStorageAdapter = ({\n key,\n}: {\n key?: string\n} = {}): Adapter => {\n if (key) {\n return createSharedStoreAdapter({\n adapter: createLocalStorageAdapter(),\n key,\n })\n }\n\n return {\n clear: async () => {\n localStorage.clear()\n },\n\n removeItem: async (key) => {\n localStorage.removeItem(key)\n },\n\n getItem: async (key) => {\n const serializedValue = localStorage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key, value) => {\n localStorage.setItem(key, JSON.stringify(value))\n },\n }\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { SIGNAL_RESET } from \"./constants\"\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport type SignalValue<T extends Signal<any, any>> = T[\"value\"]\n\nexport type SignalWithKey<T> = Signal<T> & {\n key: string\n}\n\nexport class Signal<\n T,\n K extends string | undefined = undefined,\n> extends BehaviorSubject<T> {\n constructor(\n public config: {\n default: T\n key: K\n },\n ) {\n super(config.default)\n }\n\n update = (\n valueOrUpdater:\n | ((prev: T) => T)\n // biome-ignore lint/complexity/noBannedTypes: TODO\n | (T extends Function ? never : T)\n | typeof SIGNAL_RESET,\n ): void => {\n if (valueOrUpdater === SIGNAL_RESET) {\n super.next(this.config.default)\n } else if (typeof valueOrUpdater === \"function\") {\n const updater = valueOrUpdater as (prev: T) => T\n\n super.next(updater(this.value))\n } else {\n super.next(valueOrUpdater as T)\n }\n }\n\n /**\n * @deprecated Use `next` instead\n */\n setValue = this.update.bind(this)\n\n /**\n * @deprecated Use `this` instead\n */\n get subject() {\n return this\n }\n\n get key() {\n return this.config.key\n }\n}\n\nexport class VirtualSignal<T> {\n constructor(public config: { default: T }) {}\n}\n// biome-ignore lint/complexity/noBannedTypes: TODO\nexport function signal(config: {}): Signal<undefined, undefined>\n\nexport function signal<T = undefined, K extends string = string>(config: {\n key: K\n}): Signal<T | undefined, K>\n\nexport function signal<T, K extends string = string>(config: {\n key: K\n default: T\n}): Signal<T, K>\n\nexport function signal<T>(config: {\n key?: undefined\n}): Signal<T | undefined, undefined>\n\nexport function signal<T>(config: {\n key?: undefined\n default: T\n}): Signal<T, undefined>\n\nexport function signal<K extends string>(config: {\n key: K\n default?: undefined\n}): Signal<undefined, K>\n\nexport function signal<T, K extends string | undefined = undefined>(\n config: { default?: T; key?: K } = {},\n) {\n return new Signal({\n key: undefined,\n ...config,\n default: config.default ?? undefined,\n })\n}\n\nexport function virtualSignal<T>(config: {\n default: T\n key?: string\n}): VirtualSignal<T> {\n return new VirtualSignal(config)\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { Signal, type VirtualSignal } from \"./Signal\"\n\nexport class SignalContext {\n /**\n * items only get added as they are created. The only time we should cleanup\n * are on context destroy. This is to ensure later re-use of virtual signals\n * return the same persisted state.\n */\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n signals = new BehaviorSubject(new Map<VirtualSignal<unknown>, Signal<any>>())\n\n public isDestroyed = false\n\n getOrCreateSignal<T>(virtualSignal: VirtualSignal<T>): Signal<T> {\n const existingSignal = this.signals.value.get(virtualSignal)\n\n if (existingSignal) {\n return existingSignal as Signal<T>\n }\n\n const newSignal = new Signal<T>({ ...virtualSignal.config, key: undefined })\n\n this.signals.value.set(virtualSignal, newSignal)\n this.signals.next(this.signals.value)\n\n return newSignal\n }\n\n destroy() {\n this.signals.value.forEach((signal) => {\n signal.complete()\n })\n this.signals.value.clear()\n this.signals.complete()\n this.isDestroyed = true\n }\n}\n","import { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport { useRefOnce } from \"../../utils/react/useRefOnce\"\nimport type { VirtualSignal } from \"../Signal\"\nimport { SignalContext } from \"../SignalContext\"\n\nexport type SignalContextType = SignalContext\n\nexport const SignalReactContext = createContext<SignalContextType>(\n new SignalContext(),\n)\n\nexport const SignalContextProvider = memo(\n ({ children }: { children: React.ReactNode }) => {\n const signalContextRef = useRefOnce<SignalContextType>(\n () => new SignalContext(),\n )\n const signalContext = signalContextRef.current\n const [isDestroyed, setIsDestroyed] = useState(false)\n\n if (isDestroyed) {\n signalContextRef.current = new SignalContext()\n setIsDestroyed(false)\n }\n\n const value = signalContext\n\n useEffect(() => {\n return () => {\n signalContextRef.current?.destroy()\n // force re-render\n setIsDestroyed(true)\n }\n }, [signalContextRef])\n\n return (\n <SignalReactContext.Provider value={value}>\n {children}\n </SignalReactContext.Provider>\n )\n },\n)\n\nexport const useSignalContext = () => {\n const value = useContext(SignalReactContext)\n\n return value\n}\n\nexport const useMakeOrRetrieveSignal = (\n virtualSignal?: VirtualSignal<unknown>,\n) => {\n const signalContext = useSignalContext()\n\n const signal = virtualSignal\n ? signalContext.getOrCreateSignal(virtualSignal)\n : undefined\n\n return signal\n}\n","export const IDENTIFIER_PERSISTANCE_KEY = \"__reactjrx\"\n","import { catchError, from, of, switchMap } from \"rxjs\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { IDENTIFIER_PERSISTANCE_KEY } from \"./constants\"\nimport type { PersistanceEntry, SignalPersistenceConfig } from \"./types\"\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n if (\n typeof unknownValue === \"object\" &&\n unknownValue !== null &&\n IDENTIFIER_PERSISTANCE_KEY in unknownValue &&\n unknownValue[IDENTIFIER_PERSISTANCE_KEY] === IDENTIFIER_PERSISTANCE_KEY\n ) {\n return unknownValue as PersistanceEntry\n }\n\n return undefined\n}\n\nexport const persistValue = ({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) => {\n const { signal, version } = config\n const state = signal.getValue()\n\n const value = {\n value: state,\n [IDENTIFIER_PERSISTANCE_KEY]: IDENTIFIER_PERSISTANCE_KEY,\n migrationVersion: version,\n } satisfies PersistanceEntry\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Persist value\",\n value,\n `for signal ${signal.config.key}`,\n )\n }\n\n return from(adapter.setItem(signal.config.key, value)).pipe(\n catchError((e) => {\n console.error(e)\n\n return of(null)\n }),\n )\n}\n\nexport function hydrateValueToSignal({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) {\n const { hydrate = ({ value }) => value, signal, version } = config\n\n return from(adapter.getItem(signal.config.key)).pipe(\n switchMap((value) => {\n const normalizedValue = getNormalizedPersistanceValue(value)\n\n if (!normalizedValue) return of(value)\n\n const storedVersionIsInvalid =\n typeof normalizedValue.migrationVersion !== \"number\"\n\n const signalVersionIsSuperior =\n normalizedValue.migrationVersion !== undefined &&\n version > normalizedValue.migrationVersion\n\n if (\n storedVersionIsInvalid ||\n signalVersionIsSuperior ||\n normalizedValue.value === undefined\n ) {\n return of(value)\n }\n\n const correctVersionValue = normalizedValue.value\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Hydrate value\",\n normalizedValue,\n `for signal ${signal.config.key}`,\n )\n }\n\n signal.setValue(hydrate({ value: correctVersionValue, version }))\n\n return of(value)\n }),\n )\n}\n","import {\n asyncScheduler,\n catchError,\n EMPTY,\n from,\n map,\n merge,\n of,\n share,\n switchMap,\n tap,\n throttleTime,\n zip,\n} from \"rxjs\"\nimport type { Signal } from \"../Signal\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { hydrateValueToSignal, persistValue } from \"./helpers\"\nimport type { SignalPersistenceConfig } from \"./types\"\n\nexport function persistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries: Array<SignalPersistenceConfig<Signal<any, string>>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Requires a stable instance otherwise the hydration\n * process will start again. This is useful when you\n * need to change adapter during runtime.\n */\n adapter: Adapter\n}) {\n const signalsHydrated$ =\n entries.length === 0\n ? of([])\n : zip(\n ...entries.map((config) =>\n hydrateValueToSignal({\n adapter,\n config,\n }),\n ),\n )\n\n const isHydrated$ = signalsHydrated$.pipe(\n tap(onHydrated),\n catchError((error) => {\n console.error(\"Unable to hydrate\", error)\n\n return EMPTY\n }),\n share(),\n )\n\n /**\n * Start persisting to the current adapter\n * as soon as signals are hydrated. Will stop\n * whenever hydration process starts again\n */\n const persisted$ = isHydrated$.pipe(\n switchMap(() =>\n merge(\n ...entries.map((config) =>\n config.signal.pipe(\n throttleTime(500, asyncScheduler, {\n trailing: true,\n }),\n switchMap(() =>\n from(\n persistValue({\n adapter,\n config,\n }),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n\n return merge(\n isHydrated$.pipe(\n map(() => ({\n type: \"hydrated\" as const,\n })),\n ),\n persisted$.pipe(\n map(() => ({\n type: \"persisted\" as const,\n })),\n ),\n )\n}\n","import { concatMap, merge, of, scan, switchMap } from \"rxjs\"\nimport { useLiveBehaviorSubject } from \"../../binding/useLiveBehaviorSubject\"\nimport { useObserve } from \"../../binding/useObserve\"\nimport { useLiveRef } from \"../../utils/react/useLiveRef\"\nimport { isShallowEqual } from \"../../utils/shallowEqual\"\nimport type { Adapter } from \"../persistance/adapters/Adapter\"\nimport { persistSignals } from \"../persistance/persistSignals\"\nimport type { SignalPersistenceConfig } from \"../persistance/types\"\n\n/**\n * Make sure to pass stable reference of entries and adapter if you don't\n * intentionally want to start over the process.\n *\n * `isHydrated` will be `true` after the first successful hydration. This value\n * will be reset as soon as the adapter reference changes.\n */\nexport function usePersistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n /**\n * Passing a new list of entries will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * inifite loop.\n */\n\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries?: Array<SignalPersistenceConfig<any>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Passing a new adapter reference will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * inifite loop.\n */\n adapter?: Adapter\n}): { isHydrated: boolean } {\n const onHydratedRef = useLiveRef(onHydrated)\n const adapterSubject = useLiveBehaviorSubject(adapter)\n const entriesSubject = useLiveBehaviorSubject(entries)\n\n return useObserve(\n () => {\n const persistence$ = adapterSubject.pipe(\n switchMap((adapter) => {\n if (!adapter) return of({ type: \"reset\" })\n\n return merge(\n of({ type: \"reset\" }),\n entriesSubject.pipe(\n concatMap((entries) =>\n persistSignals({\n adapter,\n entries,\n onHydrated: () => {\n onHydratedRef.current?.()\n },\n }),\n ),\n ),\n )\n }),\n )\n\n return persistence$.pipe(\n scan(\n (acc, event) => {\n if (event.type === \"reset\") return { isHydrated: false }\n if (event.type === \"hydrated\") return { isHydrated: true }\n\n return acc\n },\n { isHydrated: false as boolean },\n ),\n )\n },\n { defaultValue: { isHydrated: false }, compareFn: isShallowEqual },\n [adapterSubject, entriesSubject],\n )\n}\n","import { type Signal, VirtualSignal } from \"../Signal\"\nimport {\n useMakeOrRetrieveSignal,\n useSignalContext,\n} from \"./SignalContextProvider\"\n\nexport function useSignalReference<T>(\n signal: Signal<T> | VirtualSignal<T>,\n): Signal<T> {\n const signalContext = useSignalContext()\n\n if (signal instanceof VirtualSignal && !signalContext) {\n throw new Error(\n \"useSignalValue must be used within a SignalContextProvider\",\n )\n }\n\n return (useMakeOrRetrieveSignal(\n signal instanceof VirtualSignal ? signal : undefined,\n ) ?? signal) as Signal<T>\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport function useSetSignal<T>(signal: Signal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: VirtualSignal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n\n return finalSignal.update\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n","export function isDefined<T>(\n arg: T | null | undefined,\n): arg is T extends null | undefined ? never : T {\n return arg !== null && arg !== undefined\n}\n","export const isServer = typeof window === \"undefined\" || \"Deno\" in window\n","import { defer, merge, type Observable, of, throwError, timer } from \"rxjs\"\nimport {\n catchError,\n concatMap,\n first,\n mergeMap,\n retryWhen,\n tap,\n} from \"rxjs/operators\"\n\nexport interface RetryBackoffConfig<T, TError> {\n // Initial interval. It will eventually go as high as maxInterval.\n initialInterval?: number\n // Maximum delay between retries.\n maxInterval?: number\n // When set to `true` every successful emission will reset the delay and the\n // error count.\n resetOnSuccess?: boolean\n retry?: (attempt: number, error: TError) => boolean\n retryAfterDelay?: (attempt: number, error: TError) => boolean\n // Can be used to delay the retry (outside of backoff process)\n // for example if you want to pause retry due to connectivity issue\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n retryAfter?: () => Observable<any>\n retryDelay?: number | ((attempt: number, error: TError) => number)\n // Conditional retry.\n // shouldRetry?: (attempt: number, error: any) => Observable<boolean>\n backoffDelay?: (iteration: number, initialInterval: number) => number\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n caughtError?: (attempt: number, error: any) => undefined | Observable<T>\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n catchError?: (attempt: number, error: any) => Observable<T>\n}\n\n/** Calculates the actual delay which can be limited by maxInterval */\nexport function getDelay(backoffDelay: number, maxInterval: number) {\n return Math.min(backoffDelay, maxInterval)\n}\n\n/** Exponential backoff delay */\nexport function exponentialBackoffDelay(\n iteration: number,\n initialInterval: number,\n) {\n return 2 ** iteration * initialInterval\n}\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception\n * of an error. If the source Observable calls error, rather than propagating\n * the error call this method will resubscribe to the source Observable with\n * exponentially increasing interval and up to a maximum of count\n * re-subscriptions (if provided). Retrying can be cancelled at any point if\n * shouldRetry returns false.\n */\nexport function retryBackoff<T, TError>(config: RetryBackoffConfig<T, TError>) {\n const {\n retry,\n retryDelay,\n retryAfterDelay,\n retryAfter = () => of(true),\n } = config\n\n const maxRetries =\n typeof retry !== \"function\"\n ? retry === false\n ? 0\n : retry === true\n ? Number.POSITIVE_INFINITY\n : (retry ?? Number.POSITIVE_INFINITY)\n : Number.POSITIVE_INFINITY\n\n const shouldRetry =\n typeof retry === \"function\"\n ? // ? (attempt: number, error: TError) => of(retry(attempt, error))\n retry\n : () => true\n\n const initialInterval = typeof retryDelay === \"number\" ? retryDelay : 100\n\n const normalizedConfig = {\n shouldRetry,\n ...config,\n }\n\n const {\n maxInterval = Number.POSITIVE_INFINITY,\n resetOnSuccess = false,\n backoffDelay = exponentialBackoffDelay,\n } = normalizedConfig\n\n return <T>(source: Observable<T>) =>\n defer(() => {\n let caughtErrors = 0\n\n const shouldRetryFn = (attempt: number, error: TError) =>\n attempt < maxRetries ? shouldRetry(attempt, error) : false\n\n return source.pipe(\n catchError<T, Observable<T>>((error) => {\n caughtErrors++\n\n if (!shouldRetryFn(caughtErrors - 1, error)) throw error\n\n const caughtErrorResult$ = config.caughtError?.(caughtErrors, error)\n\n if (!caughtErrorResult$) throw error\n\n return caughtErrorResult$.pipe(\n mergeMap((source) =>\n merge(\n of(source) as unknown as Observable<T>,\n throwError(() => error),\n ),\n ),\n )\n }),\n retryWhen<T>((errors) => {\n return errors.pipe(\n concatMap((error) => {\n const attempt = caughtErrors - 1\n\n return retryAfter().pipe(\n first(),\n mergeMap(() =>\n shouldRetryFn(attempt, error)\n ? timer(\n getDelay(\n backoffDelay(attempt, initialInterval),\n maxInterval,\n ),\n ).pipe(\n mergeMap((timer) => {\n if (\n retryAfterDelay &&\n !retryAfterDelay(attempt, error)\n )\n return throwError(() => error)\n\n return of(timer)\n }),\n )\n : throwError(() => error),\n ),\n )\n }),\n )\n }),\n catchError((e) => {\n if (config.catchError) {\n return config.catchError(caughtErrors, e)\n }\n\n throw e\n }),\n tap(() => {\n if (resetOnSuccess) {\n caughtErrors = 0\n }\n }),\n )\n })\n}\n","import { type EffectCallback, useEffect } from \"react\"\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n useEffect(effect, [])\n}\n","import { useEffectOnce } from \"./useEffectOnce\"\n\nexport const useMount = (fn: () => void) => {\n useEffectOnce(() => {\n fn()\n })\n}\n","import { useEffect, useState } from \"react\"\nimport { ReplaySubject } from \"rxjs\"\nimport { useRefOnce } from \"./useRefOnce\"\n\nexport const useUnmountObservable = () => {\n const replaySubject = useRefOnce(() => new ReplaySubject(1))\n const [completed, setCompleted] = useState(false)\n\n if (completed) {\n replaySubject.current = new ReplaySubject(1)\n setCompleted(false)\n }\n\n useEffect(() => {\n return () => {\n replaySubject.current.next(undefined)\n setCompleted(true)\n }\n }, [replaySubject])\n\n return replaySubject.current\n}\n","import { distinctUntilChanged, map } from \"rxjs\"\nimport { useObserve } from \"../../binding/useObserve\"\nimport { useLiveRef } from \"../../utils\"\nimport type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport function useSignalValue<T>(signal: VirtualSignal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: VirtualSignal<T>,\n selector: (value: T) => SelectValue,\n): SelectValue\n\nexport function useSignalValue<T>(signal: Signal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: Signal<T>,\n selector: (value: T) => SelectValue,\n): SelectValue\n\nexport function useSignalValue<T, SelectValue>(\n signal: Signal<T>,\n selector: (value: T) => SelectValue,\n): SelectValue | undefined\n\nexport function useSignalValue(\n signal: Signal<unknown> | VirtualSignal<unknown>,\n selector?: (value: unknown) => unknown,\n) {\n const selectorRef = useLiveRef(selector)\n\n const finalSignal = useSignalReference(signal)\n\n return useObserve(\n () => {\n const defaultSelector = selectorRef.current ?? ((value: unknown) => value)\n\n const observed$ = finalSignal.pipe(\n map(defaultSelector),\n distinctUntilChanged(),\n )\n\n return observed$\n },\n {\n defaultValue: selector\n ? selector?.(finalSignal.value)\n : finalSignal.value,\n },\n [finalSignal],\n )\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSetSignal } from \"./useSetSignal\"\nimport { useSignalReference } from \"./useSignalReference\"\nimport { useSignalValue } from \"./useSignalValue\"\n\nexport function useSignal<T>(\n signal: VirtualSignal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T | undefined, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n const value = useSignalValue(signal)\n const setValue = useSetSignal(signal)\n\n return [value, setValue, finalSignal] as const\n}\n","import { useConstant } from \"../../utils\"\nimport type { Signal } from \"../Signal\"\nimport { useSignalValue } from \"./useSignalValue\"\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const useSignalState = <S extends Signal<any, any>>(\n fn: () => S,\n): [S[\"value\"], S] => {\n const signal = useConstant(fn)\n const value = useSignalValue(signal)\n\n return [value, signal] as const\n}\n"],"names":["useRefOnce","fn","ref","useRef","useEffect","useConstant","useLiveBehaviorSubject","state","subject","BehaviorSubject","useLiveRef","value","useMemo","useObservableState","defaultValue","subject$","setState","useCallback","filterObjectByKey","obj","keys","acc","key","isPromiseLike","makeObservable","something","isObservable","from","of","somethingAsFunction","params","defer","result","isShallowEqual","objA","objB","keysA","keysB","useObserve","source$","optionsOrDeps","maybeDeps","options","deps","valueRef","sourceRef","optionsRef","selectorKey","selectorRef","observable","selectorOption","compareFnOption","compareFn","map","v","distinctUntilChanged","a","b","shareReplay","getSnapshot","sub","subscribe","next","startWith","identity","tap","catchError","error","EMPTY","useSyncExternalStore","useSubscribe","source","useSubscribeEffect","unsafeOptions","retryOption","onErrorRef","sourceAsObservable","enhancerMakeObservable","retry","QueryClient$","queryHash","queryKey","query$","signal","hashKey","sharedQuery$","takeUntil","fromEvent","share","cacheEntry","data","entry","_","Context","createContext","QueryClientProvider$","memo","children","_client","client","useState","useQueryClient$","useContext","useMutation$","queryClient","stateSubject","useMutation","variables","lastData","resolve","reject","take","status","isPending","isError","isSuccess","isIdle","useContactMutation$","useQueryClient","mutationKey","mutateAsync","rest","ready$","filter","isReady","first","switchMap","mutateAsyncConcat","mutations","mutation","noop","mutateConcat","useQuery$","_queryClient","queryClient$","queryFnAsync","context","getSource","queryAlreadyInCache","queryCacheEntry","refetchIfNeeded","delay","useQuery","SwitchMutationCancelError","message","useSwitchMutation$","previousMutationCancelRef","mutate","abort","merge","ignoreElements","defaultIfEmpty","mutateSwitch","mutateAsyncSwitch","SIGNAL_RESET","createLocalforageAdapter","forage","serializedValue","normalizeStore","store","createSharedStoreAdapter","adapter","keyToDelete","unsafeStore","toRemove","itemKey","createLocalStorageAdapter","Signal","config","valueOrUpdater","updater","VirtualSignal","virtualSignal","SignalContext","existingSignal","newSignal","SignalReactContext","SignalContextProvider","signalContextRef","signalContext","isDestroyed","setIsDestroyed","jsx","useSignalContext","useMakeOrRetrieveSignal","IDENTIFIER_PERSISTANCE_KEY","getNormalizedPersistanceValue","unknownValue","persistValue","version","e","hydrateValueToSignal","hydrate","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","persistSignals","entries","onHydrated","isHydrated$","zip","persisted$","throttleTime","asyncScheduler","usePersistSignals","onHydratedRef","adapterSubject","entriesSubject","concatMap","scan","event","useSignalReference","useSetSignal","arrayEqual","i","isDefined","arg","isServer","getDelay","backoffDelay","maxInterval","exponentialBackoffDelay","iteration","initialInterval","retryBackoff","retryDelay","retryAfterDelay","retryAfter","maxRetries","shouldRetry","normalizedConfig","resetOnSuccess","caughtErrors","shouldRetryFn","attempt","caughtErrorResult$","mergeMap","throwError","retryWhen","errors","timer","useEffectOnce","effect","useMount","useUnmountObservable","replaySubject","ReplaySubject","completed","setCompleted","useSignalValue","selector","finalSignal","defaultSelector","useSignal","setValue","useSignalState"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/lib/utils/react/useRefOnce.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObservableState.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/isPromiseLike.ts","../src/lib/utils/isServer.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/binding/useUnmountObservable.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useUnmount.ts","../src/lib/utils/react/useDebounced.ts","../src/lib/utils/react/useMemoCompare.ts","../src/lib/utils/react/useMount.ts","../src/lib/binding/useObserve/store.ts","../src/lib/binding/useObserve/useStore.ts","../src/lib/binding/useObserve/useObserve.ts","../src/lib/utils/makeObservable.ts","../src/lib/binding/useSubscribe.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useMutation$.ts","../src/lib/queries/useConcatMutation$.ts","../src/lib/queries/useQuery$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/state/constants.ts","../src/lib/state/persistence/adapters/createLocalforageAdapter.ts","../src/lib/state/persistence/adapters/createLocalStorageAdapter.ts","../src/lib/state/Signal.ts","../src/lib/state/SignalContext.ts","../src/lib/state/react/SignalContextProvider.tsx","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistence/constants.ts","../src/lib/state/persistence/helpers.ts","../src/lib/state/persistence/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/state/react/useSignalReference.ts","../src/lib/state/react/useSetSignal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/react/useSignalState.ts"],"sourcesContent":["import { useRef } from \"react\"\n\nconst UNSET_SYMBOL = Symbol(\"UNSET\")\n\nexport const useRefOnce = <T>(fn: () => T) => {\n const ref = useRef<T | typeof UNSET_SYMBOL>(UNSET_SYMBOL)\n\n if (ref.current === UNSET_SYMBOL) {\n ref.current = fn()\n }\n\n return ref as { current: T }\n}\n","import { useRefOnce } from \"./useRefOnce\"\n\nexport const useConstant = <T>(fn: () => T) => {\n const ref = useRefOnce(fn)\n\n return ref.current\n}\n","import { useEffect } from \"react\"\nimport { BehaviorSubject } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n const subject = useConstant(() => new BehaviorSubject(state))\n\n useEffect(() => {\n subject.next(state)\n }, [state, subject])\n\n return subject\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useLiveRef = <T>(value: T) => {\n const ref = useRef(value)\n\n /**\n * We don't update the value on render because of potential\n * bug related to react concurrency mode.\n * We don't update the value in a useEffect because effects run after\n * render and we could maybe? have situation where the ref\n * is being called after render but before effect?\n * I am not sure of that one.\n *\n * `useMemo` is a good compromise since it runs during render but before\n * repaint. It prevents the concurrency mode issue.\n */\n useMemo(() => {\n ref.current = value\n }, [value])\n\n return ref\n}\n","import { useCallback } from \"react\"\nimport { BehaviorSubject, type Observable } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\n\n/**\n * If you need to represent some piece of state as an observable and also want the ability to change\n * this state during the lifetime of the component, useObservableState\n * is for you. It acts like React.useState(), only that\n * it returns an observable representing changes to the\n * value instead of the value itself. The callback/setter\n * returned acts like a the regular callback you\n * would otherwise get from React.useState. This is useful when you want\n * to compose the state change together with other observables.\n *\n * @important\n * The last array value is the value itself in case\n * you need a direct reference to the value\n */\nexport const useObservableState = <T>(\n defaultValue: T,\n): [Observable<T>, (value: T) => void, T] => {\n const subject = useConstant(() => new BehaviorSubject(defaultValue))\n\n const subject$ = useLiveRef(subject)\n\n const setState = useCallback(\n (value: T) => {\n subject.next(value)\n },\n [subject],\n )\n\n return [subject$.current, setState, subject.getValue()]\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n","export function isDefined<T>(\n arg: T | null | undefined,\n): arg is T extends null | undefined ? never : T {\n return arg !== null && arg !== undefined\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport function isPromiseLike<T>(value: T): value is T & Promise<any> {\n return (\n value instanceof Promise ||\n (value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n typeof value.then === \"function\" &&\n \"catch\" in value &&\n value.catch === \"function\")\n )\n}\n","export const isServer = typeof window === \"undefined\" || \"Deno\" in window\n","import { defer, merge, type Observable, of, throwError, timer } from \"rxjs\"\nimport {\n catchError,\n concatMap,\n first,\n mergeMap,\n retryWhen,\n tap,\n} from \"rxjs/operators\"\n\nexport interface RetryBackoffConfig<T, TError> {\n // Initial interval. It will eventually go as high as maxInterval.\n initialInterval?: number\n // Maximum delay between retries.\n maxInterval?: number\n // When set to `true` every successful emission will reset the delay and the\n // error count.\n resetOnSuccess?: boolean\n retry?: (attempt: number, error: TError) => boolean\n retryAfterDelay?: (attempt: number, error: TError) => boolean\n // Can be used to delay the retry (outside of backoff process)\n // for example if you want to pause retry due to connectivity issue\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n retryAfter?: () => Observable<any>\n retryDelay?: number | ((attempt: number, error: TError) => number)\n // Conditional retry.\n // shouldRetry?: (attempt: number, error: any) => Observable<boolean>\n backoffDelay?: (iteration: number, initialInterval: number) => number\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n caughtError?: (attempt: number, error: any) => undefined | Observable<T>\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n catchError?: (attempt: number, error: any) => Observable<T>\n}\n\n/** Calculates the actual delay which can be limited by maxInterval */\nexport function getDelay(backoffDelay: number, maxInterval: number) {\n return Math.min(backoffDelay, maxInterval)\n}\n\n/** Exponential backoff delay */\nexport function exponentialBackoffDelay(\n iteration: number,\n initialInterval: number,\n) {\n return 2 ** iteration * initialInterval\n}\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception\n * of an error. If the source Observable calls error, rather than propagating\n * the error call this method will resubscribe to the source Observable with\n * exponentially increasing interval and up to a maximum of count\n * re-subscriptions (if provided). Retrying can be cancelled at any point if\n * shouldRetry returns false.\n */\nexport function retryBackoff<T, TError>(config: RetryBackoffConfig<T, TError>) {\n const {\n retry,\n retryDelay,\n retryAfterDelay,\n retryAfter = () => of(true),\n } = config\n\n const maxRetries =\n typeof retry !== \"function\"\n ? retry === false\n ? 0\n : retry === true\n ? Number.POSITIVE_INFINITY\n : (retry ?? Number.POSITIVE_INFINITY)\n : Number.POSITIVE_INFINITY\n\n const shouldRetry =\n typeof retry === \"function\"\n ? // ? (attempt: number, error: TError) => of(retry(attempt, error))\n retry\n : () => true\n\n const initialInterval = typeof retryDelay === \"number\" ? retryDelay : 100\n\n const normalizedConfig = {\n shouldRetry,\n ...config,\n }\n\n const {\n maxInterval = Number.POSITIVE_INFINITY,\n resetOnSuccess = false,\n backoffDelay = exponentialBackoffDelay,\n } = normalizedConfig\n\n return <T>(source: Observable<T>) =>\n defer(() => {\n let caughtErrors = 0\n\n const shouldRetryFn = (attempt: number, error: TError) =>\n attempt < maxRetries ? shouldRetry(attempt, error) : false\n\n return source.pipe(\n catchError<T, Observable<T>>((error) => {\n caughtErrors++\n\n if (!shouldRetryFn(caughtErrors - 1, error)) throw error\n\n const caughtErrorResult$ = config.caughtError?.(caughtErrors, error)\n\n if (!caughtErrorResult$) throw error\n\n return caughtErrorResult$.pipe(\n mergeMap((source) =>\n merge(\n of(source) as unknown as Observable<T>,\n throwError(() => error),\n ),\n ),\n )\n }),\n retryWhen<T>((errors) => {\n return errors.pipe(\n concatMap((error) => {\n const attempt = caughtErrors - 1\n\n return retryAfter().pipe(\n first(),\n mergeMap(() =>\n shouldRetryFn(attempt, error)\n ? timer(\n getDelay(\n backoffDelay(attempt, initialInterval),\n maxInterval,\n ),\n ).pipe(\n mergeMap((timer) => {\n if (\n retryAfterDelay &&\n !retryAfterDelay(attempt, error)\n )\n return throwError(() => error)\n\n return of(timer)\n }),\n )\n : throwError(() => error),\n ),\n )\n }),\n )\n }),\n catchError((e) => {\n if (config.catchError) {\n return config.catchError(caughtErrors, e)\n }\n\n throw e\n }),\n tap(() => {\n if (resetOnSuccess) {\n caughtErrors = 0\n }\n }),\n )\n })\n}\n","import { useEffect, useState } from \"react\"\nimport { ReplaySubject } from \"rxjs\"\nimport { useRefOnce } from \"../utils/react/useRefOnce\"\n\nexport const useUnmountObservable = () => {\n const replaySubject = useRefOnce(() => new ReplaySubject(1))\n const [completed, setCompleted] = useState(false)\n\n if (completed) {\n replaySubject.current = new ReplaySubject(1)\n setCompleted(false)\n }\n\n useEffect(() => {\n return () => {\n replaySubject.current.next(undefined)\n setCompleted(true)\n }\n }, [replaySubject])\n\n return replaySubject.current\n}\n","import { type EffectCallback, useEffect } from \"react\"\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n useEffect(effect, [])\n}\n","import { useRef } from \"react\"\nimport { useEffectOnce } from \"./useEffectOnce\"\n\n// biome-ignore lint/suspicious/noExplicitAny: Expected any\nexport const useUnmount = (fn: () => any): void => {\n const fnRef = useRef(fn)\n\n // update the ref each render so if it change the newest callback will be invoked\n fnRef.current = fn\n\n useEffectOnce(() => () => fnRef.current())\n}\n","import { useCallback, useRef } from \"react\"\nimport { useUnmount } from \"./useUnmount\"\n\n/**\n * @param func Function to be debounced\n * @param wait time in ms to debounce function, default to 300\n * @returns the debounced callback function\n */\nexport const useDebounced = <T>(\n func: ((arg: T) => void) | (() => void),\n wait: number,\n options: {\n cancelOnUnmount?: boolean\n } = {},\n) => {\n const { cancelOnUnmount = false } = options\n const timeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const callback = useCallback(\n (arg: T) => {\n timeout.current !== null && clearTimeout(timeout.current)\n timeout.current = setTimeout(() => func(arg), wait)\n },\n [func, wait],\n )\n\n useUnmount(() => {\n if (cancelOnUnmount) {\n timeout.current && clearTimeout(timeout.current)\n }\n })\n\n return callback\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useMemoCompare = <T>(\n value: T,\n compare: (a: T, b: T) => boolean,\n) => {\n const lastValue = useRef<{ value: T }>({ value })\n\n return useMemo(() => {\n if (compare(value, lastValue.current.value)) {\n return lastValue.current.value\n }\n\n lastValue.current = { value }\n\n return value\n }, [value, compare])\n}\n","import { useEffectOnce } from \"./useEffectOnce\"\n\nexport const useMount = (fn: () => void) => {\n useEffectOnce(() => {\n fn()\n })\n}\n","import {\n BehaviorSubject,\n distinctUntilChanged,\n NEVER,\n type Observable,\n type Subscription,\n share,\n tap,\n} from \"rxjs\"\n\nexport type State<T, DefaultValue, Error = unknown> = {\n data: T | DefaultValue\n status: \"pending\" | \"success\" | \"error\"\n observableState: \"complete\" | \"error\" | \"live\"\n error: Error | undefined\n}\n\nexport interface ObservableStoreOptions<T, DefaultValue> {\n defaultValue: DefaultValue\n compareFn: ((a: T, b: T) => boolean) | undefined\n}\n\nexport class ObservableStore<T, DefaultValue, Error = unknown> {\n state: State<T, DefaultValue, Error>\n source$: Observable<T | undefined>\n sub: Subscription\n\n constructor({\n source$: miscSource$,\n defaultValue,\n compareFn,\n }: {\n source$: Observable<T> | (() => Observable<T> | undefined)\n } & ObservableStoreOptions<T, DefaultValue>) {\n const source$ =\n typeof miscSource$ === \"function\" ? miscSource$() : miscSource$\n\n const hasNoDefinedSource = source$ === undefined\n\n this.state = {\n data: source$ instanceof BehaviorSubject ? source$.value : defaultValue,\n status: hasNoDefinedSource ? \"success\" : \"pending\",\n observableState: hasNoDefinedSource ? \"complete\" : \"live\",\n error: undefined,\n }\n\n this.source$ = (source$ ?? NEVER).pipe(\n distinctUntilChanged(compareFn),\n tap({\n complete: () => {\n this.state = {\n ...this.state,\n status: \"success\",\n observableState: \"complete\",\n }\n },\n error: (error) => {\n this.state = {\n ...this.state,\n observableState: \"error\",\n status: \"error\",\n error,\n }\n },\n next: (data) => {\n this.state = { ...this.state, data }\n },\n }),\n share(),\n )\n\n /**\n * @important This eager subscription will optimistically update the state.\n * Any observable that is non async (behavior, of(x), etc) will have in fact their state completed\n * by the first render cycle.\n * Although we only correctly type sync state for `BehaviorSubject` we can in fact get the value in sync\n * for more than them.\n * Technically the whole pipe chain runs \"synchronously\".\n *\n * This is not a guarantee, just that in best case scenario there will be only one render.\n */\n this.sub = this.source$.subscribe()\n }\n\n subscribe = (next: () => void) => {\n // in some case the observable is already complete by the time we subscribe to it.\n if (this.state.observableState === \"complete\") {\n return () => {}\n }\n\n const sub = this.source$.subscribe({\n complete: next,\n error: next,\n next: next,\n })\n\n return () => {\n sub.unsubscribe()\n }\n }\n\n getSnapshot = () => {\n return this.state\n }\n}\n","import { type DependencyList, useEffect, useRef } from \"react\"\nimport type { Observable } from \"rxjs\"\nimport { arrayEqual, useLiveRef } from \"../../utils\"\nimport { ObservableStore } from \"./store\"\nimport type { UseObserveOptions } from \"./types\"\n\ntype StoreReference<T, DefaultValue> = {\n deps: DependencyList\n store: ObservableStore<T, DefaultValue | undefined>\n}\n\n/**\n * Mechanism to initialize / retrieve an existing observable store.\n *\n * - We cannot use `useMemo` because it is theoretically not stable. We need stability,\n * not performance optimization.\n * - Using `useState` would make the API not sync (or optimistically return the wrong value).\n * We want the returned value of a render cycle to be derived from the given arguments. `useState`\n * would force us to update the store asynchronously in a useEffect. Losing at least one render cycle.\n * - We are left with using refs to hold the latest references. We use comparison with given deps as well.\n * We are re-creating store during render cycles which is normally not recommended.\n * However this is \"okay\" since it is to be used inside a useSyncExternalStore and not directly in a render.\n */\nexport const useStore = <T, DefaultValue>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n options: UseObserveOptions<T, DefaultValue>,\n deps: DependencyList,\n): ObservableStore<T, DefaultValue | undefined> => {\n const optionsRef = useLiveRef(options)\n const storeRef = useRef<StoreReference<T, DefaultValue> | undefined>(\n undefined,\n )\n\n if (!storeRef.current || !arrayEqual([...deps], [...storeRef.current.deps])) {\n storeRef.current = {\n deps,\n store: new ObservableStore({\n source$,\n defaultValue: optionsRef.current.defaultValue,\n compareFn: (a, b) => optionsRef.current?.compareFn?.(a, b) ?? a === b,\n }),\n }\n }\n\n const store = storeRef.current.store\n\n useEffect(\n () => () => {\n store.sub.unsubscribe()\n },\n [store],\n )\n\n return store\n}\n","import { type DependencyList, useSyncExternalStore } from \"react\"\nimport type { BehaviorSubject, Observable } from \"rxjs\"\nimport type { UseObserveResult } from \"./types\"\nimport { useStore } from \"./useStore\"\n\ninterface Option<T, R = undefined> {\n defaultValue: R\n compareFn?: (a: T, b: T) => boolean\n}\n\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n): UseObserveResult<T, T>\n\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n options: Omit<Option<T>, \"defaultValue\">,\n): UseObserveResult<T, T>\n\nexport function useObserve<T>(\n source: Observable<T>,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n deps: DependencyList,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T>(\n source: () => Observable<T> | undefined,\n deps: DependencyList,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T, DefaultValue>(\n source: Observable<T>,\n options: Option<T, DefaultValue>,\n): UseObserveResult<T, DefaultValue>\n\nexport function useObserve<T, DefaultValue>(\n source: () => Observable<T>,\n options: Option<T, DefaultValue>,\n deps: DependencyList,\n): UseObserveResult<T, DefaultValue>\n\nexport function useObserve<T, DefaultValue = T>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n optionsOrDeps?: Partial<Option<DefaultValue>> | DependencyList,\n maybeDeps?: DependencyList,\n): UseObserveResult<T, DefaultValue | undefined> {\n const options =\n optionsOrDeps != null && !Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as Partial<Option<T, DefaultValue>>)\n : ({\n defaultValue: undefined,\n compareFn: undefined,\n } satisfies Partial<Option<T, DefaultValue>>)\n const deps =\n !maybeDeps && Array.isArray(optionsOrDeps)\n ? optionsOrDeps\n : typeof source$ === \"function\"\n ? (maybeDeps ?? [])\n : [source$]\n\n const store = useStore<T, DefaultValue | undefined>(source$, options, deps)\n\n const result = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getSnapshot,\n )\n\n return result\n}\n","import { defer, from, isObservable, type Observable, of } from \"rxjs\"\nimport { isPromiseLike } from \"./isPromiseLike\"\n\ntype FnReturnToObservable<T> =\n T extends Observable<infer ObservedData>\n ? ObservedData\n : T extends Promise<infer ThenData>\n ? ThenData\n : T\n\nexport function makeObservable<Data>(\n fn: Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(fn: Promise<Data>): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data> | Data,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data, Params>(\n fn: (params: Params) => Data,\n): (params: Params) => Observable<FnReturnToObservable<Data>>\n\n/**\n * Generic factory OR Observable\n */\nexport function makeObservable<Data, Return>(\n fn: Observable<Data> | (() => Return),\n): () => Observable<Data | FnReturnToObservable<Return>>\n\nexport function makeObservable<Data>(fn: Data): () => Observable<Data>\n\n/**\n * Convert the input into an observable.\n *\n * - Observable: return the same observable\n * - Promise: return an observable from the promise\n * - Data: return an observable from the data\n * - Function: Execute the function and return an observable from the result\n */\nexport function makeObservable<Data, Params>(\n something:\n | ((params: Params) => Observable<Data>)\n | Promise<Data>\n | Observable<Data>\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n | Data,\n): (params: Params) => Observable<Data> {\n if (isObservable(something)) return () => something\n\n if (isPromiseLike(something)) return () => from(something)\n\n if (typeof something !== \"function\") return () => of(something)\n\n const somethingAsFunction = something as\n | ((params: Params) => Observable<Data>)\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n\n return (params: Params) =>\n defer(() => {\n const result = somethingAsFunction(params)\n\n if (isPromiseLike(result)) {\n return from(result)\n }\n\n if (isObservable(result)) {\n return result\n }\n\n return of(result)\n })\n}\n","import { type DependencyList, useEffect } from \"react\"\nimport { catchError, EMPTY } from \"rxjs\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport type { SubscribeSource } from \"./types\"\n\nexport function useSubscribe<T>(\n source: SubscribeSource<T> | (() => T),\n deps: DependencyList = [],\n) {\n const sourceRef = useLiveRef(source)\n\n useEffect(() => {\n const sub = makeObservable(sourceRef.current)()\n .pipe(\n catchError((error) => {\n console.error(error)\n\n return EMPTY\n }),\n )\n .subscribe()\n\n return () => {\n sub.unsubscribe()\n }\n }, [...deps, sourceRef])\n}\n","import { type DependencyList, useCallback } from \"react\"\nimport { catchError, identity, retry } from \"rxjs\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport type { SubscribeSource } from \"./types\"\nimport { useSubscribe } from \"./useSubscribe\"\n\ninterface Option {\n retry?: boolean\n onError?: (error: unknown) => void\n}\n\nexport function useSubscribeEffect<T>(source: SubscribeSource<T>): void\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n): void\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n deps: DependencyList,\n): void\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n deps: DependencyList,\n): void\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n unsafeOptions?: Option | DependencyList,\n deps: DependencyList = [],\n) {\n const options =\n unsafeOptions != null && !Array.isArray(unsafeOptions)\n ? (unsafeOptions as Option)\n : ({} satisfies Option)\n const retryOption = options.retry ?? true\n const onErrorRef = useLiveRef(\n options.onError ??\n ((error: unknown) => {\n console.error(error)\n }),\n )\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: TODO\n const sourceAsObservable = useCallback(() => makeObservable(source)(), deps)\n\n const enhancerMakeObservable = useCallback(\n () =>\n sourceAsObservable().pipe(\n catchError((error) => {\n onErrorRef.current(error)\n\n throw error\n }),\n retryOption ? retry() : identity,\n ),\n [sourceAsObservable, retryOption, onErrorRef],\n )\n\n useSubscribe(enhancerMakeObservable, deps)\n}\n","import { hashKey, type QueryKey } from \"@tanstack/react-query\"\nimport { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport {\n fromEvent,\n type Observable,\n type Subscription,\n share,\n takeUntil,\n} from \"rxjs\"\n\ntype CacheEntry = {\n query$: Observable<unknown>\n signal: AbortSignal\n sub: Subscription | undefined\n isCompleted: boolean\n lastData: { value: unknown } | undefined\n}\n\nexport class QueryClient$ {\n public readonly queryMap: Map<string, CacheEntry> = new Map()\n\n getQuery(queryHash: string) {\n return this.queryMap.get(queryHash)\n }\n\n setQuery(\n queryKey: QueryKey,\n query$: Observable<unknown>,\n signal: AbortSignal,\n ) {\n const queryHash = hashKey(queryKey)\n\n const sharedQuery$ = query$.pipe(\n /**\n * abort signal is triggered on:\n * - manual cancellation from user\n * - unmounting the component\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-cancellation\n */\n takeUntil(fromEvent(signal, \"abort\")),\n share(),\n )\n\n const cacheEntry: CacheEntry = {\n query$: sharedQuery$,\n signal,\n sub: undefined,\n isCompleted: false,\n lastData: undefined,\n }\n\n this.queryMap.set(queryHash, cacheEntry)\n\n const sub = sharedQuery$.subscribe({\n next: (data) => {\n const entry = this.queryMap.get(queryHash)\n\n if (entry) {\n entry.lastData = { value: data }\n }\n },\n complete: () => {\n this.deleteQuery(queryHash)\n },\n })\n\n cacheEntry.sub = sub\n\n return cacheEntry\n }\n\n deleteQuery(queryHash: string) {\n const entry = this.queryMap.get(queryHash)\n\n if (!entry) return\n\n if (entry.sub) {\n entry.sub.unsubscribe()\n entry.sub = undefined\n }\n\n entry.isCompleted = true\n\n this.queryMap.delete(queryHash)\n }\n\n destroy() {\n this.queryMap.forEach((_, key) => {\n this.deleteQuery(key)\n })\n }\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined)\n\nexport const QueryClientProvider$ = memo(\n ({\n children,\n client: _client,\n }: {\n children: React.ReactNode\n client?: QueryClient$\n }) => {\n const [client] = useState(() => _client ?? new QueryClient$())\n\n useEffect(() => {\n return () => {\n client.destroy()\n }\n }, [client])\n\n return <Context.Provider value={client}>{children}</Context.Provider>\n },\n)\n\nexport const useQueryClient$ = () => {\n const client = useContext(Context)\n\n if (!client) {\n throw new Error(\n \"useReactJrxQueryClient must be used within a ReactJrxQueryProvider\",\n )\n }\n\n return client\n}\n","import {\n type DefaultError,\n type QueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\"\nimport { useEffect } from \"react\"\nimport { BehaviorSubject, type Observable, take } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport type UseMutation$Options<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n \"mutationFn\"\n> & {\n mutationFn: ((variables: TVariables) => Observable<TData>) | Observable<TData>\n}\n\nexport function useMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: UseMutation$Options<TData, TError, TVariables, TOnMutateResult>,\n queryClient?: QueryClient,\n) {\n const stateSubject = useConstant(\n () =>\n new BehaviorSubject<\n Pick<\n UseMutationResult<TData, TError, TVariables, TOnMutateResult>,\n \"status\" | \"isPending\" | \"isError\" | \"isSuccess\" | \"isIdle\"\n >\n >({\n status: \"idle\",\n isPending: false,\n isError: false,\n isSuccess: false,\n isIdle: true,\n }),\n )\n\n const result = useMutation<TData, TError, TVariables, TOnMutateResult>(\n {\n ...options,\n mutationFn: (variables: TVariables) => {\n let lastData: { value: TData } | undefined\n\n return new Promise<TData>((resolve, reject) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n source.pipe(take(1)).subscribe({\n next: (data) => {\n lastData = { value: data }\n },\n error: (error) => {\n reject(error)\n },\n complete: () => {\n if (lastData === undefined)\n return reject(new Error(\"Stream completed without any data\"))\n\n resolve(lastData.value)\n },\n })\n })\n },\n },\n queryClient,\n )\n\n const { status, isPending, isError, isSuccess, isIdle } = result\n\n useEffect(() => {\n stateSubject.next({\n status,\n isPending,\n isError,\n isSuccess,\n isIdle,\n })\n }, [status, isPending, isError, isSuccess, isIdle, stateSubject])\n\n return { ...result, state$: stateSubject }\n}\n","import {\n type DefaultError,\n type MutationKey,\n type QueryClient,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n BehaviorSubject,\n filter,\n first,\n noop,\n type Subject,\n switchMap,\n} from \"rxjs\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport function useContactMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n {\n onMutate,\n ...options\n }: UseMutation$Options<TData | null, TError, TVariables, TContext> & {\n mutationKey: MutationKey\n },\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n type TDataOrNull = TData | null\n const mutationKey = options.mutationKey\n\n const { mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; ready$: Subject<boolean> },\n TContext\n >(\n {\n ...options,\n onMutate: onMutate\n ? ({ variables }, ...rest) => onMutate(variables, ...rest)\n : undefined,\n onSuccess(data, { variables }, ...rest) {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError(error, { variables }, ...rest) {\n return options.onError?.(error, variables, ...rest)\n },\n onSettled(data, error, { variables }, ...rest) {\n return options.onSettled?.(data, error, variables, ...rest)\n },\n mutationFn: ({ ready$, variables }) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n return ready$.pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => source),\n )\n },\n },\n queryClient,\n )\n\n const mutateAsyncConcat = useCallback(\n async (variables: TVariables) => {\n const mutations = client.getMutationCache().findAll({\n mutationKey,\n exact: true,\n })\n\n const subject = new BehaviorSubject(false)\n\n const result = mutateAsync({ variables, ready$: subject })\n\n await Promise.all(\n mutations.map((mutation) => mutation.continue().catch(noop)),\n )\n\n subject.next(true)\n\n return await result.finally(() => {\n subject.complete()\n })\n },\n [mutateAsync, client, mutationKey],\n )\n\n const mutateConcat = useCallback(\n (variables: TVariables) => {\n mutateAsyncConcat(variables).catch(noop)\n },\n [mutateAsyncConcat],\n )\n\n return { ...rest, mutate: mutateConcat, mutateAsync: mutateAsyncConcat }\n}\n","import {\n type DefaultError,\n hashKey,\n type QueryClient,\n type QueryFunctionContext,\n type QueryKey,\n type UseQueryOptions,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { defer, delay, type Observable, take } from \"rxjs\"\nimport { useQueryClient$ } from \"./QueryClientProvider$\"\n\nexport function useQuery$<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n {\n queryFn,\n ...options\n }: Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\"\n > & {\n queryFn:\n | ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\n | Observable<TQueryFnData>\n },\n queryClient?: QueryClient,\n) {\n const _queryClient = useQueryClient(queryClient)\n const queryClient$ = useQueryClient$()\n\n const queryFnAsync = (context: QueryFunctionContext<TQueryKey>) => {\n return new Promise<TQueryFnData>((resolve, reject) => {\n const getSource = () =>\n defer(() =>\n typeof queryFn === \"function\" ? queryFn(context) : queryFn,\n )\n\n const queryHash = hashKey(context.queryKey)\n\n const queryAlreadyInCache = queryClient$.getQuery(queryHash)\n\n const queryCacheEntry =\n queryAlreadyInCache ??\n queryClient$.setQuery(context.queryKey, getSource(), context.signal)\n\n const refetchIfNeeded = () => {\n if (queryCacheEntry?.isCompleted === false) {\n setTimeout(() => {\n _queryClient?.refetchQueries({\n queryKey: context.queryKey,\n exact: true,\n })\n })\n }\n }\n\n // if the observable returns results synchronously\n if (!queryAlreadyInCache && queryCacheEntry.lastData !== undefined) {\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n\n return\n }\n\n const query$ = queryCacheEntry.query$\n\n query$\n .pipe(\n take(1),\n /**\n * If several values are emitted during this delay, we will only\n * keep the last value. This is unfortunate but it's the best we can do\n * for now.\n */\n delay(1),\n )\n .subscribe({\n error: (error) => {\n return reject(error)\n },\n complete: () => {\n if (queryCacheEntry?.lastData === undefined) {\n if (queryCacheEntry.signal.aborted) {\n return resolve(undefined as TQueryFnData)\n }\n\n console.log(\n `cancelled due to stream completing without data for query ${queryHash}`,\n queryCacheEntry?.lastData,\n )\n\n _queryClient.cancelQueries({\n queryKey: context.queryKey,\n exact: true,\n })\n\n return resolve(undefined as TQueryFnData)\n }\n\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n },\n })\n })\n }\n\n const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n {\n ...options,\n queryFn: queryFnAsync,\n },\n queryClient,\n )\n\n return result\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n defaultIfEmpty,\n first,\n fromEvent,\n ignoreElements,\n merge,\n tap,\n} from \"rxjs\"\nimport { useRefOnce } from \"../utils\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport class SwitchMutationCancelError extends Error {\n constructor(message = \"Mutation canceled\") {\n super(message)\n this.name = \"SwitchMutationCancelError\"\n }\n}\n\nexport function useSwitchMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n {\n mutationFn,\n onMutate,\n onError,\n onSettled,\n ...options\n }: UseMutation$Options<TData | null, TError, TVariables, TOnMutateResult>,\n queryClient?: QueryClient,\n) {\n const previousMutationCancelRef = useRefOnce(() => new AbortController())\n type TDataOrNull = TData | null\n\n const { mutate, mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; abort: AbortSignal },\n TOnMutateResult\n >(\n {\n ...options,\n mutationFn: useCallback(\n ({\n variables,\n abort,\n }: {\n variables: TVariables\n abort: AbortSignal\n }) => {\n if (abort.aborted) {\n throw new SwitchMutationCancelError()\n }\n\n const source =\n typeof mutationFn === \"function\"\n ? mutationFn(variables)\n : mutationFn\n\n return merge(\n source,\n fromEvent(abort, \"abort\").pipe(\n tap(() => {\n throw new SwitchMutationCancelError()\n }),\n ignoreElements(),\n ),\n ).pipe(first(), defaultIfEmpty(null))\n },\n [mutationFn],\n ),\n onMutate: onMutate\n ? ({ variables }, ...rest) => {\n return onMutate(variables, ...rest)\n }\n : undefined,\n onSuccess: (data, { variables }, ...rest) => {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError: (error, { variables }, ...rest) => {\n return onError?.(error, variables, ...rest)\n },\n onSettled: (data, error, { variables }, ...rest) => {\n return onSettled?.(data, error, variables, ...rest)\n },\n },\n queryClient,\n )\n\n const mutateSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutate({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutate, previousMutationCancelRef],\n )\n\n const mutateAsyncSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutateAsync({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutateAsync, previousMutationCancelRef],\n )\n\n return { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch }\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\")\n","import type { Adapter } from \"./Adapter\"\n\nexport const createLocalforageAdapter = (forage: {\n getItem: (key: string) => Promise<string | null>\n setItem: (key: string, value: string) => Promise<string>\n}): Adapter => ({\n getItem: async (key: string) => {\n const serializedValue = await forage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key: string, value: unknown) => {\n await forage.setItem(key, JSON.stringify(value))\n },\n\n removeItem: async (_: string) => {},\n\n clear: async () => {},\n})\n","import type { Adapter } from \"./Adapter\"\n\nconst normalizeStore = (store: unknown) => {\n if (!store || typeof store !== \"object\") {\n return undefined\n }\n\n return store\n}\n\n/**\n * Create an adapter which use one unique store entry to store all\n * state. When using many signals it can help with maintenance to keep things\n * tidy.\n */\nconst createSharedStoreAdapter = ({\n adapter,\n key,\n}: {\n adapter: Adapter\n key: string\n}): Adapter => ({\n clear: async () => {\n return await adapter.removeItem(key)\n },\n\n removeItem: async (keyToDelete) => {\n const unsafeStore = await adapter.getItem(key)\n const { [keyToDelete]: toRemove, ...rest } =\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n normalizeStore(unsafeStore) ?? ({} as any)\n\n await adapter.setItem(key, rest)\n },\n\n getItem: async (itemKey: string) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n if (itemKey in store) {\n return store[itemKey as keyof typeof store]\n }\n\n return undefined\n },\n\n setItem: async (itemKey: string, value: unknown) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n await adapter.setItem(key, { ...store, [itemKey]: value })\n },\n})\n\nexport const createLocalStorageAdapter = ({\n key,\n}: {\n key?: string\n} = {}): Adapter => {\n if (key) {\n return createSharedStoreAdapter({\n adapter: createLocalStorageAdapter(),\n key,\n })\n }\n\n return {\n clear: async () => {\n localStorage.clear()\n },\n\n removeItem: async (key) => {\n localStorage.removeItem(key)\n },\n\n getItem: async (key) => {\n const serializedValue = localStorage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key, value) => {\n localStorage.setItem(key, JSON.stringify(value))\n },\n }\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { SIGNAL_RESET } from \"./constants\"\n\n/**\n * Distributive helper to validate the shape of the updater function\n * and prevent covariance\n */\n// biome-ignore lint/suspicious/noExplicitAny: Expected to prevent covariance\ntype ValidateShape<T, U> = T extends any\n ? U extends T\n ? U extends object\n ? { [K in keyof U]: K extends keyof T ? T[K] : never }\n : U\n : never\n : never\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport type SignalValue<T extends Signal<any, any>> = T[\"value\"]\n\nexport type SignalWithKey<T> = Signal<T> & {\n key: string\n}\n\nexport class Signal<\n T,\n K extends string | undefined = undefined,\n> extends BehaviorSubject<T> {\n constructor(\n public config: {\n default: T\n key: K\n },\n ) {\n super(config.default)\n }\n\n update = <U>(\n valueOrUpdater:\n | ((prev: T) => U & ValidateShape<T, U>)\n // biome-ignore lint/complexity/noBannedTypes: TODO\n | (T extends Function ? never : T)\n | typeof SIGNAL_RESET,\n ): void => {\n if (valueOrUpdater === SIGNAL_RESET) {\n super.next(this.config.default)\n } else if (typeof valueOrUpdater === \"function\") {\n const updater = valueOrUpdater as (prev: T) => T\n\n super.next(updater(this.value))\n } else {\n super.next(valueOrUpdater as T)\n }\n }\n\n /**\n * @deprecated Use `next` instead\n */\n setValue = this.update.bind(this)\n\n /**\n * @deprecated Use `this` instead\n */\n get subject() {\n return this\n }\n\n get key() {\n return this.config.key\n }\n}\n\nexport class VirtualSignal<T> {\n constructor(public config: { default: T }) {}\n}\n// biome-ignore lint/complexity/noBannedTypes: TODO\nexport function signal(config: {}): Signal<undefined, undefined>\n\nexport function signal<T = undefined, K extends string = string>(config: {\n key: K\n}): Signal<T | undefined, K>\n\nexport function signal<T, K extends string = string>(config: {\n key: K\n default: T\n}): Signal<T, K>\n\nexport function signal<T>(config: {\n key?: undefined\n}): Signal<T | undefined, undefined>\n\nexport function signal<T>(config: {\n key?: undefined\n default: T\n}): Signal<T, undefined>\n\nexport function signal<K extends string>(config: {\n key: K\n default?: undefined\n}): Signal<undefined, K>\n\nexport function signal<T, K extends string | undefined = undefined>(\n config: { default?: T; key?: K } = {},\n) {\n return new Signal({\n key: undefined,\n ...config,\n default: config.default ?? undefined,\n })\n}\n\nexport function virtualSignal<T>(config: {\n default: T\n key?: string\n}): VirtualSignal<T> {\n return new VirtualSignal(config)\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { Signal, type VirtualSignal } from \"./Signal\"\n\nexport class SignalContext {\n /**\n * items only get added as they are created. The only time we should cleanup\n * are on context destroy. This is to ensure later re-use of virtual signals\n * return the same persisted state.\n */\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n signals = new BehaviorSubject(new Map<VirtualSignal<unknown>, Signal<any>>())\n\n public isDestroyed = false\n\n getOrCreateSignal<T>(virtualSignal: VirtualSignal<T>): Signal<T> {\n const existingSignal = this.signals.value.get(virtualSignal)\n\n if (existingSignal) {\n return existingSignal as Signal<T>\n }\n\n const newSignal = new Signal<T>({ ...virtualSignal.config, key: undefined })\n\n this.signals.value.set(virtualSignal, newSignal)\n this.signals.next(this.signals.value)\n\n return newSignal\n }\n\n destroy() {\n this.signals.value.forEach((signal) => {\n signal.complete()\n })\n this.signals.value.clear()\n this.signals.complete()\n this.isDestroyed = true\n }\n}\n","import { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport { useRefOnce } from \"../../utils/react/useRefOnce\"\nimport type { VirtualSignal } from \"../Signal\"\nimport { SignalContext } from \"../SignalContext\"\n\nexport type SignalContextType = SignalContext\n\nexport const SignalReactContext = createContext<SignalContextType>(\n new SignalContext(),\n)\n\nexport const SignalContextProvider = memo(\n ({ children }: { children: React.ReactNode }) => {\n const signalContextRef = useRefOnce<SignalContextType>(\n () => new SignalContext(),\n )\n const signalContext = signalContextRef.current\n const [isDestroyed, setIsDestroyed] = useState(false)\n\n if (isDestroyed) {\n signalContextRef.current = new SignalContext()\n setIsDestroyed(false)\n }\n\n const value = signalContext\n\n useEffect(() => {\n return () => {\n signalContextRef.current?.destroy()\n // force re-render\n setIsDestroyed(true)\n }\n }, [signalContextRef])\n\n return (\n <SignalReactContext.Provider value={value}>\n {children}\n </SignalReactContext.Provider>\n )\n },\n)\n\nexport const useSignalContext = () => {\n const value = useContext(SignalReactContext)\n\n return value\n}\n\nexport const useMakeOrRetrieveSignal = (\n virtualSignal?: VirtualSignal<unknown>,\n) => {\n const signalContext = useSignalContext()\n\n const signal = virtualSignal\n ? signalContext.getOrCreateSignal(virtualSignal)\n : undefined\n\n return signal\n}\n","export function isShallowEqual<A, B>(objA: A, objB: B): boolean {\n // Check if both objects are null or undefined\n if (objA === null || objA === undefined || objB === undefined) {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects are primitives\n if (typeof objA !== \"object\" || typeof objB !== \"object\") {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects have the same prototype\n if (objA.constructor !== objB?.constructor) {\n return false\n }\n\n // Check if both objects have the same keys\n const keysA = Object.keys(objA) as Array<keyof A>\n const keysB = Object.keys(objB) as Array<keyof A>\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n // Check if the values of the keys are equal\n for (const key of keysA) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: TODO\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n if (!objB.hasOwnProperty(key) || objA[key] !== (objB as any)[key]) {\n return false\n }\n }\n\n // If all checks pass, the objects are considered shallowly equal\n return true\n}\n","export const IDENTIFIER_PERSISTENCE_KEY = \"__reactjrx\"\n","import { catchError, from, of, switchMap } from \"rxjs\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { IDENTIFIER_PERSISTENCE_KEY } from \"./constants\"\nimport type { PersistenceEntry, SignalPersistenceConfig } from \"./types\"\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n if (\n typeof unknownValue === \"object\" &&\n unknownValue !== null &&\n IDENTIFIER_PERSISTENCE_KEY in unknownValue &&\n unknownValue[IDENTIFIER_PERSISTENCE_KEY] === IDENTIFIER_PERSISTENCE_KEY\n ) {\n return unknownValue as PersistenceEntry\n }\n\n return undefined\n}\n\nexport const persistValue = ({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) => {\n const { signal, version } = config\n const state = signal.getValue()\n\n const value = {\n value: state,\n [IDENTIFIER_PERSISTENCE_KEY]: IDENTIFIER_PERSISTENCE_KEY,\n migrationVersion: version,\n } satisfies PersistenceEntry\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Persist value\",\n value,\n `for signal ${signal.config.key}`,\n )\n }\n\n return from(adapter.setItem(signal.config.key, value)).pipe(\n catchError((e) => {\n console.error(e)\n\n return of(null)\n }),\n )\n}\n\nexport function hydrateValueToSignal({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) {\n const { hydrate = ({ value }) => value, signal, version } = config\n\n return from(adapter.getItem(signal.config.key)).pipe(\n switchMap((value) => {\n const normalizedValue = getNormalizedPersistanceValue(value)\n\n if (!normalizedValue) return of(value)\n\n const storedVersionIsInvalid =\n typeof normalizedValue.migrationVersion !== \"number\"\n\n const signalVersionIsSuperior =\n normalizedValue.migrationVersion !== undefined &&\n version > normalizedValue.migrationVersion\n\n if (\n storedVersionIsInvalid ||\n signalVersionIsSuperior ||\n normalizedValue.value === undefined\n ) {\n return of(value)\n }\n\n const correctVersionValue = normalizedValue.value\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Hydrate value\",\n normalizedValue,\n `for signal ${signal.config.key}`,\n )\n }\n\n signal.setValue(hydrate({ value: correctVersionValue, version }))\n\n return of(value)\n }),\n )\n}\n","import {\n asyncScheduler,\n catchError,\n EMPTY,\n from,\n map,\n merge,\n of,\n share,\n switchMap,\n tap,\n throttleTime,\n zip,\n} from \"rxjs\"\nimport type { Signal } from \"../Signal\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { hydrateValueToSignal, persistValue } from \"./helpers\"\nimport type { SignalPersistenceConfig } from \"./types\"\n\nexport function persistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries: Array<SignalPersistenceConfig<Signal<any, string>>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Requires a stable instance otherwise the hydration\n * process will start again. This is useful when you\n * need to change adapter during runtime.\n */\n adapter: Adapter\n}) {\n const signalsHydrated$ =\n entries.length === 0\n ? of([])\n : zip(\n ...entries.map((config) =>\n hydrateValueToSignal({\n adapter,\n config,\n }),\n ),\n )\n\n const isHydrated$ = signalsHydrated$.pipe(\n tap(onHydrated),\n catchError((error) => {\n console.error(\"Unable to hydrate\", error)\n\n return EMPTY\n }),\n share(),\n )\n\n /**\n * Start persisting to the current adapter\n * as soon as signals are hydrated. Will stop\n * whenever hydration process starts again\n */\n const persisted$ = isHydrated$.pipe(\n switchMap(() =>\n merge(\n ...entries.map((config) =>\n config.signal.pipe(\n throttleTime(500, asyncScheduler, {\n trailing: true,\n }),\n switchMap(() =>\n from(\n persistValue({\n adapter,\n config,\n }),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n\n return merge(\n isHydrated$.pipe(\n map(() => ({\n type: \"hydrated\" as const,\n })),\n ),\n persisted$.pipe(\n map(() => ({\n type: \"persisted\" as const,\n })),\n ),\n )\n}\n","import { concatMap, merge, of, scan, switchMap } from \"rxjs\"\nimport { useLiveBehaviorSubject } from \"../../binding/useLiveBehaviorSubject\"\nimport { useObserve } from \"../../binding/useObserve/useObserve\"\nimport { useLiveRef } from \"../../utils/react/useLiveRef\"\nimport { isShallowEqual } from \"../../utils/shallowEqual\"\nimport type { Adapter } from \"../persistence/adapters/Adapter\"\nimport { persistSignals } from \"../persistence/persistSignals\"\nimport type { SignalPersistenceConfig } from \"../persistence/types\"\n\n/**\n * Make sure to pass stable reference of entries and adapter if you don't\n * intentionally want to start over the process.\n *\n * `isHydrated` will be `true` after the first successful hydration. This value\n * will be reset as soon as the adapter reference changes.\n */\nexport function usePersistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n /**\n * Passing a new list of entries will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * infinite loop.\n */\n\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries?: Array<SignalPersistenceConfig<any>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Passing a new adapter reference will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * infinite loop.\n */\n adapter?: Adapter\n}): { isHydrated: boolean } {\n const onHydratedRef = useLiveRef(onHydrated)\n const adapterSubject = useLiveBehaviorSubject(adapter)\n const entriesSubject = useLiveBehaviorSubject(entries)\n\n const result = useObserve(\n () => {\n const persistence$ = adapterSubject.pipe(\n switchMap((adapter) => {\n if (!adapter) return of({ type: \"reset\" })\n\n return merge(\n of({ type: \"reset\" }),\n entriesSubject.pipe(\n concatMap((entries) =>\n persistSignals({\n adapter,\n entries,\n onHydrated: () => {\n onHydratedRef.current?.()\n },\n }),\n ),\n ),\n )\n }),\n )\n\n return persistence$.pipe(\n scan(\n (acc, event) => {\n if (event.type === \"reset\") return { isHydrated: false }\n if (event.type === \"hydrated\") return { isHydrated: true }\n\n return acc\n },\n { isHydrated: false as boolean },\n ),\n )\n },\n { defaultValue: { isHydrated: false }, compareFn: isShallowEqual },\n [adapterSubject, entriesSubject],\n )\n\n return result.data\n}\n","import { type Signal, VirtualSignal } from \"../Signal\"\nimport {\n useMakeOrRetrieveSignal,\n useSignalContext,\n} from \"./SignalContextProvider\"\n\nexport function useSignalReference<T>(\n signal: Signal<T> | VirtualSignal<T>,\n): Signal<T> {\n const signalContext = useSignalContext()\n\n if (signal instanceof VirtualSignal && !signalContext) {\n throw new Error(\n \"useSignalValue must be used within a SignalContextProvider\",\n )\n }\n\n return (useMakeOrRetrieveSignal(\n signal instanceof VirtualSignal ? signal : undefined,\n ) ?? signal) as Signal<T>\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport function useSetSignal<T>(signal: Signal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: VirtualSignal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n\n return finalSignal.update\n}\n","import { distinctUntilChanged, map } from \"rxjs\"\nimport { useObserve } from \"../../binding/useObserve/useObserve\"\nimport { useLiveRef } from \"../../utils\"\nimport type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport function useSignalValue<T>(signal: VirtualSignal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: VirtualSignal<T>,\n selector: (value: T) => SelectValue,\n): SelectValue\n\nexport function useSignalValue<T>(signal: Signal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: Signal<T>,\n selector: (value: T) => SelectValue,\n): SelectValue\n\nexport function useSignalValue<T, SelectValue>(\n signal: Signal<T>,\n selector: (value: T) => SelectValue,\n): SelectValue | undefined\n\nexport function useSignalValue(\n signal: Signal<unknown> | VirtualSignal<unknown>,\n selector?: (value: unknown) => unknown,\n) {\n const selectorRef = useLiveRef(selector)\n\n const finalSignal = useSignalReference(signal)\n\n return useObserve(\n () => {\n const defaultSelector = selectorRef.current ?? ((value: unknown) => value)\n\n const observed$ = finalSignal.pipe(\n map(defaultSelector),\n distinctUntilChanged(),\n )\n\n return observed$\n },\n {\n defaultValue: selector\n ? selector?.(finalSignal.value)\n : finalSignal.value,\n },\n [finalSignal],\n ).data\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSetSignal } from \"./useSetSignal\"\nimport { useSignalReference } from \"./useSignalReference\"\nimport { useSignalValue } from \"./useSignalValue\"\n\nexport function useSignal<T>(\n signal: VirtualSignal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T | undefined, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n const value = useSignalValue(signal)\n const setValue = useSetSignal(signal)\n\n return [value, setValue, finalSignal] as const\n}\n","import { useConstant } from \"../../utils\"\nimport type { Signal } from \"../Signal\"\nimport { useSignalValue } from \"./useSignalValue\"\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const useSignalState = <S extends Signal<any, any>>(\n fn: () => S,\n): [S[\"value\"], S] => {\n const signal = useConstant(fn)\n const value = useSignalValue(signal)\n\n return [value, signal] as const\n}\n"],"names":["UNSET_SYMBOL","useRefOnce","fn","ref","useRef","current","useConstant","useLiveBehaviorSubject","state","$","_c","t0","BehaviorSubject","subject","t1","t2","next","useEffect","useLiveRef","value","useMemo","useObservableState","defaultValue","subject$","setState","t3","getValue","t4","arrayEqual","a","b","length","every","v","i","isDefined","arg","isPromiseLike","Promise","then","catch","isServer","window","getDelay","backoffDelay","maxInterval","Math","min","exponentialBackoffDelay","iteration","initialInterval","retryBackoff","config","retry","retryDelay","retryAfterDelay","retryAfter","of","maxRetries","Number","POSITIVE_INFINITY","shouldRetry","normalizedConfig","resetOnSuccess","source","defer","caughtErrors","shouldRetryFn","attempt","error","pipe","catchError","caughtErrorResult$","caughtError","mergeMap","merge","throwError","retryWhen","errors","concatMap","first","timer","e","tap","useUnmountObservable","replaySubject","ReplaySubject","completed","setCompleted","useState","undefined","useEffectOnce","effect","Symbol","for","useUnmount","fnRef","useDebounced","func","wait","options","cancelOnUnmount","timeout","clearTimeout","setTimeout","callback","useMemoCompare","compare","lastValue","useMount","ObservableStore","source$","sub","constructor","miscSource$","compareFn","hasNoDefinedSource","data","status","observableState","NEVER","distinctUntilChanged","complete","share","subscribe","unsubscribe","getSnapshot","useStore","deps","optionsRef","storeRef","store","useObserve","optionsOrDeps","maybeDeps","Array","isArray","useSyncExternalStore","makeObservable","something","isObservable","from","somethingAsFunction","params","result","useSubscribe","sourceRef","_temp","console","EMPTY","useSubscribeEffect","unsafeOptions","retryOption","onErrorRef","onError","sourceAsObservable","useCallback","enhancerMakeObservable","identity","QueryClient$","queryMap","Map","getQuery","queryHash","get","setQuery","queryKey","query$","signal","hashKey","sharedQuery$","takeUntil","fromEvent","cacheEntry","isCompleted","lastData","set","entry","deleteQuery","delete","destroy","forEach","_","key","Context","createContext","QueryClientProvider$","memo","children","client","_client","useQueryClient$","useContext","Error","useMutation$","queryClient","stateSubject","variables","resolve","reject","mutationFn","take","useMutation","isPending","isError","isSuccess","isIdle","state$","useContactMutation$","onMutate","useQueryClient","mutationKey","t9","t10","ready$","variables_3","filter","switchMap","onSuccess","variables_0","rest_0","rest","t5","t6","variables_1","rest_1","onSettled","data_0","error_0","t7","t8","variables_2","rest_2","mutateAsync","rest_3","variables_4","mutations","getMutationCache","findAll","exact","all","map","_temp2","finally","mutateAsyncConcat","variables_5","noop","mutateConcat","mutate","mutation","continue","isReady","useQuery$","queryFn","_queryClient","queryClient$","context","getSource","queryAlreadyInCache","queryCacheEntry","refetchIfNeeded","refetchQueries","delay","aborted","log","cancelQueries","queryFnAsync","useQuery","SwitchMutationCancelError","message","name","useSwitchMutation$","previousMutationCancelRef","abort","ignoreElements","defaultIfEmpty","AbortController","mutateSwitch","mutateAsyncSwitch","t11","SIGNAL_RESET","createLocalforageAdapter","forage","getItem","serializedValue","JSON","parse","setItem","stringify","removeItem","clear","normalizeStore","createSharedStoreAdapter","adapter","keyToDelete","unsafeStore","toRemove","itemKey","createLocalStorageAdapter","localStorage","Signal","default","update","valueOrUpdater","updater","setValue","bind","VirtualSignal","virtualSignal","SignalContext","signals","isDestroyed","getOrCreateSignal","existingSignal","newSignal","SignalReactContext","SignalContextProvider","signalContextRef","signalContext","setIsDestroyed","jsx","useSignalContext","useMakeOrRetrieveSignal","isShallowEqual","objA","objB","keysA","Object","keys","keysB","hasOwnProperty","IDENTIFIER_PERSISTENCE_KEY","getNormalizedPersistanceValue","unknownValue","persistValue","version","migrationVersion","process","env","NODE_ENV","hydrateValueToSignal","hydrate","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","persistSignals","entries","onHydrated","isHydrated$","zip","persisted$","throttleTime","asyncScheduler","trailing","type","usePersistSignals","onHydratedRef","adapterSubject","entriesSubject","adapter_0","scan","isHydrated","acc","event","useSignalReference","useSetSignal","useSignalValue","selector","selectorRef","finalSignal","defaultSelector","useSignal","useSignalState"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,18 @@
1
1
  export * from './lib/binding/useLiveBehaviorSubject';
2
2
  export * from './lib/binding/useObservableState';
3
- export * from './lib/binding/useObserve';
3
+ export * from './lib/binding/useObserve/useObserve';
4
4
  export * from './lib/binding/useSubscribe';
5
5
  export * from './lib/binding/useSubscribeEffect';
6
+ export * from './lib/binding/useUnmountObservable';
6
7
  export * from './lib/queries/QueryClientProvider$';
7
8
  export * from './lib/queries/useConcatMutation$';
8
9
  export * from './lib/queries/useMutation$';
9
10
  export * from './lib/queries/useQuery$';
10
11
  export * from './lib/queries/useSwitchMutation$';
11
12
  export * from './lib/state/constants';
12
- export * from './lib/state/persistance/adapters/createLocalforageAdapter';
13
- export * from './lib/state/persistance/adapters/createLocalStorageAdapter';
14
- export type { SignalPersistenceConfig } from './lib/state/persistance/types';
13
+ export * from './lib/state/persistence/adapters/createLocalforageAdapter';
14
+ export * from './lib/state/persistence/adapters/createLocalStorageAdapter';
15
+ export type { SignalPersistenceConfig } from './lib/state/persistence/types';
15
16
  export * from './lib/state/react/SignalContextProvider';
16
17
  export * from './lib/state/react/usePersistSignals';
17
18
  export * from './lib/state/react/useSetSignal';