UNPKG

lobx-react

Version:

Lightweight React bindings for lobx based on React 16.8+ and Hooks

3 lines (2 loc) 9.92 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("react"),t=(e=r)&&"object"==typeof e&&"default"in e?e.default:e,n=require("lobx"),o=require("react-dom");if(!r.useState)throw new Error("lobx-react requires React with Hooks support");var i=!1;function a(){return i}function c(){return(c=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}function u(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}var s="undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry;function l(e){return{reaction:e,mounted:!1,changedBeforeMount:!1,cleanAt:Date.now()+f}}var f=1e4;function p(e){var r=new Map,t=1,n=new e((function(e){var t=r.get(e);t&&(t.reaction.dispose(),r.delete(e))}));return{addReactionToTrack:function(e,o,i){var a=t++;return n.register(i,a,e),e.current=l(o),e.current.finalizationRegistryCleanupToken=a,r.set(a,e.current),e.current},recordReactionAsCommitted:function(e){n.unregister(e),e.current&&e.current.finalizationRegistryCleanupToken&&r.delete(e.current.finalizationRegistryCleanupToken)},forceCleanupTimerToRunNowForTests:function(){},resetCleanupScheduleForTests:function(){}}}function d(){var e,r=new Set;function t(){void 0===e&&(e=setTimeout(n,1e4))}function n(){e=void 0;var n=Date.now();r.forEach((function(e){var t=e.current;t&&n>=t.cleanAt&&(t.reaction.dispose(),e.current=null,r.delete(e))})),r.size>0&&t()}return{addReactionToTrack:function(e,n,o){return e.current=l(n),r.add(e),t(),e.current},recordReactionAsCommitted:function(e){r.delete(e)},forceCleanupTimerToRunNowForTests:function(){e&&(clearTimeout(e),n())},resetCleanupScheduleForTests:function(){if(r.size>0){for(var t,n=function(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,r){if(e){if("string"==typeof e)return u(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?u(e,void 0):void 0}}(e))){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r);!(t=n()).done;){var o=t.value,i=o.current;i&&(i.reaction.dispose(),o.current=null)}r.clear()}e&&(clearTimeout(e),e=void 0)}}}var h=s?p(s):d(),v=h.addReactionToTrack,y=h.recordReactionAsCommitted,m=h.resetCleanupScheduleForTests,b={},g=new WeakMap,w=function(){};function O(){return new w}function j(e,r){if(void 0===r&&(r=b),a())return e();var i=function(e){var r=g.get(e);return r||(r=n.createScheduler((function(e){return o.unstable_batchedUpdates(e)}),{graph:e}),g.set(e,r)),r}(r.graph||n.getDefaultGraph()),c=t.useState(O)[0],u=t.useState()[1],s=function(){return u([])},l=t.useRef(null);if(!l.current)var f=i.listener((function(){p.mounted?s():p.changedBeforeMount=!0})),p=v(l,f,c);var d,h,m=l.current.reaction;if(t.useEffect((function(){return y(l),l.current?(l.current.mounted=!0,l.current.changedBeforeMount&&(l.current.changedBeforeMount=!1,s())):(l.current={reaction:i.listener((function(){s()})),mounted:!0,changedBeforeMount:!1,cleanAt:Infinity},s()),function(){l.current.reaction.dispose(),l.current=null}}),[]),m.track((function(){try{d=e()}catch(e){h=e}})),h)throw h;return d}var R={$$typeof:!0,render:!0,compare:!0,type:!0};function T(e){var r=e.children||e.render;return"function"!=typeof r?null:j(r)}T.displayName="Observer";var x=0,k={};function C(e){return k[e]||(k[e]=function(e){if("function"==typeof Symbol)return Symbol(e);var r="__$lobx-react "+e+" ("+x+")";return x++,r}(e)),k[e]}function P(e,r){if(S(e,r))return!0;if("object"!=typeof e||null===e||"object"!=typeof r||null===r)return!1;var t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(var o=0;o<t.length;o++)if(!Object.hasOwnProperty.call(r,t[o])||!S(e[t[o]],r[t[o]]))return!1;return!0}function S(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}function A(e,r,t){Object.hasOwnProperty.call(e,r)?e[r]=t:Object.defineProperty(e,r,{enumerable:!1,configurable:!0,writable:!0,value:t})}var _=C("patchMixins"),U=C("patchedDefinition");function E(e,r){for(var t=this,n=arguments.length,o=new Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];r.locks++;try{var a;return null!=e&&(a=e.apply(this,o)),a}finally{r.locks--,0===r.locks&&r.methods.forEach((function(e){e.apply(t,o)}))}}function $(e,r){return function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];E.call.apply(E,[this,e,r].concat(n))}}var M=C("islobxReactObserver"),F=C("isUnmounted"),D=C("skipRender"),N=C("isForcingUpdate");function z(e){var t=e.prototype;if(e[M]){var n=I(t);console.warn("The provided component class ("+n+") \n has already been declared as an observer component.")}else e[M]=!0;if(t.componentWillReact)throw new Error("The componentWillReact life-cycle event is no longer supported");if(e.__proto__!==r.PureComponent)if(t.shouldComponentUpdate){if(t.shouldComponentUpdate!==q)throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.")}else t.shouldComponentUpdate=q;B(t,"props"),B(t,"state");var o=t.render;if("function"!=typeof o){var i=I(t);throw new Error("[lobx-react] class component ("+i+") is missing `render` method.\n`observer` requires `render` being a function defined on prototype.\n`render = () => {}` or `render = function() {}` is not supported.")}return t.render=function(){return W.call(this,o)},function(e,r,t){var n=function(e,r){var t=e[_]=e[_]||{},n=t.componentWillUnmount=t.componentWillUnmount||{};return n.locks=n.locks||0,n.methods=n.methods||[],n}(e);n.methods.indexOf(t)<0&&n.methods.push(t);var o=Object.getOwnPropertyDescriptor(e,r);if(!o||!o[U]){var i=function e(r,t,n,o,i){var a,c=$(i,o);return(a={})[U]=!0,a.get=function(){return c},a.set=function(i){if(this===r)c=$(i,o);else{var a=e(this,t,n,o,i);Object.defineProperty(this,t,a)}},a.configurable=!0,a.enumerable=n,a}(e,r,o?o.enumerable:void 0,n,e[r]);Object.defineProperty(e,r,i)}}(t,"componentWillUnmount",(function(){var e;if(!0!==a()&&(null==(e=this.render.$lobx)||e.dispose(),this[F]=!0,!this.render.$lobx)){var r=I(this);console.warn("The reactive render of an observer class component ("+r+") \n was overriden after lobx attached. This may result in a memory leak if the \n overriden reactive render was not properly disposed.")}})),e}function I(e){return e.displayName||e.name||e.constructor&&(e.constructor.displayName||e.constructor.name)||"<component>"}function W(e){var t=this;if(!0===a())return e.call(this);A(this,D,!1),A(this,N,!1);var o=e.bind(this),i=!1,c=n.listener((function(){if(!i&&(i=!0,!0!==t[F])){var e=!0;try{A(t,N,!0),t[D]||r.Component.prototype.forceUpdate.call(t),e=!1}finally{A(t,N,!1),e&&c.dispose()}}}));function u(){i=!1;var e=void 0,r=void 0;if(c.track((function(){try{r=o()}catch(r){e=r}})),e)throw e;return r}return c.reactComponent=this,u.$lobx=c,this.render=u,u.call(this)}function q(e,r){return a()&&console.warn("[lobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==r||!P(this.props,e)}function B(e,r){var t=C("reactProp_"+r+"_valueHolder"),o=C("reactProp_"+r+"_atomHolder");function i(){return this[o]||A(this,o,n.atom()),this[o]}Object.defineProperty(e,r,{configurable:!0,enumerable:!0,get:function(){return i.call(this).reportObserved(),this[t]},set:function(e){this[N]||P(this[t],e)?A(this,t,e):(A(this,t,e),A(this,D,!0),i.call(this).reportChanged(),A(this,D,!1))}})}var H=Symbol.for("react.forward_ref"),Y=Symbol.for("react.memo");function G(e,r){var t=Object.getOwnPropertyDescriptor(r,e);if(t&&"function"==typeof t.value)return n.action.opts({bound:!0,untracked:!0})}exports.Observer=T,exports.clearTimers=m,exports.enableStaticRendering=function(e){i=e},exports.isUsingStaticRendering=a,exports.observer=function(e,t){var n=e;if(!0===n.islobxInjector&&console.warn("lobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),Y&&n.$$typeof===Y)throw new Error("lobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");if(H&&n.$$typeof===H){var o=n.render;if("function"!=typeof o)throw new Error("render property of ForwardRef was not a function");return r.forwardRef((function(){var e=arguments;return r.createElement(T,null,(function(){return o.apply(void 0,e)}))}))}return"function"!=typeof e||e.prototype&&e.prototype.render||n.isReactClass||Object.prototype.isPrototypeOf.call(r.Component,e)?z(e):function(e,t){if(a())return e;var n,o,i,u=c({forwardRef:!1},t),s=e.displayName||e.name,l=function(r,n){return j((function(){return e(r,n)}),t&&{graph:t.graph})};return l.displayName=s,n=r.memo(u.forwardRef?r.forwardRef(l):l),o=e,i=n,Object.keys(o).forEach((function(e){R[e]||Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(o,e))})),n.displayName=s,n}(e,t)},exports.useObservable=function(e,t){return r.useState((function(){var r="function"==typeof e?e():e;return function(e){if(null===e||"object"!=typeof e)return!1;var r=Object.getPrototypeOf(e);return r===Object.prototype||null===r}(r)?n.observable.configure(t?function(e,r){var n;return t&&Object.prototype.hasOwnProperty.call(t,e)&&(n=t[e]),n||G(e,r)}:G,"function"==typeof e?e():e,{withDefaults:!0}):n.observable(r)}))[0]}; //# sourceMappingURL=lobxreact.cjs.production.min.js.map