@bgscore/react-core 0.0.13 → 0.0.14
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.cjs +1 -1
- package/dist/index.d.cts +21 -2
- package/dist/index.d.ts +21 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var j=require('moment'),V=require('react'),jsxRuntime=require('react/jsx-runtime'),te=require('crypto-js/aes'),re=require('crypto-js/pbkdf2'),he=require('crypto-js/enc-utf8'),K=require('crypto-js/enc-base64'),ee=require('crypto-js/lib-typedarrays'),Ke=require('axios');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var j__default=/*#__PURE__*/_interopDefault(j);var V__default=/*#__PURE__*/_interopDefault(V);var te__default=/*#__PURE__*/_interopDefault(te);var re__default=/*#__PURE__*/_interopDefault(re);var he__default=/*#__PURE__*/_interopDefault(he);var K__default=/*#__PURE__*/_interopDefault(K);var ee__default=/*#__PURE__*/_interopDefault(ee);var Ke__default=/*#__PURE__*/_interopDefault(Ke);function $e(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function je(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var We=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function ze(e,t){let n=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(n=true):n=true),n}function q(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var Y={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let n=e.replace(/_([a-z])/g,(o,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return n=n.charAt(0).toUpperCase()+n.slice(1),n},changeAll:(e="",t=false)=>{let n="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],n=Y.snackCase(Y.camelCase(e)),t&&(n=n?.split(" ")?.map(o=>o?.length<=3?o?.toUpperCase():o)?.join(" "));}catch{}return n?.trim()}};function Ve(e,t){return typeof e=="function"?e(t):e}var O=(e,t,n="")=>{if(!e)return n;if(e.hasOwnProperty(t))return e[t];let o=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let r of o){if(s==null)return n;s=s[r];}return s===void 0?n:s},Je={desc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=O(n,t)?O(n,t):"",r=O(o,t)?O(n,t):"";return s<r?1:-1}else return n<o?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=O(n,t)?O(n,t):"",r=O(o,t)?O(o,t):"";return s>r?1:-1}else return n>o?1:-1}))},Ge=(e,t)=>{Array.isArray(e)||(e=[]);let n=[];return n=e.map(o=>Number(t?O(o,t)||0:o||0)),n.reduce((o,s)=>(o||0)+(s||0),0)||0};function Xe(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function de(e){let t=new WeakSet;return JSON.stringify(e,function(n,o){return o!==null&&typeof o=="object"?t.has(o)?void 0:(t.add(o),Object.keys(o).sort().reduce((s,r)=>(s[r]=o[r],s),{})):o})??""}function _(e,t){return de([t??"undefined",e??"undefined"])}function Z(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function Ye(e,t=0){let n;return function(...o){clearTimeout(n),n=setTimeout(()=>{e(...o);},t*1e3);}}var Q=V.createContext(void 0);function N(){let e=V.useContext(Q);return e||{}}var ge=({children:e,value:t})=>{let n={...t};return jsxRuntime.jsx(Q.Provider,{value:n,children:e})};function H(e,t){let n=ee__default.default.random(16),o=ee__default.default.random(16),s=re__default.default(t,n,{keySize:256/32,iterations:1e3}),r=te__default.default.encrypt(JSON.stringify(e),s,{iv:o}).toString();return {salt:n.toString(K__default.default),iv:o.toString(K__default.default),encrypted:r}}function I(e,t){let{salt:n,iv:o,encrypted:s}=e,r=re__default.default(t,K__default.default.parse(n),{keySize:256/32,iterations:1e3}),i=te__default.default.decrypt(s,r,{iv:K__default.default.parse(o)}).toString(he__default.default);return JSON.parse(i)}function ne(e,t){return JSON.stringify(H(e,t))}function oe(e,t){return I(JSON.parse(e),t)}function F(){let{passphrase:e}=N();return {passphrase:e,encrypt(t,n){return H(t,n||e)},decrypt(t,n){return I(t,n||e)},encryptString(t,n){return ne(t,n||e)},decryptString(t,n){return oe(t,n||e)}}}var se=()=>{let{encrypt:e,decrypt:t}=F(),n=V.useCallback((u,i)=>{try{let d=e(i);localStorage.setItem(u,JSON.stringify(d));}catch(d){console.error("Failed to save to storage:",d);}},[e]),o=V.useCallback(u=>{try{let i=localStorage.getItem(u);return i?t(JSON.parse(i)):null}catch(i){return console.error("Failed to get from storage:",i),null}},[t]),s=u=>{let[i,d]=V.useState(()=>{try{let p=localStorage.getItem(u);return p?t(JSON.parse(p)):null}catch(p){return console.error("Failed to parse localStorage value",p),null}});return V.useEffect(()=>{let p=g=>{if(g.key===u)if(g.newValue)try{d(t(JSON.parse(g.newValue)));}catch(P){console.error("Decrypt error from storage event",P);}else d(null);};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[u,t]),i},r=V.useCallback(u=>{u?localStorage.removeItem(u):localStorage.clear();},[]);return {save:n,get:o,clear:r,useWatchStorage:s}};function ae(e){let t=e,n=new Set;function o(){return t}function s(i){return n.add(i),()=>n.delete(i)}function r(i){typeof i=="function"?t=i(t):t=i,n.forEach(d=>d());}function u(i){return V.useSyncExternalStore(s,()=>i?i(t):t,()=>i?i(t):t)}return {getSnapshot:o,subscribe:s,setState:r,useStore:u}}var $=new Map;function M(e){return $.has(e)||$.set(e,ae([null,{}])),$.get(e)}function Ae(e,t,n){let o=arguments.length===3,s=o?t:void 0,r=o?n:t,{storageKey:u,cache:i}=N(),d=se(),[p,g]=V.useState(false),[P,b]=V.useState(false),[x,C]=V.useState(),R=V.useRef(void 0),T=V.useRef(null),{cacheName:S,cacheKey:A,timeout:J,timeoutUnit:G,persistence:X}=V.useMemo(()=>{let l=u?d.get(u):void 0,a=typeof r?.cache=="object"?r?.cache?.cacheName??e.name:e.name,f=_({...s,session:l},typeof r?.cache=="object"?r?.cache?.cacheKey:void 0),y=false;typeof i?.persistence=="boolean"&&(y=i?.persistence),typeof r?.cache=="object"&&typeof r?.cache?.persistence=="boolean"&&(y=r?.cache?.persistence??false);let h=60*5,c="s";return q(i?.timeout)&&(typeof i?.timeout=="number"?(h=i.timeout,c="s"):typeof i?.timeout=="object"&&(h=i?.timeout.value,c=i?.timeout.unit)),r?.cache&&typeof r.cache!="boolean"&&(typeof r.cache.timeout=="number"?(h=r.cache.timeout,c="s"):typeof r.cache.timeout=="object"&&(h=r.cache.timeout.value,c=r.cache.timeout.unit)),{cacheName:a,cacheKey:f,timeout:h,timeoutUnit:c,persistence:y}},[r?.cache,u,i]);V.useEffect(()=>{let l=JSON.stringify(q(R.current)?R.current:""),a=JSON.stringify(q(s)?s:""),f=R.current===void 0;(l!==a||f)&&!r?.hold&&(C(null),U(),R.current=s),r?.onChange&&r?.onChange(s,m);},[s,r?.hold,...r?.trigger||[]]),V.useEffect(()=>{let l=async()=>{!X&&S&&A&&(await caches.open(S)).delete(A);};return window.addEventListener("beforeunload",l),()=>{window.removeEventListener("beforeunload",l),T.current?.abort();}},[]);let U=V.useCallback(async l=>{let a=s;if(r?.hold&&r?.logging&&console.log("Hold active"),r?.beforeRequest&&(a=r?.beforeRequest(s)),r?.cache&&!l&&!P){g(true),r?.onBeforeRequest&&r?.onBeforeRequest(s);let f=await caches.open(S),h=await(await f.match(A))?.json();if(h){let{data:c,expired:w}=h;if(j__default.default().isAfter(w))await f.delete(A);else {r?.afterResponse&&c?.data&&(c.data=r?.afterResponse(c.data)),r?.logging&&console.log("After request: Using Cache",c),r?.onAfterResponse&&r?.onAfterResponse(c),g(false),C(c);return}}}if(typeof e=="function"){T.current?.abort();let f=new AbortController;T.current=f,g(true),r?.logging&&console.log("Before request",s),r?.onBeforeRequest&&r?.onBeforeRequest(s);let y=o?await e(a,void 0,{...r,signal:f.signal}):await e(void 0,{...r,signal:f.signal});if(r?.afterResponse&&y?.data&&(y.data=r?.afterResponse(y.data)),r?.logging&&console.log("After request",y),r?.onAfterResponse&&r?.onAfterResponse(y),g(false),C(y),b(false),r?.cache&&y.status){let h=j__default.default().add(J,G).toISOString(),c={data:y,expired:h},w=await caches.open(S),E=new Response(JSON.stringify(c));await w.put(A,E);}}},[s,e,r]);V.useEffect(()=>{if(r?.refreshInterval){let l=typeof r.refreshInterval=="number"?r.refreshInterval:r.refreshInterval.value,a=typeof r.refreshInterval=="number"?"s":r.refreshInterval.unit,f=setInterval(()=>{U();},j__default.default.duration(l,a).asMilliseconds());return ()=>clearInterval(f)}return ()=>{}},[r?.refreshInterval,U]),V.useEffect(()=>{if(!r?.refetchOnWindowFocus)return;let l=()=>{U();};return window.addEventListener("focus",l),()=>{window.removeEventListener("focus",l);}},[r?.refetchOnWindowFocus,U]);let m={...x,loading:p,refresh:U,abort:()=>{T.current?.abort(),T.current=null,g(false),b(true);},clear:()=>{g(false),C(null);},response:x,isCancel:P,clone:(l,a)=>Ae(e,l,a)};return V.useEffect(()=>{r?.storeName&&M(r?.storeName).setState([x?.data,m]);},[x,m,r?.storeName]),[x?.data,m]}async function St(e,t=()=>{}){let n=e*1e3;return new Promise(o=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),o(true);},n);})}var Pe=(r=>(r.POST="POST",r.PUT="PUT",r.PATCH="PATCH",r.DELETE="DELETE",r.GET="GET",r))(Pe||{}),Se=(a=>(a.number="number",a.currency="currency",a.percent="percent",a.date="date",a.dateTime="dateTime",a.month="month",a.year="year",a.time="time",a.timestamp="timestamp",a.string="string",a.textarea="textarea",a.code="code",a.password="password",a.boolean="boolean",a.toggle="toggle",a.email="email",a.phone="phone",a.url="url",a.json="json",a.file="file",a.image="image",a.array="array",a.object="object",a.enum="enum",a.user="user",a.department="department",a.status="status",a))(Se||{});var kt=(e,t,n)=>{let{format:o}=N();return t==="number"?Ue(e,{thouSep:o.number.thouSep,decDigits:o.number.decDigits,decSep:o.number.decSep,...n}):["date","dateTime","month","year","time"].some(s=>s===t)?Ne(e,{display:o[t]?.display,value:o[t]?.value,...n}):t==="boolean"?qe(e,n):t==="string"?we(e,n):e?.toString()??""};function qe(e,t){let n=typeof e=="string"?e==="true":!!e,o=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return n?o:s}function we(e,t){if(!q(e))return "";let n=String(e);switch(t?.textTransform){case "capitalize":n=Z(n);break;case "uppercase":n=n.toUpperCase();break;case "lowercase":n=n.toLowerCase();break}return t?.ellipsis&&n.length>t.ellipsis&&(n=n.slice(0,t.ellipsis)+"..."),n}function Ue(e,{thouSep:t,decSep:n,decDigits:o,method:s}){if(e==null||isNaN(Number(e)))return "";let r=typeof e=="string"?parseFloat(e):e;if(s)if(typeof o=="number"){let p=Math.pow(10,o);r=Math[s](r*p)/p;}else r=Math[s](r);else if(typeof o=="number"){let p=Math.pow(10,o);r=Math.floor(r*p)/p;}let u=0;if(o==="auto"){let p=r.toString(),g=p.indexOf(".");g!==-1&&(u=p.length-g-1);}let i={style:"decimal",useGrouping:true,minimumFractionDigits:o==="auto"?u:o||0,maximumFractionDigits:o==="auto"?u:o||0,minimumIntegerDigits:1};return r.toLocaleString("en-US",i).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,n).replace(/thouSep/g,t)}function Ne(e,{display:t,value:n}){if(!q(e))return e;let o=j__default.default(e,n);return o.isValid()?o.format(t):e}function Kt(e,{interval:t,lead:n}){let o=V.useRef(null);V.useEffect(()=>{o.current=e;},[e]),V.useEffect(()=>{let s=()=>o.current();if(n&&s(),t!==null){let r=setInterval(s,t);return ()=>clearInterval(r)}},[t]);}function Bt(e,t,n){let[o,s]=V.useState(false),r=(p,g)=>typeof e=="string"&&p===e||typeof e=="number"&&g===e,u=p=>p!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(p.tagName)||p.hasAttribute("contentEditable")),i=p=>{let{key:g,keyCode:P}=p,b=p.ctrlKey,x=p.altKey,C=p.shiftKey;if(!u(document.activeElement))if(t)if(typeof t=="string")r(g,P)&&(t==="ctrl"&&b||t==="alt"&&x||t==="shift"&&C)&&(p.preventDefault(),n&&p.stopPropagation(),s(!o));else {let R=t.every(T=>T==="ctrl"?b:T==="alt"?x:T==="shift"?C:false);r(g,P)&&R&&(p.preventDefault(),n&&p.stopPropagation(),s(!o));}else r(g,P)&&(p.preventDefault(),n&&p.stopPropagation(),s(!o));},d=({key:p,keyCode:g})=>{r(p,g)&&s(false);};return V.useEffect(()=>(window.addEventListener("keydown",i),window.addEventListener("keyup",d),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",d);}),[]),o}var zt=({url:e,token:t,beforeRequest:n,onCallback:o,headers:s,onUnauthorized:r,handleToast:u,handleAuthorization:i,disabledToastWhenCancel:d,withCredentials:p,encryptRequest:g,encryptResponse:P,passphrase:b})=>{let{encrypt:x,decrypt:C,passphrase:R}=F(),T=(m,l,a,f)=>{let y=f?.code==="ERR_CANCELED",h=m.status===401,c=m?.data;if((typeof a?.encryptResponse=="boolean"?a?.encryptResponse:P)&&c){let v=a?.passphrase?typeof a.passphrase=="boolean"&&a.passphrase?R:a.passphrase:b;try{c=C(c,v);}catch{try{c=C(c,R);}catch{}}}let D={...o({...m,data:c,isCancel:y,isUnauthorization:h},f),isCancel:y,isUnauthorization:h,httpCode:m.status},B=typeof a?.disabledToastWhenCancel=="boolean"?a?.disabledToastWhenCancel:d,fe=i?i(D,a):!h;if((a?.infoSuccess&&D.status||a?.infoError&&!D.status)&&u&&(!y||!B)&&u(D),!fe&&(!y||!a?.disabledHandleUnauthorized)){let v=a?.onUnauthorized||r;v&&v(D);}if(l)l(D);else return D},S=(m,l=()=>{})=>Ke__default.default.create({baseURL:`${e}`,withCredentials:typeof m.withCredentials=="boolean"?m.withCredentials:p})(m).then(l).catch(f=>l(f.response,f)),A=(m,l,a,f,y)=>{let c={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...y},w={"Content-Type":"application/json",...s,...c.headers};if(c.token&&(typeof c.token=="boolean"?t&&(w.Authorization=`Bearer ${t}`):c.token&&(w.Authorization=`Bearer ${c.token}`)),n&&(a=n(a)),(typeof c?.encryptRequest=="boolean"?c?.encryptRequest:g)&&a){let D=y?.passphrase?typeof y.passphrase=="boolean"&&y.passphrase?R:y.passphrase:b;a=x(a,D);}return S({url:l,method:m,data:a,headers:w,responseType:c.responseType,signal:c.signal,withCredentials:c.withCredentials,onUploadProgress:D=>{c?.onUploadProgress&&c?.onUploadProgress(D);}},(D,B)=>T(D,f,c,B))};return {client:S,post:(m,l,a,f)=>A("POST",`${m}`,l,a,f),put:(m,l,a,f)=>A("PUT",`${m}`,l,a,f),patch:(m,l,a,f)=>A("PATCH",`${m}`,l,a,f),delete:(m,l,a)=>A("DELETE",`${m}`,null,l,a),get:(m,l,a)=>A("GET",`${m}`,null,l,a),upload:(m,l,a,f)=>{let y=new FormData;return Object.keys(l).forEach(h=>y.append(h,l[h])),A("POST",`${m}`,y,a,{infoSuccess:false,...f,headers:{"Content-Type":"multipart/form-data",...f?.headers}})}}};function Xt(e,t){let[n,o]=V.useState(false),[s,r]=V.useState(),[u,i]=V.useState(0),d=V.useRef(null);return V.useEffect(()=>{if(t?.abortOnUnmount)return ()=>{d.current?.abort();}},[]),[async b=>{d.current?.abort();let x=new AbortController;d.current=x,o(true),t?.beforeRequest&&(b=t?.beforeRequest(b)),t?.logging&&console.log("Before request",b);let C={...t,signal:x.signal,onUploadProgress:T=>{let S=Math.round(T.loaded*100/(T.total||1));i(S);}},R=q(b)?await e(b,void 0,C):await e(void 0,C);t?.logging&&console.log("After response",R),r(R),o(false),i(0),R.status&&t?.onSuccess&&t?.onSuccess(R),!R.status&&t?.onError&&t?.onError(R),t?.afterResponse&&t?.afterResponse(R);},{...s,loading:n,abort:()=>{d.current?.abort(),d.current=null,o(false),i(0);},progress:u,reset:()=>{o(false),i(0),r(null);}}]}function Be(e,t){let{disableHysteresis:n=false,threshold:o=100,target:s}=t,r=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!n&&r!==void 0&&e.current<r?false:(e.current||0)>o}var He=typeof window<"u"?window:null;function Zt(e={}){let{getTrigger:t=Be,target:n=He,disableHysteresis:o=false,threshold:s=100}=e,r=V__default.default.useRef(0),[u,i]=V__default.default.useState(()=>t(r,{disableHysteresis:o,threshold:s,target:n}));return V__default.default.useEffect(()=>{let d=()=>{i(t(r,{disableHysteresis:o,threshold:s,target:n}));};if(d(),n)return n.addEventListener("scroll",d,{passive:true}),()=>{n.removeEventListener("scroll",d);}},[n,t,o,s]),u}var tr=(e,t)=>M(t).useStore();var or=(e,t)=>{let n=o=>e(o);return n.displayName=t,n},sr=(e,t)=>{let n={};n.others=[];let o=s=>{V__default.default.Children.forEach(s,r=>{if(V__default.default.isValidElement(r)){let u=r.type.displayName;if(t.includes(u))n[u]=r;else {let i=r;i.props?.children?o(i.props.children):n.others.push(r);}}else n.others.push(r);});};return o(e),n};exports.BgsCoreProvider=ge;exports.DataTypeEnum=Se;exports.HttpMethod=Pe;exports.capitalizeWords=Z;exports.createApiHelper=zt;exports.createElement=or;exports.createStore=ae;exports.debounce=Ye;exports.decrypt=I;exports.decryptString=oe;exports.diffJson=je;exports.encrypt=H;exports.encryptString=ne;exports.generateCacheKey=_;exports.generateUUID=$e;exports.getFieldValue=O;exports.isArray=ze;exports.isNotEmpty=q;exports.jsonCopy=Xe;exports.labelFormatter=Y;exports.mappingUndefinedtoNull=We;exports.renderChildren=Ve;exports.sorting=Je;exports.splitElement=sr;exports.stableStringify=de;exports.summary=Ge;exports.useApiLoad=Ae;exports.useApiSend=Xt;exports.useApiStore=tr;exports.useBgsCore=N;exports.useCrypto=F;exports.useDelay=St;exports.useFormatted=kt;exports.useInterval=Kt;exports.useKeyPress=Bt;exports.useScrollTrigger=Zt;exports.useStorage=se;
|
|
1
|
+
'use strict';var j=require('moment'),V=require('react'),jsxRuntime=require('react/jsx-runtime'),te=require('crypto-js/aes'),re=require('crypto-js/pbkdf2'),he=require('crypto-js/enc-utf8'),K=require('crypto-js/enc-base64'),ee=require('crypto-js/lib-typedarrays'),Ke=require('axios');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var j__default=/*#__PURE__*/_interopDefault(j);var V__default=/*#__PURE__*/_interopDefault(V);var te__default=/*#__PURE__*/_interopDefault(te);var re__default=/*#__PURE__*/_interopDefault(re);var he__default=/*#__PURE__*/_interopDefault(he);var K__default=/*#__PURE__*/_interopDefault(K);var ee__default=/*#__PURE__*/_interopDefault(ee);var Ke__default=/*#__PURE__*/_interopDefault(Ke);function je(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function We(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var ze=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function Ve(e,t){let r=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(r=true):r=true),r}function q(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var X={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let r=e.replace(/_([a-z])/g,(o,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return r=r.charAt(0).toUpperCase()+r.slice(1),r},changeAll:(e="",t=false)=>{let r="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],r=X.snackCase(X.camelCase(e)),t&&(r=r?.split(" ")?.map(o=>o?.length<=3?o?.toUpperCase():o)?.join(" "));}catch{}return r?.trim()}};function Je(e,t){return typeof e=="function"?e(t):e}var O=(e,t,r="")=>{if(!e)return r;if(e.hasOwnProperty(t))return e[t];let o=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let n of o){if(s==null)return r;s=s[n];}return s===void 0?r:s},_e={desc:(e,t)=>(e||(e=[]),e.sort((r,o)=>{if(t){let s=O(r,t)?O(r,t):"",n=O(o,t)?O(r,t):"";return s<n?1:-1}else return r<o?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((r,o)=>{if(t){let s=O(r,t)?O(r,t):"",n=O(o,t)?O(o,t):"";return s>n?1:-1}else return r>o?1:-1}))},Ge=(e,t)=>{Array.isArray(e)||(e=[]);let r=[];return r=e.map(o=>Number(t?O(o,t)||0:o||0)),r.reduce((o,s)=>(o||0)+(s||0),0)||0};function Xe(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function de(e){let t=new WeakSet;return JSON.stringify(e,function(r,o){return o!==null&&typeof o=="object"?t.has(o)?void 0:(t.add(o),Object.keys(o).sort().reduce((s,n)=>(s[n]=o[n],s),{})):o})??""}function Y(e,t){return de([t??"undefined",e??"undefined"])}function Z(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function Ye(e,t=0){let r;return function(...o){clearTimeout(r),r=setTimeout(()=>{e(...o);},t*1e3);}}var Q=V.createContext(void 0);function N(){let e=V.useContext(Q);return e||{}}var ge=({children:e,value:t})=>{let r={...t};return jsxRuntime.jsx(Q.Provider,{value:r,children:e})};function H(e,t){let r=ee__default.default.random(16),o=ee__default.default.random(16),s=re__default.default(t,r,{keySize:256/32,iterations:1e3}),n=te__default.default.encrypt(JSON.stringify(e),s,{iv:o}).toString();return {salt:r.toString(K__default.default),iv:o.toString(K__default.default),encrypted:n}}function I(e,t){let{salt:r,iv:o,encrypted:s}=e,n=re__default.default(t,K__default.default.parse(r),{keySize:256/32,iterations:1e3}),i=te__default.default.decrypt(s,n,{iv:K__default.default.parse(o)}).toString(he__default.default);return JSON.parse(i)}function ne(e,t){return JSON.stringify(H(e,t))}function oe(e,t){return I(JSON.parse(e),t)}function F(){let{passphrase:e}=N();return {passphrase:e,encrypt(t,r){return H(t,r||e)},decrypt(t,r){return I(t,r||e)},encryptString(t,r){return ne(t,r||e)},decryptString(t,r){return oe(t,r||e)}}}var se=()=>{let{encrypt:e,decrypt:t}=F(),r=V.useCallback((u,i)=>{try{let d=e(i);localStorage.setItem(u,JSON.stringify(d));}catch(d){console.error("Failed to save to storage:",d);}},[e]),o=V.useCallback(u=>{try{let i=localStorage.getItem(u);return i?t(JSON.parse(i)):null}catch(i){return console.error("Failed to get from storage:",i),null}},[t]),s=u=>{let[i,d]=V.useState(()=>{try{let p=localStorage.getItem(u);return p?t(JSON.parse(p)):null}catch(p){return console.error("Failed to parse localStorage value",p),null}});return V.useEffect(()=>{let p=g=>{if(g.key===u)if(g.newValue)try{d(t(JSON.parse(g.newValue)));}catch(P){console.error("Decrypt error from storage event",P);}else d(null);};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[u,t]),i},n=V.useCallback(u=>{u?localStorage.removeItem(u):localStorage.clear();},[]);return {save:r,get:o,clear:n,useWatchStorage:s}};function ae(e){let t=e,r=new Set;function o(){return t}function s(i){return r.add(i),()=>r.delete(i)}function n(i){typeof i=="function"?t=i(t):t=i,r.forEach(d=>d());}function u(i){return V.useSyncExternalStore(s,()=>i?i(t):t,()=>i?i(t):t)}return {getSnapshot:o,subscribe:s,setState:n,useStore:u}}var $=new Map;function M(e){return $.has(e)||$.set(e,ae([null,{}])),$.get(e)}function Ae(e,t,r){let o=arguments.length===3,s=o?t:void 0,n=o?r:t,{storageKey:u,cache:i}=N(),d=se(),[p,g]=V.useState(false),[P,b]=V.useState(false),[x,C]=V.useState(),R=V.useRef(void 0),T=V.useRef(null),{cacheName:S,cacheKey:A,timeout:J,timeoutUnit:_,persistence:G}=V.useMemo(()=>{let l=u?d.get(u):void 0,a=typeof n?.cache=="object"?n?.cache?.cacheName??e.name:e.name,f=Y({...s,session:l},typeof n?.cache=="object"?n?.cache?.cacheKey:void 0),y=false;typeof i?.persistence=="boolean"&&(y=i?.persistence),typeof n?.cache=="object"&&typeof n?.cache?.persistence=="boolean"&&(y=n?.cache?.persistence??false);let h=60*5,c="s";return q(i?.timeout)&&(typeof i?.timeout=="number"?(h=i.timeout,c="s"):typeof i?.timeout=="object"&&(h=i?.timeout.value,c=i?.timeout.unit)),n?.cache&&typeof n.cache!="boolean"&&(typeof n.cache.timeout=="number"?(h=n.cache.timeout,c="s"):typeof n.cache.timeout=="object"&&(h=n.cache.timeout.value,c=n.cache.timeout.unit)),{cacheName:a,cacheKey:f,timeout:h,timeoutUnit:c,persistence:y}},[n?.cache,u,i]);V.useEffect(()=>{let l=JSON.stringify(q(R.current)?R.current:""),a=JSON.stringify(q(s)?s:""),f=R.current===void 0;(l!==a||f)&&!n?.hold&&(C(null),U(),R.current=s),n?.onChange&&n?.onChange(s,m);},[s,n?.hold,...n?.trigger||[]]),V.useEffect(()=>{let l=async()=>{!G&&S&&A&&(await caches.open(S)).delete(A);};return window.addEventListener("beforeunload",l),()=>{window.removeEventListener("beforeunload",l),T.current?.abort();}},[]);let U=V.useCallback(async l=>{let a=s;if(n?.hold&&n?.logging&&console.log("Hold active"),n?.beforeRequest&&(a=n?.beforeRequest(s)),n?.cache&&!l&&!P){g(true),n?.onBeforeRequest&&n?.onBeforeRequest(s);let f=await caches.open(S),h=await(await f.match(A))?.json();if(h){let{data:c,expired:w}=h;if(j__default.default().isAfter(w))await f.delete(A);else {n?.afterResponse&&c?.data&&(c.data=n?.afterResponse(c.data)),n?.logging&&console.log("After request: Using Cache",c),n?.onAfterResponse&&n?.onAfterResponse(c),g(false),C(c);return}}}if(typeof e=="function"){T.current?.abort();let f=new AbortController;T.current=f,g(true),n?.logging&&console.log("Before request",s),n?.onBeforeRequest&&n?.onBeforeRequest(s);let y=o?await e(a,void 0,{...n,signal:f.signal}):await e(void 0,{...n,signal:f.signal});if(n?.afterResponse&&y?.data&&(y.data=n?.afterResponse(y.data)),n?.logging&&console.log("After request",y),n?.onAfterResponse&&n?.onAfterResponse(y),g(false),C(y),b(false),n?.cache&&y.status){let h=j__default.default().add(J,_).toISOString(),c={data:y,expired:h},w=await caches.open(S),E=new Response(JSON.stringify(c));await w.put(A,E);}}},[s,e,n]);V.useEffect(()=>{if(n?.refreshInterval){let l=typeof n.refreshInterval=="number"?n.refreshInterval:n.refreshInterval.value,a=typeof n.refreshInterval=="number"?"s":n.refreshInterval.unit,f=setInterval(()=>{U();},j__default.default.duration(l,a).asMilliseconds());return ()=>clearInterval(f)}return ()=>{}},[n?.refreshInterval,U]),V.useEffect(()=>{if(!n?.refetchOnWindowFocus)return;let l=()=>{U();};return window.addEventListener("focus",l),()=>{window.removeEventListener("focus",l);}},[n?.refetchOnWindowFocus,U]);let m={...x,loading:p,refresh:U,abort:()=>{T.current?.abort(),T.current=null,g(false),b(true);},clear:()=>{g(false),C(null);},response:x,isCancel:P,clone:(l,a)=>Ae(e,l,a)};return V.useEffect(()=>{let l=n?.storeName||e.__path||e.name;M(l).setState([x?.data,m]);},[x,m,n?.storeName,e]),[x?.data,m]}async function Ot(e,t=()=>{}){let r=e*1e3;return new Promise(o=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),o(true);},r);})}var Pe=(n=>(n.POST="POST",n.PUT="PUT",n.PATCH="PATCH",n.DELETE="DELETE",n.GET="GET",n))(Pe||{}),Se=(a=>(a.number="number",a.currency="currency",a.percent="percent",a.date="date",a.dateTime="dateTime",a.month="month",a.year="year",a.time="time",a.timestamp="timestamp",a.string="string",a.textarea="textarea",a.code="code",a.password="password",a.boolean="boolean",a.toggle="toggle",a.email="email",a.phone="phone",a.url="url",a.json="json",a.file="file",a.image="image",a.array="array",a.object="object",a.enum="enum",a.user="user",a.department="department",a.status="status",a))(Se||{});var Et=(e,t,r)=>{let{format:o}=N();return t==="number"?Ue(e,{thouSep:o.number.thouSep,decDigits:o.number.decDigits,decSep:o.number.decSep,...r}):["date","dateTime","month","year","time"].some(s=>s===t)?Ne(e,{display:o[t]?.display,value:o[t]?.value,...r}):t==="boolean"?qe(e,r):t==="string"?we(e,r):e?.toString()??""};function qe(e,t){let r=typeof e=="string"?e==="true":!!e,o=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return r?o:s}function we(e,t){if(!q(e))return "";let r=String(e);switch(t?.textTransform){case "capitalize":r=Z(r);break;case "uppercase":r=r.toUpperCase();break;case "lowercase":r=r.toLowerCase();break}return t?.ellipsis&&r.length>t.ellipsis&&(r=r.slice(0,t.ellipsis)+"..."),r}function Ue(e,{thouSep:t,decSep:r,decDigits:o,method:s}){if(e==null||isNaN(Number(e)))return "";let n=typeof e=="string"?parseFloat(e):e;if(s)if(typeof o=="number"){let p=Math.pow(10,o);n=Math[s](n*p)/p;}else n=Math[s](n);else if(typeof o=="number"){let p=Math.pow(10,o);n=Math.floor(n*p)/p;}let u=0;if(o==="auto"){let p=n.toString(),g=p.indexOf(".");g!==-1&&(u=p.length-g-1);}let i={style:"decimal",useGrouping:true,minimumFractionDigits:o==="auto"?u:o||0,maximumFractionDigits:o==="auto"?u:o||0,minimumIntegerDigits:1};return n.toLocaleString("en-US",i).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,r).replace(/thouSep/g,t)}function Ne(e,{display:t,value:r}){if(!q(e))return e;let o=j__default.default(e,r);return o.isValid()?o.format(t):e}function Ft(e,{interval:t,lead:r}){let o=V.useRef(null);V.useEffect(()=>{o.current=e;},[e]),V.useEffect(()=>{let s=()=>o.current();if(r&&s(),t!==null){let n=setInterval(s,t);return ()=>clearInterval(n)}},[t]);}function Ht(e,t,r){let[o,s]=V.useState(false),n=(p,g)=>typeof e=="string"&&p===e||typeof e=="number"&&g===e,u=p=>p!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(p.tagName)||p.hasAttribute("contentEditable")),i=p=>{let{key:g,keyCode:P}=p,b=p.ctrlKey,x=p.altKey,C=p.shiftKey;if(!u(document.activeElement))if(t)if(typeof t=="string")n(g,P)&&(t==="ctrl"&&b||t==="alt"&&x||t==="shift"&&C)&&(p.preventDefault(),r&&p.stopPropagation(),s(!o));else {let R=t.every(T=>T==="ctrl"?b:T==="alt"?x:T==="shift"?C:false);n(g,P)&&R&&(p.preventDefault(),r&&p.stopPropagation(),s(!o));}else n(g,P)&&(p.preventDefault(),r&&p.stopPropagation(),s(!o));},d=({key:p,keyCode:g})=>{n(p,g)&&s(false);};return V.useEffect(()=>(window.addEventListener("keydown",i),window.addEventListener("keyup",d),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",d);}),[]),o}var Vt=({url:e,token:t,beforeRequest:r,onCallback:o,headers:s,onUnauthorized:n,handleToast:u,handleAuthorization:i,disabledToastWhenCancel:d,withCredentials:p,encryptRequest:g,encryptResponse:P,passphrase:b})=>{let{encrypt:x,decrypt:C,passphrase:R}=F(),T=(m,l,a,f)=>{let y=f?.code==="ERR_CANCELED",h=m.status===401,c=m?.data;if((typeof a?.encryptResponse=="boolean"?a?.encryptResponse:P)&&c){let v=a?.passphrase?typeof a.passphrase=="boolean"&&a.passphrase?R:a.passphrase:b;try{c=C(c,v);}catch{try{c=C(c,R);}catch{}}}let D={...o({...m,data:c,isCancel:y,isUnauthorization:h},f),isCancel:y,isUnauthorization:h,httpCode:m.status},B=typeof a?.disabledToastWhenCancel=="boolean"?a?.disabledToastWhenCancel:d,fe=i?i(D,a):!h;if((a?.infoSuccess&&D.status||a?.infoError&&!D.status)&&u&&(!y||!B)&&u(D),!fe&&(!y||!a?.disabledHandleUnauthorized)){let v=a?.onUnauthorized||n;v&&v(D);}if(l)l(D);else return D},S=(m,l=()=>{})=>Ke__default.default.create({baseURL:`${e}`,withCredentials:typeof m.withCredentials=="boolean"?m.withCredentials:p})(m).then(l).catch(f=>l(f.response,f)),A=(m,l,a,f,y)=>{let c={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...y},w={"Content-Type":"application/json",...s,...c.headers};if(c.token&&(typeof c.token=="boolean"?t&&(w.Authorization=`Bearer ${t}`):c.token&&(w.Authorization=`Bearer ${c.token}`)),r&&(a=r(a)),(typeof c?.encryptRequest=="boolean"?c?.encryptRequest:g)&&a){let D=y?.passphrase?typeof y.passphrase=="boolean"&&y.passphrase?R:y.passphrase:b;a=x(a,D);}return S({url:l,method:m,data:a,headers:w,responseType:c.responseType,signal:c.signal,withCredentials:c.withCredentials,onUploadProgress:D=>{c?.onUploadProgress&&c?.onUploadProgress(D);}},(D,B)=>T(D,f,c,B))};return {client:S,post:(m,l,a,f)=>A("POST",`${m}`,l,a,f),put:(m,l,a,f)=>A("PUT",`${m}`,l,a,f),patch:(m,l,a,f)=>A("PATCH",`${m}`,l,a,f),delete:(m,l,a)=>A("DELETE",`${m}`,null,l,a),get:(m,l,a)=>A("GET",`${m}`,null,l,a),upload:(m,l,a,f)=>{let y=new FormData;return Object.keys(l).forEach(h=>y.append(h,l[h])),A("POST",`${m}`,y,a,{infoSuccess:false,...f,headers:{"Content-Type":"multipart/form-data",...f?.headers}})}}};function Xt(e,t){let[r,o]=V.useState(false),[s,n]=V.useState(),[u,i]=V.useState(0),d=V.useRef(null);return V.useEffect(()=>{if(t?.abortOnUnmount)return ()=>{d.current?.abort();}},[]),[async b=>{d.current?.abort();let x=new AbortController;d.current=x,o(true),t?.beforeRequest&&(b=t?.beforeRequest(b)),t?.logging&&console.log("Before request",b);let C={...t,signal:x.signal,onUploadProgress:T=>{let S=Math.round(T.loaded*100/(T.total||1));i(S);}},R=q(b)?await e(b,void 0,C):await e(void 0,C);t?.logging&&console.log("After response",R),n(R),o(false),i(0),R.status&&t?.onSuccess&&t?.onSuccess(R),!R.status&&t?.onError&&t?.onError(R),t?.afterResponse&&t?.afterResponse(R);},{...s,loading:r,abort:()=>{d.current?.abort(),d.current=null,o(false),i(0);},progress:u,reset:()=>{o(false),i(0),n(null);}}]}function Be(e,t){let{disableHysteresis:r=false,threshold:o=100,target:s}=t,n=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!r&&n!==void 0&&e.current<n?false:(e.current||0)>o}var He=typeof window<"u"?window:null;function Qt(e={}){let{getTrigger:t=Be,target:r=He,disableHysteresis:o=false,threshold:s=100}=e,n=V__default.default.useRef(0),[u,i]=V__default.default.useState(()=>t(n,{disableHysteresis:o,threshold:s,target:r}));return V__default.default.useEffect(()=>{let d=()=>{i(t(n,{disableHysteresis:o,threshold:s,target:r}));};if(d(),r)return r.addEventListener("scroll",d,{passive:true}),()=>{r.removeEventListener("scroll",d);}},[r,t,o,s]),u}var rr=(e,t)=>{let r=t||e.__path||e.name;return M(r).useStore()};var sr=(e,t)=>{let r=o=>e(o);return r.displayName=t,r},ar=(e,t)=>{let r={};r.others=[];let o=s=>{V__default.default.Children.forEach(s,n=>{if(V__default.default.isValidElement(n)){let u=n.type.displayName;if(t.includes(u))r[u]=n;else {let i=n;i.props?.children?o(i.props.children):r.others.push(n);}}else r.others.push(n);});};return o(e),r};function Ie(e,t=[]){let r={};for(let o in e){let s=e[o];if(typeof s=="function"){let n=s.bind(null);n.__path=[...t,o].join("."),r[o]=n;}else typeof s=="object"&&s!==null?r[o]=Ie(s,[...t,o]):r[o]=s;}return r}exports.BgsCoreProvider=ge;exports.DataTypeEnum=Se;exports.HttpMethod=Pe;exports.capitalizeWords=Z;exports.createApiHelper=Vt;exports.createElement=sr;exports.createStore=ae;exports.debounce=Ye;exports.decrypt=I;exports.decryptString=oe;exports.diffJson=We;exports.encrypt=H;exports.encryptString=ne;exports.generateCacheKey=Y;exports.generateUUID=je;exports.getFieldValue=O;exports.isArray=Ve;exports.isNotEmpty=q;exports.jsonCopy=Xe;exports.labelFormatter=X;exports.mappingUndefinedtoNull=ze;exports.renderChildren=Je;exports.sorting=_e;exports.splitElement=ar;exports.stableStringify=de;exports.summary=Ge;exports.useApiLoad=Ae;exports.useApiSend=Xt;exports.useApiStore=rr;exports.useBgsCore=N;exports.useCrypto=F;exports.useDelay=Ot;exports.useFormatted=Et;exports.useInterval=Ft;exports.useKeyPress=Ht;exports.useScrollTrigger=Qt;exports.useStorage=se;exports.wrapApi=Ie;
|
package/dist/index.d.cts
CHANGED
|
@@ -433,7 +433,19 @@ declare function useCrypto(): {
|
|
|
433
433
|
|
|
434
434
|
type InferApiRequest<T> = T extends ApiMethod<infer Req, any> ? Req : never;
|
|
435
435
|
type InferApiResponse<T> = T extends ApiMethod<any, infer Res> ? Res : never;
|
|
436
|
-
|
|
436
|
+
/**
|
|
437
|
+
* Hook untuk menggunakan API store yang sesuai dengan method.
|
|
438
|
+
*
|
|
439
|
+
* @param api API method yang ingin digunakan (misalnya `api.absence.save`)
|
|
440
|
+
* @param key (Optional) Nama store. Jika tidak diisi, akan otomatis memakai `api.__path` (jika tersedia dari `wrapApi`) atau `api.name`
|
|
441
|
+
*
|
|
442
|
+
* Contoh:
|
|
443
|
+
* ```ts
|
|
444
|
+
* const store = useApiStore(api.absence.save); // pakai __path
|
|
445
|
+
* const store = useApiStore(api.absence.save, 'absence.save'); // pakai key manual
|
|
446
|
+
* ```
|
|
447
|
+
*/
|
|
448
|
+
declare const useApiStore: <T extends ApiMethod<any, any>>(api: T, key?: string) => UseCallReturnType<InferApiRequest<T>, InferApiResponse<T>>;
|
|
437
449
|
|
|
438
450
|
type CreateElementProps<P = unknown> = {
|
|
439
451
|
(element: (props: P) => React$1.JSX.Element, elementName: string): React$1.FC<P>;
|
|
@@ -480,6 +492,13 @@ declare function createStore<T>(initialState: T): {
|
|
|
480
492
|
};
|
|
481
493
|
};
|
|
482
494
|
|
|
495
|
+
type TWithName<T> = {
|
|
496
|
+
[K in keyof T]: T[K] extends (...args: any[]) => any ? T[K] & {
|
|
497
|
+
__path: string;
|
|
498
|
+
} : T[K] extends object ? TWithName<T[K]> : T[K];
|
|
499
|
+
};
|
|
500
|
+
declare function wrapApi<T extends object>(obj: T, path?: string[]): TWithName<T>;
|
|
501
|
+
|
|
483
502
|
type FormatType = {
|
|
484
503
|
display: string;
|
|
485
504
|
value: string;
|
|
@@ -504,4 +523,4 @@ interface BgsCoreProviderProps {
|
|
|
504
523
|
}
|
|
505
524
|
declare const BgsCoreProvider: ({ children, value: options }: PropsWithChildren<BgsCoreProviderProps>) => react_jsx_runtime.JSX.Element;
|
|
506
525
|
|
|
507
|
-
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type SupportedFormattedType, type TextTransform, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage };
|
|
526
|
+
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type SupportedFormattedType, type TWithName, type TextTransform, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage, wrapApi };
|
package/dist/index.d.ts
CHANGED
|
@@ -433,7 +433,19 @@ declare function useCrypto(): {
|
|
|
433
433
|
|
|
434
434
|
type InferApiRequest<T> = T extends ApiMethod<infer Req, any> ? Req : never;
|
|
435
435
|
type InferApiResponse<T> = T extends ApiMethod<any, infer Res> ? Res : never;
|
|
436
|
-
|
|
436
|
+
/**
|
|
437
|
+
* Hook untuk menggunakan API store yang sesuai dengan method.
|
|
438
|
+
*
|
|
439
|
+
* @param api API method yang ingin digunakan (misalnya `api.absence.save`)
|
|
440
|
+
* @param key (Optional) Nama store. Jika tidak diisi, akan otomatis memakai `api.__path` (jika tersedia dari `wrapApi`) atau `api.name`
|
|
441
|
+
*
|
|
442
|
+
* Contoh:
|
|
443
|
+
* ```ts
|
|
444
|
+
* const store = useApiStore(api.absence.save); // pakai __path
|
|
445
|
+
* const store = useApiStore(api.absence.save, 'absence.save'); // pakai key manual
|
|
446
|
+
* ```
|
|
447
|
+
*/
|
|
448
|
+
declare const useApiStore: <T extends ApiMethod<any, any>>(api: T, key?: string) => UseCallReturnType<InferApiRequest<T>, InferApiResponse<T>>;
|
|
437
449
|
|
|
438
450
|
type CreateElementProps<P = unknown> = {
|
|
439
451
|
(element: (props: P) => React$1.JSX.Element, elementName: string): React$1.FC<P>;
|
|
@@ -480,6 +492,13 @@ declare function createStore<T>(initialState: T): {
|
|
|
480
492
|
};
|
|
481
493
|
};
|
|
482
494
|
|
|
495
|
+
type TWithName<T> = {
|
|
496
|
+
[K in keyof T]: T[K] extends (...args: any[]) => any ? T[K] & {
|
|
497
|
+
__path: string;
|
|
498
|
+
} : T[K] extends object ? TWithName<T[K]> : T[K];
|
|
499
|
+
};
|
|
500
|
+
declare function wrapApi<T extends object>(obj: T, path?: string[]): TWithName<T>;
|
|
501
|
+
|
|
483
502
|
type FormatType = {
|
|
484
503
|
display: string;
|
|
485
504
|
value: string;
|
|
@@ -504,4 +523,4 @@ interface BgsCoreProviderProps {
|
|
|
504
523
|
}
|
|
505
524
|
declare const BgsCoreProvider: ({ children, value: options }: PropsWithChildren<BgsCoreProviderProps>) => react_jsx_runtime.JSX.Element;
|
|
506
525
|
|
|
507
|
-
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type SupportedFormattedType, type TextTransform, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage };
|
|
526
|
+
export { type ApiActionState, type ApiDefaultFetch, type ApiDefaultMethod, type ApiMethod, type ApiMethodVoid, type ApiResponse, type BgsCoreProps, BgsCoreProvider, type CacheData, type CacheProps, type CallbackHelper, type Children, type ClientCallback, type CombinationType, type CreateElementProps, type DataType, DataTypeEnum, type EncryptedPayload, HttpMethod, type NestedKeyOf, type OptionsCallReturn, type OptionsHelper, type OptionsNumberProps, type PaginationMeta, type PathValue, type ResponseType, type SelectedNested, type SplitElementResult, type SupportedFormattedType, type TWithName, type TextTransform, type UseApiSendProps, type UseApiSendReturnType, type UseCallOptionsProps, type UseCallReturnType, type UseHelperProps, type UseScrollTriggerOptions, capitalizeWords, createApiHelper, createElement, createStore, debounce, decrypt, decryptString, diffJson, encrypt, encryptString, generateCacheKey, generateUUID, getFieldValue, isArray, isNotEmpty, jsonCopy, labelFormatter, mappingUndefinedtoNull, renderChildren, sorting, splitElement, stableStringify, summary, useApiLoad, useApiSend, useApiStore, useBgsCore, useCrypto, useDelay, useFormatted, useInterval, useKeyPress, useScrollTrigger, useStorage, wrapApi };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import j from'moment';import V,{createContext,useContext,useCallback,useState,useRef,useMemo,useEffect,useSyncExternalStore}from'react';import {jsx}from'react/jsx-runtime';import te from'crypto-js/aes';import re from'crypto-js/pbkdf2';import he from'crypto-js/enc-utf8';import K from'crypto-js/enc-base64';import ee from'crypto-js/lib-typedarrays';import Ke from'axios';function $e(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function je(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var We=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function ze(e,t){let n=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(n=true):n=true),n}function q(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var Y={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let n=e.replace(/_([a-z])/g,(o,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return n=n.charAt(0).toUpperCase()+n.slice(1),n},changeAll:(e="",t=false)=>{let n="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],n=Y.snackCase(Y.camelCase(e)),t&&(n=n?.split(" ")?.map(o=>o?.length<=3?o?.toUpperCase():o)?.join(" "));}catch{}return n?.trim()}};function Ve(e,t){return typeof e=="function"?e(t):e}var O=(e,t,n="")=>{if(!e)return n;if(e.hasOwnProperty(t))return e[t];let o=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let r of o){if(s==null)return n;s=s[r];}return s===void 0?n:s},Je={desc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=O(n,t)?O(n,t):"",r=O(o,t)?O(n,t):"";return s<r?1:-1}else return n<o?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((n,o)=>{if(t){let s=O(n,t)?O(n,t):"",r=O(o,t)?O(o,t):"";return s>r?1:-1}else return n>o?1:-1}))},Ge=(e,t)=>{Array.isArray(e)||(e=[]);let n=[];return n=e.map(o=>Number(t?O(o,t)||0:o||0)),n.reduce((o,s)=>(o||0)+(s||0),0)||0};function Xe(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function de(e){let t=new WeakSet;return JSON.stringify(e,function(n,o){return o!==null&&typeof o=="object"?t.has(o)?void 0:(t.add(o),Object.keys(o).sort().reduce((s,r)=>(s[r]=o[r],s),{})):o})??""}function _(e,t){return de([t??"undefined",e??"undefined"])}function Z(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function Ye(e,t=0){let n;return function(...o){clearTimeout(n),n=setTimeout(()=>{e(...o);},t*1e3);}}var Q=createContext(void 0);function N(){let e=useContext(Q);return e||{}}var ge=({children:e,value:t})=>{let n={...t};return jsx(Q.Provider,{value:n,children:e})};function H(e,t){let n=ee.random(16),o=ee.random(16),s=re(t,n,{keySize:256/32,iterations:1e3}),r=te.encrypt(JSON.stringify(e),s,{iv:o}).toString();return {salt:n.toString(K),iv:o.toString(K),encrypted:r}}function I(e,t){let{salt:n,iv:o,encrypted:s}=e,r=re(t,K.parse(n),{keySize:256/32,iterations:1e3}),i=te.decrypt(s,r,{iv:K.parse(o)}).toString(he);return JSON.parse(i)}function ne(e,t){return JSON.stringify(H(e,t))}function oe(e,t){return I(JSON.parse(e),t)}function F(){let{passphrase:e}=N();return {passphrase:e,encrypt(t,n){return H(t,n||e)},decrypt(t,n){return I(t,n||e)},encryptString(t,n){return ne(t,n||e)},decryptString(t,n){return oe(t,n||e)}}}var se=()=>{let{encrypt:e,decrypt:t}=F(),n=useCallback((u,i)=>{try{let d=e(i);localStorage.setItem(u,JSON.stringify(d));}catch(d){console.error("Failed to save to storage:",d);}},[e]),o=useCallback(u=>{try{let i=localStorage.getItem(u);return i?t(JSON.parse(i)):null}catch(i){return console.error("Failed to get from storage:",i),null}},[t]),s=u=>{let[i,d]=useState(()=>{try{let p=localStorage.getItem(u);return p?t(JSON.parse(p)):null}catch(p){return console.error("Failed to parse localStorage value",p),null}});return useEffect(()=>{let p=g=>{if(g.key===u)if(g.newValue)try{d(t(JSON.parse(g.newValue)));}catch(P){console.error("Decrypt error from storage event",P);}else d(null);};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[u,t]),i},r=useCallback(u=>{u?localStorage.removeItem(u):localStorage.clear();},[]);return {save:n,get:o,clear:r,useWatchStorage:s}};function ae(e){let t=e,n=new Set;function o(){return t}function s(i){return n.add(i),()=>n.delete(i)}function r(i){typeof i=="function"?t=i(t):t=i,n.forEach(d=>d());}function u(i){return useSyncExternalStore(s,()=>i?i(t):t,()=>i?i(t):t)}return {getSnapshot:o,subscribe:s,setState:r,useStore:u}}var $=new Map;function M(e){return $.has(e)||$.set(e,ae([null,{}])),$.get(e)}function Ae(e,t,n){let o=arguments.length===3,s=o?t:void 0,r=o?n:t,{storageKey:u,cache:i}=N(),d=se(),[p,g]=useState(false),[P,b]=useState(false),[x,C]=useState(),R=useRef(void 0),T=useRef(null),{cacheName:S,cacheKey:A,timeout:J,timeoutUnit:G,persistence:X}=useMemo(()=>{let l=u?d.get(u):void 0,a=typeof r?.cache=="object"?r?.cache?.cacheName??e.name:e.name,f=_({...s,session:l},typeof r?.cache=="object"?r?.cache?.cacheKey:void 0),y=false;typeof i?.persistence=="boolean"&&(y=i?.persistence),typeof r?.cache=="object"&&typeof r?.cache?.persistence=="boolean"&&(y=r?.cache?.persistence??false);let h=60*5,c="s";return q(i?.timeout)&&(typeof i?.timeout=="number"?(h=i.timeout,c="s"):typeof i?.timeout=="object"&&(h=i?.timeout.value,c=i?.timeout.unit)),r?.cache&&typeof r.cache!="boolean"&&(typeof r.cache.timeout=="number"?(h=r.cache.timeout,c="s"):typeof r.cache.timeout=="object"&&(h=r.cache.timeout.value,c=r.cache.timeout.unit)),{cacheName:a,cacheKey:f,timeout:h,timeoutUnit:c,persistence:y}},[r?.cache,u,i]);useEffect(()=>{let l=JSON.stringify(q(R.current)?R.current:""),a=JSON.stringify(q(s)?s:""),f=R.current===void 0;(l!==a||f)&&!r?.hold&&(C(null),U(),R.current=s),r?.onChange&&r?.onChange(s,m);},[s,r?.hold,...r?.trigger||[]]),useEffect(()=>{let l=async()=>{!X&&S&&A&&(await caches.open(S)).delete(A);};return window.addEventListener("beforeunload",l),()=>{window.removeEventListener("beforeunload",l),T.current?.abort();}},[]);let U=useCallback(async l=>{let a=s;if(r?.hold&&r?.logging&&console.log("Hold active"),r?.beforeRequest&&(a=r?.beforeRequest(s)),r?.cache&&!l&&!P){g(true),r?.onBeforeRequest&&r?.onBeforeRequest(s);let f=await caches.open(S),h=await(await f.match(A))?.json();if(h){let{data:c,expired:w}=h;if(j().isAfter(w))await f.delete(A);else {r?.afterResponse&&c?.data&&(c.data=r?.afterResponse(c.data)),r?.logging&&console.log("After request: Using Cache",c),r?.onAfterResponse&&r?.onAfterResponse(c),g(false),C(c);return}}}if(typeof e=="function"){T.current?.abort();let f=new AbortController;T.current=f,g(true),r?.logging&&console.log("Before request",s),r?.onBeforeRequest&&r?.onBeforeRequest(s);let y=o?await e(a,void 0,{...r,signal:f.signal}):await e(void 0,{...r,signal:f.signal});if(r?.afterResponse&&y?.data&&(y.data=r?.afterResponse(y.data)),r?.logging&&console.log("After request",y),r?.onAfterResponse&&r?.onAfterResponse(y),g(false),C(y),b(false),r?.cache&&y.status){let h=j().add(J,G).toISOString(),c={data:y,expired:h},w=await caches.open(S),E=new Response(JSON.stringify(c));await w.put(A,E);}}},[s,e,r]);useEffect(()=>{if(r?.refreshInterval){let l=typeof r.refreshInterval=="number"?r.refreshInterval:r.refreshInterval.value,a=typeof r.refreshInterval=="number"?"s":r.refreshInterval.unit,f=setInterval(()=>{U();},j.duration(l,a).asMilliseconds());return ()=>clearInterval(f)}return ()=>{}},[r?.refreshInterval,U]),useEffect(()=>{if(!r?.refetchOnWindowFocus)return;let l=()=>{U();};return window.addEventListener("focus",l),()=>{window.removeEventListener("focus",l);}},[r?.refetchOnWindowFocus,U]);let m={...x,loading:p,refresh:U,abort:()=>{T.current?.abort(),T.current=null,g(false),b(true);},clear:()=>{g(false),C(null);},response:x,isCancel:P,clone:(l,a)=>Ae(e,l,a)};return useEffect(()=>{r?.storeName&&M(r?.storeName).setState([x?.data,m]);},[x,m,r?.storeName]),[x?.data,m]}async function St(e,t=()=>{}){let n=e*1e3;return new Promise(o=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),o(true);},n);})}var Pe=(r=>(r.POST="POST",r.PUT="PUT",r.PATCH="PATCH",r.DELETE="DELETE",r.GET="GET",r))(Pe||{}),Se=(a=>(a.number="number",a.currency="currency",a.percent="percent",a.date="date",a.dateTime="dateTime",a.month="month",a.year="year",a.time="time",a.timestamp="timestamp",a.string="string",a.textarea="textarea",a.code="code",a.password="password",a.boolean="boolean",a.toggle="toggle",a.email="email",a.phone="phone",a.url="url",a.json="json",a.file="file",a.image="image",a.array="array",a.object="object",a.enum="enum",a.user="user",a.department="department",a.status="status",a))(Se||{});var kt=(e,t,n)=>{let{format:o}=N();return t==="number"?Ue(e,{thouSep:o.number.thouSep,decDigits:o.number.decDigits,decSep:o.number.decSep,...n}):["date","dateTime","month","year","time"].some(s=>s===t)?Ne(e,{display:o[t]?.display,value:o[t]?.value,...n}):t==="boolean"?qe(e,n):t==="string"?we(e,n):e?.toString()??""};function qe(e,t){let n=typeof e=="string"?e==="true":!!e,o=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return n?o:s}function we(e,t){if(!q(e))return "";let n=String(e);switch(t?.textTransform){case "capitalize":n=Z(n);break;case "uppercase":n=n.toUpperCase();break;case "lowercase":n=n.toLowerCase();break}return t?.ellipsis&&n.length>t.ellipsis&&(n=n.slice(0,t.ellipsis)+"..."),n}function Ue(e,{thouSep:t,decSep:n,decDigits:o,method:s}){if(e==null||isNaN(Number(e)))return "";let r=typeof e=="string"?parseFloat(e):e;if(s)if(typeof o=="number"){let p=Math.pow(10,o);r=Math[s](r*p)/p;}else r=Math[s](r);else if(typeof o=="number"){let p=Math.pow(10,o);r=Math.floor(r*p)/p;}let u=0;if(o==="auto"){let p=r.toString(),g=p.indexOf(".");g!==-1&&(u=p.length-g-1);}let i={style:"decimal",useGrouping:true,minimumFractionDigits:o==="auto"?u:o||0,maximumFractionDigits:o==="auto"?u:o||0,minimumIntegerDigits:1};return r.toLocaleString("en-US",i).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,n).replace(/thouSep/g,t)}function Ne(e,{display:t,value:n}){if(!q(e))return e;let o=j(e,n);return o.isValid()?o.format(t):e}function Kt(e,{interval:t,lead:n}){let o=useRef(null);useEffect(()=>{o.current=e;},[e]),useEffect(()=>{let s=()=>o.current();if(n&&s(),t!==null){let r=setInterval(s,t);return ()=>clearInterval(r)}},[t]);}function Bt(e,t,n){let[o,s]=useState(false),r=(p,g)=>typeof e=="string"&&p===e||typeof e=="number"&&g===e,u=p=>p!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(p.tagName)||p.hasAttribute("contentEditable")),i=p=>{let{key:g,keyCode:P}=p,b=p.ctrlKey,x=p.altKey,C=p.shiftKey;if(!u(document.activeElement))if(t)if(typeof t=="string")r(g,P)&&(t==="ctrl"&&b||t==="alt"&&x||t==="shift"&&C)&&(p.preventDefault(),n&&p.stopPropagation(),s(!o));else {let R=t.every(T=>T==="ctrl"?b:T==="alt"?x:T==="shift"?C:false);r(g,P)&&R&&(p.preventDefault(),n&&p.stopPropagation(),s(!o));}else r(g,P)&&(p.preventDefault(),n&&p.stopPropagation(),s(!o));},d=({key:p,keyCode:g})=>{r(p,g)&&s(false);};return useEffect(()=>(window.addEventListener("keydown",i),window.addEventListener("keyup",d),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",d);}),[]),o}var zt=({url:e,token:t,beforeRequest:n,onCallback:o,headers:s,onUnauthorized:r,handleToast:u,handleAuthorization:i,disabledToastWhenCancel:d,withCredentials:p,encryptRequest:g,encryptResponse:P,passphrase:b})=>{let{encrypt:x,decrypt:C,passphrase:R}=F(),T=(m,l,a,f)=>{let y=f?.code==="ERR_CANCELED",h=m.status===401,c=m?.data;if((typeof a?.encryptResponse=="boolean"?a?.encryptResponse:P)&&c){let v=a?.passphrase?typeof a.passphrase=="boolean"&&a.passphrase?R:a.passphrase:b;try{c=C(c,v);}catch{try{c=C(c,R);}catch{}}}let D={...o({...m,data:c,isCancel:y,isUnauthorization:h},f),isCancel:y,isUnauthorization:h,httpCode:m.status},B=typeof a?.disabledToastWhenCancel=="boolean"?a?.disabledToastWhenCancel:d,fe=i?i(D,a):!h;if((a?.infoSuccess&&D.status||a?.infoError&&!D.status)&&u&&(!y||!B)&&u(D),!fe&&(!y||!a?.disabledHandleUnauthorized)){let v=a?.onUnauthorized||r;v&&v(D);}if(l)l(D);else return D},S=(m,l=()=>{})=>Ke.create({baseURL:`${e}`,withCredentials:typeof m.withCredentials=="boolean"?m.withCredentials:p})(m).then(l).catch(f=>l(f.response,f)),A=(m,l,a,f,y)=>{let c={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...y},w={"Content-Type":"application/json",...s,...c.headers};if(c.token&&(typeof c.token=="boolean"?t&&(w.Authorization=`Bearer ${t}`):c.token&&(w.Authorization=`Bearer ${c.token}`)),n&&(a=n(a)),(typeof c?.encryptRequest=="boolean"?c?.encryptRequest:g)&&a){let D=y?.passphrase?typeof y.passphrase=="boolean"&&y.passphrase?R:y.passphrase:b;a=x(a,D);}return S({url:l,method:m,data:a,headers:w,responseType:c.responseType,signal:c.signal,withCredentials:c.withCredentials,onUploadProgress:D=>{c?.onUploadProgress&&c?.onUploadProgress(D);}},(D,B)=>T(D,f,c,B))};return {client:S,post:(m,l,a,f)=>A("POST",`${m}`,l,a,f),put:(m,l,a,f)=>A("PUT",`${m}`,l,a,f),patch:(m,l,a,f)=>A("PATCH",`${m}`,l,a,f),delete:(m,l,a)=>A("DELETE",`${m}`,null,l,a),get:(m,l,a)=>A("GET",`${m}`,null,l,a),upload:(m,l,a,f)=>{let y=new FormData;return Object.keys(l).forEach(h=>y.append(h,l[h])),A("POST",`${m}`,y,a,{infoSuccess:false,...f,headers:{"Content-Type":"multipart/form-data",...f?.headers}})}}};function Xt(e,t){let[n,o]=useState(false),[s,r]=useState(),[u,i]=useState(0),d=useRef(null);return useEffect(()=>{if(t?.abortOnUnmount)return ()=>{d.current?.abort();}},[]),[async b=>{d.current?.abort();let x=new AbortController;d.current=x,o(true),t?.beforeRequest&&(b=t?.beforeRequest(b)),t?.logging&&console.log("Before request",b);let C={...t,signal:x.signal,onUploadProgress:T=>{let S=Math.round(T.loaded*100/(T.total||1));i(S);}},R=q(b)?await e(b,void 0,C):await e(void 0,C);t?.logging&&console.log("After response",R),r(R),o(false),i(0),R.status&&t?.onSuccess&&t?.onSuccess(R),!R.status&&t?.onError&&t?.onError(R),t?.afterResponse&&t?.afterResponse(R);},{...s,loading:n,abort:()=>{d.current?.abort(),d.current=null,o(false),i(0);},progress:u,reset:()=>{o(false),i(0),r(null);}}]}function Be(e,t){let{disableHysteresis:n=false,threshold:o=100,target:s}=t,r=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!n&&r!==void 0&&e.current<r?false:(e.current||0)>o}var He=typeof window<"u"?window:null;function Zt(e={}){let{getTrigger:t=Be,target:n=He,disableHysteresis:o=false,threshold:s=100}=e,r=V.useRef(0),[u,i]=V.useState(()=>t(r,{disableHysteresis:o,threshold:s,target:n}));return V.useEffect(()=>{let d=()=>{i(t(r,{disableHysteresis:o,threshold:s,target:n}));};if(d(),n)return n.addEventListener("scroll",d,{passive:true}),()=>{n.removeEventListener("scroll",d);}},[n,t,o,s]),u}var tr=(e,t)=>M(t).useStore();var or=(e,t)=>{let n=o=>e(o);return n.displayName=t,n},sr=(e,t)=>{let n={};n.others=[];let o=s=>{V.Children.forEach(s,r=>{if(V.isValidElement(r)){let u=r.type.displayName;if(t.includes(u))n[u]=r;else {let i=r;i.props?.children?o(i.props.children):n.others.push(r);}}else n.others.push(r);});};return o(e),n};export{ge as BgsCoreProvider,Se as DataTypeEnum,Pe as HttpMethod,Z as capitalizeWords,zt as createApiHelper,or as createElement,ae as createStore,Ye as debounce,I as decrypt,oe as decryptString,je as diffJson,H as encrypt,ne as encryptString,_ as generateCacheKey,$e as generateUUID,O as getFieldValue,ze as isArray,q as isNotEmpty,Xe as jsonCopy,Y as labelFormatter,We as mappingUndefinedtoNull,Ve as renderChildren,Je as sorting,sr as splitElement,de as stableStringify,Ge as summary,Ae as useApiLoad,Xt as useApiSend,tr as useApiStore,N as useBgsCore,F as useCrypto,St as useDelay,kt as useFormatted,Kt as useInterval,Bt as useKeyPress,Zt as useScrollTrigger,se as useStorage};
|
|
1
|
+
import j from'moment';import V,{createContext,useContext,useCallback,useState,useRef,useMemo,useEffect,useSyncExternalStore}from'react';import {jsx}from'react/jsx-runtime';import te from'crypto-js/aes';import re from'crypto-js/pbkdf2';import he from'crypto-js/enc-utf8';import K from'crypto-js/enc-base64';import ee from'crypto-js/lib-typedarrays';import Ke from'axios';function je(){let e=()=>Math.random()*16%16|0;return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>(t==="x"?e():e()&3|8).toString(16))}function We(e,t){try{return JSON.stringify(e)!==JSON.stringify(t)}catch{return false}}var ze=e=>(Object.keys(e).forEach(t=>{e[t]===void 0&&(e[t]=null);}),e);function Ve(e,t){let r=false;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof t=="number"?e.length>t&&(r=true):r=true),r}function q(e){return !(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0||typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===0)}var X={camelCase:(e="")=>(e=e.split(".").map(t=>(t=t.charAt(0).toUpperCase()+t.slice(1),t)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let r=e.replace(/_([a-z])/g,(o,s)=>s.toUpperCase()).replace(/([A-Z])/g," $1");return r=r.charAt(0).toUpperCase()+r.slice(1),r},changeAll:(e="",t=false)=>{let r="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],r=X.snackCase(X.camelCase(e)),t&&(r=r?.split(" ")?.map(o=>o?.length<=3?o?.toUpperCase():o)?.join(" "));}catch{}return r?.trim()}};function Je(e,t){return typeof e=="function"?e(t):e}var O=(e,t,r="")=>{if(!e)return r;if(e.hasOwnProperty(t))return e[t];let o=t.replace(/\[(\d+)\]/g,".$1").split("."),s=e;for(let n of o){if(s==null)return r;s=s[n];}return s===void 0?r:s},_e={desc:(e,t)=>(e||(e=[]),e.sort((r,o)=>{if(t){let s=O(r,t)?O(r,t):"",n=O(o,t)?O(r,t):"";return s<n?1:-1}else return r<o?1:-1})),asc:(e,t)=>(e||(e=[]),e.sort((r,o)=>{if(t){let s=O(r,t)?O(r,t):"",n=O(o,t)?O(o,t):"";return s>n?1:-1}else return r>o?1:-1}))},Ge=(e,t)=>{Array.isArray(e)||(e=[]);let r=[];return r=e.map(o=>Number(t?O(o,t)||0:o||0)),r.reduce((o,s)=>(o||0)+(s||0),0)||0};function Xe(e){try{return e&&JSON.parse(JSON.stringify(e))}catch{return e}}function de(e){let t=new WeakSet;return JSON.stringify(e,function(r,o){return o!==null&&typeof o=="object"?t.has(o)?void 0:(t.add(o),Object.keys(o).sort().reduce((s,n)=>(s[n]=o[n],s),{})):o})??""}function Y(e,t){return de([t??"undefined",e??"undefined"])}function Z(e=""){return typeof e!="string"&&(e=""),e.replace(/\b\w/g,t=>t.toUpperCase())}function Ye(e,t=0){let r;return function(...o){clearTimeout(r),r=setTimeout(()=>{e(...o);},t*1e3);}}var Q=createContext(void 0);function N(){let e=useContext(Q);return e||{}}var ge=({children:e,value:t})=>{let r={...t};return jsx(Q.Provider,{value:r,children:e})};function H(e,t){let r=ee.random(16),o=ee.random(16),s=re(t,r,{keySize:256/32,iterations:1e3}),n=te.encrypt(JSON.stringify(e),s,{iv:o}).toString();return {salt:r.toString(K),iv:o.toString(K),encrypted:n}}function I(e,t){let{salt:r,iv:o,encrypted:s}=e,n=re(t,K.parse(r),{keySize:256/32,iterations:1e3}),i=te.decrypt(s,n,{iv:K.parse(o)}).toString(he);return JSON.parse(i)}function ne(e,t){return JSON.stringify(H(e,t))}function oe(e,t){return I(JSON.parse(e),t)}function F(){let{passphrase:e}=N();return {passphrase:e,encrypt(t,r){return H(t,r||e)},decrypt(t,r){return I(t,r||e)},encryptString(t,r){return ne(t,r||e)},decryptString(t,r){return oe(t,r||e)}}}var se=()=>{let{encrypt:e,decrypt:t}=F(),r=useCallback((u,i)=>{try{let d=e(i);localStorage.setItem(u,JSON.stringify(d));}catch(d){console.error("Failed to save to storage:",d);}},[e]),o=useCallback(u=>{try{let i=localStorage.getItem(u);return i?t(JSON.parse(i)):null}catch(i){return console.error("Failed to get from storage:",i),null}},[t]),s=u=>{let[i,d]=useState(()=>{try{let p=localStorage.getItem(u);return p?t(JSON.parse(p)):null}catch(p){return console.error("Failed to parse localStorage value",p),null}});return useEffect(()=>{let p=g=>{if(g.key===u)if(g.newValue)try{d(t(JSON.parse(g.newValue)));}catch(P){console.error("Decrypt error from storage event",P);}else d(null);};return window.addEventListener("storage",p),()=>window.removeEventListener("storage",p)},[u,t]),i},n=useCallback(u=>{u?localStorage.removeItem(u):localStorage.clear();},[]);return {save:r,get:o,clear:n,useWatchStorage:s}};function ae(e){let t=e,r=new Set;function o(){return t}function s(i){return r.add(i),()=>r.delete(i)}function n(i){typeof i=="function"?t=i(t):t=i,r.forEach(d=>d());}function u(i){return useSyncExternalStore(s,()=>i?i(t):t,()=>i?i(t):t)}return {getSnapshot:o,subscribe:s,setState:n,useStore:u}}var $=new Map;function M(e){return $.has(e)||$.set(e,ae([null,{}])),$.get(e)}function Ae(e,t,r){let o=arguments.length===3,s=o?t:void 0,n=o?r:t,{storageKey:u,cache:i}=N(),d=se(),[p,g]=useState(false),[P,b]=useState(false),[x,C]=useState(),R=useRef(void 0),T=useRef(null),{cacheName:S,cacheKey:A,timeout:J,timeoutUnit:_,persistence:G}=useMemo(()=>{let l=u?d.get(u):void 0,a=typeof n?.cache=="object"?n?.cache?.cacheName??e.name:e.name,f=Y({...s,session:l},typeof n?.cache=="object"?n?.cache?.cacheKey:void 0),y=false;typeof i?.persistence=="boolean"&&(y=i?.persistence),typeof n?.cache=="object"&&typeof n?.cache?.persistence=="boolean"&&(y=n?.cache?.persistence??false);let h=60*5,c="s";return q(i?.timeout)&&(typeof i?.timeout=="number"?(h=i.timeout,c="s"):typeof i?.timeout=="object"&&(h=i?.timeout.value,c=i?.timeout.unit)),n?.cache&&typeof n.cache!="boolean"&&(typeof n.cache.timeout=="number"?(h=n.cache.timeout,c="s"):typeof n.cache.timeout=="object"&&(h=n.cache.timeout.value,c=n.cache.timeout.unit)),{cacheName:a,cacheKey:f,timeout:h,timeoutUnit:c,persistence:y}},[n?.cache,u,i]);useEffect(()=>{let l=JSON.stringify(q(R.current)?R.current:""),a=JSON.stringify(q(s)?s:""),f=R.current===void 0;(l!==a||f)&&!n?.hold&&(C(null),U(),R.current=s),n?.onChange&&n?.onChange(s,m);},[s,n?.hold,...n?.trigger||[]]),useEffect(()=>{let l=async()=>{!G&&S&&A&&(await caches.open(S)).delete(A);};return window.addEventListener("beforeunload",l),()=>{window.removeEventListener("beforeunload",l),T.current?.abort();}},[]);let U=useCallback(async l=>{let a=s;if(n?.hold&&n?.logging&&console.log("Hold active"),n?.beforeRequest&&(a=n?.beforeRequest(s)),n?.cache&&!l&&!P){g(true),n?.onBeforeRequest&&n?.onBeforeRequest(s);let f=await caches.open(S),h=await(await f.match(A))?.json();if(h){let{data:c,expired:w}=h;if(j().isAfter(w))await f.delete(A);else {n?.afterResponse&&c?.data&&(c.data=n?.afterResponse(c.data)),n?.logging&&console.log("After request: Using Cache",c),n?.onAfterResponse&&n?.onAfterResponse(c),g(false),C(c);return}}}if(typeof e=="function"){T.current?.abort();let f=new AbortController;T.current=f,g(true),n?.logging&&console.log("Before request",s),n?.onBeforeRequest&&n?.onBeforeRequest(s);let y=o?await e(a,void 0,{...n,signal:f.signal}):await e(void 0,{...n,signal:f.signal});if(n?.afterResponse&&y?.data&&(y.data=n?.afterResponse(y.data)),n?.logging&&console.log("After request",y),n?.onAfterResponse&&n?.onAfterResponse(y),g(false),C(y),b(false),n?.cache&&y.status){let h=j().add(J,_).toISOString(),c={data:y,expired:h},w=await caches.open(S),E=new Response(JSON.stringify(c));await w.put(A,E);}}},[s,e,n]);useEffect(()=>{if(n?.refreshInterval){let l=typeof n.refreshInterval=="number"?n.refreshInterval:n.refreshInterval.value,a=typeof n.refreshInterval=="number"?"s":n.refreshInterval.unit,f=setInterval(()=>{U();},j.duration(l,a).asMilliseconds());return ()=>clearInterval(f)}return ()=>{}},[n?.refreshInterval,U]),useEffect(()=>{if(!n?.refetchOnWindowFocus)return;let l=()=>{U();};return window.addEventListener("focus",l),()=>{window.removeEventListener("focus",l);}},[n?.refetchOnWindowFocus,U]);let m={...x,loading:p,refresh:U,abort:()=>{T.current?.abort(),T.current=null,g(false),b(true);},clear:()=>{g(false),C(null);},response:x,isCancel:P,clone:(l,a)=>Ae(e,l,a)};return useEffect(()=>{let l=n?.storeName||e.__path||e.name;M(l).setState([x?.data,m]);},[x,m,n?.storeName,e]),[x?.data,m]}async function Ot(e,t=()=>{}){let r=e*1e3;return new Promise(o=>{setInterval(()=>{t();},1e3);setTimeout(async()=>{await t(),o(true);},r);})}var Pe=(n=>(n.POST="POST",n.PUT="PUT",n.PATCH="PATCH",n.DELETE="DELETE",n.GET="GET",n))(Pe||{}),Se=(a=>(a.number="number",a.currency="currency",a.percent="percent",a.date="date",a.dateTime="dateTime",a.month="month",a.year="year",a.time="time",a.timestamp="timestamp",a.string="string",a.textarea="textarea",a.code="code",a.password="password",a.boolean="boolean",a.toggle="toggle",a.email="email",a.phone="phone",a.url="url",a.json="json",a.file="file",a.image="image",a.array="array",a.object="object",a.enum="enum",a.user="user",a.department="department",a.status="status",a))(Se||{});var Et=(e,t,r)=>{let{format:o}=N();return t==="number"?Ue(e,{thouSep:o.number.thouSep,decDigits:o.number.decDigits,decSep:o.number.decSep,...r}):["date","dateTime","month","year","time"].some(s=>s===t)?Ne(e,{display:o[t]?.display,value:o[t]?.value,...r}):t==="boolean"?qe(e,r):t==="string"?we(e,r):e?.toString()??""};function qe(e,t){let r=typeof e=="string"?e==="true":!!e,o=t?.trueLabel??"Yes",s=t?.falseLabel??"No";return r?o:s}function we(e,t){if(!q(e))return "";let r=String(e);switch(t?.textTransform){case "capitalize":r=Z(r);break;case "uppercase":r=r.toUpperCase();break;case "lowercase":r=r.toLowerCase();break}return t?.ellipsis&&r.length>t.ellipsis&&(r=r.slice(0,t.ellipsis)+"..."),r}function Ue(e,{thouSep:t,decSep:r,decDigits:o,method:s}){if(e==null||isNaN(Number(e)))return "";let n=typeof e=="string"?parseFloat(e):e;if(s)if(typeof o=="number"){let p=Math.pow(10,o);n=Math[s](n*p)/p;}else n=Math[s](n);else if(typeof o=="number"){let p=Math.pow(10,o);n=Math.floor(n*p)/p;}let u=0;if(o==="auto"){let p=n.toString(),g=p.indexOf(".");g!==-1&&(u=p.length-g-1);}let i={style:"decimal",useGrouping:true,minimumFractionDigits:o==="auto"?u:o||0,maximumFractionDigits:o==="auto"?u:o||0,minimumIntegerDigits:1};return n.toLocaleString("en-US",i).replace(/\./g,"decSep").replace(/,/g,"thouSep").replace(/decSep/g,r).replace(/thouSep/g,t)}function Ne(e,{display:t,value:r}){if(!q(e))return e;let o=j(e,r);return o.isValid()?o.format(t):e}function Ft(e,{interval:t,lead:r}){let o=useRef(null);useEffect(()=>{o.current=e;},[e]),useEffect(()=>{let s=()=>o.current();if(r&&s(),t!==null){let n=setInterval(s,t);return ()=>clearInterval(n)}},[t]);}function Ht(e,t,r){let[o,s]=useState(false),n=(p,g)=>typeof e=="string"&&p===e||typeof e=="number"&&g===e,u=p=>p!==null&&(["INPUT","TEXTAREA","SELECT","BUTTON"].includes(p.tagName)||p.hasAttribute("contentEditable")),i=p=>{let{key:g,keyCode:P}=p,b=p.ctrlKey,x=p.altKey,C=p.shiftKey;if(!u(document.activeElement))if(t)if(typeof t=="string")n(g,P)&&(t==="ctrl"&&b||t==="alt"&&x||t==="shift"&&C)&&(p.preventDefault(),r&&p.stopPropagation(),s(!o));else {let R=t.every(T=>T==="ctrl"?b:T==="alt"?x:T==="shift"?C:false);n(g,P)&&R&&(p.preventDefault(),r&&p.stopPropagation(),s(!o));}else n(g,P)&&(p.preventDefault(),r&&p.stopPropagation(),s(!o));},d=({key:p,keyCode:g})=>{n(p,g)&&s(false);};return useEffect(()=>(window.addEventListener("keydown",i),window.addEventListener("keyup",d),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",d);}),[]),o}var Vt=({url:e,token:t,beforeRequest:r,onCallback:o,headers:s,onUnauthorized:n,handleToast:u,handleAuthorization:i,disabledToastWhenCancel:d,withCredentials:p,encryptRequest:g,encryptResponse:P,passphrase:b})=>{let{encrypt:x,decrypt:C,passphrase:R}=F(),T=(m,l,a,f)=>{let y=f?.code==="ERR_CANCELED",h=m.status===401,c=m?.data;if((typeof a?.encryptResponse=="boolean"?a?.encryptResponse:P)&&c){let v=a?.passphrase?typeof a.passphrase=="boolean"&&a.passphrase?R:a.passphrase:b;try{c=C(c,v);}catch{try{c=C(c,R);}catch{}}}let D={...o({...m,data:c,isCancel:y,isUnauthorization:h},f),isCancel:y,isUnauthorization:h,httpCode:m.status},B=typeof a?.disabledToastWhenCancel=="boolean"?a?.disabledToastWhenCancel:d,fe=i?i(D,a):!h;if((a?.infoSuccess&&D.status||a?.infoError&&!D.status)&&u&&(!y||!B)&&u(D),!fe&&(!y||!a?.disabledHandleUnauthorized)){let v=a?.onUnauthorized||n;v&&v(D);}if(l)l(D);else return D},S=(m,l=()=>{})=>Ke.create({baseURL:`${e}`,withCredentials:typeof m.withCredentials=="boolean"?m.withCredentials:p})(m).then(l).catch(f=>l(f.response,f)),A=(m,l,a,f,y)=>{let c={...{token:true,infoError:true,infoSuccess:true,responseType:"json"},...y},w={"Content-Type":"application/json",...s,...c.headers};if(c.token&&(typeof c.token=="boolean"?t&&(w.Authorization=`Bearer ${t}`):c.token&&(w.Authorization=`Bearer ${c.token}`)),r&&(a=r(a)),(typeof c?.encryptRequest=="boolean"?c?.encryptRequest:g)&&a){let D=y?.passphrase?typeof y.passphrase=="boolean"&&y.passphrase?R:y.passphrase:b;a=x(a,D);}return S({url:l,method:m,data:a,headers:w,responseType:c.responseType,signal:c.signal,withCredentials:c.withCredentials,onUploadProgress:D=>{c?.onUploadProgress&&c?.onUploadProgress(D);}},(D,B)=>T(D,f,c,B))};return {client:S,post:(m,l,a,f)=>A("POST",`${m}`,l,a,f),put:(m,l,a,f)=>A("PUT",`${m}`,l,a,f),patch:(m,l,a,f)=>A("PATCH",`${m}`,l,a,f),delete:(m,l,a)=>A("DELETE",`${m}`,null,l,a),get:(m,l,a)=>A("GET",`${m}`,null,l,a),upload:(m,l,a,f)=>{let y=new FormData;return Object.keys(l).forEach(h=>y.append(h,l[h])),A("POST",`${m}`,y,a,{infoSuccess:false,...f,headers:{"Content-Type":"multipart/form-data",...f?.headers}})}}};function Xt(e,t){let[r,o]=useState(false),[s,n]=useState(),[u,i]=useState(0),d=useRef(null);return useEffect(()=>{if(t?.abortOnUnmount)return ()=>{d.current?.abort();}},[]),[async b=>{d.current?.abort();let x=new AbortController;d.current=x,o(true),t?.beforeRequest&&(b=t?.beforeRequest(b)),t?.logging&&console.log("Before request",b);let C={...t,signal:x.signal,onUploadProgress:T=>{let S=Math.round(T.loaded*100/(T.total||1));i(S);}},R=q(b)?await e(b,void 0,C):await e(void 0,C);t?.logging&&console.log("After response",R),n(R),o(false),i(0),R.status&&t?.onSuccess&&t?.onSuccess(R),!R.status&&t?.onError&&t?.onError(R),t?.afterResponse&&t?.afterResponse(R);},{...s,loading:r,abort:()=>{d.current?.abort(),d.current=null,o(false),i(0);},progress:u,reset:()=>{o(false),i(0),n(null);}}]}function Be(e,t){let{disableHysteresis:r=false,threshold:o=100,target:s}=t,n=e.current;return s&&(typeof s.pageYOffset=="number"?e.current=s.pageYOffset:s.scrollTop!==void 0&&(e.current=s.scrollTop)),!r&&n!==void 0&&e.current<n?false:(e.current||0)>o}var He=typeof window<"u"?window:null;function Qt(e={}){let{getTrigger:t=Be,target:r=He,disableHysteresis:o=false,threshold:s=100}=e,n=V.useRef(0),[u,i]=V.useState(()=>t(n,{disableHysteresis:o,threshold:s,target:r}));return V.useEffect(()=>{let d=()=>{i(t(n,{disableHysteresis:o,threshold:s,target:r}));};if(d(),r)return r.addEventListener("scroll",d,{passive:true}),()=>{r.removeEventListener("scroll",d);}},[r,t,o,s]),u}var rr=(e,t)=>{let r=t||e.__path||e.name;return M(r).useStore()};var sr=(e,t)=>{let r=o=>e(o);return r.displayName=t,r},ar=(e,t)=>{let r={};r.others=[];let o=s=>{V.Children.forEach(s,n=>{if(V.isValidElement(n)){let u=n.type.displayName;if(t.includes(u))r[u]=n;else {let i=n;i.props?.children?o(i.props.children):r.others.push(n);}}else r.others.push(n);});};return o(e),r};function Ie(e,t=[]){let r={};for(let o in e){let s=e[o];if(typeof s=="function"){let n=s.bind(null);n.__path=[...t,o].join("."),r[o]=n;}else typeof s=="object"&&s!==null?r[o]=Ie(s,[...t,o]):r[o]=s;}return r}export{ge as BgsCoreProvider,Se as DataTypeEnum,Pe as HttpMethod,Z as capitalizeWords,Vt as createApiHelper,sr as createElement,ae as createStore,Ye as debounce,I as decrypt,oe as decryptString,We as diffJson,H as encrypt,ne as encryptString,Y as generateCacheKey,je as generateUUID,O as getFieldValue,Ve as isArray,q as isNotEmpty,Xe as jsonCopy,X as labelFormatter,ze as mappingUndefinedtoNull,Je as renderChildren,_e as sorting,ar as splitElement,de as stableStringify,Ge as summary,Ae as useApiLoad,Xt as useApiSend,rr as useApiStore,N as useBgsCore,F as useCrypto,Ot as useDelay,Et as useFormatted,Ft as useInterval,Ht as useKeyPress,Qt as useScrollTrigger,se as useStorage,Ie as wrapApi};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bgscore/react-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"description": "A React utility library that provides advanced API hooks (fetch, mutation, caching). Built for scalable and flexible data handling in modern React applications.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|