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