redux-tiles
Version:
Library to create and easily compose redux pieces together in less verbose manner
2 lines (1 loc) • 9.53 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.ReduxTiles=e.ReduxTiles||{})}(this,function(e){"use strict";function t(e){return Array.isArray(e)}function n(e){return"string"==typeof e}function r(e){return"function"==typeof e}function i(e,t){return t.reduce(function(e,t){return e?e[t]:undefined},e)}function o(e,t){return Object.keys(e).reduce(function(n,r){return n[r]=t(e[r]),n},{})}function a(e){return n(e)?[e]:e}function u(e,t,r){if(n(t))return u(e,[t],r);if(1===t.length)return e[t[0]]=r,e;var i=t[0];return e[i]||(e[i]={}),u(e[i],t.slice(1),r)}function c(e){return t(e)?e:Object.keys(e).reduce(function(t,n){return t.concat(e[n])},[])}function f(e,t){return 0===t?e:e[0].toUpperCase()+e.slice(1)}function l(e){var t=e.type,n=e.path;return a(t).concat(null==n?[]:n.map(String)).map(f).join("")}function s(e){return c(e).reduce(function(e,t){return u(e,t.tileName,t.action),e},{})}function d(e,t){var n=t&&t.type;return"Given action "+(n&&'"'+n+'"'||"an action")+', reducer "'+e+'" returned undefined. To ignore an action, you must explicitly return the previous state.'}function p(e){Object.keys(e).forEach(function(t){var n=e[t];if(void 0===n(undefined,{type:z.INIT}))throw Error('Reducer "'+t+'" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined.');var r="@@redux/PROBE_UNKNOWN_ACTION_"+Math.random().toString(36).substring(7).split("").join(".");if(void 0===n(undefined,{type:r}))throw Error('Reducer "'+t+"\" returned undefined when probed with a random type. Don't try to handle "+z.INIT+' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined.')})}function y(e){for(var t=Object.keys(e),n={},r=0;t.length>r;r++){var i=t[r];"function"==typeof e[i]&&(n[i]=e[i])}var o,a=Object.keys(n);try{p(n)}catch(u){o=u}return function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=arguments[1];if(o)throw o;for(var r=!1,i={},u=0;a.length>u;u++){var c=a[u],f=n[c],l=e[c],s=f(l,t);if(void 0===s){var p=d(c,t);throw Error(p)}i[c]=s,r=r||s!==l}return r?i:e}}function g(e){G=e}function h(e,t){return e===undefined||null===e?t:e}function v(e){var t=e.state,n=e.params,r=e.nesting,o=e.tileName,u=e.selectorFallback,c=[],f=G;r&&(c=r(n));var l=a(o);return h(i(t,(f?[f]:[]).concat(l,c)),u)}function b(e){var t=e.state,n=e.params,r=e.tileName,i=e.fn;if(!t)throw Error('\n Error in Redux-Tiles Selector – you have to provide\n state as a first argument!. Error in "'+l({type:r})+'" tile.');return i(t,n)}function S(e){var t=e.tileName,n=e.nesting,r=e.selectorFallback,o=function(e){return h(i(e,(G?[G]:[]).concat(a(t))))},u=function(e,i){return v({state:e,params:i,nesting:n,tileName:t,selectorFallback:r})};return{getAll:function(e){return b({state:e,tileName:t,fn:o})},get:function(e,n){return b({state:e,params:n,tileName:t,fn:u})}}}function m(e){return y(Object.keys(e).reduce(function(t,n){var i=e[n];return t[n]=r(i)?i:m(i),t},{}))}function E(e,t){return void 0===t&&(t=G),t!==G&&g(t),m(c(e).reduce(function(e,t){return u(e,t.tileName,t.reducer),e},{}))}function T(e){return c(e).reduce(function(e,t){var n=t.selectors.get;return n.getAll=t.selectors.getAll,u(e,t.tileName,n),e},{})}function O(e,t){return{actions:s(e),reducer:E(e,t),selectors:T(e)}}function j(e){var t=Object.keys(e).map(function(t){return e[t]}).filter(Boolean);return Promise.all(t)}function R(e){void 0===e&&(e={});var t={};return{middleware:function(n){var r=n.dispatch,i=n.getState;return function(n){return function(o){return"function"==typeof o?o(K({dispatch:r,getState:i,promisesStorage:t},e)):n(o)}}},waitTiles:j.bind(null,t)}}function w(e){if(3===e.length)return q({dispatch:e[0],getState:e[1]},e[2]);if(2===e.length)return{dispatch:e[0],getState:e[1]};if(1===e.length&&"object"===W(e[0]))return e[0];throw Error("Redux-Tiles expects own middleware, or redux-thunk")}function _(e){var t=e.isPending,n=e.fetched,r=e.error;return!t&&(!1===n||null!=r)}function P(e){return function(t,n){return function(){for(var r=[],i=0;arguments.length>i;i++)r[i]=arguments[i];return e(w(r),t,n)}}}function N(e){var t=e.START,n=e.SUCCESS,r=e.FAILURE,i=e.fn,o=e.type,a=e.caching,u=e.nesting,c=e.selectors;return P(function(e,f,s){var d=(void 0===s?{}:s).forceAsync,p=e.dispatch,y=e.getState,g=e.promisesStorage,h=void 0===g?{}:g,v=H(e,["dispatch","getState","promisesStorage"]),b=u?u(f):null,S=l({type:o,path:b});if(a){var m=h[S];if(m)return m}if(a&&!d){var E=c.get(y(),f),T=E.isPending,O=E.fetched,j=E.error,R=E.data;if(!_({isPending:T,fetched:O,error:j}))return Promise.resolve({data:R,error:j,isPending:T})}p({type:t,payload:{path:b},isPending:!0});var w=i(q({params:f,dispatch:p,getState:y},v)).then(function(e){return h[S]=undefined,p({type:n,payload:{path:b,data:e},data:e,isPending:!1})})["catch"](function(e){return h[S]=undefined,p({error:e,type:r,payload:{path:b},isPending:!1})});return h[S]=w,w})}function A(e){var t=e.type;return P(function(e){return(0,e.dispatch)({type:t})})}function k(e){var t=e.SET,n=e.fn,r=e.nesting,i=e.selector;return P(function(e,o){var a=e.dispatch,u=e.getState,c=H(e,["dispatch","getState"]),f=r?r(o):null,l=function(){return i(u(),o)},s=n(q({params:o,dispatch:a,getState:u,getData:l},c));return a({type:t,payload:{path:f,data:s},data:s})})}function x(e,t){return function(n,r){void 0===n&&(n=e);var i=t[r.type];return"function"==typeof i?i(n,r):n}}function I(e,t){return x(e,o(t,function(e){return function(t,n){return F({state:t,action:n,newValue:r(e)?e(t,n):e})}}))}function F(e){var t=e.action,n=e.state,r=e.newValue,o=t.payload.path;if(!o)return r;for(var a,u={},c=o.length,f=c-1;f>=0;f-=1){var l=o[f],s=f===o.length-1,d=(y={},y[l]=s?r:u,y);a=o.slice(0,f);var p=i(n,a)||{};u=J({},p,d)}return J({},n,u);var y}function C(e){var t=e.type,n=e.fn,r=e.caching,i=e.nesting,o=e.selectorFallback,a=void 0===o?null:o,u=i?{}:null,c=l({type:t}),f={START:""+X+c+"_START",SUCCESS:""+X+c+"_SUCCESS",FAILURE:""+X+c+"_FAILURE",RESET:""+X+c+"_RESET"},s={selectorFallback:{isPending:!1,error:null,data:a,fetched:!1},tileName:t,nesting:i},d=S(s),p={START:f.START,SUCCESS:f.SUCCESS,FAILURE:f.FAILURE,fn:n,type:t,caching:r,nesting:i,selectors:d},y=N(p);return y.reset=A({type:f.RESET}),{action:y,reducer:I(u,(g={},g[f.START]={data:null,isPending:!0,error:null,fetched:!1},g[f.FAILURE]=function(e,t){return{data:null,isPending:!1,error:t.error,fetched:!0}},g[f.SUCCESS]=function(e,t){return{error:null,isPending:!1,data:t.payload&&t.payload.data,fetched:!0}},g[f.RESET]=u,g)),selectors:d,tileName:t,constants:f,reflect:e};var g}function U(e){var t=e.type,n=e.nesting,r=e.fn,i=void 0===r?function(e){return e.params}:r,o=e.fns,a=e.initialState,u=void 0===a?n?{}:null:a,c=e.selectorFallback,f=l({type:t}),s={SET:""+X+f+"_SET",RESET:""+X+f+"_RESET"},d={selectorFallback:c,tileName:t,nesting:n},p=S(d),y={SET:s.SET,nesting:n,fn:i,selector:p.get},g=k(y);g.reset=A({type:s.RESET}),o&&Object.keys(o).forEach(function(e){var t=o[e],n=Q({},y,{fn:t});g[e]=k(n)});var h=(b={},b[s.SET]=function(e,t){return t.payload&&t.payload.data},b[s.RESET]=u,b),v=I(u,h);return{action:g,selectors:p,reducer:v,tileName:t,constants:s,reflect:e};var b}var L,M="object"==typeof global&&global&&global.Object===Object&&global,B="object"==typeof self&&self&&self.Object===Object&&self,D=(M||B||Function("return this")(),Function.prototype),V=D.toString;V.call(Object);L="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof module?module:Function("return this")();var z=(function(e){var t,n=e.Symbol;"function"==typeof n?n.observable?t=n.observable:(t=n("observable"),n.observable=t):t="@@observable"}(L),{INIT:"@@redux/INIT"}),G="",K=undefined&&undefined.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;r>n;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},q=undefined&&undefined.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;r>n;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},H=undefined&&undefined.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,r=Object.getOwnPropertySymbols(e);r.length>i;i++)0>t.indexOf(r[i])&&(n[r[i]]=e[r[i]]);return n},J=undefined&&undefined.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;r>n;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},Q=undefined&&undefined.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;r>n;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},X="Redux_Tiles_";e.createTile=C,e.createSyncTile=U,e.createReducers=E,e.createActions=s,e.createSelectors=T,e.createMiddleware=R,e.createEntities=O,Object.defineProperty(e,"__esModule",{value:!0})});