@bisham/query-factory
Version:
A simple, type-safe utility to create and manage React Query queries effortlessly.
2 lines (1 loc) • 1.97 kB
JavaScript
import{useQuery as r,queryOptions as e}from"@tanstack/react-query";function a(a,t){const s=r=>0===a.queryKey.length,n=r=>a.queryKey.length>0,i=r=>{if(!Array.isArray(r))return[];let e=r.length;for(const a of r)if("string"!=typeof a){e=r.indexOf(a);break}return r.slice(0,e)},u=r=>{if(n()&&r)return a.queryKey(r.params);if(s())return a.queryKey();throw new Error("Invalid query key")},y=r=>{if(n()&&"params"in r)return a.queryFn({...r,params:r.params});if(s())return a.queryFn(r);throw new Error("Invalid query fn")},o=r=>{if(s()&&s())return e({...a,...r,queryKey:u({params:void 0}),queryFn:y});if(n()&&n()&&"params"in r)return e({...a,...r,queryKey:u({params:r.params}),queryFn:e=>y({...e,params:r.params})});throw new Error("Invalid query options")},p=e=>r(o(e),t),m=r=>t.getQueryData(u({params:r?.params})),f=r=>t.getQueriesData({...r,queryKey:i(u({params:void 0}))});return p.getQueryKey=u,p.getQueryOptions=o,p.getQueryData=m,p.getQueriesData=f,p.setQueryData=r=>t.setQueryData(u({params:r.params}),r.updater,r.options),p.removeQueryData=r=>t.removeQueries({...r,queryKey:u({params:r?.params})}),p.removeAllQueriesData=r=>t.removeQueries({...r,queryKey:i(u({params:void 0}))}),p.invalidateQuery=async r=>{const{filters:e={},params:a,options:s={}}=r??{},n=u({params:a});return await t.invalidateQueries({...e,queryKey:n},s),m({params:a})},p.invalidateAllQueries=async r=>{const{filters:e={},options:a={}}=r??{};return await t.invalidateQueries({...e,queryKey:i(u({params:void 0}))},a),f()},p.refetchQuery=async r=>{const{filters:e={},params:a,options:s={}}=r??{},n=u({params:a});return await t.refetchQueries({...e,queryKey:n},s),m({params:a})},p.refetchAllQueries=async r=>{const{filters:e={},options:a={}}=r??{},s=i(u({params:void 0}));return await t.refetchQueries({...e,queryKey:s},a),f()},p.prefetch=async r=>(await t.prefetchQuery(o(r)),m({params:r?.params})),p}function t(r){return function(e){return a(e,r)}}export{a as createQuery,t as createQueryFactory};