UNPKG

@cervello/react

Version:

🤯 Simple, reactive, tiny and performant state-management library

3 lines (2 loc) • 5.16 kB
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)}var r=function(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)};"hasOwn"in Object||(Object.hasOwn=Object.call.bind(Object.hasOwnProperty));var u=Symbol("value");function o(l,c,f){var s,v;void 0===f&&(f={});var p=null!=(s=f.nestedFieldPath)?s:"root",h=((v={})[u]=c,v),b="root"===p?Object.fromEntries(Object.entries(c).filter(function(e){return"function"==typeof e[1]})):{};return new Proxy(h,{get:function(t,a,c){if("_$fieldPath"===a)return p;var s=Object.hasOwn(t,u)?t[u]:t;if("toJSON"===a)return function(){return i(s)};if("$value"===a)return s;var v,h=Reflect.get(s,a,c);if("symbol"==typeof a)return h;if("function"==typeof h)return h.bind(c);if(r(v=h)&&!e.isValidElement(v)&&!v[n]&&h!==s){var b,y=p+"."+a;if(h._$fieldPath===y)return h;var O=o(l,h,{nestedFieldPath:y,parentObjectToProxify:null!=(b=f.parentObjectToProxify)?b:s,afterChange:f.afterChange});return s[a]=O}return h},set:function(o,i,c,s){var v,h;if("symbol"==typeof i)return!0;var y=c,O=Object.hasOwn(o,u);if(O&&"$$value"===i)return o[u]=y,!0;if(O&&"$value"===i){var g=o[u];return y===g||a(y)===a(g)||("root"!==p?o[u]=y:(o[u]=t({},b,y),l.next({storeValue:o[u],change:{fieldPath:"root",newValue:y,previousValue:g}}))),!0}var d=O?o[u]:o,j=Reflect.get(d,i,s);if(j===y)return!0;r(y)&&!e.isValidElement(y)&&!y[n]&&null!=j&&j._$fieldPath?j.$value=y:Reflect.set(d,i,y,d);var w={storeValue:null!=(v=null==(h=f)?void 0:h.parentObjectToProxify)?v:d,change:{fieldPath:(p+"."+i).replace("root.",""),newValue:y,previousValue:j}};return l.next(w),null==f.afterChange||f.afterChange([w]),!0},has:function(e,n){return Reflect.has(e[u],n)},ownKeys:function(e){return Reflect.ownKeys(e[u])},getOwnPropertyDescriptor:function(e,n){return Reflect.getOwnPropertyDescriptor(e[u],n)}})}function a(n){var t=i(n);return JSON.stringify(t,function(n,t){return e.isValidElement(t)?{props:a(t.props),type:t.type}:t})}function i(e){var n=new WeakSet;return function e(t){if(t&&"object"==typeof t){if(n.has(t))return null;if(n.add(t),Array.isArray(t))return t.map(e);var r={};for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(r[u]=e(t[u]));return r}return t}(e)}exports.cervello=function(n,t){var r=(null!=t?t:{}).afterChange,u=n,a=function(e,n){void 0===n&&(n=!1);var t=!1,r=[],u=[],o=e;return{getValue:function(){return o},next:function(e){o=e,r.push(e),t||(t=!0,Promise.resolve().then(function(){u.forEach(function(e){e.next(r)}),r=[],t=!1}))},subscribe:function(e){return n&&e.next(o),u.push(e),{unsubscribe:function(){u=u.filter(function(n){return n!==e})}}},unSubscribeAll:function(){u=[]}}}(u),i=o(a,u,{afterChange:r});return{store:i,reset:function(){i.$value=function(e){var n=[],t=[],r=new Map;r.set(Date,function(e){return new Date(e)}),r.set(Map,function(e,n){return new Map(o(Array.from(e),n))}),r.set(Set,function(e,n){return new Set(o(Array.from(e),n))});var u=null;return function e(a){if("object"!=typeof a||null===a)return a;if(Array.isArray(a))return o(a,e);if(a.constructor!==Object&&(u=r.get(a.constructor)))return u(a,e);var i={};for(var l in n.push(a),t.push(i),Object.getOwnPropertySymbols(a).forEach(function(e){i[e]=a[e]}),a)if(Object.hasOwnProperty.call(a,l)){var c=a[l];if("object"!=typeof c||null===c)i[l]=c;else if(c.constructor!==Object&&(u=r.get(c.constructor)))i[l]=u(c,e);else{var f=n.indexOf(c);i[l]=-1!==f?t[f]:e(c)}}return n.pop(),t.pop(),i}(e);function o(e,o){for(var a=Object.keys(e),i=new Array(a.length),l=0;l<a.length;l++){var c=a[l],f=e[c];if("object"!=typeof f||null===f)i[c]=f;else if(f.constructor!==Object&&(u=r.get(f.constructor)))i[c]=u(f,o);else{var s=n.indexOf(f);i[c]=-1!==s?t[s]:o(f)}}return i}}(n)},useStore:function(n){var t,r=null==n||null==n.initialValue?void 0:n.initialValue(i.$value),u=e.useRef(!1);!u.current&&r&&r!==i&&(u.current=!0,i.$value=r);var o=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(o.current.filter(function(e){return e.includes(".*")}).map(function(e){return e.replace(".*","")}));return e.useLayoutEffect(function(){null!=n&&n.setValueOnMount&&n.setValueOnMount(i.$value).then(function(e){i.$value=e}).catch(function(e){console.error("Error setting initial value on mount",e)})},[]),e.useSyncExternalStore(function(e){var t=a.subscribe({next:function(t){var r=Array.isArray(t)?t:[t];if(null==n||!n.select)return e(),void(null==n||null==n.onChange||n.onChange(r));r.some(function(e){return"root"===e.change.fieldPath||o.current.includes(e.change.fieldPath)||l.current.find(function(n){return e.change.fieldPath.startsWith(n)})})&&(e(),null==n||null==n.onChange||n.onChange(r))}});return function(){t.unsubscribe()}},function(){return a.getValue()},function(){return a.getValue()}),i}}},exports.nonReactive=function(e){return Object.defineProperty(e,n,{value:!0,enumerable:!1,writable:!1,configurable:!1}),e}; //# sourceMappingURL=cervello.cjs.map