UNPKG

@cervello/react

Version:

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

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