UNPKG

@zodios/react

Version:
6 lines (3 loc) 4.36 kB
import { useQueryClient, useQuery, useInfiniteQuery, useMutation } from '@tanstack/react-query'; function l(r,o){let e={...r};for(let t of o)delete e[t];return e}function p(r,o){let e={};if(r)for(let t of o)t in r&&r[t]!==void 0&&(e[t]=r[t]);return e}function P(r){return r.charAt(0).toUpperCase()+r.slice(1)}function D(r){return Boolean(r)}function A(...r){let o=r.filter(D);if(o.length<2)return o[0];let e=new AbortController;function t(){e.abort(),o.forEach(s=>{s.removeEventListener("abort",t);});}return o.forEach(s=>{s.aborted?t():s.addEventListener("abort",t);}),e.signal}var Z=class{constructor(o,e,t={}){this.apiName=o;this.zodios=e;this.options=t;this.injectAliasEndpoints();}injectAliasEndpoints(){this.zodios.api.forEach(o=>{o.alias&&(["post","put","patch","delete"].includes(o.method)?o.method==="post"&&o.immutable?this[`use${P(o.alias)}`]=(e,t,s)=>this.useImmutableQuery(o.path,e,t,s):this[`use${P(o.alias)}`]=(e,t)=>this.useMutation(o.method,o.path,e,t):this[`use${P(o.alias)}`]=(e,t)=>this.useQuery(o.path,e,t));});}getEndpointByPath(o,e){return this.zodios.api.find(t=>t.method===o&&t.path===e)}getEndpointByAlias(o){return this.zodios.api.find(e=>e.alias===o)}getKeyByPath(o,e,t){let s=this.getEndpointByPath(o,e);if(!s)throw new Error(`No endpoint found for path '${o} ${e}'`);if(t){let a=p(t,["params","queries"]);return [{api:this.apiName,path:s.path},a]}return [{api:this.apiName,path:s.path}]}getKeyByAlias(o,e){let t=this.getEndpointByAlias(o);if(!t)throw new Error(`No endpoint found for alias '${o}'`);if(e){let s=p(e,["params","queries"]);return [{api:this.apiName,path:t.path},s]}return [{api:this.apiName,path:t.path}]}useQuery(o,...[e,t]){let s=p(e,["params","queries"]),a=[{api:this.apiName,path:o},s],d=this.options.shouldAbortOnUnmount?({signal:u})=>this.zodios.get(o,{...e,signal:A(u,e==null?void 0:e.signal)}):()=>this.zodios.get(o,e),y=useQueryClient(),h=()=>y.invalidateQueries(a),i=useQuery(a,d,t);return i.invalidate=h,i.key=a,i}useImmutableQuery(o,e,...[t,s]){let a=p(t,["params","queries"]),d=[{api:this.apiName,path:o},a,e],y=this.options.shouldAbortOnUnmount?({signal:n})=>this.zodios.post(o,e,{...t,signal:A(n,t==null?void 0:t.signal)}):()=>this.zodios.post(o,e,t),h=useQueryClient(),i=()=>h.invalidateQueries(d),u=useQuery(d,y,s);return u.invalidate=i,u.key=d,u}useInfiniteQuery(o,...[e,t]){let s=p(e,["params","queries"]);s.params&&t&&(s.params=l(s.params,t.getPageParamList())),s.queries&&t&&(s.queries=l(s.queries,t.getPageParamList()));let a=[{api:this.apiName,path:o},s],d=this.options.shouldAbortOnUnmount?({pageParam:i=void 0,signal:u})=>this.zodios.get(o,{...e,queries:{...e==null?void 0:e.queries,...i==null?void 0:i.queries},params:{...e==null?void 0:e.params,...i==null?void 0:i.params},signal:A(u,e==null?void 0:e.signal)}):({pageParam:i=void 0})=>this.zodios.get(o,{...e,queries:{...e==null?void 0:e.queries,...i==null?void 0:i.queries},params:{...e==null?void 0:e.params,...i==null?void 0:i.params}}),y=useQueryClient();return {invalidate:()=>y.invalidateQueries(a),key:a,...useInfiniteQuery(a,d,t)}}useImmutableInfiniteQuery(o,e,...[t,s]){let a=p(t,["params","queries"]);a.params&&s&&(a.params=l(a.params,s.getPageParamList())),a.queries&&s&&(a.queries=l(a.queries,s.getPageParamList()));let d;e&&s&&(d=l(e,s.getPageParamList()));let y=[{api:this.apiName,path:o},a,d],h=this.options.shouldAbortOnUnmount?({pageParam:n=void 0,signal:O})=>this.zodios.post(o,{...e,...n==null?void 0:n.body},{...t,queries:{...t==null?void 0:t.queries,...n==null?void 0:n.queries},params:{...t==null?void 0:t.params,...n==null?void 0:n.params},signal:A(O,t==null?void 0:t.signal)}):({pageParam:n=void 0})=>this.zodios.post(o,{...e,...n==null?void 0:n.body},{...t,queries:{...t==null?void 0:t.queries,...n==null?void 0:n.queries},params:{...t==null?void 0:t.params,...n==null?void 0:n.params}}),i=useQueryClient();return {invalidate:()=>i.invalidateQueries(y),key:y,...useInfiniteQuery(y,h,s)}}useMutation(o,e,...[t,s]){return useMutation(d=>this.zodios.request({...t,method:o,url:e,data:d}),s)}useGet(o,...e){return this.useQuery(o,...e)}usePost(o,...e){return this.useMutation("post",o,...e)}usePut(o,...e){return this.useMutation("put",o,...e)}usePatch(o,...e){return this.useMutation("patch",o,...e)}useDelete(o,...e){return this.useMutation("delete",o,...e)}},Q=Z; export { Q as ZodiosHooks, Z as ZodiosHooksClass };