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