@cervello/react
Version:
🤯 Simple, reactive, tiny and performant state-management library
3 lines (2 loc) • 4.92 kB
JavaScript
var e=require("react"),n=Symbol("nonReactiveObject");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(this,arguments)}function r(e){if(!e||"object"!=typeof e)return e;var n={};return Array.isArray(e)?n=e.map(function(e){return r(e)}):function(e){if(!u(e))return!1;if(i(e))return!0;var n=Object.keys(e);return n.includes("tag")&&n.includes("containerInfo")||n.some(function(e){return e.startsWith("__reactContainer")})||n.includes("tag")&&n.includes("stateNode")}(e)?n=e:(Object.entries(e).forEach(function(e){n[e[0]]=r(e[1])}),Object.getOwnPropertySymbols(e).forEach(function(t){n[t]=e[t]})),n}var u=function(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)},i=function(e){return!!u(e)&&!!e.$$typeof};function o(e){return u(e)&&!i(e)&&!e[n]}function a(e){var n={};return"object"!=typeof e||null==e?e:Array.isArray(e)?e.map(function(e){return a(e)}):i(e)?{props:a(e.props),type:"string"==typeof e.type?e.type:""}:null!=globalThis&&globalThis.HTMLElement&&e instanceof globalThis.HTMLElement?{type:"[HTMLElement]",content:e.innerHTML}:(Object.entries(e).forEach(function(e){n[e[0]]=a(e[1])}),n)}"hasOwn"in Object||(Object.hasOwn=Object.call.bind(Object.hasOwnProperty));var l=Symbol("value");function c(e,n,u){var i,f;void 0===u&&(u={});var s=null!=(i=u.nestedFieldPath)?i:"root",v=((f={})[l]=n,f),h="root"===s?Object.fromEntries(Object.entries(n).filter(function(e){return"function"==typeof e[1]})):{};return new Proxy(v,{get:function(n,t,i){if("_$fieldPath"===t)return s;var f=Object.hasOwn(n,l)?n[l]:n;if("toJSON"===t)return function(){return a(f)};if("$value"===t)return r(f);var v=Reflect.get(f,t,i);if("symbol"==typeof t)return v;if("function"==typeof v)return v.bind(i);if(o(v)&&v!==f){var h;if(v._$fieldPath)return v;var b=c(e,v,{nestedFieldPath:s+"."+t,parentObjectToProxify:null!=(h=u.parentObjectToProxify)?h:f,afterChange:u.afterChange});return f[t]=b}return v},set:function(n,r,i,c){var f,v;if("symbol"==typeof r)return!0;var b=i,p=Object.hasOwn(n,l);if(p&&"$$value"===r){var y=n[l];return n[l]=b.newValue,e.next({storeValue:b.newValue,change:{fieldPath:"root",newValue:b.newValue,previousValue:y}},b.id),!0}if(p&&"$value"===r){var d=n[l];return b===d||JSON.stringify(a(b))===JSON.stringify(a(d))||("root"!==s?n[l]=b:(n[l]=t({},h,b),e.next({storeValue:n[l],change:{fieldPath:"root",newValue:b,previousValue:d}}))),!0}var g=p?n[l]:n,O=Reflect.get(g,r,c);if(O===b)return!0;o(b)&&null!=O&&O._$fieldPath?O.$value=b:Reflect.set(g,r,b,g);var j={storeValue:null!=(f=null==(v=u)?void 0:v.parentObjectToProxify)?f:g,change:{fieldPath:(s+"."+r).replace("root.",""),newValue:b,previousValue:O}};return e.next(j),null==u.afterChange||u.afterChange([j]),!0},has:function(e,n){return Reflect.has(e[l],n)},ownKeys:function(e){return Reflect.ownKeys(e[l])},getOwnPropertyDescriptor:function(e,n){return Reflect.getOwnPropertyDescriptor(e[l],n)}})}exports.cervello=function(n,t){var u,i,o,l=(null!=t?t:{}).afterChange,f=r(n),s=(u=!1,i=[],o=[],{next:function(e,n){i.push({newValue:e,subscriberId:n}),u||(u=!0,Promise.resolve().then(function(){o.forEach(function(e){var n=i.filter(function(n){return n.subscriberId!==e.id});n.length&&e.next(n.map(function(e){return e.newValue}))}),i=[],u=!1}))},subscribe:function(e){return o.push(e),{unsubscribe:function(){o=o.filter(function(n){return n.id!==e.id})}}}}),v=c(s,f,{afterChange:l});return{store:v,reset:function(){v.$value=r(n)},useStore:function(n){var t,r=e.useId(),u=null==n||null==n.initialValue?void 0:n.initialValue(v.$value),i=e.useRef(!1),o=e.useState(0)[1];!i.current&&u&&JSON.stringify(a(u))!==JSON.stringify(a(v.$value))&&(i.current=!0,v.$$value={id:r,newValue:u});var l=e.useRef(null!=(t="function"==typeof(null==n?void 0:n.select)?null==n||null==n.select?void 0:n.select():null==n?void 0:n.select)?t:[]),c=e.useRef(l.current.filter(function(e){return e.includes(".*")}).map(function(e){return e.replace(".*","")})),f=function(){o(function(e){return e+1})};return e.useEffect(function(){null!=n&&n.setValueOnMount&&n.setValueOnMount(v.$value).then(function(e){v.$value=e}).catch(function(e){console.error("Error setting initial value on mount",e)})},[]),e.useEffect(function(){var e=s.subscribe({id:r,next:function(e){var t=Array.isArray(e)?e:[e];if(null==n||!n.select)return f(),void(null==n||null==n.onChange||n.onChange(t));t.some(function(e){return"root"===e.change.fieldPath||l.current.includes(e.change.fieldPath)||c.current.find(function(n){return e.change.fieldPath.startsWith(n)})})&&(f(),null==n||null==n.onChange||n.onChange(t))}});return function(){e.unsubscribe()}},[null==n?void 0:n.select,null==n?void 0:n.onChange]),v}}},exports.nonReactive=function(e){return Object.defineProperty(e,n,{value:!0,enumerable:!1,writable:!1,configurable:!1}),e};
//# sourceMappingURL=cervello.cjs.map