little-state-machine
Version:
State management made super simple
3 lines (2 loc) • 2.88 kB
JavaScript
import*as t from"react";function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function n(){return n=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},n.apply(null,arguments)}var r="action",o=function(){var t={name:"__LSM__",middleWares:[],persist:r},n={},o=new Set;try{t.storageType="undefined"!=typeof sessionStorage?window.sessionStorage:void 0}catch(t){}return{subscribe:function(t){return o.add(t),function(){return o.delete(t)}},updateStore:function(e){try{n=t.storageType&&JSON.parse(t.storageType.getItem(t.name)||"")||e}catch(t){n=e}},saveStore:function(){t.storageType&&t.storageType.setItem(t.name,JSON.stringify(n))},get state(){return n},getState:function(){return n},setState:function(t){n="function"==typeof t?t(n):n;for(var r,a=function(t){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,n){if(t){if("string"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}(t))){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(o);!(r=a()).done;)(0,r.value)()},set state(t){n=t},get options(){return t},set options(e){t=e}}}();function a(t,e){e&&(o.options=n({},o.options,e)),"production"!==process.env.NODE_ENV&&"undefined"!=typeof window&&(window.__LSM_NAME__=o.options.name,window.__LSM_RESET__=function(){return o.options.storageType&&o.options.storageType.removeItem(o.options.name)}),o.updateStore(t)}function i(e){var n=void 0===e?{}:e,a=n.selector,i=t.useRef(Object.entries(n.actions||{}).reduce(function(t,e){var n,a,i;return Object.assign({},t,((n={})[e[0]]=(a=o.setState,i=e[1],function(t,e){"production"!==process.env.NODE_ENV&&(window.__LSM_NAME__=i.name),o.state=i(o.state,t),o.options.middleWares&&(o.state=o.options.middleWares.reduce(function(e,n){return n(e,i.name,t)||e},o.state)),(!e||!e.skipRender)&&a(o.state),o.options.persist===r&&o.saveStore()}),n))},{})),s=t.useRef(a),u=t.useRef(void 0),c=t.useCallback(function(){var t=o.getState();if(!s.current)return t;var e=s.current(t);return JSON.stringify(u.current)!==JSON.stringify(e)&&(u.current=e),u.current},[]);return t.useSyncExternalStore(o.subscribe,c,function(){}),{actions:i.current,state:o.state,getState:t.useCallback(function(){return o.state},[])}}export{a as createStore,i as useStateMachine};
//# sourceMappingURL=little-state-machine.es.js.map