resy
Version:
React State Easy
2 lines (1 loc) • 17.9 kB
JavaScript
import{unstable_batchedUpdates as e}from"./platform.esm";import t from"use-sync-external-store/shim";import{useRef as n,useDebugValue as r,useEffect as o,useMemo as a,Component as c,PureComponent as u}from"react";function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n){return t=p(t),function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,d()?Reflect.construct(t,n||[],p(e).constructor):t.apply(e,n))}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(e,t,n){return t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,S(r.key),r)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function b(e,t,n){return(t=S(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},p(e)}function y(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&g(e,t)}function d(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(d=function(){return!!e})()}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function g(e,t){return g=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},g(e,t)}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,c,u=[],i=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t);else for(;!(i=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);i=!0);}catch(e){s=!0,o=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw o}}return u}}(e,t)||j(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function j(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}var w=Symbol("regenerativeSystemKey"),_=Symbol("useStoreKey"),O=Symbol("storeNamespace"),E=process.env.NODE_ENV;E||console.error("NODE_ENV not set");var A="development"===E,k=e||function(e){return e()},M=Object.prototype.hasOwnProperty,U=Object.prototype.toString,P=function(e){var t,n=U.call(e);switch(n){case"[object Array]":return"Array";case"[object Object]":return"Object";case"[object String]":return"String";case"[object Number]":return"Number";case"[object Boolean]":return"Boolean";case"[object Set]":return"Set";case"[object Map]":return"Map";case"[object Function]":return"Function";case"[object Date]":return"Date";case"[object Symbol]":return"Symbol";case"[object WeakSet]":return"WeakSet";case"[object WeakMap]":return"WeakMap";case"[object RegExp]":return"RegExp";case"[object WeakRef]":return"WeakRef";case"[object BigInt]":return"BigInt";case"[object Null]":return"Null";case"[object Undefined]":return"Undefined";case"[object Promise]":return"Promise";case"[object AsyncFunction]":return"AsyncFunction";case"[object Array Iterator]":return"ArrayIterator";case"[object Set Iterator]":return"SetIterator";case"[object Map Iterator]":return"MapIterator";case"[object FormData]":return"FormData";case"[object Blob]":return"Blob";case"[object File]":return"File";case"[object Error]":return"Error";case"[object CustomEvent]":return"CustomEvent";case"[object Storage]":return"Storage";case"[object WebSocket]":return"WebSocket";case"[object ArrayBuffer]":return"ArrayBuffer";case"[object DataView]":return"DataView";case"[object Uint8Array]":return"Uint8Array";case"[object Int8Array]":return"Int8Array";case"[object Uint8ClampedArray]":return"Uint8ClampedArray";case"[object Int16Array]":return"Int16Array";case"[object Uint16Array]":return"Uint16Array";case"[object Int32Array]":return"Int32Array";case"[object Uint32Array]":return"Uint32Array";case"[object Float32Array]":return"Float32Array";case"[object Float64Array]":return"Float64Array";case"[object BigInt64Array]":return"BigInt64Array";case"[object BigUint64Array]":return"BigUint64Array";case"[object XMLHttpRequest]":return"XMLHttpRequest";case"[object Headers]":return"Headers";case"[object Request]":return"Request";case"[object Response]":return"Response";case"[object Window]":return"Window";case"[object Global]":case"[object global]":return"Global";case"[object Arguments]":return"Arguments";default:return null==n||null===(t=n.match(/\[object\s+(.*?)]/))||void 0===t?void 0:t[1]}},x=function(e,t){if(A&&(null==e||!e[w]))throw new Error("resy's ".concat(t,"(...): Expected the 'store' argument should be generated by resy's createStore(...). ")+"Instead received: ".concat(P(e).toLocaleLowerCase(),"."))},I=function(e){var t=e.state,n=e.fnName,r=e.options,o=P(t);if(A&&"Object"!==o){var a=null!=n?n:null==r?void 0:r.__functionName__;throw new Error("resy's ".concat(a,"(...): takes an object of state variables to update or")+" a function which returns an object of state variables."+" Instead received: ".concat(o.toLocaleLowerCase()))}A&&null!=t&&t[w]&&console.error("Warning: resy's setState、syncUpdate(...): takes a store of generated by resy's createStore that's has no update significance!")},C=function(e,t){var n=P(e),r=P(t);if(A&&"Function"!==n)throw new Error("resy's subscribe(...): Expected the first optional 'listener' argument to be a function. "+"Instead received: ".concat(n.toLocaleLowerCase(),"."));if(A&&"Undefined"!==r&&"Array"!==r)throw new Error("resy's subscribe(...): Expected the last optional 'stateKeys' argument to be a array. "+"Instead received: ".concat(r.toLocaleLowerCase(),"."))},R=function(e){var t,n={},r=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=j(e))||t){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,c=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){u=!0,a=e},f:function(){try{c||null==n.return||n.return()}finally{if(u)throw a}}}}(e);try{for(r.s();!(t=r.n()).done;){var o=h(t.value,2),a=o[0],c=o[1];n[a]=c}}catch(e){r.e(e)}finally{r.f()}return n},B=function(e){return Object.keys(e).reduce((function(t,n){return t.set(n,e[n]),t}),new Map)},D=function(e,t){var n=!1,r=t&&(null==t?void 0:t.length)>0;return(r&&Object.keys(e).some((function(e){return t.includes(e)}))||!r)&&(n=!0),n},N=function(){var e=new Map,t=new Map,n=new Set,r=new Map;return r.set("isUpdating",null),r.set("willUpdating",null),r.set("deferEffectDestructorExecFlag",null),r.set("pushTask",(function(n,r,o){e.set(n,r),t.set(n,o)})),r.set("pushCallbackStack",(function(e,t,r){if(void 0!==r){!function(e){var t=P(e);if(A&&"Undefined"!==t&&"Function"!==t)throw new Error("resy's stateCallback(...): Expected the last optional 'callback' argument to be a function. "+"Instead received: ".concat(t.toLocaleLowerCase(),"."))}(r);var o=Object.assign({},R(e),t);n.add({nextState:o,callback:r})}})),r.set("flushTask",(function(){e.clear(),t.clear()})),r.set("getSchedulerQueue",(function(){return{taskDataMap:e,taskQueueMap:t,callbackStackSet:n}})),r},F=Symbol("classConnectStoreKey"),L=Symbol("classThisPointerStoresKey"),W=Symbol("classStateRefSetKey"),K=Symbol("classUnmountProcessingKey"),T=Symbol("classInitialStateRetrieveKey"),z=function(e,t){return Array.from(new Set(Object.keys(e).concat(Array.from(t.keys()))))},q=function(e,t){var n;"function"==typeof t&&(n=e,Object.keys(n).forEach((function(e){delete n[e]})),Object.entries(t()).forEach((function(t){var n=h(t,2),r=n[0],o=n[1];e[r]=o})))},H=function(e,t,n){q(e,n),z(e,t).forEach((function(n){M.call(e,n)?t.set(n,e[n]):t.delete(n)}))},Q=function(e,t,n,r){n.get("canExec")&&(n.set("canExec",null),H(e,t,r))};function V(e,t,n,r,o,a,c,u,i){o.get("deferEffectDestructorExecFlag")||o.set("deferEffectDestructorExecFlag",Promise.resolve().then((function(){o.set("deferEffectDestructorExecFlag",null),r.get("counter")||c.size||function(e,t,n,r,o,a,c){var u=!a.size&&!r.get("counter");e.unmountRestore&&u&&"function"!=typeof c&&H(t,n,c),"function"==typeof c&&u&&o.set("canExec",!0)}(e,t,n,r,a,c,u),null==i||i()})))}var G=t.useSyncExternalStore,X=function(e,t,n,r,o,a,c,u,i,s){if(a.has(e))return a;var l=new Map,f=new Set;return l.set("subscribe",(function(l){return f.add(l),o.set("counter",o.get("counter")+1),function(){f.delete(l),o.set("counter",o.get("counter")-1),V(t,n,r,o,c,u,i,s,(function(){f.size||a.delete(e)}))}})),l.set("getSnapshot",(function(){return r.get(e)})),l.set("useSyncExternalStore",(function(){return G(a.get(e).get("subscribe"),a.get(e).get("getSnapshot"),a.get(e).get("getSnapshot"))})),l.set("updater",(function(){f.forEach((function(e){e()}))})),a.set(e,l),a},$=function(e,t,n,r,o,a,c,u,i,s){return Q(n,r,u,s),X(e,t,n,r,o,a,c,u,i,s).get(e).get("useSyncExternalStore")()};function J(e,t){return this[W].add(e),t.get(e)}var Y=function(e,t,n){null==n||n.forEach((function(r){var o;r.updater.isMounted(r)?(null===(o=r[W])||void 0===o?void 0:o.has(e))&&r.setState(b({},e,t)):n.delete(r)}))},Z=function(e,t,n,r,o,a,c,u,i,s,l,f){f?n.delete(e):n.set(e,t),r.get("pushTask")(e,t,(function(){Y(e,t,s),X(e,o,a,n,c,u,r,i,s,l).get(e).get("updater")()}))},ee=function(e,t,n,r){var o=e.get("getSchedulerQueue")(),a=o.taskDataMap,c=o.taskQueueMap,u=o.callbackStackSet;(a.size>0||u.size>0)&&!e.get("isUpdating")&&e.set("isUpdating",Promise.resolve().then((function(){e.set("isUpdating",null),e.set("willUpdating",null),k((function(){a.size>0&&c.forEach((function(e){e()}));var o,i,s=r.size>0?(o=a,i=new Map,o.forEach((function(e,t){i.set(t,e)})),i):void 0;if(e.get("flushTask")(),u.size>0&&(u.forEach((function(e){(0,e.callback)(e.nextState)})),u.clear()),r.size>0){var l=new Proxy({},{get:function(e,r){return"effectState"===r?R(s):"nextState"===r?R(n):"prevState"===r?R(t):void 0}});r.forEach((function(e){e(l)}))}}))})))},te=function(e,t,a){x(e,"useSubscription"),C(t,a);var c=n(null);if(c.current={listener:t,stateKeys:a},A){var u=e[O]?{namespace:e[O]}:null;r(m({listener:t,stateKeys:a},u))}o((function(){return e.subscribe((function(e){D(e.effectState,c.current.stateKeys)&&Promise.resolve(e).then((function(e){c.current.listener(e)}))}))}),[])},ne=function(e,t,n,r){e.size>0&&!t.get("willUpdating")&&(t.set("willUpdating",!0),n.clear(),r.forEach((function(e,t){n.set(t,e)})))},re=function(e,t){var n,o,a,c,u,i,s=void 0===e?{}:"function"==typeof e?e():e;!function(e){var t=P(e),n="Undefined"!==t,r=P(null==e?void 0:e.unmountRestore),o=P(null==e?void 0:e.__useConciseState__),a=P(null==e?void 0:e.namespace),c=P(null==e?void 0:e.__enableMacros__),u=P(null==e?void 0:e.enableMarcoActionStateful);if(A&&(n&&"Object"!==t||n&&"Object"===t&&("Boolean"!==r&&"Undefined"!==r||"Boolean"!==o&&"Undefined"!==o||"String"!==a&&"Undefined"!==a||"Boolean"!==c&&"Undefined"!==c||"Boolean"!==u&&"Undefined"!==u)))throw new Error("resy's createStore(...): Expected the last optional 'options' argument to be a StoreOptions type params."+" Instead received: ".concat(t.toLocaleLowerCase(),"."))}(t);var l={__useConciseState__:null!==(n=null==t?void 0:t.__useConciseState__)&&void 0!==n?n:void 0,unmountRestore:null===(o=null==t?void 0:t.unmountRestore)||void 0===o||o,namespace:null!==(a=null==t?void 0:t.namespace)&&void 0!==a?a:void 0,__enableMacros__:null!==(c=null==t?void 0:t.__enableMacros__)&&void 0!==c?c:void 0,enableMarcoActionStateful:null!==(u=null==t?void 0:t.enableMarcoActionStateful)&&void 0!==u?u:void 0,__functionName__:null!==(i=null==t?void 0:t.__functionName__)&&void 0!==i?i:re.name};I({state:s,options:l});var f=N(),b=(new Map).set("counter",0),p=new Map,y=B(s),d=B(s),v=new Set,g=new Map,h=new Set,S=new Map;S.set(O,l.namespace);var j=function(t,n){ne(v,f,d,y);var r=t;"function"==typeof t&&(r=t(R(y))),null!==r&&(I({state:r,fnName:"setState、syncUpdate"}),Object.keys(r).forEach((function(t){var n=r[t];Object.is(n,y.get(t))||Z(t,n,y,f,l,s,b,g,p,h,e)}))),f.get("pushCallbackStack")(y,r,n),ee(f,d,y,v)};S.set("setState",j),S.set("syncUpdate",(function(t,n){var r=t;"function"==typeof t&&(r=t(R(y))),j(r,n),null!==r&&k((function(){Object.keys(r).forEach((function(t){var n=r[t];Y(t,n,h),X(t,l,s,y,b,g,f,p,h,e).get(t).get("updater")()}))}))})),S.set("restore",(function(t){ne(v,f,d,y),q(s,e);var n={};z(s,y).forEach((function(t){var r=s[t];Object.is(r,y.get(t))||(n[t]=r,Z(t,r,y,f,l,s,b,g,p,h,e,!M.call(s,t)))})),f.get("pushCallbackStack")(y,n,t),ee(f,d,y,v)})),S.set("subscribe",(function(e,t){C(e,t);var n=function(n){D(n.effectState,t)&&e(n)};return v.add(n),function(){return v.delete(n)}}));var E=function(t,n,r){return Object.is(n,y.get(t))||(ne(v,f,d,y),Z(t,n,y,f,l,s,b,g,p,h,e,r),ee(f,d,y,v)),!0},U={set:function(e,t,n){return E(t,n)},deleteProperty:function(e,t){return E(t,void 0,!0)}},x=function(e,t){var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.apply(L,n)};return n.__bound__=!0,y.set(e,n),n},L=new Proxy(y,m({get:function(e,t,n){!function(e,t){A&&e!==t&&console.error("Warning: It's not recommended to set the store created by createStore as the prototype of some objects as the store internally hijacks the binding of this context for function properties!")}(n,L);var r=y.get(t);return"function"!=typeof r||r.__bound__?S.get(t)||r:x(t,r)}},U)),W=new Proxy(y,m({get:function(t,n){var o=y.get(n),a=!S.has(n);if(a&&"function"!=typeof o)return A&&r(m({key:n,value:o},l.namespace?{namespace:l.namespace}:null)),$(n,l,s,y,b,g,f,p,h,e);if(a&&"function"==typeof o){o.__bound__||x(n,o);var c=!l.__enableMacros__||l.enableMarcoActionStateful,u=y.get(n);return c&&A&&r(m({key:n,value:u},l.namespace?{namespace:l.namespace}:null)),c&&$(n,l,s,y,b,g,f,p,h,e),u}return S.get(n)}},U));(l.__useConciseState__||l.__enableMacros__)&&S.set("store",L),S.set(_,W),S.set(w,w);S.set("setOptions",(function(e){!function(e){var t=P(e),n=P(null==e?void 0:e.unmountRestore);if(A&&("Object"!==t||"Object"===t&&"Boolean"!==n))throw new Error("resy's setOptions(...): Expected the 'options' argument to be an object with a unmountRestore attribute."+" Instead received: ".concat(t.toLocaleLowerCase(),"."))}(e),l.unmountRestore=e.unmountRestore})),S.set("getOptions",(function(){return Object.assign({},l)}));S.set("useStore",(function(){return W})),S.set("useSubscription",(function(e,t){if(A){var n=l.namespace?{namespace:l.namespace}:null;r(m({listener:e,stateKeys:t},n))}te(L,e,t)}));return S.set(F,(function(){var e=this;h.add(this);var t=new Proxy(y,m({get:function(n,r){if("useStore"===r)return function(){return t};var o=y.get(r);return S.get(r)||("function"!=typeof o?J.apply(e,[r,y]):function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return J.apply(e,[r,y]).apply(t,o)})}},U));return t})),S.set(K,(function(){h.delete(this),V(l,s,y,b,f,p,h,e)})),S.set(T,(function(){Q(s,y,p,e)})),L},oe=function(e){return x(e,"useStore"),e[_]},ae=function(e){return a((function(){return re(e,{__useConciseState__:!0,__functionName__:ae.name})}),[])[_]},ce=function(e,t){return re(e,m(m({},t),{},{__enableMacros__:!0,__functionName__:ce.name})).useStore};function ue(){var e=this,t=this.componentWillUnmount;this.componentWillUnmount=function(){null==t||t.apply(e),Promise.resolve().then((function(){e.updater.isMounted(e)||(e[W].clear(),e[L].forEach((function(t){t[K].apply(e)})))}))}}function ie(e){return x(e,"connectStore"),e[T](),this[L].add(e),this[F]=e[F],this[F]()}var se=function(){function e(t){var n;return l(this,e),b(n=s(this,e,[t]),W,new Set),b(n,F,void 0),b(n,L,new Set),ue.apply(n),n}return y(e,c),f(e,[{key:"connectStore",value:function(e){return ie.apply(this,[e])}}])}();b(se,"displayName",void 0);var le=function(){function e(t){var n;return l(this,e),b(n=s(this,e,[t]),W,new Set),b(n,F,void 0),b(n,L,new Set),ue.apply(n),n}return y(e,u),f(e,[{key:"connectStore",value:function(e){return ie.apply(this,[e])}}])}();b(le,"displayName",void 0);export{se as ComponentWithStore,le as PureComponentWithStore,re as createStore,ce as defineStore,ae as useConciseState,oe as useStore,te as useSubscription};