@mic-rexjs/usecases-react 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see index.min.js.LICENSE.txt */
2
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("react"),require("ahooks"),require("@mic-rexjs/usecases"));else if("function"==typeof define&&define.amd)define(["react","ahooks","@mic-rexjs/usecases"],t);else{var n="object"==typeof exports?t(require("react"),require("ahooks"),require("@mic-rexjs/usecases")):t(e.react,e.ahooks,e["@mic-rexjs/usecases"]);for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,((e,t,n)=>(()=>{"use strict";var r={251:(e,t,n)=>{var r=n(156),o=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),u=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,n){var r,l={},c=null,f=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(f=t.ref),t)a.call(t,r)&&!i.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===l[r]&&(l[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:f,props:l,_owner:u.current}}},893:(e,t,n)=>{e.exports=n(251)},112:e=>{e.exports=n},749:e=>{e.exports=t},156:t=>{t.exports=e}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var u={};return(()=>{a.r(u),a.d(u,{UseCaseFragment:()=>A,useGlobalUseCase:()=>G,useStatelessUseCase:()=>N,useUseCase:()=>_});var e=a(893),t=a(156),n=a.n(t);function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function o(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.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)?r(e,t):void 0}}function i(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,u,i=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return i}}(e,t)||o(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.")}()}var l,c=a(749),f=function(e){return i((0,t.useState)(e),1)[0]},s=function(e){return i((0,t.useState)((function(){return e})),1)[0]};function b(e){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},b(e)}function y(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==b(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==b(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===b(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}!function(e){e[e.None=0]="None",e[e.RootEnabled=2]="RootEnabled",e[e.ContextEnabled=4]="ContextEnabled",e[e.EntityEnabled=8]="EntityEnabled",e[e.ContextRootEnabled=22]="ContextRootEnabled",e[e.EntityRootEnabled=62]="EntityRootEnabled",e[e.StatelessEnabled=72]="StatelessEnabled",e[e.GlobalEnabled=150]="GlobalEnabled"}(l||(l={}));var d=a(112),v=["watch","onChange","options"];function E(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 p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?E(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var m,h,S=new Map;!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity",e[e.Mode=4]="Mode"}(m||(m={})),function(e){e[e.Normal=2]="Normal",e[e.Stateless=4]="Stateless",e[e.Global=8]="Global",e[e.StatelessGlobal=12]="StatelessGlobal"}(h||(h={}));var g=(0,t.createContext)(null),O=function(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0},j=function(e,t){var n,r=t||{},o=r.onShouldCache,a=void 0===o?function(){return!0}:o,u=r.onCompare,i=void 0===u?function(e,t){return O(e,t)}:u;return function(){for(var t=a(),r=arguments.length,o=new Array(r),u=0;u<r;u++)o[u]=arguments[u];if(n&&t){var l=n,c=l.parameters,f=l.returnValue;if(i(c,o))return f}var s=e.apply(void 0,o);return t&&(n={parameters:o,returnValue:s}),s}},w=function(e,n,r){var o,a,u,i=(o=r,a=function(e){var n=(0,t.useRef)(0),r=(0,t.useRef)([]),o=r.current,a=O(e,o);return r.current=e,n.current+=a?0:1,n.current}(arguments.length>3&&void 0!==arguments[3]?arguments[3]:[]),u=(0,c.useLatest)(o),(0,c.useCreation)((function(){return j(u.current,{onCompare:function(){return!0}})}),[a,u]));return(0,c.useCreation)((function(){return(e&l.RootEnabled)!==l.RootEnabled&&n?n:i()}),[e,n,i])};function x(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var C=function(e,t){return"object"===b(e)&&null!==e&&Object.hasOwn(e,t)},R=function e(t,n,r,o){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],u=void 0,l=i(r.match(/^([^.]+)\.(.+)$/)||[],3),c=l[1],f=void 0===c?r:c,s=l[2],b=void 0===s?"":s,y=C(t,f),d=C(n,f),v=[].concat(x(a),[f]);if(y||d){var E=y?t[f]:u,p=d?n[f]:u;if(b)return void e(E,p,b,o,v);if(E===p)return;o(E,p,v)}else if(!/^\d+^/.test(f))for(var m=Array.isArray(t)?t:[],h=Array.isArray(n)?n:[],S=m.length,g=h.length,O=Math.max(S,g),j=0;j<O;j++)e(m[j],h[j],r,o,[].concat(x(a),["".concat(j)]))},P=function(e,t,n){for(var r=function(){var e=i(a[o],2),r=e[0],u=e[1];R(n,t,r,(function(e,r,o){u({fieldPaths:o,newEntity:t,oldEntity:n,newValue:r,oldValue:e})}))},o=0,a=Object.entries(e);o<a.length;o++)r()},_=function(){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];var u,y=function(e){return f((function(){var t=m.None,n=i(e,3),r=n[1],o=n[2],a=b(r);switch("function"===a&&(t|=m.Entity),"number"){case a:case b(o):t|=m.Mode}return t}))}(o),E=function(e,t){var n=i(e,5),r=n[0],o=n[1],a=n[2],u=n[3],l=n[4],c=(t&m.Entity)===m.Entity,f=(t&m.Mode)===m.Mode;return c?f?[r,o,a,u||{},l||[]]:[r,o,h.Normal,a||{},u||[]]:f?[null,r,o,a||{},u||[]]:[null,r,h.Normal,o||{},a||[]]}(o,y),O=i(E,5),x=O[0],C=O[1],R=O[2],_=O[3],A=O[4],G=s(C),N=G,k=G,M=((u=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){u.current=!1})),u),I=f(R),T=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m.None,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.Normal,o=S,a=f((function(){if(o.has(e)){var a=o.get(e),u=a.value,i=a.times;return o.set(e,{value:u,times:i+1}),u}switch(!0){case(r&h.Global)===h.Global:case(n&m.Entity)===m.Entity:break;default:return g}var l=(0,t.createContext)(null);return o.set(e,{value:l,times:1}),l}));return(0,c.useUnmount)((function(){if(o.has(e)){var t=o.get(e),n=t.value,r=t.times;a===n&&(1!==r?o.set(e,{value:n,times:r-1}):o.delete(e))}})),a}(G,y,I),U=(null===(e=(0,t.useContext)(T))||void 0===e?void 0:e())||null,L=U,V=function(e,t,n){return(0,c.useCreation)((function(){var r=l.None,o=(n||{}).store;return(e&m.Entity)===m.Entity&&(r|=l.EntityRootEnabled),r|=null===n?l.RootEnabled:l.ContextEnabled,o&&(r|=l.EntityEnabled),(t&h.Stateless)===h.Stateless&&(r|=l.StatelessEnabled),(t&h.Global)===h.Global&&(r|=l.GlobalEnabled),r}),[e,n,t])}(y,I,U),q=(U||{}).reducers,D=void 0===q?null:q,$=(L||{}).store,F=i(function(e,n,r,o){var a=i((0,t.useState)(n),2),u=a[0],f=a[1],s=(null==r?void 0:r.getValue())||null,b=function(e,t,n,r){return(e&l.EntityRootEnabled)!==l.EntityRootEnabled?r:(e&l.StatelessEnabled)!==l.StatelessEnabled?t:"function"==typeof n?n():n}(e,u,n,s),y=(0,c.useLatest)(o),v=(e&l.EntityRootEnabled)===l.EntityRootEnabled,E=w(e,r,(function(){if(!v)return new d.EntityStore(null);var t=(e&l.StatelessEnabled)===l.StatelessEnabled;return new d.EntityStore(b,(function(e){t||f(e)}))}));return v&&E.setValue(b),(0,t.useEffect)((function(){if((e&l.EntityEnabled)===l.EntityEnabled){var t=function(e,t){var n=y.current,r=n.onChange,o=n.watch;o&&P(o,e,t),null==r||r(e,t)};return E.watch(t),function(){E.unwatch(t)}}}),[e,E,y]),(0,c.useCreation)((function(){return[b,E]}),[b,E])}(V,x,void 0===$?null:$,_),2),B=F[0],W=F[1],Y=w(V,D,(function(){return(V&l.EntityEnabled)!==l.EntityEnabled?N(_):function(e,t,n){n.watch,n.onChange;var r=n.options,o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(n,v);return(0,d.createEntityReducers)(t,e,p(p(p({},o),r),{},{onGenerate:function(e,t){return t}}))}(k,W,_)}),A),z=function(e,r,o,a){var u=o.getValue(),i=(0,t.useMemo)((function(){return(e&l.EntityEnabled)===l.EntityEnabled?{store:o,reducers:a}:{reducers:a}}),[e,u,o,a]),f=(e&l.GlobalEnabled)===l.GlobalEnabled?null:i,b=(0,c.useLatest)(i),y=(0,t.useCallback)((function(){return b.current}),[f,b]),d=(0,c.useLatest)(y);return s((function(e){var t=e.children,o=e.with,a=void 0===o?[]:o,u=r.Provider;return n().createElement(u,{value:d.current},a.reduceRight((function(e,t){return n().createElement(t,{},e)}),t))}))}(V,T,W,Y);return(0,c.useCreation)((function(){if((V&l.ContextEnabled)!==l.ContextEnabled)return Y;var e=(V&l.RootEnabled)===l.RootEnabled;if((V&l.EntityEnabled)!==l.EntityEnabled)return e?[Y,z]:Y;var t=function(e,t){var n={};return Object.entries(e).forEach((function(e){var r=i(e,2),o=r[0],a=r[1];n[o]=j(a,t)})),n}(Y,{onShouldCache:function(){return M.current}});return e?[B,t,z]:[B,t]}),[V,B,Y,z,M])},A=function(n){var r=n.usecase,o=n.watch,a=n.onChange;return _(r,{watch:o,onChange:a}),(0,e.jsx)(t.Fragment,{})},G=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=function(e){var t=i(e,4),n=t[0],r=t[1],o=t[2],a=t[3];return"function"==typeof r?[n,r,h.Global,o,a]:[n,h.Global,r,o]}(t);return _.apply(void 0,x(r))},N=function(e,t,n,r){return _(e,t,h.Stateless,n,r)}})(),u})()));
2
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("react"),require("ahooks"),require("@mic-rexjs/usecases"));else if("function"==typeof define&&define.amd)define(["react","ahooks","@mic-rexjs/usecases"],t);else{var n="object"==typeof exports?t(require("react"),require("ahooks"),require("@mic-rexjs/usecases")):t(e.react,e.ahooks,e["@mic-rexjs/usecases"]);for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,((e,t,n)=>(()=>{"use strict";var r={251:(e,t,n)=>{var r=n(156),o=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),u=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,n){var r,l={},s=null,c=null;for(r in void 0!==n&&(s=""+n),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(c=t.ref),t)a.call(t,r)&&!i.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===l[r]&&(l[r]=t[r]);return{$$typeof:o,type:e,key:s,ref:c,props:l,_owner:u.current}}},893:(e,t,n)=>{e.exports=n(251)},112:e=>{e.exports=n},749:e=>{e.exports=t},156:t=>{t.exports=e}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var u={};return(()=>{a.r(u),a.d(u,{UseCaseFragment:()=>A,useGlobalUseCase:()=>N,useStatelessUseCase:()=>U,useUseCase:()=>G});var e=a(893),t=a(156),n=a.n(t);function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function o(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.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)?r(e,t):void 0}}function i(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,u,i=[],l=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(s)throw o}}return i}}(e,t)||o(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.")}()}var l,s=a(749),c=function(e){return i((0,t.useState)((function(){return e})),1)[0]};function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function b(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==f(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==f(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===f(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}!function(e){e[e.None=0]="None",e[e.RootEnabled=2]="RootEnabled",e[e.ContextEnabled=4]="ContextEnabled",e[e.EntityEnabled=8]="EntityEnabled",e[e.ContextRootEnabled=22]="ContextRootEnabled",e[e.EntityRootEnabled=62]="EntityRootEnabled",e[e.StatelessEnabled=72]="StatelessEnabled",e[e.GlobalEnabled=150]="GlobalEnabled"}(l||(l={}));var d=a(112),y=["watch","onChange","options"];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 p(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}var E,m,h=function(e){return i((0,t.useState)(e),1)[0]},S=new Map;!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity",e[e.Mode=4]="Mode"}(E||(E={})),function(e){e[e.Normal=2]="Normal",e[e.Stateless=4]="Stateless",e[e.Global=8]="Global",e[e.StatelessGlobal=12]="StatelessGlobal"}(m||(m={}));var g=(0,t.createContext)(null),O=function(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0},w=function(e,t){var n,r=t||{},o=r.onShouldCache,a=void 0===o?function(){return!0}:o,u=r.onCompare,i=void 0===u?function(e,t){return O(e,t)}:u;return function(){for(var t=a(),r=arguments.length,o=new Array(r),u=0;u<r;u++)o[u]=arguments[u];if(n&&t){var l=n,s=l.parameters,c=l.returnValue;if(i(s,o))return c}var f=e.apply(void 0,o);return t&&(n={parameters:o,returnValue:f}),f}},j=function(e,n,r){var o,a,u,i=(o=r,a=function(e){var n=(0,t.useRef)(0),r=(0,t.useRef)([]),o=r.current,a=O(e,o);return r.current=e,n.current+=a?0:1,n.current}(arguments.length>3&&void 0!==arguments[3]?arguments[3]:[]),u=(0,s.useLatest)(o),(0,s.useCreation)((function(){return w(u.current,{onCompare:function(){return!0}})}),[a,u]));return(0,s.useCreation)((function(){return(e&l.RootEnabled)!==l.RootEnabled&&n?n:i()}),[e,n,i])};function x(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var C,R=function(e,t){return"object"===f(e)&&null!==e&&Object.hasOwn(e,t)},P=function e(t,n,r,o){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],u=void 0,l=i(r.match(/^([^.]+)\.(.+)$/)||[],3),s=l[1],c=void 0===s?r:s,f=l[2],b=void 0===f?"":f,d=R(t,c),y=R(n,c),v=[].concat(x(a),[c]);if(d||y){var p=d?t[c]:u,E=y?n[c]:u;if(b)return void e(p,E,b,o,v);if(p===E)return;o(p,E,v)}else if(!/^\d+^/.test(c))for(var m=Array.isArray(t)?t:[],h=Array.isArray(n)?n:[],S=m.length,g=h.length,O=Math.max(S,g),w=0;w<O;w++)e(m[w],h[w],r,o,[].concat(x(a),["".concat(w)]))},_=function(e,t,n){for(var r=function(){var e=i(a[o],2),r=e[0],u=e[1];P(n,t,r,(function(e,r,o){u({fieldPaths:o,newEntity:t,oldEntity:n,newValue:r,oldValue:e})}))},o=0,a=Object.entries(e);o<a.length;o++)r()};!function(e){e.UnsupportedGlobal='useUseCase does not support "global" mode with entity usecase',e.UnsupportedStateless='useUseCase does not support "stateless" mode with non-entity usecase'}(C||(C={}));var G=function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];var a,u=function(e){return h((function(){var t=E.None,n=i(e,3),r=n[1],o=n[2],a=f(r);switch("function"===a&&(t|=E.Entity),"number"){case a:case f(o):t|=E.Mode}return t}))}(r),b=function(e,t){var n=i(e,5),r=n[0],o=n[1],a=n[2],u=n[3],l=n[4],s=(t&E.Entity)===E.Entity,c=(t&E.Mode)===E.Mode;return s?c?[r,o,a,u||{},l||[]]:[r,o,m.Normal,a||{},u||[]]:c?[null,r,o,a||{},u||[]]:[null,r,m.Normal,o||{},a||[]]}(r,u),v=i(b,5),O=v[0],x=v[1],R=v[2],P=v[3],G=v[4],A=c(x),N=A,U=A,M=((a=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){a.current=!1})),a),k=function(e,t){return h((function(){if((t&E.Entity)===E.Entity){if((e&m.Global)===m.Global)throw C.UnsupportedGlobal;return e}if((e&m.Stateless)===m.Stateless)throw C.UnsupportedStateless;return e}))}(R,u),I=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:E.None,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m.Normal,o=S,a=h((function(){if(o.has(e)){var a=o.get(e),u=a.value,i=a.times;return o.set(e,{value:u,times:i+1}),u}switch(!0){case(r&m.Global)===m.Global:case(n&E.Entity)===E.Entity:break;default:return g}var l=(0,t.createContext)(null);return o.set(e,{value:l,times:1}),l}));return(0,s.useUnmount)((function(){if(o.has(e)){var t=o.get(e),n=t.value,r=t.times;a===n&&(1!==r?o.set(e,{value:n,times:r-1}):o.delete(e))}})),a}(A,u,k),T=(0,t.useContext)(I),V=T,q=function(e,t,n){return(0,s.useCreation)((function(){var r=l.None,o=(n||{}).store;return(e&E.Entity)===E.Entity&&(r|=l.EntityRootEnabled),r|=null===n?l.RootEnabled:l.ContextEnabled,o&&(r|=l.EntityEnabled),(t&m.Stateless)===m.Stateless&&(r|=l.StatelessEnabled),(t&m.Global)===m.Global&&(r|=l.GlobalEnabled),r}),[e,n,t])}(u,k,T),D=(T||{}).reducers,L=void 0===D?null:D,$=(V||{}).store,F=i(function(e,n,r,o){var a=i((0,t.useState)(n),2),u=a[0],c=a[1],f=(null==r?void 0:r.getValue())||null,b=function(e,t,n,r){return(e&l.EntityRootEnabled)!==l.EntityRootEnabled?r:(e&l.StatelessEnabled)!==l.StatelessEnabled?t:"function"==typeof n?n():n}(e,u,n,f),y=(0,s.useLatest)(o),v=(e&l.EntityRootEnabled)===l.EntityRootEnabled,p=j(e,r,(function(){if(!v)return new d.EntityStore(null);var t=(e&l.StatelessEnabled)===l.StatelessEnabled;return new d.EntityStore(b,(function(e){t||c(e)}))}));return v&&p.setValue(b),(0,t.useEffect)((function(){if((e&l.EntityEnabled)===l.EntityEnabled){var t=function(e,t){var n=y.current,r=n.onChange,o=n.watch;o&&_(o,e,t),null==r||r(e,t)};return p.watch(t),function(){p.unwatch(t)}}}),[e,p,y]),(0,s.useCreation)((function(){return[b,p]}),[b,p])}(q,O,void 0===$?null:$,P),2),B=F[0],W=F[1],Y=j(q,L,(function(){return(q&l.EntityEnabled)!==l.EntityEnabled?N(P):function(e,t,n){n.watch,n.onChange;var r=n.options,o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(n,y);return(0,d.createEntityReducers)(t,e,p(p(p({},o),r),{},{onGenerate:function(e,t){return t}}))}(U,W,P)}),G),z=function(e,r,o,a){var u=o.getValue(),i=(0,t.useMemo)((function(){return(e&l.EntityEnabled)===l.EntityEnabled?{store:o,reducers:a}:{reducers:a}}),[e,u,o,a]),f=(0,s.useLatest)(i);return c((function(e){var t=e.children,o=e.with,a=void 0===o?[]:o,u=r.Provider;return n().createElement(u,{value:f.current},a.reduceRight((function(e,t){return n().createElement(t,{},e)}),t))}))}(q,I,W,Y);return(0,s.useCreation)((function(){if((q&l.ContextEnabled)!==l.ContextEnabled)return Y;var e=(q&l.RootEnabled)===l.RootEnabled;if((q&l.EntityEnabled)!==l.EntityEnabled)return e?[Y,z]:Y;var t=function(e,t){var n={};return Object.entries(e).forEach((function(e){var r=i(e,2),o=r[0],a=r[1];n[o]=w(a,t)})),n}(Y,{onShouldCache:function(){return M.current}});return e?[B,t,z]:[B,t]}),[q,B,Y,z,M])},A=function(n){var r=n.usecase,o=n.watch,a=n.onChange;return G(r,{watch:o,onChange:a}),(0,e.jsx)(t.Fragment,{})},N=function(e,t,n){return G(e,m.Global,t,n)},U=function(e,t,n,r){return G(e,t,m.Stateless,n,r)}})(),u})()));
@@ -13,8 +13,5 @@ export interface UseCaseContextValue<T extends ReducerMap> {
13
13
  export interface EntityUseCaseContextValue<T, TEntityReducers extends EntityReducerMap<T>> extends UseCaseContextValue<ContextualEntityReducers<T, TEntityReducers>> {
14
14
  store: EntityStore<T>;
15
15
  }
16
- export interface UseCaseContextValueGetter<T> {
17
- (): T;
18
- }
19
- export interface UseCaseContext<T> extends React.Context<UseCaseContextValueGetter<T> | null> {
16
+ export interface UseCaseContext<T> extends React.Context<T | null> {
20
17
  }
@@ -0,0 +1,4 @@
1
+ export declare enum UseCaseModeErrors {
2
+ UnsupportedGlobal = "useUseCase does not support \"global\" mode with entity usecase",
3
+ UnsupportedStateless = "useUseCase does not support \"stateless\" mode with non-entity usecase"
4
+ }
@@ -0,0 +1,5 @@
1
+ export var UseCaseModeErrors;
2
+ (function (UseCaseModeErrors) {
3
+ UseCaseModeErrors["UnsupportedGlobal"] = "useUseCase does not support \"global\" mode with entity usecase";
4
+ UseCaseModeErrors["UnsupportedStateless"] = "useUseCase does not support \"stateless\" mode with non-entity usecase";
5
+ })(UseCaseModeErrors || (UseCaseModeErrors = {}));
@@ -1,6 +1,5 @@
1
1
  import { useUseCase } from '../useUseCase';
2
- import { transformGlobalArguments } from '../../methods/transformGlobalArguments';
3
- export const useGlobalUseCase = ((...args) => {
4
- const transformedArgs = transformGlobalArguments(args);
5
- return useUseCase(...transformedArgs);
2
+ import { UseCaseModes } from '../../enums/UseCaseModes';
3
+ export const useGlobalUseCase = ((useCase, options, deps) => {
4
+ return useUseCase(useCase, UseCaseModes.Global, options, deps);
6
5
  });
@@ -1,42 +1,12 @@
1
1
  import { useGlobalUseCase } from '.';
2
- import { entityUseCase } from '@mic-rexjs/usecases';
3
2
  import { describe, expect, jest, test } from '@jest/globals';
4
3
  import { UseCaseModes } from '../../enums/UseCaseModes';
5
4
  import { renderHook } from '@testing-library/react';
6
5
  import * as useUseCaseModule from '../useUseCase';
7
- const numberUseCase = () => {
8
- return entityUseCase();
9
- };
10
6
  const mathUseCase = () => {
11
7
  return {};
12
8
  };
13
9
  describe('useGlobalUseCase', () => {
14
- describe('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', () => {
15
- test('check `useUseCase` has received correct arguments', () => {
16
- const useMockedUseCase = jest.fn();
17
- jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
18
- renderHook(() => {
19
- useGlobalUseCase(1, numberUseCase);
20
- });
21
- expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.Global, void 0, void 0);
22
- jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
23
- });
24
- test('should should return `CoreCollection` with Provider', () => {
25
- const { result } = renderHook(() => {
26
- return useGlobalUseCase(1, numberUseCase);
27
- });
28
- const { current } = result;
29
- expect(current).toEqual([
30
- 1,
31
- {
32
- setEntity: expect.any(Function),
33
- },
34
- expect.any(Function),
35
- void 0,
36
- void 0,
37
- ]);
38
- });
39
- });
40
10
  describe('`useGlobalUseCase` should work the same as `GlobalPseudoCoreCollectionHook`', () => {
41
11
  test('check `useUseCase` has received correct arguments', () => {
42
12
  const useMockedUseCase = jest.fn();
@@ -1,9 +1,5 @@
1
- import { EntityReducers, ReducerMap, Reducers, UseCase } from '@mic-rexjs/usecases';
2
- import { PseudoCoreCollection, RootCoreCollection, RootCoreCollectionHook } from '../useUseCase/types';
3
- export type GlobalCoreCollection<T, TReducers extends ReducerMap> = TReducers extends EntityReducers<T> ? RootCoreCollection<T, TReducers> : PseudoCoreCollection<TReducers>;
4
- export interface GlobalPseudoCoreCollectionHook {
1
+ import { Reducers, UseCase } from '@mic-rexjs/usecases';
2
+ import { PseudoCoreCollection } from '../useUseCase/types';
3
+ export interface GlobalUseCaseHook {
5
4
  <T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
6
5
  }
7
- export type GlobalUseCaseHookParameters = Parameters<RootCoreCollectionHook> | Parameters<GlobalPseudoCoreCollectionHook>;
8
- export interface GlobalUseCaseHook extends RootCoreCollectionHook, GlobalPseudoCoreCollectionHook {
9
- }
@@ -1,5 +1,5 @@
1
1
  import { useLatest } from 'ahooks';
2
- import React, { useCallback, useMemo } from 'react';
2
+ import React, { useMemo } from 'react';
3
3
  import { useConstantFn } from '../useConstantFn';
4
4
  import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
5
5
  export const useProvider = (statuses, context, store, reducers) => {
@@ -14,19 +14,11 @@ export const useProvider = (statuses, context, store, reducers) => {
14
14
  }
15
15
  return { reducers };
16
16
  }, [statuses, entity, store, reducers]);
17
- const isGlobal = (statuses & UseCaseStatuses.GlobalEnabled) === UseCaseStatuses.GlobalEnabled;
18
- const updateDep = isGlobal ? null : contextValue;
19
17
  const contextValueRef = useLatest(contextValue);
20
- // 这里必须使用 `useCallback`,因为要使用在 `Provider` 的 `value` 属性上面,需要可变化的
21
- const getContextValue = useCallback(() => {
22
- void updateDep;
23
- return contextValueRef.current;
24
- }, [updateDep, contextValueRef]);
25
- const getterRef = useLatest(getContextValue);
26
18
  return useConstantFn(({ children, with: withProviders = [] }) => {
27
19
  const { Provider: ContextProvider } = context;
28
20
  return React.createElement(ContextProvider, {
29
- value: getterRef.current,
21
+ value: contextValueRef.current,
30
22
  }, withProviders.reduceRight((currentChildren, withProvider) => {
31
23
  return React.createElement(withProvider, {}, currentChildren);
32
24
  }, children));
@@ -0,0 +1,3 @@
1
+ import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
2
+ import { UseCaseModes } from '../../enums/UseCaseModes';
3
+ export declare const useSafeMode: (unsafeMode: UseCaseModes, argumentTypes: UseCaseArgumentTypes) => UseCaseModes;
@@ -0,0 +1,18 @@
1
+ import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
2
+ import { UseCaseModes } from '../../enums/UseCaseModes';
3
+ import { useConstant } from '../useConstant';
4
+ import { UseCaseModeErrors } from '../../enums/UseCaseModeErrors';
5
+ export const useSafeMode = (unsafeMode, argumentTypes) => {
6
+ return useConstant(() => {
7
+ if ((argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity) {
8
+ if ((unsafeMode & UseCaseModes.Global) === UseCaseModes.Global) {
9
+ throw UseCaseModeErrors.UnsupportedGlobal;
10
+ }
11
+ return unsafeMode;
12
+ }
13
+ if ((unsafeMode & UseCaseModes.Stateless) === UseCaseModes.Stateless) {
14
+ throw UseCaseModeErrors.UnsupportedStateless;
15
+ }
16
+ return unsafeMode;
17
+ });
18
+ };
@@ -1,6 +1,5 @@
1
1
  import { useCreation } from 'ahooks';
2
2
  import { useContext } from 'react';
3
- import { useConstant } from '../useConstant';
4
3
  import { useConstantFn } from '../useConstantFn';
5
4
  import { useProvider } from '../useProvider';
6
5
  import { initEntityReducers } from '../../methods/initEntityReducers';
@@ -13,6 +12,7 @@ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
13
12
  import { useEntity } from '../useEntity';
14
13
  import { useContextualItem } from '../useContextualItem';
15
14
  import { cacheCalls } from '../../methods/cacheCalls';
15
+ import { useSafeMode } from '../useSafeMode';
16
16
  export const useUseCase = ((...args) => {
17
17
  const argumentTypes = useArgumentTypes(args);
18
18
  const fullArguments = fillArguments(args, argumentTypes);
@@ -21,9 +21,9 @@ export const useUseCase = ((...args) => {
21
21
  const usecase = unkownUsecase;
22
22
  const entityUseCase = unkownUsecase;
23
23
  const isRenderingRef = useIsRenderingRef();
24
- const mode = useConstant(unsafeMode);
24
+ const mode = useSafeMode(unsafeMode, argumentTypes);
25
25
  const context = useUseCaseContext(unkownUsecase, argumentTypes, mode);
26
- const contextValue = useContext(context)?.() || null;
26
+ const contextValue = useContext(context);
27
27
  const entityContextValue = contextValue;
28
28
  const statuses = useUseCaseStatuses(argumentTypes, mode, contextValue);
29
29
  const { reducers: contextReducers = null } = contextValue || {};
@@ -6,6 +6,7 @@ import { useUseCase } from '.';
6
6
  import { useDeepCompareEffect, useMemoizedFn, useMount, useUpdate, useUpdateEffect } from 'ahooks';
7
7
  import { Fragment, useEffect, useRef, useState } from 'react';
8
8
  import { UseCaseModes } from '../../enums/UseCaseModes';
9
+ import { UseCaseModeErrors } from '../../enums/UseCaseModeErrors';
9
10
  const EXT_1 = '.png';
10
11
  const EXT_2 = '.jpg';
11
12
  const PATH_1 = `hello${EXT_1}`;
@@ -124,17 +125,17 @@ beforeEach(() => {
124
125
  subtractionReducer.mockClear();
125
126
  });
126
127
  describe('useUseCase', () => {
127
- describe.each([void 0, UseCaseModes.Normal, UseCaseModes.Global])('[mode=%s]: `useUseCase` should work the same as `useRootCoreCollection`', (mode) => {
128
+ describe('`useUseCase` should work the same as `useRootCoreCollection`', () => {
128
129
  test('check `context.length`', () => {
129
130
  const { result } = renderHook(() => {
130
- return useUseCase(defaultFile, fileUseCase, mode);
131
+ return useUseCase(defaultFile, fileUseCase);
131
132
  });
132
133
  const { current: cores } = result;
133
134
  expect(cores).toHaveLength(3);
134
135
  });
135
136
  test('`entity` should equal `defaultFile`', () => {
136
137
  const { result } = renderHook(() => {
137
- return useUseCase(defaultFile, fileUseCase, mode);
138
+ return useUseCase(defaultFile, fileUseCase);
138
139
  });
139
140
  const { current: cores } = result;
140
141
  const [entity] = cores;
@@ -412,6 +413,28 @@ describe('useUseCase', () => {
412
413
  fireEvent.click(screen.getByText(updateButtonText));
413
414
  expect(addReducer).toHaveBeenCalledTimes(3);
414
415
  });
416
+ test.each([
417
+ {
418
+ mode: UseCaseModes.Normal,
419
+ toThrow: '',
420
+ },
421
+ {
422
+ mode: UseCaseModes.Global,
423
+ toThrow: UseCaseModeErrors.UnsupportedGlobal,
424
+ },
425
+ {
426
+ mode: UseCaseModes.Stateless,
427
+ toThrow: '',
428
+ },
429
+ ])('does not support global mode', ({ mode, toThrow }) => {
430
+ expect(() => {
431
+ renderHook(() => {
432
+ useUseCase(defaultFile, fileUseCase, mode);
433
+ });
434
+ // 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
435
+ throw '';
436
+ }).toThrow(toThrow);
437
+ });
415
438
  test('stateless mode should not generate new reducers when `yeild entity`', () => {
416
439
  const onUpdate = jest.fn();
417
440
  const { result, rerender } = renderHook((file = defaultFile) => {
@@ -1186,22 +1209,6 @@ describe('useUseCase', () => {
1186
1209
  expect(onParentUpdate).toHaveBeenCalledTimes(0);
1187
1210
  expect(onChildUpdate).toHaveBeenCalledTimes(0);
1188
1211
  });
1189
- test('global mode should trigger Parent to update, but Child shoud not be updated', () => {
1190
- const onParentUpdate = jest.fn();
1191
- const onChildUpdate = jest.fn();
1192
- const onSetPath = jest.fn(() => {
1193
- return PATH_1;
1194
- });
1195
- render(_jsx("div", { children: _jsx(Parent, { mode: UseCaseModes.Global, onSetPath: onSetPath, onUpdate: onParentUpdate, children: _jsx(Child, { onUpdate: onChildUpdate }) }) }));
1196
- fireEvent.click(screen.getByText(PARENT_BUTTON_TEXT));
1197
- expect(onSetPath).toHaveBeenCalledTimes(1);
1198
- expect(onParentUpdate).toHaveBeenCalledTimes(1);
1199
- expect(onChildUpdate).toHaveBeenCalledTimes(0);
1200
- fireEvent.click(screen.getByText(CHILD_BUTTON_TEXT));
1201
- expect(onSetPath).toHaveBeenCalledTimes(1);
1202
- expect(onParentUpdate).toHaveBeenCalledTimes(2);
1203
- expect(onChildUpdate).toHaveBeenCalledTimes(0);
1204
- });
1205
1212
  test('`usecase` should not be called at child component', () => {
1206
1213
  const mockUseCase = jest.fn(fileUseCase);
1207
1214
  const A = () => {
@@ -1411,6 +1418,28 @@ describe('useUseCase', () => {
1411
1418
  const { current } = result;
1412
1419
  expect(current).toEqual([expect.any(Object), expect.any(Function)]);
1413
1420
  });
1421
+ test.each([
1422
+ {
1423
+ mode: UseCaseModes.Normal,
1424
+ toThrow: '',
1425
+ },
1426
+ {
1427
+ mode: UseCaseModes.Global,
1428
+ toThrow: '',
1429
+ },
1430
+ {
1431
+ mode: UseCaseModes.Stateless,
1432
+ toThrow: UseCaseModeErrors.UnsupportedStateless,
1433
+ },
1434
+ ])('does not support stateless mode', ({ mode, toThrow }) => {
1435
+ expect(() => {
1436
+ renderHook(() => {
1437
+ useUseCase(mathUseCase, mode);
1438
+ });
1439
+ // 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
1440
+ throw '';
1441
+ }).toThrow(toThrow);
1442
+ });
1414
1443
  test('the return value should be `reducers` object at child component', () => {
1415
1444
  const onMountA = jest.fn();
1416
1445
  const A = () => {
@@ -46,13 +46,13 @@ export interface UseCaseHookOwnOptions<T, TUseCaseOptions extends object> extend
46
46
  }
47
47
  export type UseCaseHookOptions<T, TUseCaseOptions extends object = object> = TUseCaseOptions & UseCaseHookOwnOptions<T, TUseCaseOptions>;
48
48
  export interface ContextualCoreCollectionHook {
49
- <T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> &
49
+ <T, TEntityReducers extends EntityReducers<T>>(usecase: EntityUseCase<T, TEntityReducers> &
50
50
  /**
51
51
  * 如果不使用 `&`,那么很多情况下 `options` 类型无法被正确推导;
52
52
  * 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
53
53
  * 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
54
54
  */
55
- UseCase<EntityReducerMap<T>, TUseCaseOptions>, options?: UseCaseHookContextualOptions<T>): ContextualCoreCollection<T, TEntityReducers>;
55
+ UseCase<EntityReducerMap<T>>, options?: UseCaseHookContextualOptions<T>): ContextualCoreCollection<T, TEntityReducers>;
56
56
  }
57
57
  export interface RootCoreCollectionHook {
58
58
  <T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> &
@@ -70,10 +70,18 @@ export interface ModeCoreCollectionHook {
70
70
  * 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
71
71
  * 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
72
72
  */
73
- UseCase<EntityReducerMap<T>, TUseCaseOptions>, mode: UseCaseModes, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
73
+ UseCase<EntityReducerMap<T>, TUseCaseOptions>,
74
+ /**
75
+ * currently, only support `UseCaseModes.Stateless`
76
+ */
77
+ mode: UseCaseModes, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
74
78
  }
75
79
  export interface PseudoCoreCollectionHook {
76
- <T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, mode: UseCaseModes, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
80
+ <T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>,
81
+ /**
82
+ * currently, only support `UseCaseModes.Global`
83
+ */
84
+ mode: UseCaseModes, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
77
85
  }
78
86
  export interface ReducersHook {
79
87
  <T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): T;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UseCaseModeErrors = void 0;
7
+ var UseCaseModeErrors;
8
+ exports.UseCaseModeErrors = UseCaseModeErrors;
9
+ (function (UseCaseModeErrors) {
10
+ UseCaseModeErrors["UnsupportedGlobal"] = "useUseCase does not support \"global\" mode with entity usecase";
11
+ UseCaseModeErrors["UnsupportedStateless"] = "useUseCase does not support \"stateless\" mode with non-entity usecase";
12
+ })(UseCaseModeErrors || (exports.UseCaseModeErrors = UseCaseModeErrors = {}));
@@ -1,18 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.useGlobalUseCase = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
7
  var _useUseCase = require("../useUseCase");
10
- var _transformGlobalArguments = require("../../methods/transformGlobalArguments");
11
- var useGlobalUseCase = function useGlobalUseCase() {
12
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
13
- args[_key] = arguments[_key];
14
- }
15
- var transformedArgs = (0, _transformGlobalArguments.transformGlobalArguments)(args);
16
- return _useUseCase.useUseCase.apply(void 0, (0, _toConsumableArray2["default"])(transformedArgs));
8
+ var _UseCaseModes = require("../../enums/UseCaseModes");
9
+ var useGlobalUseCase = function useGlobalUseCase(useCase, options, deps) {
10
+ return (0, _useUseCase.useUseCase)(useCase, _UseCaseModes.UseCaseModes.Global, options, deps);
17
11
  };
18
12
  exports.useGlobalUseCase = useGlobalUseCase;
@@ -2,41 +2,16 @@
2
2
 
3
3
  var _typeof = require("@babel/runtime/helpers/typeof");
4
4
  var _ = require(".");
5
- var _usecases = require("@mic-rexjs/usecases");
6
5
  var _globals = require("@jest/globals");
7
6
  var _UseCaseModes = require("../../enums/UseCaseModes");
8
7
  var _react = require("@testing-library/react");
9
8
  var useUseCaseModule = _interopRequireWildcard(require("../useUseCase"));
10
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
10
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
- var numberUseCase = function numberUseCase() {
13
- return (0, _usecases.entityUseCase)();
14
- };
15
11
  var mathUseCase = function mathUseCase() {
16
12
  return {};
17
13
  };
18
14
  (0, _globals.describe)('useGlobalUseCase', function () {
19
- (0, _globals.describe)('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', function () {
20
- (0, _globals.test)('check `useUseCase` has received correct arguments', function () {
21
- var useMockedUseCase = _globals.jest.fn();
22
- _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
23
- (0, _react.renderHook)(function () {
24
- (0, _.useGlobalUseCase)(1, numberUseCase);
25
- });
26
- (0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, _UseCaseModes.UseCaseModes.Global, void 0, void 0);
27
- _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
28
- });
29
- (0, _globals.test)('should should return `CoreCollection` with Provider', function () {
30
- var _renderHook = (0, _react.renderHook)(function () {
31
- return (0, _.useGlobalUseCase)(1, numberUseCase);
32
- }),
33
- result = _renderHook.result;
34
- var current = result.current;
35
- (0, _globals.expect)(current).toEqual([1, {
36
- setEntity: _globals.expect.any(Function)
37
- }, _globals.expect.any(Function), void 0, void 0]);
38
- });
39
- });
40
15
  (0, _globals.describe)('`useGlobalUseCase` should work the same as `GlobalPseudoCoreCollectionHook`', function () {
41
16
  (0, _globals.test)('check `useUseCase` has received correct arguments', function () {
42
17
  var useMockedUseCase = _globals.jest.fn();
@@ -25,22 +25,14 @@ var useProvider = function useProvider(statuses, context, store, reducers) {
25
25
  reducers: reducers
26
26
  };
27
27
  }, [statuses, entity, store, reducers]);
28
- var isGlobal = (statuses & _UseCaseStatuses.UseCaseStatuses.GlobalEnabled) === _UseCaseStatuses.UseCaseStatuses.GlobalEnabled;
29
- var updateDep = isGlobal ? null : contextValue;
30
28
  var contextValueRef = (0, _ahooks.useLatest)(contextValue);
31
- // 这里必须使用 `useCallback`,因为要使用在 `Provider` 的 `value` 属性上面,需要可变化的
32
- var getContextValue = (0, _react.useCallback)(function () {
33
- void updateDep;
34
- return contextValueRef.current;
35
- }, [updateDep, contextValueRef]);
36
- var getterRef = (0, _ahooks.useLatest)(getContextValue);
37
29
  return (0, _useConstantFn.useConstantFn)(function (_ref) {
38
30
  var children = _ref.children,
39
31
  _ref$with = _ref["with"],
40
32
  withProviders = _ref$with === void 0 ? [] : _ref$with;
41
33
  var ContextProvider = context.Provider;
42
34
  return _react["default"].createElement(ContextProvider, {
43
- value: getterRef.current
35
+ value: contextValueRef.current
44
36
  }, withProviders.reduceRight(function (currentChildren, withProvider) {
45
37
  return _react["default"].createElement(withProvider, {}, currentChildren);
46
38
  }, children));
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSafeMode = void 0;
7
+ var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
8
+ var _UseCaseModes = require("../../enums/UseCaseModes");
9
+ var _useConstant = require("../useConstant");
10
+ var _UseCaseModeErrors = require("../../enums/UseCaseModeErrors");
11
+ var useSafeMode = function useSafeMode(unsafeMode, argumentTypes) {
12
+ return (0, _useConstant.useConstant)(function () {
13
+ if ((argumentTypes & _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) === _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) {
14
+ if ((unsafeMode & _UseCaseModes.UseCaseModes.Global) === _UseCaseModes.UseCaseModes.Global) {
15
+ throw _UseCaseModeErrors.UseCaseModeErrors.UnsupportedGlobal;
16
+ }
17
+ return unsafeMode;
18
+ }
19
+ if ((unsafeMode & _UseCaseModes.UseCaseModes.Stateless) === _UseCaseModes.UseCaseModes.Stateless) {
20
+ throw _UseCaseModeErrors.UseCaseModeErrors.UnsupportedStateless;
21
+ }
22
+ return unsafeMode;
23
+ });
24
+ };
25
+ exports.useSafeMode = useSafeMode;
@@ -8,7 +8,6 @@ exports.useUseCase = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _ahooks = require("ahooks");
10
10
  var _react = require("react");
11
- var _useConstant = require("../useConstant");
12
11
  var _useConstantFn = require("../useConstantFn");
13
12
  var _useProvider = require("../useProvider");
14
13
  var _initEntityReducers = require("../../methods/initEntityReducers");
@@ -21,8 +20,8 @@ var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
21
20
  var _useEntity3 = require("../useEntity");
22
21
  var _useContextualItem = require("../useContextualItem");
23
22
  var _cacheCalls = require("../../methods/cacheCalls");
23
+ var _useSafeMode = require("../useSafeMode");
24
24
  var useUseCase = function useUseCase() {
25
- var _useContext;
26
25
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
27
26
  args[_key] = arguments[_key];
28
27
  }
@@ -38,9 +37,9 @@ var useUseCase = function useUseCase() {
38
37
  var usecase = unkownUsecase;
39
38
  var entityUseCase = unkownUsecase;
40
39
  var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
41
- var mode = (0, _useConstant.useConstant)(unsafeMode);
40
+ var mode = (0, _useSafeMode.useSafeMode)(unsafeMode, argumentTypes);
42
41
  var context = (0, _useUseCaseContext.useUseCaseContext)(unkownUsecase, argumentTypes, mode);
43
- var contextValue = ((_useContext = (0, _react.useContext)(context)) === null || _useContext === void 0 ? void 0 : _useContext()) || null;
42
+ var contextValue = (0, _react.useContext)(context);
44
43
  var entityContextValue = contextValue;
45
44
  var statuses = (0, _useUseCaseStatuses.useUseCaseStatuses)(argumentTypes, mode, contextValue);
46
45
  var _ref = contextValue || {},
@@ -17,6 +17,7 @@ var _ = require(".");
17
17
  var _ahooks = require("ahooks");
18
18
  var _react2 = require("react");
19
19
  var _UseCaseModes = require("../../enums/UseCaseModes");
20
+ var _UseCaseModeErrors = require("../../enums/UseCaseModeErrors");
20
21
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
22
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
23
  function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
@@ -244,10 +245,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
244
245
  subtractionReducer.mockClear();
245
246
  });
246
247
  (0, _globals.describe)('useUseCase', function () {
247
- _globals.describe.each([void 0, _UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Global])('[mode=%s]: `useUseCase` should work the same as `useRootCoreCollection`', function (mode) {
248
+ (0, _globals.describe)('`useUseCase` should work the same as `useRootCoreCollection`', function () {
248
249
  (0, _globals.test)('check `context.length`', function () {
249
250
  var _renderHook = (0, _react.renderHook)(function () {
250
- return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
251
+ return (0, _.useUseCase)(defaultFile, fileUseCase);
251
252
  }),
252
253
  result = _renderHook.result;
253
254
  var cores = result.current;
@@ -255,7 +256,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
255
256
  });
256
257
  (0, _globals.test)('`entity` should equal `defaultFile`', function () {
257
258
  var _renderHook2 = (0, _react.renderHook)(function () {
258
- return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
259
+ return (0, _.useUseCase)(defaultFile, fileUseCase);
259
260
  }),
260
261
  result = _renderHook2.result;
261
262
  var cores = result.current;
@@ -583,6 +584,26 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
583
584
  _react.fireEvent.click(_react.screen.getByText(updateButtonText));
584
585
  (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
585
586
  });
587
+ _globals.test.each([{
588
+ mode: _UseCaseModes.UseCaseModes.Normal,
589
+ toThrow: ''
590
+ }, {
591
+ mode: _UseCaseModes.UseCaseModes.Global,
592
+ toThrow: _UseCaseModeErrors.UseCaseModeErrors.UnsupportedGlobal
593
+ }, {
594
+ mode: _UseCaseModes.UseCaseModes.Stateless,
595
+ toThrow: ''
596
+ }])('does not support global mode', function (_ref7) {
597
+ var mode = _ref7.mode,
598
+ toThrow = _ref7.toThrow;
599
+ (0, _globals.expect)(function () {
600
+ (0, _react.renderHook)(function () {
601
+ (0, _.useUseCase)(defaultFile, fileUseCase, mode);
602
+ });
603
+ // 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
604
+ throw '';
605
+ }).toThrow(toThrow);
606
+ });
586
607
  (0, _globals.test)('stateless mode should not generate new reducers when `yeild entity`', function () {
587
608
  var onUpdate = _globals.jest.fn();
588
609
  var _renderHook12 = (0, _react.renderHook)(function () {
@@ -922,8 +943,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
922
943
  var onChangeB = _globals.jest.fn(updateChangeTimes);
923
944
  var onChangeC = _globals.jest.fn(updateChangeTimes);
924
945
  var buttonText = 'my button';
925
- var A = function A(_ref7) {
926
- var children = _ref7.children;
946
+ var A = function A(_ref8) {
947
+ var children = _ref8.children;
927
948
  (0, _.useUseCase)(fileUseCase, {
928
949
  watch: {
929
950
  ext: onChangeA
@@ -1571,31 +1592,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1571
1592
  (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(0);
1572
1593
  (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1573
1594
  });
1574
- (0, _globals.test)('global mode should trigger Parent to update, but Child shoud not be updated', function () {
1575
- var onParentUpdate = _globals.jest.fn();
1576
- var onChildUpdate = _globals.jest.fn();
1577
- var onSetPath = _globals.jest.fn(function () {
1578
- return PATH_1;
1579
- });
1580
- (0, _react.render)((0, _jsxRuntime.jsx)("div", {
1581
- children: (0, _jsxRuntime.jsx)(Parent, {
1582
- mode: _UseCaseModes.UseCaseModes.Global,
1583
- onSetPath: onSetPath,
1584
- onUpdate: onParentUpdate,
1585
- children: (0, _jsxRuntime.jsx)(Child, {
1586
- onUpdate: onChildUpdate
1587
- })
1588
- })
1589
- }));
1590
- _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1591
- (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1592
- (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(1);
1593
- (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1594
- _react.fireEvent.click(_react.screen.getByText(CHILD_BUTTON_TEXT));
1595
- (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1596
- (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(2);
1597
- (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1598
- });
1599
1595
  (0, _globals.test)('`usecase` should not be called at child component', function () {
1600
1596
  var mockUseCase = _globals.jest.fn(fileUseCase);
1601
1597
  var A = function A() {
@@ -1822,8 +1818,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1822
1818
  var onChangeB = _globals.jest.fn(updateChangeTimes);
1823
1819
  var onChangeC = _globals.jest.fn(updateChangeTimes);
1824
1820
  var buttonText = 'my button';
1825
- var A = function A(_ref8) {
1826
- var children = _ref8.children;
1821
+ var A = function A(_ref9) {
1822
+ var children = _ref9.children;
1827
1823
  (0, _.useUseCase)(fileUseCase, {
1828
1824
  onChange: onChangeA
1829
1825
  });
@@ -1873,6 +1869,26 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1873
1869
  var current = result.current;
1874
1870
  (0, _globals.expect)(current).toEqual([_globals.expect.any(Object), _globals.expect.any(Function)]);
1875
1871
  });
1872
+ _globals.test.each([{
1873
+ mode: _UseCaseModes.UseCaseModes.Normal,
1874
+ toThrow: ''
1875
+ }, {
1876
+ mode: _UseCaseModes.UseCaseModes.Global,
1877
+ toThrow: ''
1878
+ }, {
1879
+ mode: _UseCaseModes.UseCaseModes.Stateless,
1880
+ toThrow: _UseCaseModeErrors.UseCaseModeErrors.UnsupportedStateless
1881
+ }])('does not support stateless mode', function (_ref10) {
1882
+ var mode = _ref10.mode,
1883
+ toThrow = _ref10.toThrow;
1884
+ (0, _globals.expect)(function () {
1885
+ (0, _react.renderHook)(function () {
1886
+ (0, _.useUseCase)(mathUseCase, mode);
1887
+ });
1888
+ // 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
1889
+ throw '';
1890
+ }).toThrow(toThrow);
1891
+ });
1876
1892
  (0, _globals.test)('the return value should be `reducers` object at child component', function () {
1877
1893
  var onMountA = _globals.jest.fn();
1878
1894
  var A = function A() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mic-rexjs/usecases-react",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "description": "React-based solution for use usecases of Clean Architecture",
5
5
  "private": false,
6
6
  "keywords": [
@@ -1,3 +0,0 @@
1
- import { TransformedGlobalParameters } from './types';
2
- import { GlobalUseCaseHookParameters } from '../../hooks/useGlobalUseCase/types';
3
- export declare const transformGlobalArguments: (args: GlobalUseCaseHookParameters) => TransformedGlobalParameters;
@@ -1,8 +0,0 @@
1
- import { UseCaseModes } from '../../enums/UseCaseModes';
2
- export const transformGlobalArguments = (args) => {
3
- const [arg1, arg2, arg3, arg4] = args;
4
- if (typeof arg2 === 'function') {
5
- return [arg1, arg2, UseCaseModes.Global, arg3, arg4];
6
- }
7
- return [arg1, UseCaseModes.Global, arg2, arg3];
8
- };
@@ -1,2 +0,0 @@
1
- import { ModeCoreCollectionHook, PseudoCoreCollectionHook } from '../../hooks/useUseCase/types';
2
- export type TransformedGlobalParameters = Parameters<ModeCoreCollectionHook> | Parameters<PseudoCoreCollectionHook>;
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.transformGlobalArguments = void 0;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
- var _UseCaseModes = require("../../enums/UseCaseModes");
10
- var transformGlobalArguments = function transformGlobalArguments(args) {
11
- var _args = (0, _slicedToArray2["default"])(args, 4),
12
- arg1 = _args[0],
13
- arg2 = _args[1],
14
- arg3 = _args[2],
15
- arg4 = _args[3];
16
- if (typeof arg2 === 'function') {
17
- return [arg1, arg2, _UseCaseModes.UseCaseModes.Global, arg3, arg4];
18
- }
19
- return [arg1, _UseCaseModes.UseCaseModes.Global, arg2, arg3];
20
- };
21
- exports.transformGlobalArguments = transformGlobalArguments;
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });