UNPKG

redux-cached-api-middleware

Version:
3 lines (2 loc) 4.42 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("redux-api-middleware")):"function"==typeof define&&define.amd?define(["redux-api-middleware"],t):e.ReduxCachedApiMiddleware=t(e.ReduxApiMiddleware)}(this,function(e){"use strict";var t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},r=t({},{DEFAULT_INVOKE_OPTIONS:{},DEFAULT_CACHE_STRATEGY:void 0}),n={set DEFAULT_INVOKE_OPTIONS(e){r.DEFAULT_INVOKE_OPTIONS=e},get DEFAULT_INVOKE_OPTIONS(){return r.DEFAULT_INVOKE_OPTIONS},set DEFAULT_CACHE_STRATEGY(e){r.DEFAULT_CACHE_STRATEGY=e},get DEFAULT_CACHE_STRATEGY(){return r.DEFAULT_CACHE_STRATEGY}},a="@RCAM",c={SIMPLE:"SIMPLE",SIMPLE_SUCCESS:"SIMPLE_SUCCESS",TTL:"TTL",TTL_SUCCESS:"TTL_SUCCESS"},u=Object.freeze({NAME:a,CACHE_TYPES:c}),i=c.SIMPLE,o=Object.freeze({type:i,buildStrategy:function(){return{type:i}},shouldFetch:function(e){var t=e.state;return!t||!t.fetching&&!t.fetched}}),f=c.SIMPLE_SUCCESS,s=Object.freeze({type:f,buildStrategy:function(){return{type:f}},shouldFetch:function(e){var t=e.state;if(t){if(t.fetching)return!1;if(t.fetched&&!t.error)return!1}return!0}}),E=c.TTL,d=Object.freeze({type:E,buildStrategy:function(e){var t=e.ttl;return{type:E,ttl:t}},shouldFetch:function(e){var t=e.state,r=e.strategy;if(t&&r){if(t.fetching)return!1;if(t.fetched)return t.timestamp+r.ttl<=Date.now()}return!0}}),h=c.TTL_SUCCESS,C=Object.freeze({type:h,buildStrategy:function(e){var t=e.ttl;return{type:h,ttl:t}},shouldFetch:function(e){var t=e.state,r=e.strategy;if(t&&r){if(t.fetching)return!1;if(t.fetched&&!t.error)return t.timestamp+r.ttl<=Date.now()}return!0}}),T={get:function(e){switch(e){case i:return o;case f:return s;case E:return d;case h:return C;default:throw new Error("Invalid cache type - "+e)}}},l=function(e,t){return e&&e[a]?e[a][t]:void 0},A=Object.freeze({getResult:l}),p=Object.freeze({invalidateCache:function(e){return{type:"@RCAM.INVALIDATE_CACHE",payload:e}},clearCache:function(e){return{type:"@RCAM.CLEAR_CACHE",payload:e}},invoke:function(t){var r,a,c=t.cache,u=function(e,t){var r={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}(t,["cache"]);return r=regeneratorRuntime.mark(function t(r,a){var i,o,f,s;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(o=Object.assign({types:[]},n.DEFAULT_INVOKE_OPTIONS,u),!c||!c.key){t.next=12;break}if(f=c.strategy||n.DEFAULT_CACHE_STRATEGY,s=l(a(),c.key),o.types=[{type:"@RCAM.FETCH_START",meta:{cache:c}},{type:"@RCAM.FETCH_SUCCESS",meta:{cache:c}},{type:"@RCAM.FETCH_ERROR",meta:{cache:c}}],!c.shouldFetch){t.next=10;break}if(c.shouldFetch({state:s})){t.next=8;break}return t.abrupt("return",void 0);case 8:t.next=12;break;case 10:if(!f||T.get(f.type).shouldFetch({state:s,strategy:f})){t.next=12;break}return t.abrupt("return",void 0);case 12:return t.abrupt("return",r(((i={})[e.RSAA]=o,i)));case 13:case"end":return t.stop()}},t,void 0)}),a=function(){var e=r.apply(this,arguments);return new Promise(function(t,r){return function n(a,c){try{var u=e[a](c),i=u.value}catch(e){return void r(e)}if(!u.done)return Promise.resolve(i).then(function(e){n("next",e)},function(e){n("throw",e)});t(i)}("next")})},function(e,t){return a.apply(this,arguments)}}}),S={fetching:!1,fetched:!1,error:!1,timestamp:null,successPayload:null,errorPayload:null},y={};return{config:n,constants:u,cache:T,actions:p,reducer:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y,r=arguments[1],n=r.type,a=r.payload,c=r.meta;switch(n){case"@RCAM.CLEAR_CACHE":if(a&&e[a]){var u=t({},e);return delete u[a],u}return y;case"@RCAM.INVALIDATE_CACHE":var i=Object.keys(e).filter(function(t){return e[t].fetching});if(i.length){var o=t({},e);return i.forEach(function(e){o[e].fetching=!1}),o}return e;case"@RCAM.FETCH_START":var f,s=c.cache.key;return t({},e,((f={})[s]=t({},e[s]||S,{fetching:!0}),f));case"@RCAM.FETCH_SUCCESS":var E,d=c.cache.key;return d in e?t({},e,((E={})[d]=t({},e[d],{fetching:!1,fetched:!0,error:!1,timestamp:(new Date).getTime(),successPayload:a}),E)):e;case"@RCAM.FETCH_ERROR":var h,C=c.cache.key;return C in e?t({},e,((h={})[C]=t({},e[C],{fetching:!1,fetched:!0,error:!0,timestamp:(new Date).getTime(),errorPayload:a}),h)):e;default:return e}},selectors:A}}); //# sourceMappingURL=index.js.map