UNPKG

vue2-request-utils

Version:

Vue 3 composition API for data fetching. This is a version for Vue 2 by using @vue/composition-api.

10 lines (9 loc) 13.7 kB
/** * vue2-request-utils@1.2.3 * Vue 3 composition API for data fetching. This is a version for Vue 2 by using @vue/composition-api. * @author undefined * @license Apache-2.0 * @see {@link https://github.com/kylee0325/vue2-request-utils#readme} */ import{unref as e,ref as n,computed as r,inject as t,reactive as a,watchEffect as o,watch as u,onUnmounted as i}from"@vue/composition-api";import{debounce as l,throttle as c,merge as v,get as f,omit as s}from"lodash";var d={},p=Symbol("GLOBAL_OPTIONS_PROVIDE_KEY"),y=function(e){Object.keys(e).forEach((function(n){d[n]=e[n]}))},h=function(){return d},g=function(){return(g=Object.assign||function(e){for(var n,r=1,t=arguments.length;r<t;r++)for(var a in n=arguments[r])Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a]);return e}).apply(this,arguments)};function m(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.indexOf(t)<0&&(r[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(t=Object.getOwnPropertySymbols(e);a<t.length;a++)n.indexOf(t[a])<0&&Object.prototype.propertyIsEnumerable.call(e,t[a])&&(r[t[a]]=e[t[a]])}return r}function E(e,n,r,t){return new(r||(r=Promise))((function(a,o){function u(e){try{l(t.next(e))}catch(e){o(e)}}function i(e){try{l(t.throw(e))}catch(e){o(e)}}function l(e){var n;e.done?a(e.value):(n=e.value,n instanceof r?n:new r((function(e){e(n)}))).then(u,i)}l((t=t.apply(e,n||[])).next())}))}function w(e,n){var r,t,a,o,u={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function i(o){return function(i){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;u;)try{if(r=1,t&&(a=2&o[0]?t.return:o[0]?t.throw||((a=t.return)&&a.call(t),0):t.next)&&!(a=a.call(t,o[1])).done)return a;switch(t=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return u.label++,{value:o[1],done:!1};case 5:u.label++,t=o[1],o=[0];continue;case 7:o=u.ops.pop(),u.trys.pop();continue;default:if(!(a=u.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){u=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){u.label=o[1];break}if(6===o[0]&&u.label<a[1]){u.label=a[1],a=o;break}if(a&&u.label<a[2]){u.label=a[2],u.ops.push(o);break}a[2]&&u.ops.pop(),u.trys.pop();continue}o=n.call(e,u)}catch(e){o=[6,e],t=0}finally{r=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,i])}}}function b(e,n,r){if(r||2===arguments.length)for(var t,a=0,o=n.length;a<o;a++)!t&&a in n||(t||(t=Array.prototype.slice.call(n,0,a)),t[a]=n[a]);return e.concat(t||Array.prototype.slice.call(n))}var _=Object.prototype.toString,O=function(e){return _.call(e)},T=function(e){return"[object String]"===O(e)},S=function(e){return"[object Object]"===O(e)},K=function(e){return null!==(n=e)&&"object"==typeof n&&I(e.then)&&I(e.catch);var n},I=function(e){return e instanceof Function},L=function(e){return null==e},R="undefined"==typeof window,j=function(){return!R&&"visible"===window.document.visibilityState},P=function(){return!R&&window.navigator.onLine},q=Promise.resolve(null),k=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return E(void 0,void 0,void 0,(function(){var n;return w(this,(function(r){switch(r.label){case 0:return[4,fetch.apply(void 0,e)];case 1:if((n=r.sent()).ok)return[2,n.json()];throw new Error(n.statusText)}}))}))},D=new Set,U=new Set,F=new Set,N=function(e,n){var r;switch(e){case"FOCUS_LISTENER":r=D;break;case"RECONNECT_LISTENER":r=F;break;case"VISIBLE_LISTENER":r=U}if(!r.has(n))return r.add(n),function(){r.delete(n)}},A=function(e){e.forEach((function(e){e()}))};!R&&window&&window.addEventListener&&(window.addEventListener("visibilitychange",(function(){j()&&A(U)}),!1),window.addEventListener("focus",(function(){return A(D)}),!1),window.addEventListener("online",(function(){return A(F)}),!1));var M=function(e,t,a){var o,u,i=t.initialAutoRunFlag,v=t.initialData,f=t.loadingDelay,s=t.pollingInterval,d=t.debounceInterval,p=t.throttleInterval,y=t.pollingWhenHidden,h=t.pollingWhenOffline,g=t.errorRetryCount,m=t.errorRetryInterval,E=t.stopPollingWhenHiddenOrOffline,w=t.refreshOnWindowFocus,b=t.refocusTimespan,_=t.updateCache,O=t.formatResult,T=t.onSuccess,S=t.onError,K=n(0),R=n(a&&a.loading||!1),k=n(a&&a.data||v),D=n(a&&a.error),U=n(a&&a.params||[]),F=(o={loading:R,data:k,error:D,params:U},u=[function(e){return _(e)}],function(e){Object.keys(e).forEach((function(n){o[n].value=e[n]})),u.forEach((function(e){return e(o)}))}),A=function(){K.value=0},M=n(0),Y=n(),C=n(),W=n(),x=function(){Y.value&&Y.value(),W.value&&W.value(),C.value&&C.value()},Q=function(){var e;return f&&(e=window.setTimeout(F,f,{loading:!0})),function(){return e&&clearTimeout(e)}},z=function(e){if(!D.value||0===g){var n;if(!L(s)&&s>=0){if(!y&&!j()||!h&&!P())return void(E.value=!0);n=window.setTimeout(e,s)}return function(){return n&&clearTimeout(n)}}},H=r((function(){if(m)return m;return 1e3*Math.floor(Math.random()*Math.pow(2,Math.min(K.value,9))+1)})),B=function(e){var n,r=-1===g,t=K.value<g;return D.value&&(r||t)&&(r||(K.value+=1),n=window.setTimeout(e,H.value)),function(){return n&&clearTimeout(n)}},V=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];F({loading:!f,params:n}),W.value=Q(),M.value+=1;var t=M.value;return e.apply(void 0,n).then((function(e){if(t===M.value){var r=O?O(e):e;return F({data:r,loading:!1,error:void 0}),T&&T(r,n),A(),r}return q})).catch((function(e){return t===M.value&&(F({data:void 0,loading:!1,error:e}),S&&S(e,n),console.error(e)),q})).finally((function(){t===M.value&&(W.value(),C.value=B((function(){return V.apply(void 0,n)})),Y.value=z((function(){return V.apply(void 0,n)})))}))},G=!L(d)&&l(V,d),J=!L(p)&&c(V,p),X=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return x(),!i.value&&G?(G.apply(void 0,e),q):J?(J.apply(void 0,e),q):(A(),V.apply(void 0,e))},Z=function(){return X.apply(void 0,U.value)},$=[],ee=function(e){e&&$.push(e)},ne=function(){E.value&&(y||j())&&(h||P())&&(Z(),E.value=!1)};y||ee(N("VISIBLE_LISTENER",ne)),h||ee(N("RECONNECT_LISTENER",ne));var re,te,ae,oe=(re=Z,te=b,ae=!1,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];ae||(ae=!0,re.apply(void 0,e),setTimeout((function(){ae=!1}),te))});w&&(ee(N("VISIBLE_LISTENER",oe)),ee(N("FOCUS_LISTENER",oe)));return{loading:R,data:k,error:D,params:U,run:X,cancel:function(){M.value+=1,F({loading:!1}),G&&G.cancel(),J&&J.cancel(),x()},refresh:Z,mutate:function(e){var n=I(e)?e(k.value):e;F({data:n})},unmount:function(){$.forEach((function(e){return e()}))}}},Y=new Map,C=function(e){if(!L(e)){var n=Y.get(e);if(n)return{data:n.data,cacheTime:n.cacheTime}}};function W(l,c){var v,f=t(p,{}),s=g(g(g({},h()),f),c),d=s.initialData,y=s.pollingInterval,m=s.debounceInterval,E=s.throttleInterval,w=s.cacheKey,b=s.defaultParams,_=void 0===b?[]:b,O=s.manual,T=void 0!==O&&O,S=s.ready,K=void 0===S?n(!0):S,I=s.refreshDeps,L=void 0===I?[]:I,R=s.loadingDelay,j=void 0===R?0:R,P=s.pollingWhenHidden,k=void 0!==P&&P,D=s.pollingWhenOffline,U=void 0!==D&&D,F=s.refreshOnWindowFocus,N=void 0!==F&&F,A=s.refocusTimespan,W=void 0===A?5e3:A,x=s.cacheTime,Q=void 0===x?6e5:x,z=s.staleTime,H=void 0===z?0:z,B=s.errorRetryCount,V=void 0===B?0:B,G=s.errorRetryInterval,J=void 0===G?0:G,X=s.queryKey,Z=s.formatResult,$=s.onSuccess,ee=s.onError,ne=n(!1),re=n(!1),te={initialAutoRunFlag:re,initialData:d,loadingDelay:j,pollingInterval:y,debounceInterval:m,throttleInterval:E,pollingWhenHidden:k,pollingWhenOffline:U,stopPollingWhenHiddenOrOffline:ne,cacheKey:w,errorRetryCount:V,errorRetryInterval:J,refreshOnWindowFocus:N,refocusTimespan:W,updateCache:function(n){var r;if(w){var t,a,o=C(w),u=o&&o.data||{},i=u&&u.queries||{},l=(t=n,a={},Object.keys(t).forEach((function(n){a[n]=e(t[n])})),a),c=X?X.apply(void 0,n.params.value):"__QUERY_DEFAULT_KEY__";!function(e,n,r){var t=Y.get(e);t&&t.timer&&clearTimeout(t.timer);var a=window.setTimeout((function(){return Y.delete(e)}),r);Y.set(e,{data:n,timer:a,cacheTime:(new Date).getTime()})}(w,{queries:g(g({},i),(r={},r[c]=g(g({},i?i[c]:null),l),r)),latestQueriesKey:c},Q)}},formatResult:Z,onSuccess:$,onError:ee},ae=n(!1),oe=n(),ue=n(),ie=n(),le=a(((v={}).__QUERY_DEFAULT_KEY__=a(M(l,te)),v)),ce=n("__QUERY_DEFAULT_KEY__"),ve=r((function(){return le[ce.value]||{}}));if(o((function(){ae.value=ve.value.loading,oe.value=ve.value.data,ue.value=ve.value.error,ie.value=ve.value.params}),{flush:"pre"}),w){var fe=C(w);fe&&fe.data&&fe.data.queries&&(Object.keys(fe.data.queries).forEach((function(e){var n=fe.data.queries[e];le[e]=a(M(l,te,{loading:n.loading,params:n.params,data:n.data,error:n.error}))})),fe.data.latestQueriesKey&&(ce.value=fe.data.latestQueriesKey))}var se=n(),de=n(!1),pe=function(){for(var e,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];if(!K.value&&!de.value)return se.value=n,q;var t=X?X.apply(void 0,n):"__QUERY_DEFAULT_KEY__";return le[t]||(le[t]=a(M(l,te))),ce.value=t,(e=ve.value).run.apply(e,n)},ye=function(){Object.keys(le).forEach((function(e){le[e].cancel(),le[e].unmount(),delete le[e]}))};if(!T){re.value=!0;var he=C(w),ge=he&&he.data.queries||{},me=he&&(-1===H||he.cacheTime+H>(new Date).getTime()),Ee=Object.keys(ge).length>0;me||(Ee?Object.keys(le).forEach((function(e){le[e]&&le[e].refresh()})):pe.apply(void 0,_)),re.value=!1}var we=n();return we.value=u(K,(function(e){de.value=!0,e&&se.value&&(pe.apply(void 0,se.value),we.value())}),{flush:"sync"}),L.length&&u(L,(function(){!T&&ve.value.refresh()})),i((function(){ye()})),{loading:ae,data:oe,error:ue,params:ie,cancel:function(){return ve.value.cancel()},refresh:function(){return ve.value.refresh()},mutate:function(e){return ve.value.mutate(e)},run:pe,reset:function(){ye(),ce.value="__QUERY_DEFAULT_KEY__",le.__QUERY_DEFAULT_KEY__=a(M(l,te))},queries:le}}var x=function(e){var n;if(I(e))n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var t,a=e.apply(void 0,n);if(K(a))t=a;else if(S(a)){var o=a.url,u=m(a,["url"]);t=k(o,u)}else{if(!T(a))throw new Error("Unknown service type");t=k(a)}return new Promise((function(e,n){t.then(e).catch(n)}))};else if(S(e)){var r=e.url,t=m(e,["url"]);n=function(){return k(r,t)}}else{if(!T(e))throw Error("Unknown service type");n=function(){return k(e)}}return n};function Q(e,n){var r=W(x(e),n||{}),t=r.reset,a=r.run,o=m(r,["reset","run"]);return g({reload:function(){var e=n,r=e.defaultParams,o=void 0===r?[]:r,u=e.manual;t(),!u&&a.apply(void 0,o)},run:a},o)}function z(e,n){var a,o=x(e),u=t(p,{}),i=v({pagination:{currentKey:"current",pageSizeKey:"pageSize",totalKey:"total",totalPageKey:"totalPage"}},{pagination:h().pagination||{}},{pagination:u.pagination||{}},n||{}),l=i.pagination,c=l.currentKey,s=l.pageSizeKey,d=l.totalKey,y=l.totalPageKey,E=i.queryKey,w=m(i,["pagination","queryKey"]);if(E)throw new Error("usePagination does not support concurrent request");var _=g({defaultParams:[(a={},a[c]=1,a[s]=10,a)]},w),O=W(o,_),T=O.data,S=O.params;O.queries;var K=O.run,I=O.reset,L=m(O,["data","params","queries","run","reset"]),R=function(e){var n=S.value,r=n[0],t=n.slice(1),a=b([g(g({},r),e)],t,!0);K.apply(void 0,a)},j=function(e){var n;R(((n={})[c]=e,n))},P=function(e){var n;R(((n={})[s]=e,n))},q=r((function(){return f(T.value,d,0)})),k=r({get:function(){var e=S.value[0];return e&&e[c]||0},set:function(e){j(e)}}),D=r({get:function(){var e=S.value[0];return e&&e[s]||10},set:function(e){P(e)}}),U=r((function(){return f(T.value,y,Math.ceil(q.value/D.value))}));return g({data:T,params:S,current:k,pageSize:D,total:q,totalPage:U,run:K,changeCurrent:j,changePageSize:P,reload:function(){var e=_.defaultParams,n=_.manual;I(),!n&&K.apply(void 0,e)}},L)}function H(e,a){var u=this;if(!I(e))throw new Error("useLoadMore only support function service");var i=x(e),l=t(p,{}),c=Object.assign({listKey:l.listKey||h().listKey},a||{}),v=c.queryKey,d=c.isNoMore,y=c.listKey,_=void 0===y?"list":y,O=m(c,["queryKey","isNoMore","listKey"]);if(v)throw new Error("useLoadMore does not support concurrent request");var T=n(!1),S=n(!1),K=n(0),L=W(i,g(g({},O),{onSuccess:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];S.value=!1,K.value++,O&&O.onSuccess&&O.onSuccess.apply(O,e)},onError:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];S.value=!1,O&&O.onError&&O.onError.apply(O,e)},queryKey:function(){return String(K.value)}})),R=L.data,j=L.params,P=L.queries,q=L.run,k=L.reset,D=L.cancel,U=m(L,["data","params","queries","run","reset","cancel"]),F=n(R.value);o((function(){void 0!==R.value&&(F.value=R.value)}));var N=r((function(){return!(!d||!I(d))&&d(F.value)})),A=r((function(){var e=[];return Object.values(P).forEach((function(n){var r=f(n.data,_);r&&Array.isArray(r)&&(e=e.concat(r))})),e}));return g({data:F,dataList:A,params:j,noMore:N,loadingMore:S,refreshing:T,run:q,reload:function(){k(),K.value=0,F.value=void 0;var e=b([void 0],j.value.slice(1),!0);q.apply(void 0,e)},loadMore:function(){if(!N.value){S.value=!0;var e=j.value.slice(1),n=b([{dataList:A.value,data:F.value}],e,!0);q.apply(void 0,n)}},reset:k,refresh:function(){return E(u,void 0,void 0,(function(){var e,n,r,t,a;return w(this,(function(o){switch(o.label){case 0:return T.value=!0,e=K.value-1,n=e<0?0:e,F.value=P[n].data,K.value=0,r=j.value,t=r.slice(1),a=b([void 0],t,!0),[4,q.apply(void 0,a)];case 1:return o.sent(),Object.keys(P).forEach((function(e){e!==(0).toString()&&(P[e].cancel(),P[e].unmount(),delete P[e])})),T.value=!1,[2]}}))}))},cancel:function(){D(),S.value=!1,T.value=!1}},s(U,["refresh","mutate"]))}export{y as setGlobalOptions,H as useLoadMore,z as usePagination,Q as useRequest}; //# sourceMappingURL=index.js.map