r-magnet
Version:
A state management library for React
3 lines (2 loc) • 3.89 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e);const r="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?n.default.useLayoutEffect:n.default.useEffect,a=n.default.createContext(null);function c(){return n.default.useContext(a)}const o=function(e=a){const t=e===a?c:()=>n.default.useContext(e);return function(){return t()}}();function s(e,t,n){let r=Number(new Date).toString()+Math.random();return n.set(r,((n,r,a)=>{e.includes(a.type)&&t(a,r,n)})),{unsubscribe:()=>{n.delete(r)}}}function u(e,t){const n=o();r((()=>{const r=s((Array.isArray(e)?e:[e]).map((e=>e._$atype)),t,n.__effectMap);return()=>{r.unsubscribe()}}),[])}function i(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function d(e,t){if(i(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!i(e[n[r]],t[n[r]]))return!1;return!0}function f(e){const t=t=>this.dispatch({type:e,payload:t});return t._$atype=e,t}function l(e){return function(t){if(!t.name)throw new Error("`name` is a required option for reducer");const n=t.reducers||{},r={},a=t.effects||{},c=new RegExp(`^${t.name}.+(?:request|success|failure)$`,"i");function o(e=t.initialState,r){return"function"==typeof n[r.type]?n[r.type](e,r):c.test(r.type)?Object.assign(Object.assign({},e),{[r.key]:r.data}):e}Object.keys(n).map((a=>{const c=`${t.name}_${a}`;n[c]=n[a],n[a]=void 0,r[a]=e.createAction(c)}));return Object.keys(a).map((n=>{const c=a[n];r[n]=r=>e.dispatch((()=>{return c({payload:r},(a=n,o=e.getState,(n,r)=>{const c=o()[t.name][n].data;e.dispatch({type:`${t.name}_${a}_request`,key:n,data:{loading:!0,data:c,error:null}}),Promise.resolve(r).then((r=>e.dispatch({type:`${t.name}_${a}_success`,key:n,data:{loading:!1,data:r,error:null}}))).catch((r=>e.dispatch({type:`${t.name}_${a}_failure`,key:n,data:{loading:!1,data:c,error:r.message?r.message:r}})))}),e.getState,e.dispatch);var a,o}))})),e.addReducer(t.name,o,t.initialState),{name:t.name,actions:r,reducer:o}}}function p(e){return function(t,n){return s((Array.isArray(t)?t:[t]).map((e=>e._$atype)),n,e)}}function y(e){return function(...t){let n=t.map((e=>e._$atype));return{debounce:t=>({effect:r=>s(n,function(e,t=300){let n;return(...r)=>{clearTimeout(n),n=setTimeout((()=>{e.apply(this,r)}),t)}}(r,t),e)}),effect:t=>s(n,t,e)}}}exports.Provider=({store:e,context:t,children:c})=>{r((()=>()=>{null==e||e.dispose()}),[e]);const o=t||a;return n.default.createElement(o.Provider,{value:e},c)},exports.createStore=function(){return function(e){const t=new Set;let n=e;const r=new Map,a=new Map;function c(e){t.forEach((t=>t(n,e)))}const o={getState:()=>n,subscribe:e=>(t.add(e),()=>t.delete(e)),dispatch(e){if("function"==typeof e)return void e();let t=!1;r.forEach(((r,a)=>{const c=n[a],o=r(c,e);o!==c&&(n[a]=o,t=!0)})),t&&(n=Object.assign({},n),c(e)),a.forEach((t=>t(o.dispatch,o.getState,e)))},addReducer(e,t,a){r.set(e,t),n=Object.assign(Object.assign({},n),{[e]:a}),c()},dispose(){},createAction:f};return{getState:o.getState,dispose:o.dispose,createAction:o.createAction,createReducer:l(o),on:y(a),createEffect:p(a),subscribe:o.subscribe,__effectMap:a,dispatch:o.dispatch,addReducer:o.addReducer}}({})},exports.useEmEffect=u,exports.useSelector=function(t=(e=>e),n=d){const a=o(),[c,s]=e.useState(t(a.getState()));let u=null;return r((()=>a.subscribe((e=>{const r=t(e);n(r,u)||(s(r),u=r)}))),[a]),c},exports.useSelectorByActions=function(t,n,r=d){const a=o(),[c,s]=e.useState(n(a.getState()));let i=c;return u(t,(()=>{const e=n(a.getState());r(e,i)||(s(e),i=e)})),c},exports.useStore=o;
//# sourceMappingURL=index.cjs.production.min.js.map