@set-state/core
Version:
state management in less than 1 Kb
3 lines (2 loc) • 2.06 kB
JavaScript
var e=Symbol("set-state"),n=Symbol("set-state:end"),t=Symbol("set-state:guard"),r=Symbol("set-state:node"),u=function(e){return"function"==typeof e},o=function(e){return u(e)&&e.is===r},i=function(e){return o(e)&&e.sealed===t},a=function(e){return o(e)&&e.compute===n},c=function(e){var n=e.value;e.value=e.compute(),n!==e.value&&Array.from(e.listeners).forEach(function(t){return t(e.value,n)})},d=function(e,n){Array.from(e.dependencies).forEach(function(t){if("add"===n&&t.dependencies.has(e))throw new ReferenceError("circular reference created.");t.dependents[n](e)})},s=function(e){var n=e.state.updating;n.has(e)&&n.delete(e),n.add(e),Array.from(e.dependents).forEach(s)},f=0;function l(l,p){void 0===p&&(p=[]);var v=!1,m=new Set,S=new Set,y=l||f++,h=new Set(p),w=function(e){if(o(e))return e;var f=function(e){if(v&&m.add(f),a(f)||i(f))return f.value;if(void 0!==e){if(e===f.value)return f;if(e===t)return f.sealed=t,f;if(d(f,"delete"),f.dependencies.clear(),e===n)return f.compute=n,f;f.compute=function(){return e},u(e)?(f.compute=e,v=!0,m.clear(),c(f),m.delete(f),f.dependencies=new Set(m),v=!1,d(f,"add")):c(f),S.clear(),Array.from(f.dependents).forEach(s),Array.from(S).forEach(c)}return f.value};return f.locals={},f.state=w,f.is=r,f.context=y,f.listeners=new Set,f.dependents=new Set,f.dependencies=new Set,f.on=function(e,n){var t=u(e)?e:e[n].bind(e);return f.listeners.add(t),function(){return f.listeners.delete(t)}},f.seal=function(){return f(t)},f.freeze=f.end=function(){return f(n)},f.valueOf=f.toString=function(){return f.value},Array.from(h).forEach(function(e){return e(f)}),f(e),f};return w.use=function(e){return h.add(e),w},w.isOwnNode=function(e){return o(e)&&w.context===e.context},w.plugins=h,w.updating=S,w.capturing=m,w.is=e,w.of=w,w.END=n,w.GUARD=t,w.isNode=o,w.freeze=w.end=function(e){return w(e).end()},w.seal=function(e){return w(e).seal()},w.isSealed=i,w.isFrozen=w.isFinished=a,w.context=y,w}l.isState=function(n){return u(n)&&n.is===e},l.state=l("set-state:core"),module.exports=l;
//# sourceMappingURL=core.js.map