@airma/react-effect
Advanced tools
Comparing version 18.3.0-alpha.12 to 18.3.0
@@ -1,1 +0,1 @@ | ||
!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react"),require("@airma/react-state"),require("@airma/react-hooks-core")):"function"==typeof define&&define.amd?define(["react","@airma/react-state","@airma/react-hooks-core"],e):"object"==typeof exports?exports["@airma/react-effect"]=e(require("react"),require("@airma/react-state"),require("@airma/react-hooks-core")):r["@airma/react-effect"]=e(r.react,r["@airma/react-state"],r["@airma/react-hooks-core"])}(self,(function(r,e,n){return function(){"use strict";var t={309:function(r){r.exports=n},719:function(r){r.exports=e},156:function(e){e.exports=r}},o={};function u(r){var e=o[r];if(void 0!==e)return e.exports;var n=o[r]={exports:{}};return t[r](n,n.exports,u),n.exports}u.d=function(r,e){for(var n in e)u.o(e,n)&&!u.o(r,n)&&Object.defineProperty(r,n,{enumerable:!0,get:e[n]})},u.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},u.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})};var i={};return function(){function r(r,e,n){return e in r?Object.defineProperty(r,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):r[e]=n,r}function e(r,e){(null==e||e>r.length)&&(e=r.length);for(var n=0,t=new Array(e);n<e;n++)t[n]=r[n];return t}function n(r,n){if(r){if("string"==typeof r)return e(r,n);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(r,n):void 0}}function t(r){return function(r){if(Array.isArray(r))return e(r)}(r)||function(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}(r)||n(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(r,e){return function(r){if(Array.isArray(r))return r}(r)||function(r,e){var n=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=n){var t,o,u=[],i=!0,c=!1;try{for(n=n.call(r);!(i=(t=n.next()).done)&&(u.push(t.value),!e||u.length!==e);i=!0);}catch(r){c=!0,o=r}finally{try{i||null==n.return||n.return()}finally{if(c)throw o}}return u}}(r,e)||n(r,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}u.r(i),u.d(i,{ConfigProvider:function(){return w},Provider:function(){return $},SessionProvider:function(){return Y},Strategy:function(){return L},createSessionKey:function(){return g},provide:function(){return B},session:function(){return H},useIsFetching:function(){return J},useLazyComponent:function(){return N},useLoadedSession:function(){return z},useMutation:function(){return Q},useQuery:function(){return R},useResponse:function(){return _},useSession:function(){return U}});var c=u(156),a=u(719),s=u(309);function f(r,e){if(null==r)return{};var n,t,o=function(r,e){if(null==r)return{};var n,t,o={},u=Object.keys(r);for(t=0;t<u.length;t++)n=u[t],e.indexOf(n)>=0||(o[n]=r[n]);return o}(r,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(r);for(t=0;t<u.length;t++)n=u[t],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(r,n)&&(o[n]=r[n])}return o}var l=["version"];function d(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.push.apply(n,t)}return n}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?d(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):d(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function y(r){var e=r.version,n=f(r,l),t=function(n){return v(v({},n),{},{version:e,uniqueKey:r.uniqueKey})},o=function(e){return e.isFetching?e:v(v({},e),{},{fetchVersion:(r.fetchVersion||0)+1})};return{state:n,version:e||0,setState:function(e){return o(t("function"!=typeof e?e:e(r)))},setFetchingKey:function(e){return t(v(v({},r),{},{fetchingKey:e,finalFetchingKey:null!=e?e:r.finalFetchingKey}))},removeFetchingKey:function(e){return r.fetchingKey!==e?r:t(v(v({},r),{},{fetchingKey:void 0}))},trigger:function(){return v(v({},r),{},{version:(e||0)+1})}}}var p=function(r){return v({data:void 0,variables:void 0,isError:!1,isFetching:!1,abandon:!1,triggerType:void 0,loaded:!1,sessionLoaded:!1,cache:[]},r)};function h(r,e,n){if(!("function"==typeof r.pipe))return[y,r,n,!1];var t=o(r.effect,2),u=t[0],i=t[1].sessionType;if(null!=i&&i!==e)throw new Error("The sessionType is not matched, can not use '".concat(i," type' sessionKey with '").concat("query"===e?"useQuery":"useMutation","'"));return[r,u,n,!0]}function b(r,e){return o(h(r,"query",Array.isArray(e)?{variables:e}:e),3)[2]||{}}function g(r,e){var n=(0,a.createKey)(y,p());return n.effect=[function(){return r.apply(void 0,arguments)},e?{sessionType:e}:{}],n}var m=[],O=(0,a.createKey)((function(r){return{isFetching:r.length>0,setGlobalFetchingKey:function(e){return r.some((function(r){return r===e}))?r:r.concat(e)},removeGlobalFetchingKey:function(e){return r.some((function(r){return r===e}))?r.filter((function(r){return r!==e})):r}}}),m),j=(0,c.createContext)(null);function w(r){var e=r.value,n=r.children,t=(0,c.useMemo)((function(){return e.useGlobalFetching?O:void 0}),[]);return(0,c.createElement)(j.Provider,{value:e},t?(0,c.createElement)(a.Provider,{value:t},n):n)}function P(){return(0,c.useContext)(j)}function E(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.push.apply(n,t)}return n}function S(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?E(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):E(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function F(r){return Array.isArray(r)?r:[r]}function T(r,e,n){var u=F(n.strategy),i=(0,c.useRef)(u.map((function(){return{current:void 0}})));return[function(c,a){var s,f,l=a||[],d={current:function(){return r.state},variables:l,runner:function(n){var t=r.state,o=r.setState,u=S(S({},t),{},{isFetching:!0}),i=n?n(u):u;return i.abandon||o(S(S({},i),{},{triggerType:c})),e(c,l)},triggerType:c,config:n,store:i,runtimeCache:(s=[],f=function(r){var e=s.find((function(e){return o(e,1)[0]===r}));if(Array.isArray(e))return e},{set:function(r,e){var n=f(r);n?n[1]=e:s.push([r,e])},get:function(r){var e=f(r);if(e)return e[1]}})};return function(r){return function(e){var n=[],o=e.store.current;return t(r).reverse().reduce((function(r,e,t){var u=o[t]||{current:void 0};return function(t){var o=S(S({},t),{},{store:u});return null==e?r(o):e(S(S({},o),{},{runner:function(e){return null!=e&&n.push(e),r(o)}}))}}),(function(r){return r.runner((function(r){return n.reduce((function(r,e){return r.abandon?r:e(r)}),r)}))}))(e).then((function(r){var n=e.current(),t=n.loaded,o=n.sessionLoaded,u=r.abandon,i=r.isError,c=r.isFetching,a=t||!u&&!i&&!c,s=o||!u&&!i&&!c;return S(S({},r),{},{loaded:a,sessionLoaded:s})}))}}(u)(d).then((function(e){return e.abandon||r.setState(e),e}))},u.map((function(r){if(r)return r.effect})).filter((function(r){return!!r})),u.map((function(r){if(r)return r.response})).filter((function(r){return!!r}))]}var A=["cache"];function K(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.push.apply(n,t)}return n}function D(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?K(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):K(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var M=function(r,e){return!!Object.is(r,e)||null!=r&&null!=e&&JSON.stringify(r)===JSON.stringify(e)};function q(r,e){var n=(e||{}).withAbandoned;return function(e){var t=e.runner,o=e.runtimeCache,u=e.store,i=o.get(q);return o.set(q,!0),u.current=r,t().then((function(r){var e=u.current;return!r.isError||i||!e||r.abandon&&!n||e(r.error,r),r}))}}function x(r){var e=function(r){return(0,r.runner)()};return e.response=r,e}function k(){return(new Date).getTime()}function I(r,e){var n=null==e?1:e;function u(r,e){var n=r.find((function(r){return o(r,1)[0]===e}))||[void 0,void 0];return o(n,2)[1]}return{get:function(e){if(!(n<1))return u(r,e)},set:function(e,i){if(n<1)return[];var c={data:i,lastUpdateTime:k()};if(null!=u(r,e))return r.map((function(r){var n=o(r,2),t=n[0],u=n[1];return e!==t?[t,u]:[e,c]}));var a=[].concat(t(r),[[e,c]]);return a.length>n?a.slice(a.length-n):a}}}x.success=function(r){var e=function(r){return(0,r.runner)()};return e.response=function(e){e.isError||e.isFetching||!e.sessionLoaded||r(e.data,e)},e},x.error=function(r){var e=function(r){var e=r.runner;return r.runtimeCache.set(q,!0),e()};return e.response=function(e){e.isError&&!e.isFetching&&r(e.error,e)},e},x.failure=function(r){var e=function(r){var e=r.runner;return r.runtimeCache.set(q,!0),e()};return e.response=function(e){e.isError&&!e.isFetching&&r(e.error,e)},e};var L={cache:function(r){var e=r||{},n=e.key,t=void 0===n?function(r){return JSON.stringify(r)}:n,o=e.staleTime,u=e.capacity,i=void 0===u?1:u;return function(r){var e=r.current,n=r.runner,u=r.variables,c=e(),a=c.cache,s=(f(c,A),t(u)),l=I(a,i).get(s);if(l&&o&&k()<o+l.lastUpdateTime){var d=D(D({},c),{},{data:l.data,variables:u});return Promise.resolve(d)}return n((function(r){return l&&(!o||o<0)?D(D({},r),{},{data:l.data}):r})).then((function(r){if(r.isError)return r;var e=t(r.variables||[]),n=I(r.cache,i).set(e,r.data);return D(D({},r),{},{cache:n})}))}},debounce:function(r){var e="number"==typeof r?r:r.duration,n="number"!=typeof r&&!!r.lead;return function(r){return n?function(){var n=r.current,t=r.runner,o=r.store;o.current&&o.current.id&&(clearTimeout(o.current.id),o.current.id=void 0);var u=setTimeout((function(){o.current=void 0}),e);if(null!=o.current)return o.current.id=u,o.current.promise.then((function(r){return D(D({},r),{},{abandon:!0})}));var i={id:u,version:0,resolve:function(){},promise:new Promise((function(r){r(D(D({},n()),{},{abandon:!0}))}))},c=new Promise((function(r){r(t()),i.resolve=r}));return i.promise=c,o.current=i,c}():function(){var n=r.current,t=r.runner,o=r.store;if(o.current){var u=o.current,i=u.id,c=u.resolve;clearTimeout(i),o.current.id=setTimeout((function(){o.current=void 0,c(t())}),e),o.current.version+=1;var a=o.current.version;return o.current.promise.then((function(r){var e;return a===(null===(e=o.current)||void 0===e?void 0:e.version)?r:D(D({},r),{},{abandon:!0})}))}var s={id:null,version:0,resolve:function(){},promise:new Promise((function(r){r(D(D({},n()),{},{abandon:!0}))}))},f=new Promise((function(r){s.id=setTimeout((function(){o.current=void 0,r(t())}),e),s.resolve=r}));s.promise=f,o.current=s;var l=s.version;return f.then((function(r){var e;return null!==(e=o.current)&&void 0!==e&&e.version||0===l?r:D(D({},r),{},{abandon:!0})}))}()}},throttle:function(r){var e=function(){if(null!=r)return"number"==typeof r?r:r.duration}();return function(r){var n=r.current,t=r.runner,o=r.store,u=r.variables,i=void 0===u?[]:u;o.current=o.current||{timeoutId:null,variables:void 0};var c=o.current.variables,a=o.current.timeoutId;return function(r,e){return null==r||!M(r,e)}(c,i)||null==a&&null!=e?(o.current.variables=i,null==e||(null!=a&&clearTimeout(a),o.current.timeoutId=setTimeout((function(){o.current=o.current||{},o.current.timeoutId=null}),e)),t()):new Promise((function(r){r(n())}))}},once:function(){return function(r){var e=r.runner,n=r.store;return n.current?n.current.then((function(r){return D(D({},r),{},{abandon:!0})})):(n.current=e().then((function(r){return r.isError&&(n.current=void 0),r})),n.current)}},error:q,failure:function(r,e){var n=(e||{}).withAbandoned;return function(e){var t=e.runner,o=e.runtimeCache,u=e.store,i=o.get(q);return o.set(q,!0),u.current=r,t().then((function(r){var e=u.current;return!r.isError||i||!e||r.abandon&&!n||e(r.error,r),r}))}},success:function(r,e){var n=(e||{}).withAbandoned;return function(e){var t=e.runner,o=e.store;return o.current=r,t().then((function(r){var e=o.current;return r.isError||!e||r.abandon&&!n||e(r.data,r),r}))}},validate:function(r){return function(e){var n=e.runner,t=e.current;if(!r()){var o=t();return new Promise((function(r){r(D(D({},o),{},{abandon:!0}))}))}return n()}},memo:function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:M;return function(e){var n=e.runner,t=e.current;return n().then((function(e){var n=t();return("function"==typeof r?r(n.data,e.data):n.data===e.data)?D(D({},e),{},{data:n.data}):e}))}},reduce:function(r){return function(e){var n=e.runner,t=e.current;return n().then((function(e){if(e.isError||e.abandon)return e;var n=t(),o=r(n.data,e.data,[n,e]);return D(D({},e),{},{data:o})}))}},response:x};function C(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.push.apply(n,t)}return n}function V(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?C(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):C(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function G(r,e){var n=(0,c.useRef)({}),u=function(r,e,n){var u=Array.isArray(n)?{variables:n}:n,i=o(h(r,"query",u),4),c=i[0],s=i[1],f=i[2],l=i[3],d=f||{},v=d.defaultData,y=d.loaded,b=Object.prototype.hasOwnProperty.call(d,"defaultData"),g=l?b?[c,p({data:v,uniqueKey:r,loaded:!0})]:[c]:[c,p(b?{data:v,uniqueKey:e,loaded:!0}:void 0)],m=a.useModel.apply(void 0,t(g));if(y&&!m.state.loaded)throw new Error('This session is not loaded, you should remove "config.loaded" option.');return[m,d,s]}(r,n.current,e),i=o(u,3),f=i[0],l=i[1],d=i[2],v=l.variables,y=l.deps,b=l.triggerOn,g=void 0===b?["mount","update","manual"]:b,j=(0,a.useRealtimeInstance)(f),w=(0,a.useModel)(O,m,{autoLink:!0}),P=w.setGlobalFetchingKey,E=w.removeGlobalFetchingKey,S=T(j,(function(r,e){var o=function(r){return function(e){var n=r(e);if(!n||"function"!=typeof n.then)throw new Error("The callback have to return a promise object.");return n.then((function(r){return{data:r,variables:e,error:void 0,isError:!1}}),(function(r){return{variables:e,error:r,isError:!0}}))}}((function(r){return d.apply(void 0,t(r))}));return o(e).then((function(e){var t=null!=j.state.finalFetchingKey&&n.current!==j.state.finalFetchingKey;return V(V(V({},j.state),e),{},{abandon:t,isFetching:!1,triggerType:r})}))}),l),F=o(S,3),A=F[0],K=F[1],D=F[2],M=function(r,e){var t=j.state.fetchingKey;return g.indexOf(r)<0||t&&t!==n.current?new Promise((function(r){r(V(V({},j.state),{},{abandon:!0}))})):(j.setFetchingKey(n.current),Promise.resolve(void 0).then((function(){j.removeFetchingKey(n.current)})),A(r,e||v))},q=(0,s.usePersistFn)((function(){return M("manual")})),x=(0,s.usePersistFn)((function(){for(var r=arguments.length,e=new Array(r),n=0;n<r;n++)e[n]=arguments[n];return M("manual",e)})),k=y||v||[];(0,s.useMount)((function(){M("mount")})),(0,s.useUpdate)((function(){M("update")}),k);var I=(0,c.useRef)(f.version);return(0,c.useEffect)((function(){if(I.current!==f.version){I.current=f.version;var r=j.state.fetchingKey;r&&r!==n.current||q()}}),[f.version]),(0,c.useEffect)((function(){f.state.isFetching?P(n.current):E(n.current)}),[f.state.isFetching]),(0,s.useUnmount)((function(){E(n.current),j.removeFetchingKey(n.current)})),(0,c.useEffect)((function(){K.forEach((function(r){r(f.state)}))}),[f.state]),(0,c.useEffect)((function(){null!=f.state.fetchVersion&&D.forEach((function(r){r(f.state)}))}),[f.state.fetchVersion]),[f.state,q,x]}function R(r,e){var n=b(r,e),t=n.variables,o=n.deps,u=n.manual,i=n.triggerOn,c=void 0===i?["mount","update","manual"]:i,a=n.strategy,s=!o&&!t||u?["manual"]:c,f=(P()||{}).strategy,l=F(a),d=f?f(l,"query"):l;return G(r,V(V({},n),{},{triggerOn:s,strategy:d.concat((function(r){var e=r.runner,n=r.store;n.current=n.current||0;var t=n.current+1;return n.current=t,e().then((function(r){return n.current!==t?S(S({},r),{},{abandon:!0}):r}))}))}))}function Q(r,e){var n=b(r,e),t=n.triggerOn,o=void 0===t?["manual"]:t,u=n.strategy,i=(P()||{}).strategy,c=F(u),a=i?i(c,"mutation"):c;return G(r,V(V({},n),{},{triggerOn:o,strategy:a.concat((function(r){var e=r.runner,n=r.store;if("manual"!==r.triggerType)return e();if(n.current)return n.current.then((function(r){return S(S({},r),{},{abandon:!0})}));var t=e();return n.current=t.then((function(r){return n.current=void 0,r})),t}))}))}function U(r,e){var n=o(r.effect,2)[1].sessionType,t=(0,a.useSelector)(r,(function(r){return[r.state,r.trigger]})),u="string"==typeof e?{sessionType:e,loaded:void 0}:e||{},i=u.loaded,c=u.sessionType,s=o(t,1)[0].loaded;if(c&&n&&c!==n)throw new Error("The sessionType is not matched, can not use '".concat(n," type' sessionKey with '").concat(c," type' useSession."));if(i&&!s)throw new Error("The session is not loaded yet, check config, and set {loaded: undefined}.");return t}function J(){for(var r=arguments.length,e=new Array(r),n=0;n<r;n++)e[n]=arguments[n];var t=(0,c.useMemo)((function(){return e.map((function(r){return Array.isArray(r)?o(r,1)[0]:r})).some((function(r){return r.isFetching}))}),e),u=(0,a.useIsModelMatchedInStore)(O),i=(0,a.useModel)(O,m,{autoLink:!0}).isFetching;if(!u&&!e.length)throw new Error("You should provide a `GlobalRefreshProvider` to support a global `isFetching` detect.");return u&&!e.length?i:t}function N(r){for(var e=arguments.length,n=new Array(e>1?e-1:0),u=1;u<e;u++)n[u-1]=arguments[u];var i=(0,c.useMemo)((function(){return n.map((function(r){var e={loaded:!1};return e.promise=new Promise((function(r,n){e.resolve=r,e.reject=n})),e}))}),[]),a=(0,c.useRef)(i);function s(r){return r.default?r:{default:r}}return(0,c.useEffect)((function(){var r=a.current;n.forEach((function(e,n){var t=Array.isArray(e)?e[0]:e,o=r[n];if(t.isError&&!o.loaded)return o.loaded=!0,void o.reject(t);t.loaded&&!o.loaded&&(o.loaded=!0,o.resolve(!0))}))}),[].concat(n)),(0,c.useMemo)((function(){var e=a.current.map((function(r){return r.promise}));return(0,c.lazy)((function(){var n=r();return Promise.all([n].concat(t(e))).then((function(r){return s(o(r,1)[0])}),(function(r){return n.then((function(e){var n=function(r){var e=r;return e.default&&"function"==typeof e.default?e.default:r}(e),t=function(r,e){return function(n){return(0,c.createElement)(r,V(V({},n),{},{error:e}))}}(n,r);return s(t)}))}))}))}),[])}function z(r,e){return U(r,"string"==typeof e?{sessionType:e,loaded:!0}:V(V({},e),{},{loaded:!0}))}function _(r,e){(0,c.useEffect)((function(){if(null!=e.fetchVersion){var n=!e.isFetching&&e.isError,t=!e.isFetching&&e.sessionLoaded&&!e.isError;(n||t)&&r(e)}}),[e.fetchVersion])}_.useSuccess=function(r,e){(0,c.useEffect)((function(){null!=e.fetchVersion&&(!e.isFetching&&e.sessionLoaded&&!e.isError&&r(e.data,e))}),[e.fetchVersion])},_.useFailure=function(r,e){(0,c.useEffect)((function(){null!=e.fetchVersion&&(!e.isFetching&&e.isError&&r(e.error,e))}),[e.fetchVersion])},_.success=_.useSuccess,_.error=_.useFailure;var Y=a.Provider,$=a.Provider,B=a.provide,H=function(r,e){var n=e,o=function(){return r.apply(void 0,arguments)},u=function r(e){var u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=null!=e?e:g(o,n),a={key:i,with:function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];var o=u.concat(n.map((function(r){return"function"==typeof r?r:r.key})));return r(i,o)},asGlobal:function(){var r=i.global(),e={useSession:function(){return U(r,n)},useLoadedSession:function(){return z(r,n)}};return V(V({},e),{},"query"===n?{useQuery:function(e){return R(r,e)}}:{useMutation:function(e){return Q(r,e)}})},useSession:function(){return U(i,n)},useLoadedSession:function(){return z(i,n)},provide:function(){return B([i].concat(t(u)))},provideTo:function(r){return B([i].concat(t(u)))(r)},Provider:function(r){var e=r.children;return(0,c.createElement)($,{value:[i].concat(t(u))},e)}};return V(V({},a),{},"query"===n?{useQuery:function(r){return R(i,r)}}:{useMutation:function(r){return Q(i,r)}})},i={store:u,createStore:u},a=V(V({},i),{},{useQuery:function(r){return R(o,r)}}),s=V(V({},i),{},{useMutation:function(r){return Q(o,r)}}),f="query"===n?a:s;return Object.assign(o,f)}}(),i}()})); | ||
!function(r,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("react"),require("@airma/react-state"),require("@airma/react-hooks-core")):"function"==typeof define&&define.amd?define(["react","@airma/react-state","@airma/react-hooks-core"],n):"object"==typeof exports?exports["@airma/react-effect"]=n(require("react"),require("@airma/react-state"),require("@airma/react-hooks-core")):r["@airma/react-effect"]=n(r.react,r["@airma/react-state"],r["@airma/react-hooks-core"])}(self,(function(r,n,e){return function(){var t={4933:function(r,n,e){var t=e(6291),o=e(7073),u=TypeError;r.exports=function(r){if(t(r))return r;throw u(o(r)+" is not a function")}},5822:function(r,n,e){var t=e(6802),o=e(2275),u=e(6462).f,i=t("unscopables"),c=Array.prototype;null==c[i]&&u(c,i,{configurable:!0,value:o(null)}),r.exports=function(r){c[i][r]=!0}},4905:function(r,n,e){var t=e(2366),o=String,u=TypeError;r.exports=function(r){if(t(r))return r;throw u(o(r)+" is not an object")}},5029:function(r,n,e){var t=e(678),o=e(6971),u=e(4821),i=function(r){return function(n,e,i){var c,a=t(n),f=u(a),s=o(i,f);if(r&&e!=e){for(;f>s;)if((c=a[s++])!=c)return!0}else for(;f>s;s++)if((r||s in a)&&a[s]===e)return r||s||0;return!r&&-1}};r.exports={includes:i(!0),indexOf:i(!1)}},5489:function(r,n,e){var t=e(936),o=t({}.toString),u=t("".slice);r.exports=function(r){return u(o(r),8,-1)}},6810:function(r,n,e){var t=e(8382),o=e(2466),u=e(8117),i=e(6462);r.exports=function(r,n,e){for(var c=o(n),a=i.f,f=u.f,s=0;s<c.length;s++){var l=c[s];t(r,l)||e&&t(e,l)||a(r,l,f(n,l))}}},430:function(r,n,e){var t=e(1502),o=e(6462),u=e(6034);r.exports=t?function(r,n,e){return o.f(r,n,u(1,e))}:function(r,n,e){return r[n]=e,r}},6034:function(r){r.exports=function(r,n){return{enumerable:!(1&r),configurable:!(2&r),writable:!(4&r),value:n}}},5850:function(r,n,e){var t=e(6291),o=e(6462),u=e(7192),i=e(1756);r.exports=function(r,n,e,c){c||(c={});var a=c.enumerable,f=void 0!==c.name?c.name:n;if(t(e)&&u(e,f,c),c.global)a?r[n]=e:i(n,e);else{try{c.unsafe?r[n]&&(a=!0):delete r[n]}catch(r){}a?r[n]=e:o.f(r,n,{value:e,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})}return r}},1756:function(r,n,e){var t=e(5001),o=Object.defineProperty;r.exports=function(r,n){try{o(t,r,{value:n,configurable:!0,writable:!0})}catch(e){t[r]=n}return n}},1502:function(r,n,e){var t=e(5061);r.exports=!t((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},5178:function(r){var n="object"==typeof document&&document.all,e=void 0===n&&void 0!==n;r.exports={all:n,IS_HTMLDDA:e}},6009:function(r,n,e){var t=e(5001),o=e(2366),u=t.document,i=o(u)&&o(u.createElement);r.exports=function(r){return i?u.createElement(r):{}}},9966:function(r,n,e){var t=e(3425);r.exports=t("navigator","userAgent")||""},2821:function(r,n,e){var t,o,u=e(5001),i=e(9966),c=u.process,a=u.Deno,f=c&&c.versions||a&&a.version,s=f&&f.v8;s&&(o=(t=s.split("."))[0]>0&&t[0]<4?1:+(t[0]+t[1])),!o&&i&&(!(t=i.match(/Edge\/(\d+)/))||t[1]>=74)&&(t=i.match(/Chrome\/(\d+)/))&&(o=+t[1]),r.exports=o},2089:function(r){r.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},9638:function(r,n,e){var t=e(5001),o=e(8117).f,u=e(430),i=e(5850),c=e(1756),a=e(6810),f=e(1092);r.exports=function(r,n){var e,s,l,v,p,d=r.target,y=r.global,b=r.stat;if(e=y?t:b?t[d]||c(d,{}):(t[d]||{}).prototype)for(s in n){if(v=n[s],l=r.dontCallGetSet?(p=o(e,s))&&p.value:e[s],!f(y?s:d+(b?".":"#")+s,r.forced)&&void 0!==l){if(typeof v==typeof l)continue;a(v,l)}(r.sham||l&&l.sham)&&u(v,"sham",!0),i(e,s,v,r)}}},5061:function(r){r.exports=function(r){try{return!!r()}catch(r){return!0}}},8483:function(r,n,e){var t=e(5061);r.exports=!t((function(){var r=function(){}.bind();return"function"!=typeof r||r.hasOwnProperty("prototype")}))},3927:function(r,n,e){var t=e(8483),o=Function.prototype.call;r.exports=t?o.bind(o):function(){return o.apply(o,arguments)}},9873:function(r,n,e){var t=e(1502),o=e(8382),u=Function.prototype,i=t&&Object.getOwnPropertyDescriptor,c=o(u,"name"),a=c&&"something"===function(){}.name,f=c&&(!t||t&&i(u,"name").configurable);r.exports={EXISTS:c,PROPER:a,CONFIGURABLE:f}},936:function(r,n,e){var t=e(8483),o=Function.prototype,u=o.call,i=t&&o.bind.bind(u,u);r.exports=t?i:function(r){return function(){return u.apply(r,arguments)}}},3425:function(r,n,e){var t=e(5001),o=e(6291);r.exports=function(r,n){return arguments.length<2?(e=t[r],o(e)?e:void 0):t[r]&&t[r][n];var e}},3815:function(r,n,e){var t=e(4933),o=e(860);r.exports=function(r,n){var e=r[n];return o(e)?void 0:t(e)}},5001:function(r,n,e){var t=function(r){return r&&r.Math==Math&&r};r.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof e.g&&e.g)||function(){return this}()||Function("return this")()},8382:function(r,n,e){var t=e(936),o=e(7615),u=t({}.hasOwnProperty);r.exports=Object.hasOwn||function(r,n){return u(o(r),n)}},2499:function(r){r.exports={}},2118:function(r,n,e){var t=e(3425);r.exports=t("document","documentElement")},7788:function(r,n,e){var t=e(1502),o=e(5061),u=e(6009);r.exports=!t&&!o((function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}))},2901:function(r,n,e){var t=e(936),o=e(5061),u=e(5489),i=Object,c=t("".split);r.exports=o((function(){return!i("z").propertyIsEnumerable(0)}))?function(r){return"String"==u(r)?c(r,""):i(r)}:i},685:function(r,n,e){var t=e(936),o=e(6291),u=e(9982),i=t(Function.toString);o(u.inspectSource)||(u.inspectSource=function(r){return i(r)}),r.exports=u.inspectSource},684:function(r,n,e){var t,o,u,i=e(1899),c=e(5001),a=e(2366),f=e(430),s=e(8382),l=e(9982),v=e(1695),p=e(2499),d="Object already initialized",y=c.TypeError,b=c.WeakMap;if(i||l.state){var h=l.state||(l.state=new b);h.get=h.get,h.has=h.has,h.set=h.set,t=function(r,n){if(h.has(r))throw y(d);return n.facade=r,h.set(r,n),n},o=function(r){return h.get(r)||{}},u=function(r){return h.has(r)}}else{var g=v("state");p[g]=!0,t=function(r,n){if(s(r,g))throw y(d);return n.facade=r,f(r,g,n),n},o=function(r){return s(r,g)?r[g]:{}},u=function(r){return s(r,g)}}r.exports={set:t,get:o,has:u,enforce:function(r){return u(r)?o(r):t(r,{})},getterFor:function(r){return function(n){var e;if(!a(n)||(e=o(n)).type!==r)throw y("Incompatible receiver, "+r+" required");return e}}}},6291:function(r,n,e){var t=e(5178),o=t.all;r.exports=t.IS_HTMLDDA?function(r){return"function"==typeof r||r===o}:function(r){return"function"==typeof r}},1092:function(r,n,e){var t=e(5061),o=e(6291),u=/#|\.prototype\./,i=function(r,n){var e=a[c(r)];return e==s||e!=f&&(o(n)?t(n):!!n)},c=i.normalize=function(r){return String(r).replace(u,".").toLowerCase()},a=i.data={},f=i.NATIVE="N",s=i.POLYFILL="P";r.exports=i},860:function(r){r.exports=function(r){return null==r}},2366:function(r,n,e){var t=e(6291),o=e(5178),u=o.all;r.exports=o.IS_HTMLDDA?function(r){return"object"==typeof r?null!==r:t(r)||r===u}:function(r){return"object"==typeof r?null!==r:t(r)}},13:function(r){r.exports=!1},6448:function(r,n,e){var t=e(3425),o=e(6291),u=e(6282),i=e(7558),c=Object;r.exports=i?function(r){return"symbol"==typeof r}:function(r){var n=t("Symbol");return o(n)&&u(n.prototype,c(r))}},4821:function(r,n,e){var t=e(4479);r.exports=function(r){return t(r.length)}},7192:function(r,n,e){var t=e(5061),o=e(6291),u=e(8382),i=e(1502),c=e(9873).CONFIGURABLE,a=e(685),f=e(684),s=f.enforce,l=f.get,v=Object.defineProperty,p=i&&!t((function(){return 8!==v((function(){}),"length",{value:8}).length})),d=String(String).split("String"),y=r.exports=function(r,n,e){"Symbol("===String(n).slice(0,7)&&(n="["+String(n).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),e&&e.getter&&(n="get "+n),e&&e.setter&&(n="set "+n),(!u(r,"name")||c&&r.name!==n)&&(i?v(r,"name",{value:n,configurable:!0}):r.name=n),p&&e&&u(e,"arity")&&r.length!==e.arity&&v(r,"length",{value:e.arity});try{e&&u(e,"constructor")&&e.constructor?i&&v(r,"prototype",{writable:!1}):r.prototype&&(r.prototype=void 0)}catch(r){}var t=s(r);return u(t,"source")||(t.source=d.join("string"==typeof n?n:"")),r};Function.prototype.toString=y((function(){return o(this)&&l(this).source||a(this)}),"toString")},1367:function(r){var n=Math.ceil,e=Math.floor;r.exports=Math.trunc||function(r){var t=+r;return(t>0?e:n)(t)}},2275:function(r,n,e){var t,o=e(4905),u=e(6191),i=e(2089),c=e(2499),a=e(2118),f=e(6009),s=e(1695),l="prototype",v="script",p=s("IE_PROTO"),d=function(){},y=function(r){return"<"+v+">"+r+"</"+v+">"},b=function(r){r.write(y("")),r.close();var n=r.parentWindow.Object;return r=null,n},h=function(){try{t=new ActiveXObject("htmlfile")}catch(r){}var r,n,e;h="undefined"!=typeof document?document.domain&&t?b(t):(n=f("iframe"),e="java"+v+":",n.style.display="none",a.appendChild(n),n.src=String(e),(r=n.contentWindow.document).open(),r.write(y("document.F=Object")),r.close(),r.F):b(t);for(var o=i.length;o--;)delete h[l][i[o]];return h()};c[p]=!0,r.exports=Object.create||function(r,n){var e;return null!==r?(d[l]=o(r),e=new d,d[l]=null,e[p]=r):e=h(),void 0===n?e:u.f(e,n)}},6191:function(r,n,e){var t=e(1502),o=e(5780),u=e(6462),i=e(4905),c=e(678),a=e(9749);n.f=t&&!o?Object.defineProperties:function(r,n){i(r);for(var e,t=c(n),o=a(n),f=o.length,s=0;f>s;)u.f(r,e=o[s++],t[e]);return r}},6462:function(r,n,e){var t=e(1502),o=e(7788),u=e(5780),i=e(4905),c=e(1030),a=TypeError,f=Object.defineProperty,s=Object.getOwnPropertyDescriptor,l="enumerable",v="configurable",p="writable";n.f=t?u?function(r,n,e){if(i(r),n=c(n),i(e),"function"==typeof r&&"prototype"===n&&"value"in e&&p in e&&!e[p]){var t=s(r,n);t&&t[p]&&(r[n]=e.value,e={configurable:v in e?e[v]:t[v],enumerable:l in e?e[l]:t[l],writable:!1})}return f(r,n,e)}:f:function(r,n,e){if(i(r),n=c(n),i(e),o)try{return f(r,n,e)}catch(r){}if("get"in e||"set"in e)throw a("Accessors not supported");return"value"in e&&(r[n]=e.value),r}},8117:function(r,n,e){var t=e(1502),o=e(3927),u=e(9265),i=e(6034),c=e(678),a=e(1030),f=e(8382),s=e(7788),l=Object.getOwnPropertyDescriptor;n.f=t?l:function(r,n){if(r=c(r),n=a(n),s)try{return l(r,n)}catch(r){}if(f(r,n))return i(!o(u.f,r,n),r[n])}},9219:function(r,n,e){var t=e(3855),o=e(2089).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(r){return t(r,o)}},2822:function(r,n){n.f=Object.getOwnPropertySymbols},6282:function(r,n,e){var t=e(936);r.exports=t({}.isPrototypeOf)},3855:function(r,n,e){var t=e(936),o=e(8382),u=e(678),i=e(5029).indexOf,c=e(2499),a=t([].push);r.exports=function(r,n){var e,t=u(r),f=0,s=[];for(e in t)!o(c,e)&&o(t,e)&&a(s,e);for(;n.length>f;)o(t,e=n[f++])&&(~i(s,e)||a(s,e));return s}},9749:function(r,n,e){var t=e(3855),o=e(2089);r.exports=Object.keys||function(r){return t(r,o)}},9265:function(r,n){"use strict";var e={}.propertyIsEnumerable,t=Object.getOwnPropertyDescriptor,o=t&&!e.call({1:2},1);n.f=o?function(r){var n=t(this,r);return!!n&&n.enumerable}:e},379:function(r,n,e){var t=e(3927),o=e(6291),u=e(2366),i=TypeError;r.exports=function(r,n){var e,c;if("string"===n&&o(e=r.toString)&&!u(c=t(e,r)))return c;if(o(e=r.valueOf)&&!u(c=t(e,r)))return c;if("string"!==n&&o(e=r.toString)&&!u(c=t(e,r)))return c;throw i("Can't convert object to primitive value")}},2466:function(r,n,e){var t=e(3425),o=e(936),u=e(9219),i=e(2822),c=e(4905),a=o([].concat);r.exports=t("Reflect","ownKeys")||function(r){var n=u.f(c(r)),e=i.f;return e?a(n,e(r)):n}},4475:function(r,n,e){var t=e(860),o=TypeError;r.exports=function(r){if(t(r))throw o("Can't call method on "+r);return r}},1695:function(r,n,e){var t=e(6809),o=e(1050),u=t("keys");r.exports=function(r){return u[r]||(u[r]=o(r))}},9982:function(r,n,e){var t=e(5001),o=e(1756),u="__core-js_shared__",i=t[u]||o(u,{});r.exports=i},6809:function(r,n,e){var t=e(13),o=e(9982);(r.exports=function(r,n){return o[r]||(o[r]=void 0!==n?n:{})})("versions",[]).push({version:"3.26.1",mode:t?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},5947:function(r,n,e){var t=e(2821),o=e(5061);r.exports=!!Object.getOwnPropertySymbols&&!o((function(){var r=Symbol();return!String(r)||!(Object(r)instanceof Symbol)||!Symbol.sham&&t&&t<41}))},6971:function(r,n,e){var t=e(9398),o=Math.max,u=Math.min;r.exports=function(r,n){var e=t(r);return e<0?o(e+n,0):u(e,n)}},678:function(r,n,e){var t=e(2901),o=e(4475);r.exports=function(r){return t(o(r))}},9398:function(r,n,e){var t=e(1367);r.exports=function(r){var n=+r;return n!=n||0===n?0:t(n)}},4479:function(r,n,e){var t=e(9398),o=Math.min;r.exports=function(r){return r>0?o(t(r),9007199254740991):0}},7615:function(r,n,e){var t=e(4475),o=Object;r.exports=function(r){return o(t(r))}},6973:function(r,n,e){var t=e(3927),o=e(2366),u=e(6448),i=e(3815),c=e(379),a=e(6802),f=TypeError,s=a("toPrimitive");r.exports=function(r,n){if(!o(r)||u(r))return r;var e,a=i(r,s);if(a){if(void 0===n&&(n="default"),e=t(a,r,n),!o(e)||u(e))return e;throw f("Can't convert object to primitive value")}return void 0===n&&(n="number"),c(r,n)}},1030:function(r,n,e){var t=e(6973),o=e(6448);r.exports=function(r){var n=t(r,"string");return o(n)?n:n+""}},7073:function(r){var n=String;r.exports=function(r){try{return n(r)}catch(r){return"Object"}}},1050:function(r,n,e){var t=e(936),o=0,u=Math.random(),i=t(1..toString);r.exports=function(r){return"Symbol("+(void 0===r?"":r)+")_"+i(++o+u,36)}},7558:function(r,n,e){var t=e(5947);r.exports=t&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},5780:function(r,n,e){var t=e(1502),o=e(5061);r.exports=t&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},1899:function(r,n,e){var t=e(5001),o=e(6291),u=t.WeakMap;r.exports=o(u)&&/native code/.test(String(u))},6802:function(r,n,e){var t=e(5001),o=e(6809),u=e(8382),i=e(1050),c=e(5947),a=e(7558),f=o("wks"),s=t.Symbol,l=s&&s.for,v=a?s:s&&s.withoutSetter||i;r.exports=function(r){if(!u(f,r)||!c&&"string"!=typeof f[r]){var n="Symbol."+r;c&&u(s,r)?f[r]=s[r]:f[r]=a&&l?l(n):v(n)}return f[r]}},5093:function(r,n,e){"use strict";var t=e(9638),o=e(5029).includes,u=e(5061),i=e(5822);t({target:"Array",proto:!0,forced:u((function(){return!Array(1).includes()}))},{includes:function(r){return o(this,r,arguments.length>1?arguments[1]:void 0)}}),i("includes")},309:function(r){"use strict";r.exports=e},2719:function(r){"use strict";r.exports=n},8156:function(n){"use strict";n.exports=r}},o={};function u(r){var n=o[r];if(void 0!==n)return n.exports;var e=o[r]={exports:{}};return t[r](e,e.exports,u),e.exports}u.d=function(r,n){for(var e in n)u.o(n,e)&&!u.o(r,e)&&Object.defineProperty(r,e,{enumerable:!0,get:n[e]})},u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(r){if("object"==typeof window)return window}}(),u.o=function(r,n){return Object.prototype.hasOwnProperty.call(r,n)},u.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})};var i={};return function(){"use strict";function r(r,n,e){return n in r?Object.defineProperty(r,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[n]=e,r}function n(r,n){(null==n||n>r.length)&&(n=r.length);for(var e=0,t=new Array(n);e<n;e++)t[e]=r[e];return t}function e(r,e){if(r){if("string"==typeof r)return n(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(r,e):void 0}}function t(r){return function(r){if(Array.isArray(r))return n(r)}(r)||function(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}(r)||e(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(r,n){return function(r){if(Array.isArray(r))return r}(r)||function(r,n){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=e){var t,o,u=[],i=!0,c=!1;try{for(e=e.call(r);!(i=(t=e.next()).done)&&(u.push(t.value),!n||u.length!==n);i=!0);}catch(r){c=!0,o=r}finally{try{i||null==e.return||e.return()}finally{if(c)throw o}}return u}}(r,n)||e(r,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}u.r(i),u.d(i,{ConfigProvider:function(){return j},Provider:function(){return J},SessionProvider:function(){return H},Strategy:function(){return k},createSessionKey:function(){return g},provide:function(){return V},session:function(){return B},useIsFetching:function(){return N},useLazyComponent:function(){return z},useLoadedSession:function(){return Q},useMutation:function(){return G},useQuery:function(){return _},useResponse:function(){return W},useSession:function(){return U}});u(5093);var c=u(8156),a=u(2719),f=u(309);function s(r,n){if(null==r)return{};var e,t,o=function(r,n){if(null==r)return{};var e,t,o={},u=Object.keys(r);for(t=0;t<u.length;t++)e=u[t],n.indexOf(e)>=0||(o[e]=r[e]);return o}(r,n);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(r);for(t=0;t<u.length;t++)e=u[t],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(r,e)&&(o[e]=r[e])}return o}var l=["version"];function v(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,t)}return e}function p(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?v(Object(t),!0).forEach((function(e){r(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):v(Object(t)).forEach((function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(t,r))}))}return n}function d(r){var n=r.version,e=s(r,l),t=function(e){return p(p({},e),{},{version:n,uniqueKey:r.uniqueKey})},o=function(n){return n.isFetching?n:p(p({},n),{},{fetchVersion:(r.fetchVersion||0)+1,round:r.round+1})};return{state:e,version:n||0,setState:function(n){return o(t("function"!=typeof n?n:n(r)))},setFetchingKey:function(n){return t(p(p({},r),{},{fetchingKey:n,finalFetchingKey:null!=n?n:r.finalFetchingKey}))},removeFetchingKey:function(n){return r.fetchingKey!==n?r:t(p(p({},r),{},{fetchingKey:void 0}))},trigger:function(){return p(p({},r),{},{version:(n||0)+1})}}}var y=function(r){return p({data:void 0,variables:void 0,isError:!1,isFetching:!1,abandon:!1,triggerType:void 0,loaded:!1,sessionLoaded:!1,cache:[],maxCacheCapacity:1,round:0},r)};function b(r,n,e){if(!("function"==typeof r.pipe))return[d,r,e,!1];var t=o(r.effect,2),u=t[0],i=t[1].sessionType;if(null!=i&&i!==n)throw new Error("The sessionType is not matched, can not use '".concat(i," type' sessionKey with '").concat("query"===n?"useQuery":"useMutation","'"));return[r,u,e,!0]}function h(r,n){return o(b(r,"query",Array.isArray(n)?{variables:n}:n),3)[2]||{}}function g(r,n){var e=(0,a.createKey)(d,y());return e.effect=[function(){return r.apply(void 0,arguments)},n?{sessionType:n}:{}],e}var m=[],O=(0,a.createKey)((function(r){return{isFetching:r.length>0,setGlobalFetchingKey:function(n){return r.some((function(r){return r===n}))?r:r.concat(n)},removeGlobalFetchingKey:function(n){return r.some((function(r){return r===n}))?r.filter((function(r){return r!==n})):r}}}),m),w=(0,c.createContext)(null);function j(r){var n=r.value,e=r.children,t=(0,c.useMemo)((function(){return n.useGlobalFetching?O:void 0}),[]),o=(0,c.useMemo)((function(){return n.batchUpdate?{batchUpdate:n.batchUpdate}:{}}),[]),u=(0,c.createElement)(w.Provider,{value:n},t?(0,c.createElement)(a.Provider,{value:t},e):e);return(0,c.createElement)(a.ConfigProvider,{value:o},u)}function S(){return(0,c.useContext)(w)}function x(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,t)}return e}function P(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?x(Object(t),!0).forEach((function(e){r(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):x(Object(t)).forEach((function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(t,r))}))}return n}function E(r){return Array.isArray(r)?r:[r]}function T(r,n,e){var u=E(e.strategy),i=(0,c.useRef)(u.map((function(){return{current:void 0}})));return[function(c,a){var f,s,l=a||[],v={getSessionState:function(){return r.state},variables:l,runner:function(e){var t=r.state,o=r.setState,u=P(P({},t),{},{isFetching:!0}),i=e?e(u):u;return i.abandon||o(P(P({},i),{},{triggerType:c})),n(c,l)},triggerType:c,config:e,localCache:i,executeContext:(f=[],s=function(r){var n=f.find((function(n){return o(n,1)[0]===r}));if(Array.isArray(n))return n},{set:function(r,n){var e=s(r);e?e[1]=n:f.push([r,n])},get:function(r){var n=s(r);if(n)return n[1]}})};return function(r){return function(n){var e=[],o=n.localCache.current;return t(r).reverse().reduce((function(r,n,t){var u=o[t]||{current:void 0};return function(t){var o=P(P({},t),{},{localCache:u});return null==n?r(o):n(P(P({},o),{},{runner:function(n){return null!=n&&e.push(n),r(o)}}))}}),(function(r){return r.runner((function(r){return e.reduce((function(r,n){return r.abandon?r:n(r)}),r)}))}))(n).then((function(r){var e=n.getSessionState(),t=e.loaded,o=e.sessionLoaded,u=r.abandon,i=r.isError,c=r.isFetching,a=t||!u&&!i&&!c,f=o||!u&&!i&&!c;return P(P({},r),{},{loaded:a,sessionLoaded:f})}))}}(u)(v).then((function(n){return n.abandon||r.setState(n),n}))},u.map((function(r){if(r)return r.effect})).filter((function(r){return!!r})),u.map((function(r){if(r)return r.response})).filter((function(r){return!!r}))]}function F(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,t)}return e}function C(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?F(Object(t),!0).forEach((function(e){r(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):F(Object(t)).forEach((function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(t,r))}))}return n}var A=function(r,n){return!!Object.is(r,n)||null!=r&&null!=n&&JSON.stringify(r)===JSON.stringify(n)};function M(r,n){var e=(n||{}).withAbandoned;return function(n){var t=n.runner,o=n.executeContext,u=n.localCache,i=o.get(M);return o.set(M,!0),u.current=r,t().then((function(r){var n=u.current;return!r.isError||i||!n||r.abandon&&!e||n(r.error,r),r}))}}function D(r){var n=function(r){return(0,r.runner)()};return n.response=r,n}function I(){return(new Date).getTime()}function K(r,n){var e=null==n?1:n;function u(r,n){var e=r.find((function(r){return o(r,1)[0]===n}))||[void 0,void 0];return o(e,2)[1]}return{get:function(n){return u(r,n)},set:function(n,i){if(e<1)return[];var c={data:i,lastUpdateTime:I()};if(null!=u(r,n))return r.map((function(r){var e=o(r,2),t=e[0],u=e[1];return n!==t?[t,u]:[n,c]}));var a=[].concat(t(r),[[n,c]]);return a.length>e?a.slice(a.length-e):a}}}D.success=function(r){var n=function(r){return(0,r.runner)()};return n.response=function(n){n.isError||n.isFetching||!n.sessionLoaded||r(n.data,n)},n},D.error=function(r){var n=function(r){var n=r.runner;return r.executeContext.set(M,!0),n()};return n.response=function(n){n.isError&&!n.isFetching&&r(n.error,n)},n},D.failure=function(r){var n=function(r){var n=r.runner;return r.executeContext.set(M,!0),n()};return n.response=function(n){n.isError&&!n.isFetching&&r(n.error,n)},n};var k={cache:function(r){var n=r||{},e=n.key,t=void 0===e?function(r){return JSON.stringify(r)}:e,o=n.staleTime,u=n.capacity,i=void 0===u?1:u;return function(r){var n=r.getSessionState,e=r.runner,u=r.variables,c=n(),a=c.cache,f=t(u),s=K(a,i).get(f);if(s&&o&&I()<o+s.lastUpdateTime){var l=C(C({},c),{},{data:s.data,variables:u});return Promise.resolve(l)}return e((function(r){return s&&(!o||o<0)?C(C({},r),{},{data:s.data}):r})).then((function(r){if(r.isError)return r;var e=t(r.variables||[]),o=n().maxCacheCapacity,u=o<i?i:o,c=K(r.cache,u).set(e,r.data);return C(C({},r),{},{cache:c,maxCacheCapacity:u})}))}},debounce:function(r){var n="number"==typeof r?r:r.duration,e="number"!=typeof r&&!!r.lead;return function(r){return e?function(){var e=r.getSessionState,t=r.runner,o=r.localCache;o.current&&o.current.id&&(clearTimeout(o.current.id),o.current.id=void 0);var u=setTimeout((function(){o.current=void 0}),n);if(null!=o.current)return o.current.id=u,o.current.promise.then((function(r){return C(C({},r),{},{abandon:!0})}));var i={id:u,version:0,resolve:function(){},promise:new Promise((function(r){r(C(C({},e()),{},{abandon:!0}))}))},c=new Promise((function(r){r(t()),i.resolve=r}));return i.promise=c,o.current=i,c}():function(){var e=r.getSessionState,t=r.runner,o=r.localCache;if(o.current){var u=o.current,i=u.id,c=u.resolve;clearTimeout(i),o.current.id=setTimeout((function(){o.current=void 0,c(t())}),n),o.current.version+=1;var a=o.current.version;return o.current.promise.then((function(r){var n;return a===(null===(n=o.current)||void 0===n?void 0:n.version)?r:C(C({},r),{},{abandon:!0})}))}var f={id:null,version:0,resolve:function(){},promise:new Promise((function(r){r(C(C({},e()),{},{abandon:!0}))}))},s=new Promise((function(r){f.id=setTimeout((function(){o.current=void 0,r(t())}),n),f.resolve=r}));f.promise=s,o.current=f;var l=f.version;return s.then((function(r){var n;return null!==(n=o.current)&&void 0!==n&&n.version||0===l?r:C(C({},r),{},{abandon:!0})}))}()}},throttle:function(r){var n=function(){if(null!=r)return"number"==typeof r?r:r.duration}();return function(r){var e=r.getSessionState,t=r.runner,o=r.localCache,u=r.variables,i=void 0===u?[]:u;o.current=o.current||{timeoutId:null,variables:void 0};var c=o.current.variables,a=o.current.timeoutId;return function(r,n){return null==r||!A(r,n)}(c,i)||null==a&&null!=n?(o.current.variables=i,null==n||(null!=a&&clearTimeout(a),o.current.timeoutId=setTimeout((function(){o.current=o.current||{},o.current.timeoutId=null}),n)),t()):new Promise((function(r){r(e())}))}},once:function(){return function(r){var n=r.runner,e=r.localCache;return e.current?e.current.then((function(r){return C(C({},r),{},{abandon:!0})})):(e.current=n().then((function(r){return r.isError&&(e.current=void 0),r})),e.current)}},error:M,failure:function(r,n){var e=(n||{}).withAbandoned;return function(n){var t=n.runner,o=n.executeContext,u=n.localCache,i=o.get(M);return o.set(M,!0),u.current=r,t().then((function(r){var n=u.current;return!r.isError||i||!n||r.abandon&&!e||n(r.error,r),r}))}},success:function(r,n){var e=(n||{}).withAbandoned;return function(n){var t=n.runner,o=n.localCache;return o.current=r,t().then((function(r){var n=o.current;return r.isError||!n||r.abandon&&!e||n(r.data,r),r}))}},validate:function(r){return function(n){var e=n.runner,t=n.getSessionState;if(!r()){var o=t();return new Promise((function(r){r(C(C({},o),{},{abandon:!0}))}))}return e()}},memo:function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A;return function(n){var e=n.runner,t=n.getSessionState;return e().then((function(n){var e=t();return("function"==typeof r?r(e.data,n.data):e.data===n.data)?C(C({},n),{},{data:e.data}):n}))}},reduce:function(r){return function(n){var e=n.runner,t=n.getSessionState;return e().then((function(n){if(n.isError||n.abandon)return n;var e=t(),o=r(e.data,n.data,[e,n]);return C(C({},n),{},{data:o})}))}},response:D};function L(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,t)}return e}function q(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?L(Object(t),!0).forEach((function(e){r(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):L(Object(t)).forEach((function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(t,r))}))}return n}function R(r,n){var e=(0,c.useRef)({}),u=function(r,n,e){var u=Array.isArray(e)?{variables:e}:e,i=o(b(r,"query",u),4),c=i[0],f=i[1],s=i[2],l=i[3],v=s||{},p=v.defaultData,d=v.loaded,h=Object.prototype.hasOwnProperty.call(v,"defaultData"),g=l?h?[c,y({data:p,uniqueKey:r,loaded:!0})]:[c]:[c,y(h?{data:p,uniqueKey:n,loaded:!0}:void 0)],m=a.useModel.apply(void 0,t(g));if(d&&!m.state.loaded)throw new Error('This session is not loaded, you should remove "config.loaded" option.');return[m,v,f]}(r,e.current,n),i=o(u,3),s=i[0],l=i[1],v=i[2],p=l.variables,d=l.deps,h=l.triggerOn,g=void 0===h?["mount","update","manual"]:h,w=(0,a.useRealtimeInstance)(s),j=(0,a.useModel)(O,m,{autoLink:!0}),S=j.setGlobalFetchingKey,x=j.removeGlobalFetchingKey,P=T(w,(function(r,n){var o=function(r){return function(n){var e=r(n);if(!e||"function"!=typeof e.then)throw new Error("The callback have to return a promise object.");return e.then((function(r){return{data:r,variables:n,error:void 0,isError:!1}}),(function(r){return{variables:n,error:r,isError:!0}}))}}((function(r){return v.apply(void 0,t(r))}));return o(n).then((function(n){var t=null!=w.state.finalFetchingKey&&e.current!==w.state.finalFetchingKey;return q(q(q({},w.state),n),{},{abandon:t,isFetching:!1,triggerType:r})}))}),l),E=o(P,3),F=E[0],C=E[1],A=E[2],M=function(r,n){var t=w.state.fetchingKey;if(g.indexOf(r)<0)return new Promise((function(r){r(q(q({},w.state),{},{abandon:!0}))}));if(t&&t!==e.current)return new Promise((function(r){r(q(q({},w.state),{},{abandon:!0}))}));if(["mount","update"].includes(r)&&null==p)throw new Error("Can not execute with `mount` or `update` dependency mode. There is no variables found in config.");if("manual"===r&&null==p&&null==n)throw new Error("Can not trigger session to execute. There is no variables found in config.");return w.setFetchingKey(e.current),Promise.resolve(void 0).then((function(){w.removeFetchingKey(e.current)})),F(r,n||p)},D=(0,f.usePersistFn)((function(){return M("manual")})),I=(0,f.usePersistFn)((function(){for(var r=arguments.length,n=new Array(r),e=0;e<r;e++)n[e]=arguments[e];return M("manual",n)})),K=d||p||[];(0,f.useMount)((function(){M("mount")})),(0,f.useUpdate)((function(){M("update")}),K);var k=(0,c.useRef)(s.version);return(0,c.useEffect)((function(){if(k.current!==s.version){k.current=s.version;var r=w.state.fetchingKey;r&&r!==e.current||D()}}),[s.version]),(0,c.useEffect)((function(){s.state.isFetching?S(e.current):x(e.current)}),[s.state.isFetching]),(0,f.useUnmount)((function(){x(e.current),w.removeFetchingKey(e.current)})),(0,c.useEffect)((function(){C.forEach((function(r){r(s.state)}))}),[s.state]),(0,c.useEffect)((function(){0!==s.state.round&&A.forEach((function(r){r(s.state)}))}),[s.state.round]),[s.state,D,I]}function _(r,n){var e=h(r,n),t=e.variables,o=e.deps,u=e.manual,i=e.triggerOn,c=void 0===i?["mount","update","manual"]:i,a=e.strategy,f=!o&&!t||u?["manual"]:c,s=(S()||{}).strategy,l=E(a),v=s?s(l,"query"):l;return R(r,q(q({},e),{},{triggerOn:f,strategy:v.concat((function(r){var n=r.runner,e=r.localCache;e.current=e.current||0;var t=e.current+1;return e.current=t,n().then((function(r){return e.current!==t?P(P({},r),{},{abandon:!0}):r}))}))}))}function G(r,n){var e=h(r,n),t=e.triggerOn,o=void 0===t?["manual"]:t,u=e.strategy,i=(S()||{}).strategy,c=E(u),a=i?i(c,"mutation"):c;return R(r,q(q({},e),{},{triggerOn:o,strategy:a.concat((function(r){var n=r.runner,e=r.localCache;if("manual"!==r.triggerType)return n();if(e.current)return e.current.then((function(r){return P(P({},r),{},{abandon:!0})}));var t=n();return e.current=t.then((function(r){return e.current=void 0,r})),t}))}))}function U(r,n){var e=o(r.effect,2)[1].sessionType,t=(0,a.useSelector)(r,(function(r){return[r.state,r.trigger]})),u="string"==typeof n?{sessionType:n,loaded:void 0}:n||{},i=u.loaded,c=u.sessionType,f=o(t,1)[0].loaded;if(c&&e&&c!==e)throw new Error("The sessionType is not matched, can not use '".concat(e," type' sessionKey with '").concat(c," type' useSession."));if(i&&!f)throw new Error("The session is not loaded yet, check config, and set {loaded: undefined}.");return t}function N(){for(var r=arguments.length,n=new Array(r),e=0;e<r;e++)n[e]=arguments[e];var t=(0,c.useMemo)((function(){return n.map((function(r){return Array.isArray(r)?o(r,1)[0]:r})).some((function(r){return r.isFetching}))}),n),u=(0,a.useIsModelMatchedInStore)(O),i=(0,a.useModel)(O,m,{autoLink:!0}).isFetching;if(!u&&!n.length)throw new Error("You should provide a `GlobalRefreshProvider` to support a global `isFetching` detect.");return u&&!n.length?i:t}function z(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),u=1;u<n;u++)e[u-1]=arguments[u];var i=(0,c.useMemo)((function(){return e.map((function(r){var n={loaded:!1};return n.promise=new Promise((function(r,e){n.resolve=r,n.reject=e})),n}))}),[]),a=(0,c.useRef)(i);function f(r){return r.default?r:{default:r}}return(0,c.useEffect)((function(){var r=a.current;e.forEach((function(n,e){var t=Array.isArray(n)?n[0]:n,o=r[e];if(t.isError&&!o.loaded)return o.loaded=!0,void o.reject(t);t.loaded&&!o.loaded&&(o.loaded=!0,o.resolve(!0))}))}),[].concat(e)),(0,c.useMemo)((function(){var n=a.current.map((function(r){return r.promise}));return(0,c.lazy)((function(){var e=r();return Promise.all([e].concat(t(n))).then((function(r){return f(o(r,1)[0])}),(function(r){return e.then((function(n){var e=function(r){var n=r;return n.default&&"function"==typeof n.default?n.default:r}(n),t=function(r,n){return function(e){return(0,c.createElement)(r,q(q({},e),{},{error:n}))}}(e,r);return f(t)}))}))}))}),[])}function Q(r,n){return U(r,"string"==typeof n?{sessionType:n,loaded:!0}:q(q({},n),{},{loaded:!0}))}function W(r,n){(0,c.useEffect)((function(){if(0!==n.round){var e=!n.isFetching&&n.isError,t=!n.isFetching&&n.sessionLoaded&&!n.isError;(e||t)&&r(n)}}),[n.round])}W.useSuccess=function(r,n){(0,c.useEffect)((function(){0!==n.round&&(!n.isFetching&&n.sessionLoaded&&!n.isError&&r(n.data,n))}),[n.round])},W.useFailure=function(r,n){(0,c.useEffect)((function(){0!==n.round&&(!n.isFetching&&n.isError&&r(n.error,n))}),[n.round])},W.success=W.useSuccess,W.error=W.useFailure;var H=a.Provider,J=a.Provider,V=a.provide,B=function(r,n){var e=n,o=function(){return r.apply(void 0,arguments)},u=function r(n){var u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=null!=n?n:g(o,e),a={key:i,with:function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];var o=u.concat(e.map((function(r){return"function"==typeof r?r:r.key})));return r(i,o)},asGlobal:function(){var r=i.global(),n={useSession:function(){return U(r,e)},useLoadedSession:function(){return Q(r,e)}};return q(q({},n),{},"query"===e?{useQuery:function(n){return _(r,n)}}:{useMutation:function(n){return G(r,n)}})},useSession:function(){return U(i,e)},useLoadedSession:function(){return Q(i,e)},provide:function(){return V([i].concat(t(u)))},provideTo:function(r){return V([i].concat(t(u)))(r)},Provider:function(r){var n=r.children;return(0,c.createElement)(J,{value:[i].concat(t(u))},n)}};return q(q({},a),{},"query"===e?{useQuery:function(r){return _(i,r)}}:{useMutation:function(r){return G(i,r)}})},i={store:u,createStore:u},a=q(q({},i),{},{useQuery:function(r){return _(o,r)}}),f=q(q({},i),{},{useMutation:function(r){return G(o,r)}}),s="query"===e?a:f;return Object.assign(o,s)}}(),i}()})); |
@@ -29,2 +29,6 @@ import { ModelKeys, ModelKey, AirReducer } from '@airma/react-state'; | ||
uniqueKey: unknown; | ||
round: number; | ||
/** | ||
* @deprecated | ||
*/ | ||
fetchVersion?: number; | ||
@@ -55,7 +59,10 @@ } | ||
(runtime: { | ||
current: () => SessionState<T, V>; | ||
variables: any[]; | ||
runner: () => Promise<SessionState<T, V>>; | ||
store: { current: any }; | ||
runtimeCache: { | ||
getSessionState: () => SessionState<T, V>; | ||
variables: V; | ||
triggerType: TriggerType; | ||
runner: ( | ||
setFetchingSessionState?: (s: SessionState<T, V>) => SessionState<T, V> | ||
) => Promise<SessionState<T, V>>; | ||
localCache: { current: any }; | ||
executeContext: { | ||
set: (key: any, value: any) => void; | ||
@@ -351,2 +358,3 @@ get: (key: any) => any; | ||
export declare type GlobalConfig = { | ||
batchUpdate?: (callback: () => void) => void; | ||
useGlobalFetching?: boolean; | ||
@@ -373,2 +381,6 @@ strategy?: ( | ||
) => StrategyType<T, V>; | ||
/** | ||
* @deprecated | ||
* @param op | ||
*/ | ||
throttle: <T = any, V extends any[] = any[]>( | ||
@@ -375,0 +387,0 @@ op?: { duration: number } | number |
{ | ||
"private": false, | ||
"name": "@airma/react-effect", | ||
"version": "18.3.0-alpha.12", | ||
"version": "18.3.0", | ||
"description": "This is a react async state management tool", | ||
@@ -28,4 +28,4 @@ "license": "MIT", | ||
"dependencies": { | ||
"@airma/react-hooks-core": "^18.3.0-alpha.12", | ||
"@airma/react-state": "^18.3.0-alpha.12", | ||
"@airma/react-hooks-core": "^18.3.0", | ||
"@airma/react-state": "^18.3.0", | ||
"react": ">=16.8.0" | ||
@@ -32,0 +32,0 @@ }, |
561
README.md
@@ -13,3 +13,3 @@ [![npm][npm-image]][npm-url] | ||
`@airma/react-effect` is designed for managing the asynchronous effect state for react components. | ||
`@airma/react-effect` is an asynchronous state-management tool for react. | ||
@@ -21,19 +21,8 @@ ## Document | ||
## Why effects | ||
## Code first | ||
Do asynchronous operations in `effects` is more effective. | ||
### useQuery | ||
1. You can pre-render a default result for asynchronous operation before it is really resolved. | ||
2. It makes component render with less asynchronous effects spread in event handle callbacks. | ||
API `useQuery` can query data, and set it as a state. | ||
If you are ready to improve your react app codes with less asynchronous operation effects, please take minutes to read the [documents](https://filefoxper.github.io/airma/#/react-effect/index) ([中文文档](https://filefoxper.github.io/airma/#/zh/react-effect/index)) of this tool. | ||
## Basic Usage | ||
The basic hook API `useQuery` and `useMutation` maintains a promise result state. It contains promise information `data`, `error` and status `isFetching`, `isError` for a render help. | ||
### UseQuery | ||
This API is often used to query data with a promise returning callback and parameters for this callback. When `useQuery` is mounted, or the elements of parameters changed, it calls query callback. | ||
```ts | ||
@@ -48,4 +37,3 @@ import React from 'react'; | ||
} | ||
// Prepare a callback which returns a promise. | ||
// We call it a query callback. | ||
// Prepare a query promise callback. | ||
const fetchUsers = (query: UserQuery):Promise<User[]> => | ||
@@ -56,3 +44,3 @@ Promise.resolve([]); | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [state, trigger, execute] = useQuery( | ||
const [state, trigger, executeWithParams] = useQuery( | ||
// Use query callback | ||
@@ -80,23 +68,31 @@ fetchUsers, | ||
The hook API `useQuery` returns a tuple `[state, trigger, execute]`. Element `state` contains informations about this query action. Element `trigger` is a no parameter callback which returns a `state` promise, it should be used just like a query trigger. Element `execute` is a callback which accepts parameters, and returns a `state` promise. | ||
When `useQuery` is mounted, or the dependency parameters change, it calls the promise callback. | ||
If you don't want the auto query action happens, when the parameters are changed or setted first time, you should set optional config `manual` to stop it. | ||
### UseMutation | ||
API `useMutation` is similar with `useQuery`. The difference is that it should be triggered manually to work. | ||
```ts | ||
import React from 'react'; | ||
import {useQuery} from '@airma/react-effect'; | ||
import {useMutation} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
const fetchUsers = (query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]); | ||
const saveUser = (user: User): Promise<User> => | ||
Promise.resolve(user); | ||
const App = ()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [state, trigger] = useQuery( | ||
fetchUsers, | ||
// Set optional config manual | ||
{manual: true} | ||
const [user, setUser] = useState<User>({...}); | ||
const [ | ||
state, | ||
trigger, | ||
executeWithParams | ||
] = useMutation( | ||
// Set mutation callback, | ||
// it is a promise callback. | ||
saveUser, | ||
// Set mutation parameters. | ||
[ user ] | ||
); | ||
const { | ||
// User[] | undefined | ||
// User | undefined | ||
data, | ||
@@ -108,24 +104,7 @@ // boolean | ||
// boolean | ||
isError, | ||
// boolean | ||
loaded | ||
} = state; | ||
isError | ||
} = result; | ||
const handleClick = async ()=>{ | ||
const { | ||
// User[] | undefined | ||
data, | ||
// boolean | ||
isFetching, | ||
// any | ||
error, | ||
// boolean | ||
isError, | ||
// boolean | ||
// the result might be abandoned, | ||
// if the execution is not the newest one. | ||
abandon, | ||
// boolean | ||
loaded | ||
} = await trigger(); | ||
const handleClick = ()=>{ | ||
trigger(); | ||
} | ||
@@ -137,25 +116,40 @@ | ||
We do not recommend using the result promise returned by a `trigger` callback, and that's why we call it a `trigger`. | ||
The state of useMutation has same fields with useQuery state. | ||
### UseMutation | ||
### Session | ||
It is often used to mutate data with a promise returning callback and its parameters. It is always triggered or executed manually. | ||
Both of useQuery and useMutation need a promise callback for working, the mission of promise callback is called [session](/react-effect/concepts?id=session). | ||
Use a simplified API [session](/react-effect/api?id=session) to make coding fly. | ||
```ts | ||
import React from 'react'; | ||
import {useMutation} from '@airma/react-effect'; | ||
import {session} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
const saveUser = (user: User): Promise<User> =>Promise.resolve(user); | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
// use `session` API to declare a query session | ||
const userQuerySession = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
); | ||
const App = ()=>{ | ||
const [user, setUser] = useState({name:'', username:''}); | ||
const [state, trigger, execute] = useMutation( | ||
// Provide mutation callback | ||
saveUser, | ||
// Set parameters | ||
[user] | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state, | ||
trigger, | ||
executeWithParams | ||
// call session.useQuery | ||
] = userQuerySession.useQuery( | ||
// Set parameters for query callback | ||
[query] | ||
); | ||
const { | ||
// User | undefined | ||
// User[] | undefined | ||
data, | ||
@@ -167,3 +161,3 @@ // boolean | ||
// boolean | ||
isError | ||
isError, | ||
// boolean | ||
@@ -173,7 +167,2 @@ loaded | ||
const handleClick = ()=>{ | ||
// Trigger it manually | ||
trigger(); | ||
} | ||
...... | ||
@@ -183,34 +172,256 @@ } | ||
It only works in `manual` mode, so you don't have to worry about the auto mutation happening. | ||
The state of useQuery/useMutation is a local state. There are two different store state-managements: use dynamic React.Context store or use static global store. | ||
### Use Strategy | ||
### React.Context dynamic store state-management | ||
Sometimes you want to control the running way about the promise callback. | ||
```ts | ||
import React from 'react'; | ||
import {session} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
For example, we often save data oncely, and then unmount component immediately after saving success to prevent a repeat saving mistake. | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
// declare a query session dynamic store | ||
const userQueryStore = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
).createStore(); | ||
const SearchButton = ()=>{ | ||
// useSession subscribes state change from session store | ||
const [ | ||
// state from session store | ||
{isFetching}, | ||
// call trigger function can trigger useQuery work manually | ||
triggerQuery | ||
] = userQueryStore.useSession(); | ||
return ( | ||
<button | ||
disabled={isFetching} | ||
onClick={triggerQuery} | ||
> | ||
query | ||
</button> | ||
); | ||
} | ||
// provide dynamic store is very important | ||
const App = userQueryStore.provideTo(()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state, | ||
// Write every query state change to store | ||
] = userQueryStore.useQuery( | ||
[query] | ||
); | ||
...... | ||
return ( | ||
<> | ||
<SearchButton /> | ||
...... | ||
</> | ||
); | ||
}) | ||
``` | ||
Why support React.Context store? Refer to [@airma/react-state explain](/react-state/index?id=why-support-context-store). | ||
The dynamic store is a special session [key](/react-effect/concepts?id=key) collection not a real store. It persist an actual store in [Provider](/react-effect/api?id=provider) component. | ||
When a Provider is mounting in, it creates store, and when the provider has been unmounted, it destroys this store. | ||
### Global static store state-management | ||
```ts | ||
import React from 'react'; | ||
import {useMutation, Strategy} from '@airma/react-effect'; | ||
import {session} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
const saveUser = (user:User):Promise<User> => | ||
Promise.resolve(user); | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
// declare a query session global static store | ||
const userQueryStore = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
).createStore().asGlobal(); | ||
const SearchButton = ()=>{ | ||
const [ | ||
{ | ||
isFetching, | ||
// User[] | undefined | ||
data | ||
}, | ||
triggerQuery | ||
] = userQueryStore.useSession(); | ||
return ( | ||
<button | ||
disabled={isFetching} | ||
onClick={triggerQuery} | ||
> | ||
query | ||
</button> | ||
); | ||
} | ||
// global static store needs no Provider. | ||
const App = ()=>{ | ||
const [user, setUser] = useState({name:'', username:''}); | ||
const [state, trigger] = useMutation( | ||
saveUser, | ||
// Set variables and strategy | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state | ||
] = userQueryStore.useQuery( | ||
[query] | ||
); | ||
...... | ||
return ( | ||
<> | ||
<SearchButton /> | ||
...... | ||
</> | ||
); | ||
} | ||
``` | ||
The state `data` from useSession is always has a `undefined` union type. API [useLoadedSession](/react-effect/api?id=useloadedsession) can be helpful if the session `state.data` is not empty from initializing time. | ||
```ts | ||
import React from 'react'; | ||
import {session} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
const userQueryStore = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
).createStore().asGlobal(); | ||
const SearchButton = ()=>{ | ||
// store.useLoadedSession can give out the promise resolve type without `empty`. | ||
const [ | ||
{ | ||
variables: [user], | ||
// Set Strategy.once() | ||
strategy: Strategy.once() | ||
isFetching, | ||
// User[] | ||
data | ||
}, | ||
triggerQuery | ||
] = userQueryStore.useLoadedSession(); | ||
return ( | ||
<button | ||
disabled={isFetching} | ||
onClick={triggerQuery} | ||
> | ||
query | ||
</button> | ||
); | ||
} | ||
const App = ()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state | ||
] = userQueryStore.useQuery( | ||
// use object config to set default data | ||
{ | ||
variables: [query], | ||
// To make `state.data` not empty, | ||
// a default data is needed. | ||
defaultData: [] | ||
} | ||
); | ||
const handleClick = async ()=>{ | ||
trigger(); | ||
} | ||
...... | ||
return ( | ||
<> | ||
<SearchButton /> | ||
...... | ||
</> | ||
); | ||
} | ||
``` | ||
Want to do something when query or mutation responses? | ||
```ts | ||
import React from 'react'; | ||
import {session, useResponse} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
const userQuerySession = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
); | ||
const App = ()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state | ||
] = userQuerySession.useQuery( | ||
[query] | ||
); | ||
// When useQuery/useMutation responses, | ||
// useResponse calls the response callback. | ||
useResponse( | ||
// response callback | ||
(sessionState)=>{ | ||
// accept a newest session state. | ||
const { | ||
data, | ||
isError, | ||
error, | ||
...... | ||
} = sessionState; | ||
doSomething(sessionState); | ||
}, | ||
// listen to the session state of useQuery | ||
state | ||
); | ||
// When useQuery/useMutation responses successfully, | ||
// useResponse.useSuccess calls the response callback. | ||
useResponse.useSuccess( | ||
(data, sessionState)=>{ | ||
// accept a newst session state data. | ||
// accept a newest session state. | ||
doSomething(data); | ||
}, | ||
// listen to the session state of useQuery | ||
state | ||
); | ||
// When useQuery/useMutation responses unsuccessfully, | ||
// useResponse.useFailure calls the response callback. | ||
useResponse.useFailure( | ||
(error, sessionState)=>{ | ||
// accept a newst session state error. | ||
// accept a newest session state. | ||
doSomething(error); | ||
}, | ||
// listen to the session state of useQuery | ||
state | ||
); | ||
...... | ||
@@ -220,57 +431,155 @@ } | ||
## Share promise state changes | ||
Want to run useQuery or useMutation with some features like debounce? | ||
There are steps you need to do for sharing promise state changes. | ||
### Strategy | ||
1. Create a `session key` for every promise callback. | ||
2. Set `session keys` to `SessionProvider` for creating session store. | ||
3. Use `session key` to link a `SessionProvider` store for promise state sharing. | ||
```ts | ||
import React from 'react'; | ||
import {session, Strategy} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
const userQuerySession = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
); | ||
const App = ()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state, | ||
trigger, | ||
executeWithParams | ||
] = userQuerySession.useQuery( | ||
{ | ||
variables: [query], | ||
// set a debouce strategy to take debounce query feature. | ||
strategy: Strategy.debounce(300) | ||
} | ||
); | ||
...... | ||
} | ||
``` | ||
The [Strategy](/react-effect/api?id=strategy) API contains some useful strategies for useQuery and useMutation. Compose some strategies together can make the session of useQuery/useMutation performance wonderfully. | ||
```ts | ||
import React, {memo} from 'react'; | ||
import { | ||
SessionProvider, | ||
createSessionKey, | ||
useSession, | ||
useQuery | ||
} from '@airma/react-effect'; | ||
import React from 'react'; | ||
import {session, Strategy} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
const fetchLoginUser = (query:UserQuery):Promise<User>=> | ||
Promise.resolve({...}); | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
// Create a `session key` | ||
const loginUser = createSessionKey(fetchLoginUser); | ||
const userQuerySession = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
); | ||
const Child1 = memo(()=>{ | ||
// Query for current login user. | ||
// Update promise state into store | ||
// with session key `loginUser` | ||
const [ state ] = useQuery(loginUser,[]); | ||
const App = ()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state, | ||
trigger, | ||
executeWithParams | ||
] = userQuerySession.useQuery( | ||
{ | ||
variables: [query], | ||
// compose different strategies. | ||
strategy: [ | ||
// Validate query.name is not empty, | ||
// if it is empty, then stop execute query | ||
Strategy.validate(()=>!!query.name), | ||
// Query with debounce feature | ||
Strategy.debounce(300), | ||
// If the response data equals current state.data, | ||
// keeps current state.data. | ||
Strategy.memo() | ||
] | ||
} | ||
); | ||
return ......; | ||
}); | ||
...... | ||
} | ||
``` | ||
const Child2 = memo(()=>{ | ||
// Take and subscribe promise state changes | ||
// of session key `loginUser` in store. | ||
const [ state ] = useSession(loginUser); | ||
Want to use SWR(stale-while-revalidate)? | ||
return ......; | ||
}); | ||
```ts | ||
import React from 'react'; | ||
import {session, Strategy} from '@airma/react-effect'; | ||
import {User} from './type'; | ||
const App = memo(()=>{ | ||
// Set session key `loginUser` into `SessionProvider`, | ||
// and create a store inside. | ||
return ( | ||
<SessionProvider keys={loginUser}> | ||
<Child1/> | ||
<Child2/> | ||
</SessionProvider> | ||
); | ||
}) | ||
type UserQuery = { | ||
name: string; | ||
username: string; | ||
} | ||
const userQuerySession = session( | ||
(query: UserQuery):Promise<User[]> => | ||
Promise.resolve([]), | ||
'query' | ||
); | ||
const App = ()=>{ | ||
const [query, setQuery] = useState({name:'', username:''}); | ||
const [ | ||
state, | ||
trigger, | ||
executeWithParams | ||
] = userQuerySession.useQuery( | ||
{ | ||
variables: [query], | ||
strategy: [ | ||
// use swr strategy | ||
Strategy.cache({ | ||
capacity:10, | ||
staleTime:5*60*1000 | ||
}) | ||
] | ||
} | ||
); | ||
...... | ||
} | ||
``` | ||
## Summary | ||
## Introduce | ||
The common usages about `@airma/react-effect` are listed above, if you want to know more about it, please take this [document](https://filefoxper.github.io/airma/#/react-effect/index). | ||
`@airma/react-effect` is an asynchronous state-management tool for react. It dependents [@airma/react-state](/react-state/index), and there are some similar apis between both packages, so, use a common package [@airma/react-hooks](/react-hooks/index) is a better choice. | ||
### Why not use setState in asynchronous callback? | ||
Setting state in asynchronous callback is more easy to take a stale state usage bug in code. And it often makes [zombie-children](https://react-redux.js.org/api/hooks#stale-props-and-zombie-children) problem too. | ||
### When useQuery works? | ||
API useQuery works when it is mounted, or the dependency parameters change, just like React.useEffect performance. It also can be triggered manually. | ||
## Install and Support | ||
The package lives in [npm](https://www.npmjs.com/get-npm). To install the latest stable version, run the following command: | ||
### Install command | ||
``` | ||
npm i @airma/react-effect | ||
``` | ||
### Browser support | ||
``` | ||
chrome: '>=91', | ||
edge: '>=91', | ||
firefox: '=>90', | ||
safari: '>=15' | ||
``` |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
66249
504
1
574
2