@cervello/react
Version:
🤯 Simple, reactive, tiny and performant state-management library
3 lines (2 loc) • 4.87 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]}"hasOwn"in Object||(Object.hasOwn=Object.call.bind(Object.hasOwnProperty));var a=Symbol("value");function l(e,n,u){var i,f;void 0===u&&(u={});var s=null!=(i=u.nestedFieldPath)?i:"root",v=((f={})[a]=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,a)?n[a]:n;if("toJSON"===t)return function(){return c(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=l(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,l){var f,v;if("symbol"==typeof r)return!0;var b=i,p=Object.hasOwn(n,a);if(p&&"$$value"===r){var y=n[a];return n[a]=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[a];return b===d||JSON.stringify(c(b))===JSON.stringify(c(d))||("root"!==s?n[a]=b:(n[a]=t({},h,b),e.next({storeValue:n[a],change:{fieldPath:"root",newValue:b,previousValue:d}}))),!0}var g=p?n[a]:n,O=Reflect.get(g,r,l);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[a],n)},ownKeys:function(e){return Reflect.ownKeys(e[a])},getOwnPropertyDescriptor:function(e,n){return Reflect.getOwnPropertyDescriptor(e[a],n)}})}function c(e){var n={};return"object"!=typeof e||null==e?e:Array.isArray(e)?e.map(function(e){return c(e)}):i(e)?{props:c(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]]=c(e[1])}),n)}exports.cervello=function(n,t){var u,i,o,a=(null!=t?t:{}).afterChange,c=r(n),f=(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!==e})}}}}),s=l(f,c,{afterChange:a});return{store:s,reset:function(){s.$value=r(n)},useStore:function(n){var t,r=e.useId(),u=null==n||null==n.initialValue?void 0:n.initialValue(s.$value),i=e.useRef(!1),o=e.useState(0)[1];!i.current&&u&&u!==s&&(i.current=!0,s.$$value={id:r,newValue:u});var a=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:[]),l=e.useRef(a.current.filter(function(e){return e.includes(".*")}).map(function(e){return e.replace(".*","")})),c=function(){o(function(e){return e+1})};return e.useEffect(function(){null!=n&&n.setValueOnMount&&n.setValueOnMount(s.$value).then(function(e){s.$value=e}).catch(function(e){console.error("Error setting initial value on mount",e)})},[]),e.useEffect(function(){var e=f.subscribe({id:r,next:function(e){var t=Array.isArray(e)?e:[e];if(null==n||!n.select)return c(),void(null==n||null==n.onChange||n.onChange(t));t.some(function(e){return"root"===e.change.fieldPath||a.current.includes(e.change.fieldPath)||l.current.find(function(n){return e.change.fieldPath.startsWith(n)})})&&(c(),null==n||null==n.onChange||n.onChange(t))}});return function(){e.unsubscribe()}},[null==n?void 0:n.select,null==n?void 0:n.onChange]),s}}},exports.nonReactive=function(e){return Object.defineProperty(e,n,{value:!0,enumerable:!1,writable:!1,configurable:!1}),e};
//# sourceMappingURL=cervello.cjs.map