@better-typed/react-hyper-fetch
Advanced tools
Comparing version
@@ -1,2 +0,2 @@ | ||
var Ne=Object.create;var ue=Object.defineProperty,We=Object.defineProperties,Ge=Object.getOwnPropertyDescriptor,Je=Object.getOwnPropertyDescriptors,$e=Object.getOwnPropertyNames,ve=Object.getOwnPropertySymbols,ze=Object.getPrototypeOf,Ue=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?ue(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&Oe(e,r,t[r]);if(ve)for(var r of ve(t))He.call(t,r)&&Oe(e,r,t[r]);return e},j=(e,t)=>We(e,Je(t));var Xe=(e,t)=>{for(var r in t)ue(e,r,{get:t[r],enumerable:!0})},ke=(e,t,r,g)=>{if(t&&typeof t=="object"||typeof t=="function")for(let d of $e(t))!Ue.call(e,d)&&d!==r&&ue(e,d,{get:()=>t[d],enumerable:!(g=Ge(t,d))||g.enumerable});return e};var Ye=(e,t,r)=>(r=e!=null?Ne(ze(e)):{},ke(t||!e||!e.__esModule?ue(r,"default",{value:e,enumerable:!0}):r,e)),Ze=e=>ke(ue({},"__esModule",{value:!0}),e);var ce=(e,t,r)=>new Promise((g,d)=>{var l=s=>{try{c(r.next(s))}catch(T){d(T)}},f=s=>{try{c(r.throw(s))}catch(T){d(T)}},c=s=>s.done?g(s.value):Promise.resolve(s.value).then(l,f);c((r=r.apply(e,t)).next())});var st={};Xe(st,{getDetailsState:()=>J,getInitialState:()=>ge,getTimestamp:()=>Me,getValidCacheData:()=>we,initialState:()=>G,isEmpty:()=>Re,isEqual:()=>ie,isStaleCacheData:()=>Te,useAppManager:()=>rt,useCache:()=>nt,useCacheDefaultOptions:()=>he,useCommandEvents:()=>Y,useDebounce:()=>te,useFetch:()=>Ve,useFetchDefaultOptions:()=>P,useQueue:()=>tt,useQueueDefaultOptions:()=>be,useSubmit:()=>et,useSubmitDefaultOptions:()=>ye,useTrackedState:()=>Z});module.exports=Ze(st);var Le=require("react"),re=require("@better-typed/react-lifecycle-hooks"),le=require("@better-typed/hyper-fetch");var L=require("react"),qe=require("@better-typed/hyper-fetch"),Pe=require("@better-typed/react-lifecycle-hooks"),Y=({command:e,dispatcher:t,logger:r,actions:g,setCacheData:d})=>{let{cache:l,commandManager:f}=e.builder,c=(0,L.useRef)(null),s=(0,L.useRef)(null),T=(0,L.useRef)(null),C=(0,L.useRef)(null),x=(0,L.useRef)(null),S=(0,L.useRef)(null),o=(0,L.useRef)(null),R=(0,L.useRef)(null),O=(0,L.useRef)(null),b=(0,L.useRef)(new Map),U=(0,L.useRef)(null),E=n=>{let u=b.current.get(n);u==null||u.unmount(),b.current.delete(n)},D=()=>{let n=b.current;Array.from(n.values()).forEach(i=>{i.unmount()}),n.clear()},h=(n,u,i)=>{var I,Q,H,B,V;let{isOffline:z,isFailed:N,isCanceled:oe}=i;e.offline&&z&&N?(r.debug("Performing offline error callback",{data:u,details:i}),(I=C.current)==null||I.call(C,{response:u[1],command:n,details:i})):oe?(r.debug("Performing abort callback",{data:u,details:i}),(Q=T.current)==null||Q.call(T,{response:u[1],command:n,details:i})):N?(r.debug("Performing error callback",{data:u,details:i}),(B=s.current)==null||B.call(s,{response:u[1],command:n,details:i})):(r.debug("Performing success callback",{data:u,details:i}),(H=c.current)==null||H.call(c,{response:u[0],command:n,details:i})),(V=x.current)==null||V.call(x,{response:u,command:n,details:i})},a=n=>({isLoading:u})=>{let i=!u&&!t.hasRunningRequests(n);(u||i)&&g.setLoading(u,!1)},p=(n,u)=>{var i;(i=R.current)==null||i.call(R,n,u)},m=(n,u)=>{var i;(i=O.current)==null||i.call(O,n,u)},k=n=>u=>{var i;(i=S.current)==null||i.call(S,{command:n,details:u})},q=n=>u=>{var i;(i=o.current)==null||i.call(o,{command:n,details:u})},w=n=>(u,i)=>{h(n,u,i)},v=({requestId:n})=>{E(n)},M=n=>()=>{let u=[null,(0,qe.getErrorMessage)("abort"),0],i={retries:0,timestamp:+new Date,isFailed:!1,isCanceled:!0,isOffline:!1};h(n,u,i)},A=()=>{var n;(n=U.current)==null||n.unmount(),U.current=null},K=n=>{let u=f.events.onLoading(n.queueKey,a(n.queueKey)),i=l.events.onData(n.cacheKey,d),z=f.events.onAbort(n.abortKey,M(n)),N=()=>{u(),i(),z()};return A(),U.current={unmount:N},N},W=(n,u)=>{if(!u){let{queueKey:B,cacheKey:V}=n,De=f.events.onRequestStart(B,k(n)),F=f.events.onResponseStart(B,q(n)),X=f.events.onUploadProgress(B,m),ae=f.events.onDownloadProgress(B,p),ee=f.events.onResponse(V,w(n)),fe=()=>{ae(),X(),De(),F(),ee()};return b.current.set(B,{unmount:fe}),fe}let i=f.events.onRemoveById(u,v),z=f.events.onRequestStartById(u,k(n)),N=f.events.onResponseStartById(u,q(n)),oe=f.events.onResponseById(u,w(n)),I=f.events.onUploadProgressById(u,m),Q=f.events.onDownloadProgressById(u,p),H=()=>{i(),Q(),I(),z(),N(),oe()};return b.current.set(u,{unmount:H}),H},de=()=>{let{abortKey:n}=e;t.getAllRunningRequest().forEach(i=>{i.command.abortKey===n&&t.delete(i.command.queueKey,i.requestId,n)})};return(0,Pe.useWillUnmount)(()=>{D(),A()}),[{abort:de,onSuccess:n=>{c.current=n},onError:n=>{s.current=n},onAbort:n=>{T.current=n},onOfflineError:n=>{C.current=n},onFinished:n=>{x.current=n},onRequestStart:n=>{S.current=n},onResponseStart:n=>{o.current=n},onDownloadProgress:n=>{R.current=n},onUploadProgress:n=>{O.current=n}},{addDataListener:K,clearDataListener:A,addLifecycleListeners:W,removeLifecycleListener:E,clearLifecycleListeners:D}]};var Fe=require("react"),Ie=require("@better-typed/react-lifecycle-hooks"),te=(e=600)=>{let t=(0,Fe.useRef)(null),r=()=>{t.current!==null&&clearTimeout(t.current),t.current=null},g=(d,l)=>{r(),t.current=setTimeout(()=>{d()},l||e)};return(0,Ie.useWillUnmount)(r),{debounce:g,resetDebounce:r,active:!!t.current}};var G={data:null,error:null,loading:!1,status:null,retries:0,timestamp:null};var xe=require("react"),pe=require("@better-typed/react-lifecycle-hooks");var Re=e=>{let t=Object.prototype.toString.call(e);return Array.isArray(e)?!e.length:typeof e=="object"&&e!==null&&t==="[object Object]"?!Object.keys(e).length:!1},ie=(e,t)=>{let r=Object.prototype.toString.call(e),g=Object.prototype.toString.call(t),d=typeof e,l=typeof t,f=s=>d===s&&l===s,c=s=>r===s&&g===s;return r!==g?!1:e===null&&t===null||f("number")&&Number.isNaN(e)&&Number.isNaN(t)||Re(e)&&Re(t)?!0:Array.isArray(e)&&Array.isArray(t)?e.length!==t.length?!1:!e.some((s,T)=>!ie(s,t[T])):f("object")&&c("[object Object]")?Object.keys(e).length!==Object.keys(t).length?!1:!Object.entries(e).some(([s,T])=>!ie(T,t[s])):e instanceof Date&&t instanceof Date?+e==+t:e===t};var J=(e,t)=>y({retries:(e==null?void 0:e.retries)||0,timestamp:+new Date,isFailed:!1,isCanceled:!1,isOffline:!1},t),Te=(e,t)=>t?+new Date>+t+e:!0,we=(e,t,r)=>!Te(e.cacheTime,r==null?void 0:r.details.timestamp)&&r?r:t?{data:t,details:J(),cacheTime:1e3,clearKey:e.builder.cache.clearKey}:null,Me=e=>e?new Date(e):null,ge=(e,t,r)=>{var T,C,x;let{builder:g,cacheKey:d}=r,{cache:l}=g,f=l.get(d),c=we(r,e,f),s=t.hasRunningRequests(r.queueKey);return j(y({},G),{data:((T=c==null?void 0:c.data)==null?void 0:T[0])||G.data,error:((C=c==null?void 0:c.data)==null?void 0:C[1])||G.error,status:((x=c==null?void 0:c.data)==null?void 0:x[2])||G.status,retries:(c==null?void 0:c.details.retries)||G.retries,timestamp:Me((c==null?void 0:c.details.timestamp)||G.timestamp),loading:s})};var Z=({command:e,dispatcher:t,initialData:r,deepCompare:g,dependencyTracking:d,defaultCacheEmitting:l=!0})=>{let{builder:f,cacheKey:c,queueKey:s,cacheTime:T}=e,{cache:C,commandManager:x}=f,S=(0,pe.useForceUpdate)(),o=(0,xe.useRef)(ge(r,t,e)),R=(0,xe.useRef)([]),O=()=>{let a=C.get(c);return Te(T,(a==null?void 0:a.details.timestamp)||o.current.timestamp)},b=a=>{R.current.some(m=>a.includes(m))&&S()},U=a=>{R.current.includes(a)||R.current.push(a)};(0,pe.useDidUpdate)(()=>{o.current.loading=t.hasRunningRequests(s);let a=ge(r,t,e),p=(r==null?void 0:r[0])===o.current.data,m=!!(o.current.data||o.current.error)&&!p,k=!m&&o.current.data,q=m&&!o.current.data;(k||q)&&(o.current=a)},[c,s],!0),(0,pe.useDidUpdate)(()=>{(()=>{d||Object.keys(o.current).forEach(p=>U(p))})()},[d],!0);let E=(a,p)=>typeof g=="function"?g(a,p):g?ie(a,p):!1,D=a=>ce(void 0,null,function*(){let p={data:a.data[0],error:a.data[1],status:a.data[2],retries:a.details.retries,timestamp:new Date(a.details.timestamp),loading:o.current.loading},m=Object.keys(p).filter(k=>{let q=k,w=o.current[q],v=p[q];return!E(w,v)});o.current=y(y({},o.current),p),b(m)}),h={setData:(a,p=l)=>{if(p){let m=o.current;C.set(e,[a,m.error,m.status],J(o.current))}else o.current.data=a,b(["data"])},setError:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,a,m.status],J(o.current,{isFailed:!!a}))}else o.current.error=a,b(["error"])},setLoading:(a,p=!0)=>{p?x.events.emitLoading(s,"",{queueKey:s,requestId:"",isLoading:a,isRetry:!1,isOffline:!1}):(o.current.loading=a,b(["loading"]))},setStatus:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,m.error,a],J(o.current))}else o.current.status=a,b(["status"])},setRetries:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,m.error,m.status],J(o.current,{retries:a}))}else o.current.retries=a,b(["retries"])},setTimestamp:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,m.error,m.status],J(o.current,{timestamp:+a}))}else o.current.timestamp=a,b(["timestamp"])}};return[o.current,h,{setRenderKey:U,setCacheData:D,getStaleStatus:O}]};var ne=Ye(require("react")),_e=ne.default.createContext([{},()=>null]);var $=()=>(0,ne.useContext)(_e);var Ve=(e,t=P)=>{let[r]=$(),{dependencies:g=P.dependencies,disabled:d=P.disabled,dependencyTracking:l=P.dependencyTracking,revalidateOnMount:f=P.revalidateOnMount,initialData:c=P.initialData,refresh:s=P.refresh,refreshTime:T=P.refreshTime,refreshBlurred:C=P.refreshBlurred,refreshOnBlur:x=P.refreshOnBlur,refreshOnFocus:S=P.refreshOnFocus,refreshOnReconnect:o=P.refreshOnReconnect,debounce:R=P.debounce,debounceTime:O=P.debounceTime,deepCompare:b=P.deepCompare}=y(y(y({},P),r.useFetchConfig),t),U=JSON.stringify(e.dump()),E=te(O),D=te(T),{cacheKey:h,queueKey:a,builder:p}=e,{cache:m,fetchDispatcher:k,appManager:q,loggerManager:w}=p,v=(0,Le.useRef)(w.init("useFetch")).current,[M,A,{setRenderKey:K,setCacheData:W,getStaleStatus:de}]=Z({logger:v,command:e,dispatcher:k,initialData:c,deepCompare:b,dependencyTracking:l}),[n,u]=Y({logger:v,actions:A,command:e,dispatcher:k,setCacheData:W}),{addDataListener:i,addLifecycleListeners:z,clearDataListener:N,clearLifecycleListeners:oe}=u,I=()=>{d?v.debug("Cannot add to fetch queue",{disabled:d}):(v.debug("Fetching data"),k.add(e))};function Q(){!s||(v.debug(`Starting refresh counter, request will be send in ${T}ms`),D.debounce(()=>{let F=!q.isFocused,X=k.hasRunningRequests(e.queueKey),ae=k.getIsActiveQueue(e.queueKey),ee=X||ae;(F&&C&&!ee||!F&&!ee)&&(I(),v.debug("Performing refresh request")),Q()}))}let H=F=>{F&&F instanceof le.Command?m.revalidate((0,le.getCommandKey)(F)):F&&!(F instanceof le.Command)?m.revalidate(F):(I(),Q())},B=()=>{let F=de(),X=k.getIsActiveQueue(a);(f||F&&!X)&&I()},V=()=>{R?(v.debug("Debouncing request",{queueKey:a,command:e}),E.debounce(()=>I())):I()};return(0,re.useDidUpdate)(()=>{i(e),z(e);let F=q.events.onFocus(()=>{S&&(I(),Q())}),X=q.events.onBlur(()=>{x&&(I(),Q())}),ae=q.events.onOnline(()=>{o&&(I(),Q())}),ee=m.events.onRevalidate(h,I);return()=>{N(),oe(),F(),X(),ae(),ee()}},[U],!0),(0,re.useDidMount)(B),(0,re.useDidUpdate)(V,[U,...g]),(0,re.useDidUpdate)(Q,[U,...g,d,s,T],!0),j(y(y({get data(){return K("data"),M.data},get error(){return K("error"),M.error},get loading(){return K("loading"),M.loading},get status(){return K("status"),M.status},get retries(){return K("retries"),M.retries},get timestamp(){return K("timestamp"),M.timestamp}},A),n),{isDebouncing:E.active,revalidate:H})};var Ke=require("@better-typed/hyper-fetch"),P={dependencies:[],disabled:!1,dependencyTracking:!0,revalidateOnMount:!0,initialData:null,refresh:!1,refreshTime:Ke.DateInterval.hour,refreshBlurred:!0,refreshOnBlur:!1,refreshOnFocus:!1,refreshOnReconnect:!1,debounce:!1,debounceTime:400,deepCompare:!0};var Ee=require("react"),_=require("@better-typed/hyper-fetch"),Qe=require("@better-typed/react-lifecycle-hooks");var et=(e,t=ye)=>{let[r]=$(),{disabled:g,dependencyTracking:d,initialData:l,debounce:f,debounceTime:c,deepCompare:s}=y(y(y({},ye),r.useSubmitConfig),t),{builder:T}=e,{cache:C,submitDispatcher:x,loggerManager:S}=T,o=(0,Ee.useRef)(S.init("useSubmit")).current,R=te(c),O=(0,Ee.useRef)(()=>null),[b,U,{setRenderKey:E,setCacheData:D}]=Z({logger:o,command:e,dispatcher:x,initialData:l,deepCompare:s,dependencyTracking:d}),[h,a]=Y({logger:o,actions:U,command:e,dispatcher:x,setCacheData:D}),{addDataListener:p,addLifecycleListeners:m}=a,k=(...v)=>{let M=v[0],A=e.clone(M);if(g)throw o.warning("Cannot submit request",{disabled:g,submitOptions:M}),new Error("Cannot submit request. Option 'disabled' is enabled");let K=()=>(p(A),(0,_.commandSendRequest)(A,"submit",W=>{m(A,W)}));return new Promise(W=>{(()=>ce(void 0,null,function*(){if(o.debug("Submitting request",{disabled:g,submitOptions:M}),f)O.current=n=>{O.current(n),W(n)},R.debounce(()=>ce(void 0,null,function*(){let n=O.current;O.current=()=>null;let u=yield K();n(u)}));else{let n=yield K();W(n)}}))()})},q=v=>{!v||(v&&v instanceof _.Command?C.revalidate((0,_.getCommandKey)(v)):v instanceof _.Command||C.revalidate(v))},w={onSubmitSuccess:h.onSuccess,onSubmitError:h.onError,onSubmitFinished:h.onFinished,onSubmitRequestStart:h.onRequestStart,onSubmitResponseStart:h.onResponseStart,onSubmitDownloadProgress:h.onDownloadProgress,onSubmitUploadProgress:h.onUploadProgress,onSubmitOfflineError:h.onOfflineError,onSubmitAbort:h.onAbort};return(0,Qe.useDidMount)(()=>{p(e)}),j(y(y({submit:k,get data(){return E("data"),b.data},get error(){return E("error"),b.error},get submitting(){return E("loading"),b.loading},get status(){return E("status"),b.status},get retries(){return E("retries"),b.retries},get timestamp(){return E("timestamp"),b.timestamp},abort:h.abort},U),w),{isDebouncing:R.active,revalidate:q})};var ye={disabled:!1,dependencyTracking:!0,cacheOnMount:!0,initialData:null,debounce:!1,debounceTime:400,suspense:!1,shouldThrow:!1,invalidate:[],deepCompare:!0};var me=require("react"),Ae=require("@better-typed/hyper-fetch"),Ce=require("@better-typed/react-lifecycle-hooks");var tt=(e,t=be)=>{let[r]=$(),{queueType:g}=y(y(y({},be),r.useQueueConfig),t),{abortKey:d,queueKey:l,builder:f}=e,{commandManager:c}=f,[s]=(0,Ae.getCommandDispatcher)(e,g),T=(0,me.useRef)(null),[C,x]=(0,me.useState)(!1),[S,o]=(0,me.useState)([]),R=D=>D.map(h=>j(y({},h),{stopRequest:()=>s.stopRequest(l,h.requestId),startRequest:()=>s.startRequest(l,h.requestId),deleteRequest:()=>s.delete(l,h.requestId,d)})),O=(D,h)=>{o(a=>a.map(p=>p.requestId===D?y(y({},p),h):p))},b=()=>{let D=s.getQueue(l);x(D.stopped),o(R(D.requests))},U=D=>{x(D.stopped),o(R(D.requests))},E=()=>{var k;let D=s.events.onQueueChange(l,U),h=s.events.onQueueStatus(l,U),a=c.events.onDownloadProgress(l,(q,{requestId:w})=>{O(w,{downloading:q})}),p=c.events.onUploadProgress(l,(q,{requestId:w})=>{O(w,{uploading:q})}),m=()=>{h(),D(),a(),p()};return(k=T.current)==null||k.call(T),T.current=m,m};return(0,Ce.useDidMount)(b),(0,Ce.useDidUpdate)(E,[C,S,o,x],!0),{stopped:C,requests:S,stop:()=>s.stop(l),pause:()=>s.pause(l),start:()=>s.start(l)}};var be={queueType:"auto"};var Be=require("react"),se=require("@better-typed/hyper-fetch");var nt=(e,t=he)=>{let{cacheKey:r,builder:g}=e,{cache:d,loggerManager:l}=g,f=(0,Be.useRef)(l.init("useCache")).current,[c]=(0,se.getCommandDispatcher)(e),[s]=$(),{dependencyTracking:T,initialData:C,deepCompare:x}=y(y(y({},he),s.useCacheConfig),t),[S,o,{setRenderKey:R,setCacheData:O}]=Z({logger:f,command:e,dispatcher:c,initialData:C,deepCompare:x,dependencyTracking:T}),[b]=Y({logger:f,actions:o,command:e,dispatcher:c,setCacheData:O}),U=E=>{E instanceof se.Command?d.revalidate((0,se.getCommandKey)(E,!0)):E?d.revalidate(E):d.revalidate(r)};return j(y({get data(){return R("data"),S.data},get error(){return R("error"),S.error},get loading(){return R("loading"),S.loading},get status(){return R("status"),S.status},get retries(){return R("retries"),S.retries},get timestamp(){return R("timestamp"),S.timestamp},onCacheError:b.onError,onCacheSuccess:b.onSuccess,onCacheChange:b.onFinished},o),{revalidate:U})};var he={dependencyTracking:!0,initialData:null,deepCompare:!0};var Se=require("react"),je=require("@better-typed/react-lifecycle-hooks"),rt=e=>{let[t,r]=(0,Se.useState)(e.appManager.isOnline),[g,d]=(0,Se.useState)(e.appManager.isFocused),l=()=>{let s=e.appManager.events.onOnline(()=>r(!0)),T=e.appManager.events.onOffline(()=>r(!1)),C=e.appManager.events.onFocus(()=>d(!0)),x=e.appManager.events.onBlur(()=>d(!1));return()=>{s(),T(),C(),x()}},f=s=>{e.appManager.setOnline(s)},c=s=>{e.appManager.setFocused(s)};return(0,je.useDidMount)(l),{isOnline:t,isFocused:g,setOnline:f,setFocused:c}}; | ||
var Ne=Object.create;var ue=Object.defineProperty,We=Object.defineProperties,Ge=Object.getOwnPropertyDescriptor,Je=Object.getOwnPropertyDescriptors,$e=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,ze=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable;var Ue=(e,t,n)=>t in e?ue(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,y=(e,t)=>{for(var n in t||(t={}))ke.call(t,n)&&Ue(e,n,t[n]);if(Oe)for(var n of Oe(t))He.call(t,n)&&Ue(e,n,t[n]);return e},B=(e,t)=>We(e,Je(t));var Xe=(e,t)=>{for(var n in t)ue(e,n,{get:t[n],enumerable:!0})},qe=(e,t,n,g)=>{if(t&&typeof t=="object"||typeof t=="function")for(let d of $e(t))!ke.call(e,d)&&d!==n&&ue(e,d,{get:()=>t[d],enumerable:!(g=Ge(t,d))||g.enumerable});return e};var Ye=(e,t,n)=>(n=e!=null?Ne(ze(e)):{},qe(t||!e||!e.__esModule?ue(n,"default",{value:e,enumerable:!0}):n,e)),Ze=e=>qe(ue({},"__esModule",{value:!0}),e);var ce=(e,t,n)=>new Promise((g,d)=>{var l=o=>{try{c(n.next(o))}catch(T){d(T)}},f=o=>{try{c(n.throw(o))}catch(T){d(T)}},c=o=>o.done?g(o.value):Promise.resolve(o.value).then(l,f);c((n=n.apply(e,t)).next())});var ot={};Xe(ot,{getDetailsState:()=>$,getInitialState:()=>fe,getRefreshTime:()=>Se,getTimestamp:()=>Me,getValidCacheData:()=>we,initialState:()=>J,isEmpty:()=>Re,isEqual:()=>ie,isStaleCacheData:()=>de,useAppManager:()=>rt,useCache:()=>nt,useCacheDefaultOptions:()=>Ce,useCommandEvents:()=>H,useDebounce:()=>te,useFetch:()=>Ve,useFetchDefaultOptions:()=>F,useQueue:()=>tt,useQueueDefaultOptions:()=>ge,useSubmit:()=>et,useSubmitDefaultOptions:()=>Te,useTrackedState:()=>X});module.exports=Ze(ot);var Le=require("react"),re=require("@better-typed/react-lifecycle-hooks"),le=require("@better-typed/hyper-fetch");var Q=require("react"),Pe=require("@better-typed/react-lifecycle-hooks"),H=({command:e,dispatcher:t,logger:n,actions:g,setCacheData:d})=>{let{cache:l,commandManager:f}=e.builder,c=(0,Q.useRef)(null),o=(0,Q.useRef)(null),T=(0,Q.useRef)(null),b=(0,Q.useRef)(null),x=(0,Q.useRef)(null),D=(0,Q.useRef)(null),a=(0,Q.useRef)(null),R=(0,Q.useRef)(null),U=(0,Q.useRef)(null),C=(0,Q.useRef)(new Map),k=(0,Q.useRef)(null),S=r=>{let s=C.current.get(r);s==null||s.unmount(),C.current.delete(r)},v=()=>{let r=C.current;Array.from(r.values()).forEach(i=>{i.unmount()}),r.clear()},h=(r,s,i)=>{var _,w,L,A,V;let{isOffline:W,isFailed:Z,isCanceled:se}=i;e.offline&&W&&Z?(n.debug("Performing offline error callback",{data:s,details:i}),(_=b.current)==null||_.call(b,{response:s[1],command:r,details:i})):se?(n.debug("Performing abort callback",{data:s,details:i}),(w=T.current)==null||w.call(T,{response:s[1],command:r,details:i})):Z?(n.debug("Performing error callback",{data:s,details:i}),(A=o.current)==null||A.call(o,{response:s[1],command:r,details:i})):(n.debug("Performing success callback",{data:s,details:i}),(L=c.current)==null||L.call(c,{response:s[0],command:r,details:i})),(V=x.current)==null||V.call(x,{response:s,command:r,details:i})},u=r=>({isLoading:s})=>{let i=!s&&!t.hasRunningRequests(r);(s||i)&&g.setLoading(s,!1)},p=(r,s)=>{var i;(i=R.current)==null||i.call(R,r,s)},m=(r,s)=>{var i;(i=U.current)==null||i.call(U,r,s)},q=r=>s=>{var i;(i=D.current)==null||i.call(D,{command:r,details:s})},P=r=>s=>{var i;(i=a.current)==null||i.call(a,{command:r,details:s})},M=r=>(s,i)=>{h(r,s,i)},O=({requestId:r})=>{S(r)},E=()=>{var r;(r=k.current)==null||r.unmount(),k.current=null},N=r=>{let s=f.events.onLoading(r.queueKey,u(r.queueKey)),i=l.events.onData(r.cacheKey,d),W=()=>{s(),i()};return E(),k.current={unmount:W},W},K=(r,s)=>{if(!s){let{queueKey:A,cacheKey:V}=r,be=f.events.onRequestStart(A,q(r)),ve=f.events.onResponseStart(A,P(r)),I=f.events.onUploadProgress(A,m),G=f.events.onDownloadProgress(A,p),ae=f.events.onResponse(V,M(r)),ee=()=>{G(),I(),be(),ve(),ae()};return C.current.set(A,{unmount:ee}),ee}let i=f.events.onRemoveById(s,O),W=f.events.onRequestStartById(s,q(r)),Z=f.events.onResponseStartById(s,P(r)),se=f.events.onResponseById(s,M(r)),_=f.events.onUploadProgressById(s,m),w=f.events.onDownloadProgressById(s,p),L=()=>{i(),w(),_(),W(),Z(),se()};return C.current.set(s,{unmount:L}),L},j=()=>{let{abortKey:r}=e;t.getAllRunningRequest().forEach(i=>{i.command.abortKey===r&&t.delete(i.command.queueKey,i.requestId,r)})};return(0,Pe.useWillUnmount)(()=>{v(),E()}),[{abort:j,onSuccess:r=>{c.current=r},onError:r=>{o.current=r},onAbort:r=>{T.current=r},onOfflineError:r=>{b.current=r},onFinished:r=>{x.current=r},onRequestStart:r=>{D.current=r},onResponseStart:r=>{a.current=r},onDownloadProgress:r=>{R.current=r},onUploadProgress:r=>{U.current=r}},{addDataListener:N,clearDataListener:E,addLifecycleListeners:K,removeLifecycleListener:S,clearLifecycleListeners:v}]};var Fe=require("react"),Ie=require("@better-typed/react-lifecycle-hooks"),te=(e=600)=>{let t=(0,Fe.useRef)(null),n=()=>{t.current!==null&&clearTimeout(t.current),t.current=null},g=(d,l)=>{n(),t.current=setTimeout(()=>{d()},l||e)};return(0,Ie.useWillUnmount)(n),{debounce:g,resetDebounce:n,active:!!t.current}};var J={data:null,error:null,loading:!1,status:null,retries:0,timestamp:null};var xe=require("react"),pe=require("@better-typed/react-lifecycle-hooks");var Re=e=>{let t=Object.prototype.toString.call(e);return Array.isArray(e)?!e.length:typeof e=="object"&&e!==null&&t==="[object Object]"?!Object.keys(e).length:!1},ie=(e,t)=>{let n=Object.prototype.toString.call(e),g=Object.prototype.toString.call(t),d=typeof e,l=typeof t,f=o=>d===o&&l===o,c=o=>n===o&&g===o;return n!==g?!1:e===null&&t===null||f("number")&&Number.isNaN(e)&&Number.isNaN(t)||Re(e)&&Re(t)?!0:Array.isArray(e)&&Array.isArray(t)?e.length!==t.length?!1:!e.some((o,T)=>!ie(o,t[T])):f("object")&&c("[object Object]")?Object.keys(e).length!==Object.keys(t).length?!1:!Object.entries(e).some(([o,T])=>!ie(T,t[o])):e instanceof Date&&t instanceof Date?+e==+t:e===t};var $=(e,t)=>y({retries:(e==null?void 0:e.retries)||0,timestamp:+new Date,isFailed:!1,isCanceled:!1,isOffline:!1},t),de=(e,t)=>t?+new Date>+t+e:!0,we=(e,t,n)=>!de(e.cacheTime,n==null?void 0:n.details.timestamp)&&n?n:t?{data:t,details:$(),cacheTime:1e3,clearKey:e.builder.cache.clearKey}:null,Me=e=>e?new Date(e):null,fe=(e,t,n)=>{var T,b,x;let{builder:g,cacheKey:d}=n,{cache:l}=g,f=l.get(d),c=we(n,e,f),o=t.hasRunningRequests(n.queueKey);return B(y({},J),{data:((T=c==null?void 0:c.data)==null?void 0:T[0])||J.data,error:((b=c==null?void 0:c.data)==null?void 0:b[1])||J.error,status:((x=c==null?void 0:c.data)==null?void 0:x[2])||J.status,retries:(c==null?void 0:c.details.retries)||J.retries,timestamp:Me((c==null?void 0:c.details.timestamp)||J.timestamp),loading:o})};var X=({command:e,dispatcher:t,initialData:n,deepCompare:g,dependencyTracking:d,defaultCacheEmitting:l=!0})=>{let{builder:f,cacheKey:c,queueKey:o,cacheTime:T}=e,{cache:b,commandManager:x}=f,D=(0,pe.useForceUpdate)(),a=(0,xe.useRef)(fe(n,t,e)),R=(0,xe.useRef)([]),U=()=>{let u=b.get(c);return de(T,(u==null?void 0:u.details.timestamp)||a.current.timestamp)},C=u=>{R.current.some(m=>u.includes(m))&&D()},k=u=>{R.current.includes(u)||R.current.push(u)};(0,pe.useDidUpdate)(()=>{a.current.loading=t.hasRunningRequests(o);let u=fe(n,t,e),p=(n==null?void 0:n[0])===a.current.data,m=!!(a.current.data||a.current.error)&&!p,q=!m&&a.current.data,P=m&&!a.current.data;(q||P)&&(a.current=u)},[c,o],!0),(0,pe.useDidUpdate)(()=>{(()=>{d||Object.keys(a.current).forEach(p=>k(p))})()},[d],!0);let S=(u,p)=>typeof g=="function"?g(u,p):g?ie(u,p):!1,v=u=>ce(void 0,null,function*(){let p={data:u.data[0],error:u.data[1],status:u.data[2],retries:u.details.retries,timestamp:new Date(u.details.timestamp),loading:a.current.loading},m=Object.keys(p).filter(q=>{let P=q,M=a.current[P],O=p[P];return!S(M,O)});a.current=y(y({},a.current),p),C(m)}),h={setData:(u,p=l)=>{if(p){let m=a.current;b.set(e,[u,m.error,m.status],$(a.current))}else a.current.data=u,C(["data"])},setError:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,u,m.status],$(a.current,{isFailed:!!u}))}else a.current.error=u,C(["error"])},setLoading:(u,p=!0)=>{p?x.events.emitLoading(o,"",{queueKey:o,requestId:"",isLoading:u,isRetry:!1,isOffline:!1}):(a.current.loading=u,C(["loading"]))},setStatus:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,m.error,u],$(a.current))}else a.current.status=u,C(["status"])},setRetries:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,m.error,m.status],$(a.current,{retries:u}))}else a.current.retries=u,C(["retries"])},setTimestamp:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,m.error,m.status],$(a.current,{timestamp:+u}))}else a.current.timestamp=u,C(["timestamp"])}};return[a.current,h,{setRenderKey:k,setCacheData:v,getStaleStatus:U}]};var ne=Ye(require("react")),_e=ne.default.createContext([{},()=>null]);var z=()=>(0,ne.useContext)(_e);var Ve=(e,t=F)=>{let[n]=z(),{dependencies:g=F.dependencies,disabled:d=F.disabled,dependencyTracking:l=F.dependencyTracking,revalidateOnMount:f=F.revalidateOnMount,initialData:c=F.initialData,refresh:o=F.refresh,refreshTime:T=F.refreshTime,refreshBlurred:b=F.refreshBlurred,refreshOnBlur:x=F.refreshOnBlur,refreshOnFocus:D=F.refreshOnFocus,refreshOnReconnect:a=F.refreshOnReconnect,debounce:R=F.debounce,debounceTime:U=F.debounceTime,deepCompare:C=F.deepCompare}=y(y(y({},F),n.useFetchConfig),t),k=JSON.stringify(e.dump()),S=te(U),v=te(T),{cacheKey:h,queueKey:u,builder:p}=e,{cache:m,fetchDispatcher:q,appManager:P,loggerManager:M}=p,O=(0,Le.useRef)(M.init("useFetch")).current,[E,N,{setRenderKey:K,setCacheData:j,getStaleStatus:r}]=X({logger:O,command:e,dispatcher:q,initialData:c,deepCompare:C,dependencyTracking:l}),[s,i]=H({logger:O,actions:N,command:e,dispatcher:q,setCacheData:j}),{addDataListener:W,addLifecycleListeners:Z,clearDataListener:se,clearLifecycleListeners:_}=i,w=()=>{d?O.debug("Cannot add to fetch queue",{disabled:d}):(O.debug("Fetching data"),q.add(e))};function L(){if(!o)return;let I=Se(T,E.timestamp);O.debug(`Starting refresh counter, request will be send in ${I}ms`),v.debounce(()=>{let G=!P.isFocused,ae=q.hasRunningRequests(e.queueKey),ee=q.getIsActiveQueue(e.queueKey),he=ae||ee;(G&&b&&!he||!G&&!he)&&(w(),O.debug("Performing refresh request")),L()},I)}let A=I=>{I&&I instanceof le.Command?m.revalidate((0,le.getCommandKey)(I)):I&&!(I instanceof le.Command)?m.revalidate(I):(w(),L())},V=()=>{let I=r(),G=q.getIsActiveQueue(u);(f||I&&!G)&&w()},be=()=>{R?(O.debug("Debouncing request",{queueKey:u,command:e}),S.debounce(()=>w())):w()};return(0,re.useDidUpdate)(()=>{W(e),Z(e);let I=P.events.onFocus(()=>{D&&(w(),L())}),G=P.events.onBlur(()=>{x&&(w(),L())}),ae=P.events.onOnline(()=>{a&&(w(),L())}),ee=m.events.onRevalidate(h,w);return()=>{se(),_(),I(),G(),ae(),ee()}},[k],!0),(0,re.useDidMount)(V),(0,re.useDidUpdate)(be,[k,...g]),(0,re.useDidUpdate)(L,[k,...g,d,o,T],!0),B(y(y({get data(){return K("data"),E.data},get error(){return K("error"),E.error},get loading(){return K("loading"),E.loading},get status(){return K("status"),E.status},get retries(){return K("retries"),E.retries},get timestamp(){return K("timestamp"),E.timestamp}},N),s),{isDebouncing:S.active,revalidate:A})};var Se=(e,t)=>{if(t){let n=Date.now()-+t;return n<e?e-n:e}return e};var Qe=require("@better-typed/hyper-fetch"),F={dependencies:[],disabled:!1,dependencyTracking:!0,revalidateOnMount:!0,initialData:null,refresh:!1,refreshTime:Qe.DateInterval.hour,refreshBlurred:!0,refreshOnBlur:!1,refreshOnFocus:!1,refreshOnReconnect:!1,debounce:!1,debounceTime:400,deepCompare:!0};var Ee=require("react"),Y=require("@better-typed/hyper-fetch"),Ke=require("@better-typed/react-lifecycle-hooks");var et=(e,t=Te)=>{let[n]=z(),{disabled:g,dependencyTracking:d,initialData:l,debounce:f,debounceTime:c,deepCompare:o}=y(y(y({},Te),n.useSubmitConfig),t),{builder:T}=e,{cache:b,submitDispatcher:x,loggerManager:D}=T,a=(0,Ee.useRef)(D.init("useSubmit")).current,R=te(c),U=(0,Ee.useRef)(()=>null),[C,k,{setRenderKey:S,setCacheData:v}]=X({logger:a,command:e,dispatcher:x,initialData:l,deepCompare:o,dependencyTracking:d}),[h,u]=H({logger:a,actions:k,command:e,dispatcher:x,setCacheData:v}),{addDataListener:p,addLifecycleListeners:m}=u,q=(...O)=>{let E=O[0],N=e.clone(E);if(g)throw a.warning("Cannot submit request",{disabled:g,submitOptions:E}),new Error("Cannot submit request. Option 'disabled' is enabled");let K=()=>(p(N),(0,Y.commandSendRequest)(N,B(y({dispatcherType:"submit"},E),{onSettle:(j,r)=>{var s;m(N,j),(s=E==null?void 0:E.onSettle)==null||s.call(E,j,r)}})));return new Promise(j=>{(()=>ce(void 0,null,function*(){if(a.debug("Submitting request",{disabled:g,submitOptions:E}),f)U.current=s=>{U.current(s),j(s)},R.debounce(()=>ce(void 0,null,function*(){let s=U.current;U.current=()=>null;let i=yield K();s(i)}));else{let s=yield K();j(s)}}))()})},P=O=>{!O||(O&&O instanceof Y.Command?b.revalidate((0,Y.getCommandKey)(O)):O instanceof Y.Command||b.revalidate(O))},M={onSubmitSuccess:h.onSuccess,onSubmitError:h.onError,onSubmitFinished:h.onFinished,onSubmitRequestStart:h.onRequestStart,onSubmitResponseStart:h.onResponseStart,onSubmitDownloadProgress:h.onDownloadProgress,onSubmitUploadProgress:h.onUploadProgress,onSubmitOfflineError:h.onOfflineError,onSubmitAbort:h.onAbort};return(0,Ke.useDidMount)(()=>{p(e)}),B(y(y({submit:q,get data(){return S("data"),C.data},get error(){return S("error"),C.error},get submitting(){return S("loading"),C.loading},get status(){return S("status"),C.status},get retries(){return S("retries"),C.retries},get timestamp(){return S("timestamp"),C.timestamp},abort:h.abort},k),M),{isDebouncing:R.active,revalidate:P})};var Te={disabled:!1,dependencyTracking:!0,cacheOnMount:!0,initialData:null,debounce:!1,debounceTime:400,suspense:!1,shouldThrow:!1,invalidate:[],deepCompare:!0};var me=require("react"),Be=require("@better-typed/hyper-fetch"),ye=require("@better-typed/react-lifecycle-hooks");var tt=(e,t=ge)=>{let[n]=z(),{queueType:g="auto"}=y(y(y({},ge),n.useQueueConfig),t),{abortKey:d,queueKey:l,builder:f}=e,{commandManager:c}=f,[o]=(0,Be.getCommandDispatcher)(e,g),T=(0,me.useRef)(null),[b,x]=(0,me.useState)(!1),[D,a]=(0,me.useState)([]),R=v=>v.map(h=>B(y({},h),{stopRequest:()=>o.stopRequest(l,h.requestId),startRequest:()=>o.startRequest(l,h.requestId),deleteRequest:()=>o.delete(l,h.requestId,d)})),U=(v,h)=>{a(u=>u.map(p=>p.requestId===v?y(y({},p),h):p))},C=()=>{let v=o.getQueue(l);x(v.stopped),a(R(v.requests))},k=v=>{x(v.stopped),a(R(v.requests))},S=()=>{var q;let v=o.events.onQueueChange(l,k),h=o.events.onQueueStatus(l,k),u=c.events.onDownloadProgress(l,(P,{requestId:M})=>{U(M,{downloading:P})}),p=c.events.onUploadProgress(l,(P,{requestId:M})=>{U(M,{uploading:P})}),m=()=>{h(),v(),u(),p()};return(q=T.current)==null||q.call(T),T.current=m,m};return(0,ye.useDidMount)(C),(0,ye.useDidUpdate)(S,[b,D,a,x],!0),{stopped:b,requests:D,stop:()=>o.stop(l),pause:()=>o.pause(l),start:()=>o.start(l)}};var ge={queueType:"auto"};var Ae=require("react"),oe=require("@better-typed/hyper-fetch");var nt=(e,t=Ce)=>{let{cacheKey:n,builder:g}=e,{cache:d,loggerManager:l}=g,f=(0,Ae.useRef)(l.init("useCache")).current,[c]=(0,oe.getCommandDispatcher)(e),[o]=z(),{dependencyTracking:T,initialData:b,deepCompare:x}=y(y(y({},Ce),o.useCacheConfig),t),[D,a,{setRenderKey:R,setCacheData:U}]=X({logger:f,command:e,dispatcher:c,initialData:b,deepCompare:x,dependencyTracking:T}),[C]=H({logger:f,actions:a,command:e,dispatcher:c,setCacheData:U}),k=S=>{S instanceof oe.Command?d.revalidate((0,oe.getCommandKey)(S,!0)):S?d.revalidate(S):d.revalidate(n)};return B(y({get data(){return R("data"),D.data},get error(){return R("error"),D.error},get loading(){return R("loading"),D.loading},get status(){return R("status"),D.status},get retries(){return R("retries"),D.retries},get timestamp(){return R("timestamp"),D.timestamp},onCacheError:C.onError,onCacheSuccess:C.onSuccess,onCacheChange:C.onFinished},a),{revalidate:k})};var Ce={dependencyTracking:!0,initialData:null,deepCompare:!0};var De=require("react"),je=require("@better-typed/react-lifecycle-hooks"),rt=e=>{let[t,n]=(0,De.useState)(e.appManager.isOnline),[g,d]=(0,De.useState)(e.appManager.isFocused),l=()=>{let o=e.appManager.events.onOnline(()=>n(!0)),T=e.appManager.events.onOffline(()=>n(!1)),b=e.appManager.events.onFocus(()=>d(!0)),x=e.appManager.events.onBlur(()=>d(!1));return()=>{o(),T(),b(),x()}},f=o=>{e.appManager.setOnline(o)},c=o=>{e.appManager.setFocused(o)};return(0,je.useDidMount)(l),{isOnline:t,isFocused:g,setOnline:f,setFocused:c}}; | ||
//# sourceMappingURL=index.cjs.js.map |
@@ -1,2 +0,2 @@ | ||
var Se=Object.defineProperty,De=Object.defineProperties;var ve=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var Oe=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;var Te=(e,n,r)=>n in e?Se(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,T=(e,n)=>{for(var r in n||(n={}))Oe.call(n,r)&&Te(e,r,n[r]);if(fe)for(var r of fe(n))Ue.call(n,r)&&Te(e,r,n[r]);return e},j=(e,n)=>De(e,ve(n));var ne=(e,n,r)=>new Promise((g,y)=>{var l=s=>{try{c(r.next(s))}catch(f){y(f)}},d=s=>{try{c(r.throw(s))}catch(f){y(f)}},c=s=>s.done?g(s.value):Promise.resolve(s.value).then(l,d);c((r=r.apply(e,n)).next())});import{useRef as Ae}from"react";import{useDidUpdate as ie,useDidMount as Be}from"@better-typed/react-lifecycle-hooks";import{Command as Ce,getCommandKey as je}from"@better-typed/hyper-fetch";import{useRef as Q}from"react";import{getErrorMessage as ke}from"@better-typed/hyper-fetch";import{useWillUnmount as qe}from"@better-typed/react-lifecycle-hooks";var _=({command:e,dispatcher:n,logger:r,actions:g,setCacheData:y})=>{let{cache:l,commandManager:d}=e.builder,c=Q(null),s=Q(null),f=Q(null),C=Q(null),x=Q(null),S=Q(null),o=Q(null),R=Q(null),O=Q(null),b=Q(new Map),U=Q(null),E=t=>{let u=b.current.get(t);u==null||u.unmount(),b.current.delete(t)},D=()=>{let t=b.current;Array.from(t.values()).forEach(i=>{i.unmount()}),t.clear()},h=(t,u,i)=>{var I,K,$,B,Y;let{isOffline:J,isFailed:N,isCanceled:ee}=i;e.offline&&J&&N?(r.debug("Performing offline error callback",{data:u,details:i}),(I=C.current)==null||I.call(C,{response:u[1],command:t,details:i})):ee?(r.debug("Performing abort callback",{data:u,details:i}),(K=f.current)==null||K.call(f,{response:u[1],command:t,details:i})):N?(r.debug("Performing error callback",{data:u,details:i}),(B=s.current)==null||B.call(s,{response:u[1],command:t,details:i})):(r.debug("Performing success callback",{data:u,details:i}),($=c.current)==null||$.call(c,{response:u[0],command:t,details:i})),(Y=x.current)==null||Y.call(x,{response:u,command:t,details:i})},a=t=>({isLoading:u})=>{let i=!u&&!n.hasRunningRequests(t);(u||i)&&g.setLoading(u,!1)},p=(t,u)=>{var i;(i=R.current)==null||i.call(R,t,u)},m=(t,u)=>{var i;(i=O.current)==null||i.call(O,t,u)},k=t=>u=>{var i;(i=S.current)==null||i.call(S,{command:t,details:u})},q=t=>u=>{var i;(i=o.current)==null||i.call(o,{command:t,details:u})},w=t=>(u,i)=>{h(t,u,i)},v=({requestId:t})=>{E(t)},M=t=>()=>{let u=[null,ke("abort"),0],i={retries:0,timestamp:+new Date,isFailed:!1,isCanceled:!0,isOffline:!1};h(t,u,i)},A=()=>{var t;(t=U.current)==null||t.unmount(),U.current=null},L=t=>{let u=d.events.onLoading(t.queueKey,a(t.queueKey)),i=l.events.onData(t.cacheKey,y),J=d.events.onAbort(t.abortKey,M(t)),N=()=>{u(),i(),J()};return A(),U.current={unmount:N},N},W=(t,u)=>{if(!u){let{queueKey:B,cacheKey:Y}=t,de=d.events.onRequestStart(B,k(t)),F=d.events.onResponseStart(B,q(t)),z=d.events.onUploadProgress(B,m),te=d.events.onDownloadProgress(B,p),Z=d.events.onResponse(Y,w(t)),oe=()=>{te(),z(),de(),F(),Z()};return b.current.set(B,{unmount:oe}),oe}let i=d.events.onRemoveById(u,v),J=d.events.onRequestStartById(u,k(t)),N=d.events.onResponseStartById(u,q(t)),ee=d.events.onResponseById(u,w(t)),I=d.events.onUploadProgressById(u,m),K=d.events.onDownloadProgressById(u,p),$=()=>{i(),K(),I(),J(),N(),ee()};return b.current.set(u,{unmount:$}),$},se=()=>{let{abortKey:t}=e;n.getAllRunningRequest().forEach(i=>{i.command.abortKey===t&&n.delete(i.command.queueKey,i.requestId,t)})};return qe(()=>{D(),A()}),[{abort:se,onSuccess:t=>{c.current=t},onError:t=>{s.current=t},onAbort:t=>{f.current=t},onOfflineError:t=>{C.current=t},onFinished:t=>{x.current=t},onRequestStart:t=>{S.current=t},onResponseStart:t=>{o.current=t},onDownloadProgress:t=>{R.current=t},onUploadProgress:t=>{O.current=t}},{addDataListener:L,clearDataListener:A,addLifecycleListeners:W,removeLifecycleListener:E,clearLifecycleListeners:D}]};import{useRef as Pe}from"react";import{useWillUnmount as Fe}from"@better-typed/react-lifecycle-hooks";var re=(e=600)=>{let n=Pe(null),r=()=>{n.current!==null&&clearTimeout(n.current),n.current=null},g=(y,l)=>{r(),n.current=setTimeout(()=>{y()},l||e)};return Fe(r),{debounce:g,resetDebounce:r,active:!!n.current}};var H={data:null,error:null,loading:!1,status:null,retries:0,timestamp:null};import{useRef as ye}from"react";import{useDidUpdate as be,useForceUpdate as Me}from"@better-typed/react-lifecycle-hooks";var ge=e=>{let n=Object.prototype.toString.call(e);return Array.isArray(e)?!e.length:typeof e=="object"&&e!==null&&n==="[object Object]"?!Object.keys(e).length:!1},ae=(e,n)=>{let r=Object.prototype.toString.call(e),g=Object.prototype.toString.call(n),y=typeof e,l=typeof n,d=s=>y===s&&l===s,c=s=>r===s&&g===s;return r!==g?!1:e===null&&n===null||d("number")&&Number.isNaN(e)&&Number.isNaN(n)||ge(e)&&ge(n)?!0:Array.isArray(e)&&Array.isArray(n)?e.length!==n.length?!1:!e.some((s,f)=>!ae(s,n[f])):d("object")&&c("[object Object]")?Object.keys(e).length!==Object.keys(n).length?!1:!Object.entries(e).some(([s,f])=>!ae(f,n[s])):e instanceof Date&&n instanceof Date?+e==+n:e===n};var X=(e,n)=>T({retries:(e==null?void 0:e.retries)||0,timestamp:+new Date,isFailed:!1,isCanceled:!1,isOffline:!1},n),ue=(e,n)=>n?+new Date>+n+e:!0,Ie=(e,n,r)=>!ue(e.cacheTime,r==null?void 0:r.details.timestamp)&&r?r:n?{data:n,details:X(),cacheTime:1e3,clearKey:e.builder.cache.clearKey}:null,we=e=>e?new Date(e):null,ce=(e,n,r)=>{var f,C,x;let{builder:g,cacheKey:y}=r,{cache:l}=g,d=l.get(y),c=Ie(r,e,d),s=n.hasRunningRequests(r.queueKey);return j(T({},H),{data:((f=c==null?void 0:c.data)==null?void 0:f[0])||H.data,error:((C=c==null?void 0:c.data)==null?void 0:C[1])||H.error,status:((x=c==null?void 0:c.data)==null?void 0:x[2])||H.status,retries:(c==null?void 0:c.details.retries)||H.retries,timestamp:we((c==null?void 0:c.details.timestamp)||H.timestamp),loading:s})};var V=({command:e,dispatcher:n,initialData:r,deepCompare:g,dependencyTracking:y,defaultCacheEmitting:l=!0})=>{let{builder:d,cacheKey:c,queueKey:s,cacheTime:f}=e,{cache:C,commandManager:x}=d,S=Me(),o=ye(ce(r,n,e)),R=ye([]),O=()=>{let a=C.get(c);return ue(f,(a==null?void 0:a.details.timestamp)||o.current.timestamp)},b=a=>{R.current.some(m=>a.includes(m))&&S()},U=a=>{R.current.includes(a)||R.current.push(a)};be(()=>{o.current.loading=n.hasRunningRequests(s);let a=ce(r,n,e),p=(r==null?void 0:r[0])===o.current.data,m=!!(o.current.data||o.current.error)&&!p,k=!m&&o.current.data,q=m&&!o.current.data;(k||q)&&(o.current=a)},[c,s],!0),be(()=>{(()=>{y||Object.keys(o.current).forEach(p=>U(p))})()},[y],!0);let E=(a,p)=>typeof g=="function"?g(a,p):g?ae(a,p):!1,D=a=>ne(void 0,null,function*(){let p={data:a.data[0],error:a.data[1],status:a.data[2],retries:a.details.retries,timestamp:new Date(a.details.timestamp),loading:o.current.loading},m=Object.keys(p).filter(k=>{let q=k,w=o.current[q],v=p[q];return!E(w,v)});o.current=T(T({},o.current),p),b(m)}),h={setData:(a,p=l)=>{if(p){let m=o.current;C.set(e,[a,m.error,m.status],X(o.current))}else o.current.data=a,b(["data"])},setError:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,a,m.status],X(o.current,{isFailed:!!a}))}else o.current.error=a,b(["error"])},setLoading:(a,p=!0)=>{p?x.events.emitLoading(s,"",{queueKey:s,requestId:"",isLoading:a,isRetry:!1,isOffline:!1}):(o.current.loading=a,b(["loading"]))},setStatus:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,m.error,a],X(o.current))}else o.current.status=a,b(["status"])},setRetries:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,m.error,m.status],X(o.current,{retries:a}))}else o.current.retries=a,b(["retries"])},setTimestamp:(a,p=l)=>{if(p){let m=o.current;C.set(e,[m.data,m.error,m.status],X(o.current,{timestamp:+a}))}else o.current.timestamp=a,b(["timestamp"])}};return[o.current,h,{setRenderKey:U,setCacheData:D,getStaleStatus:O}]};import Le,{useContext as Ke,useMemo as Jt,useState as $t}from"react";var Qe=Le.createContext([{},()=>null]);var G=()=>Ke(Qe);var an=(e,n=P)=>{let[r]=G(),{dependencies:g=P.dependencies,disabled:y=P.disabled,dependencyTracking:l=P.dependencyTracking,revalidateOnMount:d=P.revalidateOnMount,initialData:c=P.initialData,refresh:s=P.refresh,refreshTime:f=P.refreshTime,refreshBlurred:C=P.refreshBlurred,refreshOnBlur:x=P.refreshOnBlur,refreshOnFocus:S=P.refreshOnFocus,refreshOnReconnect:o=P.refreshOnReconnect,debounce:R=P.debounce,debounceTime:O=P.debounceTime,deepCompare:b=P.deepCompare}=T(T(T({},P),r.useFetchConfig),n),U=JSON.stringify(e.dump()),E=re(O),D=re(f),{cacheKey:h,queueKey:a,builder:p}=e,{cache:m,fetchDispatcher:k,appManager:q,loggerManager:w}=p,v=Ae(w.init("useFetch")).current,[M,A,{setRenderKey:L,setCacheData:W,getStaleStatus:se}]=V({logger:v,command:e,dispatcher:k,initialData:c,deepCompare:b,dependencyTracking:l}),[t,u]=_({logger:v,actions:A,command:e,dispatcher:k,setCacheData:W}),{addDataListener:i,addLifecycleListeners:J,clearDataListener:N,clearLifecycleListeners:ee}=u,I=()=>{y?v.debug("Cannot add to fetch queue",{disabled:y}):(v.debug("Fetching data"),k.add(e))};function K(){!s||(v.debug(`Starting refresh counter, request will be send in ${f}ms`),D.debounce(()=>{let F=!q.isFocused,z=k.hasRunningRequests(e.queueKey),te=k.getIsActiveQueue(e.queueKey),Z=z||te;(F&&C&&!Z||!F&&!Z)&&(I(),v.debug("Performing refresh request")),K()}))}let $=F=>{F&&F instanceof Ce?m.revalidate(je(F)):F&&!(F instanceof Ce)?m.revalidate(F):(I(),K())},B=()=>{let F=se(),z=k.getIsActiveQueue(a);(d||F&&!z)&&I()},Y=()=>{R?(v.debug("Debouncing request",{queueKey:a,command:e}),E.debounce(()=>I())):I()};return ie(()=>{i(e),J(e);let F=q.events.onFocus(()=>{S&&(I(),K())}),z=q.events.onBlur(()=>{x&&(I(),K())}),te=q.events.onOnline(()=>{o&&(I(),K())}),Z=m.events.onRevalidate(h,I);return()=>{N(),ee(),F(),z(),te(),Z()}},[U],!0),Be(B),ie(Y,[U,...g]),ie(K,[U,...g,y,s,f],!0),j(T(T({get data(){return L("data"),M.data},get error(){return L("error"),M.error},get loading(){return L("loading"),M.loading},get status(){return L("status"),M.status},get retries(){return L("retries"),M.retries},get timestamp(){return L("timestamp"),M.timestamp}},A),t),{isDebouncing:E.active,revalidate:$})};import{DateInterval as Ne}from"@better-typed/hyper-fetch";var P={dependencies:[],disabled:!1,dependencyTracking:!0,revalidateOnMount:!0,initialData:null,refresh:!1,refreshTime:Ne.hour,refreshBlurred:!0,refreshOnBlur:!1,refreshOnFocus:!1,refreshOnReconnect:!1,debounce:!1,debounceTime:400,deepCompare:!0};import{useRef as he}from"react";import{Command as Re,getCommandKey as We,commandSendRequest as Ge}from"@better-typed/hyper-fetch";import{useDidMount as Je}from"@better-typed/react-lifecycle-hooks";var qn=(e,n=pe)=>{let[r]=G(),{disabled:g,dependencyTracking:y,initialData:l,debounce:d,debounceTime:c,deepCompare:s}=T(T(T({},pe),r.useSubmitConfig),n),{builder:f}=e,{cache:C,submitDispatcher:x,loggerManager:S}=f,o=he(S.init("useSubmit")).current,R=re(c),O=he(()=>null),[b,U,{setRenderKey:E,setCacheData:D}]=V({logger:o,command:e,dispatcher:x,initialData:l,deepCompare:s,dependencyTracking:y}),[h,a]=_({logger:o,actions:U,command:e,dispatcher:x,setCacheData:D}),{addDataListener:p,addLifecycleListeners:m}=a,k=(...v)=>{let M=v[0],A=e.clone(M);if(g)throw o.warning("Cannot submit request",{disabled:g,submitOptions:M}),new Error("Cannot submit request. Option 'disabled' is enabled");let L=()=>(p(A),Ge(A,"submit",W=>{m(A,W)}));return new Promise(W=>{(()=>ne(void 0,null,function*(){if(o.debug("Submitting request",{disabled:g,submitOptions:M}),d)O.current=t=>{O.current(t),W(t)},R.debounce(()=>ne(void 0,null,function*(){let t=O.current;O.current=()=>null;let u=yield L();t(u)}));else{let t=yield L();W(t)}}))()})},q=v=>{!v||(v&&v instanceof Re?C.revalidate(We(v)):v instanceof Re||C.revalidate(v))},w={onSubmitSuccess:h.onSuccess,onSubmitError:h.onError,onSubmitFinished:h.onFinished,onSubmitRequestStart:h.onRequestStart,onSubmitResponseStart:h.onResponseStart,onSubmitDownloadProgress:h.onDownloadProgress,onSubmitUploadProgress:h.onUploadProgress,onSubmitOfflineError:h.onOfflineError,onSubmitAbort:h.onAbort};return Je(()=>{p(e)}),j(T(T({submit:k,get data(){return E("data"),b.data},get error(){return E("error"),b.error},get submitting(){return E("loading"),b.loading},get status(){return E("status"),b.status},get retries(){return E("retries"),b.retries},get timestamp(){return E("timestamp"),b.timestamp},abort:h.abort},U),w),{isDebouncing:R.active,revalidate:q})};var pe={disabled:!1,dependencyTracking:!0,cacheOnMount:!0,initialData:null,debounce:!1,debounceTime:400,suspense:!1,shouldThrow:!1,invalidate:[],deepCompare:!0};import{useState as xe,useRef as $e}from"react";import{getCommandDispatcher as ze}from"@better-typed/hyper-fetch";import{useDidMount as He,useDidUpdate as Xe}from"@better-typed/react-lifecycle-hooks";var zn=(e,n=le)=>{let[r]=G(),{queueType:g}=T(T(T({},le),r.useQueueConfig),n),{abortKey:y,queueKey:l,builder:d}=e,{commandManager:c}=d,[s]=ze(e,g),f=$e(null),[C,x]=xe(!1),[S,o]=xe([]),R=D=>D.map(h=>j(T({},h),{stopRequest:()=>s.stopRequest(l,h.requestId),startRequest:()=>s.startRequest(l,h.requestId),deleteRequest:()=>s.delete(l,h.requestId,y)})),O=(D,h)=>{o(a=>a.map(p=>p.requestId===D?T(T({},p),h):p))},b=()=>{let D=s.getQueue(l);x(D.stopped),o(R(D.requests))},U=D=>{x(D.stopped),o(R(D.requests))},E=()=>{var k;let D=s.events.onQueueChange(l,U),h=s.events.onQueueStatus(l,U),a=c.events.onDownloadProgress(l,(q,{requestId:w})=>{O(w,{downloading:q})}),p=c.events.onUploadProgress(l,(q,{requestId:w})=>{O(w,{uploading:q})}),m=()=>{h(),D(),a(),p()};return(k=f.current)==null||k.call(f),f.current=m,m};return He(b),Xe(E,[C,S,o,x],!0),{stopped:C,requests:S,stop:()=>s.stop(l),pause:()=>s.pause(l),start:()=>s.start(l)}};var le={queueType:"auto"};import{useRef as Ye}from"react";import{getCommandDispatcher as Ze,Command as _e,getCommandKey as Ve}from"@better-typed/hyper-fetch";var cr=(e,n=me)=>{let{cacheKey:r,builder:g}=e,{cache:y,loggerManager:l}=g,d=Ye(l.init("useCache")).current,[c]=Ze(e),[s]=G(),{dependencyTracking:f,initialData:C,deepCompare:x}=T(T(T({},me),s.useCacheConfig),n),[S,o,{setRenderKey:R,setCacheData:O}]=V({logger:d,command:e,dispatcher:c,initialData:C,deepCompare:x,dependencyTracking:f}),[b]=_({logger:d,actions:o,command:e,dispatcher:c,setCacheData:O}),U=E=>{E instanceof _e?y.revalidate(Ve(E,!0)):E?y.revalidate(E):y.revalidate(r)};return j(T({get data(){return R("data"),S.data},get error(){return R("error"),S.error},get loading(){return R("loading"),S.loading},get status(){return R("status"),S.status},get retries(){return R("retries"),S.retries},get timestamp(){return R("timestamp"),S.timestamp},onCacheError:b.onError,onCacheSuccess:b.onSuccess,onCacheChange:b.onFinished},o),{revalidate:U})};var me={dependencyTracking:!0,initialData:null,deepCompare:!0};import{useState as Ee}from"react";import{useDidMount as et}from"@better-typed/react-lifecycle-hooks";var yr=e=>{let[n,r]=Ee(e.appManager.isOnline),[g,y]=Ee(e.appManager.isFocused),l=()=>{let s=e.appManager.events.onOnline(()=>r(!0)),f=e.appManager.events.onOffline(()=>r(!1)),C=e.appManager.events.onFocus(()=>y(!0)),x=e.appManager.events.onBlur(()=>y(!1));return()=>{s(),f(),C(),x()}},d=s=>{e.appManager.setOnline(s)},c=s=>{e.appManager.setFocused(s)};return et(l),{isOnline:n,isFocused:g,setOnline:d,setFocused:c}};export{X as getDetailsState,ce as getInitialState,we as getTimestamp,Ie as getValidCacheData,H as initialState,ge as isEmpty,ae as isEqual,ue as isStaleCacheData,yr as useAppManager,cr as useCache,me as useCacheDefaultOptions,_ as useCommandEvents,re as useDebounce,an as useFetch,P as useFetchDefaultOptions,zn as useQueue,le as useQueueDefaultOptions,qn as useSubmit,pe as useSubmitDefaultOptions,V as useTrackedState}; | ||
var De=Object.defineProperty,ve=Object.defineProperties;var Oe=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var Ue=Object.prototype.hasOwnProperty,ke=Object.prototype.propertyIsEnumerable;var Te=(e,t,r)=>t in e?De(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,T=(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&Te(e,r,t[r]);if(fe)for(var r of fe(t))ke.call(t,r)&&Te(e,r,t[r]);return e},K=(e,t)=>ve(e,Oe(t));var ne=(e,t,r)=>new Promise((g,y)=>{var l=o=>{try{c(r.next(o))}catch(f){y(f)}},d=o=>{try{c(r.throw(o))}catch(f){y(f)}},c=o=>o.done?g(o.value):Promise.resolve(o.value).then(l,d);c((r=r.apply(e,t)).next())});import{useRef as Be}from"react";import{useDidUpdate as ie,useDidMount as Ae}from"@better-typed/react-lifecycle-hooks";import{Command as be,getCommandKey as je}from"@better-typed/hyper-fetch";import{useRef as B}from"react";import{useWillUnmount as qe}from"@better-typed/react-lifecycle-hooks";var _=({command:e,dispatcher:t,logger:r,actions:g,setCacheData:y})=>{let{cache:l,commandManager:d}=e.builder,c=B(null),o=B(null),f=B(null),b=B(null),x=B(null),D=B(null),a=B(null),R=B(null),U=B(null),C=B(new Map),k=B(null),S=n=>{let s=C.current.get(n);s==null||s.unmount(),C.current.delete(n)},v=()=>{let n=C.current;Array.from(n.values()).forEach(i=>{i.unmount()}),n.clear()},h=(n,s,i)=>{var X,w,L,A,Y;let{isOffline:W,isFailed:H,isCanceled:ee}=i;e.offline&&W&&H?(r.debug("Performing offline error callback",{data:s,details:i}),(X=b.current)==null||X.call(b,{response:s[1],command:n,details:i})):ee?(r.debug("Performing abort callback",{data:s,details:i}),(w=f.current)==null||w.call(f,{response:s[1],command:n,details:i})):H?(r.debug("Performing error callback",{data:s,details:i}),(A=o.current)==null||A.call(o,{response:s[1],command:n,details:i})):(r.debug("Performing success callback",{data:s,details:i}),(L=c.current)==null||L.call(c,{response:s[0],command:n,details:i})),(Y=x.current)==null||Y.call(x,{response:s,command:n,details:i})},u=n=>({isLoading:s})=>{let i=!s&&!t.hasRunningRequests(n);(s||i)&&g.setLoading(s,!1)},p=(n,s)=>{var i;(i=R.current)==null||i.call(R,n,s)},m=(n,s)=>{var i;(i=U.current)==null||i.call(U,n,s)},q=n=>s=>{var i;(i=D.current)==null||i.call(D,{command:n,details:s})},P=n=>s=>{var i;(i=a.current)==null||i.call(a,{command:n,details:s})},M=n=>(s,i)=>{h(n,s,i)},O=({requestId:n})=>{S(n)},E=()=>{var n;(n=k.current)==null||n.unmount(),k.current=null},N=n=>{let s=d.events.onLoading(n.queueKey,u(n.queueKey)),i=l.events.onData(n.cacheKey,y),W=()=>{s(),i()};return E(),k.current={unmount:W},W},Q=(n,s)=>{if(!s){let{queueKey:A,cacheKey:Y}=n,se=d.events.onRequestStart(A,q(n)),de=d.events.onResponseStart(A,P(n)),I=d.events.onUploadProgress(A,m),G=d.events.onDownloadProgress(A,p),te=d.events.onResponse(Y,M(n)),Z=()=>{G(),I(),se(),de(),te()};return C.current.set(A,{unmount:Z}),Z}let i=d.events.onRemoveById(s,O),W=d.events.onRequestStartById(s,q(n)),H=d.events.onResponseStartById(s,P(n)),ee=d.events.onResponseById(s,M(n)),X=d.events.onUploadProgressById(s,m),w=d.events.onDownloadProgressById(s,p),L=()=>{i(),w(),X(),W(),H(),ee()};return C.current.set(s,{unmount:L}),L},j=()=>{let{abortKey:n}=e;t.getAllRunningRequest().forEach(i=>{i.command.abortKey===n&&t.delete(i.command.queueKey,i.requestId,n)})};return qe(()=>{v(),E()}),[{abort:j,onSuccess:n=>{c.current=n},onError:n=>{o.current=n},onAbort:n=>{f.current=n},onOfflineError:n=>{b.current=n},onFinished:n=>{x.current=n},onRequestStart:n=>{D.current=n},onResponseStart:n=>{a.current=n},onDownloadProgress:n=>{R.current=n},onUploadProgress:n=>{U.current=n}},{addDataListener:N,clearDataListener:E,addLifecycleListeners:Q,removeLifecycleListener:S,clearLifecycleListeners:v}]};import{useRef as Pe}from"react";import{useWillUnmount as Fe}from"@better-typed/react-lifecycle-hooks";var re=(e=600)=>{let t=Pe(null),r=()=>{t.current!==null&&clearTimeout(t.current),t.current=null},g=(y,l)=>{r(),t.current=setTimeout(()=>{y()},l||e)};return Fe(r),{debounce:g,resetDebounce:r,active:!!t.current}};var $={data:null,error:null,loading:!1,status:null,retries:0,timestamp:null};import{useRef as ye}from"react";import{useDidUpdate as Ce,useForceUpdate as Me}from"@better-typed/react-lifecycle-hooks";var ge=e=>{let t=Object.prototype.toString.call(e);return Array.isArray(e)?!e.length:typeof e=="object"&&e!==null&&t==="[object Object]"?!Object.keys(e).length:!1},oe=(e,t)=>{let r=Object.prototype.toString.call(e),g=Object.prototype.toString.call(t),y=typeof e,l=typeof t,d=o=>y===o&&l===o,c=o=>r===o&&g===o;return r!==g?!1:e===null&&t===null||d("number")&&Number.isNaN(e)&&Number.isNaN(t)||ge(e)&&ge(t)?!0:Array.isArray(e)&&Array.isArray(t)?e.length!==t.length?!1:!e.some((o,f)=>!oe(o,t[f])):d("object")&&c("[object Object]")?Object.keys(e).length!==Object.keys(t).length?!1:!Object.entries(e).some(([o,f])=>!oe(f,t[o])):e instanceof Date&&t instanceof Date?+e==+t:e===t};var z=(e,t)=>T({retries:(e==null?void 0:e.retries)||0,timestamp:+new Date,isFailed:!1,isCanceled:!1,isOffline:!1},t),ue=(e,t)=>t?+new Date>+t+e:!0,Ie=(e,t,r)=>!ue(e.cacheTime,r==null?void 0:r.details.timestamp)&&r?r:t?{data:t,details:z(),cacheTime:1e3,clearKey:e.builder.cache.clearKey}:null,we=e=>e?new Date(e):null,ce=(e,t,r)=>{var f,b,x;let{builder:g,cacheKey:y}=r,{cache:l}=g,d=l.get(y),c=Ie(r,e,d),o=t.hasRunningRequests(r.queueKey);return K(T({},$),{data:((f=c==null?void 0:c.data)==null?void 0:f[0])||$.data,error:((b=c==null?void 0:c.data)==null?void 0:b[1])||$.error,status:((x=c==null?void 0:c.data)==null?void 0:x[2])||$.status,retries:(c==null?void 0:c.details.retries)||$.retries,timestamp:we((c==null?void 0:c.details.timestamp)||$.timestamp),loading:o})};var V=({command:e,dispatcher:t,initialData:r,deepCompare:g,dependencyTracking:y,defaultCacheEmitting:l=!0})=>{let{builder:d,cacheKey:c,queueKey:o,cacheTime:f}=e,{cache:b,commandManager:x}=d,D=Me(),a=ye(ce(r,t,e)),R=ye([]),U=()=>{let u=b.get(c);return ue(f,(u==null?void 0:u.details.timestamp)||a.current.timestamp)},C=u=>{R.current.some(m=>u.includes(m))&&D()},k=u=>{R.current.includes(u)||R.current.push(u)};Ce(()=>{a.current.loading=t.hasRunningRequests(o);let u=ce(r,t,e),p=(r==null?void 0:r[0])===a.current.data,m=!!(a.current.data||a.current.error)&&!p,q=!m&&a.current.data,P=m&&!a.current.data;(q||P)&&(a.current=u)},[c,o],!0),Ce(()=>{(()=>{y||Object.keys(a.current).forEach(p=>k(p))})()},[y],!0);let S=(u,p)=>typeof g=="function"?g(u,p):g?oe(u,p):!1,v=u=>ne(void 0,null,function*(){let p={data:u.data[0],error:u.data[1],status:u.data[2],retries:u.details.retries,timestamp:new Date(u.details.timestamp),loading:a.current.loading},m=Object.keys(p).filter(q=>{let P=q,M=a.current[P],O=p[P];return!S(M,O)});a.current=T(T({},a.current),p),C(m)}),h={setData:(u,p=l)=>{if(p){let m=a.current;b.set(e,[u,m.error,m.status],z(a.current))}else a.current.data=u,C(["data"])},setError:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,u,m.status],z(a.current,{isFailed:!!u}))}else a.current.error=u,C(["error"])},setLoading:(u,p=!0)=>{p?x.events.emitLoading(o,"",{queueKey:o,requestId:"",isLoading:u,isRetry:!1,isOffline:!1}):(a.current.loading=u,C(["loading"]))},setStatus:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,m.error,u],z(a.current))}else a.current.status=u,C(["status"])},setRetries:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,m.error,m.status],z(a.current,{retries:u}))}else a.current.retries=u,C(["retries"])},setTimestamp:(u,p=l)=>{if(p){let m=a.current;b.set(e,[m.data,m.error,m.status],z(a.current,{timestamp:+u}))}else a.current.timestamp=u,C(["timestamp"])}};return[a.current,h,{setRenderKey:k,setCacheData:v,getStaleStatus:U}]};import Le,{useContext as Qe,useMemo as Qt,useState as Kt}from"react";var Ke=Le.createContext([{},()=>null]);var J=()=>Qe(Ke);var _t=(e,t=F)=>{let[r]=J(),{dependencies:g=F.dependencies,disabled:y=F.disabled,dependencyTracking:l=F.dependencyTracking,revalidateOnMount:d=F.revalidateOnMount,initialData:c=F.initialData,refresh:o=F.refresh,refreshTime:f=F.refreshTime,refreshBlurred:b=F.refreshBlurred,refreshOnBlur:x=F.refreshOnBlur,refreshOnFocus:D=F.refreshOnFocus,refreshOnReconnect:a=F.refreshOnReconnect,debounce:R=F.debounce,debounceTime:U=F.debounceTime,deepCompare:C=F.deepCompare}=T(T(T({},F),r.useFetchConfig),t),k=JSON.stringify(e.dump()),S=re(U),v=re(f),{cacheKey:h,queueKey:u,builder:p}=e,{cache:m,fetchDispatcher:q,appManager:P,loggerManager:M}=p,O=Be(M.init("useFetch")).current,[E,N,{setRenderKey:Q,setCacheData:j,getStaleStatus:n}]=V({logger:O,command:e,dispatcher:q,initialData:c,deepCompare:C,dependencyTracking:l}),[s,i]=_({logger:O,actions:N,command:e,dispatcher:q,setCacheData:j}),{addDataListener:W,addLifecycleListeners:H,clearDataListener:ee,clearLifecycleListeners:X}=i,w=()=>{y?O.debug("Cannot add to fetch queue",{disabled:y}):(O.debug("Fetching data"),q.add(e))};function L(){if(!o)return;let I=he(f,E.timestamp);O.debug(`Starting refresh counter, request will be send in ${I}ms`),v.debounce(()=>{let G=!P.isFocused,te=q.hasRunningRequests(e.queueKey),Z=q.getIsActiveQueue(e.queueKey),ae=te||Z;(G&&b&&!ae||!G&&!ae)&&(w(),O.debug("Performing refresh request")),L()},I)}let A=I=>{I&&I instanceof be?m.revalidate(je(I)):I&&!(I instanceof be)?m.revalidate(I):(w(),L())},Y=()=>{let I=n(),G=q.getIsActiveQueue(u);(d||I&&!G)&&w()},se=()=>{R?(O.debug("Debouncing request",{queueKey:u,command:e}),S.debounce(()=>w())):w()};return ie(()=>{W(e),H(e);let I=P.events.onFocus(()=>{D&&(w(),L())}),G=P.events.onBlur(()=>{x&&(w(),L())}),te=P.events.onOnline(()=>{a&&(w(),L())}),Z=m.events.onRevalidate(h,w);return()=>{ee(),X(),I(),G(),te(),Z()}},[k],!0),Ae(Y),ie(se,[k,...g]),ie(L,[k,...g,y,o,f],!0),K(T(T({get data(){return Q("data"),E.data},get error(){return Q("error"),E.error},get loading(){return Q("loading"),E.loading},get status(){return Q("status"),E.status},get retries(){return Q("retries"),E.retries},get timestamp(){return Q("timestamp"),E.timestamp}},N),s),{isDebouncing:S.active,revalidate:A})};var he=(e,t)=>{if(t){let r=Date.now()-+t;return r<e?e-r:e}return e};import{DateInterval as Ne}from"@better-typed/hyper-fetch";var F={dependencies:[],disabled:!1,dependencyTracking:!0,revalidateOnMount:!0,initialData:null,refresh:!1,refreshTime:Ne.hour,refreshBlurred:!0,refreshOnBlur:!1,refreshOnFocus:!1,refreshOnReconnect:!1,debounce:!1,debounceTime:400,deepCompare:!0};import{useRef as Re}from"react";import{Command as xe,getCommandKey as We,commandSendRequest as Ge}from"@better-typed/hyper-fetch";import{useDidMount as Je}from"@better-typed/react-lifecycle-hooks";var Dn=(e,t=pe)=>{let[r]=J(),{disabled:g,dependencyTracking:y,initialData:l,debounce:d,debounceTime:c,deepCompare:o}=T(T(T({},pe),r.useSubmitConfig),t),{builder:f}=e,{cache:b,submitDispatcher:x,loggerManager:D}=f,a=Re(D.init("useSubmit")).current,R=re(c),U=Re(()=>null),[C,k,{setRenderKey:S,setCacheData:v}]=V({logger:a,command:e,dispatcher:x,initialData:l,deepCompare:o,dependencyTracking:y}),[h,u]=_({logger:a,actions:k,command:e,dispatcher:x,setCacheData:v}),{addDataListener:p,addLifecycleListeners:m}=u,q=(...O)=>{let E=O[0],N=e.clone(E);if(g)throw a.warning("Cannot submit request",{disabled:g,submitOptions:E}),new Error("Cannot submit request. Option 'disabled' is enabled");let Q=()=>(p(N),Ge(N,K(T({dispatcherType:"submit"},E),{onSettle:(j,n)=>{var s;m(N,j),(s=E==null?void 0:E.onSettle)==null||s.call(E,j,n)}})));return new Promise(j=>{(()=>ne(void 0,null,function*(){if(a.debug("Submitting request",{disabled:g,submitOptions:E}),d)U.current=s=>{U.current(s),j(s)},R.debounce(()=>ne(void 0,null,function*(){let s=U.current;U.current=()=>null;let i=yield Q();s(i)}));else{let s=yield Q();j(s)}}))()})},P=O=>{!O||(O&&O instanceof xe?b.revalidate(We(O)):O instanceof xe||b.revalidate(O))},M={onSubmitSuccess:h.onSuccess,onSubmitError:h.onError,onSubmitFinished:h.onFinished,onSubmitRequestStart:h.onRequestStart,onSubmitResponseStart:h.onResponseStart,onSubmitDownloadProgress:h.onDownloadProgress,onSubmitUploadProgress:h.onUploadProgress,onSubmitOfflineError:h.onOfflineError,onSubmitAbort:h.onAbort};return Je(()=>{p(e)}),K(T(T({submit:q,get data(){return S("data"),C.data},get error(){return S("error"),C.error},get submitting(){return S("loading"),C.loading},get status(){return S("status"),C.status},get retries(){return S("retries"),C.retries},get timestamp(){return S("timestamp"),C.timestamp},abort:h.abort},k),M),{isDebouncing:R.active,revalidate:P})};var pe={disabled:!1,dependencyTracking:!0,cacheOnMount:!0,initialData:null,debounce:!1,debounceTime:400,suspense:!1,shouldThrow:!1,invalidate:[],deepCompare:!0};import{useState as Se,useRef as $e}from"react";import{getCommandDispatcher as ze}from"@better-typed/hyper-fetch";import{useDidMount as He,useDidUpdate as Xe}from"@better-typed/react-lifecycle-hooks";var Nn=(e,t=le)=>{let[r]=J(),{queueType:g="auto"}=T(T(T({},le),r.useQueueConfig),t),{abortKey:y,queueKey:l,builder:d}=e,{commandManager:c}=d,[o]=ze(e,g),f=$e(null),[b,x]=Se(!1),[D,a]=Se([]),R=v=>v.map(h=>K(T({},h),{stopRequest:()=>o.stopRequest(l,h.requestId),startRequest:()=>o.startRequest(l,h.requestId),deleteRequest:()=>o.delete(l,h.requestId,y)})),U=(v,h)=>{a(u=>u.map(p=>p.requestId===v?T(T({},p),h):p))},C=()=>{let v=o.getQueue(l);x(v.stopped),a(R(v.requests))},k=v=>{x(v.stopped),a(R(v.requests))},S=()=>{var q;let v=o.events.onQueueChange(l,k),h=o.events.onQueueStatus(l,k),u=c.events.onDownloadProgress(l,(P,{requestId:M})=>{U(M,{downloading:P})}),p=c.events.onUploadProgress(l,(P,{requestId:M})=>{U(M,{uploading:P})}),m=()=>{h(),v(),u(),p()};return(q=f.current)==null||q.call(f),f.current=m,m};return He(C),Xe(S,[b,D,a,x],!0),{stopped:b,requests:D,stop:()=>o.stop(l),pause:()=>o.pause(l),start:()=>o.start(l)}};var le={queueType:"auto"};import{useRef as Ye}from"react";import{getCommandDispatcher as Ze,Command as _e,getCommandKey as Ve}from"@better-typed/hyper-fetch";var rr=(e,t=me)=>{let{cacheKey:r,builder:g}=e,{cache:y,loggerManager:l}=g,d=Ye(l.init("useCache")).current,[c]=Ze(e),[o]=J(),{dependencyTracking:f,initialData:b,deepCompare:x}=T(T(T({},me),o.useCacheConfig),t),[D,a,{setRenderKey:R,setCacheData:U}]=V({logger:d,command:e,dispatcher:c,initialData:b,deepCompare:x,dependencyTracking:f}),[C]=_({logger:d,actions:a,command:e,dispatcher:c,setCacheData:U}),k=S=>{S instanceof _e?y.revalidate(Ve(S,!0)):S?y.revalidate(S):y.revalidate(r)};return K(T({get data(){return R("data"),D.data},get error(){return R("error"),D.error},get loading(){return R("loading"),D.loading},get status(){return R("status"),D.status},get retries(){return R("retries"),D.retries},get timestamp(){return R("timestamp"),D.timestamp},onCacheError:C.onError,onCacheSuccess:C.onSuccess,onCacheChange:C.onFinished},a),{revalidate:k})};var me={dependencyTracking:!0,initialData:null,deepCompare:!0};import{useState as Ee}from"react";import{useDidMount as et}from"@better-typed/react-lifecycle-hooks";var mr=e=>{let[t,r]=Ee(e.appManager.isOnline),[g,y]=Ee(e.appManager.isFocused),l=()=>{let o=e.appManager.events.onOnline(()=>r(!0)),f=e.appManager.events.onOffline(()=>r(!1)),b=e.appManager.events.onFocus(()=>y(!0)),x=e.appManager.events.onBlur(()=>y(!1));return()=>{o(),f(),b(),x()}},d=o=>{e.appManager.setOnline(o)},c=o=>{e.appManager.setFocused(o)};return et(l),{isOnline:t,isFocused:g,setOnline:d,setFocused:c}};export{z as getDetailsState,ce as getInitialState,he as getRefreshTime,we as getTimestamp,Ie as getValidCacheData,$ as initialState,ge as isEmpty,oe as isEqual,ue as isStaleCacheData,mr as useAppManager,rr as useCache,me as useCacheDefaultOptions,_ as useCommandEvents,re as useDebounce,_t as useFetch,F as useFetchDefaultOptions,Nn as useQueue,le as useQueueDefaultOptions,Dn as useSubmit,pe as useSubmitDefaultOptions,V as useTrackedState}; | ||
//# sourceMappingURL=index.esm.js.map |
export * from "./use-fetch.hooks"; | ||
export * from "./use-fetch.types"; | ||
export * from "./use-fetch.utils"; | ||
export * from "./use-fetch.constants"; |
@@ -9,2 +9,2 @@ import { CommandInstance } from "@better-typed/hyper-fetch"; | ||
*/ | ||
export declare const useSubmit: <T extends CommandInstance>(command: T, options?: UseSubmitOptionsType<T>) => UseSubmitReturnType<T>; | ||
export declare const useSubmit: <Command_1 extends CommandInstance>(command: Command_1, options?: UseSubmitOptionsType<Command_1>) => UseSubmitReturnType<Command_1>; |
{ | ||
"name": "@better-typed/react-hyper-fetch", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"private": false, | ||
@@ -5,0 +5,0 @@ "description": "React hooks and utils for the hyper-fetch", |
@@ -6,3 +6,2 @@ import { useRef } from "react"; | ||
CommandInstance, | ||
getErrorMessage, | ||
FetchProgressType, | ||
@@ -148,20 +147,2 @@ ClientResponseType, | ||
const handleAbort = (cmd: T) => { | ||
return () => { | ||
const data: ClientResponseType<ExtractResponse<T>, ExtractError<T>> = [ | ||
null, | ||
getErrorMessage("abort") as ExtractError<T>, | ||
0, | ||
]; | ||
const details: CommandResponseDetails = { | ||
retries: 0, | ||
timestamp: +new Date(), | ||
isFailed: false, | ||
isCanceled: true, | ||
isOffline: false, | ||
}; | ||
handleResponseCallbacks(cmd, data, details); | ||
}; | ||
}; | ||
// ****************** | ||
@@ -180,3 +161,2 @@ // Data Listeners | ||
const getResponseUnmount = cache.events.onData<ExtractResponse<T>, ExtractError<T>>(cmd.cacheKey, setCacheData); | ||
const abortUnmount = commandManager.events.onAbort(cmd.abortKey, handleAbort(cmd)); | ||
@@ -186,3 +166,2 @@ const unmount = () => { | ||
getResponseUnmount(); | ||
abortUnmount(); | ||
}; | ||
@@ -189,0 +168,0 @@ |
export * from "./use-fetch.hooks"; | ||
export * from "./use-fetch.types"; | ||
export * from "./use-fetch.utils"; | ||
export * from "./use-fetch.constants"; |
@@ -6,3 +6,3 @@ import { useRef } from "react"; | ||
import { useDebounce, useCommandEvents, useTrackedState } from "helpers"; | ||
import { UseFetchOptionsType, useFetchDefaultOptions, UseFetchReturnType } from "use-fetch"; | ||
import { UseFetchOptionsType, useFetchDefaultOptions, UseFetchReturnType, getRefreshTime } from "use-fetch"; | ||
import { useConfigProvider } from "config-provider"; | ||
@@ -95,4 +95,6 @@ | ||
if (!refresh) return; | ||
logger.debug(`Starting refresh counter, request will be send in ${refreshTime}ms`); | ||
const time = getRefreshTime(refreshTime, state.timestamp); | ||
logger.debug(`Starting refresh counter, request will be send in ${time}ms`); | ||
refreshDebounce.debounce(() => { | ||
@@ -115,3 +117,3 @@ const isBlurred = !appManager.isFocused; | ||
handleRefresh(); | ||
}); | ||
}, time); | ||
} | ||
@@ -118,0 +120,0 @@ |
@@ -20,3 +20,3 @@ import { useState, useRef } from "react"; | ||
const [globalConfig] = useConfigProvider(); | ||
const { queueType } = { | ||
const { queueType = "auto" } = { | ||
...useQueueDefaultOptions, | ||
@@ -23,0 +23,0 @@ ...globalConfig.useQueueConfig, |
@@ -11,2 +11,3 @@ import { useRef } from "react"; | ||
ExtractError, | ||
FetchType, | ||
} from "@better-typed/hyper-fetch"; | ||
@@ -25,6 +26,6 @@ import { useDidMount } from "@better-typed/react-lifecycle-hooks"; | ||
*/ | ||
export const useSubmit = <T extends CommandInstance>( | ||
command: T, | ||
options: UseSubmitOptionsType<T> = useSubmitDefaultOptions, | ||
): UseSubmitReturnType<T> => { | ||
export const useSubmit = <Command extends CommandInstance>( | ||
command: Command, | ||
options: UseSubmitOptionsType<Command> = useSubmitDefaultOptions, | ||
): UseSubmitReturnType<Command> => { | ||
// Build the configuration options | ||
@@ -47,3 +48,5 @@ const [globalConfig] = useConfigProvider(); | ||
const requestDebounce = useDebounce(debounceTime); | ||
const debounceResolve = useRef<(value: ClientResponseType<ExtractResponse<T>, ExtractError<T>>) => void>(() => null); | ||
const debounceResolve = useRef<(value: ClientResponseType<ExtractResponse<Command>, ExtractError<Command>>) => void>( | ||
() => null, | ||
); | ||
@@ -53,3 +56,3 @@ /** | ||
*/ | ||
const [state, actions, { setRenderKey, setCacheData }] = useTrackedState<T>({ | ||
const [state, actions, { setRenderKey, setCacheData }] = useTrackedState<Command>({ | ||
logger, | ||
@@ -80,5 +83,5 @@ command, | ||
const handleSubmit = (...parameters: Parameters<T["send"]>) => { | ||
const submitOptions = parameters[0]; | ||
const commandClone = command.clone(submitOptions) as T; | ||
const handleSubmit = (...parameters: Parameters<Command["send"]>) => { | ||
const submitOptions = parameters[0] as FetchType<Command> | undefined; | ||
const commandClone = command.clone(submitOptions as any) as Command; | ||
@@ -92,8 +95,13 @@ if (disabled) { | ||
addDataListener(commandClone); | ||
return commandSendRequest(commandClone, "submit", (requestId) => { | ||
addLifecycleListeners(commandClone, requestId); | ||
return commandSendRequest(commandClone, { | ||
dispatcherType: "submit", | ||
...submitOptions, | ||
onSettle: (requestId, cmd) => { | ||
addLifecycleListeners(commandClone, requestId); | ||
submitOptions?.onSettle?.(requestId, cmd); | ||
}, | ||
}); | ||
}; | ||
return new Promise<ExtractClientReturnType<T>>((resolve) => { | ||
return new Promise<ExtractClientReturnType<Command>>((resolve) => { | ||
const performSubmit = async () => { | ||
@@ -103,3 +111,3 @@ logger.debug(`Submitting request`, { disabled, submitOptions }); | ||
// We need to keep the resolve of debounced requests to prevent memory leaks | ||
debounceResolve.current = (value: ClientResponseType<ExtractResponse<T>, ExtractError<T>>) => { | ||
debounceResolve.current = (value: ClientResponseType<ExtractResponse<Command>, ExtractError<Command>>) => { | ||
debounceResolve.current(value); | ||
@@ -106,0 +114,0 @@ resolve(value); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
253920
0.14%84
2.44%0
-100%2545
-0.04%