UNPKG

jotai-query-toolkit

Version:

A toolkit for opinionated ways to use Jotai, react-query, and next.js

2 lines (1 loc) 5.64 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _=Object.defineProperty,B=Object.defineProperties;var M=Object.getOwnPropertyDescriptors;var g=Object.getOwnPropertySymbols;var D=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var T=(e,t,r)=>t in e?_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))D.call(t,r)&&T(e,r,t[r]);if(g)for(var r of g(t))W.call(t,r)&&T(e,r,t[r]);return e},f=(e,t)=>B(e,M(t));var x=(e,t)=>{var r={};for(var o in e)D.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&g)for(var o of g(e))t.indexOf(o)<0&&W.call(e,o)&&(r[o]=e[o]);return r};var _react = require('react');var _jotai = require('jotai');var q=()=>new WeakMap;var Qe=Symbol?Symbol.isConcatSpreadable:void 0;var de=q();function h(e){return`[jotai-query-toolkit] ${e}`}var _utils = require('jotai/utils');var _es6 = require('fast-deep-equal/es6'); var _es62 = _interopRequireDefault(_es6);var I=_utils.atomFamily.call(void 0, e=>{let t=_jotai.atom.call(void 0, void 0);return t.debugLabel=`initialDataAtom/${e}`,t},_es62.default);var U=typeof window=="undefined",K,k=typeof process=="object"&&((K=process==null?void 0:process.env)==null?void 0:K.NODE_ENV)!=="production";var _reactquery = require('react-query');var l=new (0, _reactquery.QueryClient)({defaultOptions:{queries:{cacheTime:1e3*60*60*12,notifyOnChangeProps:["data","error"]}}});var j=_jotai.atom.call(void 0, l);function A(e){return[...(e?Object.keys(e):[]).map(o=>{if(o&&e&&!(o in e))throw Error(`[Jotai Query Toolkit] no initial data found for ${_reactquery.hashQueryKey.call(void 0, o)}`);let n=e?e[o]:null;return[I(o),n]})]}function w(e,t){return t.map(([r,o])=>{let n=e[r];return o(n)})}function Z(e,t){if(!t)return[e,[]];let r=w(e,t);return t.forEach(([o])=>{delete e[o]}),[e,r]}var V=(o,r)=>{var n=o,{initialQueryData:e}=n,t=x(n,["initialQueryData"]);let i=A(e),s=_react.useMemo.call(void 0, ()=>_reactquery.hashQueryKey.call(void 0, e?Object.keys(e):[]),[e]),[u,m]=Z(t,r),d=_react.useMemo.call(void 0, ()=>[...m,...i],[i,m]);return y({initialValues:d,key:s},u)};function S(e,t){return o=>{let u=V(o,t),{initialValues:n,key:i}=u,s=x(u,["initialValues","key"]);return _react.createElement.call(void 0, _jotai.Provider,{initialValues:n,key:i},_react.createElement.call(void 0, e,s))}}function v(e,t){let o=t.getQueryCache().getAll(),n=_reactquery.hashQueryKey.call(void 0, e),i=o.find(s=>s.queryHash===n);if(i)return i==null?void 0:i.state.data}function G(e,t){let r={};if(e.forEach(o=>{let n=v(o,t);n&&(r[_reactquery.hashQueryKey.call(void 0, o)]=n)}),Object.keys(r).length)return r}function te(e,t){return t[_reactquery.hashQueryKey.call(void 0, e)]}async function c(e){try{let{getQueries:t,ctx:r,getQueryProps:o,queryClient:n}=e,i=o?await o(r,n):void 0,s=p=>typeof p=="function"?p(r,i,n):p,u=typeof t=="function"?await t(r,i,n):t;if(!u)return{};let m=(await Promise.all(u.filter(([p])=>!!p).map(async([p,P])=>[await s(p),P]))).filter(([p])=>p),d=m.map(([p])=>p);if(d.length===0)return k&&console.error(h("getInitialPropsFromQueries -> no query keys")),{};let Q=G(d,n)||{};return Object.keys(Q).length===m.length||(await Promise.all(m.filter(([p])=>!!!Q[_reactquery.hashQueryKey.call(void 0, p)]).map(async([p,P])=>{let O=await P(r,i,n);return[p,O]}))).forEach(([p,P])=>{Q[_reactquery.hashQueryKey.call(void 0, p)]=P}),Q}catch(t){return k&&console.error(h(t==null?void 0:t.message)),{error:!0,message:t.message}}}function b(e,t){return r=>async o=>{async function n(){try{return r?r(o):{}}catch(m){return console.error("[jotai-query-toolkit] getInitialQueryProps: getInitialProps failed. message:"),console.error(m),{}}}let i=[c({getQueries:e,getQueryProps:t,ctx:o,queryClient:l}),n()],[s,u]=await Promise.all(i);return f(y({},u),{initialQueryData:s})}}function re(e,t,r){function o(n,i){let s=typeof e.getInitialProps!="undefined",u=typeof r!="undefined";if(u&&s)throw new TypeError("[jotai-query-toolkit] withInitialQueries: The wrapped next.js page has getInitialProps defined, and getInitialProps was passed to withInitialQueries. Please only use one of these.");let m=S(e,t);return typeof n!="undefined"?m.getInitialProps=b(n,i)(r||e.getInitialProps):u?m.getInitialProps=r:s&&(m.getInitialProps=e.getInitialProps),m}return o}var _devtools = require('react-query/devtools');var ae=_react.memo.call(void 0, ()=>{if(process.env.NODE_ENV==="production")return null;let e=_utils.useAtomValue.call(void 0, j);return e?_react.createElement.call(void 0, _reactquery.QueryClientProvider,{client:e},_react.createElement.call(void 0, _devtools.ReactQueryDevtools)):null});function ue(e,t){return r=>async o=>{let n=async()=>r?r(o):{props:{}},i=[c({getQueries:e,getQueryProps:t,ctx:o,queryClient:l}),n()],[s,u]=await Promise.all(i);return f(y({},u),{props:f(y({},u.props),{initialQueryData:s})})}}function pe(e,t){return r=>async o=>{let i=[(async()=>r?r(o):{props:{}})()];typeof e!="undefined"&&i.push(c({getQueries:e,getQueryProps:t,ctx:o,queryClient:l}));let[s,u]=await Promise.all(i);return{props:f(y({},(s==null?void 0:s.props)||{}),{initialQueryData:u})}}}exports.IS_SSR = U; exports.JqtDevtools = ae; exports.buildInitialValueAtoms = w; exports.getCachedQueryData = G; exports.getDataFromQueryArray = te; exports.getInitialPropsFromQueries = c; exports.getInitialQueryProps = b; exports.getServerSideQueryProps = pe; exports.getSingleCachedQueryData = v; exports.getStaticQueryProps = ue; exports.useQueryInitialValues = A; exports.withInitialQueries = re; exports.withInitialQueryData = S;